listDef = $liste; $this->module = $module; //* Fill datasources foreach($this->listDef['item'] as $key => $field) { if(is_array($field['datasource'])) { $this->listDef['item'][$key]['value'] = $this->getDatasourceData($field); } } return true; } /** * Get the key => value array of a form filed from a datasource definitiom * * @param field = array with field definition * @param record = Dataset as array * @return key => value array for the value field of a form */ public function getDatasourceData($field) { global $app; $values = array(); if($field['datasource']['type'] == 'SQL') { //* Preparing SQL string. We will replace some common placeholders $querystring = $field['datasource']['querystring']; $querystring = str_replace('{USERID}', $_SESSION['s']['user']['userid'], $querystring); $querystring = str_replace('{GROUPID}', $_SESSION['s']['user']['default_group'], $querystring); $querystring = str_replace('{GROUPS}', $_SESSION['s']['user']['groups'], $querystring); $table_idx = $this->formDef['db_table_idx']; //$querystring = str_replace('{RECORDID}',$record[$table_idx],$querystring); $app->uses('tform'); $querystring = str_replace('{AUTHSQL}', $app->tform->getAuthSQL('r'), $querystring); //* Getting the records $tmp_records = $app->db->queryAllRecords($querystring); if($app->db->errorMessage != ''){ die($app->db->errorMessage); } if(is_array($tmp_records)) { $key_field = $field['datasource']['keyfield']; $value_field = $field['datasource']['valuefield']; foreach($tmp_records as $tmp_rec) { $values[$tmp_rec[$key_field]] = $tmp_rec[$value_field]; } } } if($field['datasource']['type'] == 'CUSTOM') { //* Calls a custom class to validate this record if($field['datasource']['class'] != '' and $field['datasource']['function'] != '') { $datasource_class = $field['datasource']['class']; $datasource_function = $field['datasource']['function']; $app->uses($datasource_class); $record = array(); $values = $app->$datasource_class->$datasource_function($field, $record); }else{ $this->errorMessage .= "Custom datasource class or function is empty
\r\n"; } } return $values; } public function getSearchSQL($sql_where = '') { global $db; //* Config vars $list_name = $this->listDef['name']; $search_prefix = $this->listDef['search_prefix']; //* store retrieval query foreach($this->listDef['item'] as $i) { $field = $i['field']; //* TODO ? hat sich die suche ge�ndert - has itself search ? $ki = $search_prefix.$field; if(isset($_REQUEST) and $_REQUEST[$ki] != $_SESSION['search'][$list_name][$ki]){ $this->searchChanged = 1; } //* suchfield in session store. if(isset($_REQUEST[$ki])){ $_SESSION['search'][$list_name][$ki] = $_REQUEST[$ki]; } if($i['formtype'] == 'SELECT'){ if(is_array($i['value'])) { $out = ''; foreach($i['value'] as $k => $v) { $selected = ($k == $_SESSION['search'][$list_name][$ki] && $_SESSION['search'][$list_name][$ki] != '') ? ' SELECTED' : ''; $out .= "\r\n"; } } $this->searchValues[$ki] = $out; }else{ $this->searchValues[$ki] = $_SESSION['search'][$list_name][$ki]; } } //* store variables in object. $this->searchValues = $_SESSION["search"][$list_name]; foreach($this->listDef['item'] as $i) { $field = $i['field']; //if($_REQUEST[$search_prefix.$field] != '') $sql_where .= " $field ".$i["op"]." '".$i["prefix"].$_REQUEST[$search_prefix.$field].$i["suffix"]."' and"; if($_SESSION['search'][$list_name][$ki] != ''){ $sql_where .= " $field ".$i['op']." '".$i['prefix'].$_SESSION['search'][$list_name][$ki].$i['suffix']."' and"; } } return ($sql_where != '') ? substr($sql_where, 0, -3) : '1'; } public function getPagingSQL($sql_where = '1') { global $app, $conf; $list_name = $this->listDef['name']; $search_prefix = $this->listDef['search_prefix']; $records_per_page = $this->listDef['records_per_page']; $table = $this->listDef['table']; //* set page to seror id session not set if($_SESSION['search'][$list_name]['page'] == '') $_SESSION['search'][$list_name]['page'] = 0; //* Set page size to request if set if(isset($_REQUEST['page'])) $_SESSION['search'][$list_name]['page'] = $_REQUEST['page']; //* TODO PAGE to 0 set, if look for themselves ge?ndert. = page auf 0 setzen, wenn suche sich ge�ndert hat. if($this->searchChanged == 1) $_SESSION['search'][$list_name]['page'] = 0; $sql_von = $_SESSION['search'][$list_name]['page'] * $records_per_page; $record_count = $app->db->queryOneRecord("SELECT count(*) AS anzahl FROM $table WHERE $sql_where"); $pages = $app->functions->intval(($record_count['anzahl'] - 1) / $records_per_page); $vars['list_file'] = $this->listDef['file']; $vars['page'] = $_SESSION['search'][$list_name]['page']; $vars['last_page'] = $_SESSION['search'][$list_name]['page'] - 1; $vars['next_page'] = $_SESSION['search'][$list_name]['page'] + 1; $vars['pages'] = $pages; $vars['max_pages'] = $pages + 1; $vars['records_gesamt'] = $record_count['anzahl']; $vars['page_params'] = $this->listDef['page_params']; if($_SESSION['search'][$list_name]['page'] > 0) $vars['show_page_back'] = 1; if($_SESSION['search'][$list_name]['page'] <= $vars['pages'] - 1) $vars['show_page_next'] = 1; $this->pagingValues = $vars; $this->pagingHTML = $this->getPagingHTML($vars); return "LIMIT $sql_von, $records_per_page"; } public function getPagingHTML($vars) { global $app; $page_params = $vars['page_params']; $list_file = $vars['list_file']; $content = '   '; if($vars['show_page_back'] == 1){ $content .= ' '; } $content .= ' '.$app->lng('Page').' '.$vars['next_page'].' '.$app->lng('of').' '.$vars['max_pages'].' '; if($vars['show_page_next'] == 1){ $content .= '   '; } else{ $content .= ' '; } $content .= ' '; return $content; } public function getPagingHTMLasTXT($vars) { global $app; $page_params = $vars['page_params']; $list_file = $vars['list_file']; $content = '[|<< ]'; if($vars['show_page_back'] == 1){ $content .= '[<< '.$app->lng('Back').'] '; } $content .= ' '.$app->lng('Page').' '.$vars['next_page'].' '.$app->lng('of').' '.$vars['max_pages'].' '; if($vars['show_page_next'] == 1){ $content .= '['.$app->lng('Next').' >>] '; } $content .= '[ >>|]'; return $content; } public function getSortSQL() { $sort_field = $this->listDef['sort_field']; $sort_direction = $this->listDef['sort_direction']; return ($sort_field != '' && $sort_direction != '') ? "ORDER BY $sort_field $sort_direction" : ''; } public function saveSearchSettings($searchresult_name) { global $app, $conf; $list_name = $this->listDef['name']; $settings = $_SESSION['search'][$list_name]; unset($settings['page']); $data = $app->db->quote(serialize($settings)); $userid = $_SESSION['s']['user']['userid']; $groupid = $_SESSION['s']['user']['default_group']; $sys_perm_user = 'riud'; $sys_perm_group = 'r'; $sys_perm_other = ''; $module = $_SESSION['s']['module']['name']; $searchform = $this->listDef['name']; $title = $searchresult_name; $sql = 'INSERT INTO `searchform` ( ' .'`sys_userid` , `sys_groupid` , `sys_perm_user` , `sys_perm_group` , `sys_perm_other` , `module` , `searchform` , `title` , `data` ' .')VALUES (' ."'$userid', '$groupid', '$sys_perm_user', '$sys_perm_group', '$sys_perm_other', '$module', '$searchform', '$title', '$data')"; $app->db->query($sql); } public function decode($record) { global $app; if(is_array($record)) { foreach($this->listDef['item'] as $field) { $key = $field['field']; switch ($field['datatype']) { case 'DATE': if($val > 0) { $record[$key] = date($this->dateformat, $record[$key]); } break; case 'INTEGER': $record[$key] = $app->functions->intval($record[$key]); break; case 'DOUBLE': $record[$key] = $record[$key]; break; case 'CURRENCY': $record[$key] = number_format($record[$key], 2, ',', ''); break; case 'VARCHAR': case 'TEXT': default: $record[$key] = stripslashes($record[$key]); break; } } } return $record; } public function encode($record) { global $app; if(is_array($record)) { foreach($this->listDef['item'] as $field) { $key = $field['field']; switch ($field['datatype']) { case 'VARCHAR': case 'TEXT': if(!is_array($record[$key])) { $record[$key] = $app->db->quote($record[$key]); } else { $record[$key] = implode($this->tableDef[$key]['separator'],$record[$key]); } break; case 'DATE': if($record[$key] > 0) { list($tag, $monat, $jahr) = explode('.', $record[$key]); $record[$key] = mktime(0, 0, 0, $monat, $tag, $jahr); } break; case 'INTEGER': $record[$key] = $app->functions->intval($record[$key]); break; case 'DOUBLE': $record[$key] = $app->db->quote($record[$key]); break; case 'CURRENCY': $record[$key] = str_replace(',', '.', $record[$key]); break; } } } return $record; } } ?>