public function search() { $offset_start = (int) $this->request->get('offset_start'); $offset_start = $offset_start < 0 ? 0 : $offset_start; $results_quantity = (int) $this->request->get('per_page'); $results_quantity = $results_quantity < 10 || $results_quantity > 50 ? 20 : $results_quantity; $this->query_parms = ['inactives' => $this->request->get('inactives'), 'like_field' => $this->request->get('like_field'), 'like_value' => $this->request->get('like_value'), 'sbas_id' => $this->request->get('sbas_id'), 'base_id' => $this->request->get('base_id'), 'last_model' => $this->request->get('last_model'), 'srt' => $this->request->get("srt", \User_Query::SORT_CREATIONDATE), 'ord' => $this->request->get("ord", \User_Query::ORD_DESC), 'per_page' => $results_quantity, 'offset_start' => $offset_start]; $query = new \User_Query($this->app); if (is_array($this->query_parms['base_id'])) { $query->on_base_ids($this->query_parms['base_id']); } elseif (is_array($this->query_parms['sbas_id'])) { $query->on_sbas_ids($this->query_parms['sbas_id']); } $this->results = $query->sort_by($this->query_parms["srt"], $this->query_parms["ord"])->like($this->query_parms['like_field'], $this->query_parms['like_value'])->last_model_is($this->query_parms['last_model'])->get_inactives($this->query_parms['inactives'])->include_templates(true)->on_bases_where_i_am($this->app['acl']->get($this->app['authentication']->getUser()), ['canadmin'])->limit($offset_start, $results_quantity)->execute(); if (null === ($invite = $this->app['manipulator.user']->getRepository()->findByLogin(User::USER_GUEST))) { $invite = $this->app['manipulator.user']->createUser(User::USER_GUEST, User::USER_GUEST); } if (null == ($autoregister = $this->app['manipulator.user']->getRepository()->findByLogin(User::USER_AUTOREGISTER))) { $autoregister = $this->app['manipulator.user']->createUser(User::USER_AUTOREGISTER, User::USER_AUTOREGISTER); } foreach ($this->query_parms as $k => $v) { if (is_null($v)) { $this->query_parms[$k] = false; } } $query = new \User_Query($this->app); $templates = $query->only_templates(true)->execute()->get_results(); return ['users' => $this->results, 'parm' => $this->query_parms, 'invite_user' => $invite, 'autoregister_user' => $autoregister, 'templates' => $templates]; }
public function get_users_rights() { $list = array_keys($this->app['acl']->get($this->app['authentication']->getUser())->get_granted_base(['canadmin'])); $sql = "SELECT\n b.sbas_id,\n b.base_id,\n sum(actif) as actif,\n sum(canputinalbum) as canputinalbum,\n sum(candwnldpreview) as candwnldpreview,\n sum(candwnldhd) as candwnldhd,\n sum(cancmd) as cancmd,\n sum(nowatermark) as nowatermark,\n\n sum(canaddrecord) as canaddrecord,\n sum(canmodifrecord) as canmodifrecord,\n sum(chgstatus) as chgstatus,\n sum(candeleterecord) as candeleterecord,\n sum(imgtools) as imgtools,\n\n sum(canadmin) as canadmin,\n sum(canreport) as canreport,\n sum(canpush) as canpush,\n sum(manage) as manage,\n sum(modify_struct) as modify_struct,\n\n sum(sbu.bas_modif_th) as bas_modif_th,\n sum(sbu.bas_manage) as bas_manage,\n sum(sbu.bas_modify_struct) as bas_modify_struct,\n sum(sbu.bas_chupub) as bas_chupub,\n\n sum(time_limited) as time_limited,\n DATE_FORMAT(limited_from,'%Y%m%d') as limited_from,\n DATE_FORMAT(limited_to,'%Y%m%d') as limited_to,\n\n sum(restrict_dwnld) as restrict_dwnld,\n sum(remain_dwnld) as remain_dwnld,\n sum(month_dwnld_max) as month_dwnld_max,\n\n sum(mask_and + mask_xor) as masks\n\n FROM (Users u, bas b, sbas s)\n LEFT JOIN (basusr bu)\n ON (bu.base_id = b.base_id AND u.id = bu.usr_id)\n LEFT join sbasusr sbu\n ON (sbu.sbas_id = b.sbas_id AND u.id = sbu.usr_id)\n WHERE ( (u.id = " . implode(' OR u.id = ', $this->users) . " )\n AND b.sbas_id = s.sbas_id\n AND (b.base_id = '" . implode("' OR b.base_id = '", $list) . "'))\n GROUP BY b.base_id\n ORDER BY s.ord, s.sbas_id, b.ord, b.base_id "; $stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $sql = 'SELECT base_id, sum(1) as access FROM basusr WHERE (usr_id = ' . implode(' OR usr_id = ', $this->users) . ') AND (base_id = ' . implode(' OR base_id = ', $list) . ') GROUP BY base_id'; $stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql); $stmt->execute(); $access = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); $base_ids = []; foreach ($access as $acc) { $base_ids[$acc['base_id']] = $acc; } unset($access); foreach ($rs as $k => $row) { $rs[$k]['access'] = array_key_exists($row['base_id'], $base_ids) ? $base_ids[$row['base_id']]['access'] : '0'; foreach ($row as $dk => $data) { if (is_null($data)) { $rs[$k][$dk] = '0'; } } } $query = new \User_Query($this->app); $templates = $query->only_templates(true)->execute()->get_results(); $this->users_datas = $rs; $out = ['datas' => $this->users_datas, 'users' => $this->users, 'users_serial' => implode(';', $this->users), 'base_id' => $this->base_id, 'main_user' => null, 'templates' => $templates]; if (count($this->users) == 1) { $usr_id = array_pop($this->users); $out['main_user'] = $this->app['manipulator.user']->getRepository()->find($usr_id); } return $out; }