aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Siegfried <david.siegfried@uni-vechta.de>2025-06-26 08:25:12 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2025-06-26 08:25:12 +0000
commit3b244eacbfd8a3c3e4a87f17e8e0e659b608045c (patch)
treea57e00ace249c8587d348db68d7600bea5102f0c /lib
parent964ff48d51a2af44548be2cca51e79b98bc51906 (diff)
add users directly to accepted-list , fixes #4060
Closes #4060 Merge request studip/studip!3984
Diffstat (limited to 'lib')
-rw-r--r--lib/models/AdmissionApplication.php68
1 files changed, 63 insertions, 5 deletions
diff --git a/lib/models/AdmissionApplication.php b/lib/models/AdmissionApplication.php
index 6ecc17f..3da80ca 100644
--- a/lib/models/AdmissionApplication.php
+++ b/lib/models/AdmissionApplication.php
@@ -176,17 +176,75 @@ class AdmissionApplication extends SimpleORMap implements PrivacyObject
}
/**
+ * Adds the given user to the accepted list of the current course and sends a
+ * corresponding message.
+ */
+ public static function addAcceptedMember(User $user, Course $course): bool
+ {
+ $position = (int) DBManager::get()->fetchColumn(
+ "SELECT MAX(`position`) AS maxpos FROM `admission_seminar_user` WHERE `seminar_id`=?",
+ [$course->id]
+ );
+
+ $data = [
+ 'seminar_id' => $course->id,
+ 'user_id' => $user->id,
+ 'position' => $position + 1,
+ 'status' => 'accepted'
+ ];
+
+ $member_ship = AdmissionApplication::findOneBySQL(
+ "`user_id` = ? AND `status` = 'awaiting'",
+ [$user->id]
+ );
+
+ if (!$member_ship) {
+ $member_ship = AdmissionApplication::build($data);
+ $updated = false;
+ } else {
+ $member_ship->setData($data);
+ $updated = true;
+ }
+
+ if ($member_ship->store()) {
+ $course_member = CourseMember::find([$course->id, $user->id]);
+
+ if ($course_member) {
+ $course_member->delete();
+ }
+ $message_title = sprintf(_('Teilnahme an der Veranstaltung %s'), $course->getFullName());
+
+ if ($updated) {
+ $message_body = sprintf(
+ _('Sie wurden in die Veranstaltung **%s** auf einen vorläufigen Platz hochgestuft. Die endgültige Zulassung zu der Veranstaltung ist noch von weiteren Bedingungen abhängig, die Sie bitte der Veranstaltungsbeschreibung entnehmen.'),
+ $course->getFullName()
+ );
+ } else {
+ $message_body = sprintf(
+ _('Sie wurden in die Veranstaltung **%s** auf einen vorläufigen Platz eingetragen. Die endgültige Zulassung zu der Veranstaltung ist noch von weiteren Bedingungen abhängig, die Sie bitte der Veranstaltungsbeschreibung entnehmen.'),
+ $course->getFullName()
+ );
+ }
+ StudipLog::log('SEM_USER_ADD', $course->id, $user->id, 'accepted', 'Vorläufig akzeptiert');
+
+ messaging::sendSystemMessage($user->id, $message_title, $message_body);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
* @param string $seminar_id
- * @param string $send_message
+ * @param bool $send_message
* @return void
- * @throws NotificationVetoException
+ * @throws \Studip\Exception
*/
public static function addMembers(string $seminar_id, bool $send_message = true): void
{
$messaging = new messaging;
-
- //Daten holen / Abfrage ob ueberhaupt begrenzt
- $course = Course::find($seminar_id, true);
+ $course = Course::find($seminar_id, true);
if ($course->isAdmissionEnabled()) {
$sem_preliminary = $course->admission_prelim == 1;