diff --git a/server/controllers/ticket/create.php b/server/controllers/ticket/create.php index 8cd3be5e..2d9294ba 100644 --- a/server/controllers/ticket/create.php +++ b/server/controllers/ticket/create.php @@ -63,7 +63,8 @@ class CreateController extends Controller { )); $author->sharedTicketList->add($ticket); - + $author->tickets++; + $author->store(); $ticket->store(); diff --git a/server/controllers/user.php b/server/controllers/user.php index 445d3000..96e9b6e8 100644 --- a/server/controllers/user.php +++ b/server/controllers/user.php @@ -8,6 +8,7 @@ include 'user/send-recover-password.php'; include 'user/edit-password.php'; include 'user/edit-email.php'; include 'user/get.php'; +include 'user/get-users.php'; $userControllers = new ControllerGroup(); $userControllers->setGroupPath('/user'); @@ -21,5 +22,6 @@ $userControllers->addController(new RecoverPasswordController); $userControllers->addController(new EditPassword); $userControllers->addController(new EditEmail); $userControllers->addController(new GetUserController); +$userControllers->addController(new GetUsersController); $userControllers->finalize(); diff --git a/server/controllers/user/get-users.php b/server/controllers/user/get-users.php new file mode 100644 index 00000000..a9bf0601 --- /dev/null +++ b/server/controllers/user/get-users.php @@ -0,0 +1,107 @@ + 'staff_2', + 'requestData' => [ + 'page' => [ + 'validation' => DataValidator::numeric(), + 'error' => ERRORS::INVALID_PAGE + ], + 'orderBy' => [ + 'validation' => DataValidator::in(['id','tickets']), + 'error' => ERRORS::INVALID_ORDER + ] + ] + ]; + } + + public function handler() { + $userList = $this->getUserList(); + $userListArray = []; + + foreach ($userList as $user) { + $userListArray[] = [ + 'id' => $user->id, + 'name' => $user->name, + 'tickets' => $user->tickets, + 'email' => $user->email, + 'signupDate' => $user->signupDate + ]; + } + + Response::respondSuccess([ + 'users' => $userListArray, + 'pages' => $this->getPagesQuantity(), + 'page' => Controller::request('page'), + 'orderBy' => Controller::request('orderBy'), + 'desc' => Controller::request('desc'), + 'search' => Controller::request('search') + ]); + } + + private function getUserList() { + $query = $this->getSearchQuery(); + + return User::find($query, [ + '%' . Controller::request('search') . '%', + '%' . Controller::request('search') . '%', + Controller::request('search') . '%', + Controller::request('search') . '%' + ]); + } + + private function getPagesQuantity() { + $query = ''; + + if(Controller::request('search')) { + $query .= " (name LIKE ? OR email LIKE ? )"; + } + + $usersQuantity = User::count($query, [ + '%' . Controller::request('search') . '%', + '%' . Controller::request('search') . '%' + ]); + + return ceil($usersQuantity / 10); + } + + private function getSearchQuery() { + $query = ''; + + if(Controller::request('search')) { + $query .= " (name LIKE ? OR email LIKE ? )"; + $query .= " ORDER BY CASE WHEN (name LIKE ? OR email LIKE ?)"; + $query .= " THEN 1 ELSE 2 END ASC,"; + } else { + $query .= " ORDER BY "; + } + + $query .= $this->getOrderAndLimit(); + + return $query; + } + + private function getOrderAndLimit() { + $query = ''; + + if(Controller::request('orderBy') === 'tickets') { + $query .= 'tickets'; + } else { + $query .= 'id'; + } + + if(Controller::request('desc')) { + $query .= ' desc'; + } else { + $query .= ' asc'; + } + $query .= " LIMIT 10 OFFSET ". ((Controller::request('page')-1)*10); + + return $query; + } +} \ No newline at end of file diff --git a/server/controllers/user/signup.php b/server/controllers/user/signup.php index c112b906..704ae3f6 100644 --- a/server/controllers/user/signup.php +++ b/server/controllers/user/signup.php @@ -65,6 +65,8 @@ class SignUpController extends Controller { $userInstance->setProperties([ 'name' => $this->userName, + 'signupDate' => Date::getCurrentDate(), + 'tickets' => 0, 'email' => $this->userEmail, 'password' => Hashing::hashPassword($this->userPassword) ]); diff --git a/server/data/ERRORS.php b/server/data/ERRORS.php index ea579d71..3b3998a1 100644 --- a/server/data/ERRORS.php +++ b/server/data/ERRORS.php @@ -22,4 +22,6 @@ class ERRORS { const INVALID_PAGE = 'INVALID_PAGE'; const INVALID_QUERY = 'INVALID_QUERY'; const INVALID_TOPIC = 'INVALID_TOPIC'; + const INVALID_SEARCH = 'INVALID_SEARCH'; + const INVALID_ORDER = 'INVALID_ORDER'; } diff --git a/server/models/User.php b/server/models/User.php index b25f5a1a..eb6d7b21 100644 --- a/server/models/User.php +++ b/server/models/User.php @@ -15,8 +15,10 @@ class User extends DataStore { 'email', 'password', 'name', + 'signupDate', + 'tickets', 'sharedTicketList', - 'verificationToken', + 'verificationToken' ]; }