Example #1
0
 function change_admission_turnout_action()
 {
     CSRFProtection::verifyUnsafeRequest();
     $this->response->add_header('X-Title', _('Teilnehmeranzahl ändern'));
     if (Request::submitted('change_admission_turnout')) {
         $request = Request::extract('admission_turnout int, admission_disable_waitlist submitted, admission_disable_waitlist_move submitted, admission_waitlist_max int');
         $request = array_diff_key($request, array_filter($this->is_locked));
         $request['change_admission_turnout'] = 1;
         if (isset($request['admission_turnout'])) {
             $this->course->admission_turnout = abs($request['admission_turnout']);
         }
         if (isset($request['admission_disable_waitlist'])) {
             $this->course->admission_disable_waitlist = $request['admission_disable_waitlist'] ? 0 : 1;
             if ($this->course->admission_disable_waitlist && $this->course->getNumWaiting()) {
                 $question = sprintf(_("Sie beabsichtigen die Warteliste zu deaktivieren. Die bestehende Warteliste mit %s Einträgen wird gelöscht. Sind sie sicher?"), $this->course->getNumWaiting());
             }
         }
         if (isset($request['admission_disable_waitlist_move'])) {
             $this->course->admission_disable_waitlist_move = $request['admission_disable_waitlist_move'] ? 0 : 1;
         }
         if (isset($request['admission_waitlist_max'])) {
             $this->course->admission_waitlist_max = abs($request['admission_waitlist_max']);
             if ($this->course->admission_waitlist_max > 0 && !$this->admission_disable_waitlist && $this->course->getNumWaiting() > $this->course->admission_waitlist_max) {
                 $question = sprintf(_("Sie beabsichtigen die Anzahl der Wartenden zu begrenzen. Die letzten %s Einträge der Warteliste werden gelöscht. Sind sie sicher?"), $this->course->getNumWaiting() - $this->course->admission_waitlist_max);
             }
         }
         if (Request::submitted('change_admission_turnout_yes') || !$question) {
             $this->course->admission_disable_waitlist = Request::int('admission_disable_waitlist') ? 0 : 1;
             $this->course->admission_disable_waitlist_move = Request::int('admission_disable_waitlist_move') ? 0 : 1;
             if ($this->course->admission_disable_waitlist && $this->course->getNumWaiting()) {
                 $removed_applicants = $this->course->admission_applicants->findBy('status', 'awaiting');
             }
             if ($this->course->admission_waitlist_max > 0 && !$this->admission_disable_waitlist && $this->course->getNumWaiting() > $this->course->admission_waitlist_max) {
                 $limit = $this->course->getNumWaiting() - $this->course->admission_waitlist_max;
                 $removed_applicants = $this->course->admission_applicants->findBy('status', 'awaiting')->orderBy('position desc', SORT_NUMERIC)->limit($limit);
             }
             if ($removed_applicants) {
                 $num_moved = 0;
                 foreach ($removed_applicants as $applicant) {
                     setTempLanguage($applicant->user_id);
                     $message_body = sprintf(_('Die Warteliste der Veranstaltung **%s** wurde deaktiviert, Sie sind damit __nicht__ zugelassen worden.'), $this->course->name);
                     $message_title = sprintf(_("Statusänderung %s"), $this->course->name);
                     messaging::sendSystemMessage($applicant->user_id, $message_title, $message_body);
                     restoreLanguage();
                     $num_moved += $applicant->delete();
                 }
                 if ($num_moved) {
                     PageLayout::postMessage(MessageBox::success(sprintf(_("%s Wartende wurden entfernt."), $num_moved)));
                 }
             }
             if ($this->course->store()) {
                 PageLayout::postMessage(MessageBox::success(_("Die Teilnehmeranzahl wurde geändert.")));
             }
             unset($question);
         }
     }
     if (!$question) {
         $this->redirect($this->url_for('/index'));
     } else {
         $this->request = $request;
         $this->button_yes = 'change_admission_turnout_yes';
         PageLayout::postMessage(MessageBox::info($question));
         $this->render_template('course/admission/_change_admission.php');
     }
 }