diff --git a/server/controllers/staff/assign-ticket.php b/server/controllers/staff/assign-ticket.php index e32e44cd..30e3f37d 100644 --- a/server/controllers/staff/assign-ticket.php +++ b/server/controllers/staff/assign-ticket.php @@ -34,6 +34,7 @@ class AssignStaffController extends Controller { } else { $this->user->sharedTicketList->add($this->ticket); $this->ticket->owner = $this->user; + $this->ticket->unread = true; $this->ticket->store(); $this->user->store(); diff --git a/server/controllers/staff/un-assign-ticket.php b/server/controllers/staff/un-assign-ticket.php index c46f3fe8..4454ef06 100644 --- a/server/controllers/staff/un-assign-ticket.php +++ b/server/controllers/staff/un-assign-ticket.php @@ -26,6 +26,7 @@ class UnAssignStaffController extends Controller { $user->sharedTicketList->remove($ticket); $user->store(); $ticket->owner = null; + $ticket->unread = true; $ticket->store(); Response::respondSuccess(); } else { diff --git a/server/controllers/ticket.php b/server/controllers/ticket.php index 3ac8d015..c11da896 100644 --- a/server/controllers/ticket.php +++ b/server/controllers/ticket.php @@ -10,6 +10,7 @@ include 'ticket/change-department.php'; include 'ticket/close.php'; include 'ticket/re-open.php'; include 'ticket/change-priority.php'; +include 'ticket/seen.php'; $ticketControllers = new ControllerGroup(); $ticketControllers->setGroupPath('/ticket'); @@ -25,5 +26,6 @@ $ticketControllers->addController(new ChangeDepartmentController); $ticketControllers->addController(new CloseController); $ticketControllers->addController(new ReOpenController); $ticketControllers->addController(new ChangePriorityController); +$ticketControllers->addController(new SeenController); $ticketControllers->finalize(); \ No newline at end of file diff --git a/server/controllers/ticket/change-department.php b/server/controllers/ticket/change-department.php index b291e8a7..bb916826 100644 --- a/server/controllers/ticket/change-department.php +++ b/server/controllers/ticket/change-department.php @@ -34,6 +34,7 @@ class ChangeDepartmentController extends Controller { } $ticket->department = $department; + $ticket->unread = true; $ticket->store(); Response::respondSuccess(); } diff --git a/server/controllers/ticket/change-priority.php b/server/controllers/ticket/change-priority.php index f00e7812..49d4e3a5 100644 --- a/server/controllers/ticket/change-priority.php +++ b/server/controllers/ticket/change-priority.php @@ -28,6 +28,7 @@ class ChangePriorityController extends Controller { if($ticket->owner && $user->id === $ticket->owner->id) { $ticket->priority = $priority; + $ticket->unread = true; $ticket->store(); Response::respondSuccess(); } else { diff --git a/server/controllers/ticket/close.php b/server/controllers/ticket/close.php index 5e0b04f5..8e993477 100644 --- a/server/controllers/ticket/close.php +++ b/server/controllers/ticket/close.php @@ -31,7 +31,12 @@ class CloseController extends Controller { Response::respondError(ERRORS::NO_PERMISSION); return; } - + + if(Controller::isStaffLogged()) { + $ticket->unread = true; + } else { + $ticket->unreadStaff = true; + } $ticket->closed = true; $ticket->store(); Response::respondSuccess(); diff --git a/server/controllers/ticket/comment.php b/server/controllers/ticket/comment.php index 83fb5513..2c4b0714 100644 --- a/server/controllers/ticket/comment.php +++ b/server/controllers/ticket/comment.php @@ -51,11 +51,11 @@ class CommentController extends Controller { )); if(Controller::isStaffLogged()) { - $comment->authorUser = Controller::getLoggedUser(); + $this->ticket->unread = true; } else { - $comment->authorUser = Controller::getLoggedUser(); + $this->ticket->unreadStaff = true; } - + $comment->authorUser = Controller::getLoggedUser(); $this->ticket->addEvent($comment); $this->ticket->store(); } diff --git a/server/controllers/ticket/create.php b/server/controllers/ticket/create.php index 64dab1e7..4de927f9 100644 --- a/server/controllers/ticket/create.php +++ b/server/controllers/ticket/create.php @@ -58,6 +58,7 @@ class CreateController extends Controller { 'file' => '', 'date' => Date::getCurrentDate(), 'unread' => false, + 'unreadStaff' => true, 'closed' => false, )); diff --git a/server/controllers/ticket/re-open.php b/server/controllers/ticket/re-open.php index 0ee2caae..d1332f52 100644 --- a/server/controllers/ticket/re-open.php +++ b/server/controllers/ticket/re-open.php @@ -30,7 +30,11 @@ class ReOpenController extends Controller { Response::respondError(ERRORS::NO_PERMISSION); return; } - + if(Controller::isStaffLogged()) { + $ticket->unread = true; + } else { + $ticket->unreadStaff = true; + } $ticket->closed = false; $ticket->store(); Response::respondSuccess(); diff --git a/server/controllers/ticket/seen.php b/server/controllers/ticket/seen.php new file mode 100644 index 00000000..fa07e0c4 --- /dev/null +++ b/server/controllers/ticket/seen.php @@ -0,0 +1,39 @@ + 'user', + 'requestData' => [ + 'ticketNumber' => [ + 'validation' => DataValidator::validTicketNumber(), + 'error' => ERRORS::INVALID_TICKET + ] + ] + ]; + } + + public function handler() { + $ticketnumber = Controller::request('ticketNumber'); + $user = Controller::getLoggedUser(); + $ticket = Ticket::getByTicketNumber($ticketnumber); + + if (Controller::isStaffLogged() && $ticket->owner && $ticket->owner->id === $user->id) { + $ticket->unreadStaff = false; + $ticket->store(); + Response::respondSuccess(); + return; + } + if (!Controller::isStaffLogged() && $ticket->author && $user->id === $ticket->author->id) { + $ticket->unread = false; + $ticket->store(); + Response::respondSuccess(); + return; + } + Response::respondError(ERRORS::NO_PERMISSION); + + } +} \ No newline at end of file diff --git a/server/models/Ticket.php b/server/models/Ticket.php index b029b6a4..74f166d2 100644 --- a/server/models/Ticket.php +++ b/server/models/Ticket.php @@ -18,7 +18,8 @@ class Ticket extends DataStore { 'priority', 'author', 'owner', - 'ownTicketeventList' + 'ownTicketeventList', + 'unreadStaff' ); } @@ -33,6 +34,8 @@ class Ticket extends DataStore { public function getDefaultProps() { return array( 'priority' => 'low', + 'unread' => false, + 'unreadStaff' => true, 'ticketNumber' => $this->generateUniqueTicketNumber() ); } diff --git a/tests/staff/assign-ticket.rb b/tests/staff/assign-ticket.rb index 432ad9ca..7baaa09c 100644 --- a/tests/staff/assign-ticket.rb +++ b/tests/staff/assign-ticket.rb @@ -22,6 +22,8 @@ describe '/staff/assign-ticket' do (ticket['owner_id']).should.equal('1') + (ticket['unread']).should.equal('1') + staff_ticket = $database.getRow('staff_ticket', 1 , 'id') (staff_ticket['staff_id']).should.equal('1') diff --git a/tests/staff/un-assign-ticket.rb b/tests/staff/un-assign-ticket.rb index 6d055872..d0f5fc71 100644 --- a/tests/staff/un-assign-ticket.rb +++ b/tests/staff/un-assign-ticket.rb @@ -21,6 +21,7 @@ describe '/staff/un-assign-ticket' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['owner_id']).should.equal(nil) + (ticket['unread']).should.equal('1') staff_ticket = $database.getRow('staff_ticket', 1 , 'id') diff --git a/tests/ticket/change-department.rb b/tests/ticket/change-department.rb index e7e96b78..0775d999 100644 --- a/tests/ticket/change-department.rb +++ b/tests/ticket/change-department.rb @@ -17,6 +17,7 @@ describe '/ticket/change-department' do (result['status']).should.equal('success') ticket = $database.getRow('ticket', 1 , 'id') + (ticket['unread']).should.equal('1') (ticket['department_id']).should.equal('2') end end \ No newline at end of file diff --git a/tests/ticket/change-priority.rb b/tests/ticket/change-priority.rb index d33839f9..37ff474c 100644 --- a/tests/ticket/change-priority.rb +++ b/tests/ticket/change-priority.rb @@ -18,6 +18,7 @@ describe '/ticket/change-priority' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['priority']).should.equal('high') + (ticket['unread']).should.equal('1') end it 'should change priority to medium if everything is okey' do @@ -34,6 +35,7 @@ describe '/ticket/change-priority' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['priority']).should.equal('medium') + (ticket['unread']).should.equal('1') end it 'should change priority to low if everything is okey' do @@ -50,6 +52,7 @@ describe '/ticket/change-priority' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['priority']).should.equal('low') + (ticket['unread']).should.equal('1') end end \ No newline at end of file diff --git a/tests/ticket/close.rb b/tests/ticket/close.rb index ab305ab1..a13b3c5d 100644 --- a/tests/ticket/close.rb +++ b/tests/ticket/close.rb @@ -17,6 +17,7 @@ describe '/ticket/close' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['closed']).should.equal('1') + (ticket['unread']).should.equal('1') end end \ No newline at end of file diff --git a/tests/ticket/comment.rb b/tests/ticket/comment.rb index c05790cb..27222b87 100644 --- a/tests/ticket/comment.rb +++ b/tests/ticket/comment.rb @@ -72,6 +72,7 @@ describe '/ticket/comment/' do (comment['content']).should.equal('some comment content') (comment['type']).should.equal('COMMENT') (comment['author_user_id']).should.equal($csrf_userid) + (ticket['unread_staff']).should.equal('1') end it 'should fail if user is not the author nor owner' do diff --git a/tests/ticket/re-open.rb b/tests/ticket/re-open.rb index 2cacfbbd..43bd3867 100644 --- a/tests/ticket/re-open.rb +++ b/tests/ticket/re-open.rb @@ -17,6 +17,7 @@ describe '/ticket/re-open' do ticket = $database.getRow('ticket', 1 , 'id') (ticket['closed']).should.equal('0') + (ticket['unread']).should.equal('1') end end \ No newline at end of file diff --git a/tests/ticket/seen.rb b/tests/ticket/seen.rb new file mode 100644 index 00000000..9cff88bc --- /dev/null +++ b/tests/ticket/seen.rb @@ -0,0 +1,39 @@ +describe '/ticket/seen' do + + describe 'when a staff is logged' do + request('/user/logout') + Scripts.login($staff[:email], $staff[:password], true) + + it 'should change unread if everything is okey ' do + ticket = $database.getRow('ticket', 1, 'id') + result = request('/ticket/seen', { + ticketNumber: ticket['ticket_number'], + csrf_userid: $csrf_userid, + csrf_token: $csrf_token + }) + (result['status']).should.equal('success') + ticket = $database.getRow('ticket', 1, 'id') + (ticket['unreadStaff']).should.equal('0') + + end + end + + describe 'when a user is logged' do + + request('/user/logout') + Scripts.login() + it 'should change unread if everything is okey ' do + ticket = $database.getRow('ticket', 1, 'id') + result = request('/ticket/seen', { + ticketNumber: ticket['ticket_number'], + csrf_userid: $csrf_userid, + csrf_token: $csrf_token + }) + + (result['status']).should.equal('success') + ticket = $database.getRow('ticket', 1, 'id') + (ticket['unread']).should.equal('0') + end + end + +end \ No newline at end of file