/** * Displays a pageable and sortable overview of all studygoups combined with * a search form to query for specific studygroup * * @param $page * @param $sort */ function browse_action($page = 1, $sort = "founded_asc") { $this->sort = preg_replace('/\\W/', '', $sort); $this->page = intval($page); $this->userid = $GLOBALS['auth']->auth['uid']; $this->search = Request::get("searchtext"); $reset = false; if (Request::get('action') == 'deny') { unset($this->flash['searchterm']); unset($this->flash['info']); $this->page = 1; $this->sort = "founded_asc"; $reset = true; } $this->lower_bound = ($this->page - 1) * get_config('ENTRIES_PER_PAGE'); list($this->sort_type, $this->sort_order) = explode('_', $this->sort); if (empty($this->search) && isset($this->flash['searchterm'])) { $this->search = $this->flash['searchterm']; } if (!empty($this->search)) { $groups = StudygroupModel::getAllGroups($this->sort, $this->lower_bound, get_config('ENTRIES_PER_PAGE'), $this->search); $this->flash['searchterm'] = $this->search; $this->flash->keep('searchterm'); $this->anzahl = StudygroupModel::countGroups($this->search); $this->groups = $groups; } // let the user know that there is no studygroup for the searchterm if (empty($groups)) { if (!$reset) { if (Request::submitted('searchtext') && empty($this->search)) { $this->flash['info'] = _("Der Suchbegriff ist zu kurz."); unset($this->flash['searchterm']); } elseif (isset($this->flash['searchterm'])) { $this->flash['info'] = _("Es wurden keine Studiengruppen für den Suchbegriff gefunden"); } } $this->anzahl = StudygroupModel::countGroups(); $this->groups = StudygroupModel::getAllGroups($this->sort, $this->lower_bound, get_config('ENTRIES_PER_PAGE')); } elseif (!$check || $this->groups) { unset($this->flash['info']); if ($this->page < 1 || $this->page > ceil($this->anzahl / get_config('ENTRIES_PER_PAGE'))) { $this->page = 1; } } }
/** * adds user with given id as preliminary member to course * * @param string $user_id * @return integer 1 if successfull */ public function addPreliminaryMember($user_id, $comment = '') { $new_admission_member = new AdmissionApplication(); $new_admission_member->user_id = $user_id; $new_admission_member->position = 0; $new_admission_member->status = 'accepted'; $new_admission_member->comment = $comment; $this->course->admission_applicants[] = $new_admission_member; $ok = $new_admission_member->store(); if ($ok && $this->isStudygroup()) { StudygroupModel::applicationNotice($this->getId(), $user_id); } $cs = $this->getCourseSet(); if ($cs) { $prio_delete = AdmissionPriority::unsetPriority($cs->getId(), $user_id, $this->getId()); } // LOGGING StudipLog::log('SEM_USER_ADD', $this->getId(), $user_id, 'accepted', 'Vorläufig akzeptiert'); return $ok; }
/** * Displays admin settings concerning the modules and plugins which that are globally available for studygroups * * @return void */ function globalmodules_action() { global $perm; $perm->check("root"); PageLayout::setHelpKeyword('Admin.Studiengruppen'); // get institutes $institutes = StudygroupModel::getInstitutes(); $default_inst = Config::Get()->STUDYGROUP_DEFAULT_INST; // Nutzungsbedingungen $terms = Config::Get()->STUDYGROUP_TERMS; if ($this->flash['institute']) { $default_inst = $this->flash['institute']; } if ($this->flash['modules']) { foreach ($this->flash['modules'] as $module => $status) { $enabled[$module] = $status == 'on' ? true : false; } } if ($this->flash['terms']) { $terms = $this->flash['terms']; } PageLayout::setTitle(_('Verwaltung studentischer Arbeitsgruppen')); Navigation::activateItem('/admin/config/studygroup'); $query = "SELECT COUNT(*) FROM seminare WHERE status IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array(studygroup_sem_types())); // set variables for view $this->can_deactivate = $statement->fetchColumn() == 0; $this->current_page = _("Verwaltung erlaubter Inhaltselemente und Plugins für Studiengruppen"); $this->configured = count(studygroup_sem_types()) > 0; $this->institutes = $institutes; $this->default_inst = $default_inst; $this->terms = $terms; }
/** * * checks if the 'protected' flag of a file is set and if * the course access is closed * * @param string MD5 id of the file * @return bool */ function check_protected_download($document_id) { $ok = true; if (Config::GetInstance()->getValue('ENABLE_PROTECTED_DOWNLOAD_RESTRICTION')) { $doc = new StudipDocument($document_id); if ($doc->getValue('protected')) { $ok = false; $range_id = $doc->getValue('seminar_id'); if (get_object_type($range_id) == 'sem') { $seminar = Seminar::GetInstance($range_id); $timed_admission = $seminar->getAdmissionTimeFrame(); if ($seminar->isPasswordProtected() || $seminar->isAdmissionLocked() || ($timed_admission['end_time'] > 0 && $timed_admission['end_time'] < time())) { $ok = true; } else if (StudygroupModel::isStudygroup($range_id)) { $studygroup = Seminar::GetInstance($range_id); if ($studygroup->admission_prelim == 1) { $ok = true; } } } } } return $ok; }
/** * Delete an existing user from the database and tidy up * * @access public * @param bool delete all documents belonging to the user * @return bool Removal successful? */ function deleteUser($delete_documents = true) { global $perm; // Do we have permission to do so? if (!$perm->have_perm("admin")) { $this->msg .= "error§" . _("Sie haben keine Berechtigung Accounts zu löschen.") . "§"; return FALSE; } if (!$perm->have_perm("root")) { if ($this->user_data['auth_user_md5.perms'] == "root") { $this->msg .= "error§" . _("Sie haben keine Berechtigung <em>Root-Accounts</em> zu löschen.") . "§"; return FALSE; } if ($this->user_data['auth_user_md5.perms'] == "admin" && !$this->adminOK()) { $this->msg .= "error§" . _("Sie haben keine Berechtigung diesen Admin-Account zu löschen.") . "§"; return FALSE; } } $status = studygroup_sem_types(); // active dozent? if (empty($status)) { $active_count = 0; } else { $query = "SELECT SUM(c) AS count FROM (\n SELECT COUNT(*) AS c\n FROM seminar_user AS su1\n INNER JOIN seminar_user AS su2 ON (su1.seminar_id = su2.seminar_id AND su2.status = 'dozent')\n INNER JOIN seminare ON (su1.seminar_id = seminare.seminar_id AND seminare.status NOT IN (?))\n WHERE su1.user_id = ? AND su1.status = 'dozent'\n GROUP BY su1.seminar_id\n HAVING c = 1\n ORDER BY NULL\n ) AS sub"; $statement = DBManager::get()->prepare($query); $statement->execute(array(studygroup_sem_types(), $this->user_data['auth_user_md5.user_id'])); $active_count = $statement->fetchColumn(); } if ($active_count) { $this->msg .= sprintf("error§" . _("<em>%s</em> ist Lehrkraft in %s aktiven Veranstaltungen und kann daher nicht gelöscht werden.") . "§", $this->user_data['auth_user_md5.username'], $active_count); return FALSE; //founder of studygroup? } elseif (get_config('STUDYGROUPS_ENABLE')) { $status = studygroup_sem_types(); if (empty($status)) { $group_ids = array(); } else { $query = "SELECT Seminar_id\n FROM seminare AS s\n LEFT JOIN seminar_user AS su USING (Seminar_id)\n WHERE su.status = 'dozent' AND su.user_id = ? AND s.status IN (?)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'], studygroup_sem_types())); $group_ids = $statement->fetchAll(PDO::FETCH_COLUMN); } foreach ($group_ids as $group_id) { $sem = Seminar::GetInstance($group_id); if (StudygroupModel::countMembers($group_id) > 1) { // check whether there are tutors or even autors that can be promoted $tutors = $sem->getMembers('tutor'); $autors = $sem->getMembers('autor'); if (count($tutors) > 0) { $new_founder = current($tutors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } elseif (count($autors) > 0) { $new_founder = current($autors); StudygroupModel::promote_user($new_founder['username'], $sem->getId(), 'dozent'); continue; } // since no suitable successor was found, we are allowed to remove the studygroup } else { $sem->delete(); } unset($sem); } } // store user preferred language for sending mail $user_language = getUserLanguagePath($this->user_data['auth_user_md5.user_id']); // delete documents of this user if ($delete_documents) { // Remove private file space of this user if (Config::get()->PERSONALDOCUMENT_ENABLE) { $root_dir = new RootDirectory($this->user_data['auth_user_md5.user_id']); $root_dir->delete(); } // Remove other files $temp_count = 0; $query = "SELECT dokument_id FROM dokumente WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($document_id = $statement->fetchColumn()) { if (delete_document($document_id)) { $temp_count++; } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s Dokumente gelöscht."), $temp_count) . "§"; } // delete empty folders of this user $temp_count = 0; $query = "SELECT COUNT(*) FROM folder WHERE range_id = ?"; $count_content = DBManager::get()->prepare($query); $query = "DELETE FROM folder WHERE folder_id = ?"; $delete_folder = DBManager::get()->prepare($query); $query = "SELECT folder_id FROM folder WHERE user_id = ? ORDER BY mkdate DESC"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); while ($folder_id = $statement->fetchColumn()) { $count_content->execute(array($folder_id)); $count = $count_content->fetchColumn(); $count_content->closeCursor(); if (!$count && !doc_count($folder_id)) { $delete_folder->execute(array($folder_id)); $temp_count += $delete_folder->rowCount(); } } if ($temp_count) { $this->msg .= "info§" . sprintf(_("%s leere Ordner gelöscht."), $temp_count) . "§"; } // folder left? $query = "SELECT COUNT(*) FROM folder WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $count = $statement->fetchColumn(); if ($count) { $this->msg .= sprintf("info§" . _("%s Ordner konnten nicht gelöscht werden, da sie noch Dokumente anderer BenutzerInnen enthalten.") . "§", $count); } } // kill all the ressources that are assigned to the user (and all the linked or subordinated stuff!) if (Config::get()->RESOURCES_ENABLE) { $killAssign = new DeleteResourcesUser($this->user_data['auth_user_md5.user_id']); $killAssign->delete(); } $this->re_sort_position_in_seminar_user(); // delete user from seminars (postings will be preserved) $query = "DELETE FROM seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Veranstaltungen gelöscht."), $db_ar) . "§"; } // delete user from waiting lists $query = "SELECT seminar_id FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $seminar_ids = $statement->fetchAll(PDO::FETCH_COLUMN); $query = "DELETE FROM admission_seminar_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Wartelisten gelöscht."), $db_ar) . "§"; array_map('update_admission', $seminar_ids); } // delete user from instituts $this->logInstUserDel($this->user_data['auth_user_md5.user_id']); $query = "DELETE FROM user_inst WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus MitarbeiterInnenlisten gelöscht."), $db_ar) . "§"; } // delete user from Statusgruppen if ($db_ar = RemovePersonFromAllStatusgruppen(get_username($this->user_data['auth_user_md5.user_id'])) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Funktionen / Gruppen gelöscht."), $db_ar) . "§"; } // delete user from archiv $query = "DELETE FROM archiv_user WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Zugriffsberechtigungen für das Archiv gelöscht."), $db_ar) . "§"; } // delete all personal news from this user if ($db_ar = StudipNews::DeleteNewsByAuthor($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Ankündigungen gelöscht."), $db_ar) . "§"; } if ($db_ar = StudipNews::DeleteNewsRanges($this->user_data['auth_user_md5.user_id'])) { $this->msg .= "info§" . sprintf(_("%s Verweise auf Ankündigungen gelöscht."), $db_ar) . "§"; } //delete entry in news_rss_range StudipNews::UnsetRssId($this->user_data['auth_user_md5.user_id']); // delete 'Studiengaenge' $query = "DELETE FROM user_studiengang WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Zuordnungen zu Studiengängen gelöscht."), $db_ar) . "§"; } // delete all private appointments of this user if (get_config('CALENDAR_ENABLE')) { $appkills = CalendarEvent::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($appkills) { $this->msg .= "info§" . sprintf(_("%s Einträge aus den Terminen gelöscht."), $appkills) . "§"; } // delete membership in group calendars if (get_config('CALENDAR_GROUP_ENABLE')) { $membershipkills = CalendarUser::deleteBySQL('owner_id = :user_id OR user_id = :user_id', array(':user_id' => $this->user_data['auth_user_md5.user_id'])); if ($membershipkills) { $this->msg .= 'info§' . sprintf(_('%s Verknüpfungen mit Gruppenterminkalendern gelöscht.')); } } } // delete all messages send or received by this user $messaging = new messaging(); $messaging->delete_all_messages($this->user_data['auth_user_md5.user_id']); // delete user from all foreign adressbooks and empty own adressbook $buddykills = Contact::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($buddykills > 0) { $this->msg .= "info§" . sprintf(_("%s Einträge aus Adressbüchern gelöscht."), $buddykills) . "§"; } $contactkills = Contact::deleteBySQL('owner_id = ?', array($this->user_data['auth_user_md5.user_id'])); if ($contactkills) { $this->msg .= sprintf(_('Adressbuch mit %d Einträgen gelöscht.'), $contactkills); } // delete users groups Statusgruppen::deleteBySQL('range_id = ?', array($this->user_data['auth_user_md5.user_id'])); // remove user from any groups StatusgruppeUser::deleteBySQL('user_id = ?', array($this->user_data['auth_user_md5.user_id'])); // delete all blubber entrys $query = "DELETE FROM blubber WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (($db_ar = $statement->rowCount()) > 0) { $this->msg .= "info§" . sprintf(_("%s Blubber gelöscht."), $db_ar) . "§"; } // delete the datafields $localEntries = DataFieldEntry::removeAll($this->user_data['auth_user_md5.user_id']); UserConfigEntry::deleteByUser($this->user_data['auth_user_md5.user_id']); // delete all remaining user data $queries = array("DELETE FROM kategorien WHERE range_id = ?", "DELETE FROM user_info WHERE user_id = ?", "DELETE FROM user_visibility WHERE user_id = ?", "DELETE FROM user_online WHERE user_id = ?", "DELETE FROM auto_insert_user WHERE user_id = ?", "DELETE FROM roles_user WHERE userid = ?", "DELETE FROM schedule WHERE user_id = ?", "DELETE FROM schedule_seminare WHERE user_id = ?", "DELETE FROM termin_related_persons WHERE user_id = ?", "DELETE FROM user_userdomains WHERE user_id = ?"); foreach ($queries as $query) { DBManager::get()->prepare($query)->execute(array($this->user_data['auth_user_md5.user_id'])); } object_kill_visits($this->user_data['auth_user_md5.user_id']); object_kill_views($this->user_data['auth_user_md5.user_id']); // delete picture $avatar = Avatar::getAvatar($this->user_data["auth_user_md5.user_id"]); if ($avatar->is_customized()) { $avatar->reset(); $this->msg .= "info§" . _("Bild gelöscht.") . "§"; } // delete visibility settings Visibility::removeUserPrivacySettings($this->user_data['auth_user_md5.user_id']); //delete connected users if (get_config('ELEARNING_INTERFACE_ENABLE')) { if (ELearningUtils::initElearningInterfaces()) { foreach ($GLOBALS['connected_cms'] as $cms) { if ($cms->auth_necessary && $cms->user instanceof ConnectedUser) { $user_auto_create = $cms->USER_AUTO_CREATE; $cms->USER_AUTO_CREATE = false; $userclass = strtolower(get_class($cms->user)); $connected_user = new $userclass($cms->cms_type, $this->user_data['auth_user_md5.user_id']); if ($ok = $connected_user->deleteUser()) { if ($connected_user->is_connected) { $this->msg .= "info§" . sprintf(_("Der verknüpfte Nutzer %s wurde im System %s gelöscht."), $connected_user->login, $connected_user->cms_type) . "§"; } } $cms->USER_AUTO_CREATE = $user_auto_create; } } } } // delete deputy entries if necessary $query = "DELETE FROM deputies WHERE ? IN (user_id, range_id)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); $deputyEntries = $statement->rowCount(); if ($deputyEntries) { $this->msg .= "info§" . sprintf(_("%s Einträge in den Vertretungseinstellungen gelöscht."), $deputyEntries) . "§"; } // delete Stud.IP account $query = "DELETE FROM auth_user_md5 WHERE user_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($this->user_data['auth_user_md5.user_id'])); if (!$statement->rowCount()) { $this->msg .= "error§<em>" . _("Fehler:") . "</em> " . $query . "§"; return FALSE; } else { $this->msg .= "msg§" . sprintf(_("Benutzer \"%s\" gelöscht."), $this->user_data['auth_user_md5.username']) . "§"; } log_event("USER_DEL", $this->user_data['auth_user_md5.user_id'], NULL, sprintf("%s %s (%s)", $this->user_data['auth_user_md5.Vorname'], $this->user_data['auth_user_md5.Nachname'], $this->user_data['auth_user_md5.username'])); //log with Vorname Nachname (username) as info string // Can we reach the email? if ($this->checkMail($this->user_data['auth_user_md5.Email'])) { // include language-specific subject and mailbody $Zeit = date("H:i:s, d.m.Y", time()); include "locale/{$user_language}/LC_MAILS/delete_mail.inc.php"; // send mail StudipMail::sendMessage($this->user_data['auth_user_md5.Email'], $subject, $mailbody); } unset($this->user_data); return TRUE; }
/** * 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(); }
foreach ($founders as $founder) : ?> <?php echo Avatar::getAvatar($founder['user_id'])->getImageTag(Avatar::SMALL); ?> <a href="<?php echo URLHelper::getlink('dispatch.php/profile?username='******'uname']); ?> "><?php echo htmlready($founder['fullname']); ?> </a> <br> <? endforeach; ?> </td> <td align="center"> <? if (StudygroupModel::isMember($this->userid,$group['Seminar_id'] )) :?> <?php echo Icon::create('person', 'inactive', ['title' => _('Sie sind Mitglied in dieser Gruppe')])->asImg(); ?> <? endif;?> </td> <td align="center"> <? if ($group['admission_prelim'] == 1) :?> <?php echo Icon::create('lock-locked', 'inactive', ['title' => _('Mitgliedschaft muss beantragt werden')])->asImg(); ?> <? endif;?> </td> </tr> <? endforeach ; ?> <? if ($anzahl > 20) : ?>
/** * 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); }