$ticketMessageManager = $this->getTicketMessageManager(); | $ticketMessageManager = $this->getTicketMessageManager(); | ||||
$ticket = $ticketManager->instanciateTicket($this->getProducerCurrent(), $userCurrent); | $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); | $ticketMessageManager->createTicketMessage($ticket, $userCurrent, $ticket->message); | ||||
$this->setFlash('success', 'Le ticket a bien été créé.'); | $this->setFlash('success', 'Le ticket a bien été créé.'); | ||||
return $this->redirect(['view', 'id' => $ticket->id]); | return $this->redirect(['view', 'id' => $ticket->id]); | ||||
} else { | } else { | ||||
return $this->render('@backend/views/support/create', [ | return $this->render('@backend/views/support/create', [ | ||||
'ticket' => $ticket, | |||||
'ticket' => $ticket | |||||
]); | ]); | ||||
} | } | ||||
} | } |
*/ | */ | ||||
use common\components\BusinessLogic; | use common\components\BusinessLogic; | ||||
use common\logic\Ticket\Ticket\Model\Ticket; | |||||
$serverName = isset($_SERVER['SERVER_NAME']) ?? ''; | $serverName = isset($_SERVER['SERVER_NAME']) ?? ''; | ||||
return [ | return [ | ||||
'bootstrap' => ['listener'], | |||||
'aliases' => [ | 'aliases' => [ | ||||
'@bower' => '@vendor/bower-asset', | '@bower' => '@vendor/bower-asset', | ||||
], | ], | ||||
'enablePrettyUrl' => true, | 'enablePrettyUrl' => true, | ||||
'showScriptName' => false, | 'showScriptName' => false, | ||||
'enableStrictParsing' => false, | 'enableStrictParsing' => false, | ||||
'rules' => [ | |||||
], | |||||
'rules' => [], | |||||
], | ], | ||||
'logic' => function () { | 'logic' => function () { | ||||
return new BusinessLogic(); | 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', | 'language' => 'fr-FR', | ||||
'timeZone' => 'Europe/Paris', | 'timeZone' => 'Europe/Paris', |
<?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; | |||||
} |
namespace common\logic; | namespace common\logic; | ||||
use yii\base\Model; | |||||
use yii\db\ActiveRecord; | use yii\db\ActiveRecord; | ||||
abstract class AbstractBuilder extends AbstractService implements BuilderInterface | abstract class AbstractBuilder extends AbstractService implements BuilderInterface | ||||
{ | { | ||||
public function saveCreate(ActiveRecord $model): bool | |||||
public function create(Model $model): bool | |||||
{ | { | ||||
return $model->save(); | return $model->save(); | ||||
} | } | ||||
public function saveUpdate(ActiveRecord $model): bool | |||||
public function update(Model $model): bool | |||||
{ | { | ||||
return $model->save(); | return $model->save(); | ||||
} | } | ||||
public function delete(ActiveRecord $model): bool | |||||
public function delete(Model $model): bool | |||||
{ | { | ||||
return $model->delete(); | return $model->delete(); | ||||
} | } | ||||
/** | |||||
* @deprecated | |||||
*/ | |||||
public function saveCreate(ActiveRecord $model): bool | |||||
{ | |||||
return $model->save(); | |||||
} | |||||
/** | |||||
* @deprecated | |||||
*/ | |||||
public function saveUpdate(ActiveRecord $model): bool | |||||
{ | |||||
return $model->save(); | |||||
} | |||||
} | } |
namespace common\logic\Ticket\Ticket\Model; | namespace common\logic\Ticket\Ticket\Model; | ||||
use common\components\ActiveRecordCommon; | 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\Producer\Producer\Model\Producer; | ||||
use common\logic\Subscription\Subscription\Event\SubscriptionEventSubscriber; | |||||
use common\logic\Ticket\TicketMessage\Model\TicketMessage; | use common\logic\Ticket\TicketMessage\Model\TicketMessage; | ||||
use common\logic\Ticket\TicketUser\Model\TicketUser; | use common\logic\Ticket\TicketUser\Model\TicketUser; | ||||
use common\logic\User\User\Model\User; | use common\logic\User\User\Model\User; |
public function createTicket(Producer $producer, User $user): Ticket | public function createTicket(Producer $producer, User $user): Ticket | ||||
{ | { | ||||
$ticket = $this->instanciateTicket($producer, $user); | $ticket = $this->instanciateTicket($producer, $user); | ||||
$this->saveCreate($ticket); | |||||
$this->create($ticket); | |||||
return $ticket; | return $ticket; | ||||
} | } | ||||
public function updateTicketStatus(Ticket $ticket, string $status) | public function updateTicketStatus(Ticket $ticket, string $status) | ||||
{ | { | ||||
$ticket->status = $status; | $ticket->status = $status; | ||||
$this->saveUpdate($ticket); | |||||
$this->update($ticket); | |||||
$this->updateTicketUpdatedAt($ticket); | $this->updateTicketUpdatedAt($ticket); | ||||
} | } | ||||
public function updateTicketUpdatedAt(Ticket $ticket) | public function updateTicketUpdatedAt(Ticket $ticket) | ||||
{ | { | ||||
$ticket->updated_at = date('Y-m-d H:i:s'); | $ticket->updated_at = date('Y-m-d H:i:s'); | ||||
$this->saveUpdate($ticket); | |||||
$this->update($ticket); | |||||
} | } | ||||
public function createTicketMessage(TicketMessage $ticketMessage) | public function createTicketMessage(TicketMessage $ticketMessage) | ||||
{ | { | ||||
$this->updateTicketUpdatedAt($ticketMessage->ticket); | $this->updateTicketUpdatedAt($ticketMessage->ticket); | ||||
return $this->saveCreate($ticketMessage); | |||||
return $this->create($ticketMessage); | |||||
} | } | ||||
public function viewTicket(Ticket $ticket, User $user) | public function viewTicket(Ticket $ticket, User $user) |
<?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); | |||||
} | |||||
} |
use common\helpers\Mailjet; | use common\helpers\Mailjet; | ||||
use common\logic\AbstractService; | use common\logic\AbstractService; | ||||
use common\logic\Producer\Producer\Model\Producer; | use common\logic\Producer\Producer\Model\Producer; | ||||
use common\logic\Ticket\Ticket\Model\Ticket; | |||||
use common\logic\User\User\Model\User; | use common\logic\User\User\Model\User; | ||||
use common\logic\UtilsInterface; | use common\logic\UtilsInterface; | ||||
->send(); | ->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, | |||||
] | |||||
]); | |||||
} | |||||
} | } |
<?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> | |||||
<?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]) ?> | |||||
"bower-asset/jquery": "^3.6", | "bower-asset/jquery": "^3.6", | ||||
"yidas/yii2-bower-asset": "2.0.13.1", | "yidas/yii2-bower-asset": "2.0.13.1", | ||||
"stripe/stripe-php": "^7.95", | "stripe/stripe-php": "^7.95", | ||||
"loveorigami/yii2-bootstrap-toggle": "*" | |||||
"loveorigami/yii2-bootstrap-toggle": "*", | |||||
"justcoded/yii2-event-listener": "*" | |||||
}, | }, | ||||
"require-dev": { | "require-dev": { | ||||
"yiisoft/yii2-codeception": "*", | "yiisoft/yii2-codeception": "*", |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
"This file is @generated automatically" | "This file is @generated automatically" | ||||
], | ], | ||||
"content-hash": "85c783330a1d88a3ed3c4674e84d10ba", | |||||
"content-hash": "a48eac3c3b38a39f09914e9a706604ce", | |||||
"packages": [ | "packages": [ | ||||
{ | { | ||||
"name": "2amigos/yii2-chartjs-widget", | "name": "2amigos/yii2-chartjs-widget", | ||||
], | ], | ||||
"time": "2022-06-20T21:43:03+00:00" | "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", | "name": "kartik-v/yii2-mpdf", | ||||
"version": "dev-master", | "version": "dev-master", |