part 1 edit ticket title

This commit is contained in:
Guillermo 2020-01-02 09:55:55 -03:00
parent cc9c51b856
commit af92a6bbf2
7 changed files with 149 additions and 2 deletions

View File

@ -73,10 +73,13 @@ class TicketViewer extends React.Component {
<div className="ticket-viewer"> <div className="ticket-viewer">
<div className="ticket-viewer__header row"> <div className="ticket-viewer__header row">
<span className="ticket-viewer__number">#{ticket.ticketNumber}</span> <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"> <span className="ticket-viewer__flag">
<Icon name={(ticket.language === 'en') ? 'us' : ticket.language}/> <Icon name={(ticket.language === 'en') ? 'us' : ticket.language}/>
</span> </span>
<span>
<Icon name="pencil" onClick={this.props.onToggleEdit} />
</span>
</div> </div>
{this.props.editable ? this.renderEditableHeaders() : this.renderHeaders()} {this.props.editable ? this.renderEditableHeaders() : this.renderHeaders()}
<div className="ticket-viewer__content"> <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() { renderEditableHeaders() {
const ticket = this.props.ticket; const ticket = this.props.ticket;
const departments = this.getDepartmentsForTransfer(); const departments = this.getDepartmentsForTransfer();

View File

@ -4,6 +4,7 @@ $ticketControllers->setGroupPath('/ticket');
$ticketControllers->addController(new CreateController); $ticketControllers->addController(new CreateController);
$ticketControllers->addController(new EditCommentController); $ticketControllers->addController(new EditCommentController);
$ticketControllers->addController(new EditTitleController);
$ticketControllers->addController(new CommentController); $ticketControllers->addController(new CommentController);
$ticketControllers->addController(new TicketGetController); $ticketControllers->addController(new TicketGetController);
$ticketControllers->addController(new CheckTicketController); $ticketControllers->addController(new CheckTicketController);

View File

@ -36,6 +36,10 @@ class EditCommentController extends Controller {
'content' => [ 'content' => [
'validation' => DataValidator::length(10, 5000), 'validation' => DataValidator::length(10, 5000),
'error' => ERRORS::INVALID_CONTENT 'error' => ERRORS::INVALID_CONTENT
],
'ticketNumber' => [
'validation' => DataValidator::validTicketNumber(),
'error' => ERRORS::INVALID_TICKET
] ]
] ]
]; ];

View 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();
}
}

View File

@ -51,7 +51,8 @@ class Ticket extends DataStore {
'authorEmail', 'authorEmail',
'authorName', 'authorName',
'sharedTagList', 'sharedTagList',
'editedContent' 'editedContent',
'editedTitle'
); );
} }

View File

@ -70,6 +70,7 @@ require './ticket/delete-tag.rb'
require './ticket/add-tag.rb' require './ticket/add-tag.rb'
require './ticket/delete-tag.rb' require './ticket/delete-tag.rb'
require './ticket/edit-comment.rb' require './ticket/edit-comment.rb'
require './ticket/edit-title.rb'
require './system/disable-user-system.rb' require './system/disable-user-system.rb'
require './ticket/search.rb' require './ticket/search.rb'
# require './system/get-stats.rb' # require './system/get-stats.rb'

View 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