PluginProbe
Packeta / trunk
Packeta vtrunk
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 trunk, at src/Packetery/Module/Log/Page.php

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