Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 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();
     }
 }