PluginProbe
Packeta / 1.5.0
Packeta v1.5.0
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.5.0, at src/Packetery/Module/Order/Modal.php

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