2019-06-27 03:04:56 +02:00
|
|
|
<?php
|
|
|
|
use Respect\Validation\Validator as DataValidator;
|
|
|
|
DataValidator::with('CustomValidations', true);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @api {post} /ticket/edit-comment Edit a comment
|
2021-10-19 03:06:20 +02:00
|
|
|
* @apiVersion 4.10.0
|
2019-06-27 03:04:56 +02:00
|
|
|
*
|
|
|
|
* @apiName Edit comment
|
|
|
|
*
|
|
|
|
* @apiGroup Ticket
|
|
|
|
*
|
2019-10-10 21:03:44 +02:00
|
|
|
* @apiDescription This path edits a comment.
|
2019-06-27 03:04:56 +02:00
|
|
|
*
|
|
|
|
* @apiPermission user
|
|
|
|
*
|
|
|
|
* @apiParam {String} content The new content of the comment.
|
|
|
|
* @apiParam {Number} ticketEventId The id of the ticket event.
|
2019-10-10 21:03:44 +02:00
|
|
|
* @apiParam {Number} ticketNumber The number of the ticket.
|
2019-06-27 03:04:56 +02:00
|
|
|
*
|
|
|
|
* @apiUse NO_PERMISSION
|
2019-10-10 21:03:44 +02:00
|
|
|
* @apiUse INVALID_CONTENT
|
2021-12-03 01:35:37 +01:00
|
|
|
* @apiUse INVALID_TICKET
|
|
|
|
* @apiUse INVALID_TICKET_EVENT
|
|
|
|
* @apiUse TICKET_CONTENT_CANNOT_BE_EDITED
|
2019-06-27 03:04:56 +02:00
|
|
|
*
|
|
|
|
* @apiSuccess {Object} data Empty object
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
class EditCommentController extends Controller {
|
|
|
|
const PATH = '/edit-comment';
|
|
|
|
const METHOD = 'POST';
|
|
|
|
|
|
|
|
public function validations() {
|
2020-05-13 00:22:51 +02:00
|
|
|
return [
|
|
|
|
'permission' => 'user',
|
|
|
|
'requestData' => [
|
|
|
|
'content' => [
|
|
|
|
'validation' => DataValidator::content(),
|
|
|
|
'error' => ERRORS::INVALID_CONTENT
|
|
|
|
],
|
|
|
|
'ticketNumber' => [
|
|
|
|
'validation' => DataValidator::oneOf(DataValidator::validTicketNumber(),DataValidator::nullType()),
|
|
|
|
'error' => ERRORS::INVALID_TICKET
|
2019-06-27 03:04:56 +02:00
|
|
|
]
|
2020-05-13 00:22:51 +02:00
|
|
|
]
|
|
|
|
];
|
2019-06-27 03:04:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function handler() {
|
|
|
|
$user = Controller::getLoggedUser();
|
2019-10-10 21:03:44 +02:00
|
|
|
$newcontent = Controller::request('content', true);
|
2019-07-05 01:22:38 +02:00
|
|
|
$ticketNumberLog = null;
|
2019-06-27 03:04:56 +02:00
|
|
|
$ticketevent = Ticketevent::getTicketEvent(Controller::request('ticketEventId'));
|
|
|
|
|
2021-11-26 21:37:33 +01:00
|
|
|
if(!$ticketevent->isNull()) {
|
|
|
|
$ticket = Ticket::getDataStore($ticketevent->ticketId);
|
|
|
|
} else {
|
|
|
|
$ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber'));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!Controller::isStaffLogged() && $user->id !== $ticketevent->authorUserId && $user->id !== $ticket->authorId) {
|
2019-06-27 03:04:56 +02:00
|
|
|
throw new RequestException(ERRORS::NO_PERMISSION);
|
|
|
|
}
|
|
|
|
|
2021-12-03 01:35:37 +01:00
|
|
|
if (!$ticketevent->isNull()) {
|
|
|
|
if($user->id !== $ticketevent->authorUserId) {
|
|
|
|
throw new RequestException(ERRORS::NO_PERMISSION);
|
|
|
|
}
|
|
|
|
} else if ($user->id !== $ticket->authorId) {
|
|
|
|
throw new RequestException(ERRORS::NO_PERMISSION);
|
|
|
|
}
|
|
|
|
|
2021-11-26 21:37:33 +01:00
|
|
|
if(Controller::isStaffLogged() && !$user->canManageTicket($ticket)) {
|
|
|
|
throw new RequestException(ERRORS::NO_PERMISSION);
|
|
|
|
}
|
2019-07-05 01:22:38 +02:00
|
|
|
|
2021-11-26 21:37:33 +01:00
|
|
|
if(!$ticketevent->isNull()) {
|
|
|
|
if($ticketevent->type !== "COMMENT" || $ticket->closed || $ticket->getLatestEventOfType("COMMENT")['id'] !== $ticketevent->id) {
|
|
|
|
throw new RequestException(ERRORS::INVALID_TICKET_EVENT);
|
|
|
|
}
|
2021-12-03 01:35:37 +01:00
|
|
|
} else if(sizeof($ticket->getEventsOfType("COMMENT"))) {
|
|
|
|
throw new RequestException(ERRORS::TICKET_CONTENT_CANNOT_BE_EDITED);
|
2019-07-05 01:22:38 +02:00
|
|
|
}
|
|
|
|
|
2019-06-27 03:04:56 +02:00
|
|
|
if(!$ticketevent->isNull()){
|
2019-07-05 01:22:38 +02:00
|
|
|
$ticketNumber = Ticket::getTicket($ticketevent->ticketId)->ticketNumber;
|
|
|
|
|
2019-06-27 03:04:56 +02:00
|
|
|
$ticketevent->content = $newcontent;
|
|
|
|
$ticketevent->editedContent = true;
|
|
|
|
$ticketevent->store();
|
2019-10-10 21:03:44 +02:00
|
|
|
} else {
|
2019-07-05 01:22:38 +02:00
|
|
|
$ticketNumber = $ticket->ticketNumber;
|
|
|
|
|
2019-06-27 03:04:56 +02:00
|
|
|
$ticket->content = $newcontent;
|
|
|
|
$ticket->editedContent = true;
|
|
|
|
$ticket->store();
|
|
|
|
}
|
|
|
|
|
2019-07-05 01:22:38 +02:00
|
|
|
Log::createLog('EDIT_COMMENT', $ticketNumber);
|
|
|
|
|
2019-06-27 03:04:56 +02:00
|
|
|
Response::respondSuccess();
|
|
|
|
}
|
|
|
|
}
|