/** * adds user with given id on waitinglist * * @param string $user_id * @param string $which_end 'last' or 'first' * @return integer 1 if successfull */ public function addToWaitlist($user_id, $which_end = 'last') { if (AdmissionApplication::exists(array($user_id, $this->id)) || CourseMember::find(array($this->id, $user_id))) { return false; } switch ($which_end) { // Append users to waitlist end. case 'last': $maxpos = DBManager::get()->fetchColumn("SELECT MAX(`position`) FROM `admission_seminar_user` WHERE `seminar_id`=? AND `status`='awaiting'", array($this->id)); $waitpos = $maxpos+1; break; // Prepend users to waitlist start. case 'first': default: // Move all others on the waitlist up by the number of people to add. DBManager::get()->execute("UPDATE `admission_seminar_user` SET `position`=`position`+1 WHERE `seminar_id`=? AND `status`='awaiting'", array($this->id)); $waitpos = 1; } $new_admission_member = new AdmissionApplication(); $new_admission_member->user_id = $user_id; $new_admission_member->position = $waitpos; $new_admission_member->status = 'awaiting'; $new_admission_member->seminar_id = $this->id; if ($new_admission_member->store()) { StudipLog::log('SEM_USER_ADD', $this->id, $user_id, 'awaiting', 'Auf Warteliste gesetzt, Position: ' . $waitpos); $this->course->resetRelation('admission_applicants'); return 1; } return false; }
/** * Notify users that they couldn't get a seat but are now on the waiting * list for a given course. * * @param Array $user_list Users to be notified * @param Course $course The course without waiting list * @param int $prio User's priority for the given course. */ private function addUsersToWaitlist($user_list, $course, $prio = null) { $maxpos = $course->admission_applicants->findBy('status', 'awaiting')->orderBy('position desc')->val('position'); foreach ($user_list as $chosen_one) { $maxpos++; $new_admission_member = new AdmissionApplication(); $new_admission_member->user_id = $chosen_one; $new_admission_member->position = $maxpos; $new_admission_member->status = 'awaiting'; $course->admission_applicants[] = $new_admission_member; if ($new_admission_member->store()) { setTempLanguage($chosen_one); $message_title = sprintf(_('Teilnahme an der Veranstaltung %s'), $course->name); $message_body = sprintf(_('Sie wurden leider im Losverfahren der Veranstaltung **%s** __nicht__ ausgelost. Sie wurden jedoch auf Position %s auf die Warteliste gesetzt. Das System wird Sie automatisch eintragen und benachrichtigen, sobald ein Platz für Sie frei wird.'), $course->name, $maxpos); if ($prio) { $message_body .= "\n" . sprintf(_("Sie hatten für diese Veranstaltung die Priorität %s gewählt."), $prio[$chosen_one]); } messaging::sendSystemMessage($chosen_one, $message_title, $message_body); restoreLanguage(); StudipLog::log('SEM_USER_ADD', $course->id, $chosen_one, 'awaiting', 'Auf Warteliste gelost, Position: ' . $maxpos); } } }