Use entities when registering user in session

pull/3924/head
Angel Fernando Quiroz Campos 4 years ago
parent 3c3e9a37bc
commit 825f8bfc0d
  1. 30
      public/main/admin/ldap_synchro.php
  2. 104
      public/main/inc/lib/course.lib.php
  3. 30
      public/main/inc/lib/events.lib.php
  4. 48
      public/main/inc/lib/myspace.lib.php
  5. 199
      public/main/inc/lib/sessionmanager.lib.php
  6. 5
      src/CoreBundle/Entity/Session.php

@ -159,34 +159,6 @@ foreach ($Sessions as $session) {
$CourseList[] = $row['c_id'];
}
foreach ($CourseList as $enreg_course) {
// On ajoute la relation entre l'utilisateur et le cours
foreach ($UserList as $enreg_user) {
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user(session_id,c_id,user_id)
VALUES('$id_session','$enreg_course','$enreg_user')";
Database::query($sql);
}
$sql = "SELECT COUNT(user_id) as nbUsers ".
"FROM $tbl_session_rel_course_rel_user ".
"WHERE session_id='$id_session' AND c_id='$enreg_course'";
$rs = Database::query($sql);
list($nbr_users) = Database::fetch_array($rs);
$sql = "UPDATE $tbl_session_rel_course SET nbr_users=$nbr_users
WHERE session_id='$id_session' AND c_id = '$enreg_course'";
Database::query($sql);
}
// On ajoute la relation entre l'utilisateur et la session
foreach ($UserList as $enreg_user) {
$sql = "INSERT IGNORE INTO $tbl_session_rel_user(session_id, user_id, registered_at) ".
"VALUES('$id_session','$enreg_user', '".api_get_utc_datetime()."')";
Database::query($sql);
}
$sql = "SELECT COUNT(user_id) as nbUsers ".
"FROM $tbl_session_rel_user ".
"WHERE session_id='$id_session' AND relation_type<>".SESSION_RELATION_TYPE_RRHH."";
$rs = Database::query($sql);
list($nbr_users) = Database::fetch_array($rs);
$sql = "UPDATE $tbl_session SET nbr_users=$nbr_users WHERE id='$id_session'";
Database::query($sql);
SessionManager::insertUsersInCourses($UserList, $CourseList, $id_session);
}
}

@ -7,6 +7,7 @@ use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\CourseRelUser;
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
use Chamilo\CoreBundle\Entity\SequenceResource;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Repository\SequenceResourceRepository;
use Chamilo\CourseBundle\Component\CourseCopy\CourseBuilder;
@ -763,26 +764,6 @@ class CourseManager
$courseCode
);
// Add event to the system log
Event::addEvent(
LOG_SUBSCRIBE_USER_TO_COURSE,
LOG_COURSE_CODE,
$courseCode,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$sessionId
);
Event::addEvent(
LOG_SUBSCRIBE_USER_TO_COURSE,
LOG_USER_OBJECT,
$user,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$sessionId
);
return true;
} else {
// Check whether the user has not been already subscribed to the course.
@ -841,22 +822,13 @@ class CourseManager
}
}
$maxSort = api_max_sort_value('0', $userId);
$courseRelUser = new CourseRelUser();
$courseRelUser
->setCourse($course)
->setUser($user)
->setStatus($status)
->setSort($maxSort + 1)
->setUserCourseCat($userCourseCategoryId)
;
$em = Database::getManager();
$em->persist($courseRelUser);
$em->flush();
$maxSort = api_max_sort_value(0, $userId) + 1;
$insertId = $courseRelUser->getId();
$insertId = self::insertUserInCourse(
$user,
$course,
['status' => $status, 'sort' => $maxSort, 'user_course_cat' => $userCourseCategoryId]
);
if ($insertId) {
Display::addFlash(
@ -893,25 +865,6 @@ class CourseManager
}*/
}
// Add event to the system log
Event::addEvent(
LOG_SUBSCRIBE_USER_TO_COURSE,
LOG_COURSE_CODE,
$courseCode,
api_get_utc_datetime(),
api_get_user_id(),
$courseId
);
Event::addEvent(
LOG_SUBSCRIBE_USER_TO_COURSE,
LOG_USER_OBJECT,
$user,
api_get_utc_datetime(),
api_get_user_id(),
$courseId
);
return true;
}
@ -6681,28 +6634,41 @@ class CourseManager
return '';
}
public static function insertUserInCourse(int $studentId, int $courseId, array $relationInfo = [])
/**
* @param User $user
* @param Course $course
* @param array $relationInfo
*
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*
* @return int|null
*/
public static function insertUserInCourse(User $user, Course $course, array $relationInfo = []): ?int
{
$courseUserTable = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$relationInfo = array_merge(
['relation_type' => 0, 'status' => STUDENT, 'sort' => 0, 'user_course_cat' => 0],
$relationInfo
);
Database::insert(
$courseUserTable,
[
'c_id' => $courseId,
'user_id' => $studentId,
'status' => $relationInfo['status'],
'sort' => $relationInfo['sort'],
'relation_type' => $relationInfo['relation_type'],
'user_course_cat' => $relationInfo['user_course_cat'],
]
);
$courseRelUser = (new CourseRelUser())
->setCourse($course)
->setUser($user)
->setStatus($relationInfo['status'])
->setSort($relationInfo['sort'])
->setUserCourseCat($relationInfo['user_course_cat']);
$course->addUsers($courseRelUser);
$em = Database::getManager();
$em->persist($course);
$em->flush();
$insertId = $courseRelUser->getId();
Event::logSubscribedUserInCourse($user->getId(), $course->getId());
Event::logSubscribedUserInCourse($studentId, $courseId);
return $insertId;
}
/**
* Check if a specific access-url-related setting is a problem or not.

@ -3,6 +3,7 @@
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
use Chamilo\CoreBundle\Entity\TrackEAttemptRecording;
use Chamilo\CoreBundle\Entity\TrackEDefault;
use ChamiloSession as Session;
/**
@ -785,13 +786,9 @@ class Event
$course_id = null,
$sessionId = 0
) {
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_DEFAULT);
if (empty($event_type)) {
return false;
}
$event_type = Database::escape_string($event_type);
$event_value_type = Database::escape_string($event_value_type);
if (!empty($course_id)) {
$course_id = (int) $course_id;
} else {
@ -836,29 +833,28 @@ class Event
$event_value = serialize($event_value);
}
$event_value = Database::escape_string($event_value);
$sessionId = empty($sessionId) ? api_get_session_id() : (int) $sessionId;
if (!isset($datetime)) {
$datetime = api_get_utc_datetime();
}
$datetime = Database::escape_string($datetime);
if (!isset($user_id)) {
$user_id = api_get_user_id();
}
$params = [
'default_user_id' => $user_id,
'c_id' => $course_id,
'default_date' => $datetime,
'default_event_type' => $event_type,
'default_value_type' => $event_value_type,
'default_value' => $event_value,
'session_id' => $sessionId,
];
Database::insert($table, $params);
$track = (new TrackEDefault())
->setDefaultUserId($user_id)
->setCId($course_id)
->setDefaultDate(new DateTime($datetime, new DateTimeZone('UTC')))
->setDefaultEventType($event_type)
->setDefaultValueType($event_value_type)
->setDefaultValue($event_value)
->setSessionId($sessionId);
$em = Database::getManager();
$em->persist($track);
$em->flush();
return true;
}

@ -2972,45 +2972,19 @@ class MySpace
$users = $new_users;
// Inserting users.
foreach ($course_list as $enreg_course) {
$nbr_users = 0;
$new_users = [];
$enreg_course = Database::escape_string($enreg_course);
foreach ($users as $index => $user) {
$userid = (int) $user['id'];
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user(session_id, c_id, user_id)
VALUES('$id_session','$enreg_course','$userid')";
$result = Database::query($sql);
if (Database::affected_rows($result)) {
$nbr_users++;
}
$new_users[] = $user;
}
//update the nbr_users field
$sql_select = "SELECT COUNT(user_id) as nbUsers FROM $tbl_session_rel_course_rel_user
WHERE session_id='$id_session' AND c_id='$enreg_course'";
$rs = Database::query($sql_select);
[$nbr_users] = Database::fetch_array($rs);
$sql_update = "UPDATE $tbl_session_rel_course SET nbr_users=$nbr_users
WHERE session_id='$id_session' AND c_id='$enreg_course'";
Database::query($sql_update);
$sql_update = "UPDATE $tbl_session SET nbr_users= '$nbr_users' WHERE id='$id_session'";
Database::query($sql_update);
}
SessionManager::insertUsersInCourses(
array_column($users, 'id'),
$course_list,
$id_session
);
$new_users = [];
foreach ($users as $index => $user) {
$userid = $user['id'];
$sql_insert = "INSERT IGNORE INTO $tbl_session_rel_user(session_id, user_id, registered_at)
VALUES ('$id_session','$userid', '".api_get_utc_datetime()."')";
Database::query($sql_insert);
$user['added_at_session'] = 1;
$new_users[] = $user;
}
array_walk(
$users,
function (array &$user) {
$user['added_at_session'] = 1;
}
);
$users = $new_users;
$registered_users = get_lang('File imported').'<br /> Import file results : <br />';
// Sending emails.
$addedto = '';

@ -2055,15 +2055,15 @@ class SessionManager
function ($userId) use ($existingUsers) {
return !in_array($userId, $existingUsers);
}
);
);
self::insertUsersInCourse(
$usersToSubscribeInCourse,
$courseId,
$courseId,
$sessionId,
['visibility' => $session_visibility],
false
);
);
}
}
@ -2353,76 +2353,22 @@ class SessionManager
}
}
$nbr_users = 0;
foreach ($user_list as $enreg_user) {
$enreg_user = (int) $enreg_user;
// Checking if user exists in session - course - user table.
$sql = "SELECT count(user_id) as count
FROM $tbl_session_rel_course_rel_user
WHERE
session_id = $session_id AND
c_id = $courseId and
user_id = $enreg_user ";
$result = Database::query($sql);
$count = 0;
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
$count = $row['count'];
}
if (0 == $count) {
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (session_id, c_id, user_id, visibility)
VALUES ($session_id, $courseId, $enreg_user, $session_visibility)";
$result = Database::query($sql);
if (Database::affected_rows($result)) {
$nbr_users++;
}
}
self::insertUsersInCourse(
$user_list,
$courseId,
$session_id,
['visibility' => $session_visibility]
);
/*if (!empty($forums)) {
/*if (!empty($forums)) {
foreach ($user_list as $enreg_user) {
$userInfo = api_get_user_info($enreg_user);
foreach ($forums as $forum) {
$forumId = $forum['iid'];
//set_notification('forum', $forumId, false, $userInfo, $courseInfo);
}
}*/
// Checking if user exists in session - user table.
$sql = "SELECT count(user_id) as count
FROM $tbl_session_rel_user
WHERE session_id = $session_id AND user_id = $enreg_user ";
$result = Database::query($sql);
$count = 0;
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
$count = $row['count'];
}
if (empty($count)) {
// If user is not registered to a session then add it.
$sql = "INSERT IGNORE INTO $tbl_session_rel_user (session_id, user_id, registered_at)
VALUES ($session_id, $enreg_user, '".api_get_utc_datetime()."')";
Database::query($sql);
$sql = "UPDATE $tbl_session SET nbr_users = nbr_users + 1
WHERE id = $session_id ";
Database::query($sql);
}
}
// count users in this session-course relation
$sql = "SELECT COUNT(user_id) as nbUsers
FROM $tbl_session_rel_course_rel_user
WHERE session_id = $session_id AND c_id = $courseId AND status <> 2";
$rs = Database::query($sql);
[$nbr_users] = Database::fetch_array($rs);
// update the session-course relation to add the users total
$sql = "UPDATE $tbl_session_rel_course
SET nbr_users = $nbr_users
WHERE session_id = $session_id AND c_id = $courseId";
Database::query($sql);
}*/
}
/**
@ -2776,31 +2722,13 @@ class SessionManager
$nbr_courses++;
// Subscribe all the users from the session to this course inside the session
$nbr_users = 0;
foreach ($user_list as $enreg_user) {
$enreg_user_id = (int) $enreg_user['user_id'];
$sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user (session_id, c_id, user_id, visibility)
VALUES ($sessionId, $courseId, $enreg_user_id, $sessionVisibility)";
$result = Database::query($sql);
Event::addEvent(
LOG_SESSION_ADD_USER_COURSE,
LOG_USER_ID,
$enreg_user_id,
api_get_utc_datetime(),
api_get_user_id(),
$courseId,
$sessionId
);
if (Database::affected_rows($result)) {
$nbr_users++;
}
}
$sql = "UPDATE $tbl_session_rel_course
SET nbr_users = $nbr_users
WHERE session_id = $sessionId AND c_id = $courseId";
Database::query($sql);
self::insertUsersInCourse(
array_column($user_list, 'id'),
$courseId,
$sessionId,
['visibility' => $sessionVisibility],
false
);
}
if ($copyCourseTeachersAsCoach) {
@ -9550,28 +9478,17 @@ class SessionManager
public static function insertUsersInCourses(array $studentIds, array $courseIds, int $sessionId)
{
$tblSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tblSession = Database::get_main_table(TABLE_MAIN_SESSION);
$session = api_get_session_entity($sessionId);
foreach ($courseIds as $courseId) {
self::insertUsersInCourse($studentIds, $courseId, $sessionId, [], false);
}
foreach ($studentIds as $studentId) {
Database::query(
"INSERT IGNORE INTO $tblSessionUser (session_id, user_id, registered_at)
VALUES ($sessionId, $studentId, '".api_get_utc_datetime()."')"
);
}
$user = api_get_user_entity($studentId);
Database::query(
"UPDATE $tblSession s
SET s.nbr_users = (
SELECT COUNT(1) FROM session_rel_user sru
WHERE sru.session_id = $sessionId AND sru.relation_type <> ".Session::DRH."
)
WHERE s.id = $sessionId"
);
$session->addUserInSession(Session::STUDENT, $user);
}
}
public static function insertUsersInCourse(
@ -9581,75 +9498,29 @@ class SessionManager
array $relationInfo = [],
bool $updateSession = true
) {
$tblSessionCourseUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tblSessionCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tblSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tblSession = Database::get_main_table(TABLE_MAIN_SESSION);
$course = api_get_course_entity($courseId);
$session = api_get_session_entity($sessionId);
$relationInfo = array_merge(['visiblity' => 0, 'status' => Session::STUDENT], $relationInfo);
$em = Database::getManager();
$sessionCourseUser = [
'session_id' => $sessionId,
'c_id' => $courseId,
'visibility' => $relationInfo['visibility'],
'status' => $relationInfo['status'],
];
$sessionUser = [
'session_id' => $sessionId,
'registered_at' => api_get_utc_datetime(),
];
$relationInfo = array_merge(['visiblity' => 0, 'status' => Session::STUDENT], $relationInfo);
foreach ($studentIds as $studentId) {
$sessionCourseUser['user_id'] = $studentId;
$user = api_get_user_entity($studentId);
$count = Database::select(
'COUNT(1) as nbr',
$tblSessionCourseUser,
['where' => ['session_id = ? AND c_id = ? AND user_id = ?' => [$sessionId, $courseId, $studentId]]],
'first'
);
$session
->addUserInCourse($relationInfo['status'], $user, $course)
->setVisibility($relationInfo['visibility']);
if (empty($count['nbr'])) {
Database::insert($tblSessionCourseUser, $sessionCourseUser);
Event::logUserSubscribedInCourseSession($studentId, $courseId, $sessionId);
Event::logUserSubscribedInCourseSession($studentId, $courseId, $sessionId);
}
if ($updateSession) {
$sessionUser['user_id'] = $studentId;
$count = Database::select(
'COUNT(1) as nbr',
$tblSessionUser,
['where' => ['session_id = ? AND user_id = ?' => [$sessionId, $studentId]]],
'first'
);
if (empty($count['nbr'])) {
Database::insert($tblSessionUser, $sessionUser);
}
$session->addUserInSession(Session::STUDENT, $user);
}
}
Database::query(
"UPDATE $tblSessionCourse src
SET src.nbr_users = (
SELECT COUNT(1) FROM $tblSessionCourseUser srcru
WHERE
srcru.session_id = $sessionId AND srcru.c_id = $courseId AND srcru.status <> ".Session::COACH."
)
WHERE src.session_id = $sessionId AND src.c_id = $courseId"
);
if ($updateSession) {
Database::query(
"UPDATE $tblSession s
SET s.nbr_users = (
SELECT COUNT(1) FROM session_rel_user sru
WHERE sru.session_id = $sessionId AND sru.relation_type <> ".Session::DRH."
)
WHERE s.id = $sessionId"
);
}
$em->persist($session);
$em->flush();
}
public static function getCareersFromSession(int $sessionId): array

@ -362,6 +362,7 @@ class Session implements ResourceWithAccessUrlInterface
if (!$this->hasUser($user)) {
$this->users[] = $user;
$this->nbrUsers++;
}
}
@ -885,7 +886,7 @@ class Session implements ResourceWithAccessUrlInterface
* Add a user course subscription.
* If user status in session is student, then increase number of course users.
*/
public function addUserInCourse(int $status, User $user, Course $course): void
public function addUserInCourse(int $status, User $user, Course $course): SessionRelCourseRelUser
{
$userRelCourseRelSession = new SessionRelCourseRelUser();
$userRelCourseRelSession->setCourse($course);
@ -898,6 +899,8 @@ class Session implements ResourceWithAccessUrlInterface
$sessionCourse = $this->getCourseSubscription($course);
$sessionCourse->setNbrUsers($sessionCourse->getNbrUsers() + 1);
}
return $userRelCourseRelSession;
}
public function hasUserCourseSubscription(SessionRelCourseRelUser $subscription): bool

Loading…
Cancel
Save