diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index 39d59d571a..4d9ab35368 100755 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -1239,7 +1239,10 @@ class ExtraField extends Model $field_details['display_text'] ); - $defaults['extra_'.$field_details['variable']] = api_get_local_time(); + $defaults = []; + if (EntityExtraField::LP_ITEM_FIELD_TYPE !== (int) $field_details['extra_field_type']) { + $defaults['extra_'.$field_details['variable']] = api_get_local_time(); + } if (!isset($form->_defaultValues['extra_'.$field_details['variable']])) { $form->setDefaults($defaults); } diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index b75d924f8e..b7b3e38b2b 100755 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -391,6 +391,9 @@ class ExtraFieldValue extends Model case ExtraField::FIELD_TYPE_DATETIME: $d = DateTime::createFromFormat('Y-m-d H:i', $value); $valid = $d && $d->format('Y-m-d H:i') === $value; + if (!$valid && EntityExtraField::LP_ITEM_FIELD_TYPE === (int) $extraFieldInfo['extra_field_type']) { + $valid = empty($value); + } if ($valid) { $newParams = [ 'item_id' => $params['item_id'], diff --git a/main/lp/blank.php b/main/lp/blank.php index efbd04054d..2b2ba10695 100755 --- a/main/lp/blank.php +++ b/main/lp/blank.php @@ -34,6 +34,17 @@ if (isset($_GET['error'])) { $message = Display::return_message(Security::remove_XSS($prerequisiteMessage), 'warning'); } + // Validates and display error message for prerequisite dates. + /** @var learnpath $lp */ + $lp = Session::read('oLP'); + $itemId = $lp->get_current_item_id(); + $datesMatch = $lp->prerequistesDatesMatch($itemId); + if (!$datesMatch) { + $currentItem = $lp->getItem($itemId); + if (!empty($currentItem->prereq_alert)) { + $message = Display::return_message($currentItem->prereq_alert, 'warning'); + } + } break; case 'document_not_found': $message = Display::return_message(get_lang('FileNotFound'), 'warning'); diff --git a/main/lp/learnpath.class.php b/main/lp/learnpath.class.php index f8dc557395..3ef82bb510 100755 --- a/main/lp/learnpath.class.php +++ b/main/lp/learnpath.class.php @@ -4463,19 +4463,30 @@ class learnpath 'end_date' ); - $result = true; - if ( - !empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) && - !empty($endDate) && isset($endDate['value']) && !empty($endDate['value']) + $now = time(); + $start = !empty($startDate['value']) ? api_strtotime($startDate['value']) : 0; + $end = !empty($endDate['value']) ? api_strtotime($endDate['value']) : 0; + $result = false; + + if (($start == 0 && $end == 0) || + (($start > 0 && $end == 0) && $now > $start) || + (($start == 0 && $end > 0) && $now < $end) || + (($start > 0 && $end > 0) && ($now > $start && $now < $end)) ) { - $now = time(); - $start = api_strtotime($startDate['value']); - $end = api_strtotime($endDate['value']); - $result = ($now > $start && $now < $end); + $result = true; } if (!$result) { - $this->set_error_msg(get_lang('ItemCanNotBeAccessedPrerequisiteDates')); + $errMsg = get_lang('ItemCanNotBeAccessedPrerequisiteDates'); + if ($start > 0 && $start > $now) { + $errMsg = get_lang('AccessibleFrom').' '.api_format_date($start, DATE_TIME_FORMAT_LONG); + } + if ($end > 0 && $end < $now) { + $errMsg = get_lang('NoMoreAccessible'); + } + $this->set_error_msg($errMsg); + $currentItem = $this->getItem($itemId); + $currentItem->prereq_alert = $errMsg; } return $result; @@ -10247,7 +10258,7 @@ class learnpath $form->addHidden('type', TOOL_STUDENTPUBLICATION); $form->addHidden('post_time', time()); $this->setAuthorLpItem($form); - $form->setDefaults(['title' => $item_title]); + $form->setDefaults(['title' => $item_title, 'start_date' => null]); $return = '