[ 'class' => VerbFilter::class, 'actions' => [ ], ], 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['@'], 'matchCallback' => function ($rule, $action) { return $this->getUserManager()->hasAccessBackend(); } ] ], ], ]; } public function actionIndex() { $searchTicket = new TicketSearch(); $dataProviderTicketOpen = $searchTicket->search('producer', ['TicketSearch' => ['status' => Ticket::STATUS_OPEN]]); $dataProviderTicketClosed = $searchTicket->search('producer', ['TicketSearch' => ['status' => Ticket::STATUS_CLOSED]]); return $this->render('index', [ 'context' => 'producer', 'searchTicket' => $searchTicket, 'dataProviderTicketOpen' => $dataProviderTicketOpen, 'dataProviderTicketClosed' => $dataProviderTicketClosed ]); } public function actionCreate() { $userCurrent = $this->getUserCurrent(); $ticketManager = $this->getTicketManager(); $ticketMessageManager = $this->getTicketMessageManager(); $ticket = $ticketManager->instanciateTicket($this->getProducerCurrent(), $userCurrent); 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 ]); } } public function actionView(int $id) { $ticketManager = $this->getTicketManager(); $ticketMessageManager = $this->getTicketMessageManager(); $ticket = $this->findTicket($id); $ticketManager->viewTicket($ticket, $this->getUserCurrent()); $ticketMessage = $ticketMessageManager->instanciateTicketMessage($ticket, $this->getUserCurrent()); if ($ticketMessage->load(\Yii::$app->request->post()) && $ticketManager->createTicketMessage($ticketMessage)) { return $this->redirect(['view', 'id' => $ticket->id, '#' => 'bottom']); } return $this->render('@backend/views/support/view', [ 'ticket' => $ticket, 'ticketMessageResponse' => $ticketMessage ]); } public function actionClose(int $id) { $ticketManager = $this->getTicketManager(); $ticket = $this->findTicket($id); $ticketManager->closeTicket($ticket); $this->addFlash('success', "Le ticket ".Html::encode($ticket->subject)." a bien été fermé."); return $this->redirect(['index']); } public function actionOpen(int $id) { $ticketManager = $this->getTicketManager(); $ticket = $this->findTicket($id); $ticketManager->openTicket($ticket); $this->addFlash('success', "Le ticket a bien été ouvert."); return $this->redirect(['index']); } public function findTicket(int $id) { $ticketManager = $this->getTicketManager(); $ticket = $ticketManager->findOneTicketById($id); if ($ticket && $ticketManager->hasTicketAccess($ticket, $this->getUserCurrent())) { return $ticket; } else { throw new NotFoundHttpException("Le ticket est introuvable."); } } }