tickets = $tickets; $this->comments = $ticketComments; parent::__construct(); } function renderIndex(): void { $this->assertUserLoggedIn(); $this->template->mode = in_array($this->queryParam("act"), ["faq", "new", "list"]) ? $this->queryParam("act") : "faq"; $tickets = $this->tickets->getTicketsByuId($this->user->id); if ($tickets) { $this->template->tickets = $tickets; } if($_SERVER["REQUEST_METHOD"] === "POST") { if(!empty($this->postParam("name")) && !empty($this->postParam("text"))) { $this->assertNoCSRF(); $ticket = new Ticket; $ticket->setType(0); $ticket->setUser_id($this->user->id); $ticket->setName($this->postParam("name")); $ticket->setText($this->postParam("text")); $ticket->setcreated(time()); $ticket->save(); header("HTTP/1.1 302 Found"); header("Location: /support/view/" . $ticket->getId()); } else { $this->flashFail("err", "Ошибка", "Вы не ввели имя или текст "); } // $this->template->test = 'cool post'; } } function renderList(): void { $this->assertUserLoggedIn(); $this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0); $act = $this->queryParam("act") ?? "open"; switch($act) { default: case "open": $state = 0; break; case "answered": $state = 1; break; case "closed": $state = 2; } $this->template->act = $act; $this->template->page = (int) ($this->queryParam("p") ?? 1); $this->template->count = $this->tickets->getTicketCount($state); $this->template->iterator = $this->tickets->getTickets($state, $this->template->page); } function renderView(int $id): void { $this->assertUserLoggedIn(); $ticket = $this->tickets->get($id); $ticketComments1 = $this->comments->getCommentsById($id); if(!$ticket || $ticket->isDeleted() != 0 || $ticket->authorId() !== $this->user->id) { $this->notFound(); } else { $this->template->ticket = $ticket; $this->template->comments = $ticketComments1; $this->template->id = $id; } } function renderDelete(int $id): void { $this->assertUserLoggedIn(); if (!empty($id)) { $ticket = $this->tickets->get($id); if (!$ticket || $ticket->isDeleted() != 0 || $ticket->authorId() !== $this->user->id) { $this->notFound(); } else { $ticket->delete(); header("HTTP/1.1 302 Found"); header("Location: /support"); } } } function renderMakeComment(int $id): void { $ticket = $this->tickets->get($id); if($ticket->isDeleted() === 1 || $ticket->getType() === 2 || $ticket->authorId() !== $this->user->id) { header("HTTP/1.1 403 Forbidden"); header("Location: /support/view/" . $id); exit; } if($_SERVER["REQUEST_METHOD"] === "POST") { if(!empty($this->postParam("text"))) { $ticket->setType(0); $ticket->save(); $this->assertNoCSRF(); $comment = new TicketComment; $comment->setUser_id($this->user->id); $comment->setUser_type(0); $comment->setText($this->postParam("text")); $comment->setTicket_id($id); $comment->setCreated(time()); $comment->save(); header("HTTP/1.1 302 Found"); header("Location: /support/view/" . $id); } else { $this->flashFail("err", "Ошибка", "Вы не ввели текст"); } } } function renderAnswerTicket(int $id): void { $this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0); $ticket = $this->tickets->get($id); $ticketComments = $this->comments->getCommentsById($id); $this->template->ticket = $ticket; $this->template->comments = $ticketComments; $this->template->id = $id; } function renderAnswerTicketReply(int $id): void { $this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0); $ticket = $this->tickets->get($id); if($_SERVER["REQUEST_METHOD"] === "POST") { if(!empty($this->postParam("text")) && !empty($this->postParam("status"))) { $ticket->setType($this->postParam("status")); $ticket->save(); $this->assertNoCSRF(); $comment = new TicketComment; $comment->setUser_id($this->user->id); $comment->setUser_type(1); $comment->setText('Здравствуйте, '.$ticket->getUser()->getFirstName().'!

'.$this->postParam("text").'

С уважением,
Команда поддержки OpenVK.'); $comment->setTicket_id($id); $comment->setCreated(time()); $comment->save(); } elseif (empty($this->postParam("text"))) { $ticket->setType($this->postParam("status")); $ticket->save(); } $this->flashFail("succ", "Тикет изменён", "Изменения вступят силу через несколько секунд."); } } }