mirror of
https://github.com/opensupports/opensupports.git
synced 2025-07-28 08:14:25 +02:00
part 1 edit ticket title
This commit is contained in:
parent
cc9c51b856
commit
af92a6bbf2
@ -73,10 +73,13 @@ class TicketViewer extends React.Component {
|
||||
<div className="ticket-viewer">
|
||||
<div className="ticket-viewer__header row">
|
||||
<span className="ticket-viewer__number">#{ticket.ticketNumber}</span>
|
||||
<span className="ticket-viewer__title">{ticket.title}</span>
|
||||
{ false ? <span className="ticket-viewer__title">{ticket.title}</span> : this.editTitle()}
|
||||
<span className="ticket-viewer__flag">
|
||||
<Icon name={(ticket.language === 'en') ? 'us' : ticket.language}/>
|
||||
</span>
|
||||
<span>
|
||||
<Icon name="pencil" onClick={this.props.onToggleEdit} />
|
||||
</span>
|
||||
</div>
|
||||
{this.props.editable ? this.renderEditableHeaders() : this.renderHeaders()}
|
||||
<div className="ticket-viewer__content">
|
||||
@ -104,6 +107,16 @@ class TicketViewer extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
editTitle(){
|
||||
return(
|
||||
<span className="ticket-viewer__title">
|
||||
<Form {...this.getCommentFormProps()}>
|
||||
<FormField label={i18n('TITLE')} name="title" validation="TITLE" required field="input" fieldProps={{size: 'small'}}/>
|
||||
</Form>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
renderEditableHeaders() {
|
||||
const ticket = this.props.ticket;
|
||||
const departments = this.getDepartmentsForTransfer();
|
||||
|
@ -4,6 +4,7 @@ $ticketControllers->setGroupPath('/ticket');
|
||||
|
||||
$ticketControllers->addController(new CreateController);
|
||||
$ticketControllers->addController(new EditCommentController);
|
||||
$ticketControllers->addController(new EditTitleController);
|
||||
$ticketControllers->addController(new CommentController);
|
||||
$ticketControllers->addController(new TicketGetController);
|
||||
$ticketControllers->addController(new CheckTicketController);
|
||||
|
@ -36,6 +36,10 @@ class EditCommentController extends Controller {
|
||||
'content' => [
|
||||
'validation' => DataValidator::length(10, 5000),
|
||||
'error' => ERRORS::INVALID_CONTENT
|
||||
],
|
||||
'ticketNumber' => [
|
||||
'validation' => DataValidator::validTicketNumber(),
|
||||
'error' => ERRORS::INVALID_TICKET
|
||||
]
|
||||
]
|
||||
];
|
||||
|
65
server/controllers/ticket/edit-title.php
Normal file
65
server/controllers/ticket/edit-title.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
use Respect\Validation\Validator as DataValidator;
|
||||
DataValidator::with('CustomValidations', true);
|
||||
|
||||
/**
|
||||
* @api {post} /ticket/edit-title Edit title of a ticket
|
||||
* @apiVersion 4.5.0
|
||||
*
|
||||
* @apiName Edit title
|
||||
*
|
||||
* @apiGroup Ticket
|
||||
*
|
||||
* @apiDescription This path edits the title of a ticket.
|
||||
*
|
||||
* @apiPermission user
|
||||
*
|
||||
* @apiParam {String} title The new title of the ticket.
|
||||
* @apiParam {Number} ticketNumber The number of the ticket.
|
||||
*
|
||||
* @apiUse NO_PERMISSION
|
||||
* @apiUse INVALID_TITLE
|
||||
*
|
||||
* @apiSuccess {Object} data Empty object
|
||||
*
|
||||
*/
|
||||
|
||||
class EditTitleController extends Controller {
|
||||
const PATH = '/edit-title';
|
||||
const METHOD = 'POST';
|
||||
|
||||
public function validations() {
|
||||
return [
|
||||
'permission' => 'user',
|
||||
'requestData' => [
|
||||
'title' => [
|
||||
'validation' => DataValidator::length(1, 200),
|
||||
'error' => ERRORS::INVALID_TITLE
|
||||
],
|
||||
'ticketNumber' => [
|
||||
'validation' => DataValidator::validTicketNumber(),
|
||||
'error' => ERRORS::INVALID_TICKET
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function handler() {
|
||||
$user = Controller::getLoggedUser();
|
||||
$newtitle = Controller::request('title');
|
||||
$ticket = Ticket::getByTicketNumber(Controller::request('ticketNumber'));
|
||||
|
||||
if(!$user->canManageTicket($ticket)) {
|
||||
throw new RequestException(ERRORS::NO_PERMISSION);
|
||||
}
|
||||
|
||||
$ticket->title = $newtitle;
|
||||
$ticket->editedTitle = true;
|
||||
$ticket->store();
|
||||
|
||||
$ticketNumber = $ticket->ticketNumber;
|
||||
Log::createLog('EDIT_TITLE', $ticketNumber);
|
||||
|
||||
Response::respondSuccess();
|
||||
}
|
||||
}
|
@ -51,7 +51,8 @@ class Ticket extends DataStore {
|
||||
'authorEmail',
|
||||
'authorName',
|
||||
'sharedTagList',
|
||||
'editedContent'
|
||||
'editedContent',
|
||||
'editedTitle'
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -70,6 +70,7 @@ require './ticket/delete-tag.rb'
|
||||
require './ticket/add-tag.rb'
|
||||
require './ticket/delete-tag.rb'
|
||||
require './ticket/edit-comment.rb'
|
||||
require './ticket/edit-title.rb'
|
||||
require './system/disable-user-system.rb'
|
||||
require './ticket/search.rb'
|
||||
# require './system/get-stats.rb'
|
||||
|
62
tests/ticket/edit-title.rb
Normal file
62
tests/ticket/edit-title.rb
Normal file
@ -0,0 +1,62 @@
|
||||
describe '/ticket/edit-title' do
|
||||
|
||||
request('/user/logout')
|
||||
Scripts.login();
|
||||
Scripts.createTicket('Valar Morghulis','content of the ticket made by an user')
|
||||
ticket = $database.getRow('ticket', 'Valar Morghulis', 'title')
|
||||
ticketNumber = ticket['ticket_number']
|
||||
|
||||
it 'should change title of the ticket if the author user tries it' do
|
||||
result = request('/ticket/edit-title', {
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token,
|
||||
title: 'Valar dohaeris',
|
||||
ticketNumber: ticket['ticket_number']
|
||||
})
|
||||
|
||||
ticket = $database.getRow('ticket', ticketNumber, 'ticket_number')
|
||||
|
||||
(result['status']).should.equal('success')
|
||||
(ticket['title']).should.equal('Valar dohaeris')
|
||||
(ticket['edited_title']).should.equal('1')
|
||||
end
|
||||
|
||||
it 'should change the title of the ticket if staff is logged' do
|
||||
request('/user/logout')
|
||||
Scripts.login($staff[:email], $staff[:password], true)
|
||||
|
||||
result = request('/ticket/edit-title', {
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token,
|
||||
title: 'Valar dohaeris by Staff',
|
||||
ticketNumber: ticket['ticket_number']
|
||||
})
|
||||
|
||||
ticket = $database.getRow('ticket', ticketNumber, 'ticket_number')
|
||||
|
||||
(result['status']).should.equal('success')
|
||||
(ticket['title']).should.equal('Valar dohaeris by Staff')
|
||||
(ticket['edited_title']).should.equal('1')
|
||||
|
||||
end
|
||||
|
||||
it 'should not change the title if the user is not the author' do
|
||||
request('/user/logout')
|
||||
Scripts.login($staff[:email], $staff[:password], true)
|
||||
Scripts.createTicket('Winterfell')
|
||||
ticket = $database.getRow('ticket', 'Winterfell', 'title')
|
||||
|
||||
request('/user/logout')
|
||||
Scripts.login()
|
||||
|
||||
result = request('/ticket/edit-title', {
|
||||
csrf_userid: $csrf_userid,
|
||||
csrf_token: $csrf_token,
|
||||
title: 'Casterly Rock',
|
||||
ticketEventId: ticket['ticket_number']
|
||||
})
|
||||
(result['status']).should.equal('fail')
|
||||
(result['message']).should.equal('NO_PERMISSION')
|
||||
end
|
||||
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user