PluginProbe
Packeta / 2.3.2
Packeta v2.3.2
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
← All changes | src/Packetery/Module/Log/Page.php +153 -24 1.2.62.3.2 View file →
@@ -6,14 +6,17 @@
6 6 */
7 7
8 8 declare( strict_types=1 );
9 9
10 -
11 10 namespace Packetery\Module\Log;
12 11
13 12 use Packetery\Core\Log\ILogger;
14 13 use Packetery\Core\Log\Record;
15 -use PacketeryLatte\Engine;
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;
16 19
17 20 /**
18 21 * Class Page
19 22 *
@@ -22,8 +25,13 @@
22 25 class Page {
23 26
24 27 public const SLUG = 'packeta-logs';
25 28
29 + public const PARAM_ORDER_ID = 'order_id';
30 + public const PARAM_ACTION = 'action';
31 +
32 + private const MAX_ROWS = 500;
33 +
26 34 /**
27 35 * Engine.
28 36 *
29 37 * @var Engine
@@ -37,16 +45,36 @@
37 45 */
38 46 private $logger;
39 47
40 48 /**
41 - * Page constructor.
49 + * HTTP request.
42 50 *
43 - * @param Engine $latteEngine Engine.
44 - * @param ILogger $manager Manager.
51 + * @var Request
45 52 */
46 - public function __construct( Engine $latteEngine, ILogger $manager ) {
47 - $this->latteEngine = $latteEngine;
48 - $this->logger = $manager;
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;
49 77 }
50 78
51 79 /**
52 80 * Registers Page.
@@ -52,12 +80,12 @@
52 80 * Registers Page.
53 81 */
54 82 public function register(): void {
55 83 add_submenu_page(
56 - \Packetery\Module\Options\Page::SLUG,
57 - __( 'logsPageTitle', 'packetery' ),
58 - __( 'logsPageTitle', 'packetery' ),
59 - 'manage_options',
84 + DashboardPage::SLUG,
85 + __( 'Log', 'packeta' ),
86 + __( 'Log', 'packeta' ),
87 + 'manage_woocommerce',
60 88 self::SLUG,
61 89 [ $this, 'render' ]
62 90 );
63 91 }
@@ -66,32 +94,133 @@
66 94 * Renders Page.
67 95 */
68 96 public function render(): void {
69 97 $translatedActions = [
70 - Record::ACTION_PACKET_SENDING => __( 'logAction_packet-sending', 'packetery' ),
71 - Record::ACTION_CARRIER_LABEL_PRINT => __( 'logAction_carrier-label-print', 'packetery' ),
72 - Record::ACTION_LABEL_PRINT => __( 'logAction_label-print', 'packetery' ),
73 - Record::ACTION_CARRIER_LIST_UPDATE => __( 'logAction_carrier-list-update', 'packetery' ),
74 - Record::ACTION_CARRIER_NUMBER_RETRIEVING => __( 'logAction_carrier-number-retrieving', 'packetery' ),
75 - Record::ACTION_CARRIER_TABLE_NOT_CREATED => __( 'logAction_carrier-table-not-created', 'packetery' ),
76 - Record::ACTION_ORDER_TABLE_NOT_CREATED => __( 'logAction_order-table-not-created', 'packetery' ),
77 - Record::ACTION_SENDER_VALIDATION => __( 'logAction_sender-validation', 'packetery' ),
78 - Record::ACTION_PACKET_STATUS_SYNC => __( 'logAction_packet-status-sync', 'packetery' ),
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' ),
79 113 ];
80 114
81 115 $translatedStatuses = [
82 - Record::STATUS_ERROR => __( 'statusError', 'packetery' ),
83 - Record::STATUS_SUCCESS => __( 'statusSuccess', 'packetery' ),
116 + Record::STATUS_ERROR => __( 'Error', 'packeta' ),
117 + Record::STATUS_SUCCESS => __( 'Success', 'packeta' ),
84 118 ];
85 119
86 - $rows = $this->logger->getRecords( [ 'date' => 'DESC' ] );
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 );
87 124
88 125 $this->latteEngine->render(
89 126 PACKETERY_PLUGIN_DIR . '/template/log/page.latte',
90 127 [
91 128 'rows' => $rows,
129 + 'maxRowsExceeded' => $totalCount > self::MAX_ROWS,
92 130 'translatedActions' => $translatedActions,
93 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 + ],
94 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' )
95 224 );
96 225 }
97 226 }