mayEdit(); } function build_form($mask) { $ret = array(); $form_checks = array(); $label_class = ''; $hallinta = Hallinta::instance(); $ret[] = '
'; $ret[] = '
'; $ret[] = ''; foreach ($mask['edit'] as $id => $info) { if ($info['type'] == 'hidden') $ret[] = sprintf('', $id, $id, !array_key_exists('default', $info)?'':$info['default']); elseif ($info['type'] == 'html') $ret[] = $info['code']; else { $v = array('id="edit_'.$id."\"", 'name="'.$id.'"'); if (isset($info['visible'])) { if ($info['visible'] == 'desktop' && $hallinta->isMobile()) return; if ($info['visible'] == 'mobile' && !$hallinta->isMobile()) return; if (($info['visible'] == 'mobile-optional' && $hallinta->isMobile()) || ($info['visible'] == 'desktop-optional' && !$hallinta->isMobile())) { $label_class = ' class="toggle"'; $v[] = 'style="display:none;"'; } } $checks = array(); $ret[] = sprintf('', $id, $id, $label_class, $info['name']); if (isset($info['required']) && $info['required'] === true) { $checks[] = 'required'; $v[] = 'onblur="form_elem_onblur(event)"'; } if ($info['type'] != 'date') $v[] = 'class="maxwidth"'; if ($info['type'] == 'text' || $info['type'] == 'passwd' || $info['type'] == 'decimal' || $info['type'] == 'number') { $v[] = 'size="'.(!array_key_exists('size', $info)?'10':$info['size']).'"'; $v[] = 'type="'.($info['type']=='passwd'?'password':'text').'"'; $v[] = 'value="'.(!array_key_exists('default', $info)?'':$info['default']).'"'; $ret[] = sprintf('', implode(' ', $v)); if ($info['type'] == 'decimal') $checks[] = 'decimal'; if ($info['type'] == 'number') $checks[] = 'number'; } elseif ($info['type'] == 'date') { $v[] = 'size="8"'; $ret[] = sprintf(' ', implode(' ', $v)); $ret[] = sprintf('', Hallinta::instance()->urlbase(), $id, $id, $id); $checks[] = 'date'; } elseif ($info['type'] == 'time') { $v[] = 'size="5"'; $ret[] = sprintf(' ', implode(' ', $v)); $checks[] = 'time'; } elseif ($info['type'] == 'boolean') { $v[] = 'type="checkbox"'; $ret[] = sprintf('', implode(' ', $v)); } elseif ($info['type'] == 'file') { $v[] = 'type="file"'; $v[] = 'style="display:none;"'; $ret[] = sprintf('', implode(' ', $v)); $v = array('id="edit_real_'.$id.'"', 'name="real_'.$id.'"'); $v[] = 'type="text"'; $v[] = 'data-for="edit_'.$id.'"'; $v[] = 'class="maxwidth file-upload"'; $v[] = 'readonly="readonly"'; $v[] = 'placeholder="Browse..."'; $v[] = sprintf('title="Max %s"', bytes_to_php(upload_max_filesize())); $ret[] = sprintf('', implode(' ', $v)); } elseif ($info['type'] == 'select') { if (array_key_exists('onchange',$info)) $v[] = sprintf('onchange="%s"', $info['onchange']); $ret[] = sprintf(''; } elseif ($info['type'] == 'textarea') { $v[] = sprintf('cols="%d"', !array_key_exists('columns', $info)?33:$info['columns']); $v[] = sprintf('rows="%d"', !array_key_exists('rows', $info)?5:$info['rows']); $ret[] = sprintf('', implode(' ', $v)); } if (array_key_exists('comment',$info)) $ret[] = sprintf('%s', $info['comment']); if (count($checks)) $form_checks[$id] = implode(',', $checks); } } $v_save = array('id="button_save"', 'onclick="return form_save(this);"'); if (isset($mask['buttons']) && isset($mask['buttons']['save']) && $mask['buttons']['save'] === false) $v_save[] = 'style="display: none"'; $v_insert = array('id="button_insert"', 'onclick="return form_insert(this);"'); if (isset($mask['buttons']) && isset($mask['buttons']['insert']) && $mask['buttons']['insert'] === false) $v_insert[] = 'style="display: none"'; $v_delete = array('id="button_delete"', 'onclick="return form_delete(this);"'); if (isset($mask['buttons']) && isset($mask['buttons']['delete']) && $mask['buttons']['delete'] === false) $v_delete[] = 'style="display: none"'; $v_changes = array('id="form_status"', 'title="Last modified"'); if (isset($mask['buttons']) && isset($mask['buttons']['changes']) && $mask['buttons']['changes'] === false) $v_changes[] = 'style="display: none"'; $ret[] = sprintf('

 

', implode(' ', $v_changes)); $ret[] = '
'; $ret[] = sprintf('', implode(' ', $v_save), 'Speichern'); $ret[] = ''; $ret[] = sprintf('', implode(' ', $v_insert), 'Hinzufügen'); $ret[] = ''; $ret[] = sprintf('', implode(' ', $v_delete), 'Löschen'); $ret[] = '
'; $ret[] = '
'; $ret[] = '
'; return array('form' => implode('', $ret), 'checks' => $form_checks);; } function grid_details($source, $name, $def) { $hallinta = Hallinta::instance(); if ($name == 'main') $gridName = $source; else $gridName = $source . '__' . $name . '__second'; $options = array(); $options['onscroll'] = 'gridOnScroll'; $options['menuEvent'] = 'contextmenu'; $options['highlightElem'] = 'menuRow'; if ($name == 'main') $options['click'] = 'gridDrillDown'; if (array_key_exists('onclick', $def)) $options['click'] = $def['onclick']; if (array_key_exists('rows', $def)) $options['visibleRows'] = intval($def['rows']); if (array_key_exists('sort', $def)) $options['sortCol'] = intval($def['sort']); if (array_key_exists('sortdir', $def)) $options['sortDir'] = $def['sortdir']; if (array_key_exists('prefetch', $def) && $def['prefetch'] == false) $options['prefetchBuffer'] = false; if (array_key_exists('maxprint', $def)) $options['maxPrint'] = intval($def['maxprint']); else $options['maxPrint'] = 100000; $options['saveColumnInfo'] = array('width' => true, 'filter' => true, 'sort' => true); $canEdit = array_key_exists('table_edit', $def); if ($canEdit) { $options['canEdit'] = true; $options['updateURL'] = $hallinta->urlbase().'ajax/ajax.php'; } $hasFilter = false; $columnSpecs = array(); $html = array(); $html[] = sprintf('', $gridName); $html[] = ''; foreach ($def['list'] as $field => $data) { $html[] = sprintf('', $data['name']); if ($canEdit && array_key_exists('edit', $data)) { if (!is_array($data['edit'])) throw new Exception(sprintf('Grid %s column %s edit is not an array', $name, $data['name'])); $s = $data['edit']; $s['FieldName'] = sprintf('listinput_%s', $field); $s['ColName'] = $data['name']; } else { $s = array(); } if (isset($data['visible'])) { if ($data['visible'] === false) $s['visible'] = false; elseif ($data['visible'] === 'mobile' && !$hallinta->isMobile()) $s['visible'] = false; elseif ($data['visible'] === 'desktop' && $hallinta->isMobile()) $s['visible'] = false; } if (isset($data['width']) && $data['width'] > 0) $s['width'] = intval($data['width']); if (array_key_exists('type', $data)) $s['type'] = $data['type']; if (array_key_exists('filter', $data)) { $s['filterUI'] = $data['filter']; $hasFilter = true; } if (array_key_exists('control', $data)) $s['control'] = $data['control']; if (array_key_exists('specs', $data)) { if (!is_array($data['specs'])) throw new Exception(sprintf('Grid %s column %s specs is not an array', $name, $data['name'])); $s = array_merge($s, $data['specs']); } $columnSpecs[] = $s; } $options['columnSpecs'] = $columnSpecs; if ($hasFilter) { $options['AutoFilter'] = true; $options['FilterLocation'] = -1; } $html[] = ''; $html[] = '
%s
'; $html[] = '
'; $html[] = sprintf('
Datensatz 0
', $gridName); if ($name == 'main') $html[] = '
'; $html[] = '
'; grid_sql($gridName, $def); $grid = array('name' => $name, 'gridname' => $gridName, 'title' => $def['title'], 'html' => implode('',$html), 'options' => $options); if (array_key_exists('width', $def)) $grid['width'] = $def['width']; return $grid; } function build_mask($module, $page, $mask) { if (array_key_exists('edit', $mask) && check_edit($module, $page)) { JavaScript::instance()->add('Hallinta.canEdit = true;'); Actions::instance()->addLink(new Link(array('id' => 'btn_edit', 'icon' => Hallinta::instance()->urlbase().'images/icons/edit.png', 'title' => 'Edit dialog', 'function' => 'Hallinta.openEditDialog'))); } if (array_key_exists('list', $mask)) { $grid = array('
', '
'); if (array_key_exists('second', $mask)) { foreach ($mask['second'] as $sname => $second) { if (!array_key_exists('title', $second)) throw new Exception('No title for secondary grid'); JavaScript::instance()->add(sprintf("Hallinta.openSecondaryGrid_%s = function(e) { Hallinta.openSecondaryGrid(e, '%s'); } ", $sname, $sname)); Actions::instance()->addLink(new Link(array('id' => 'btn_' . $sname, 'icon' => Hallinta::instance()->urlbase().'images/icons/liste.gif', 'title' => 'Open ' . $second['title'], 'function' => sprintf("Hallinta.openSecondaryGrid_%s", $sname)))); } } } else $grid = array(); $title = $mask['title']; if (array_key_exists('subtitle', $mask)) $title .= ' – ' . $mask['subtitle']; Hallinta::instance()->setTitle($title); $head = array(); if (array_key_exists('html', $mask) && !array_key_exists('edit', $mask)) return array_merge($head, array($mask['html']), array('
')); if (empty($details)) return array_merge($head, array('
'), $grid, array('
')); } function mask($module, $page) { global $mask; $ret = array(); $styles = Styles::instance(); $styles->file('lib/rico3/ricoClient/css/rico.css'); $styles->file('lib/rico3/ricoClient/css/rico_icon.css'); $styles->file('lib/rico3/ricoClient/css/striping_cupertino.css'); $styles->file('lib/rico3/ui-cupertino/jquery-ui.css'); $styles->file('lib/rico3/ui-cupertino/jquery-ui_hallinta.css'); $javascript = JavaScript::instance(); $javascript->file('lib/rico3/ricoClient/js/rico2jqu.js'); $javascript->file('lib/rico3/minsrc/rico.js'); $javascript->file('lib/rico3/minsrc/ricoGridCommon.js'); $javascript->file('lib/rico3/minsrc/ricoLiveGrid.js'); $javascript->file('lib/rico3/minsrc/ricoLiveGridForms.js'); $javascript->file('lib/rico3/minsrc/ricoLiveGridAjax.js'); $javascript->file('lib/rico3/minsrc/ricoLiveGridMenu.js'); $javascript->file('lib/rico3/minsrc/ricoLiveGridControls.js'); $javascript->file('lib/rico3/minsrc/ricoLocale_en.js'); $javascript->file('lib/rico3/minsrc/ricoUI.js'); $javascript->file('lib/rico3/ricoClient/js/ricoThemeroller.js'); $javascript->file('lib/rico3/minsrc/ricoCalendar.js'); $javascript->onLoad('page_init();'); if (load_mask($module, $page) === false) return; if (array_key_exists('table',$mask) || array_key_exists('html',$mask)) $ret = build_mask($module, $page, $mask); $javascript->add(sprintf('Hallinta.pageSource = "%s__%s";', $module, $page)); $javascript->add(sprintf('Hallinta.isMobile = %s;', Hallinta::instance()->isMobile()?'true':'false')); return implode("\n", $ret); }