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']
);
$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']])) {
$form->setDefaults($defaults);
}

@ -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'],

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

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

Loading…
Cancel
Save