tableDef = $table;
$this->table_name = $table_name;
$this->table_index = $table_index;
return true;
}
function loadFormDef($file) {
global $app, $conf;
include_once $file;
$this->formDef = $form;
return true;
}
/**
* Konvertiert die Daten des übergebenen assoziativen
* Arrays in "menschenlesbare" Form.
* Datentyp Konvertierung, z.B. für Ausgabe in Listen.
*
* @param record
* @return record
*/
function decode($record) {
global $app;
if(is_array($record)) {
foreach($record as $key => $val) {
switch ($this->tableDef[$key]['datatype']) {
case 'VARCHAR':
$new_record[$key] = stripslashes($val);
break;
case 'DATE':
if($val > 0) {
$new_record[$key] = date($this->dateformat, $val);
}
break;
case 'INTEGER':
$new_record[$key] = $app->functions->intval($val);
break;
case 'DOUBLE':
$new_record[$key] = $val;
break;
case 'CURRENCY':
$new_record[$key] = number_format($val, 2, ',', '');
break;
default:
$new_record[$key] = stripslashes($val);
}
}
}
return $new_record;
}
/**
* Record für Ausgabe in Formularen vorbereiten.
*
* @param record = Datensatz als Array
* @param action = NEW oder EDIT
* @return record
*/
function getHTML($record, $action = 'NEW') {
global $app;
if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
$new_record = array();
if($action == 'EDIT') {
$record = $this->decode($record);
if(is_array($record)) {
foreach($record as $key => $val) {
switch ($this->tableDef[$key]['formtype']) {
case 'SELECT':
if(is_array($this->tableDef[$key]['value'])) {
$out = '';
foreach($this->tableDef[$key]['value'] as $k => $v) {
$selected = ($k == $val)?' SELECTED':'';
$out .= "\r\n";
}
}
$new_record[$key] = $out;
break;
case 'MULTIPLE':
if(is_array($this->tableDef[$key]['value'])) {
// aufsplitten ergebnisse
$vals = explode($this->tableDef[$key]['separator'], $val);
// HTML schreiben
$out = '';
foreach($this->tableDef[$key]['value'] as $k => $v) {
$selected = '';
foreach($vals as $tvl) {
if(trim($tvl) == trim($k)) $selected = ' SELECTED';
}
$out .= "\r\n";
}
}
$new_record[$key] = $out;
break;
case 'PASSWORD':
$new_record[$key] = '';
break;
default:
$new_record[$key] = htmlspecialchars($val);
}
}
}
} else {
foreach($this->tableDef as $key => $val) {
switch ($this->tableDef[$key]['formtype']) {
case 'SELECT':
if(is_array($this->tableDef[$key]['value'])) {
$out = '';
foreach($this->tableDef[$key]['value'] as $k => $v) {
$selected = ($k == $val)?' SELECTED':'';
$out .= "\r\n";
}
}
$new_record[$key] = $out;
break;
case 'MULTIPLE':
if(is_array($this->tableDef[$key]['value'])) {
// aufsplitten ergebnisse
$vals = explode($this->tableDef[$key]['separator'], $val);
// HTML schreiben
$out = '';
foreach($this->tableDef[$key]['value'] as $k => $v) {
$out .= "\r\n";
}
}
$new_record[$key] = $out;
break;
case 'PASSWORD':
$new_record[$key] = '';
break;
default:
$new_record[$key] = htmlspecialchars($this->tableDef[$key]['value']);
}
}
}
if($this->debug == 1) $this->dbg($new_record);
return $new_record;
}
/**
* Record in "maschinen lesbares" Format überführen
* und Werte gegen reguläre Ausdrücke prüfen.
*
* @param record = Datensatz als Array
* @return record
*/
function encode($record) {
global $app;
$this->errorMessage = '';
if(is_array($record)) {
foreach($record as $key => $val) {
switch ($this->tableDef[$key]['datatype']) {
case 'VARCHAR':
if(!is_array($val)) {
$new_record[$key] = $app->db->quote($val);
} else {
$new_record[$key] = implode($this->tableDef[$key]['separator'], $val);
}
break;
case 'DATE':
if($val > 0) {
list($tag, $monat, $jahr) = explode('.', $val);
$new_record[$key] = mktime(0, 0, 0, $monat, $tag, $jahr);
}
break;
case 'INTEGER':
$new_record[$key] = $app->functions->intval($val);
break;
case 'DOUBLE':
$new_record[$key] = $app->db->quote($val);
break;
case 'CURRENCY':
$new_record[$key] = str_replace(",", ".", $val);
break;
}
if($this->tableDef[$key]['regex'] != '') {
// Enable that "." matches also newlines
$this->tableDef[$key]['regex'] .= 's';
if(!preg_match($this->tableDef[$key]['regex'], $val)) {
$this->errorMessage .= $this->tableDef[$key]['errmsg']."
\r\n";
}
}
}
}
return $new_record;
}
/**
* SQL Statement für Record erzeugen.
*
* @param record = Datensatz als Array
* @param action = INSERT oder UPDATE
* @param primary_id
* @return record
*/
function getSQL($record, $action = 'INSERT', $primary_id = 0, $sql_ext_where = '') {
global $app;
$record = $this->encode($record);
$sql_insert_key = '';
$sql_insert_val = '';
$sql_update = '';
if(!is_array($this->tableDef)) $app->error("Keine Tabellendefinition vorhanden.");
// gehe durch alle Felder des Records
if(is_array($record)) {
foreach($record as $key => $val) {
// Wenn es kein leeres Passwortfeld ist
if (!($this->tableDef[$key]['formtype'] == 'PASSWORD' and $val == '')) {
// gehe durch alle Felder der TableDef
foreach($this->tableDef as $tk => $tv) {
// Wenn Feld in TableDef enthalten ist
if($tk == $key) {
// Erzeuge Insert oder Update Quelltext
if($action == "INSERT") {
if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
$sql_insert_key .= "`$key`, ";
$sql_insert_val .= "md5('$val'), ";
//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
// $val = implode($this->tableDef[$key]['separator'],$val);
// $sql_insert_key .= "`$key`, ";
// $sql_insert_val .= "'$val', ";
} else {
$sql_insert_key .= "`$key`, ";
$sql_insert_val .= "'$val', ";
}
} else {
if($this->tableDef[$key]['formtype'] == 'PASSWORD') {
$sql_update .= "`$key` = md5('$val'), ";
//} elseif($this->tableDef[$key]['formtype'] == 'MULTIPLE') {
// $val = implode($this->tableDef[$key]['separator'],$val);
// $sql_update .= "`$key` = '$val', ";
} else {
$sql_update .= "`$key` = '$val', ";
}
}
}
}
}
}
}
// Füge Backticks nur bei unvollständigen Tabellennamen ein
if(stristr($this->table_name, '.')) {
$escape = '';
} else {
$escape = '`';
}
if($action == "INSERT") {
$sql_insert_key = substr($sql_insert_key, 0, -2);
$sql_insert_val = substr($sql_insert_val, 0, -2);
$sql = "INSERT INTO ".$escape.$this->table_name.$escape." ($sql_insert_key) VALUES ($sql_insert_val)";
} else {
if($primary_id != 0) {
$sql_update = substr($sql_update, 0, -2);
$sql = "UPDATE ".$escape.$this->table_name.$escape." SET ".$sql_update." WHERE ".$this->table_index ." = ".$primary_id;
if($sql_ext_where != '') $sql .= " and ".$sql_ext_where;
} else {
$app->error("Primary ID fehlt!");
}
}
return $sql;
}
/**
* Debugging arrays.
*
* @param array_data
*/
function dbg($array_data) {
echo "
"; print_r($array_data); echo ""; } function showForm() { global $app, $conf; if(!is_array($this->formDef)) die("Form Definition wurde nicht geladen."); if($this->errorMessage == '') { // wenn kein Fehler vorliegt if($_REQUEST["next_tab"] != '') { // wenn nächster Tab bekannt $active_tab = $_REQUEST["next_tab"]; } else { // ansonsten ersten tab nehmen $active_tab = $this->formDef["tabs"][0]["name"]; } } else { // bei Fehlern den gleichen Tab nochmal anzeigen $active_tab = $_SESSION["s"]["form"]["tab"]; } // definiere Tabs foreach( $this->formDef["tabs"] as $tab) { if($tab["name"] == $active_tab) { $app->tpl->setInclude('content_tpl', $tab["template"]); $tab["active"] = 1; $_SESSION["s"]["form"]["tab"] = $tab["name"]; } else { $tab["active"] = 0; } $frmTab[] = $tab; } // setze Loop $app->tpl->setLoop("formTab", $frmTab); // Formular action setzen $app->tpl->setVar('form_action', $this->formDef["action"]); } } ?>