diff options
| author | David Siegfried <david.siegfried@uni-vechta.de> | 2025-06-26 08:25:12 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2025-06-26 08:25:12 +0000 |
| commit | 3b244eacbfd8a3c3e4a87f17e8e0e659b608045c (patch) | |
| tree | a57e00ace249c8587d348db68d7600bea5102f0c /lib | |
| parent | 964ff48d51a2af44548be2cca51e79b98bc51906 (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.php | 68 |
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; |
