From 8b3c8bf2848079f64b92c3fa1d39778dafe3e9e6 Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 20 Nov 2016 19:00:39 -0300 Subject: [PATCH] Ivan - Fix authorUser/authorStaff issues, fix date, add tests for ticket events [skip ci] --- server/controllers/ticket/close.php | 62 +++++++++----- server/controllers/ticket/comment.php | 4 +- server/controllers/ticket/re-open.php | 61 +++++++++----- server/libs/Date.php | 2 +- tests/init.rb | 1 + tests/ticket/events.rb | 117 ++++++++++++++++++++++++++ 6 files changed, 201 insertions(+), 46 deletions(-) create mode 100644 tests/ticket/events.rb diff --git a/server/controllers/ticket/close.php b/server/controllers/ticket/close.php index 6ed94ef7..d62d4d5f 100644 --- a/server/controllers/ticket/close.php +++ b/server/controllers/ticket/close.php @@ -5,6 +5,8 @@ DataValidator::with('CustomValidations', true); class CloseController extends Controller { const PATH = '/close'; + private $ticket; + public function validations() { return [ 'permission' => 'user', @@ -18,34 +20,48 @@ class CloseController extends Controller { } public function handler() { - $ticketNumber = Controller::request('ticketNumber'); - $ticket = Ticket::getByTicketNumber($ticketNumber); - $user = Controller::getLoggedUser(); + $this->ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber')); - if(!Controller::isStaffLogged() && $ticket->author->id !== $user->id){ + if($this->shouldDenyPermission()) { Response::respondError(ERRORS::NO_PERMISSION); return; } - if(Controller::isStaffLogged() && $ticket->owner && $ticket->owner->id !== $user->id){ - Response::respondError(ERRORS::NO_PERMISSION); - return; - } - - if(Controller::isStaffLogged()) { - $ticket->unread = true; - } else { - $ticket->unreadStaff = true; - } - $event = Ticketevent::getEvent(Ticketevent::CLOSE); - $event->setProperties(array( - 'authorStaff' => Controller::getLoggedUser(), - 'date' => Date::getCurrentDate() - )); - - $ticket->addEvent($event); - $ticket->closed = true; - $ticket->store(); + $this->markAsUnread(); + $this->addCloseEvent(); + $this->ticket->closed = true; + + $this->ticket->store(); Response::respondSuccess(); } + + private function shouldDenyPermission() { + $user = Controller::getLoggedUser(); + + return (!Controller::isStaffLogged() && $this->ticket->author->id !== $user->id) || + (Controller::isStaffLogged() && $this->ticket->owner && $this->ticket->owner->id !== $user->id); + } + + private function markAsUnread() { + if(Controller::isStaffLogged()) { + $this->ticket->unread = true; + } else { + $this->ticket->unreadStaff = true; + } + } + + private function addCloseEvent() { + $event = Ticketevent::getEvent(Ticketevent::CLOSE); + $event->setProperties(array( + 'date' => Date::getCurrentDate() + )); + + if(Controller::isStaffLogged()) { + $event->authorStaff = Controller::getLoggedUser(); + } else { + $event->authorUser = Controller::getLoggedUser(); + } + + $this->ticket->addEvent($event); + } } \ No newline at end of file diff --git a/server/controllers/ticket/comment.php b/server/controllers/ticket/comment.php index 2c4b0714..d9db4566 100644 --- a/server/controllers/ticket/comment.php +++ b/server/controllers/ticket/comment.php @@ -52,10 +52,12 @@ class CommentController extends Controller { if(Controller::isStaffLogged()) { $this->ticket->unread = true; + $comment->authorStaff = Controller::getLoggedUser(); } else { $this->ticket->unreadStaff = true; + $comment->authorUser = Controller::getLoggedUser(); } - $comment->authorUser = Controller::getLoggedUser(); + $this->ticket->addEvent($comment); $this->ticket->store(); } diff --git a/server/controllers/ticket/re-open.php b/server/controllers/ticket/re-open.php index 325eb3e4..0a1d4896 100644 --- a/server/controllers/ticket/re-open.php +++ b/server/controllers/ticket/re-open.php @@ -4,6 +4,8 @@ use Respect\Validation\Validator as DataValidator; class ReOpenController extends Controller { const PATH = '/re-open'; + private $ticket; + public function validations() { return [ 'permission' => 'user', @@ -17,32 +19,49 @@ class ReOpenController extends Controller { } public function handler() { - $ticketNumber = Controller::request('ticketNumber'); - $ticket = Ticket::getByTicketNumber($ticketNumber); - $user = Controller::getLoggedUser(); + $this->ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber')); - if(!Controller::isStaffLogged() && $ticket->author->id !== $user->id){ + if($this->shouldDenyPermission()) { Response::respondError(ERRORS::NO_PERMISSION); return; } - if(Controller::isStaffLogged() && $ticket->owner && $ticket->owner->id !== $user->id){ - Response::respondError(ERRORS::NO_PERMISSION); - return; - } - if(Controller::isStaffLogged()) { - $ticket->unread = true; - } else { - $ticket->unreadStaff = true; - } - $event = Ticketevent::getEvent(Ticketevent::RE_OPEN); - $event->setProperties(array( - 'authorUser' => Controller::getLoggedUser(), - 'date' => Date::getCurrentDate() - )); - $ticket->addEvent($event); - $ticket->closed = false; - $ticket->store(); + $this->markAsUnread(); + $this->addReopenEvent(); + $this->ticket->closed = false; + + $this->ticket->store(); Response::respondSuccess(); } + + + private function shouldDenyPermission() { + $user = Controller::getLoggedUser(); + + return (!Controller::isStaffLogged() && $this->ticket->author->id !== $user->id) || + (Controller::isStaffLogged() && $this->ticket->owner && $this->ticket->owner->id !== $user->id); + } + + private function markAsUnread() { + if(Controller::isStaffLogged()) { + $this->ticket->unread = true; + } else { + $this->ticket->unreadStaff = true; + } + } + + private function addReopenEvent() { + $event = Ticketevent::getEvent(Ticketevent::RE_OPEN); + $event->setProperties(array( + 'date' => Date::getCurrentDate() + )); + + if(Controller::isStaffLogged()) { + $event->authorStaff = Controller::getLoggedUser(); + } else { + $event->authorUser = Controller::getLoggedUser(); + } + + $this->ticket->addEvent($event); + } } \ No newline at end of file diff --git a/server/libs/Date.php b/server/libs/Date.php index 1a43f5c9..5f2f6dbe 100644 --- a/server/libs/Date.php +++ b/server/libs/Date.php @@ -1,6 +1,6 @@