Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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);
         }
     }
 }