Merge pull request #4674 from christianbeeznest/FS-20639-2

Learnpath: Improve dates as item prerequisites - refs BT#20639
pull/4686/head
Nicolas Ducoulombier 3 years ago committed by GitHub
commit 42dc0df17a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      main/inc/lib/extra_field.lib.php
  2. 3
      main/inc/lib/extra_field_value.lib.php
  3. 11
      main/lp/blank.php
  4. 31
      main/lp/learnpath.class.php
  5. 26
      main/lp/lp_controller.php

@ -1239,7 +1239,10 @@ class ExtraField extends Model
$field_details['display_text'] $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']])) { if (!isset($form->_defaultValues['extra_'.$field_details['variable']])) {
$form->setDefaults($defaults); $form->setDefaults($defaults);
} }

@ -391,6 +391,9 @@ class ExtraFieldValue extends Model
case ExtraField::FIELD_TYPE_DATETIME: case ExtraField::FIELD_TYPE_DATETIME:
$d = DateTime::createFromFormat('Y-m-d H:i', $value); $d = DateTime::createFromFormat('Y-m-d H:i', $value);
$valid = $d && $d->format('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) { if ($valid) {
$newParams = [ $newParams = [
'item_id' => $params['item_id'], 'item_id' => $params['item_id'],

@ -34,6 +34,17 @@ if (isset($_GET['error'])) {
$message = Display::return_message(Security::remove_XSS($prerequisiteMessage), 'warning'); $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; break;
case 'document_not_found': case 'document_not_found':
$message = Display::return_message(get_lang('FileNotFound'), 'warning'); $message = Display::return_message(get_lang('FileNotFound'), 'warning');

@ -4463,19 +4463,30 @@ class learnpath
'end_date' 'end_date'
); );
$result = true; $now = time();
if ( $start = !empty($startDate['value']) ? api_strtotime($startDate['value']) : 0;
!empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) && $end = !empty($endDate['value']) ? api_strtotime($endDate['value']) : 0;
!empty($endDate) && isset($endDate['value']) && !empty($endDate['value']) $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(); $result = true;
$start = api_strtotime($startDate['value']);
$end = api_strtotime($endDate['value']);
$result = ($now > $start && $now < $end);
} }
if (!$result) { 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; return $result;
@ -10247,7 +10258,7 @@ class learnpath
$form->addHidden('type', TOOL_STUDENTPUBLICATION); $form->addHidden('type', TOOL_STUDENTPUBLICATION);
$form->addHidden('post_time', time()); $form->addHidden('post_time', time());
$this->setAuthorLpItem($form); $this->setAuthorLpItem($form);
$form->setDefaults(['title' => $item_title]); $form->setDefaults(['title' => $item_title, 'start_date' => null]);
$return = '<div class="sectioncomment">'; $return = '<div class="sectioncomment">';
$return .= $form->returnForm(); $return .= $form->returnForm();

@ -907,6 +907,32 @@ switch ($action) {
$maxTimeAllowed = isset($_POST['maxTimeAllowed']) ? $_POST['maxTimeAllowed'] : ''; $maxTimeAllowed = isset($_POST['maxTimeAllowed']) ? $_POST['maxTimeAllowed'] : '';
$url = isset($_POST['url']) ? $_POST['url'] : ''; $url = isset($_POST['url']) ? $_POST['url'] : '';
// form validations after submit.
$error = false;
$errMsg = '';
if (true === api_get_configuration_value('lp_item_prerequisite_dates')) {
if (!isset($_POST['extra_start_date'])) {
$_POST['extra_start_date'] = 0;
}
if (!isset($_POST['extra_end_date'])) {
$_POST['extra_end_date'] = 0;
}
$extraStartDate = $_POST['extra_start_date'];
$extraEndDate = $_POST['extra_end_date'];
if (!empty($extraStartDate) && !empty($extraEndDate)) {
$error = !(strtotime($extraEndDate) >= strtotime($extraStartDate));
}
if ($error) {
$errMsg = get_lang('StartDateMustBeBeforeTheEndDate');
}
}
if ($error) {
Display::addFlash(Display::return_message($errMsg, 'error'));
header('Location: '.api_request_uri());
exit;
}
$_SESSION['oLP']->edit_item( $_SESSION['oLP']->edit_item(
$_REQUEST['id'], $_REQUEST['id'],
$_POST['parent'], $_POST['parent'],

Loading…
Cancel
Save