/** * Deletes an institute * @param String $i_id Institute id */ public function delete_action($i_id) { CSRFProtection::verifyUnsafeRequest(); // Missing parameter if (!Request::get('i_kill')) { return $this->redirect('institute/basicdata/index/' . $i_id); } // Invalid ticket if (!check_ticket(Request::option('studipticket'))) { PageLayout::postMessage(MessageBox::error(_('Ihr Ticket ist abgelaufen. Versuchen Sie die letzte Aktion erneut.'))); return $this->redirect('institute/basicdata/index/' . $i_id); } // User may not delete this institue if (!$GLOBALS['perm']->have_perm('root') && !($GLOBALS['perm']->is_fak_admin() && get_config('INST_FAK_ADMIN_PERMS') === 'all')) { PageLayout::postMessage(MessageBox::error(_('Sie haben nicht die Berechtigung Fakultäten zu löschen!'))); return $this->redirect('institute/basicdata/index/' . $i_id); } $institute = Institute::find($i_id); if ($institute === null) { throw new Exception('Invalid institute id'); } // Institut in use? if (count($institute->home_courses)) { PageLayout::postMessage(MessageBox::error(_('Diese Einrichtung kann nicht gelöscht werden, da noch Veranstaltungen an dieser Einrichtung existieren!'))); return $this->redirect('institute/basicdata/index/' . $i_id); } // Institute has sub institutes? if (count($institute->sub_institutes)) { PageLayout::postMessage(MessageBox::error(_('Diese Einrichtung kann nicht gelöscht werden, da sie den Status Fakultät hat und noch andere Einrichtungen zugeordnet sind!'))); return $this->redirect('institute/basicdata/index/' . $i_id); } // Is the user allowed to delete faculties? if ($institute->is_fak && !$GLOBALS['perm']->have_perm('root')) { PageLayout::postMessage(MessageBox::error(_('Sie haben nicht die Berechtigung Fakultäten zu löschen!'))); return $this->redirect('institute/basicdata/index/' . $i_id); } // Save users, name and number of courses $user_ids = $institute->members->pluck('user_id'); $i_name = $institute->name; $i_courses = count($institute->courses); // Delete that institute if (!$institute->delete()) { PageLayout::postMessage(MessageBox::error(_('Die Einrichtung konnte nicht gelöscht werden.'))); } else { $details = array(); // logging - put institute's name in info - it's no longer derivable from id afterwards log_event('INST_DEL', $i_id, NULL, $i_name); // set a suitable default institute for each user foreach ($user_ids as $user_id) { log_event('INST_USER_DEL', $i_id, $user_id); checkExternDefaultForUser($user_id); } if (count($user_ids)) { $details[] = sprintf(_('%u Mitarbeiter gelöscht.'), count($user_ids)); } // Report number of formerly associated courses if ($i_courses) { $details[] = sprintf(_('%u Beteiligungen an Veranstaltungen gelöscht'), $i_courses); } // delete literatur $del_lit = StudipLitList::DeleteListsByRange($i_id); if ($del_lit) { $details[] = sprintf(_('%u Literaturlisten gelöscht.'), $del_lit['list']); } // delete news-links StudipNews::DeleteNewsRanges($i_id); //delete entry in news_rss_range StudipNews::UnsetRssId($i_id); //updating range_tree $query = "UPDATE range_tree SET name = ?, studip_object = '', studip_object_id = '' WHERE studip_object_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array(_('(in Stud.IP gelöscht)'), $i_id)); if (($db_ar = $statement->rowCount()) > 0) { $details[] = sprintf(_('%u Bereiche im Einrichtungsbaum angepasst.'), $db_ar); } // Statusgruppen entfernen if ($db_ar = DeleteAllStatusgruppen($i_id) > 0) { $details[] = sprintf(_('%s Funktionen/Gruppen gelöscht.'), $db_ar); } //kill the datafields DataFieldEntry::removeAll($i_id); //kill all wiki-pages $removed_wiki_pages = 0; foreach (array('', '_links', '_locks') as $area) { $query = "DELETE FROM wiki{$area} WHERE range_id = ?"; $statement = DBManager::get()->prepare($query); $statement->execute(array($i_id)); $removed_wiki_pages += $statement->rowCount(); } if ($removed_wiki_pages > 0) { $details[] = sprintf(_('%u Wikiseiten gelöscht.')); } // kill all the ressources that are assigned to the Veranstaltung (and all the linked or subordinated stuff!) if (get_config('RESOURCES_ENABLE')) { $killAssign = new DeleteResourcesUser($i_id); $killAssign->delete(); } // delete all configuration files for the "extern modules" if (get_config('EXTERN_ENABLE')) { $counts = ExternConfig::DeleteAllConfigurations($i_id); if ($counts) { $details[] = sprintf(_('%u Konfigurationsdateien für externe Seiten gelöscht.'), $counts); } } // delete all contents in forum-modules foreach (PluginEngine::getPlugins('ForumModule') as $plugin) { $plugin->deleteContents($i_id); // delete content irrespective of plugin-activation in the seminar if ($plugin->isActivated($i_id)) { // only show a message, if the plugin is activated, to not confuse the user $details[] = sprintf(_('Einträge in %s gelöscht.'), $plugin->getPluginName()); } } // Delete assigned documents $db_ar = delete_all_documents($i_id); if ($db_ar > 0) { $details[] = sprintf(_('%u Dokumente gelöscht.'), $db_ar); } //kill the object_user_vists for this institut object_kill_visits(null, $i_id); // Report success with details $message = sprintf(_('Die Einrichtung "%s" wurde gelöscht!'), $i_name); PageLayout::postMessage(MessageBox::success($message, $details)); } $this->redirect('institute/basicdata/index?cid='); }
/** * Assign/add a user to a statusgruppe. */ public function assign_action() { $this->check_ticket(); $role_id = Request::option('role_id'); if ($role_id) { $group = new Statusgruppe($role_id); $range_id = $group->getRange_id(); $group = new Statusgruppe($range_id); while ($group->getRange_id()) { $range_id = $group->getRange_id(); $group = new Statusgruppe($range_id); } if (InsertPersonStatusgruppe($this->user->user_id, $role_id)) { $globalperms = get_global_perm($this->user->user_id); $query = "INSERT IGNORE INTO user_inst (Institut_id, user_id, inst_perms)\n VALUES (?, ?, ?)\n ON DUPLICATE KEY UPDATE inst_perms = VALUES(inst_perms)"; $statement = DBManager::get()->prepare($query); $statement->execute(array($range_id, $this->user->user_id, $globalperms)); if ($statement->rowCount() == 1) { log_event('INST_USER_ADD', $range_id, $this->user->user_id, $globalperms); } else { if ($statement->rowCount() == 2) { log_event('INST_USER_STATUS', $range_id, $this->user->user_id, $globalperms); } } checkExternDefaultForUser($this->user->user_id); $_SESSION['edit_about_data']['open'] = $role_id; $this->reportSuccess(_('Die Person wurde in die ausgewählte Gruppe eingetragen!')); } else { $this->reportError(_('Fehler beim Eintragen in die Gruppe!')); } } $this->redirect('settings/statusgruppen#' . $role_id); }
function addToStatusgroup($range_id, $statusgruppe_id, $workgroup_mode) { $mp = MultiPersonSearch::load("contacts_statusgroup_" . $statusgruppe_id); if (count($mp->getAddedUsers()) !== 0) { foreach ($mp->getAddedUsers() as $m) { $quickfilters = $mp->getQuickfilterIds(); if (in_array($m, $quickfilters[_("Veranstaltungsteilnehmende")])) { InsertPersonStatusgruppe ($m, $statusgruppe_id, false); } elseif (in_array($m, $quickfilters[_("Mitarbeiter/-innen")])) { $writedone = InsertPersonStatusgruppe ($m, $statusgruppe_id, false); if ($writedone) { if ($workgroup_mode == TRUE) { $globalperms = get_global_perm($m); if ($globalperms == "tutor" || $globalperms == "dozent") { insert_seminar_user($range_id, $m, "tutor"); } else { insert_seminar_user($range_id, $m, "autor"); } } else { insert_seminar_user($range_id, $m, "autor"); } } checkExternDefaultForUser($m); } else { $writedone = InsertPersonStatusgruppe ($m, $statusgruppe_id, false); if ($writedone) { if ($workgroup_mode == TRUE) { $globalperms = get_global_perm($m); if ($globalperms == "tutor" || $globalperms == "dozent") { insert_seminar_user($range_id, $m, "tutor"); } else { insert_seminar_user($range_id, $m, "autor"); } } else { insert_seminar_user($range_id, $m, "autor"); } } } } } $mp->clearSession(); }