PluginProbe
Packeta / 2.0.9
Packeta v2.0.9
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Log / Page.php

Page.php in Packeta 2.0.9, at src/Packetery/Module/Log/Page.php

224 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Page
4 *
5 * @package Packetery\Module\Log
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Log;
11
12 use Packetery\Core\Log\ILogger;
13 use Packetery\Core\Log\Record;
14 use Packetery\Latte\Engine;
15 use Packetery\Module\ModuleHelper;
16 use Packetery\Module\Views\UrlBuilder;
17 use Packetery\Nette\Http\Request;
18
19 /**
20 * Class Page
21 *
22 * @package Packetery\Module\Log
23 */
24 class Page {
25
26 public const SLUG = 'packeta-logs';
27
28 public const PARAM_ORDER_ID = 'order_id';
29 public const PARAM_ACTION = 'action';
30
31 private const MAX_ROWS = 500;
32
33 /**
34 * Engine.
35 *
36 * @var Engine
37 */
38 private $latteEngine;
39
40 /**
41 * Manager.
42 *
43 * @var ILogger
44 */
45 private $logger;
46
47 /**
48 * HTTP request.
49 *
50 * @var Request
51 */
52 private $request;
53
54 /**
55 * @var ModuleHelper
56 */
57 private $moduleHelper;
58
59 /**
60 * @var UrlBuilder
61 */
62 private $urlBuilder;
63
64 public function __construct(
65 Engine $latteEngine,
66 ILogger $manager,
67 Request $request,
68 ModuleHelper $moduleHelper,
69 UrlBuilder $urlBuilder
70 ) {
71 $this->latteEngine = $latteEngine;
72 $this->logger = $manager;
73 $this->request = $request;
74 $this->moduleHelper = $moduleHelper;
75 $this->urlBuilder = $urlBuilder;
76 }
77
78 /**
79 * Registers Page.
80 */
81 public function register(): void {
82 add_submenu_page(
83 \Packetery\Module\Options\Page::SLUG,
84 __( 'Log', 'packeta' ),
85 __( 'Log', 'packeta' ),
86 'manage_woocommerce',
87 self::SLUG,
88 [ $this, 'render' ]
89 );
90 }
91
92 /**
93 * Renders Page.
94 */
95 public function render(): void {
96 $translatedActions = [
97 Record::ACTION_PACKET_SENDING => __( 'Packet sending', 'packeta' ),
98 Record::ACTION_PACKET_CLAIM_SENDING => __( 'Packet claim sending', 'packeta' ),
99 Record::ACTION_CARRIER_LABEL_PRINT => __( 'Carrier label print', 'packeta' ),
100 Record::ACTION_LABEL_PRINT => __( 'Label print', 'packeta' ),
101 Record::ACTION_CARRIER_LIST_UPDATE => __( 'Carrier list update', 'packeta' ),
102 Record::ACTION_CARRIER_NUMBER_RETRIEVING => __( 'Getting external carrier tracking number', 'packeta' ),
103 Record::ACTION_CARRIER_TABLE_NOT_CREATED => __( 'Database carrier table was not created.', 'packeta' ),
104 Record::ACTION_ORDER_TABLE_NOT_CREATED => __( 'Database order table was not created.', 'packeta' ),
105 Record::ACTION_SENDER_VALIDATION => __( 'Sender validation', 'packeta' ),
106 Record::ACTION_PACKET_STATUS_SYNC => __( 'Packet status synchronization', 'packeta' ),
107 Record::ACTION_PACKET_CANCEL => __( 'Packet cancel', 'packeta' ),
108 Record::ACTION_PICKUP_POINT_VALIDATE => __( 'Pickup point validation', 'packeta' ),
109 Record::ACTION_ORDER_STATUS_CHANGE => __( 'Order status change', 'packeta' ),
110 ];
111
112 $translatedStatuses = [
113 Record::STATUS_ERROR => __( 'Error', 'packeta' ),
114 Record::STATUS_SUCCESS => __( 'Success', 'packeta' ),
115 ];
116
117 $orderId = $this->getOrderId();
118 $action = $this->getAction();
119 $rows = $this->logger->getRecords( $orderId, $action, [ 'date' => 'DESC' ], self::MAX_ROWS );
120 $totalCount = $this->countRows( $orderId, $action );
121
122 $this->latteEngine->render(
123 PACKETERY_PLUGIN_DIR . '/template/log/page.latte',
124 [
125 'rows' => $rows,
126 'maxRowsExceeded' => $totalCount > self::MAX_ROWS,
127 'translatedActions' => $translatedActions,
128 'translatedStatuses' => $translatedStatuses,
129 'isCzechLocale' => $this->moduleHelper->isCzechLocale(),
130 'logoZasilkovna' => $this->urlBuilder->buildAssetUrl( 'public/images/logo-zasilkovna.svg' ),
131 'logoPacketa' => $this->urlBuilder->buildAssetUrl( 'public/images/logo-packeta.svg' ),
132 'translations' => [
133 'packeta' => __( 'Packeta', 'packeta' ),
134 'title' => __( 'Log', 'packeta' ),
135 'status' => __( 'Status', 'packeta' ),
136 'dateAndTime' => __( 'Date and time', 'packeta' ),
137 'action' => __( 'Action', 'packeta' ),
138 'note' => __( 'Note', 'packeta' ),
139 'logListIsEmpty' => __( 'API log is empty.', 'packeta' ),
140 // translators: 1: Total row count 2: Displayed row count.
141 'moreRowsNotice' => sprintf( __( 'Total row count: %1$d. Number of displayed rows: %2$d.', 'packeta' ), $totalCount, self::MAX_ROWS ),
142 ],
143 ]
144 );
145 }
146
147 /**
148 * Returns order ID.
149 *
150 * @return int|null
151 */
152 private function getOrderId(): ?int {
153 $orderId = $this->request->getQuery( self::PARAM_ORDER_ID );
154 if ( is_numeric( $orderId ) ) {
155 return (int) $orderId;
156 }
157
158 return null;
159 }
160
161 /**
162 * Returns action.
163 *
164 * @return string|null
165 */
166 private function getAction(): ?string {
167 $action = $this->request->getQuery( self::PARAM_ACTION );
168 if ( $action !== null ) {
169 return (string) $action;
170 }
171
172 return null;
173 }
174
175 /**
176 * Tells if log page displays at least one row.
177 *
178 * @param int|null $orderId Order ID.
179 *
180 * @return bool
181 */
182 public function hasAnyRows( ?int $orderId ): bool {
183 return $this->countRows( $orderId ) > 0;
184 }
185
186 /**
187 * Counts rows.
188 *
189 * @param int|null $orderId Order ID.
190 * @param string|null $action Action.
191 *
192 * @return int
193 */
194 private function countRows( ?int $orderId = null, ?string $action = null ): int {
195 return $this->logger->countRecords( $orderId, $action );
196 }
197
198 /**
199 * Creates link to log page.
200 *
201 * @param int|null $orderId Order ID.
202 * @param string|null $action Action.
203 *
204 * @return string
205 */
206 public function createLogListUrl( ?int $orderId = null, ?string $action = null ): string {
207 $params = [
208 'page' => self::SLUG,
209 ];
210
211 if ( $orderId !== null ) {
212 $params[ self::PARAM_ORDER_ID ] = $orderId;
213 }
214 if ( $action !== null ) {
215 $params[ self::PARAM_ACTION ] = $action;
216 }
217
218 return add_query_arg(
219 $params,
220 admin_url( 'admin.php' )
221 );
222 }
223 }
224