PluginProbe
Packeta / 1.6.2
Packeta v1.6.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
packeta / src / Packetery / Module / Order / LabelPrintModal.php

LabelPrintModal.php in Packeta 1.6.2, at src/Packetery/Module/Order/LabelPrintModal.php

214 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class LabelPrintModal.
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Module;
13 use Packetery\Module\Options;
14 use Packetery\Latte\Engine;
15 use Packetery\Nette\Forms\Form;
16
17 /**
18 * Class LabelPrintModal.
19 *
20 * @package Packetery
21 */
22 class LabelPrintModal {
23
24 public const MODAL_ID_PACKET = 'wc-packetery-order-detail-packet-label-print-modal';
25 public const MODAL_ID_PACKET_CLAIM = 'wc-packetery-order-detail-packet-claim-label-print-modal';
26
27 /**
28 * Latte engine.
29 *
30 * @var Engine
31 */
32 private $latteEngine;
33
34 /**
35 * Label print.
36 *
37 * @var LabelPrint
38 */
39 private $labelPrint;
40
41 /**
42 * Options provider.
43 *
44 * @var Options\Provider
45 */
46 private $optionsProvider;
47
48 /**
49 * Context resolver.
50 *
51 * @var Module\ContextResolver
52 */
53 private $contextResolver;
54
55 /**
56 * Order detail common logic.
57 *
58 * @var DetailCommonLogic
59 */
60 private $detailCommonLogic;
61
62 /**
63 * Constructor.
64 *
65 * @param Engine $latteEngine Latte engine.
66 * @param LabelPrint $labelPrint Label print.
67 * @param Options\Provider $optionsProvider Options provider.
68 * @param Module\ContextResolver $contextResolver Context resolver.
69 * @param DetailCommonLogic $detailCommonLogic Detail common logic.
70 */
71 public function __construct(
72 Engine $latteEngine,
73 LabelPrint $labelPrint,
74 Options\Provider $optionsProvider,
75 Module\ContextResolver $contextResolver,
76 DetailCommonLogic $detailCommonLogic
77 ) {
78 $this->latteEngine = $latteEngine;
79 $this->labelPrint = $labelPrint;
80 $this->optionsProvider = $optionsProvider;
81 $this->contextResolver = $contextResolver;
82 $this->detailCommonLogic = $detailCommonLogic;
83 }
84
85 /**
86 * Registers order modal.
87 */
88 public function register(): void {
89 add_action( 'admin_head', [ $this, 'renderPacketModal' ] );
90 add_action( 'admin_head', [ $this, 'renderPacketClaimModal' ] );
91 }
92
93 /**
94 * Renders packet modal.
95 */
96 public function renderPacketModal(): void {
97 if ( false === $this->contextResolver->isOrderDetailPage() ) {
98 return;
99 }
100
101 $order = $this->detailCommonLogic->getOrder();
102 if ( null === $order || null === $order->getPacketId() ) {
103 return;
104 }
105
106 $this->renderModal(
107 self::MODAL_ID_PACKET,
108 $this->labelPrint->getLabelFormatByOrder( $order ),
109 $order->getPacketId()
110 );
111 }
112
113 /**
114 * Renders packet claim modal.
115 */
116 public function renderPacketClaimModal(): void {
117 if ( false === $this->contextResolver->isOrderDetailPage() ) {
118 return;
119 }
120
121 $order = $this->detailCommonLogic->getOrder();
122 if ( null === $order || null === $order->getPacketClaimId() ) {
123 return;
124 }
125
126 $this->renderModal(
127 self::MODAL_ID_PACKET_CLAIM,
128 $this->labelPrint->getLabelFormatByOrder( $order ),
129 $order->getPacketClaimId()
130 );
131 }
132
133 /**
134 * Renders packet modal.
135 *
136 * @param string $id Modal ID.
137 * @param string $format Label format.
138 * @param string $packetId Packet ID.
139 *
140 * @return void
141 */
142 private function renderModal( string $id, string $format, string $packetId ): void {
143 $form = $this->createForm( sprintf( '%s_form', $id ), $format, $packetId );
144 if ( $form['submit']->isSubmittedBy() ) {
145 $form->fireEvents();
146 }
147
148 $this->latteEngine->render(
149 PACKETERY_PLUGIN_DIR . '/template/order/label-print-modal.latte',
150 [
151 'id' => $id,
152 'form' => $form,
153 'translations' => [
154 // translators: %s is packet ID.
155 'header' => sprintf( __( 'Label print of packet %s', 'packeta' ), $packetId ),
156
157 'closeModalPanel' => __( 'Close modal panel', 'packeta' ),
158 ],
159 ]
160 );
161 }
162
163 /**
164 * Creates order modal form.
165 *
166 * @param string $name Form name.
167 * @param string $format Format.
168 * @param string $packetId Packet ID.
169 *
170 * @return Form
171 */
172 public function createForm( string $name, string $format, string $packetId ): Form {
173 $form = $this->labelPrint->createForm( $this->optionsProvider->getLabelMaxOffset( $format ), $name );
174 $form->addHidden( 'packet_id' )->setDefaultValue( $packetId );
175 $form->addSubmit( 'submit', __( 'Print', 'packeta' ) );
176 $form->addSubmit( 'cancel', __( 'Cancel', 'packeta' ) );
177
178 $form->onSuccess[] = [ $this, 'onFormSuccess' ];
179
180 return $form;
181 }
182
183 /**
184 * On form success.
185 *
186 * @param Form $form Form.
187 *
188 * @return void
189 */
190 public function onFormSuccess( Form $form ): void {
191 $order = $this->detailCommonLogic->getOrder();
192 if ( null === $order ) {
193 return;
194 }
195
196 $values = $form->getValues();
197 $printLink = add_query_arg(
198 [
199 'page' => LabelPrint::MENU_SLUG,
200 LabelPrint::LABEL_TYPE_PARAM => ( $order->isExternalCarrier() ? LabelPrint::ACTION_CARRIER_LABELS : LabelPrint::ACTION_PACKETA_LABELS ),
201 'id' => $order->getNumber(),
202 PacketActionsCommonLogic::PARAM_PACKET_ID => $values['packet_id'],
203 'offset' => $values['offset'],
204 PacketActionsCommonLogic::PARAM_REDIRECT_TO => PacketActionsCommonLogic::REDIRECT_TO_ORDER_DETAIL,
205 ],
206 admin_url( 'admin.php' )
207 );
208
209 if ( wp_safe_redirect( $printLink ) ) {
210 exit;
211 }
212 }
213 }
214