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 / Order / LabelPrintModal.php

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

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