Learnpath: Improve validations of item prerequisites dates - refs BT#20369

pull/4674/head
Christian 2 years ago
parent 1da55c48ac
commit 217373a30f
  1. 5
      main/inc/lib/extra_field.lib.php
  2. 3
      main/inc/lib/extra_field_value.lib.php
  3. 22
      main/lp/learnpath.class.php
  4. 13
      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']] = (EntityExtraField::LP_ITEM_FIELD_TYPE == $field_details['extra_field_type'] ? '' : 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'],

@ -4464,24 +4464,24 @@ class learnpath
); );
$now = time(); $now = time();
$start = 0; $start = !empty($startDate['value']) ? api_strtotime($startDate['value']) : 0;
$end = 0; $end = !empty($endDate['value']) ? api_strtotime($endDate['value']) : 0;
$result = true; $result = false;
if (
!empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) && if (($start == 0 && $end == 0) ||
!empty($endDate) && isset($endDate['value']) && !empty($endDate['value']) (($start > 0 && $end == 0) && $now > $start) ||
(($start == 0 && $end > 0) && $now < $end) ||
(($start > 0 && $end > 0) && ($now > $start && $now < $end))
) { ) {
$start = api_strtotime($startDate['value']); $result = true;
$end = api_strtotime($endDate['value']);
$result = ($now > $start && $now < $end);
} }
if (!$result) { if (!$result) {
$errMsg = get_lang('ItemCanNotBeAccessedPrerequisiteDates'); $errMsg = get_lang('ItemCanNotBeAccessedPrerequisiteDates');
if ($start > $now) { if ($start > 0 && $start > $now) {
$errMsg = get_lang('AccessibleFrom').' '.api_format_date($start, DATE_TIME_FORMAT_LONG); $errMsg = get_lang('AccessibleFrom').' '.api_format_date($start, DATE_TIME_FORMAT_LONG);
} }
if ($end < $now) { if ($end > 0 && $end < $now) {
$errMsg = get_lang('NoMoreAccessible'); $errMsg = get_lang('NoMoreAccessible');
} }
$this->set_error_msg($errMsg); $this->set_error_msg($errMsg);

@ -911,10 +911,15 @@ switch ($action) {
$error = false; $error = false;
$errMsg = ''; $errMsg = '';
if (true === api_get_configuration_value('lp_item_prerequisite_dates')) { if (true === api_get_configuration_value('lp_item_prerequisite_dates')) {
$extraStartDate = $_POST['extra_start_date'] ?? ''; if (!isset($_POST['extra_start_date'])) {
$extraEndDate = $_POST['extra_end_date'] ?? ''; $_POST['extra_start_date'] = 0;
$error = ((!empty($extraStartDate) && empty($extraEndDate)) || (empty($extraStartDate) && !empty($extraEndDate))); }
if (!$error) { 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)); $error = !(strtotime($extraEndDate) >= strtotime($extraStartDate));
} }
if ($error) { if ($error) {

Loading…
Cancel
Save