Session: Fix duplicate entry error in session import - refs BT#22278

pull/5999/head
Christian Beeznest 9 months ago
parent d40def167f
commit 1812b56af8
  1. 11
      public/main/inc/lib/sessionmanager.lib.php
  2. 27
      src/CoreBundle/Entity/Session.php

@ -5558,13 +5558,10 @@ class SessionManager
}
}
$userList[] = $user_id;
// Insert new users.
$sql = "INSERT IGNORE INTO $tbl_session_user SET
user_id = '$user_id',
session_id = '$session_id',
registered_at = '".api_get_utc_datetime()."'";
Database::query($sql);
$userEntity = api_get_user_entity($user_id);
$sessionEntity = api_get_session_entity($session_id);
$sessionEntity->addUserInSession(Session::STUDENT, $userEntity);
if ($debug) {
$logger->debug("Adding User #$user_id ($user) to session #$session_id");
}

@ -260,7 +260,7 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
'session:write',
])]
#[ORM\Column(name: 'show_description', type: 'boolean', nullable: true)]
protected ?bool $showDescription;
protected ?bool $showDescription = false;
#[Groups(['session:read', 'session:write', 'user_subscriptions:sessions'])]
#[ORM\Column(name: 'duration', type: 'integer', nullable: true)]
@ -446,7 +446,7 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
public function getShowDescription(): bool
{
return $this->showDescription;
return $this->showDescription ?? false;
}
public function setShowDescription(bool $showDescription): self
@ -810,7 +810,18 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
public function addUserInSession(int $relationType, User $user): self
{
$sessionRelUser = (new SessionRelUser())->setUser($user)->setRelationType($relationType);
foreach ($this->getUsers() as $existingSubscription) {
if (
$existingSubscription->getUser()->getId() === $user->getId() &&
$existingSubscription->getRelationType() === $relationType
) {
return $this;
}
}
$sessionRelUser = (new SessionRelUser())
->setUser($user)
->setRelationType($relationType);
$this->addUserSubscription($sessionRelUser);
return $this;
@ -985,8 +996,12 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
* If user status in session is student, then increase number of course users.
* Status example: Session::STUDENT.
*/
public function addUserInCourse(int $status, User $user, Course $course): SessionRelCourseRelUser
public function addUserInCourse(int $status, User $user, Course $course): ?SessionRelCourseRelUser
{
if ($this->hasUserInCourse($user, $course, $status)) {
return null;
}
$userRelCourseRelSession = (new SessionRelCourseRelUser())
->setCourse($course)
->setUser($user)
@ -998,7 +1013,9 @@ class Session implements ResourceWithAccessUrlInterface, Stringable
if (self::STUDENT === $status) {
$sessionCourse = $this->getCourseSubscription($course);
$sessionCourse->setNbrUsers($sessionCourse->getNbrUsers() + 1);
if ($sessionCourse) {
$sessionCourse->setNbrUsers($sessionCourse->getNbrUsers() + 1);
}
}
return $userRelCourseRelSession;

Loading…
Cancel
Save