Example #1
0
 /**
  * 获取管理员数目
  *
  * @param string $project
  * @param array $list_groups 可列出的组,不传则全部
  * @param int $group_id
  * @param int $list_type null=默认,1=管理员,2=组长,3=自定义权限用户
  * @return int
  */
 public function total_count($project = null, $list_groups = null, $list_type = null)
 {
     if ($project) {
         $this->db()->where('m.project', \Core::$project);
     }
     if ($list_type == 1) {
         $this->db()->where('m.is_super_admin', 1);
     } elseif ($list_type == 3) {
         $this->db()->where('m.perm_setting', 'N;', '<>');
     }
     $this->db()->from('admin_member as m');
     if ($list_groups || $list_type == 2) {
         if ($list_groups) {
             $this->db()->in('ids.group_id', $list_groups);
         }
         if ($list_type == 2) {
             # 列出组长
             $this->db()->where('ids.view_users', 1);
         }
         $data = $this->db()->join('admin_member_group_ids as ids')->on('ids.admin_id', 'm.id')->select(\Database::expr_value('count(DISTINCT(m.id)) as `count`'))->get()->current();
         return $data['count'];
     } else {
         return $this->db()->count_records();
     }
 }
Example #2
0
 /**
  * 解析 GROUP_CONCAT
  *
  * @param array $arr
  * @return string
  */
 protected function _format_group_concat(&$builder)
 {
     if ($builder['group_concat']) {
         foreach ($builder['group_concat'] as $item) {
             if (is_array($item[0])) {
                 $column = $item[0][0];
                 $alias = $item[0][1];
             } else {
                 if (preg_match('#^(.*) AS (.*)$#i', $item[0], $m)) {
                     $column = $this->_quote_identifier($m[1]);
                     $alias = $m[2];
                 } else {
                     $column = $this->_quote_identifier($item[0]);
                     $alias = $item[0];
                 }
             }
             $str = 'GROUP_CONCAT(';
             if (isset($item[3]) && $item[3]) {
                 $str .= 'DISTINCT ';
             }
             $str .= $column;
             if (isset($item[1]) && $item[1]) {
                 $str .= ' ORDER BY ' . $column . ' ' . (strtoupper($item[1]) == 'DESC' ? 'DESC' : 'ASC');
             }
             if ($item[2]) {
                 $str .= ' SEPARATOR ' . $this->_quote_identifier($item[2]);
             }
             $str .= ')';
             $builder['select'][] = array(Database::expr_value($str), $alias);
         }
     }
 }
Example #3
0
 /**
  * 格式化高级查询参数到select里
  */
 protected function format_select_adv(&$builder)
 {
     if (empty($builder['select_adv'])) {
         return;
     }
     foreach ($builder['select_adv'] as $item) {
         if (!is_array($item)) {
             continue;
         }
         if (is_array($item[0])) {
             $column = $item[0][0];
             $alias = $item[0][1];
         } else {
             if (preg_match('#^(.*) AS (.*)$#i', $item[0], $m)) {
                 $column = $this->_quote_identifier($m[1]);
                 $alias = $m[2];
             } else {
                 $column = $this->_quote_identifier($item[0]);
                 $alias = $item[0];
             }
         }
         // 其它参数
         $args_str = '';
         if (($count_item = count($item)) > 2) {
             for ($i = 2; $i++; $i < count($count_item)) {
                 $args_str .= ',' . $this->_quote_identifier($item[$i]);
             }
         }
         $builder['select'][] = array(Database::expr_value(strtoupper($item[1]) . '(' . $this->_quote_identifier($column . $args_str) . ')'), $alias);
     }
 }