protected function handle() { $request = $this->getRequest(); if ($request->getMethod() == 'POST') { $ids = $request->request->get('ids'); $db = AdminDatabase::getDb(); $session = $this->getSession(); $db->transaction(); try { if (!$ids) { throw new \Exception('没有选中任何管理员'); } foreach ($ids as $user_id) { $administrator = UserModel::getUser($user_id); if ($administrator) { UserModel::deleteUser($user_id); } // 删除用户角色关系 $user_roles = UserRoleModel::allRelationship(function (QueryBuilder $qb) use($user_id) { $qb->andWhere($qb->expr()->eq('user_id', ':user_id'))->setParameter(':user_id', $user_id); }); foreach ($user_roles as $user_role) { $role_id = $user_role['role_id']; UserRoleModel::deleteRelationship($user_id, $role_id); // 减少角色的人数 $role = RoleModel::getRole($role_id); if ($role) { $role->userCount -= 1; // 保存 RoleModel::saveRole($role); } } } $session->addFlash('success', '操作成功'); $db->commit(); } catch (\Exception $e) { $db->rollback(); $session->addFlash('error', $e->getMessage()); } return new RedirectResponse($this->generateUrl('admin_administrator')); } else { $ids = $request->query->get('ids'); $ids = json_decode($ids); if (!$ids) { throw new \Exception('没有选中任何管理员'); } else { $pager = UserModel::listUsers(1, count($ids), function (QueryBuilder $qb) use($ids) { $qb->where($qb->expr()->in('id', $ids)); }); return $this->render('administrator/delete.html.twig', array('users' => $pager)); } } }
protected function handle() { $role = RoleModel::getRole($this->id); if (!$role) { $session = $this->getSession(); $session->addFlash('error', '角色不存在或者未启用'); return new RedirectResponse($this->generateUrl('admin_role')); } $request = $this->getRequest(); $columns = array('ID', '用户名', '邮箱', '手机', 'QQ', '微信', '名称', '创建', '更新'); $fields = array('id', 'username', 'email', 'mobile', 'qq', 'weixin', 'name', 'create_timestamp', 'update_timestamp'); if ($request->isXmlHttpRequest()) { $posts = $request->request; $page_offset = $posts->get('start'); $page_offset = intval($page_offset); $page_size = $posts->get('length'); $page_size = intval($page_size); $is_all = false; if ($page_size < 0) { $is_all = true; } $s_echo = $posts->get('draw'); $s_echo = intval($s_echo); $search = $posts->get('search'); $search_value = $search['value']; $records = array(); $records['data'] = array(); $records['draw'] = $s_echo; $records['recordsTotal'] = 0; $records['recordsFiltered'] = 0; $user_roles = UserRoleModel::allRelationship(function (QueryBuilder $qb) use($role) { $qb->where($qb->expr()->eq('role_id', ':role_id'))->setParameter(':role_id', $role->id); }); $users = array(); foreach ($user_roles as $user_role) { $users[] = $user_role['user_id']; } $users = array_unique($users); if ($is_all) { $page_size = count($users); } $page = $page_offset / $page_size + 1; $pager = UserModel::listUsers($page, $page_size, function (QueryBuilder $qb) use($search_value, $users) { if ($users) { $qb->andWhere($qb->expr()->in('id', $users)); if ($search_value) { $qb->orWhere($qb->expr()->like("`username`", ":username"))->setParameter(":username", "%{$search_value}%"); $qb->orWhere($qb->expr()->like("`name`", ":name"))->setParameter(":name", "%{$search_value}%"); } } else { $qb->andWhere($qb->expr()->eq('id', 0)); } $qb->addOrderBy('create_timestamp', 'desc'); }); $total = $pager->getCount(); $records['recordsTotal'] = $total; $records['recordsFiltered'] = $total; $data = $pager->getData(); foreach ($data as $k => $v) { $line = array(); $line[] = '<input type="checkbox" name="id[]" value="' . $v['id'] . '">'; foreach ($fields as $field) { if (isset($v[$field])) { if ($field == 'create_timestamp' || $field == 'update_timestamp') { // 时间 $line[] = date('Y-m-d H:i:s', $v[$field]); } else { $line[] = $v[$field]; } } } $edit_url = $this->generateUrl('admin_administrator_edit', array('id' => $v['id'])); $line[] = '<a href="' . $edit_url . '"><i class="fa fa-edit"></i> 编辑</a>'; $records['data'][] = $line; } return new JsonResponse($records); } return $this->render('role/users.html.twig', array('role' => $role, 'columns' => $columns)); }