/** * Fetch institutes for course sets. * * @param Array $filter filter settings, e.g. a special subset of allowed * admission rules * * @return Array Found institutes. */ static function getInstitutes($filter = array()) { global $perm, $user; $parameters = array(1); $query = "SELECT COUNT(DISTINCT ci.set_id) FROM courseset_institute ci\n LEFT JOIN coursesets c ON c.set_id = ci.set_id\n LEFT JOIN courseset_rule cr ON c.set_id = cr.set_id\n LEFT JOIN seminar_courseset sc ON c.set_id = sc.set_id\n LEFT JOIN seminare s ON s.seminar_id = sc.seminar_id\n WHERE ci.institute_id = ?"; if ($filter['course_set_name']) { $query .= " AND c.name LIKE ?"; $parameters[] = $filter['course_set_name'] . '%'; } if (is_array($filter['rule_types']) && count($filter['rule_types'])) { $query .= " AND cr.type IN (?)"; $parameters[] = $filter['rule_types']; } if ($filter['semester_id']) { $query .= " AND s.start_time = ?"; $parameters[] = Semester::find($filter['semester_id'])->beginn; } $cs_count_statement = DBManager::get()->prepare($query); $query = str_replace('ci.institute_id', '1', $query); $cs_count_all_statement = DBManager::get()->prepare($query); if ($perm->have_perm('root')) { $cs_count_all_statement->execute($parameters); $num_sets = $cs_count_all_statement->fetchColumn(); $my_inst['all'] = array('name' => _('alle'), 'num_sets' => $num_sets); $top_insts = Institute::findBySQL('Institut_id = fakultaets_id ORDER BY Name'); } else { $top_insts = Institute::findMany(User::find($user->id)->institute_memberships->findBy('inst_perms', words('admin dozent'))->pluck('institut_id'), 'ORDER BY institut_id=fakultaets_id,name'); } foreach ($top_insts as $inst) { $my_inst[$inst->id] = $inst->toArray('name is_fak'); $parameters[0] = $inst->id; $cs_count_statement->execute($parameters); $my_inst[$inst->id]['num_sets'] = $cs_count_statement->fetchColumn(); if ($inst->is_fak && ($perm->have_perm('root') || $inst->members->findBy('user_id', $user->id)->val('inst_perms') == 'admin')) { $alle = $inst->sub_institutes; if (count($alle)) { $my_inst[$inst->id . '_all'] = array('name' => sprintf(_('[Alle unter %s]'), $inst->name), 'is_fak' => 'all'); $num_inst = 0; $num_sets_alle = $my_inst[$inst->id]['num_sets']; foreach ($alle as $institute) { $num_inst += 1; $my_inst[$institute->id] = $institute->toArray('name is_fak'); $parameters[0] = $institute->id; $cs_count_statement->execute($parameters); $my_inst[$institute->id]['num_sets'] = $cs_count_statement->fetchColumn(); $num_sets_alle += $my_inst[$institute->id]['num_sets']; } $my_inst[$inst->id . '_all']['num_inst'] = $num_inst; $my_inst[$inst->id . '_all']['num_sets'] = $num_sets_alle; } } } return $my_inst; }
function assign_role_institutes_action($role_id, $user_id) { if (Request::isXhr()) { $this->set_layout(null); $this->set_content_type('text/html;charset=windows-1252'); $this->response->add_header('X-No-Buttons', 1); $this->response->add_header('X-Title', PageLayout::getTitle()); foreach (array_keys($_POST) as $param) { Request::set($param, studip_utf8decode(Request::get($param))); } } if (Request::submitted('add_institute') && ($institut_id = Request::option('institute_id'))) { $roles = RolePersistence::getAllRoles(); $role = $roles[$role_id]; $user = new StudIPUser($user_id); RolePersistence::assignRole($user, $role, Request::option('institute_id')); PageLayout::postMessage(MessageBox::success(_("Die Einrichtung wurde zugewiesen."))); } if ($remove_institut_id = Request::option('remove_institute')) { $roles = RolePersistence::getAllRoles(); $role = $roles[$role_id]; $user = new StudIPUser($user_id); RolePersistence::deleteRoleAssignment($user, $role, $remove_institut_id); PageLayout::postMessage(MessageBox::success(_("Die Einrichtung wurde entfernt."))); } $roles = RolePersistence::getAllRoles(); $this->role = $roles[$role_id]; $this->user = new User($user_id); $this->institutes = SimpleCollection::createFromArray(Institute::findMany(RolePersistence::getAssignedRoleInstitutes($user_id, $role_id))); $this->institutes->orderBy('name'); $this->qsearch = QuickSearch::get("institute_id", new StandardSearch("Institut_id")); if (Request::isXhr()) { $this->qsearch->withoutButton(); } }