diff --git a/client/src/app-components/ticket-viewer.js b/client/src/app-components/ticket-viewer.js
index e965fe8e..dac48eda 100644
--- a/client/src/app-components/ticket-viewer.js
+++ b/client/src/app-components/ticket-viewer.js
@@ -73,10 +73,13 @@ class TicketViewer extends React.Component {
#{ticket.ticketNumber}
- {ticket.title}
+ { false ? {ticket.title} : this.editTitle()}
+
+
+
{this.props.editable ? this.renderEditableHeaders() : this.renderHeaders()}
@@ -104,6 +107,16 @@ class TicketViewer extends React.Component {
);
}
+ editTitle(){
+ return(
+
+
+
+ )
+ }
+
renderEditableHeaders() {
const ticket = this.props.ticket;
const departments = this.getDepartmentsForTransfer();
diff --git a/server/controllers/ticket.php b/server/controllers/ticket.php
index e60c253e..bc046c51 100755
--- a/server/controllers/ticket.php
+++ b/server/controllers/ticket.php
@@ -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);
diff --git a/server/controllers/ticket/edit-comment.php b/server/controllers/ticket/edit-comment.php
index c924694b..faa76539 100644
--- a/server/controllers/ticket/edit-comment.php
+++ b/server/controllers/ticket/edit-comment.php
@@ -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
]
]
];
diff --git a/server/controllers/ticket/edit-title.php b/server/controllers/ticket/edit-title.php
new file mode 100644
index 00000000..84450141
--- /dev/null
+++ b/server/controllers/ticket/edit-title.php
@@ -0,0 +1,65 @@
+ '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();
+ }
+}
diff --git a/server/models/Ticket.php b/server/models/Ticket.php
index 5ad71589..c820c270 100755
--- a/server/models/Ticket.php
+++ b/server/models/Ticket.php
@@ -51,7 +51,8 @@ class Ticket extends DataStore {
'authorEmail',
'authorName',
'sharedTagList',
- 'editedContent'
+ 'editedContent',
+ 'editedTitle'
);
}
diff --git a/tests/init.rb b/tests/init.rb
index e86faea2..8c6cb9f4 100644
--- a/tests/init.rb
+++ b/tests/init.rb
@@ -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'
diff --git a/tests/ticket/edit-title.rb b/tests/ticket/edit-title.rb
new file mode 100644
index 00000000..095be590
--- /dev/null
+++ b/tests/ticket/edit-title.rb
@@ -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