@@ -91,13 +91,13 @@ class SupportController extends BackendController | |||
$ticketMessageManager = $this->getTicketMessageManager(); | |||
$ticket = $ticketManager->instanciateTicket($this->getProducerCurrent(), $userCurrent); | |||
if ($ticket->load(\Yii::$app->request->post()) && $ticketManager->saveCreate($ticket)) { | |||
if ($ticket->load(\Yii::$app->request->post()) && $ticket->validate() && $ticketManager->create($ticket)) { | |||
$ticketMessageManager->createTicketMessage($ticket, $userCurrent, $ticket->message); | |||
$this->setFlash('success', 'Le ticket a bien été créé.'); | |||
return $this->redirect(['view', 'id' => $ticket->id]); | |||
} else { | |||
return $this->render('@backend/views/support/create', [ | |||
'ticket' => $ticket, | |||
'ticket' => $ticket | |||
]); | |||
} | |||
} |
@@ -37,10 +37,12 @@ | |||
*/ | |||
use common\components\BusinessLogic; | |||
use common\logic\Ticket\Ticket\Model\Ticket; | |||
$serverName = isset($_SERVER['SERVER_NAME']) ?? ''; | |||
return [ | |||
'bootstrap' => ['listener'], | |||
'aliases' => [ | |||
'@bower' => '@vendor/bower-asset', | |||
], | |||
@@ -116,12 +118,20 @@ return [ | |||
'enablePrettyUrl' => true, | |||
'showScriptName' => false, | |||
'enableStrictParsing' => false, | |||
'rules' => [ | |||
], | |||
'rules' => [], | |||
], | |||
'logic' => function () { | |||
return new BusinessLogic(); | |||
} | |||
}, | |||
'listener' => [ | |||
'class' => \justcoded\yii2\eventlistener\components\EventListener::class, | |||
'listeners' => [], | |||
'observers' => [ | |||
Ticket::class => [ | |||
common\logic\User\User\Event\TicketObserver::class, | |||
] | |||
], | |||
], | |||
], | |||
'language' => 'fr-FR', | |||
'timeZone' => 'Europe/Paris', |
@@ -0,0 +1,18 @@ | |||
<?php | |||
namespace common\events; | |||
use yii\base\Event; | |||
use yii\base\Model; | |||
class EntityManagerEvent extends Event | |||
{ | |||
const PRE_CREATE_EVENT = 'entity_manager_event.pre_create'; | |||
const POST_CREATE_EVENT = 'entity_manager_event.post_create'; | |||
const PRE_UPDATE_EVENT = 'entity_manager_event.pre_update'; | |||
const POST_UPDATE_EVENT = 'entity_manager_event.post_update'; | |||
const PRE_DELETE_EVENT = 'entity_manager_event.pre_delete'; | |||
const POST_DELETE_EVENT = 'entity_manager_event.post_delete'; | |||
public Model $model; | |||
} |
@@ -2,22 +2,39 @@ | |||
namespace common\logic; | |||
use yii\base\Model; | |||
use yii\db\ActiveRecord; | |||
abstract class AbstractBuilder extends AbstractService implements BuilderInterface | |||
{ | |||
public function saveCreate(ActiveRecord $model): bool | |||
public function create(Model $model): bool | |||
{ | |||
return $model->save(); | |||
} | |||
public function saveUpdate(ActiveRecord $model): bool | |||
public function update(Model $model): bool | |||
{ | |||
return $model->save(); | |||
} | |||
public function delete(ActiveRecord $model): bool | |||
public function delete(Model $model): bool | |||
{ | |||
return $model->delete(); | |||
} | |||
/** | |||
* @deprecated | |||
*/ | |||
public function saveCreate(ActiveRecord $model): bool | |||
{ | |||
return $model->save(); | |||
} | |||
/** | |||
* @deprecated | |||
*/ | |||
public function saveUpdate(ActiveRecord $model): bool | |||
{ | |||
return $model->save(); | |||
} | |||
} |
@@ -39,7 +39,10 @@ | |||
namespace common\logic\Ticket\Ticket\Model; | |||
use common\components\ActiveRecordCommon; | |||
use common\events\EntityManagerEvent; | |||
use common\logic\Distribution\Distribution\Model\Distribution; | |||
use common\logic\Producer\Producer\Model\Producer; | |||
use common\logic\Subscription\Subscription\Event\SubscriptionEventSubscriber; | |||
use common\logic\Ticket\TicketMessage\Model\TicketMessage; | |||
use common\logic\Ticket\TicketUser\Model\TicketUser; | |||
use common\logic\User\User\Model\User; |
@@ -35,7 +35,7 @@ class TicketBuilder extends AbstractBuilder | |||
public function createTicket(Producer $producer, User $user): Ticket | |||
{ | |||
$ticket = $this->instanciateTicket($producer, $user); | |||
$this->saveCreate($ticket); | |||
$this->create($ticket); | |||
return $ticket; | |||
} | |||
@@ -43,7 +43,7 @@ class TicketBuilder extends AbstractBuilder | |||
public function updateTicketStatus(Ticket $ticket, string $status) | |||
{ | |||
$ticket->status = $status; | |||
$this->saveUpdate($ticket); | |||
$this->update($ticket); | |||
$this->updateTicketUpdatedAt($ticket); | |||
} | |||
@@ -61,13 +61,13 @@ class TicketBuilder extends AbstractBuilder | |||
public function updateTicketUpdatedAt(Ticket $ticket) | |||
{ | |||
$ticket->updated_at = date('Y-m-d H:i:s'); | |||
$this->saveUpdate($ticket); | |||
$this->update($ticket); | |||
} | |||
public function createTicketMessage(TicketMessage $ticketMessage) | |||
{ | |||
$this->updateTicketUpdatedAt($ticketMessage->ticket); | |||
return $this->saveCreate($ticketMessage); | |||
return $this->create($ticketMessage); | |||
} | |||
public function viewTicket(Ticket $ticket, User $user) |
@@ -0,0 +1,17 @@ | |||
<?php | |||
namespace common\logic\User\User\Event; | |||
use common\logic\User\User\Wrapper\UserManager; | |||
use justcoded\yii2\eventlistener\observers\ActiveRecordObserver; | |||
use yii\db\AfterSaveEvent; | |||
class TicketObserver extends ActiveRecordObserver | |||
{ | |||
public function inserted(AfterSaveEvent $event) | |||
{ | |||
$ticket = $event->sender; | |||
$userManager = UserManager::getInstance(); | |||
$userManager->sendMailNewTicketAdmin($ticket); | |||
} | |||
} |
@@ -6,6 +6,7 @@ use common\helpers\GlobalParam; | |||
use common\helpers\Mailjet; | |||
use common\logic\AbstractService; | |||
use common\logic\Producer\Producer\Model\Producer; | |||
use common\logic\Ticket\Ticket\Model\Ticket; | |||
use common\logic\User\User\Model\User; | |||
use common\logic\UtilsInterface; | |||
@@ -54,4 +55,22 @@ class UserUtils extends AbstractService implements UtilsInterface | |||
->send(); | |||
} | |||
} | |||
public function sendMailNewTicketAdmin(Ticket $ticket) | |||
{ | |||
$adminEmail = \Yii::$app->params['adminEmail']; | |||
Mailjet::sendMail([ | |||
'from_email' => $adminEmail, | |||
'from_name' => 'Opendistrib', | |||
'to_email' => $adminEmail, | |||
'to_name' => 'Opendistrib', | |||
'subject' => '[Opendistrib] Nouveau ticket', | |||
'content_view_text' => '@common/mail/newTicketAdmin-text.php', | |||
'content_view_html' => '@common/mail/newTicketAdmin-html.php', | |||
'content_params' => [ | |||
'ticket' => $ticket, | |||
] | |||
]); | |||
} | |||
} |
@@ -0,0 +1,46 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use yii\helpers\Html; | |||
?> | |||
<p>Un nouveau ticket vient d'être ouvert par <strong><?= Html::encode($ticket->producer->name) ?></strong> : | |||
<a href="<?= Yii::$app->urlManagerBackend->createAbsoluteUrl(['support/view', 'id' => $ticket->id]) ?>"><?= Html::encode($ticket->subject) ?></a>.</p> | |||
@@ -0,0 +1,47 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use yii\helpers\Html; | |||
?> | |||
Un nouveau ticket vient d'être ouvert par <?= Html::encode($ticket->producer->name) ?> : <?= Html::encode($ticket->subject) ?>. | |||
<?= Yii::$app->urlManagerBackend->createAbsoluteUrl(['support/view', 'id' => $ticket->id]) ?> | |||
@@ -31,7 +31,8 @@ | |||
"bower-asset/jquery": "^3.6", | |||
"yidas/yii2-bower-asset": "2.0.13.1", | |||
"stripe/stripe-php": "^7.95", | |||
"loveorigami/yii2-bootstrap-toggle": "*" | |||
"loveorigami/yii2-bootstrap-toggle": "*", | |||
"justcoded/yii2-event-listener": "*" | |||
}, | |||
"require-dev": { | |||
"yiisoft/yii2-codeception": "*", |
@@ -4,7 +4,7 @@ | |||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | |||
"This file is @generated automatically" | |||
], | |||
"content-hash": "85c783330a1d88a3ed3c4674e84d10ba", | |||
"content-hash": "a48eac3c3b38a39f09914e9a706604ce", | |||
"packages": [ | |||
{ | |||
"name": "2amigos/yii2-chartjs-widget", | |||
@@ -1080,6 +1080,53 @@ | |||
], | |||
"time": "2022-06-20T21:43:03+00:00" | |||
}, | |||
{ | |||
"name": "justcoded/yii2-event-listener", | |||
"version": "1.0.2", | |||
"source": { | |||
"type": "git", | |||
"url": "https://github.com/justcoded/yii2-event-listener.git", | |||
"reference": "7407899c71241a92b6508561cf1527e5f097ca57" | |||
}, | |||
"dist": { | |||
"type": "zip", | |||
"url": "https://api.github.com/repos/justcoded/yii2-event-listener/zipball/7407899c71241a92b6508561cf1527e5f097ca57", | |||
"reference": "7407899c71241a92b6508561cf1527e5f097ca57", | |||
"shasum": "" | |||
}, | |||
"require": { | |||
"php": ">=7.0.0", | |||
"yiisoft/yii2": "~2.0.11" | |||
}, | |||
"type": "yii2-extension", | |||
"autoload": { | |||
"psr-4": { | |||
"justcoded\\yii2\\eventlistener\\": "src/" | |||
} | |||
}, | |||
"notification-url": "https://packagist.org/downloads/", | |||
"license": [ | |||
"BSD-3-Clause" | |||
], | |||
"authors": [ | |||
{ | |||
"name": "Alex Prokopenko", | |||
"email": "aprokopenko@justcoded.com" | |||
} | |||
], | |||
"description": "Yii2 Event Listener", | |||
"keywords": [ | |||
"event listener", | |||
"events", | |||
"listeners", | |||
"yii2" | |||
], | |||
"support": { | |||
"issues": "https://github.com/justcoded/yii2-event-listener/issues", | |||
"source": "https://github.com/justcoded/yii2-event-listener/tree/1.0.2" | |||
}, | |||
"time": "2019-06-24T17:11:24+00:00" | |||
}, | |||
{ | |||
"name": "kartik-v/yii2-mpdf", | |||
"version": "dev-master", |