PluginProbe
Packeta / 2.1
Packeta v2.1
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 / Form.php

Form.php in Packeta 2.1, at src/Packetery/Module/Order/Form.php

161 lines 4.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Form.
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Core\CoreHelper;
13 use Packetery\Core\Validator;
14 use Packetery\Module\FormFactory;
15 use Packetery\Module\FormValidators;
16 use Packetery\Module\Options\OptionsProvider;
17 use Packetery\Nette\Forms;
18
19 /**
20 * Class Form.
21 *
22 * @package Packetery
23 */
24 class Form {
25
26 public const FIELD_WEIGHT = 'packeteryWeight';
27 public const FIELD_ORIGINAL_WEIGHT = 'packeteryOriginalWeight';
28 public const FIELD_VALUE = 'packeteryValue';
29 public const FIELD_CALCULATED_VALUE = 'packeteryCalculatedValue';
30 public const FIELD_LENGTH = 'packeteryLength';
31 public const FIELD_WIDTH = 'packeteryWidth';
32 public const FIELD_HEIGHT = 'packeteryHeight';
33 public const FIELD_ADULT_CONTENT = 'packeteryAdultContent';
34 public const FIELD_COD = 'packeteryCOD';
35 public const FIELD_CALCULATED_COD = 'packeteryCalculatedCod';
36 public const FIELD_DELIVER_ON = 'packeteryDeliverOn';
37
38 /**
39 * Class FormFactory
40 *
41 * @var FormFactory
42 */
43 private $formFactory;
44
45 /**
46 * Class Provider
47 *
48 * @var OptionsProvider
49 */
50 private $options;
51
52 /**
53 * FormFactory constructor
54 *
55 * @param FormFactory $formFactory Form factory.
56 * @param OptionsProvider $options Options provider.
57 */
58 public function __construct( FormFactory $formFactory, OptionsProvider $options ) {
59 $this->formFactory = $formFactory;
60 $this->options = $options;
61 }
62
63 public function create(): Forms\Form {
64 $form = $this->formFactory->create();
65 $unit = $this->options->getDimensionsUnit();
66
67 $form->addText( self::FIELD_WEIGHT, __( 'Weight (kg)', 'packeta' ) )
68 ->setRequired( false )
69 ->setNullable()
70 ->addRule( Forms\Form::FLOAT );
71 $form->addHidden( self::FIELD_ORIGINAL_WEIGHT );
72 $this->formFactory->addDimension( $form, self::FIELD_LENGTH, __( 'Length', 'packeta' ), $unit )
73 ->setNullable();
74 $this->formFactory->addDimension( $form, self::FIELD_WIDTH, __( 'Width', 'packeta' ), $unit )
75 ->setNullable();
76 $this->formFactory->addDimension( $form, self::FIELD_HEIGHT, __( 'Height', 'packeta' ), $unit )
77 ->setNullable();
78 $form->addCheckbox( self::FIELD_ADULT_CONTENT, __( 'Adult content', 'packeta' ) )
79 ->setRequired( false );
80 $form->addText( self::FIELD_COD, __( 'Cash on delivery', 'packeta' ) )
81 ->setRequired( false )
82 ->setNullable()
83 ->addRule( Forms\Form::FLOAT );
84 $form->addHidden( self::FIELD_CALCULATED_COD );
85 $form->addText( self::FIELD_VALUE, __( 'Order value', 'packeta' ) )
86 ->setRequired( false )
87 ->setNullable()
88 ->addRule( Forms\Form::FLOAT );
89 $form->addHidden( self::FIELD_CALCULATED_VALUE );
90 $form->addText( self::FIELD_DELIVER_ON, __( 'Planned dispatch', 'packeta' ) )
91 ->setHtmlAttribute( 'class', 'date-picker' )
92 ->setHtmlAttribute( 'autocomplete', 'off' )
93 ->setRequired( false )
94 ->setNullable()
95 // translators: %s: Represents minimal date for delayed delivery.
96 ->addRule( [ FormValidators::class, 'dateIsLater' ], __( 'Date must be later than %s', 'packeta' ), wp_date( CoreHelper::DATEPICKER_FORMAT ) );
97
98 return $form;
99 }
100
101 public function setDefaults(
102 Forms\Form $form,
103 ?float $weight,
104 ?float $originalWeight,
105 ?float $length,
106 ?float $width,
107 ?float $height,
108 ?float $cod,
109 ?float $calculatedCod,
110 ?float $orderValue,
111 ?float $calculatedValue,
112 ?bool $adultContent,
113 ?string $deliverOn
114 ): void {
115
116 $form->setDefaults(
117 [
118 self::FIELD_WEIGHT => $weight,
119 self::FIELD_ORIGINAL_WEIGHT => $originalWeight,
120 self::FIELD_LENGTH => $length,
121 self::FIELD_WIDTH => $width,
122 self::FIELD_HEIGHT => $height,
123 self::FIELD_COD => $cod,
124 self::FIELD_CALCULATED_COD => $calculatedCod,
125 self::FIELD_VALUE => $orderValue,
126 self::FIELD_CALCULATED_VALUE => $calculatedValue,
127 self::FIELD_ADULT_CONTENT => $adultContent,
128 self::FIELD_DELIVER_ON => $deliverOn,
129 ]
130 );
131 }
132
133 /**
134 * Gets invalid fields from validation result.
135 *
136 * @param array<string, string> $validationResult Validation result.
137 *
138 * @return string[]
139 */
140 public static function getInvalidFieldsFromValidationResult( array $validationResult ): array {
141 $validationFormInputMapping = [
142 self::FIELD_VALUE => Validator\Order::ERROR_TRANSLATION_KEY_VALUE,
143 self::FIELD_WEIGHT => Validator\Order::ERROR_TRANSLATION_KEY_WEIGHT,
144 self::FIELD_HEIGHT => Validator\Order::ERROR_TRANSLATION_KEY_HEIGHT,
145 self::FIELD_WIDTH => Validator\Order::ERROR_TRANSLATION_KEY_WIDTH,
146 self::FIELD_LENGTH => Validator\Order::ERROR_TRANSLATION_KEY_LENGTH,
147 ];
148
149 $fields = [];
150 foreach ( $validationFormInputMapping as $fieldName => $value ) {
151 if ( ! isset( $validationResult[ $value ] ) ) {
152 continue;
153 }
154
155 $fields[] = $fieldName;
156 }
157
158 return $fields;
159 }
160 }
161