diff --git a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php index 9c7636177e..af8049e51a 100644 --- a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php +++ b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php @@ -240,8 +240,6 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $expendedTimeMax = $plugin->get('yearly_hours_limit'); $expendedTime = 0; - $numberOfApprovedInductionSessions = 0; - if (is_array($sessions) && count($sessions) > 0) { foreach ($sessions as $session) { $costField = $extra->get_values_by_handler_and_field_variable($session['id'], 'cost'); @@ -249,45 +247,6 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $teachingHoursField = $extra->get_values_by_handler_and_field_variable($session['id'], 'teaching_hours'); $expendedTime += $teachingHoursField['field_value']; - - $inductionField = $extra->get_values_by_handler_and_field_variable( - $session['id'], - 'is_induccion_session' - ); - - if ($inductionField === false) { - continue; - } - - $isInductionSession = boolval($inductionField['field_value']); - - if ($isInductionSession) { - $numberOfApprovedCourses = 0; - $sessionCourses = SessionManager::get_course_list_by_session_id($session['id']); - - foreach ($sessionCourses as $course) { - $courseCategories = Category::load( - null, - null, - $course['code'], - null, - null, - $session['id'], - false - ); - - if ( - count($courseCategories) > 0 && - Category::userIsApprovedInCourse($userId, $courseCategories[0]) - ) { - $numberOfApprovedCourses++; - } - } - - if ($numberOfApprovedCourses === count($sessionCourses)) { - $numberOfApprovedInductionSessions++; - } - } } } @@ -334,6 +293,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface } $checkInduction = $plugin->get('check_induction'); + $numberOfApprovedInductionSessions = $this->getApprovedInductionSessions($userId); $completedInduction = $numberOfApprovedInductionSessions > 0; if ($checkInduction == 'true' && !$completedInduction) { @@ -1312,4 +1272,59 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface return $templateContent; } + + /** + * Get the count of approved induction sessions by a user + * @param int $userId The user id + * @return int The count of approved sessions + */ + private function getApprovedInductionSessions($userId) + { + $sql = "SELECT s.id FROM session AS s " + . "INNER JOIN session_field_values AS sfv ON s.id = sfv.session_id " + . "INNER JOIN session_field AS sf ON sfv.field_id = sf.id " + . "INNER JOIN session_rel_user AS su ON s.id = su.id_session " + . "WHERE sf.field_variable = 'is_induccion_session' " + . "AND su.relation_type = 0 " + . "AND su.id_user = " . intval($userId); + + $result = Database::query($sql); + + if ($result === false) { + return 0; + } + + $numberOfApproved = 0; + + while ($session = Database::fetch_assoc($result)) { + $numberOfApprovedCourses = 0; + $courses = SessionManager::get_course_list_by_session_id($session['id']); + + foreach ($courses as $course) { + $courseCategories = Category::load( + null, + null, + $course['code'], + null, + null, + $session['id'], + false + ); + + if ( + count($courseCategories) > 0 && + Category::userIsApprovedInCourse($userId, $courseCategories[0]) + ) { + $numberOfApprovedCourses++; + } + } + + if ($numberOfApprovedCourses === count($courses)) { + $numberOfApproved++; + } + } + + return $numberOfApproved; + } + }