/** * 获取管理员数目 * * @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(); } }
/** * 解析 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); } } }
/** * 格式化高级查询参数到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); } }