/** * A person applies for a course. */ function apply_action() { $user_id = $GLOBALS['user']->id; $courseset = CourseSet::getSetForCourse($this->course_id); $this->course_name = PageLayout::getTitle(); if ($courseset) { $errors = $courseset->checkAdmission($user_id, $this->course_id); if (count($errors)) { $this->courseset_message = $courseset->toString(true); $this->admission_error = MessageBox::error(_("Die Anmeldung war nicht erfolgreich."), $errors); foreach ($courseset->getAdmissionRules() as $rule) { $admission_form .= $rule->getInput(); } if ($admission_form) { $this->admission_form = $admission_form; } } else { if ($courseset->isSeatDistributionEnabled()) { if ($courseset->hasAlgorithmRun()) { if ($courseset->getSeatDistributionTime()) { $msg = _("Die Plätze in dieser Veranstaltung wurden automatisch verteilt."); } if (StudipLock::get('enrolment' . $this->course_id)) { $course = Course::find($this->course_id); if ($course->getFreeSeats() && !$course->getNumWaiting()) { $enrol_user = true; } else { if ($course->isWaitlistAvailable()) { $seminar = new Seminar($course); if ($seminar->addToWaitlist($user_id, 'last')) { $msg_details[] = sprintf(_("Alle Plätze sind belegt, Sie wurden daher auf Platz %s der Warteliste gesetzt."), $maxpos); } } else { $this->admission_error = MessageBox::error(_("Die Anmeldung war nicht erfolgreich. Alle Plätze sind belegt und es steht keine Warteliste zur Verfügung.")); } } } else { $this->admission_error = MessageBox::error(_("Die Anmeldung war wegen technischer Probleme nicht erfolgreich. Bitte versuchen Sie es später noch einmal.")); } } else { $msg = _("Die Plätze in dieser Veranstaltung werden automatisch verteilt."); if ($limit = $courseset->getAdmissionRule('LimitedAdmission')) { $msg_details[] = sprintf(_("Diese Veranstaltung gehört zu einem Anmeldeset mit %s Veranstaltungen. Sie können maximal %s davon belegen. Bei der Verteilung werden die von Ihnen gewünschten Prioritäten berücksichtigt."), count($courseset->getCourses()), $limit->getMaxNumber()); $this->user_max_limit = $limit->getMaxNumberForUser($user_id); if (get_config('IMPORTANT_SEMNUMBER')) { $order = "ORDER BY VeranstaltungsNummer, Name"; } else { $order = "ORDER BY Name"; } $this->priocourses = Course::findMany($courseset->getCourses(), $order); $this->user_prio = AdmissionPriority::getPrioritiesByUser($courseset->getId(), $user_id); $this->max_limit = $limit->getMaxNumber(); $this->prio_stats = AdmissionPriority::getPrioritiesStats($courseset->getId()); $this->already_claimed = count($this->user_prio); } else { $this->priocourses = Course::find($this->course_id); $this->already_claimed = array_key_exists($this->course_id, AdmissionPriority::getPrioritiesByUser($courseset->getId(), $user_id)); } $msg_details[] = _("Zeitpunkt der automatischen Verteilung: ") . strftime("%x %X", $courseset->getSeatDistributionTime()); $this->num_claiming = count(AdmissionPriority::getPrioritiesByCourse($courseset->getId(), $this->course_id)); if ($this->already_claimed) { $msg_details[] = _("Sie sind bereits für die Verteilung angemeldet."); } } $this->courseset_message = MessageBox::info($msg, $msg_details); } else { $enrol_user = true; } } } else { $enrol_user = true; } if ($enrol_user) { $course = Seminar::GetInstance($this->course_id); if ($course->admission_prelim) { if (!$course->isStudygroup() && $course->admission_prelim_txt && !Request::submitted('apply')) { $this->admission_prelim_txt = $course->admission_prelim_txt; $this->admission_prelim_comment = Config::get()->ADMISSION_PRELIM_COMMENT_ENABLE; $this->admission_form = $this->render_template_as_string('course/enrolment/prelim'); } else { if (Request::get('admission_comment')) { $admission_comment = get_fullname() . ': ' . Request::get('admission_comment'); } else { $admission_comment = ''; } if ($course->addPreliminaryMember($user_id, $admission_comment)) { if ($course->isStudygroup()) { if (StudygroupModel::isInvited($user_id, $this->course_id)) { // an invitation exists, so accept the join request automatically $status = 'autor'; StudygroupModel::accept_user(get_username($user_id), $this->course_id); StudygroupModel::cancelInvitation(get_username($user_id), $this->course_id); $success = sprintf(_("Sie wurden in die Veranstaltung %s als %s eingetragen."), $course->getName(), get_title_for_status($status, 1)); PageLayout::postMessage(MessageBox::success($success)); } else { $success = sprintf(_("Sie wurden auf die Anmeldeliste der Studiengruppe %s eingetragen. Die Moderatoren der Studiengruppe können Sie jetzt freischalten."), $course->getName()); PageLayout::postMessage(MessageBox::success($success)); } } else { $success = sprintf(_("Sie wurden in die Veranstaltung %s vorläufig eingetragen."), $course->getName()); PageLayout::postMessage(MessageBox::success($success)); } } } } else { $status = 'autor'; if ($course->addMember($user_id, $status)) { $success = sprintf(_("Sie wurden in die Veranstaltung %s als %s eingetragen."), $course->getName(), get_title_for_status($status, 1)); PageLayout::postMessage(MessageBox::success($success)); $this->enrol_user = true; if (StudygroupModel::isInvited($user_id, $this->course_id)) { // delete an existing invitation StudygroupModel::cancelInvitation(get_username($user_id), $this->course_id); } } } unset($this->courseset_message); } StudipLock::release(); }
/** * shows details of a studygroup * * @param string id of a studygroup * * @return void */ function details_action($id) { global $perm; $studygroup = new Seminar($id); if (Request::isXhr()) { $this->set_layout(null); $this->response->add_header('Content-Type', 'text/html;charset=Windows-1252'); header('X-Title: ' . _('Studiengruppendetails')); } else { PageLayout::setTitle(getHeaderLine($id) . ' - ' . _('Studiengruppendetails')); PageLayout::setHelpKeyword('Basis.StudiengruppenAbonnieren'); PageLayout::addSqueezePackage('enrolment'); $stmt = DBManager::get()->prepare("SELECT * FROM admission_seminar_user" . " WHERE user_id = ? AND seminar_id = ?"); $stmt->execute(array($GLOBALS['user']->id, $id)); $data = $stmt->fetch(); if ($data['status'] == 'accepted') { $membership_requested = true; } if (StudygroupModel::isInvited($GLOBALS['user']->id, $id)) { $invited = true; } $participant = $perm->have_studip_perm('autor', $id); if (!preg_match('/^(' . preg_quote($GLOBALS['CANONICAL_RELATIVE_PATH_STUDIP'], '/') . ')?([a-zA-Z0-9_-]+\\.php)([a-zA-Z0-9_?&=-]*)$/', Request::get('send_from_search_page'))) { $send_from_search_page = ''; } else { $send_from_search_page = Request::get('send_from_search_page'); } $icon = Icon::create('schedule', 'info'); if ($GLOBALS['perm']->have_studip_perm('autor', $studygroup->getId()) || $membership_requested) { $action = _("Persönlicher Status:"); if ($membership_requested) { $infotext = _("Mitgliedschaft bereits beantragt!"); } else { $infolink = URLHelper::getURL('seminar_main.php?auswahl=' . $studygroup->getId()); $infotext = _("Direkt zur Studiengruppe"); } } else { if ($GLOBALS['perm']->have_perm('admin')) { $action = _("Hinweis:"); $infotext = _('Sie sind Admin und können sich daher nicht für Studiengruppen anmelden.'); $icon = Icon::create('decline', 'attention'); } else { $action = _("Aktionen:"); $infolink = URLHelper::getScriptURL('dispatch.php/course/enrolment/apply/' . $studygroup->getId()); $infolink_options = array('data-dialog' => ''); // customize link text if user is invited or group access is restricted if ($invited === true) { $infotext = _("Einladung akzeptieren"); } elseif ($studygroup->admission_prelim) { $infotext = _("Mitgliedschaft beantragen"); } else { $infotext = _("Studiengruppe beitreten"); } } } $sidebar = Sidebar::get(); $sidebar->setTitle(_("Details")); $sidebar->setContextAvatar(StudygroupAvatar::getAvatar($studygroup->id)); $iwidget = new SidebarWidget(); $iwidget->setTitle(_("Information")); $iwidget->addElement(new WidgetElement(_("Hier sehen Sie weitere Informationen zur Studiengruppe. Außerdem können Sie ihr beitreten/eine Mitgliedschaft beantragen."))); $sidebar->addWidget($iwidget); $awidget = new LinksWidget(); $awidget->setTitle($action); $awidget->addLink($infotext, $infolink, $icon, $infolink_options); if ($send_from_search_page) { $awidget->addLink(_("zurück zur Suche"), URLHelper::getURL($send_from_search_page), Icon::create('schedule', 'info')); } $sidebar->addWidget($awidget); } $this->studygroup = $studygroup; }
/** * If a new user applies, an application note to all moderators and founders * of a studygroup will be automatically sent while calling this function. * The note contains the user's name and a direct link to the member page of the studygroup. * * @param string $sem_id id of a seminar / studygroup * @param strimg $user_id id of the applicant * * @return int number of recipients */ function applicationNotice($sem_id, $user_id) { $sem = new Seminar($sem_id); $dozenten = $sem->getMembers(); $tutors = $sem->getMembers('tutor'); $recipients = array(); $msging = new Messaging(); foreach (array_merge($dozenten, $tutors) as $uid => $user) { $recipients[] = $user['username']; } if (studip_strlen($sem->getName()) > 32) { //cut subject if to long $subject = sprintf(_("[Studiengruppe: %s...]"), studip_substr($sem->getName(), 0, 30)); } else { $subject = sprintf(_("[Studiengruppe: %s]"), $sem->getName()); } if (StudygroupModel::isInvited($user_id, $sem_id)) { $subject .= " " . _("Einladung akzeptiert"); $message = sprintf(_("%s hat die Einladung zur Studiengruppe %s akzeptiert. Klicken Sie auf den untenstehenden Link, um direkt zur Studiengruppe zu gelangen.\n\n [Direkt zur Studiengruppe]%s"), get_fullname($user_id), $sem->getName(), URLHelper::getlink($GLOBALS['ABSOLUTE_URI_STUDIP'] . "dispatch.php/course/studygroup/members/" . $sem->id, array('cid' => $sem->id))); } else { $subject .= " " . _("Neuer Mitgliedsantrag"); $message = sprintf(_("%s möchte der Studiengruppe %s beitreten. Klicken Sie auf den untenstehenden Link, um direkt zur Studiengruppe zu gelangen.\n\n [Direkt zur Studiengruppe]%s"), get_fullname($user_id), $sem->getName(), URLHelper::getlink($GLOBALS['ABSOLUTE_URI_STUDIP'] . "dispatch.php/course/studygroup/members/" . $sem->id, array('cid' => $sem->id))); } return $msging->insert_message($message, $recipients, "____%system%____", '', '', '', '', $subject); }