1+ <?php
2+ namespace Ajax \php \ubiquity \utils ;
3+
4+ use Ajax \semantic \widgets \dataform \DataForm ;
5+ use Ubiquity \contents \validation \ValidatorsManager ;
6+ use Ubiquity \orm \OrmUtils ;
7+
8+ class DataFormHelper {
9+
10+ /**
11+ * Adds the instance members as form fields.
12+ *
13+ * @param DataForm $form
14+ */
15+ public static function defaultFields (DataForm $ form ): void {
16+ $ form ->setFields (OrmUtils::getFormAllFields ($ form ->getModel ()));
17+ }
18+
19+ /**
20+ * Adds the default ui constraints to the form.
21+ *
22+ * @param DataForm $form
23+ */
24+ public static function defaultUIConstraints (DataForm $ form ): void {
25+ self ::addDefaultUIConstraints ($ form , OrmUtils::getFieldTypes ($ form ->getModel ()), ValidatorsManager::getUIConstraints ($ form ->getModelInstance ()));
26+ }
27+
28+ /**
29+ *
30+ * @param DataForm $form
31+ * @param array $fieldTypes
32+ * @param array $uiConstraints
33+ */
34+ public static function addDefaultUIConstraints (DataForm $ form , array $ fieldTypes , array $ uiConstraints ): void {
35+ foreach ($ fieldTypes as $ property => $ type ) {
36+ $ rules = $ uiConstraints [$ property ] ?? [];
37+ if ($ hasRules = \count ($ rules ) > 0 ) {
38+ $ form ->setValidationParams ([
39+ "on " => "blur " ,
40+ "inline " => true
41+ ]);
42+ }
43+ $ noPName = false ;
44+ $ noPType = false ;
45+ switch ($ property ) {
46+ case 'password ' :
47+ $ form ->fieldAsInput ($ property , [
48+ 'inputType ' => 'password '
49+ ] + $ rules );
50+ break ;
51+ case 'email ' :
52+ case 'mail ' :
53+ $ form ->fieldAsInput ($ property , $ rules );
54+ break ;
55+ default :
56+ $ noPName = true ;
57+ }
58+
59+ switch ($ type ) {
60+ case 'tinyint(1) ' :
61+ case 'bool ' :
62+ case 'boolean ' :
63+ $ form ->fieldAsCheckbox ($ property , \array_diff ($ rules ['rules ' ] ?? [], [
64+ 'empty '
65+ ]));
66+ break ;
67+ case 'int ' :
68+ case 'integer ' :
69+ $ form ->fieldAsInput ($ property , [
70+ 'inputType ' => 'number '
71+ ] + $ rules );
72+ break ;
73+ case 'date ' :
74+ $ form ->fieldAsInput ($ property , [
75+ 'inputType ' => 'date '
76+ ] + $ rules );
77+ break ;
78+ case 'datetime ' :
79+ $ form ->fieldAsInput ($ property , [
80+ 'inputType ' => 'datetime-local '
81+ ] + $ rules );
82+ break ;
83+ case 'text ' :
84+ $ form ->fieldAsTextarea ($ property , $ rules );
85+ break ;
86+ default :
87+ $ noPType = true ;
88+ }
89+ if ($ hasRules && $ noPName && $ noPType ) {
90+ $ form ->fieldAsInput ($ property , $ rules );
91+ }
92+ }
93+ }
94+ }
0 commit comments