PluginProbe
Packeta / 1.6.3
Packeta v1.6.3
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 / Modal.php

Modal.php in Packeta 1.6.3, at src/Packetery/Module/Order/Modal.php

136 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Modal
4 *
5 * @package Packetery\Module\Order
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Core\Helper;
13 use Packetery\Module\Api;
14 use Packetery\Module\FormFactory;
15 use Packetery\Module\FormValidators;
16 use Packetery\Latte\Engine;
17 use Packetery\Nette\Forms\Form;
18
19 /**
20 * Class Modal
21 *
22 * @package Packetery\Module\Order
23 */
24 class Modal {
25
26 /**
27 * Latte engine.
28 *
29 * @var Engine
30 */
31 private $latteEngine;
32
33 /**
34 * Form factory.
35 *
36 * @var FormFactory
37 */
38 private $formFactory;
39
40 /**
41 * Order router.
42 *
43 * @var Api\Internal\OrderRouter;
44 */
45 private $apiRouter;
46
47 /**
48 * Modal constructor.
49 *
50 * @param Engine $latteEngine Latte engine.
51 * @param FormFactory $formFactory Form factory.
52 * @param Api\Internal\OrderRouter $apiRouter API router.
53 */
54 public function __construct( Engine $latteEngine, FormFactory $formFactory, Api\Internal\OrderRouter $apiRouter ) {
55 $this->latteEngine = $latteEngine;
56 $this->formFactory = $formFactory;
57 $this->apiRouter = $apiRouter;
58 }
59
60 /**
61 * Registers order modal.
62 */
63 public function register(): void {
64 add_action( 'admin_head', [ $this, 'renderTemplate' ] );
65 }
66
67 /**
68 * Renders template.
69 */
70 public function renderTemplate(): void {
71 $nonce = wp_create_nonce( 'wp_rest' );
72 $orderSaveUrl = $this->apiRouter->getSaveModalUrl();
73 $this->latteEngine->render(
74 PACKETERY_PLUGIN_DIR . '/template/order/modal-template.latte',
75 [
76 'nonce' => $nonce,
77 'orderSaveUrl' => $orderSaveUrl,
78 'form' => $this->createForm(),
79 'translations' => [
80 // translators: %s: Order number.
81 'order#%s' => __( 'Order #%s', 'packeta' ),
82
83 'closeModalPanel' => __( 'Close modal panel', 'packeta' ),
84 'weightIsManual' => __( 'Weight is manually set. To calculate weight remove the field content and save.', 'packeta' ),
85 ],
86 ]
87 );
88 }
89
90 /**
91 * Creates order modal form.
92 *
93 * @return Form
94 */
95 public function createForm(): Form {
96 $form = $this->formFactory->create();
97 $form->addText( 'packetery_weight', __( 'Weight', 'packeta' ) . ' (kg)' )
98 ->setRequired( false )
99 ->addRule( Form::FLOAT );
100 $form->addHidden( 'packetery_original_weight' )
101 ->setRequired( false )
102 ->addRule( Form::FLOAT );
103 $form->addText( 'packetery_width', __( 'Width (mm)', 'packeta' ) )
104 ->setRequired( false )
105 ->addRule( Form::FLOAT, __( 'Provide numeric value!', 'packeta' ) );
106 $form->addText( 'packetery_length', __( 'Length (mm)', 'packeta' ) )
107 ->setRequired( false )
108 ->addRule( Form::FLOAT, __( 'Provide numeric value!', 'packeta' ) );
109 $form->addText( 'packetery_height', __( 'Height (mm)', 'packeta' ) )
110 ->setRequired( false )
111 ->addRule( Form::FLOAT, __( 'Provide numeric value!', 'packeta' ) );
112 $form->addText( 'packetery_deliver_on', __( 'Planned dispatch', 'packeta' ) )
113 ->setHtmlAttribute( 'class', 'date-picker' )
114 ->setHtmlAttribute( 'autocomplete', 'off' )
115 ->setRequired( false )
116 // translators: %s: Represents minimal date for delayed delivery.
117 ->addRule( [ FormValidators::class, 'dateIsLater' ], __( 'Date must be later than %s', 'packeta' ), wp_date( Helper::DATEPICKER_FORMAT ) );
118
119 $form->addSubmit( 'submit', __( 'Save', 'packeta' ) );
120 $form->addButton( 'cancel', __( 'Cancel', 'packeta' ) );
121
122 $form->setDefaults(
123 [
124 'packetery_weight' => '{{ data.order.packetery_weight }}',
125 'packetery_original_weight' => '{{ data.order.packetery_original_weight }}',
126 'packetery_length' => '{{ data.order.packetery_length }}',
127 'packetery_width' => '{{ data.order.packetery_width }}',
128 'packetery_height' => '{{ data.order.packetery_height }}',
129 'packetery_deliver_on' => '{{ data.order.packetery_deliver_on }}',
130 ]
131 );
132
133 return $form;
134 }
135 }
136