Fix induction sessions - refs BT#9092

1.10.x
Angel Fernando Quiroz Campos 11 years ago
parent 7a7d5b3ee4
commit 202d7d8358
  1. 97
      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;
}
}

Loading…
Cancel
Save