Source for file basic_field.php

Documentation is available at basic_field.php


1 <?php
2 /**
3 * @author Jan H. Andersen <jha@ipwsystems.dk>
4 * @author Martin R. Larsen <mrl@ipwsystems.dk>
5 * @copyright {@link http://www.ipwsystems.dk/ IPW Systems a.s}
6 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
7 * @package METAjour
8 * @subpackage view
9 * $Id: basic_field.php,v 1.25 2005/02/16 05:02:53 jan Exp $
10 */
11
12 /**
13 * Helper class focused on creating misc form elements
14 * It is used only by the views, but is not descended from basic_view so no
15 * information about context, objectid etc is available in the class. Any
16 * information must be passed as parameters to the methods. Only userhandler
17 * can be expected.
18 */
19
20 define('IN_FORM', 1);
21 define('IN_VIEW', 2);
22 define('IN_LIST', 3);
23
24 class basic_field {
25 var $userhandler;
26 var $view;
27 function basic_field(&$view) {
28 $this->view = &$view;
29 $this->userhandler =& GetUserHandler();
30 }
31
32 function userSelection($objectid, $fieldname) {
33 $result .= '<select name="'.$fieldname.'[]" style="width: 260px;" size=8 multiple>';
34 $arr = array();
35 if ($objectid) {
36 $obj = owRead($objectid);
37 $arr = $obj->getmembers();
38 }
39 $cobj = owNew('user');
40 $cobj->setsort_col('name');
41 $cobj->listobjects();
42 $z = 0;
43 $sel = '';
44 if (!is_array($arr)) $sel = ' SELECTED';
45 $result .= '<option value=""'.$sel.'>'.$this->view->gl('select_none').'</option>';
46 while ($z < $cobj->elementscount) {
47 $sel = '';
48 if (is_array($arr) && in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
49 $result .= '<option value="'.$cobj->elements[$z]['objectid'].'"'.$sel.'>'.$cobj->elements[$z]['name'].'</option>';
50 $z++;
51 }
52 unset($cobj);
53 $result .= '</select>';
54 return $result;
55 }
56
57 function usergroupSelection($objectid, $fieldname) {
58 $result .= '<select name="'.$fieldname.'[]" style="width: 260px;" size=8 multiple>';
59 $arr = array();
60 if ($objectid) {
61 $obj = owRead($objectid);
62 $arr = $obj->getgroupmemberships($objectid);
63 }
64 $cobj = owNew('usergroup');
65 $cobj->setsort_col('name');
66 $cobj->listobjects();
67 $z = 0;
68 while ($z < $cobj->elementscount) {
69 $sel = '';
70 if (is_array($arr) && in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
71 $result .= '<option value="'.$cobj->elements[$z]['objectid'].'"'.$sel.'>'.$cobj->elements[$z]['name'].'</option>';
72 $z++;
73 }
74 unset($cobj);
75 $result .= '</select>';
76 return $result;
77 }
78
79 function categorySelection($objectid, $fieldname, $datatype = '') {
80 $result .= '<select name="'.$fieldname.'[]" style="width: 260px;" size=8 multiple>';
81 if ($objectid != NULL) $obj = owRead($objectid);
82 $cobj = owNew('category');
83 $cobj->setsort_col('name');
84 $cobj->listobjects();
85 $z = 0;
86 /* usually we want to display the categories available to the current
87 datatype, but in some situations we want to display the categories
88 available to a different datatype, for instance when we import
89 data using sys_view_import */
90 if ($datatype == '') $datatype = $this->view->otype;
91 while ($z < $cobj->elementscount) {
92 if ($cobj->elements[$z]['datatype'] == $datatype || $cobj->elements[$z]['datatype'] == '') {
93 $sel = '';
94 if ($objectid != NULL && $obj->ismember($cobj->elements[$z]['objectid'])) $sel = ' SELECTED';
95 $result .= '<option value="'.$cobj->elements[$z]['objectid'].'"'.$sel.'>'.$cobj->elements[$z]['name'].'</option>';
96 }
97 $z++;
98 }
99 unset($cobj);
100
101 $result .= '</select>';
102 return $result;
103 }
104
105 function webAccessSelection($objectid, $fieldname) {
106 $result .= '<select name="'.$fieldname.'[]" style="width: 260px;" size=8 multiple>';
107 $arr = array();
108 if ($objectid != NULL) {
109 $obj = owRead($objectid);
110 $tarr = $obj->getaccess();
111 }
112 if (is_array($tarr)) {
113 foreach ($tarr as $carr) {
114 if ($carr['user_read']) $arr[] = $carr['user_read'];
115 if ($carr['group_read']) $arr[] = $carr['group_read'];
116 }
117 }
118
119 $cobj = owNew('user');
120 $cobj->setsort_col('name');
121 $cobj->listobjects();
122 $z = 0;
123 $sel = '';
124 if (!is_array($tarr)) $sel = ' SELECTED';
125 $result .= '<option value=""'.$sel.'>'.$this->view->gl('select_all').'</option>';
126 while ($z < $cobj->elementscount) {
127 $sel = '';
128 if (in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
129 $result .= '<option value="'.$cobj->elements[$z]['objectid'].'"'.$sel.'>'.$cobj->elements[$z]['name'].'</option>';
130 $z++;
131 }
132 unset($cobj);
133
134 $cobj = owNew('usergroup');
135 $cobj->setsort_col('name');
136 $cobj->listobjects();
137 $z = 0;
138 while ($z < $cobj->elementscount) {
139 $sel = '';
140 if (in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
141 $result .= '<option value="-'.$cobj->elements[$z]['objectid'].'"'.$sel.'>['.$cobj->elements[$z]['name'].']</option>';
142 $z++;
143 }
144 unset($cobj);
145
146 $result .= '</select>';
147 return $result;
148 }
149
150 function sysAccessSelection($objectid, $fieldname) {
151 $result .= '<select name="'.$fieldname.'[]" style="width: 260px;" size=8 multiple>';
152 $arr = array();
153 if ($objectid != NULL) {
154 $obj = owRead($objectid);
155 $tarr = $obj->getaccess();
156 }
157 if (is_array($tarr)) {
158 foreach ($tarr as $carr) {
159 if ($carr['user_write']) $arr[] = $carr['user_write'];
160 if ($carr['group_write']) $arr[] = $carr['group_write'];
161 }
162 }
163
164 $cobj = owNew('user');
165 $cobj->setsort_col('name');
166 $cobj->listobjects();
167 $z = 0;
168 $sel = '';
169 if (!is_array($tarr)) $sel = ' SELECTED';
170 $result .= '<option value=""'.$sel.'>'.$this->view->gl('select_owner').'</option>';
171 while ($z < $cobj->elementscount) {
172 $sel = '';
173 if (in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
174 $result .= '<option value="'.$cobj->elements[$z]['objectid'].'"'.$sel.'>'.$cobj->elements[$z]['name'].'</option>';
175 $z++;
176 }
177 unset($cobj);
178
179 $cobj = owNew('usergroup');
180 $cobj->setsort_col('name');
181 $cobj->listobjects();
182 $z = 0;
183 while ($z < $cobj->elementscount) {
184 $sel = '';
185 if (in_array($cobj->elements[$z]['objectid'],$arr)) $sel = ' SELECTED';
186 $result .= '<option value="-'.$cobj->elements[$z]['objectid'].'"'.$sel.'>['.$cobj->elements[$z]['name'].']</option>';
187 $z++;
188 }
189 unset($cobj);
190
191 $result .= '</select>';
192 return $result;
193 }
194
195 /**
196 * @todo Move all the following functions to appropriate methods in the view hierarchy
197 */
198
199 function listallobjects($type, $value, $emptynone = false) {
200 $obj = owNew($type);
201
202 if (in_array('default',$obj->getviews())) {
203 $std = true;
204 $res = '<option value="0">'.$this->view->gl('select_standard').'</option>';
205 } else {
206 $std = false;
207 if ($emptynone) {
208 $res = '<option value="">'.$this->view->gl('select_none').'</option>';
209 } else {
210 $res = '<option value="0">'.$this->view->gl('select_none').'</option>';
211 }
212 }
213
214 $obj->setlistaccess(true);
215 $obj->setfilter_getname(true);
216 $obj->setsort_col('name');
217 $obj->listobjects();
218 $z = 0;
219 if (is_array($value)) {
220 $selected = array();
221 $unselected = array();
222 while ($z < $obj->elementscount) {
223 if ($std && $obj->elements[$z]['standard'] == 1) {
224 $standard = ' '.$this->view->gl('select_standard');
225 } else {
226 $standard = '';
227 }
228
229 if (in_array($obj->elements[$z]['objectid'],$value)) {
230 $selected[$obj->elements[$z]['objectid']] = $obj->elements[$z]['name'] . $standard;
231 } else {
232 $unselected[$obj->elements[$z]['objectid']] = $obj->elements[$z]['name'] . $standard;
233 }
234 $z++;
235 }
236
237 foreach ($selected as $objectid=>$name) {
238 $res .='<option value="' . $objectid . '" SELECTED>' . $name."\n";
239 }
240 foreach ($unselected as $objectid=>$name) {
241 $res .='<option value="' . $objectid . '">' . $name."\n";
242 }
243
244 } else {
245 while ($z < $obj->elementscount) {
246 if ($std && $obj->elements[$z]['standard'] == 1) {
247 $standard = ' '.$this->view->gl('select_standard');
248 } else {
249 $standard = '';
250 }
251 $selection = '';
252 if (is_array($value)) {
253 if (in_array($obj->elements[$z]['objectid'],$value)) $selection = ' SELECTED';
254 } else {
255 if ($obj->elements[$z]['objectid'] == $value) $selection = ' SELECTED';
256 }
257 $res .='<option value="' . $obj->elements[$z]['objectid'] . '"'.$selection.'>' . $obj->elements[$z]['name'] . $standard."\n";
258 $z++;
259 }
260
261 }
262 return $res;
263 }
264
265 function listallusers($value) {
266 $obj = owNew('user');
267 $obj->setlistaccess(true);
268 $obj->setfilter_getname(true);
269 $obj->setsort_col('name');
270 $obj->listobjects();
271 $z = 0;
272 while ($z < $obj->elementscount) {
273 $selection = '';
274 if ($obj->elements[$z]['objectid'] == $value) $selection = ' SELECTED';
275 $res .='<option value="' . $obj->elements[$z]['objectid'] . '"'.$selection.'>' . $obj->elements[$z]['name'] ."\n";
276 $z++;
277 }
278 return $res;
279 }
280
281 function listallcategories($value) {
282 $res = '<option value="0">'.$this->view->gl('select_category').'</option>';
283 $obj = owNew('category');
284 $obj->setlistaccess(true);
285 $obj->setfilter_getname(true);
286 $obj->setsort_col('name');
287 $obj->listobjects();
288 $z = 0;
289 while ($z < $obj->elementscount) {
290 $selection = '';
291 if ($obj->elements[$z]['objectid'] == $value) $selection = ' SELECTED';
292
293 if ($obj->elements[$z]['datatype'] == $this->view->otype || $obj->elements[$z]['datatype'] == '')
294 $res .='<option value="' . $obj->elements[$z]['objectid'] . '"'.$selection.'>' . $obj->elements[$z]['name'] . "\n";
295 $z++;
296 }
297 return $res;
298 }
299
300
301 function listAllLanguages($value=null) {
302 $res = '<option value="">'.$this->view->gl('select_language').'</option>';
303 $languages = system::getlanguages();
304 for($i = 0, $n = sizeOf($languages); $i < $n; $i++) {
305 $selection = "";
306 if ($languages[$i]['langcode'] == $value) $selection = ' SELECTED';
307 $res .='<option value="' . $languages[$i]['langcode'] . '"'.$selection.'>' . $languages[$i]['language'] . " (". $languages[$i]['langcode'] . ")\n";
308 }
309 return $res;
310 }
311
312
313 function listCountries($value=null) {
314 $res = '<option value="">'.$this->view->gl('select_country').'</option>';
315 $languages = system::getCountries();
316 for($i = 0, $n = sizeOf($languages); $i < $n; $i++) {
317 $selection = "";
318 if ($languages[$i]['countrycode'] == $value) $selection = ' SELECTED';
319 $res .='<option value="' . $languages[$i]['countrycode'] . '"'.$selection.'>' . $languages[$i]['country'] . " (". $languages[$i]['countrycode'] . ")\n";
320 }
321 return $res;
322 }
323
324 function listallclasses($value) {
325 $res = '<option value="">'.$this->view->gl('select_table').'</option>';
326 $datatypes = owListCore();
327 $dt = array();
328 foreach ($datatypes as $cur) {
329 $idx = owDatatypeDesc($cur);
330 $dt[$idx]['datatype'] = $cur;
331 $dt[$idx]['datatypename'] = $idx;
332 $dt[$idx]['selected'] = '';
333 if ($cur == $value) $dt[$idx]['selected'] = ' SELECTED';
334 }
335 ksort($dt);
336 foreach ($dt as $cur) {
337 $res .='<option value="'.$cur['datatype'].'"'.$cur['selected'].'>'.$cur['datatypename']."</option>\n";
338 }
339 return $res;
340 }
341
342 function listallapps($value) {
343 $apps = owGetApps();
344 foreach ($apps as $app) {
345 $selected = '';
346 if (is_array($value)) {
347 if (in_array($app['app'], $value)) $selected = ' SELECTED';
348 } else {
349 if ($app['app'] == $value) $selected = ' SELECTED';
350 }
351 $res .='<option value="'.$app['app'].'"'.$selected.'>'.$app['name']."</option>\n";
352 }
353 return $res;
354 }
355
356 function tmpGetExtName($value) {
357 if ($this->userhandler->getGuiLanguage() == 'da') {
358 switch ($value) {
359 case "shop":
360 return "Webshop";
361 case "search":
362 return "Søgning";
363 case "index":
364 return "Sideoversigt";
365 case "indexadv":
366 return "Sideoversigt med søgning";
367 case "forum":
368 return "Debatforum";
369 case "register":
370 return "Brugerregistrering";
371 case "changepassword":
372 return "Skift kodeord";
373 case "forgottenpassword":
374 return "Glemt kodeord";
375 case "slide":
376 return "Slide præsentation";
377 case "bulletinboard":
378 return "Opslagstavle";
379 case "login":
380 return "Login";
381 case "sitemap":
382 return "Sitemap";
383 default:
384 return false;
385 }
386 } else {
387 switch ($value) {
388 case "shop":
389 return "Webshop";
390 case "search":
391 return "Site search";
392 case "index":
393 return "Page index";
394 case "indexadv":
395 return "Page index with search";
396 case "forum":
397 return "Bulletin board";
398 case "register":
399 return "User registration";
400 case "changepassword":
401 return "Change password";
402 case "forgottenpassword":
403 return "Forgotten password";
404 case "slide":
405 return "Slide presentation";
406 case "bulletinboard":
407 return "Simple bulletin board";
408 case "login":
409 return "Login";
410 case "sitemap":
411 return "Sitemap";
412 default:
413 return false;
414 }
415 }
416 }
417
418 function listallcomponents($value) {
419 $res = '<option value="">'.$this->view->gl('select_extension').'</option>';
420 $datatypes = owListExtensions();
421 $dt = array();
422 foreach ($datatypes as $cur) {
423 $idx = $this->tmpGetExtName($cur);
424 if ($idx) {
425 $dt[$idx]['datatype'] = $cur;
426 $dt[$idx]['datatypename'] = $idx;
427 $dt[$idx]['selected'] = '';
428 if ($cur == $value) $dt[$idx]['selected'] = ' SELECTED';
429 }
430 }
431 ksort($dt);
432 foreach ($dt as $cur) {
433 $res .='<option value="'.$cur['datatype'].'"'.$cur['selected'].'>'.$cur['datatypename']."\n";
434 }
435 return $res;
436 }
437
438 function listFiles($dir = '') {
439 global $CONFIG
440
441 if ($dir != '')
442 $dir .= '/';
443
444 $files = array();
445 if ($directory = opendir($CONFIG['files_path'] . $dir)) {
446 while(($file = readdir($directory)) !== false) {
447 if ($file == '.' || $file == '..')
448 continue;
449 if (is_dir($CONFIG['files_path'] . $dir . $file)) {
450 $files = array_merge($files, listFiles($dir . $file));
451 } else {
452 $files[] = $dir . $file;
453 }
454 }
455 }
456 return $files;
457 }
458
459
460 function parsefield($field, $value, $con = IN_FORM, $variant = false, $variantfields = array()) {
461 global $viewer_url
462
463 /* if field is marked on user as secret, skip processing */
464 if ($this->userhandler->IsFieldSecret($this->view->otype,$field['name'])) return '';
465
466 /* UI_READONLY field not visible in create forms, skip processing */
467 if ($this->view->view == 'create' && $field['inputtype'] == UI_READONLY) return '';
468
469 ob_start();
470 /* if field is marked on user as hidden, set field type to hidden */
471 if ($this->userhandler->IsFieldHidden($this->view->otype,$field['name'])) $field['inputtype'] = UI_HIDDEN;
472
473 /* on create, get default value if set on user */
474 if ($this->userhandler->FieldDefault($this->view->otype,$field['name'])
475 && $this->view->view == 'create')
476 $value = $this->userhandler->FieldDefault($this->view->otype,$field['name']);
477
478 /* set label to column name, if label is empty and inputtype is not UI_HIDDEN */
479 if ($field['label'] == '' && $field['inputtype'] != UI_HIDDEN) $field['label'] = $field['name'];
480
481 if ($con == IN_FORM || $con == IN_VIEW) {
482 if (!isset($field['skipstart'])) {
483 echo '<div class="mformfieldset" style="'.$field['fieldsetstyle'];
484 if ($field['inputtype'] == UI_HIDDEN) echo "display: none;";
485 echo '">';
486 $labelclass = (isset($field['labelclass'])) ? $field['labelclass'] : 'mformlabel';
487 } else {
488 $labelclass = (isset($field['labelclass'])) ? $field['labelclass'] : 'mformlabelshort';
489 }
490 if ($field['inputtype'] != UI_HIDDEN) echo '<div class="'.$labelclass.'" style="'.$field['labelstyle'].'">'.$field['label'].'</div>';
491 if ($field['inputtype'] != UI_HIDDEN) echo '<div class="mformfield" style="'.$field['fieldstyle'].'">';
492
493 if ($variant && $field['inputtype'] != UI_HIDDEN) {
494 $onchange = 'field = document.getElementById(\''.$field['name'].'\'); if (this.checked) { field.disabled = false; field.style.backgroundColor = \'#ffffff\'; } else { field.style.backgroundColor = \'#cccccc\'; field.disabled = true;}';
495 $checked = '';
496 if (is_array($variantfields) && in_array($field['name'], $variantfields)) $checked = ' CHECKED';
497 echo '<input type="checkbox" name="__var__'.$field['name'].'" onclick="'.$onchange.'"'.$checked.'>';
498 }
499 }
500 switch ($field['inputtype']) {
501 case UI_DECIMAL:
502 if ($con == IN_FORM) {
503 echo '<input type="text" validate="'.$field['validate'].'" name="'.$field['name'].'" id="'.$field['name'].'" value="'.$value.'" style="text-align: right; width: 100px; '.$field['style'].'">';
504 } else {
505 echo $value;
506 }
507 break;
508
509 case UI_NOTHING:
510 $value = '';
511 // FALLTHRU
512 case UI_READONLY:
513 if ($con == IN_FORM || $con == IN_VIEW) {
514 echo '<div name="'.$field['name'].'" id="'.$field['name'].'" style="padding-top: 3px;'.$field['style'].'">'.nl2br($value).'</div>';
515 } else {
516 echo substr($value, 0, 70);
517 }
518 break;
519
520 case UI_PHONE:
521 if ($con == IN_FORM) {
522 global $UI_PHONE_register
523 if (!$UI_PHONE_register) {
524 echo '<object id="dde" style="display: none" classid="clsid:D1B8DBB8-3420-49C8-A7F8-D56B865AD657"></object>';
525 $UI_PHONE_register = true;
526 }
527 echo '<input type="text" validate="'.$field['validate'].'" name="'.$field['name'].'" id="'.$field['name'].'" value="'.htmlspecialchars($value).'" style="width: 350px; '.$field['style'].'">';
528 echo '<input type="button" value="R" onclick="var dde=document.all.dde; var handle = dde.connect(\'CCABP\',\'CallControl\'); dde.execute(handle,\'MAKECALL \' + this.form.'.$field['name'].'.value, 0);">';
529 } elseif ($con == IN_VIEW) {
530 echo $value;
531 } else {
532 echo substr($value,0,70);
533 }
534 break;
535
536 case UI_STRING:
537 if ($con == IN_FORM) {
538 echo '<input type="text" validate="'.$field['validate'].'" name="'.$field['name'].'" id="'.$field['name'].'" value="'.htmlspecialchars($value).'" style="width: 350px; '.$field['style'].'">';
539 } elseif ($con == IN_VIEW) {
540 echo $value;
541 } else {
542 echo substr($value,0,70);
543 }
544 break;
545
546 case UI_STRING_LITERAL:
547 if ($con == IN_FORM) {
548 echo '<input type="text" validate="'.$field['validate'].'" name="'.$field['name'].'" id="'.$field['name'].'" value="'.$value.'" style="width: 350px; '.$field['style'].'">';
549 } elseif ($con == IN_VIEW) {
550 echo $value;
551 } else {
552 echo substr($value,0,70);
553 }
554 break;
555
556 case