Skip to content

Commit bd5c71d

Browse files
committed
re-write fieldset
1 parent 3b65bb8 commit bd5c71d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+626
-778
lines changed

LICENSE

100644100755
File mode changed.

README.md

100644100755
File mode changed.

composer.json

100644100755
File mode changed.

src/Exception.php

100644100755
File mode changed.

src/Fieldset.php

100644100755
+4-4
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ public function getFileFieldNames()
139139
[
140140
'file',
141141
'image',
142-
'files',
143-
'images'
142+
'filelist',
143+
'imagelist'
144144
]
145145
)
146146
) {
@@ -170,8 +170,8 @@ public function getJsonFieldNames()
170170
if (in_array(
171171
$field['field']['type'],
172172
[
173-
'files',
174-
'images',
173+
'filelist',
174+
'imagelist',
175175
'tag',
176176
'textlist',
177177
'textarealist',

src/Fieldset/Validator.php

100644100755
File mode changed.

src/Fieldset/controller.php

100644100755
File mode changed.

src/Fieldset/events.php

100644100755
File mode changed.

src/Fieldset/template/_modal.html

100644100755
File mode changed.

src/Fieldset/template/_row.html

100644100755
File mode changed.

src/Fieldset/template/_scripts.html

100644100755
File mode changed.

src/Fieldset/template/_styles.html

100644100755
File mode changed.

src/Fieldset/template/_templates.html

100644100755
File mode changed.

src/Fieldset/template/field/_detail.html

100644100755
File mode changed.

src/Fieldset/template/field/_list.html

100644100755
File mode changed.

src/Fieldset/template/field/_type.html

100644100755
File mode changed.

src/Fieldset/template/field/_validation.html

100644100755
File mode changed.

src/Fieldset/template/form.html

100644100755
File mode changed.

src/Fieldset/template/options/_format.html

100644100755
File mode changed.

src/Fieldset/template/options/_type.html

100644100755
+4-4
Original file line numberDiff line numberDiff line change
@@ -256,16 +256,16 @@
256256
<option
257257
data-fieldset="attributes"
258258
data-format="json"
259-
value="files"
260-
{{#when field.type '===' 'files'}}selected{{/when}}
259+
value="filelist"
260+
{{#when field.type '===' 'filelist'}}selected{{/when}}
261261
>
262262
File List Fieldset
263263
</option>
264264
<option
265265
data-fieldset="attributes"
266266
data-format="json"
267-
value="images"
268-
{{#when field.type '===' 'images'}}selected{{/when}}
267+
value="imagelist"
268+
{{#when field.type '===' 'imagelist'}}selected{{/when}}
269269
>
270270
Image List Fieldset
271271
</option>

src/Fieldset/template/options/_validation.html

100644100755
File mode changed.

src/Fieldset/template/search.html

100644100755
File mode changed.

src/Helpers.php

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
<?php //-->
2+
/**
3+
* This file is part of a package designed for the CradlePHP Project.
4+
*
5+
* Copyright and license information can be found at LICENSE.txt
6+
* distributed with this package.
7+
*/
8+
namespace Cradle\Package\System;
9+
10+
use Cradle\Package\System\Fieldset;
11+
use Cradle\Package\System\Schema;
12+
13+
/**
14+
* Model Fieldset Manager. This was made
15+
* take advantage of pass-by-ref
16+
*
17+
* @vendor Cradle
18+
* @package System
19+
* @author John Doe <[email protected]>
20+
* @standard PSR-2
21+
*/
22+
class Helpers
23+
{
24+
/**
25+
* @var $fieldsets - Caches Fieldsets
26+
*/
27+
protected static $fieldsets = [];
28+
29+
/**
30+
* @var $schemas - Caches Schemas
31+
*/
32+
protected static $schemas = [];
33+
34+
/**
35+
* @var $templates - Caches templates
36+
*/
37+
protected static $templates = [];
38+
39+
/**
40+
* Returns a cached fieldset
41+
*
42+
* @param *string $name
43+
*
44+
* @return Fieldset
45+
*/
46+
public static function getFieldset($name) {
47+
if (!isset(self::$fieldsets[$name])) {
48+
self::$fieldsets[$name] = Fieldset::i($name);
49+
}
50+
51+
return self::$fieldsets[$name];
52+
}
53+
54+
/**
55+
* Returns a cached schema
56+
*
57+
* @param *string $name
58+
*
59+
* @return Schema
60+
*/
61+
public static function getSchema($name) {
62+
if (!isset(self::$schemas[$name])) {
63+
self::$schemas[$name] = Schema::i($name);
64+
}
65+
66+
return self::$schemas[$name];
67+
}
68+
69+
/**
70+
* Returns a format template
71+
*
72+
* @param *string $name
73+
*
74+
* @return Schema
75+
*/
76+
public static function getFormatTemplate($name) {
77+
$file = sprintf(
78+
'%s/Model/template/format/%s.html',
79+
__DIR__,
80+
$name
81+
);
82+
83+
if (!file_exists($file)) {
84+
return null;
85+
}
86+
87+
if (!isset(self::$templates[$name])) {
88+
self::$templates[$name] = file_get_contents($file);
89+
}
90+
91+
return self::$templates[$name];
92+
}
93+
94+
/**
95+
* Returns a format template
96+
*
97+
* @param *string $name
98+
*
99+
* @return Schema
100+
*/
101+
public static function fieldNameToDotNotation($name) {
102+
return trim(
103+
str_replace(
104+
'..',
105+
'.',
106+
str_replace(
107+
['][', ']', '['],
108+
'.',
109+
$name
110+
)
111+
),
112+
'.'
113+
);
114+
}
115+
}

src/Model.php

100644100755
File mode changed.

src/Model/Formatter.php

100644100755
+53-20
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
namespace Cradle\Package\System\Model;
99

10+
use Cradle\Package\System\Fieldset;
1011
use Cradle\Package\System\Schema;
1112
use Cradle\Helper\InstanceTrait;
1213

@@ -41,13 +42,20 @@ public function __construct(Schema $schema)
4142
* Returns formatted data
4243
*
4344
* @param *array $data
45+
* @param Fieldset $fieldset
4446
*
4547
* @return array
4648
*/
47-
public function formatData(array $data)
49+
public function formatData(array $data, $fieldset = null)
4850
{
49-
$fields = $this->schema->getFields();
50-
$table = $this->schema->getName();
51+
$schema = $this->schema;
52+
53+
if (!is_null($fieldset)) {
54+
$schema = $fieldset;
55+
}
56+
57+
$fields = $schema->getFields();
58+
$table = $schema->getName();
5159

5260
foreach ($fields as $field) {
5361
$name = $table . '_' . $field['name'];
@@ -63,11 +71,15 @@ public function formatData(array $data)
6371
//upload files
6472
$data[$name] = $this->upload($data[$name]);
6573
break;
66-
case 'files':
67-
case 'images':
74+
case 'filelist':
75+
case 'imagelist':
6876
//upload files
6977
$data[$name] = $this->upload($data[$name]);
70-
$data[$name] = json_encode($data[$name]);
78+
79+
//we should not encode if fieldset
80+
if (is_null($fieldset)) {
81+
$data[$name] = json_encode($data[$name]);
82+
}
7183
break;
7284
case 'tag':
7385
case 'textlist':
@@ -79,23 +91,44 @@ public function formatData(array $data)
7991
case 'multiselect':
8092
case 'table':
8193
case 'fieldset':
94+
//case for multiple
95+
if (isset($field['field']['attributes']['data-multiple'])
96+
&& !$field['field']['attributes']['data-multiple']
97+
) {
98+
//format single data
99+
$data[$name] = $this->formatData(
100+
$data[$name],
101+
Fieldset::i($field['field']['parameters']),
102+
false
103+
);
104+
} else {
105+
//format each data
106+
foreach($data[$name] as $index => $row) {
107+
$data[$name][$index] = $this->formatData(
108+
$row,
109+
Fieldset::i($field['field']['parameters']),
110+
false
111+
);
112+
}
113+
}
114+
82115
//if it's an array already
83-
if(is_array($data[$name]) || is_object($data[$name])) {
116+
if((is_array($data[$name]) || is_object($data[$name])) && is_null($fieldset)) {
84117
$data[$name] = json_encode($data[$name]);
85-
break;
86-
}
87118

88-
//if it's a json string
89-
if(strpos($data[$name], '{') === 0
90-
|| strpos($data[$name], '[') === 0
91-
)
92-
{
93-
break;
119+
//if it's a json string
120+
if(strpos($data[$name], '{') === 0
121+
|| strpos($data[$name], '[') === 0
122+
)
123+
{
124+
break;
125+
}
126+
127+
//it can only be comma separated
128+
$data[$name] = explode(',', $data[$name]);
129+
$data[$name] = json_encode($data[$name]);
94130
}
95131

96-
//it can only be comma separated
97-
$data[$name] = explode(',', $data[$name]);
98-
$data[$name] = json_encode($data[$name]);
99132
break;
100133
case 'created':
101134
case 'updated':
@@ -177,8 +210,8 @@ public function expandData(array $data)
177210
[
178211
'multiselect',
179212
'checkboxes',
180-
'files',
181-
'images',
213+
'filelist',
214+
'imagelist',
182215
'tag',
183216
'textlist',
184217
'textarealist',

src/Model/Service.php

100644100755
File mode changed.

src/Model/Service/ElasticService.php

100644100755
File mode changed.

src/Model/Service/RedisService.php

100644100755
File mode changed.

src/Model/Service/SqlService.php

100644100755
File mode changed.

src/Model/Validator.php

100644100755
+40
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,26 @@ public function getCreateErrors(array $data, array &$errors = [], $fieldset = nu
6666
$name = $table . '_' . $field['name'];
6767

6868
if ($field['field']['type'] === 'fieldset' && isset($data[$name])) {
69+
if (!isset($errors[$name])) {
70+
$errors[$name] = [];
71+
}
72+
73+
if (isset($field['field']['attributes']['data-multiple'])
74+
&& !$field['field']['attributes']['data-multiple']
75+
) {
76+
$errors[$name] = $this->getCreateErrors(
77+
$data[$name],
78+
$errors[$name],
79+
Fieldset::i($field['field']['parameters'])
80+
);
81+
82+
if (empty($errors[$name])) {
83+
unset($errors[$name]);
84+
}
85+
86+
continue;
87+
}
88+
6989
foreach($data[$name] as $index => $row) {
7090
if (!isset($errors[$name][$index])) {
7191
$errors[$name][$index] = [];
@@ -155,6 +175,26 @@ public function getUpdateErrors(array $data, array &$errors = [], $fieldset = nu
155175
continue;
156176
}
157177

178+
if (!isset($errors[$name])) {
179+
$errors[$name] = [];
180+
}
181+
182+
if (isset($field['field']['attributes']['data-multiple'])
183+
&& !$field['field']['attributes']['data-multiple']
184+
) {
185+
$errors[$name] = $this->getUpdateErrors(
186+
$data[$name],
187+
$errors[$name],
188+
Fieldset::i($field['field']['parameters'])
189+
);
190+
191+
if (empty($errors[$name])) {
192+
unset($errors[$name]);
193+
}
194+
195+
continue;
196+
}
197+
158198
foreach($data[$name] as $index => $row) {
159199
if (!isset($errors[$name][$index])) {
160200
$errors[$name][$index] = [];

src/Model/controller.php

100644100755
+2-6
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,7 @@
304304
'form',
305305
$data,
306306
[
307-
'scripts',
308-
'form_set',
309-
'form_set-template'
307+
'form_fieldset'
310308
],
311309
$template,
312310
$partials
@@ -475,9 +473,7 @@
475473
'form',
476474
$data,
477475
[
478-
'scripts',
479-
'form_set',
480-
'form_set-template'
476+
'form_fieldset'
481477
],
482478
$template,
483479
$partials

src/Model/events.php

100644100755
File mode changed.

0 commit comments

Comments
 (0)