From 021f4339de306972bf4fdb1febb092f829f579a4 Mon Sep 17 00:00:00 2001 From: Julio Date: Fri, 8 Oct 2021 10:36:40 +0200 Subject: [PATCH] Sessions: Refactor code - Replace constant from SESSION_COACH to GENERAL_COACH - Add asserts - Format code - Rename hasCoachInCourseWithStatus to hasCourseCoachInCourse --- public/main/admin/statistics/index.php | 2 +- .../admin/teachers_time_by_session_report.php | 2 +- public/main/inc/lib/api.lib.php | 12 ++-- public/main/inc/lib/course.lib.php | 6 +- public/main/inc/lib/myspace.lib.php | 15 ++-- public/main/inc/lib/sessionmanager.lib.php | 22 +++--- public/main/inc/lib/tracking.lib.php | 71 ++++++++++++------- public/main/inc/lib/usermanager.lib.php | 12 ++-- public/main/mySpace/ti_report.php | 3 +- public/main/session/session_export.php | 6 +- public/main/session/session_import.php | 6 +- src/CoreBundle/Entity/Session.php | 59 ++++++--------- src/CoreBundle/Entity/SessionRelUser.php | 5 ++ src/CoreBundle/Entity/User.php | 4 +- .../Schema/V200/Version20201212195011.php | 3 +- .../Repository/SessionRepository.php | 7 +- .../Authorization/Voter/SessionVoter.php | 2 +- 17 files changed, 125 insertions(+), 112 deletions(-) diff --git a/public/main/admin/statistics/index.php b/public/main/admin/statistics/index.php index b7293285ee..889bd02cd2 100644 --- a/public/main/admin/statistics/index.php +++ b/public/main/admin/statistics/index.php @@ -413,7 +413,7 @@ switch ($report) { WHERE (s.display_start_date BETWEEN '$start' AND '$end' OR s.display_end_date BETWEEN '$start' AND '$end') - AND sru.relation_type = ".Session::SESSION_COACH." + AND sru.relation_type = ".Session::GENERAL_COACH." $statusCondition "; $result = Database::query($sql); diff --git a/public/main/admin/teachers_time_by_session_report.php b/public/main/admin/teachers_time_by_session_report.php index 23ed144d1a..2a70e65d89 100644 --- a/public/main/admin/teachers_time_by_session_report.php +++ b/public/main/admin/teachers_time_by_session_report.php @@ -78,7 +78,7 @@ if ($session) { $usersInfo[$user->getId()][$course->getId().'_last_work'] = null; $usersInfo[$user->getId()][$course->getId().'_time_spent_of_course'] = null; - if (!$session->hasCoachInCourseWithStatus($user, $course)) { + if (!$session->hasCourseCoachInCourse($user, $course)) { continue; } diff --git a/public/main/inc/lib/api.lib.php b/public/main/inc/lib/api.lib.php index d83c1deafe..60cb328098 100644 --- a/public/main/inc/lib/api.lib.php +++ b/public/main/inc/lib/api.lib.php @@ -2963,8 +2963,10 @@ function api_is_coach($session_id = 0, $courseId = null, $check_student_view = t $sql = "SELECT DISTINCT s.id FROM $session_table AS s INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id - WHERE sru.user_id = $userId AND s.id = $session_id AND sru.relation_type = ".SessionEntity::SESSION_COACH - ." ORDER BY s.access_start_date, s.access_end_date, s.name"; + WHERE sru.user_id = $userId AND + s.id = $session_id AND + sru.relation_type = ".SessionEntity::GENERAL_COACH." + ORDER BY s.access_start_date, s.access_end_date, s.name"; $result = Database::query($sql); if (!empty($sessionIsCoach)) { $sessionIsCoach = array_merge( @@ -4841,11 +4843,11 @@ function api_is_course_visible_for_user($userid = null, $cid = null) $sql = "SELECT sru_2.user_id AS session_admin_id, sru_1.user_id AS session_coach_id FROM $tbl_session AS s INNER JOIN $tblSessionRelUser sru_1 - ON (sru_1.session_id = s.id AND sru_1.relation_type = ".SessionEntity::SESSION_COACH.") + ON (sru_1.session_id = s.id AND sru_1.relation_type = ".SessionEntity::GENERAL_COACH.") INNER JOIN $tblSessionRelUser sru_2 - ON (sru_2.session_id = s.id AND sru_2.relation_type = ".SessionEntity::SESSION_ADMIN.") + ON (sru_2.session_id = s.id AND sru_2.relation_type = ".SessionEntity::SESSION_ADMIN.") INNER JOIN $tbl_session_course src - ON (src.session_id = s.id AND src.c_id = $courseId)"; + ON (src.session_id = s.id AND src.c_id = $courseId)"; $result = Database::query($sql); $row = Database::store_result($result); diff --git a/public/main/inc/lib/course.lib.php b/public/main/inc/lib/course.lib.php index 34b7a444e2..f47fcf1b3c 100644 --- a/public/main/inc/lib/course.lib.php +++ b/public/main/inc/lib/course.lib.php @@ -1195,9 +1195,9 @@ class CourseManager } $sql = "SELECT s.id FROM ".Database::get_main_table(TABLE_MAIN_SESSION)." s - INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION_USER)." sru - ON (sru.session_id = s.id AND sru.relation_type = ".SessionEntity::SESSION_COACH.") - WHERE sru.user_id = $userId AND s.id = $session_id"; + INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION_USER)." sru + ON (sru.session_id = s.id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.") + WHERE sru.user_id = $userId AND s.id = $session_id"; if (Database::num_rows(Database::query($sql)) > 0) { return true; diff --git a/public/main/inc/lib/myspace.lib.php b/public/main/inc/lib/myspace.lib.php index 6214ee34d5..29d5751e17 100644 --- a/public/main/inc/lib/myspace.lib.php +++ b/public/main/inc/lib/myspace.lib.php @@ -565,8 +565,10 @@ class MySpace $sql_session_coach = "SELECT u.id AS user_id, u.lastname, u.firstname, MAX(tel.login_date) AS login_date FROM $tbl_user u - INNER JOIN $tbl_track_login tel ON tel.login_user_id = u.id - INNER JOIN $tblSessionRelUser sru ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::SESSION_COACH.") + INNER JOIN $tbl_track_login tel + ON tel.login_user_id = u.id + INNER JOIN $tblSessionRelUser sru + ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.") GROUP BY u.id ORDER BY login_date $tracking_direction"; @@ -576,9 +578,12 @@ class MySpace if (-1 != $access_url_id) { $sql_session_coach = "SELECT u.id AS user_id, u.lastname, u.firstname, MAX(tel.login_date) AS login_date FROM $tbl_user u - INNER JOIN $tbl_track_login tel ON tel.login_user_id = u.id - INNER JOIN $tblSessionRelUser sru ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::SESSION_COACH.") - INNER JOIN $tbl_session_rel_access_url aurs ON sru.session_id = aurs.session_id + INNER JOIN $tbl_track_login tel + ON tel.login_user_id = u.id + INNER JOIN $tblSessionRelUser sru + ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.") + INNER JOIN $tbl_session_rel_access_url aurs + ON sru.session_id = aurs.session_id WHERE aurs.access_url_id = $access_url_id GROUP BY u.id ORDER BY login_date $tracking_direction"; diff --git a/public/main/inc/lib/sessionmanager.lib.php b/public/main/inc/lib/sessionmanager.lib.php index b3272bede5..c9b1a1dae0 100644 --- a/public/main/inc/lib/sessionmanager.lib.php +++ b/public/main/inc/lib/sessionmanager.lib.php @@ -567,7 +567,7 @@ class SessionManager } if ($allowTeachersToCreateSessions) { - $relationTypeList[] = Session::SESSION_COACH; + $relationTypeList[] = Session::GENERAL_COACH; } $where .= " AND (sru.user_id = $userId AND sru.relation_type IN(".implode(',', $relationTypeList)."))"; @@ -4205,7 +4205,7 @@ class SessionManager } /** - * The general coach (session_rel_user.relation_type = Session::SESSION_COACH). + * The general coach (session_rel_user.relation_type = Session::GENERAL_COACH). * * @param int $user_id user id * @param bool $asPlatformAdmin The user is platform admin, return everything @@ -4222,7 +4222,7 @@ class SessionManager if (!$asPlatformAdmin) { $innerJoin = " INNER JOIN session_rel_user AS sru ON (s.id = sru.session_id) "; - $whereConditions = "sru.user_id = $user_id AND sru.relation_type = ".Session::SESSION_COACH; + $whereConditions = "sru.user_id = $user_id AND sru.relation_type = ".Session::GENERAL_COACH; } if (api_is_multiple_url_enabled()) { @@ -5004,7 +5004,7 @@ class SessionManager Database::insert( $tbl_session_user, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coach_id, @@ -5014,7 +5014,7 @@ class SessionManager Database::insert( $tbl_session_user, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $defaultUserId, @@ -5082,7 +5082,7 @@ class SessionManager Database::insert( $tbl_session_user, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coach_id, @@ -5092,7 +5092,7 @@ class SessionManager Database::insert( $tbl_session_user, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $defaultUserId, @@ -5220,12 +5220,12 @@ class SessionManager Database::update($tbl_session, $params, ['id = ?' => $session_id]); Database::delete( $tbl_session_user, - ['session_id = ? AND relation_type = ?' => [$session_id, Session::SESSION_COACH]] + ['session_id = ? AND relation_type = ?' => [$session_id, Session::GENERAL_COACH]] ); Database::insert( $tbl_session_user, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coach_id, @@ -8031,7 +8031,7 @@ class SessionManager $user_id = api_get_user_id(); $where .= ' AND (sru.relation_type = '.Session::SESSION_ADMIN." AND sru.user_id = $user_id) "; } else { - $where .= ' AND sru.relation_type = '.Session::SESSION_COACH.' '; + $where .= ' AND sru.relation_type = '.Session::GENERAL_COACH.' '; } $extraFieldTables = ''; @@ -8705,7 +8705,7 @@ class SessionManager $user_id = api_get_user_id(); $where .= ' AND (sru.relation_type = '.Session::SESSION_ADMIN." AND sru.user_id = $user_id) "; } else { - $where .= ' AND sru.relation_type = '.Session::SESSION_COACH.' '; + $where .= ' AND sru.relation_type = '.Session::GENERAL_COACH.' '; } } diff --git a/public/main/inc/lib/tracking.lib.php b/public/main/inc/lib/tracking.lib.php index a0f9028258..d09ffbd00f 100644 --- a/public/main/inc/lib/tracking.lib.php +++ b/public/main/inc/lib/tracking.lib.php @@ -3576,24 +3576,32 @@ class Tracking // Then, courses where $coach_id is coach of the session $sql = "SELECT srcru.user_id FROM $tbl_session_course_user srcru - INNER JOIN $tbl_session_course src ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) - INNER JOIN $tbl_session s ON srcru.session_id = s.id AND src.session_id = s.id + INNER JOIN $tbl_session_course src + ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) + INNER JOIN $tbl_session s + ON srcru.session_id = s.id AND src.session_id = s.id INNER JOIN $tbl_session_user sru on s.id = sru.session_id - WHERE srcru.status = ".SessionEntity::STUDENT." - AND sru.relation_type = ".SessionEntity::SESSION_COACH." - AND sru.user_id = $coach_id"; + WHERE + srcru.status = ".SessionEntity::STUDENT." AND + sru.relation_type = ".SessionEntity::GENERAL_COACH." AND + sru.user_id = $coach_id"; if (-1 != $access_url_id) { $sql = "SELECT srcru.user_id - FROM $tbl_session_course_user srcru - INNER JOIN $tbl_session_course src ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) - INNER JOIN $tbl_session s ON srcru.session_id = s.id AND src.session_id = s.id - INNER JOIN $tbl_session_user sru on s.id = sru.session_id - INNER JOIN $tbl_session_rel_access_url aurs on s.id = aurs.session_id - WHERE srcru.status = ".SessionEntity::STUDENT." - AND sru.relation_type = ".SessionEntity::SESSION_COACH." - AND sru.user_id = $coach_id - AND aurs.access_url_id = $access_url_id"; + FROM $tbl_session_course_user srcru + INNER JOIN $tbl_session_course src + ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) + INNER JOIN $tbl_session s + ON srcru.session_id = s.id AND src.session_id = s.id + INNER JOIN $tbl_session_user sru + ON s.id = sru.session_id + INNER JOIN $tbl_session_rel_access_url aurs + ON s.id = aurs.session_id + WHERE + srcru.status = ".SessionEntity::STUDENT." AND + sru.relation_type = ".SessionEntity::GENERAL_COACH." AND + sru.user_id = $coach_id AND + aurs.access_url_id = $access_url_id"; } $result = Database::query($sql); @@ -3633,11 +3641,15 @@ class Tracking // Then, courses where $coach_id is coach of the session $sql = "SELECT srcru.user_id FROM $tbl_session_course_user srcru - INNER JOIN $tbl_session_course src ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) - INNER JOIN $tbl_session s ON srcru.session_id = s.id AND src.session_id = s.id - INNER JOIN $tblSessionRelUser sru on s.id = sru.session_id - WHERE (srcru.status = ".SessionEntity::STUDENT." AND srcru.user_id = $student_id) - AND (sru.relation_type = ".SessionEntity::SESSION_COACH." AND sru.user_id = $coach_id)"; + INNER JOIN $tbl_session_course src + ON (srcru.c_id = src.c_id AND srcru.session_id = src.session_id) + INNER JOIN $tbl_session s + ON srcru.session_id = s.id AND src.session_id = s.id + INNER JOIN $tblSessionRelUser sru + ON s.id = sru.session_id + WHERE + (srcru.status = ".SessionEntity::STUDENT." AND srcru.user_id = $student_id) AND + (sru.relation_type = ".SessionEntity::GENERAL_COACH." AND sru.user_id = $coach_id)"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { return true; @@ -3709,7 +3721,7 @@ class Tracking INNER JOIN $tblSessionRelUser session_user ON (session.id = session_user.session_id AND session_user.user_id = $coach_id - AND session_user.relation_type = ".SessionEntity::SESSION_COACH.") + AND session_user.relation_type = ".SessionEntity::GENERAL_COACH.") INNER JOIN $tbl_course as course ON course.id = session_course.c_id"; @@ -3726,7 +3738,7 @@ class Tracking INNER JOIN $tblSessionRelUser session_user ON (session.id = session_user.session_id AND session_user.user_id = $coach_id - AND session_user.relation_type = ".SessionEntity::SESSION_COACH.") + AND session_user.relation_type = ".SessionEntity::GENERAL_COACH.") INNER JOIN $tbl_course as course ON course.id = session_course.c_id INNER JOIN $tbl_course_rel_access_url course_rel_url @@ -3841,7 +3853,7 @@ class Tracking $sqlInjectJoins INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id WHERE - (sru.user_id = $coach_id AND sru.relation_type = ".SessionEntity::SESSION_COACH.") AND + (sru.user_id = $coach_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.") AND access_url_id = $access_url_id $keywordCondition $extraFieldsConditions @@ -8028,11 +8040,16 @@ class TrackingCourseLog $sql = "SELECT s.id, s.name, u.name FROM $tbl_thematic t - INNER JOIN $tblSessionRelUser sru ON t.session_id = sru.session_id - INNER JOIN $table_session s ON sru.session_id = s.id - INNER JOIN $table_user u ON sru.user_id = u.id - WHERE t.c_id = $course_id and t.id = $thematic_id - AND sru.relation_type = ".SessionEntity::SESSION_COACH; + INNER JOIN $tblSessionRelUser sru + ON t.session_id = sru.session_id + INNER JOIN $table_session s + ON sru.session_id = s.id + INNER JOIN $table_user u + ON sru.user_id = u.id + WHERE + t.c_id = $course_id AND + t.id = $thematic_id AND + sru.relation_type = ".SessionEntity::GENERAL_COACH; $recorset = Database::query($sql); } } else { diff --git a/public/main/inc/lib/usermanager.lib.php b/public/main/inc/lib/usermanager.lib.php index 548357ab9c..b55a582bbb 100644 --- a/public/main/inc/lib/usermanager.lib.php +++ b/public/main/inc/lib/usermanager.lib.php @@ -707,7 +707,7 @@ class UserManager $currentUserId = api_get_user_id(); $sql = "UPDATE session_rel_user SET user_id = $currentUserId - WHERE user_id = $user_id AND relation_type = ".SessionEntity::SESSION_COACH; + WHERE user_id = $user_id AND relation_type = ".SessionEntity::GENERAL_COACH; Database::query($sql); $sql = "UPDATE session_rel_user @@ -2549,7 +2549,7 @@ class UserManager INNER JOIN ChamiloCoreBundle:AccessUrlRelSession AS url WITH url.session = s.id LEFT JOIN ChamiloCoreBundle:SessionCategory AS sc WITH s.category = sc INNER JOIN ChamiloCoreBundle:SessionRelUser AS su WITH su.session = s - WHERE (su.user = :user AND su.relationType = ".SessionEntity::SESSION_COACH.") AND url.url = :url "; + WHERE (su.user = :user AND su.relationType = ".SessionEntity::GENERAL_COACH.") AND url.url = :url "; // Default order $order = 'ORDER BY sc.name, s.name'; @@ -2893,7 +2893,7 @@ class UserManager FROM $tbl_session s INNER JOIN $tbl_session_user sru ON sru.session_id = s.id WHERE ( - sru.user_id = $user_id AND sru.relation_type = ".SessionEntity::SESSION_COACH." + sru.user_id = $user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH." ) $coachCourseConditions ORDER BY s.access_start_date, s.access_end_date, s.name"; @@ -2920,7 +2920,7 @@ class UserManager $coursesAsGeneralCoach = $sessionRepo->getSessionCoursesByStatusInUserSubscription( $user, $session, - SessionEntity::SESSION_COACH, + SessionEntity::GENERAL_COACH, $url ); $coursesAsCourseCoach = $sessionRepo->getSessionCoursesByStatusInCourseSubscription( @@ -3082,7 +3082,7 @@ class UserManager $coursesAsGeneralCoach = $sessionRepo->getSessionCoursesByStatusInUserSubscription( $user, $session, - SessionEntity::SESSION_COACH, + SessionEntity::GENERAL_COACH, $url ); $coursesAsCourseCoach = $sessionRepo->getSessionCoursesByStatusInCourseSubscription( @@ -4360,7 +4360,7 @@ class UserManager ON session_rel_access_rel_user.session_id = s.id INNER JOIN $tbl_session_rel_user sru ON s.id = sru.session_id WHERE access_url_id = ".$urlId." - AND (sru.relation_type = ".SessionEntity::SESSION_COACH." + AND (sru.relation_type = ".SessionEntity::GENERAL_COACH." AND sru.user_id = $userId) ) OR sru.session_id IN ( SELECT DISTINCT(s.id) FROM $tbl_session s diff --git a/public/main/mySpace/ti_report.php b/public/main/mySpace/ti_report.php index afce3807b7..68d0da6227 100644 --- a/public/main/mySpace/ti_report.php +++ b/public/main/mySpace/ti_report.php @@ -84,7 +84,8 @@ if ($form->validate()) { $sql = "SELECT sru.user_id, s.name, s.id as session_id, s.display_start_date, s.display_end_date FROM $tblSession s - LEFT JOIN $tblSessionRelUser sru ON (sru.session_id = s.id AND sru.relation_type = ".Session::SESSION_COACH.") + LEFT JOIN $tblSessionRelUser sru + ON (sru.session_id = s.id AND sru.relation_type = ".Session::GENERAL_COACH.") WHERE s.display_start_date BETWEEN '$startDate' AND '$endDate' ORDER BY sru.user_id"; $result = Database::query($sql); diff --git a/public/main/session/session_export.php b/public/main/session/session_export.php index 744ea096c6..2c3fd57ef2 100644 --- a/public/main/session/session_export.php +++ b/public/main/session/session_export.php @@ -48,7 +48,7 @@ if (isset($_POST['formSent'])) { s.session_category_id FROM $tblSession s INNER JOIN $tblSessionRelUser sru - ON (s.id = sru.session_id AND sru.relation_type = ".Session::SESSION_COACH.") + ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.") INNER JOIN $tblUser u ON u.id = sru.user_id ORDER BY s.id"; @@ -62,7 +62,7 @@ if (isset($_POST['formSent'])) { INNER JOIN $tbl_session_rel_access_url as session_rel_url ON (s.id= session_rel_url.session_id) INNER JOIN $tblSessionRelUser sru - ON (s.id = sru.session_id AND sru.relation_type = ".Session::SESSION_COACH.") + ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.") INNER JOIN $tblUser u ON (u.id = sru.user_id) WHERE session_rel_url.access_url_id = $access_url_id ORDER BY s.id"; @@ -74,7 +74,7 @@ if (isset($_POST['formSent'])) { $sql = "SELECT s.id,s.name,u.username,s.access_start_date,s.access_end_date,s.visibility,s.session_category_id FROM $tblSession s INNER JOIN $tblSessionRelUser sru - ON (s.id = sru.session_id AND sru.relation_type = ".Session::SESSION_COACH.") + ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.") INNER JOIN $tblUser u ON u.id = sru.user_id WHERE s.id='$session_id'"; diff --git a/public/main/session/session_import.php b/public/main/session/session_import.php index 85617b2834..eef3faebf3 100644 --- a/public/main/session/session_import.php +++ b/public/main/session/session_import.php @@ -268,7 +268,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { Database::insert( $tblSessionUser, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coachId, @@ -302,7 +302,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { Database::insert( $tblSessionUser, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coachId, @@ -337,7 +337,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { Database::insert( $tblSessionUser, [ - 'relation_type' => Session::SESSION_COACH, + 'relation_type' => Session::GENERAL_COACH, 'duration' => 0, 'registered_at' => api_get_utc_datetime(), 'user_id' => $coachId, diff --git a/src/CoreBundle/Entity/Session.php b/src/CoreBundle/Entity/Session.php index 64f4fdbc49..4a7fce340e 100644 --- a/src/CoreBundle/Entity/Session.php +++ b/src/CoreBundle/Entity/Session.php @@ -72,7 +72,7 @@ class Session implements ResourceWithAccessUrlInterface public const STUDENT = 0; public const DRH = 1; public const COURSE_COACH = 2; - public const SESSION_COACH = 3; + public const GENERAL_COACH = 3; public const SESSION_ADMIN = 4; /** @@ -149,10 +149,10 @@ class Session implements ResourceWithAccessUrlInterface protected ?Course $currentCourse = null; /** - * @Groups({"session:read", "session:write", "session_rel_course_rel_user:read", "document:read", "session_rel_user:read"}) * @ORM\Column(name="name", type="string", length=150) */ #[Assert\NotBlank] + #[Groups(['session:read', "session:write", "session_rel_course_rel_user:read", "document:read", "session_rel_user:read"])] protected string $name; /** @@ -298,6 +298,17 @@ class Session implements ResourceWithAccessUrlInterface return $this->getName(); } + public static function getRelationTypeList(): array + { + return [ + self::STUDENT, + self::DRH, + self::COURSE_COACH, + self::GENERAL_COACH, + self::SESSION_ADMIN + ]; + } + public function getDuration(): ?int { return $this->duration; @@ -477,7 +488,7 @@ class Session implements ResourceWithAccessUrlInterface return $this->hasUserInCourse($user, $course, self::STUDENT); } - public function hasCoachInCourseWithStatus(User $user, Course $course = null): bool + public function hasCourseCoachInCourse(User $user, Course $course = null): bool { if (null === $course) { return false; @@ -623,11 +634,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get displayStartDate. - * - * @return DateTime - */ public function getDisplayStartDate(): ?DateTime { return $this->displayStartDate; @@ -640,11 +646,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get displayEndDate. - * - * @return DateTime - */ public function getDisplayEndDate(): ?DateTime { return $this->displayEndDate; @@ -657,11 +658,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get accessStartDate. - * - * @return DateTime - */ public function getAccessStartDate(): ?DateTime { return $this->accessStartDate; @@ -674,11 +670,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get accessEndDate. - * - * @return DateTime - */ public function getAccessEndDate(): ?DateTime { return $this->accessEndDate; @@ -691,11 +682,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get coachAccessStartDate. - * - * @return DateTime - */ public function getCoachAccessStartDate(): ?DateTime { return $this->coachAccessStartDate; @@ -708,11 +694,6 @@ class Session implements ResourceWithAccessUrlInterface return $this; } - /** - * Get coachAccessEndDate. - * - * @return DateTime - */ public function getCoachAccessEndDate(): ?DateTime { return $this->coachAccessEndDate; @@ -732,7 +713,7 @@ class Session implements ResourceWithAccessUrlInterface { $criteria = Criteria::create() ->where( - Criteria::expr()->eq('relationType', self::SESSION_COACH) + Criteria::expr()->eq('relationType', self::GENERAL_COACH) ) ; @@ -743,7 +724,7 @@ class Session implements ResourceWithAccessUrlInterface { $criteria = Criteria::create() ->where( - Criteria::expr()->eq('relationType', self::SESSION_COACH) + Criteria::expr()->eq('relationType', self::GENERAL_COACH) ) ->andWhere( Criteria::expr()->eq('user', $user) @@ -755,7 +736,7 @@ class Session implements ResourceWithAccessUrlInterface public function addGeneralCoach(User $coach): self { - return $this->addUserInSession(self::SESSION_COACH, $coach); + return $this->addUserInSession(self::GENERAL_COACH, $coach); } public function getCategory(): ?SessionCategory @@ -821,12 +802,14 @@ class Session implements ResourceWithAccessUrlInterface (null === $this->accessEndDate || $now < $this->accessEndDate); } - public function addCourse(Course $course): void + public function addCourse(Course $course): self { $sessionRelCourse = (new SessionRelCourse()) ->setCourse($course) ; $this->addCourses($sessionRelCourse); + + return $this; } /** @@ -1142,7 +1125,7 @@ class Session implements ResourceWithAccessUrlInterface public function hasCoachInCourseList(User $user): bool { foreach ($this->courses as $sessionCourse) { - if ($this->hasCoachInCourseWithStatus($user, $sessionCourse->getCourse())) { + if ($this->hasCourseCoachInCourse($user, $sessionCourse->getCourse())) { return true; } } diff --git a/src/CoreBundle/Entity/SessionRelUser.php b/src/CoreBundle/Entity/SessionRelUser.php index 96cbbf0c65..4bb42492e9 100644 --- a/src/CoreBundle/Entity/SessionRelUser.php +++ b/src/CoreBundle/Entity/SessionRelUser.php @@ -17,6 +17,7 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Serializer\Annotation\Groups; +use Symfony\Component\Validator\Constraints as Assert; /** * User subscriptions to a session. See also SessionRelCourseRelUser.php for a more detail subscription by course. @@ -85,6 +86,7 @@ class SessionRelUser * @ORM\ManyToOne(targetEntity="Session", inversedBy="users", cascade={"persist"}) * @ORM\JoinColumn(name="session_id", referencedColumnName="id") */ + #[Assert\NotNull] #[Groups(['session_rel_user:read'])] protected Session $session; @@ -92,6 +94,7 @@ class SessionRelUser * @ORM\ManyToOne(targetEntity="User", inversedBy="sessionsRelUser", cascade={"persist"}) * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ + #[Assert\NotNull] #[Groups(['session_rel_user:read'])] protected User $user; @@ -99,11 +102,13 @@ class SessionRelUser * @ORM\Column(name="relation_type", type="integer") */ #[Groups(['session_rel_user:read'])] + #[Assert\Choice(callback: [Session::class, 'getRelationTypeList'], message: 'Choose a valid relation type.')] protected int $relationType; /** * @ORM\Column(name="duration", type="integer", nullable=false) */ + #[Groups(['session_rel_user:read'])] protected int $duration; /** diff --git a/src/CoreBundle/Entity/User.php b/src/CoreBundle/Entity/User.php index 419d4b93c2..249bb1d97d 100644 --- a/src/CoreBundle/Entity/User.php +++ b/src/CoreBundle/Entity/User.php @@ -1677,7 +1677,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso public function getSessionsAsGeneralCoach(): array { - return $this->getSessions(Session::SESSION_COACH); + return $this->getSessions(Session::GENERAL_COACH); } public function getSessionsAsAdmin(): array @@ -1813,7 +1813,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso public function addRole(string $role): self { $role = strtoupper($role); - if ($role === static::ROLE_DEFAULT) { + if ($role === static::ROLE_DEFAULT || empty($role)) { return $this; } diff --git a/src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php b/src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php index 664ec0dab9..9df29420df 100644 --- a/src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php +++ b/src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php @@ -17,7 +17,6 @@ use Chamilo\CoreBundle\Repository\Node\UserRepository; use Chamilo\CoreBundle\Repository\SessionRepository; use Chamilo\CourseBundle\Entity\CTool; use Chamilo\CourseBundle\Repository\CToolRepository; -use Doctrine\DBAL\Connection; use Doctrine\DBAL\Schema\Schema; final class Version20201212195011 extends AbstractMigrationChamilo @@ -103,7 +102,7 @@ final class Version20201212195011 extends AbstractMigrationChamilo $counter = 1; $courseId = $course->getId(); - if (!empty($specialCourses) && in_array($courseId, $specialCourses)) { + if (!empty($specialCourses) && \in_array($courseId, $specialCourses, true)) { $this->addSql("UPDATE course SET sticky = 1 WHERE id = $courseId "); } diff --git a/src/CoreBundle/Repository/SessionRepository.php b/src/CoreBundle/Repository/SessionRepository.php index 401986928e..e887b0e2e5 100644 --- a/src/CoreBundle/Repository/SessionRepository.php +++ b/src/CoreBundle/Repository/SessionRepository.php @@ -101,6 +101,10 @@ class SessionRepository extends ServiceEntityRepository throw new Exception($msg); } + if (!in_array($relationType, Session::getRelationTypeList(), true)) { + throw new Exception(sprintf('Cannot handle relationType %s', $relationType)); + } + switch ($relationType) { case Session::DRH: if ($user->hasRole('ROLE_RRHH')) { @@ -123,10 +127,7 @@ class SessionRepository extends ServiceEntityRepository $course ); } - break; - default: - throw new Exception(sprintf('Cannot handle relationType %s', $relationType)); } } diff --git a/src/CoreBundle/Security/Authorization/Voter/SessionVoter.php b/src/CoreBundle/Security/Authorization/Voter/SessionVoter.php index 58a02728f9..a8f7ae18bc 100644 --- a/src/CoreBundle/Security/Authorization/Voter/SessionVoter.php +++ b/src/CoreBundle/Security/Authorization/Voter/SessionVoter.php @@ -89,7 +89,7 @@ class SessionVoter extends Voter $userIsStudent = $session->getSessionRelCourseByUser($user, Session::STUDENT)->count() > 0; $userIsCourseCoach = false; } else { - $userIsCourseCoach = $session->hasCoachInCourseWithStatus($user, $currentCourse); + $userIsCourseCoach = $session->hasCourseCoachInCourse($user, $currentCourse); $userIsStudent = $session->hasUserInCourse($user, $currentCourse, Session::STUDENT); } $duration = (int) $session->getDuration();