diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index 4ac2f2dbef..b491f9ef4b 100644 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -2385,6 +2385,16 @@ ALTER TABLE c_wiki_category ADD CONSTRAINT FK_17F1099A727ACA70 FOREIGN KEY (pare ] ];*/ +// It adds option to define prerequisites with start and end dates for learnpath items. +// Requires DB changes: +/* +INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, default_value, field_order, visible_to_self, visible_to_others, changeable, filter, created_at) VALUES +(7, 7, 'start_date', 'StartDate', '', 0, 1, 0, 1, 0, NOW()); +INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, default_value, field_order, visible_to_self, visible_to_others, changeable, filter, created_at) VALUES +(7, 7, 'end_date', 'EndDate', '', 0, 1, 0, 1, 0, NOW()); +*/ +//$_configuration['lp_item_prerequisite_dates'] = false; + // Configuration setting to make some extra field required in session creation form on main/session/session_add.php. // $_configuration['session_creation_form_set_extra_fields_mandatory'] = ['fields' => ['client','region']]; diff --git a/main/lp/learnpath.class.php b/main/lp/learnpath.class.php index 30cd8311c6..f8dc557395 100755 --- a/main/lp/learnpath.class.php +++ b/main/lp/learnpath.class.php @@ -4407,8 +4407,10 @@ class learnpath if ($debug > 0) { error_log('Found prereq_string is empty return true'); } + // checks the dates values as prerequisites + $result = $this->prerequistesDatesMatch($itemId); - return true; + return $result; } // Clean spaces. @@ -4440,9 +4442,48 @@ class learnpath error_log('End of prerequisites_match(). Error message is now '.$this->error); } + if (true === $result) { + // checks the dates values as prerequisites + $result = $this->prerequistesDatesMatch($itemId); + } + return $result; } + public function prerequistesDatesMatch(int $itemId) + { + if (true === api_get_configuration_value('lp_item_prerequisite_dates')) { + $extraFieldValue = new ExtraFieldValue('lp_item'); + $startDate = $extraFieldValue->get_values_by_handler_and_field_variable( + $itemId, + 'start_date' + ); + $endDate = $extraFieldValue->get_values_by_handler_and_field_variable( + $itemId, + 'end_date' + ); + + $result = true; + if ( + !empty($startDate) && isset($startDate['value']) && !empty($startDate['value']) && + !empty($endDate) && isset($endDate['value']) && !empty($endDate['value']) + ) { + $now = time(); + $start = api_strtotime($startDate['value']); + $end = api_strtotime($endDate['value']); + $result = ($now > $start && $now < $end); + } + + if (!$result) { + $this->set_error_msg(get_lang('ItemCanNotBeAccessedPrerequisiteDates')); + } + + return $result; + } + + return true; + } + /** * Updates learnpath attributes to point to the previous element * The last part is similar to set_current_item but processing the other way around. @@ -7940,6 +7981,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); } @@ -8292,6 +8336,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); } @@ -8488,6 +8535,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); } @@ -8696,8 +8746,12 @@ class learnpath } if ('edit' === $action) { + $excludeExtraFields = []; + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = ['start_date', 'end_date']; + } $extraField = new ExtraField('lp_item'); - $extraField->addElements($form, $id); + $extraField->addElements($form, $id, $excludeExtraFields); } $form->addButtonSave(get_lang('Ok'), 'submit_button'); @@ -9236,6 +9290,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); } @@ -9592,8 +9649,12 @@ class learnpath } if ('edit' === $action) { + $excludeExtraFields = []; + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = ['start_date', 'end_date']; + } $extraField = new ExtraField('lp_item'); - $extraField->addElements($form, $id); + $extraField->addElements($form, $id, $excludeExtraFields); } $arrHide = []; @@ -9984,6 +10045,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); } @@ -10156,6 +10220,9 @@ class learnpath } if ('edit' === $action) { + if (true !== api_get_configuration_value('lp_item_prerequisite_dates')) { + $excludeExtraFields = array_merge($excludeExtraFields, ['start_date', 'end_date']); + } $extraField = new ExtraField('lp_item'); $extraField->addElements($form, $id, $excludeExtraFields); }