Support: Use pagination in the user's ticket list

This commit is contained in:
Maxim Leshchenko 2022-01-07 00:59:51 +02:00
parent f7fbda1e3c
commit 02e41e19b4
No known key found for this signature in database
GPG key ID: BB9C44A8733FBEEE
4 changed files with 26 additions and 17 deletions

View file

@ -22,8 +22,8 @@ class Tickets
function getTickets(int $state = 0, int $page = 1): \Traversable function getTickets(int $state = 0, int $page = 1): \Traversable
{ {
foreach($this->tickets->where(["deleted" => 0, "type" => $state])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $t) foreach($this->tickets->where(["deleted" => 0, "type" => $state])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $ticket)
yield new Ticket($t); yield new Ticket($ticket);
} }
function getTicketCount(int $state = 0): int function getTicketCount(int $state = 0): int
@ -31,21 +31,20 @@ class Tickets
return sizeof($this->tickets->where(["deleted" => 0, "type" => $state])); return sizeof($this->tickets->where(["deleted" => 0, "type" => $state]));
} }
function getTicketsByuId(int $user_id): \Traversable function getTicketsByUserId(int $userId, int $page = 1): \Traversable
{ {
foreach($this->tickets->where(['user_id' => $user_id, 'deleted' => 0])->order("created DESC") as $ticket) yield new Ticket($ticket); foreach($this->tickets->where(["user_id" => $userId, "deleted" => 0])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $ticket) yield new Ticket($ticket);
} }
function getTicketsCountByuId(int $user_id, int $type = 0): int function getTicketsCountByUserId(int $userId, int $type = 0): int
{ {
return sizeof($this->tickets->where(['user_id' => $user_id, 'deleted' => 0, 'type' => $type])); return sizeof($this->tickets->where(["user_id" => $userId, "deleted" => 0, "type" => $type]));
} }
function getRequestById(int $req_id): ?Ticket function getRequestById(int $requestId): ?Ticket
{ {
$requests = $this->tickets->where(['id' => $req_id])->fetch(); $requests = $this->tickets->where(["id" => $requestId])->fetch();
if(!is_null($requests)) if(!is_null($requests))
return new Req($requests); return new Req($requests);
else else
return null; return null;

View file

@ -220,7 +220,7 @@ abstract class OpenVKPresenter extends SimplePresenter
$this->user->identity->save(); $this->user->identity->save();
} }
$this->template->ticketAnsweredCount = (new Tickets)->getTicketsCountByuId($this->user->id, 1); $this->template->ticketAnsweredCount = (new Tickets)->getTicketsCountByUserId($this->user->id, 1);
if($user->can("write")->model("openvk\Web\Models\Entities\TicketReply")->whichBelongsTo(0)) if($user->can("write")->model("openvk\Web\Models\Entities\TicketReply")->whichBelongsTo(0))
$this->template->helpdeskTicketNotAnsweredCount = (new Tickets)->getTicketCount(0); $this->template->helpdeskTicketNotAnsweredCount = (new Tickets)->getTicketCount(0);
} }

View file

@ -28,18 +28,19 @@ final class SupportPresenter extends OpenVKPresenter
$this->assertUserLoggedIn(); $this->assertUserLoggedIn();
$this->template->mode = in_array($this->queryParam("act"), ["faq", "new", "list"]) ? $this->queryParam("act") : "faq"; $this->template->mode = in_array($this->queryParam("act"), ["faq", "new", "list"]) ? $this->queryParam("act") : "faq";
$tickets = $this->tickets->getTicketsByuId($this->user->id); $this->template->count = $this->tickets->getTicketsCountByUserId($this->user->id);
if($tickets) if($this->template->mode === "list") {
$this->template->tickets = $tickets; $this->template->page = (int) ($this->queryParam("p") ?? 1);
$this->template->tickets = $this->tickets->getTicketsByUserId($this->user->id, $this->template->page);
}
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
if(!empty($this->postParam("name")) && !empty($this->postParam("text"))) { if(!empty($this->postParam("name")) && !empty($this->postParam("text"))) {
$this->assertNoCSRF();
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
$ticket = new Ticket; $ticket = new Ticket;
$ticket->setType(0); $ticket->setType(0);
$ticket->setUser_id($this->user->id); $ticket->setUser_Id($this->user->id);
$ticket->setName($this->postParam("name")); $ticket->setName($this->postParam("name"));
$ticket->setText($this->postParam("text")); $ticket->setText($this->postParam("text"));
$ticket->setcreated(time()); $ticket->setcreated(time());
@ -136,8 +137,7 @@ final class SupportPresenter extends OpenVKPresenter
if(!empty($this->postParam("text"))) { if(!empty($this->postParam("text"))) {
$ticket->setType(0); $ticket->setType(0);
$ticket->save(); $ticket->save();
$this->assertNoCSRF();
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
$comment = new TicketComment; $comment = new TicketComment;

View file

@ -69,5 +69,15 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div style="padding: 8px;">
{include "../components/paginator.xml", conf => (object) [
"page" => $page,
"count" => $count,
"amount" => sizeof($tickets),
"perPage" => OPENVK_DEFAULT_PER_PAGE,
"atBottom" => true,
]}
</div>
{/if} {/if}
{/block} {/block}