nyroFwk  0.2
form/db.class.php
Go to the documentation of this file.
1 <?php
10 class form_db extends form {
11 
19  public function addFromField(array $field, $isI18n=false) {
20  $prm = $this->getFromFieldPrm($field);
21  return $this->add($prm['type'], $prm, $isI18n);
22  }
23 
29  public function addFromRelated(array $related) {
30  $prm = array(
31  'dbList'=>$related['fk2']['link'],
32  'name'=>$related['name'],
33  'label'=>$related['label'],
34  'valid'=>array_key_exists('valid', $related)? $related['valid'] : false
35  );
36  if (isset($related['comment']) && is_array($related['comment']))
37  $prm = array_merge($prm, $related['comment']);
38  $prm['dbList']['fields'] = $related['fk2']['link']['ident'].
39  ($prm['dbList']['fields']? ','.$prm['dbList']['fields'] : null);
40  $type = 'checkbox';
41  if (isset($related['fields']) && count($related['fields'])) {
42  $type = 'checkbox_fields';
43  $prm['table'] = $related['tableObj'];
44  $prm['fields'] = $related['fields'];
45  }
46  if (count($prm['dbList']['fields'])) {
47  $tmp = array();
48  foreach(explode(',', $prm['dbList']['fields']) as $f) {
49  if ($f != $prm['dbList']['ident']) {
50  $tmp[] = $f;
51  }
52  }
53  if (count($tmp))
54  $prm['dbList']['order'] = implode(' ASC, ', $tmp).' ASC';
55  }
56  if (array_key_exists('formType', $related) && $related['formType'])
57  $type = $related['formType'];
58  return $this->add($type, $prm);
59  }
60 
67  public function addFromFieldFilter(array $field) {
68  $saveAutoValidRule = $this->cfg->autoValidRule;
69  $this->cfg->autoValidRule = array();
70  if (isset($field['formTypeFilter'])) {
71  $field['formType'] = $field['formTypeFilter'];
72  } else if (isset($field['formType'])) {
73  unset($field['formType']);
74  }
75  $prm = $this->getFromFieldPrm($field);
76  $this->cfg->autoValidRule = $saveAutoValidRule;
77  unset($prm['value']);
78  switch($prm['type']) {
79  case 'multiline':
80  case 'richtext':
81  $prm['type'] = 'text';
82  break;
83  case 'date':
84  case 'datetime':
85  $prm['type'] = 'range_date';
86  break;
87  case 'radio':
88  if ($field['type'] == 'tinyint')
89  $prm['list'] += array('-1'=>$this->cfg->all);
90  else
91  $prm['type'] = 'checkbox';
92  $prm['valueNone'] = -1;
93  $prm['value'] = -1;
94  break;
95  case 'list':
96  $prm['list'] += array('-1'=>$this->cfg->all);
97  if (isset($prm['list'][0]))
98  unset($prm['list'][0]);
99  $prm['valueNone'] = -1;
100  $prm['value'] = -1;
101  break;
102  case 'file':
103  $prm['type'] = 'checkbox';
104  $prm['list'] = array('1'=>$this->cfg->getInArray('listBool', 1));
105  $prm['uniqValue'] = true;
106  break;
107  case 'numeric':
108  $prm['type'] = 'range_numeric';
109  $prm['valid']['validEltArray'] = true;
110  $prm['allowedRange'] = $this->cfg->table->getRange($prm['name']);
111  break;
112  }
113  $prm['valid']['required'] = false;
114  $prm['valid']['dbUnique'] = false;
115  return $this->add($prm['type'], $prm);
116  }
117 
123  public function addFromRelatedFilter(array $related) {
124  $prm = array(
125  'dbList'=>$related['fk2']['link'],
126  'name'=>$related['name'],
127  'label'=>$related['label'],
128  'valid'=>array_key_exists('valid', $related)? $related['valid'] : false
129  );
130  $prm['dbList']['fields'] = $related['fk2']['link']['ident'].
131  ($prm['dbList']['fields']? ','.$prm['dbList']['fields'] : null);
132  $type = 'checkbox';
133  if (count($prm['dbList']['fields'])) {
134  $tmp = array();
135  foreach(explode(',', $prm['dbList']['fields']) as $f) {
136  if ($f != $prm['dbList']['ident']) {
137  $tmp[] = $f;
138  }
139  }
140  if (count($tmp))
141  $prm['dbList']['order'] = implode(' ASC, ', $tmp).' ASC';
142  }
143  if (array_key_exists('formTypeFilter', $related) && $related['formTypeFilter'])
144  $type = $related['formTypeFilter'];
145  return $this->add($type, $prm);
146  }
147 
154  public function getFromFieldPrm(array $field) {
155  $ret = array();
156  $prm = array_merge(array(
157  'name'=>$field['name'],
158  'label'=>$field['label'],
159  'value'=>array_key_exists('value', $field)? $field['value'] : $field['default'],
160  'link'=>array_key_exists('link', $field)? $field['link'] : null,
161  'valid'=>array('required'=>$field['required'])
162  ), $field['comment']);
163 
164  if ($field['unique'] && ! array_key_exists('dbUnique', $prm['valid'])) {
165  $prm['valid']['dbUnique'] = array(
166  'table'=>$this->cfg->table,
167  'field'=>$field['name'],
168  'value'=>$prm['value']
169  );
170  }
171  if (array_search($field['name'], $this->cfg->autoValidRule) !== false && !array_key_exists($field['name'], $prm['valid']))
172  $prm['valid'][$field['name']] = true;
173 
174  if (array_search('hidden', $field['comment'], true) !== false)
175  $ret = array_merge($prm, array('type'=>'hidden'));
176  else {
177  if (!empty($field['link'])) {
178  $checkType = false;
179  $type = 'list';
180  $prm['list'] = $field['link']['list'];
181  $prm['valueNone'] = 0;
182  $fields = null;
183  $order = null;
184  $join = null;
185  if ($field['link']['fields']) {
186  $linkedTable = db::get('table', $field['link']['table'], array(
187  'db'=>$this->cfg->table->getDb()
188  ));
189  $tmp = array();
190  foreach(explode(',', $field['link']['fields']) as $t) {
191  if ($linkedInfo = $linkedTable->getLinkedTableName($t)) {
192  $alias = $field['name'].'_'.$linkedInfo['table'];
193  $join[] = array(
194  'table'=>$linkedInfo['table'],
195  'alias'=>$alias,
196  'dir'=>'left outer',
197  'on'=>$field['link']['table'].'.'.$linkedInfo['field'].'='.$alias.'.'.$linkedInfo['ident']
198  );
199  $ttmp = array();
200  foreach(explode(',', $linkedInfo['fields']) as $tt) {
201  $ttmp[] = $alias.'.'.$tt;
202  $ttmp[] = '"'.$linkedInfo['sep'].'"';
203  }
204  array_pop($ttmp);
205  $tmp[] = 'CONCAT('.implode(',', $ttmp).')';
206  } else
207  $tmp[] = $field['link']['table'].'.'.$t;
208  }
209  $fields.= ','.implode(',', $tmp);
210  $order = implode(' ASC, ', $tmp).' ASC';
211  }
212  $prm['dbList'] = array(
213  'fields'=>$field['link']['table'].'.'.$field['link']['ident'].$fields,
214  'i18nFields'=>$field['link']['i18nFields'],
215  'ident'=>$field['link']['ident'],
216  'table'=>$field['link']['table'],
217  'join'=>$join,
218  'sep'=>$field['link']['sep'],
219  'where'=>$field['link']['where'],
220  'order'=>isset($field['link']['order']) ? $field['link']['order'] : $order,
221  'sepGr'=>$field['link']['sepGr'],
222  'nbFieldGr'=>$field['link']['nbFieldGr']
223  );
224  $ret = array_merge($prm, array('type'=>$type));
225  } else {
226  switch($field['type']) {
227  case 'set':
228  case 'enum':
229  $type = 'radio';
230  $prm['list'] = $field['precision'];
231  $prm['needOut'] = true;
232  break;
233  case 'date':
234  $type = 'date';
235  $prm['valid']['different'] = '0000-00-00';
236  break;
237  case 'datetime':
238  case 'timestamp':
239  $type = 'datetime';
240  $prm['valid']['different'] = '0000-00-00 00:00:00';
241  break;
242  case 'text':
243  case 'blob':
244  case 'tinytext':
245  case 'tinyblob':
246  case 'mediumtext':
247  case 'mediumblob':
248  case 'longtext':
249  case 'longblob':
250  $key = array_search('richtext', $field['comment']);
251  if ($key !== false) {
252  $type = 'richtext';
253  unset($field['comment'][$key]);
254  $prm['html'] = $field['comment'];
255  if (array_key_exists('html', $prm['html'])) {
256  $prm['html'] = array_merge_recursive($prm['html'], $prm['html']['html']);
257  unset($prm['html']['html']);
258  }
259  if (array_key_exists('tinyMce', $field))
260  $prm['tinyMce'] = $field['tinyMce'];
261  unset($prm['html']['tinyMce']);
262  } else {
263  $type = 'multiline';
264  $prm['maxlength'] = $field['length'];
265  }
266  break;
267  case 'bool':
268  case 'boolean':
269  case 'tinyint':
270  $type = 'radio';
271  $prm['list'] = isset($field['precision']) ? $field['precision'] : $this->cfg->listBool;
272  $prm['inline'] = true;
273  if ($field['type'] != 'tinyint' || ($field['type'] == 'tinyint' && $field['length'] == 1)) {
274  $prm['valid']['required'] = false;
275  break;
276  }
277  case 'year':
278  case 'bigint':
279  case 'mediumint':
280  case 'smallint':
281  case 'int':
282  $type = 'numeric';
283  $prm['maxlength'] = $field['length'];
284  $prm['valid']['int'] = true;
285  break;
286  case 'decimal':
287  case 'float':
288  case 'double':
289  case 'decimal':
290  case 'dec':
291  case 'numeric':
292  case 'fixed':
293  $type = 'numeric';
294  $prm['maxlength'] = $field['precision']? $field['length']+1 : $field['length'];
295  $prm['valid']['numeric'] = true;
296  break;
297  case 'file':
298  $type = 'file';
299  if (count($field['comment']) == 1 && array_key_exists(0, $field['comment']))
300  $prm['helper'] = $field['comment'][0];
301  else
302  $prm = array_merge($prm, $field['comment']);
303  break;
304  default:
305  $type = array_key_exists(0, $field['comment']) && !empty($field['comment'][0])? $field['comment'][0] : 'text';
306  $prm['maxlength'] = $field['length'];
307  }
308 
309  $ret = array_merge($prm, array('type'=>$type));
310  }
311  }
312  if (array_key_exists('formType', $field) && $field['formType'])
313  $ret['type'] = $field['formType'];
314  return $ret;
315  }
316 
317 }
addFromRelated(array $related)
addFromRelatedFilter(array $related)
addFromFieldFilter(array $field)
getFromFieldPrm(array $field)
add($type, array $prm=array(), $isI18n=false)
Definition: form.class.php:343
static get($type, $table, array $prm=array())
Definition: db.class.php:87
addFromField(array $field, $isI18n=false)
$f
Definition: list.php:6
Generated on Sun Oct 15 2017 22:25:20 for nyroFwk by doxygen 1.8.13