Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/Support.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

namespace lukeyouell\support;

use lukeyouell\support\elements\Message as MessageElement;
use lukeyouell\support\elements\Ticket as TicketElement;
use lukeyouell\support\models\Settings;
use lukeyouell\support\services\SupportService as SupportServiceService;
Expand Down Expand Up @@ -74,7 +75,11 @@ function (RegisterUrlRulesEvent $event) {

$event->rules['support/settings/ticket-statuses'] = 'support/ticket-statuses/index';
$event->rules['support/settings/ticket-statuses/new'] = 'support/ticket-statuses/edit';
$event->rules['support/settings/ticket-statuses/<id:\d+>'] = 'support/ticket-statuses/edit';
$event->rules['support/settings/ticket-statuses/<id:\d+>'] = 'support/ticket-statuses/edit';

$event->rules['support/settings/ticket-priorities'] = 'support/ticket-priorities/index';
$event->rules['support/settings/ticket-priorities/new'] = 'support/ticket-priorities/edit';
$event->rules['support/settings/ticket-priorities/<id:\d+>'] = 'support/ticket-priorities/edit';

$event->rules['support/settings/emails'] = 'support/emails/index';
$event->rules['support/settings/emails/new'] = 'support/emails/edit';
Expand Down Expand Up @@ -141,7 +146,8 @@ function (PluginEvent $event) {
'mailService' => \lukeyouell\support\services\MailService::class,
'messageService' => \lukeyouell\support\services\MessageService::class,
'ticketService' => \lukeyouell\support\services\TicketService::class,
'ticketStatusService' => \lukeyouell\support\services\TicketStatusService::class,
'ticketStatusService' => \lukeyouell\support\services\TicketStatusService::class,
'ticketPriorityService' => \lukeyouell\support\services\TicketPriorityService::class,
]);
}

Expand Down
152 changes: 152 additions & 0 deletions src/controllers/TicketPrioritiesController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
<?php
/**
* Support plugin for Craft CMS 3.x
*
* Simple support system for tracking, prioritising and solving customer support tickets.
*
* @link https://github.com/lukeyouell
* @copyright Copyright (c) 2018 Luke Youell
*/

namespace lukeyouell\support\controllers;

use lukeyouell\support\Support;
use lukeyouell\support\models\TicketPriority as TicketPriorityModel;

use Craft;
use craft\helpers\ArrayHelper;
use craft\helpers\Json;
use craft\web\Controller;

use yii\base\InvalidConfigException;
use yii\web\Response;

class TicketPrioritiesController extends Controller
{
// Public Properties
// =========================================================================

public $settings;

// Public Methods
// =========================================================================

public function init()
{
parent::init();

$this->settings = Support::$plugin->getSettings();
if (!$this->settings->validate()) {
throw new InvalidConfigException('Support settings don’t validate.');
}
}

public function actionIndex()
{

$settings = $this->settings;
$ticketPriorities = Support::getInstance()->ticketPriorityService->getAllTicketPriorities();

$variables = [
'settings' => $settings,
'ticketPriorities' => $ticketPriorities,
];

return $this->renderTemplate('support/_settings/ticket-priorities/index', $variables);
}

public function actionEdit(int $id = null, TicketPriorityModel $ticketPriority = null)
{
$variables = [
'id' => $id,
'ticketPriority' => $ticketPriority,
];

if (!$variables['ticketPriority']) {
if ($variables['id']) {
$variables['ticketPriority'] = Support::getInstance()->ticketPriorityService->getTicketPriorityById($variables['id']);

if (!$variables['ticketPriority']) {
throw new NotFoundHttpException('Ticket priority not found');
}
} else {
$variables['ticketPriority'] = new TicketPriorityModel();
}
}

if ($variables['ticketPriority']->id) {
$variables['title'] = $variables['ticketPriority']->name;
} else {
$variables['title'] = 'Create a new ticket priority';
}

$emails = Support::getInstance()->emailService->getAllEmails();
$variables['emails'] = ArrayHelper::map($emails, 'id', 'name');

return $this->renderTemplate('support/_settings/ticket-priorities/edit', $variables);
}

public function actionSave()
{
$this->requirePostRequest();

$request = Craft::$app->getRequest();
$id = $request->post('id');
$ticketPriority = Support::getInstance()->ticketPriorityService->getTicketPriorityById($id);

if (!$ticketPriority) {
$ticketPriority = new TicketPriorityModel();
}

$ticketPriority->name = $request->post('name');
$ticketPriority->handle = $request->post('handle');
$ticketPriority->colour = $request->post('colour');
$ticketPriority->default = $request->post('default');
// $emailIds = $request->post('emails');

// if (!$emailIds) {
// $emailIds = [];
// }

// Save it
// $save = Support::getInstance()->ticketPriorityService->saveTicketPriority($ticketPriority, $emailIds);
$save = Support::getInstance()->ticketPriorityService->saveTicketPriority($ticketPriority);

if ($save) {
Craft::$app->getSession()->setNotice('Ticket priority saved.');

$this->redirectToPostedUrl();
} else {
Craft::$app->getSession()->setError('Couldn’t save ticket priority.');
}

Craft::$app->getUrlManager()->setRouteParams(compact('ticketPriority'));
}

public function actionReorder(): Response
{
$this->requirePostRequest();
$this->requireAcceptsJson();

$ids = Json::decode(Craft::$app->getRequest()->getRequiredBodyParam('ids'));

if ($success = Support::getInstance()->ticketPriorityService->reorderTicketPriorities($ids)) {
return $this->asJson(['success' => $success]);
}

return $this->asJson(['error' => 'Couldn’t reorder ticket priorities.']);
}

public function actionDelete()
{
$this->requireAcceptsJson();

$ticketPriorityId = Craft::$app->getRequest()->getRequiredParam('id');

if ($success = Support::getInstance()->ticketPriorityService->deleteTicketPriorityById($ticketPriorityId)) {
return $this->asJson(['success' => true]);
}

return $this->asJson(['error' => 'Couldn’t delete ticket priority.']);
}
}
29 changes: 27 additions & 2 deletions src/controllers/TicketsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ public function actionNew()
$volume = $this->settings->volumeId ? Craft::$app->getVolumes()->getVolumeById($this->settings->volumeId) : null;

$variables = [
'volume' => $volume,
'volume' => $volume,
'ticketPriorities' => Support::getInstance()->ticketPriorityService->getAllTicketPriorities(),
'elementType' => Asset::class,
'settings' => $this->settings,
];
Expand All @@ -72,6 +73,7 @@ public function actionView(string $ticketId = null)
$variables = [
'ticket' => $ticket,
'ticketStatuses' => Support::getInstance()->ticketStatusService->getAllTicketStatuses(),
'ticketPriorities' => Support::getInstance()->ticketPriorityService->getAllTicketPriorities(),
'volume' => $volume,
'assetElementType' => Asset::class,
'settings' => $this->settings,
Expand Down Expand Up @@ -133,17 +135,22 @@ public function actionSave()
$request = Craft::$app->getRequest();
$ticketId = Craft::$app->security->validateData($request->post('ticketId'));
$ticketStatusId = $request->post('ticketStatusId');
$ticketPriorityId = $request->post('ticketPriorityId');

if ($ticketId) {
$ticket = Support::getInstance()->ticketService->getTicketById($ticketId);

if (!$ticket) {
throw new NotFoundHttpException('Ticket not found');
}

if ($request->post('ticketPriorityId')) {
Support::getInstance()->ticketService->changeTicketPriority($ticket, $ticketPriorityId);
}

if ($request->post('ticketStatusId')) {
Support::getInstance()->ticketService->changeTicketStatus($ticket, $ticketStatusId);
}
}

Craft::$app->getElements()->saveElement($ticket, false);

Expand All @@ -152,4 +159,22 @@ public function actionSave()

return $this->redirectToPostedUrl();
}

public function actionCloseTicket() {

$request = Craft::$app->getRequest();
$ticketId= $request->post('ticketId');

if ($ticketId) {

$ticket = Support::getInstance()->ticketService->getTicketById($ticketId);
$ticketStatus = Support::getInstance()->ticketStatusService->getTicketStatusByHandle("closed");

Support::getInstance()->ticketService->changeTicketStatus($ticket, $ticketStatus->id);
Craft::$app->getElements()->saveElement($ticket, false);
Craft::$app->getSession()->setNotice('Ticket updated.');
}


}
}
Loading