1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-17 07:45:29 +08:00
2019-12-13 00:10:10 +08:00

182 lines
4.2 KiB
PHP

<?php
namespace App\Http\Admin\Services;
use App\Library\Paginator\Query as PaginateQuery;
use App\Library\Util\Password as PasswordUtil;
use App\Models\User as UserModel;
use App\Repos\Role as RoleRepo;
use App\Repos\User as UserRepo;
use App\Transformers\UserList as UserListTransformer;
use App\Validators\User as UserValidator;
class User extends Service
{
public function getRoles()
{
$roleRepo = new RoleRepo();
$roles = $roleRepo->findAll(['deleted' => 0]);
return $roles;
}
public function getUsers()
{
$pageQuery = new PaginateQuery();
$params = $pageQuery->getParams();
$sort = $pageQuery->getSort();
$page = $pageQuery->getPage();
$limit = $pageQuery->getLimit();
$userRepo = new UserRepo();
$pager = $userRepo->paginate($params, $sort, $page, $limit);
$result = $this->handleUsers($pager);
return $result;
}
public function getUser($id)
{
$user = $this->findOrFail($id);
return $user;
}
public function createUser()
{
$post = $this->request->getPost();
$validator = new UserValidator();
$name = $validator->checkName($post['name']);
$password = $validator->checkPassword($post['password']);
$eduRole = $validator->checkEduRole($post['edu_role']);
$adminRole = $validator->checkAdminRole($post['admin_role']);
$validator->checkIfNameTaken($name);
$data = [];
$data['name'] = $name;
$data['salt'] = PasswordUtil::salt();
$data['password'] = PasswordUtil::hash($password, $data['salt']);
$data['edu_role'] = $eduRole;
$data['admin_role'] = $adminRole;
$user = new UserModel();
$user->create($data);
if ($user->admin_role > 0) {
$this->updateAdminUserCount($user->admin_role);
}
return $user;
}
public function updateUser($id)
{
$user = $this->findOrFail($id);
$post = $this->request->getPost();
$validator = new UserValidator();
$data = [];
if (isset($post['title'])) {
$data['title'] = $validator->checkTitle($post['title']);
}
if (isset($post['about'])) {
$data['about'] = $validator->checkAbout($post['about']);
}
if (isset($post['edu_role'])) {
$data['edu_role'] = $validator->checkEduRole($post['edu_role']);
}
if (isset($post['admin_role'])) {
$data['admin_role'] = $validator->checkAdminRole($post['admin_role']);
}
if (isset($post['locked'])) {
$data['locked'] = $validator->checkLockStatus($post['locked']);
}
if (isset($post['locked_expiry'])) {
$data['locked_expiry'] = $validator->checkLockExpiry($post['locked_expiry']);
if ($data['locked_expiry'] < time()) {
$data['locked'] = 0;
}
}
$oldAdminRole = $user->admin_role;
$user->update($data);
if ($oldAdminRole > 0) {
$this->updateAdminUserCount($oldAdminRole);
}
if ($user->admin_role > 0) {
$this->updateAdminUserCount($user->admin_role);
}
return $user;
}
protected function findOrFail($id)
{
$validator = new UserValidator();
$result = $validator->checkUser($id);
return $result;
}
protected function updateAdminUserCount($roleId)
{
if (!$roleId) {
return false;
}
$roleRepo = new RoleRepo();
$role = $roleRepo->findById($roleId);
if (!$role) {
return false;
}
$userCount = $roleRepo->countUsers($roleId);
$role->user_count = $userCount;
$role->update();
}
protected function handleUsers($pager)
{
if ($pager->total_items > 0) {
$transformer = new UserListTransformer();
$pipeA = $pager->items->toArray();
$pipeB = $transformer->handleAdminRoles($pipeA);
$pipeC = $transformer->handleEduRoles($pipeB);
$pipeD = $transformer->arrayToObject($pipeC);
$pager->items = $pipeD;
}
return $pager;
}
}