PluginProbe
Packeta / 1.6.4
Packeta v1.6.4
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 / Order / BulkActions.php

BulkActions.php in Packeta 1.6.4, at src/Packetery/Module/Order/BulkActions.php

176 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class BulkActions
4 *
5 * @package Packetery\Order
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Module\Options;
13 use Packetery\Latte\Engine;
14 use Packetery\Nette\Http\Request;
15
16 /**
17 * Class BulkActions
18 *
19 * @package Packetery\Order
20 */
21 class BulkActions {
22 /**
23 * Latte engine.
24 *
25 * @var Engine
26 */
27 private $latteEngine;
28
29 /**
30 * HTTP request.
31 *
32 * @var Request
33 */
34 private $httpRequest;
35
36 /**
37 * OrderApi.
38 *
39 * @var PacketSubmitter
40 */
41 private $packetSubmitter;
42
43 /**
44 * Options provider.
45 *
46 * @var Options\Provider
47 */
48 private $optionsProvider;
49
50 /**
51 * Order repository.
52 *
53 * @var Repository
54 */
55 private $orderRepository;
56
57 /**
58 * BulkActions constructor.
59 *
60 * @param Engine $latteEngine Latte engine.
61 * @param Request $httpRequest HTTP request.
62 * @param PacketSubmitter $packetSubmitter Order API Client.
63 * @param Options\Provider $optionsProvider Options provider.
64 * @param Repository $orderRepository Order repository.
65 */
66 public function __construct(
67 Engine $latteEngine,
68 Request $httpRequest,
69 PacketSubmitter $packetSubmitter,
70 Options\Provider $optionsProvider,
71 Repository $orderRepository
72 ) {
73 $this->latteEngine = $latteEngine;
74 $this->httpRequest = $httpRequest;
75 $this->packetSubmitter = $packetSubmitter;
76 $this->optionsProvider = $optionsProvider;
77 $this->orderRepository = $orderRepository;
78 }
79
80 /**
81 * Adds custom actions to dropdown in admin order list.
82 *
83 * @param array $actions Array of action.
84 *
85 * @return array
86 */
87 public function addActions( array $actions ): array {
88 $actions['submit_to_api'] = __( 'Submit orders to Packeta', 'packeta' );
89 $actions[ LabelPrint::ACTION_PACKETA_LABELS ] = __( 'Print labels', 'packeta' );
90 $actions[ LabelPrint::ACTION_CARRIER_LABELS ] = __( 'Print carrier labels', 'packeta' );
91 $actions[ CollectionPrint::ACTION_PRINT_ORDER_COLLECTION ] = __( 'Print AWB', 'packeta' );
92
93 return $actions;
94 }
95
96 /**
97 * Executes the action for selected orders and returns url to redirect to.
98 *
99 * @param string $redirectTo Url.
100 * @param string $action Action id.
101 * @param array $postIds Order ids.
102 *
103 * @return string
104 */
105 public function handleActions( string $redirectTo, string $action, array $postIds ): string {
106 if ( CollectionPrint::ACTION_PRINT_ORDER_COLLECTION === $action ) {
107 set_transient( CollectionPrint::getOrderIdsTransientName(), $postIds );
108
109 return add_query_arg(
110 [
111 'page' => CollectionPrint::PAGE_SLUG,
112 ],
113 admin_url( 'admin.php' )
114 );
115 }
116
117 if ( in_array( $action, [ LabelPrint::ACTION_PACKETA_LABELS, LabelPrint::ACTION_CARRIER_LABELS ], true ) ) {
118 set_transient( LabelPrint::getOrderIdsTransientName(), $postIds, 60 * 60 );
119 set_transient( LabelPrint::getBackLinkTransientName(), $redirectTo, 60 * 60 );
120
121 return add_query_arg(
122 [
123 'page' => LabelPrint::MENU_SLUG,
124 LabelPrint::LABEL_TYPE_PARAM => $action,
125 ],
126 'admin.php'
127 );
128 }
129
130 if ( 'submit_to_api' === $action ) {
131 $finalSubmissionResult = new PacketSubmissionResult();
132 foreach ( $postIds as $postId ) {
133 $wcOrder = $this->orderRepository->getWcOrderById( $postId );
134 if ( null !== $wcOrder ) {
135 $submissionResult = $this->packetSubmitter->submitPacket(
136 $wcOrder,
137 $this->optionsProvider->isOrderStatusAutoChangeEnabled()
138 );
139 $finalSubmissionResult->merge( $submissionResult );
140 }
141 }
142
143 $queryArgs = $finalSubmissionResult->getCounter();
144 $queryArgs['submit_to_api'] = true;
145
146 if ( count( $postIds ) === 1 ) {
147 $queryArgs['packetery_order_id'] = array_pop( $postIds );
148 }
149
150 return add_query_arg( $queryArgs, $redirectTo );
151 }
152
153 return $redirectTo;
154 }
155
156 /**
157 * Renders packets export result.
158 */
159 public function renderPacketsExportResult(): void {
160 $get = $this->httpRequest->getQuery();
161 if ( empty( $get['submit_to_api'] ) ) {
162 return;
163 }
164
165 $orderId = ( $get['packetery_order_id'] ?? null );
166 if ( is_numeric( $orderId ) ) {
167 $orderId = (int) $orderId;
168 } else {
169 $orderId = null;
170 }
171
172 $latteParams = $this->packetSubmitter->getTranslatedSubmissionMessages( $get, $orderId );
173 $this->latteEngine->render( PACKETERY_PLUGIN_DIR . '/template/order/export-result.latte', $latteParams );
174 }
175 }
176