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
← All changes | src/Packetery/Module/FormFactory.php +55 -14 1.5.32.1 View file →
@@ -8,11 +8,14 @@
8 8 declare( strict_types=1 );
9 9
10 10 namespace Packetery\Module;
11 11
12 -use PacketeryNette\Forms\Form;
13 -use PacketeryNette\Forms\Validator;
14 -use PacketeryNette\Http\Request;
12 +use Packetery\Module\Options\OptionsProvider;
13 +use Packetery\Nette\Forms\Container;
14 +use Packetery\Nette\Forms\Controls\TextInput;
15 +use Packetery\Nette\Forms\Form;
16 +use Packetery\Nette\Forms\Validator;
17 +use Packetery\Nette\Http\Request;
15 18
16 19 /**
17 20 * Class FormFactory
18 21 *
@@ -18,21 +21,13 @@
18 21 *
19 22 * @package Packetery
20 23 */
21 24 class FormFactory {
22 -
23 25 /**
24 - * HTTP Request.
25 - *
26 26 * @var Request
27 27 */
28 28 private $request;
29 29
30 - /**
31 - * Plugin constructor.
32 - *
33 - * @param Request $request HTTP request.
34 - */
35 30 public function __construct( Request $request ) {
36 31 add_action(
37 32 'init',
38 33 function () {
@@ -38,12 +33,17 @@
38 33 function () {
39 34 // translators: keep %d placeholder intact.
40 35 Validator::$messages[ Form::MIN ] = __( 'Please enter value greater than or equal to %d', 'packeta' );
41 36 // translators: keep %d placeholder intact.
42 - Validator::$messages[ Form::MAX ] = __( 'Please enter value less than or equal to %d', 'packeta' );
37 + Validator::$messages[ Form::MAX ] = __( 'Please enter value less than or equal to %d', 'packeta' );
38 +
43 39 Validator::$messages[ Form::INTEGER ] = __( 'Enter valid number', 'packeta' );
44 40 Validator::$messages[ Form::FLOAT ] = __( 'Enter valid number', 'packeta' );
45 41 Validator::$messages[ Form::FILLED ] = __( 'This field is required', 'packeta' );
42 + // translators: %d is number of characters.
43 + Validator::$messages[ Form::LENGTH ] = __( 'Please enter exactly %d characters', 'packeta' );
44 + // translators: %d is number of characters.
45 + Validator::$messages[ Form::MAX_LENGTH ] = __( 'Please enter max %d characters', 'packeta' );
46 46 },
47 47 11
48 48 );
49 49 $this->request = $request;
@@ -56,10 +56,51 @@
56 56 *
57 57 * @return Form
58 58 */
59 59 public function create( ?string $name = null ): Form {
60 - $form = new Form( $name );
61 - $form->setHttpRequest( $this->request );
60 + $form = new Form( $name );
61 + $form->httpRequest = $this->request;
62 62 $form->allowCrossOrigin();
63 +
63 64 return $form;
65 + }
66 +
67 + public function addDimension( Container $container, string $name, string $label, string $unit ): TextInput {
68 + $numberInputType = $this->getNumType( $unit );
69 +
70 + switch ( $numberInputType ) {
71 + case Form::INTEGER:
72 + $numberInput = $container->addInteger( $name, sprintf( '%s (%s)', $label, $unit ) );
73 +
74 + break;
75 + case Form::FLOAT:
76 + $numberInput = $container->addText( $name, sprintf( '%s (%s)', $label, $unit ) )->addRule( Form::FLOAT );
77 +
78 + break;
79 + default:
80 + throw new \InvalidArgumentException( 'Unsupported number input type: ' . $numberInputType );
81 + }
82 +
83 + $numberInput
84 + ->setHtmlType( 'number' )
85 + ->setHtmlAttribute( 'step', 'any' )
86 + ->addRule( Form::MIN, null, $this->setMinValue( $unit ) );
87 +
88 + return $numberInput;
89 + }
90 +
91 + private function getNumType( string $unit ): string {
92 + if ( $unit === OptionsProvider::DIMENSIONS_UNIT_CM ) {
93 + return Form::FLOAT;
94 + }
95 +
96 + return Form::INTEGER;
97 + }
98 +
99 + private function setMinValue( string $unit ): float {
100 + if ( $unit === OptionsProvider::DIMENSIONS_UNIT_CM ) {
101 + return 0.1;
102 + }
103 +
104 + return 1;
64 105 }
65 106 }