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. 25
      src/CoreBundle/Entity/Session.php

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

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

Loading…
Cancel
Save