Sessions: Refactor code

- Replace constant from SESSION_COACH to GENERAL_COACH
- Add asserts
- Format code
- Rename hasCoachInCourseWithStatus to hasCourseCoachInCourse
pull/4014/head^2
Julio 4 years ago
parent ade3211e3a
commit 021f4339de
  1. 2
      public/main/admin/statistics/index.php
  2. 2
      public/main/admin/teachers_time_by_session_report.php
  3. 12
      public/main/inc/lib/api.lib.php
  4. 6
      public/main/inc/lib/course.lib.php
  5. 15
      public/main/inc/lib/myspace.lib.php
  6. 22
      public/main/inc/lib/sessionmanager.lib.php
  7. 71
      public/main/inc/lib/tracking.lib.php
  8. 12
      public/main/inc/lib/usermanager.lib.php
  9. 3
      public/main/mySpace/ti_report.php
  10. 6
      public/main/session/session_export.php
  11. 6
      public/main/session/session_import.php
  12. 59
      src/CoreBundle/Entity/Session.php
  13. 5
      src/CoreBundle/Entity/SessionRelUser.php
  14. 4
      src/CoreBundle/Entity/User.php
  15. 3
      src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php
  16. 7
      src/CoreBundle/Repository/SessionRepository.php
  17. 2
      src/CoreBundle/Security/Authorization/Voter/SessionVoter.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);

@ -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;
}

@ -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);

@ -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;

@ -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";

@ -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.' ';
}
}

@ -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 {

@ -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

@ -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);

@ -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'";

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

@ -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;
}
}

@ -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;
/**

@ -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;
}

@ -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 ");
}

@ -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));
}
}

@ -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();

Loading…
Cancel
Save