quote(str_replace('__','|',$name))); $sth = $db->query($sql); if ($sth === false) return false; $row = $sth->fetch(); if ($row === false) return false; if ($row['edit'] == '0') return false; return true; } function build_form($name, $mask) { global $jscode; $ret = array(); $jscode[] = "var form_check = {};"; $ret[] = '
'; $toggle = ''; $close = ''; $edit_title = empty($mask['edit_title']) ? 'Datensatz bearbeiten' : $mask['edit_title']; $ret[] = sprintf('
%s%s%s
', $edit_title, $toggle, $close); $ret[] = '
'; $ret[] = ''; $ret[] = sprintf('', $name); foreach ($mask['edit'] as $id => $info) { if ($info['type'] == 'hidden') $ret[] = sprintf('', $id, $id, empty($info['default'])?'':$info['default']); elseif ($info['type'] == 'html') $ret[] = $info['code']; else { $ret[] = sprintf('
', $id, $id, $info['name']); $v = array('id="edit_'.$id.'"', 'name="'.$id.'"'); $checks = array(); if (isset($info['required']) && $info['required'] === true) { $checks[] = 'required'; $v[] = 'onblur="form_elem_onblur(event)"'; } if ($info['type'] == 'text' || $info['type'] == 'passwd' || $info['type'] == 'decimal' || $info['type'] == 'number') { $v[] = 'size="'.(empty($info['size'])?'10':$info['size']).'"'; $v[] = 'type="'.($info['type']=='passwd'?'password':'text').'"'; $v[] = 'value="'.(empty($info['default'])?'':$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('', $id, $id, $id); $checks[] = 'date'; } elseif ($info['type'] == 'boolean' || $info['type'] == 'file') { $v[] = 'type="'.($info['type']=='boolean'?'checkbox':'file').'"'; $ret[] = sprintf('', implode(' ', $v)); if ($info['type'] == 'file') $js_file = sprintf(" var finput = document.getElementById('edit_%s');\n" . " if (finput) finput.addEventListener('change', form_file_change, false);", $id); } 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"', empty($info['columns'])?33:$info['columns']); $v[] = sprintf('rows="%d"', empty($info['rows'])?5:$info['rows']); $ret[] = sprintf('', implode(' ', $v)); } if (array_key_exists('comment',$info)) $ret[] = sprintf('%s', $info['comment']); $ret[] = '
'; if (count($checks)) $jscode[] = sprintf('form_check["%s"] = "%s";', $id, implode(',', $checks)); } } $jscode[] = 'Rico.onLoad( function() {'; $jscode[] = " form_init();"; $jscode[] = "// ups?"; if (isset($js_file)) $jscode[] = $js_file; $jscode[] = '});'; $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"'); 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 $ret; } function build_grid($name, $mask, $gridname = false) { $jscode = array();; $ret = array(); if ($gridname == false) { $gridname = 'grid'; $opts = array("click: gridDrillDown"); } else { $name = $name . '__' . $gridname; $opts = array(); if (array_key_exists('onclick', $mask)) $opts[] = 'click: ' . $mask['onclick']; } $opts[] = "onscroll: gridOnScroll"; $opts[] = "menuEvent: 'contextmenu'"; $opts[] = "highlightElem: 'menuRow'"; if (array_key_exists('maxprint', $mask)) $opts[] = 'maxPrint: ' . $mask['maxprint']; else $opts[] = 'maxPrint: 100000'; if (array_key_exists('rows', $mask)) $opts[] = 'visibleRows: ' . $mask['rows']; if (array_key_exists('sort', $mask)) $opts[] = 'sortCol: ' . $mask['sort']; if (isset($mask['prefetch']) && $mask['prefetch'] === false) $opts[] = 'prefetchBuffer: false'; # $opts[] = 'frozenColumns: ' . count($mask['list']); $opts[] = 'saveColumnInfo: {width: true, filter: true, sort: true}'; $ret[] = sprintf('', $name); $ret[] = ' '; $specs = array(); $fields = array(); foreach ($mask['list'] as $field => $data) { $ret[] = sprintf(' ', $data['name']); $s = array(sprintf("FieldName: 'input_%s'", $field), sprintf("ColName: 'input_%s'", $data['name'])); $s = array(); if (isset($data['visible']) && $data['visible'] === false) $s[] = 'visible: false'; if (isset($data['width']) && $data['width'] > 0) $s[] = 'width: ' . $data['width']; if (array_key_exists('type', $data)) $s[] = "type: '" . $data['type'] . "'"; if (array_key_exists('specs', $data)) $s[] = $data['specs']; if (array_key_exists('control', $data)) $s[] = 'control: ' . $data['control']; $specs[] = '{' . implode(', ', $s) . '}'; if (array_key_exists('sql', $data)) $fields[] = $data['sql'] . ' AS ' . $field; else $fields[] = $field; } grid_sql($name, $mask); $ret[] = ' '; $ret[] = '
%s
'; $ret[] = '
'; $ret[] = sprintf('
Datensatz 0
', $name); if ($gridname == 'grid') $ret[] = '
'; $ret[] = '
'; $ret[] = '
'; $opts[] = 'columnSpecs: [' . implode(', ', $specs) . ']'; if (strstr($opts[count($opts)-1], 'filterUI') !== false) $opts[] = 'FilterLocation: -1'; $jscode[] = sprintf('var %s;', $gridname);; $jscode[] = 'Rico.onLoad( function() {'; $jscode[] = sprintf("var %s_opts = {\n %s\n};", $name, implode(",\n ", $opts)); $jscode[] = sprintf("%s = new Rico.LiveGrid ('grid_%s', new Rico.Buffer.AjaxSQL('ajax/ricoXMLquery.php'), %s_opts);", $gridname, $name, $name); $jscode[] = sprintf("%s.menu = new Rico.GridMenu();", $gridname); $jscode[] = sprintf("%s.edit = new Rico.TableEdit(%s);", $gridname, $gridname); if ($gridname == 'grid') { $jscode[] = sprintf("%s.menu.options.dataMenuHandlerOriginal = %s.menu.options.dataMenuHandler;", $gridname, $gridname); $jscode[] = sprintf("%s.menu.options.dataMenuHandler = grid_dataMenuHandler;", $gridname); } $jscode[] = '});'; return array($ret, $jscode); } function build_details($name, $details) { $ret = array(); $ret[] = '
'; $ret[] = sprintf('

%s

', $details['title']); if (array_key_exists('subtitle', $details)) $ret[] = sprintf('

%s

', $details['subtitle']); if (array_key_exists('html',$details)) { $ret[] = $details['html']; } elseif (array_key_exists('list',$details)) { $ret[] = ''; } $ret[] = '
'; return $ret; } function build_select($name, $details) { $ret = array(); $ret[] = '
'; $ret[] = sprintf('

%s

', $details['title']); $ret[] = sprintf ('', array_key_exists('onchange',$details)?sprintf(' onchange="%s"',$details['onchange']):''); if (is_array($details['options'])) $options = $details['options']; else $options = query_db($details['options']); if (array_key_exists('default',$details)) $ret[] = sprintf('', $details['default']); foreach ($options as $row) { $selected = array_key_exists('selected',$details) && $details['selected'] == $row['id'] ? true : false; $ret[] = sprintf('', $row['id'], $selected?' selected':'',$row['text']); } $ret[] = ''; $ret[] = '
'; return $ret; } function build_mask($name, $mask) { global $jscode; $jscode[] = 'Rico.writeDebugMsg = function(msg, resetFlag) {};'; if (array_key_exists('list', $mask)) { $jscode[] = "Rico.acceptLanguage('de-de,de;q=0.8,en;q=0.5,en-us;q=0.3');"; $jscode[] = "Rico.loadModule('Effect','Calendar','LiveGridForms','LiveGridAjax','LiveGridMenu');"; if (array_key_exists('second', $mask) && !array_key_exists('rows', $mask)) $mask['rows'] = "'parent'"; list($grid,$js) = build_grid($name, $mask); $grid = array_merge(array('
'), $grid, array('
')); if (array_key_exists('second', $mask)) { $mask['second']['prefetch'] = false; list($second,$secondjs) = build_grid($name, $mask['second'], 'second'); $jscode = array_merge($jscode, $secondjs); $grid[] = '
'; $close = ''; $title = array_key_exists('title', $mask['second']) ? $mask['second']['title'] : ''; $grid[] = sprintf('
%s%s
', $title, $close); $grid = array_merge($grid, array('
'), $second, array('
')); $grid[] = '
'; } $jscode = array_merge($jscode, $js); if ($mask['rows'] == "'parent'") $jscode[] = 'Rico.onLoad(function() {resize_grids()});'; } else $grid = array(); if (array_key_exists('details', $mask)) $details = build_details($name, $mask['details']); else $details = array(); if (array_key_exists('select', $mask)) $select = build_select($name, $mask['select']); else $select = array(); if (array_key_exists('edit', $mask) && check_edit($name)) $edit = build_form($name, $mask); else $edit = array(); $title = $mask['title']; if (array_key_exists('subtitle', $mask)) $title .= ' – ' . $mask['subtitle']; $head = array(); $head[] = sprintf('

%s

', $title); if (array_key_exists('html', $mask) && !array_key_exists('details', $mask) && !array_key_exists('select', $mask) && !array_key_exists('edit', $mask)) return array_merge($head, array($mask['html']), array('
')); if (empty($details) && empty($select) && empty($edit)) return array_merge($head, array('
'), $grid, array('
')); else return array_merge($head, array('
'), $grid, array('
','
'), $details, $select, $edit, array('
')); } function mask($name) { global $jsfiles; global $mask; $ret = array(); if (load_mask($name) === false) return; $jsfiles[] = 'lib/functions.js'; $jsfiles[] = 'lib/rico/rico.js'; if (array_key_exists('table',$mask)) $ret = build_mask($name, $mask); return sprintf('', $_GET['mask']) . implode("\n", $ret); } ?>