summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--it_db.class250
-rw-r--r--it_db_record.class520
-rw-r--r--it_db_table.class328
-rw-r--r--itools.lib3
4 files changed, 0 insertions, 1101 deletions
diff --git a/it_db.class b/it_db.class
deleted file mode 100644
index 781432c..0000000
--- a/it_db.class
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-/*
-** $Id$
-**
-** ITools - the Internet Tools Library
-**
-** Copyright (C) 1995-2003 by the ITools Authors.
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of either the GNU General Public License
-** or the GNU Lesser General Public License, as published by the Free
-** Software Foundation. See http://www.gnu.org/licenses/ for details.
-**
-** it_db.class - Generic Database class, currently using mysql.
-**
-** This tries to be as efficient as possible by maintaining
-** persistent database connections.
-*/
-
-
-/**
- * Functions to handle SQL databases
- * @see it_db_table, it_db_record
- */
-class it_db
-{
- /* public */
- var $host; /* Database host */
- var $host_update=''; /* Optional database host for updates */
- var $name; /* Name of database */
- var $numtables; /* Number of tables in databasee or 0 if not known */
- var $tablenames = array(); /* Array(0..$numtables) of table names */
-
- /* private */
- var $link; /* MySQL Link Identifier */
- var $username; /* MySQL username (if $updatehost) */
- var $password; /* MySQL password (if $updatehost) */
-
-/**
- * Constructor: connect to MySQL server and select database
- * @param $databasename name of the database to select or empty for default
- * @param $username username to connect with
- * @param $password password to connect with
- * @param $host Optional name of the host to connect to
- * @param $host_update Optional name of the host for updates (writes)
- */
-function it_db($databasename, $username, $password, $host='localhost', $host_update='')
-{
- if (empty($databasename))
- $databasename = strtr(ereg_replace('^www.', '', strtolower(ereg_replace(':.*$', '', getenv('HTTP_HOST')))), '.', '_');
-
- if ($this->link = @mysql_connect($host, $username, $password, true))
- {
- if (mysql_select_db($databasename, $this->link))
- {
- $this->host = $host;
- $this->name = $databasename;
- }
- else
- it::fatal("Can't select database \"$databasename\" on host \"$host\".");
- }
- else
- it::fatal("Can't connect to database server \"$host\" as user \"$username\".");
-
- if ($host_update)
- {
- $this->host_update = $host_update;
- $this->username = $username;
- $this->password = $password;
- }
-}
-
-
-/**
- * Perform an SQL query.
- * @see ::safe_sql_query, mysql_query
- * @param $sql SQL query
- * @return SQL handle or false in case of failure
- */
-function sql_query($sql)
-{
- debug("it_db::sql_query($sql) on {$this->host}", 5);
-
- /*
- ** If we have a special update host, and an update operation is to be
- ** performed, we switch to this host. And we stay forever and ever and ever...
- */
- if ($this->host_update && eregi('^(UPDATE|INSERT|REPLACE|DELETE|ALTER) ', $sql))
- {
- /*debug('it_db::sql_query(): switching to update host "'.$this->host_update.'"', 3); */
- if ($this->link = @mysql_connect($this->host_update, $this->username, $this->password, true))
- {
- if (mysql_select_db($this->name, $this->link))
- $this->host = $this->host_update;
- else
- it::fatal('Error selecting update database "'.$this->name.'" on host "'.$this->host_update.'".');
-
- $this->host_update='';
- }
- else
- it::fatal('Error connecting to update database server "'.$this->host_update.'" as user "'.$this->username.'".');
- }
-
- return mysql_query($sql, $this->link);
-}
-
-
-/**
- * Perform an SQL query. If the query fails, issue an error message
- * and terminate program execution. No matching rows does not mean failure.
- * @see ::sql_query, mysql_query
- * @param $sql SQL query
- * @return SQL handle
- */
-function safe_sql_query($sql)
-{
- /* debug("it_db::safe_sql_query($sql)", 4); */
- if ($result = $this->sql_query($sql))
- return $result;
- else
- {
- if ($this->errno() == 1062) /* Duplicate entry */
- return 0;
-
- fail('SQL-Query db "'.$this->name.'" host "'.$this->host."\" failed: \"$sql\":<br>".$this->error().' ('.$this->errno().')');
- }
-}
-
-
-/**
- * Free resources used by SQL handle
- * @see mysql_free_result
- * @param $handle SQL handle
- * @return
- */
-function free($handle)
-{
- return mysql_free_result($handle);
-}
-
-
-/**
- * Fetch a row as an array
- * @see mysql_fetch_array
- * @param $handle SQL handle
- * @return numeric & associative array with contents of table row
- */
-function fetch_array($handle)
-{
- return mysql_fetch_array($handle);
-}
-
-
-/**
- * Fetch a row as an associative array
- * @see mysql_fetch_array
- * @param $handle SQL handle
- * @return associative array with contents of table row
- */
-function fetch_assoc($handle)
-{
- return mysql_fetch_assoc($handle);
-}
-
-
-/**
- * Return number of rows of a query
- * @see mysql_num_rows
- * @param $handle SQL handle
- * @return number of rows the query returned
- */
-function num_rows($handle)
-{
- return mysql_num_rows($handle);
-}
-
-
-/**
- * Return number of found rows of a limited query that had SQL_COUNT_FOUND_ROWS set
- * @return number of rows the query would have returned without LIMIT
- */
-function found_rows()
-{
- list($count) = mysql_fetch_row($this->safe_sql_query('SELECT FOUND_ROWS()'));
- return intval($count);
-}
-
-
-/* Internal: get information about tables */
-function _get_table_info()
-{
- if ($this->numtables > 0) /* Already done! */
- return;
-
- if(($tables = mysql_list_tables($this->name,$this->link)) >= 0)
- {
- $this->numtables = mysql_numrows($tables);
- for ($i=0; $i < $this->numtables; ++$i)
- {
- $name = mysql_tablename($tables, $i);
- $this->tablenames[$i] = $name;
- }
- }
- else it::fatal("mysql_list_tables($this->name,$this->link) failed.");
-}
-
-
-/**
- * Return a list of all table names of this database
- * @return array with tablenames of this Database
- */
-function table_names()
-{
- $this->_get_table_info();
- return $this->tablenames;
-}
-
-
-/**
- * Return number of tables in this database
- */
-function num_tables()
-{
- $this->_get_table_info();
- return $this->numtables;
-}
-
-
-/**
- * Return last error number
- * @see ::sql_query, ::safe_sql_query, mysql_errno
- * @return last mySQL error number
- */
-function errno()
-{
- return mysql_errno($this->link);
-}
-
-
-/**
- * Return last error string
- * @see ::sql_query, ::safe_sql_query, mysql_error
- * @return last mySQL error message
- */
-function error()
-{
- return mysql_error($this->link);
-}
-
-} /* End class it_db */
-?>
diff --git a/it_db_record.class b/it_db_record.class
deleted file mode 100644
index a716117..0000000
--- a/it_db_record.class
+++ /dev/null
@@ -1,520 +0,0 @@
-<?php
-/*
-** $Id$
-**
-** it_db_record.class - A database record based on it_db_table and it_db
-**
-** ITools - the Internet Tools Library
-**
-** Copyright (C) 1995-2003 by the ITools Authors.
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of either the GNU General Public License
-** or the GNU Lesser General Public License, as published by the Free
-** Software Foundation. See http://www.gnu.org/licenses/ for details.
-*/
-
-/**
- * Functions to handle MySQL records
- * @see it_db, it_db_table
- */
-class it_db_record
-{
- var $table; /* Table object */
- var $handle; /* SQL handle for select() / fetch_next() */
- var $keyfieldname; /* Name of primary key field */
- var $key; /* Key of loaded record or empty if no record is loaded */
- var $data = array(); /* Data fields */
-
-
-/**
- * Initialize internal data (table object and name of key field)
- * @param $table Underlying table object (class it_db_table)
- * @param $keyfieldname Optional name of primary key field, defaults to 'ID'
- */
-function it_db_record(&$table, $keyfieldname='ID')
-{
- $this->table = &$table;
- $this->keyfieldname = $keyfieldname;
-}
-
-
-/**
- * Change active key field
- * @param $keyfieldname Optional name of primary key field, defaults to 'ID'
- */
-function set_key_field($keyfieldname='ID')
-{
- $this->keyfieldname = $keyfieldname;
- $this->key = isset($this->data[$keyfieldname]) ? $this->data[$keyfieldname] : '';
-}
-
-
-/**
- * Select a set of records of this table according to an array of selection
- * and sorting criteria.
- * Use fetch_next() to iterate through the result set<br>
- * Example:<br>
- * $record->select(array('Type' => 'bar', 'Date >=' => '1999-01-01',
- * '-Date <' => 'NOW()', 'User NI' => 'chris'), 'ORDER BY Date');
- *
- * @param $params optional array of fieldname => value tupels.
- * These are ANDed to form a WHERE clause.
- * fieldname can contain an operator (separated by space), the
- * default operator is '='. The special operator 'NI' specifies
- * that the argument must be contained in a comma-separated list.
- *
- * @param $sql Optional SQL addendum added after $params (ORDER BY etc.)
- * @param $fields Optional field list to select (defaults to '*')
- * @return Number of rows that matched this query
- * @see it_db_record::fetch_next, it_db_table::construct_sql_clause
- *
- */
-function select($params='', $sql='', $fields='*')
-{
- $this->handle = $this->table->safe_sql_select($this->table->construct_sql_clause($params, $sql), $fields);
- return $this->table->db->num_rows($this->handle);
-}
-
-
-/**
- * Post-process data after reading a record.
- * This is a stub-function that can be overloaded.
- */
-function _read_post_process()
-{
-}
-
-
-/**
- * Pre-process data before writing a record.
- * This is a stub-function that can be overloaded.
- * @param $tags Reference to update/create tags, can be modified as needed
- */
-function _write_pre_process(&$tags)
-{
-}
-
-
-/**
- * Fetch the next record of a select() query
- * @return true if a record was successfully fetched, false otherwise
- * @see it_db_record::select
- */
-function fetch_next()
-{
- return $this->fetch($this->handle);
-}
-
-
-/**
- * Fetch the next record from an SQL result into this object.
- * If no more records are pending, clear the object's data.
- * @param $sqlresult Result of table::sql_select() or similar
- * @return 1 if a record was successfully fetched, 0 otherwise
- */
-function fetch(&$sqlresult)
-{
- $result = 0;
-
- if ($this->data = $this->table->db->fetch_assoc($sqlresult))
- {
- $this->key = $this->data[$this->keyfieldname];
- $result = 1;
- }
- else
- {
- $this->key = ""; /* "No record is loaded" */
- $this->data = array(); /* Clear local record data */
- }
-
- $this->_read_post_process();
-
- return $result;
-}
-
-
-/**
- * Read a record from table
- * @param $key key field value of the desired row
- * @return 1 on success, 0 otherwise
- */
-function read($key)
-{
- $result = 0;
-
- if ($key != "")
- {
- $result = $this->fetch($this->table->safe_sql_select("WHERE $this->keyfieldname='" . mysql_real_escape_string($key) . "'"));
- }
- else
- {
- $this->key = ""; /* "No record is loaded" */
- $this->data = array(); /* Clear local record data */
- }
-
- $this->_read_post_process();
-
- return $result;
-}
-
-
-/**
- * Create a new record in the table
- * @see it_db_record::record_create, it_db_record::safe_create
- * @param $tags array of Fieldname/Value pairs
- * @param $replace use REPLACE (1) instead of INSERT (otherwise)
- * @return MySQL result (0 means failure)
- */
-function create($tags, $replace=0)
-{
- /* Pre-processing, $tags is passed by reference and may be modified here */
- $this->_write_pre_process($tags);
-
- $sql = $replace ? "REPLACE" : "INSERT";
- $sql .= " INTO " . $this->table->name . " (";
- $sql2 = '';
-
- unset($this->data);
- for ($sep=""; $ti = each($tags); $sep=",")
- {
- /* If the field name starts with '-', the value is taken as raw, no escaping
- is done and no quotes are put around it. */
- if (substr($ti[0], 0, 1) == '-')
- {
- $ti[0] = substr($ti[0], 1); /* Strip that '-' sign */
- $val = $ti[1];
- }
- else
- $val = isset($ti[1]) ? "'".mysql_real_escape_string($ti[1])."'" : 'NULL';
-
- $this->data[$ti[0]] = $ti[1]; /* Store data for later use */
-
- $sql .= $sep . $ti[0];
- $sql2 .= "$sep$val";
- }
-
- $sql .= ") VALUES ($sql2)";
-
- if ($result = $this->table->db->sql_query($sql))
- {
- /* If the key element was not given, it means it's an AUTO_INCREMENT thingy. */
- if (($this->key = $this->data[$this->keyfieldname]) == "")
- {
- $result = $this->table->db->safe_sql_query("SELECT LAST_INSERT_ID()");
- $this->key = mysql_result($result, 0, 0);
- }
-
- /* We need all fields from record, not only those we initialised */
- $this->read($this->key);
- }
-
- return $result;
-}
-
-
-/**
- * Safe version of create (doesn't return in case of failure)
- * @see it_db_record::create, it_db_record::record_create
- * @param $tags array of Fieldname/Value pairs
- * @param $replace use REPLACE (1) instead of INSERT (otherwise)
- * @return MySQL result (0 means failure)
- */
-function safe_create($tags, $replace=0)
-{
- if ($result = $this->create($tags, $replace))
- return $result;
- else
- fail("it_db_record::safe_create() failed: " . $this->table->db->error());
-}
-
-
-/**
- * Update a record in the table
- * @param $tags array of Fieldname/Value pairs
- * @return MySQL result (0 means failure)
- */
-function update($tags)
-{
- /* Pre-processing, $tags is passed by reference and may be modified here */
- $this->_write_pre_process($tags);
-
- if ($this->key == "")
- it::fatal("it_db_record::update(): can't update undefined record");
-
- /* If we have nothing to do, return instead of performing an invalid SQL query */
- if (!count($tags))
- return true;
-
- $sql = "UPDATE " . $this->table->name . " SET ";
-
- for ($sep="", $raw=0; $ti = each($tags); $sep=",")
- {
- /* If the field name starts with '-', the value is taken as raw, no escaping
- is done and no quotes are put around it. */
- if (substr($ti[0], 0, 1) == '-')
- {
- $ti[0] = substr($ti[0], 1); /* Strip that '-' sign */
- $val = $ti[1];
- $raw++;
- }
- else
- $val = "'".mysql_real_escape_string($ti[1])."'";
-
- $sql .= $sep.$ti[0].'='.$val;
-
- if ($ti[0] == $this->key)
- {
- if ($this->data[$this->keyfieldname] != $ti[0])
- it::fatal("$sql: trying to change key from $this->key.");
- }
-
- $this->data[$ti[0]] = $ti[1];
- }
-
- $sql .= " WHERE " . $this->keyfieldname . "='" . mysql_real_escape_string($this->key) . "'";
-
- /* debug("it_db_record::update(): $sql"); */
- $ret = $this->table->db->safe_sql_query($sql);
-
- /* Only re-read record if necessary (for performance), but always do post-processing. */
- if ($raw)
- $this->read($this->key);
- else
- $this->_read_post_process();
-
- return $ret;
-}
-
-
-/**
- * Delete the current record from the database
- * @param $key keyfield value of the record to be deleted. If this is missing, the current record is deleted.
- * @return MySQL result (0 means failure)
- */
-function delete($key="")
-{
- if (!$key) $key = $this->key;
-
- if (($this->table->name == "") || ($this->keyfieldname == "") || ($key == ""))
- it::fatal("it_db_record::delete(): no record\n");
-
- $sql = "DELETE FROM " . $this->table->name . " WHERE ". $this->keyfieldname . "='" . mysql_real_escape_string($key) . "'";
- if ($result = $this->table->db->sql_query($sql))
- {
- $this->key = "";
- $this->data = array();
- }
- return $result;
-}
-
-
-/**
- * Return a field of a record.
- * @param $field field name
- * @return field value. If the field does not exists, issue an
- * error message and terminate program execution.
- */
-function safe_get_field($field)
-{
- if ($field)
- {
- if (isset($this->data[$field]))
- return $this->data[$field];
- else it::fatal("it_db_record::safe_get_field(): field \"$field\" not present in record.");
- }
- else it::fatal("it_db_record::safe_get_field(): empty field name");
-}
-
-
-/**
- * Output all fields of a record in (ugly) html format
- */
-function dump_html()
-{
- echo "<br>Dump of table " . $this->table->name . ", record " . $this->keyfieldname . " = \"" . $this->key . "\":<br><pre>\n";
- reset($this->data); next($this->data);
- while(list($key, $value) = each($this->data))
- {
- if ($key > 0) continue; /* $$$ ugly */
- echo $key . " = \"" . htmlspecialchars($value) . "\"\n";
- }
- echo "</pre><br>\n";
-}
-
-
-/**
- * Edit a record of a table. Create a new record if necessary.<br>
- * Example:<br>
- * $record->edit($id, array('ID' => $id));
- *
- * @param $key key value of the row to edit
- * @param $fixfields Array of fields not editable (with fixed values)
- * @return 1=changed, 2=created, -1=deleted, 0=nothing changed
- */
-function edit($key, $fixfields = array())
-{
- $returnresult = 0;
- $numfields = $this->table->num_fields();
-
- if ($_REQUEST['_COMMAND'])
- {
- /*
- ** If the key field is changed, $key will carry a wrong value, so we
- ** take the correct one from $_RECORD_KEY_VALUE
- */
- $key = $_REQUEST['_RECORD_KEY_VALUE'];
-
- switch($_REQUEST['_COMMAND'])
- {
- case "EDIT":
- $this->read($key);
- $newdata = array();
- $changes = 0;
- for ($i=0; $i < $numfields; ++$i)
- {
- $fieldname = $this->table->fieldnames[$i];
-
- /* Assumes field order is fixed */
- if (isset($fixfields[$fieldname]))
- $newvalue = $fixfields[$fieldname];
- else if (is_array($_REQUEST["_RECORD_$fieldname"]))
- $newvalue = join(',', $_REQUEST["_RECORD_$fieldname"]);
- else
- $newvalue = $_REQUEST["_RECORD_$fieldname"];
-
- if ($this->data[$fieldname] != $newvalue)
- {
- $newdata[$fieldname] = $newvalue;
- $changes = 1;
- }
- }
-
- if ($changes)
- {
- if ($this->update($newdata))
- {
- echo "<b>Änderung erfolgreich durchgef&uuml;hrt.</b><br>\n";
- $returnresult = 1;
- }
- else
- fail("Update failed.");
- }
- else echo "<b>Keine Änderungen.</b><br>\n";
- break;
-
- case "CREATE":
- $newdata = array();
- for ($i=0; $i < $numfields; ++$i)
- {
- $fieldname = $this->table->fieldnames[$i];
-
- if (isset($fixfields[$fieldname]))
- $newvalue = $fixfields[$fieldname];
- else if (is_array($_REQUEST["_RECORD_$fieldname"]))
- $newvalue = join(',', $_REQUEST["_RECORD_$fieldname"]);
- else
- $newvalue = $_REQUEST["_RECORD_$fieldname"];
-
- $newdata[$fieldname] = $newvalue;
- }
-
- if ($this->create($newdata))
- {
- $key = $this->key;
- echo "<b>Datensatz erzeugt.</b><br>\n";
- $returnresult = 2;
- }
- else
- fail("Datensatz konnte nicht erzeugt werden.");
- break;
-
- case "DELETE":
- if ($this->delete($key))
- {
- echo "<b>Datensatz gelöscht.</b><br>\n";
- $returnresult = -1;
- }
- else
- fail("Datensatz konnte nicht gelöscht werden.");
- break;
-
- default:
- fail("Unknown _COMMAND \"{$_REQUEST['_COMMAND']}\"");
- /* NOT REACHED */
- }
- }
-
- if ($key != "")
- {
- $this->read($key);
- $cmd = "EDIT";
- $buttontext = "Änderungen übernehmen";
- }
- else
- {
- $cmd = "CREATE";
- $buttontext = "Datensatz erzeugen";
- }
-
- echo "<form action=\"\" method=\"post\"><input type=\"hidden\" name=\"_COMMAND\" value=\"$cmd\"><input type=\"hidden\" name=\"_RECORD_KEY_NAME\" value=\"$this->keyfieldname\"><input type=\"hidden\" name=\"_RECORD_KEY_VALUE\" value=\"$this->key\">\n";
- echo "<table border=1 cellspacing=0 cellpadding=4>\n";
- for ($i=0; $i < $numfields; ++$i)
- {
- $fieldname = $this->table->fieldnames[$i];
-
- /* Do not display fix fields */
- if (isset($fixfields[$fieldname]))
- continue;
-
- $fieldflags = $this->table->fieldflags[$i];
- $fieldlen = $this->table->fieldlengths[$i];
- $size = min($fieldlen, 65);
-
- if ($fieldname == $this->keyfieldname)
- echo "<tr><th align=right>$fieldname</th>";
- else
- echo "<tr><td align=right>$fieldname</td>";
-
- if (strstr($fieldflags, "blob"))
- {
- if (strlen($this->data["$fieldname"]) < 256)
- echo "<td><textarea name=\"_RECORD_$fieldname\" rows=4 cols=56 wrap=\"physical\">" . htmlspecialchars($this->data["$fieldname"]) . "</textarea></td></tr>\n";
- else
- echo "<td><textarea name=\"_RECORD_$fieldname\" rows=10 cols=75 wrap=\"physical\">" . htmlspecialchars($this->data["$fieldname"]) . "</textarea></td></tr>\n";
- }
- else if (strstr($fieldflags, "enum"))
- {
- $result = $this->table->db->safe_sql_query("SHOW columns FROM ". $this->table->name . " LIKE '$fieldname'");
- $options = split("'", mysql_result($result, 0, 1));
-
- $vals = explode(',', $this->data[$fieldname]);
-
- for ($j = 0; $j < count($vals); $j++)
- $values[$vals[$j]] = 1;
-
- if (strstr($options[0], 'set'))
- $attr = 'multiple';
- else
- $attr = 'set="1"';
-
- echo "<td><select name=\"_RECORD_${fieldname}[]\" $attr>";
- for ($j=1; $options[$j]; $j+=2)
- {
- $selected = $values[$options[$j]] ? " selected" : "";
- echo "<option$selected>", $options[$j], "</option>";
- }
- echo "</select></td></tr>\n";
- }
- else
- echo "<td><input type=\"text\" size=$size name=\"_RECORD_$fieldname\" maxlength=\"$fieldlen\" value=\"" . htmlspecialchars($this->data["$fieldname"]) . "\"></td></tr>\n";
- }
- echo "</table><br><input type=\"submit\" value=\"$buttontext\"></form>\n";
-
- if ($this->key != "")
- echo "<form action=\"\" method=\"post\"><input type=\"hidden\" name=\"_COMMAND\" value=\"DELETE\"><input type=\"hidden\" name=\"_RECORD_KEY_NAME\" value=\"$this->keyfieldname\"><input type=\"hidden\" name=\"_RECORD_KEY_VALUE\" value=\"$this->key\"><input type=\"submit\" value=\"Datensatz löschen\"></form>\n";
-
- return $returnresult;
-}
-
-} /* End class it_db_record */
-?>
diff --git a/it_db_table.class b/it_db_table.class
deleted file mode 100644
index 455cf2e..0000000
--- a/it_db_table.class
+++ /dev/null
@@ -1,328 +0,0 @@
-<?php
-/*
-** $Id$
-**
-** ITools - the Internet Tools Library
-**
-** Copyright (C) 1995-2003 by the ITools Authors.
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of either the GNU General Public License
-** or the GNU Lesser General Public License, as published by the Free
-** Software Foundation. See http://www.gnu.org/licenses/ for details.
-**
-** it_db_table.class - A database table based on it_db.class
-*/
-
-/**
- * Functions to handle SQL database tables
- * @see it_db, it_db_record
- */
-class it_db_table
-{
- var $db; /* Underlying Database */
- var $name; /* Tabellenname */
-
- var $numfields = 0; /* Number of fields in table or 0 if not known */
- var $fieldnames = array(); /* Array(0..$numfields) of field names */
- var $fieldtypes = array(); /* Array(0..$numfields) or (fieldnames) of field types */
- var $fieldlengths = array(); /* Array(0..$numfields) or (fieldnames) of field lengths */
- var $fieldflags = array(); /* Array(0..$numfields) or (fieldnames) of field flags */
-
-/**
- * Initialize object data
- * @param $db it_db object of the database to be used
- * @param $name name of the table to be used
- */
-function it_db_table(&$db, $name)
-{
- $this->db = &$db;
- $this->name = $name;
-}
-
-
-/**
- * Perform a safe SQL SELECT query on this table
- * @see it_db::safe_sql_query
- * @param $query additional query string, appended at the end of the generated query
- * @param $fields comma seperated list of the columns to be returned
- */
-function safe_sql_select($query, $fields="*")
-{
- return $this->db->safe_sql_query("SELECT $fields FROM " . $this->name . " $query");
-}
-
-
-/**
- * Create an SQL query (the stuff after 'WHERE').
- * @see it_dbi::_where() for more details.
- * @param $sql Optional SQL addendum (added after $params), for ORDER BY etc.
- * @param $omit_where (optional) Do not add 'WHERE ' at beginning of result (default: false)
- */
-function construct_sql_clause($params='', $sql='', $omit_where=false)
-{
- return trim(it_dbi::_where($params, null, $omit_where) . " $sql");
-}
-
-
-/**
- * Return the count of rows on this table with optional WHERE clause
- * @param $where Optional WHERE clause to narrow the set of rows to count
- * @return Number of rows matching the WHERE clause
- */
-function count($where='')
-{
- $result = $this->safe_sql_select($where, 'COUNT(*)');
- $row = $this->db->fetch_assoc($result);
- return $row['COUNT(*)'];
-}
-
-
-/* Internal: get information about fields */
-function _get_field_info()
-{
- if ($this->numfields > 0) /* Already done! */
- return;
-
- if(($fields = mysql_list_fields($this->db->name, $this->name, $this->db->link)) >= 0)
- {
- $this->numfields = mysql_num_fields($fields);
- for ($i=0; $i < $this->numfields; ++$i)
- {
- $name = mysql_field_name($fields, $i);
- $this->fieldnames[$i] = $name;
- $this->fieldtypes[$i] = $this->fieldtypes[$name] = mysql_field_type($fields, $i);
- $this->fieldlengths[$i] = $this->fieldlengths[$name] = mysql_field_len($fields, $i);
- $this->fieldflags[$i] = $this->fieldflags[$name] = mysql_field_flags($fields, $i);
- /* debug("name='" . $this->fieldnames[$i] . "', len=" . $this->fieldlengths[$i] . ", type='" . $this->fieldtypes[$i] . "', flags='" . $this->fieldflags[$i] . "'\n", 6); */
- }
- }
- else it::fatal("mysql_list_fields($this->db->name, $this->name, $this->db->link) failed.");
-}
-
-
-/**
- * Return a comma separated list of all field names of this table
- */
-function field_names()
-{
- $result = '';
- $this->_get_field_info();
- for ($i=0; $i < $this->numfields; ++$i)
- {
- if ($i > 0) $result .= ",";
- $result .= $this->fieldnames[$i];
- }
- return $result;
-}
-
-
-/**
- * Return the length of a field
- * @param $fieldname Name of the field
- */
-function get_field_length($name)
-{
- $this->_get_field_info();
- return $this->fieldlengths[$name];
-}
-
-
-/**
- * Return number of fields of a record of this table
- */
-function num_fields()
-{
- $this->_get_field_info();
- return $this->numfields;
-}
-
-
-/**
- * Variable name used to propagate sort criteria
- */
-function get_sort_variable_name()
-{
- return "Sort" . md5($this->db->name . $this->name);
-}
-
-
-/**
- * Print an SQL table as an HTML table. Supports user-sorting by column,
- * limited WHERE clause, lists of fields to display and header texts, and
- * a list of links for each field.
- * @param $tableargs format string for the table or "" for default
- * @param $sqlwhere SQL WHERE clause to restrict elements
- * @param $c_fields comma seperated list of the fields to print
- * @param $c_descriptions comma seperated list of the header labels to print
- * @param $c_links dito with links to the respective elements
- * @param $default_order default sort order: "fieldname" or "fieldname DESC"
- * @param $rows_limit limit and position: "10" or "20,5"
- */
-function dump_html($tableargs="", $sqlwhere="", $c_fields="", $c_descriptions="", $c_links="", $default_order="", $rows_limit="", $thispage="", $strip_tags=0)
-{
- /* Unique identifier of this table */
- $table_sort = $this->get_sort_variable_name();
-
- /* Default HTML table */
- if ($tableargs=="")
- $tableargs="border=1 cellspacing=0 cellpadding=5";
-
- /* Default field list: show them all */
- if ($c_fields == "")
- $c_fields = $this->field_names();
-
- /* Default list title: Field names */
- if ($c_descriptions == "")
- $c_descriptions = $c_fields;
-
- $fields = split(",", $c_fields);
- $descriptions = split(",", $c_descriptions);
- $links = split(",", $c_links);
- $numfields = count($fields);
-
- /* Default sort criterium: Ascending sort by first column */
- if ($default_order == "")
- $default_order = $fields[0];
-
- if (!in_array(it::replace(array(' DESC$' => ""), $_REQUEST[$table_sort]), $fields))
- $_REQUEST[$table_sort] = $default_order;
-
- $sql = "SELECT $c_fields FROM $this->name";
-
- if ($sqlwhere)
- $sql .= " WHERE $sqlwhere";
-
- $sql .= " ORDER BY $_REQUEST[$table_sort]";
-
- if ($rows_limit != "")
- $sql .= " LIMIT $rows_limit";
-
- $result = $this->db->safe_sql_query($sql);
-
- if ($this->db->num_rows($result) == 0)
- {
- if (is_object($GLOBALS['it_text']))
- echo T("db_NoObjectsFound"). "<br>\n";
- return;
- }
-
- echo "<table $tableargs>\n";
-
- /* Wenn man keine Titelzeile will, für c_descriptions einfach "," angeben */
- if ($descriptions[0])
- {
- echo '<tr>';
- for ($i=0; $i < $numfields; ++$i)
- {
- if ($_REQUEST[$table_sort] == $fields[$i])
- {
- $newsort = "$_REQUEST[$table_sort] DESC";
- $sortimg = '<img src="/icons/down.gif" border="0" width="10" height="11" alt="">';
- }
- else if ($_REQUEST[$table_sort] == "$fields[$i] DESC")
- {
- $newsort = $fields[$i];
- $sortimg = '<img src="/icons/up.gif" border="0" width="10" height="11" alt="">';
- }
- else
- {
- $newsort = $fields[$i];
- $sortimg = '';
- }
-
- echo "<th align=\"left\">\n";
- echo "<table border=\"0\">\n<tr valign=\"middle\">\n";
- echo '<td><a href="'. it_html::U($thispage, array($table_sort => $newsort) + $_GET) .'">'. $descriptions[$i] .'</a></td>';
- echo '<td><a href="'. it_html::U($thispage, array($table_sort => $newsort) + $_GET) .'">'. $sortimg .'</a></td>';
- echo "</tr>\n</table>\n";
- echo "</th>\n";
- }
- echo "</tr>\n";
- }
-
- while ($f = $this->db->fetch_array($result))
- {
- echo "<tr>";
- for ($i=0; $i<$numfields; ++$i)
- {
- $fieldspec = $f[$fields[$i]];
- if (!$fieldspec) $fieldspec = "&nbsp; ";
- if ($fieldspec == "0.00") $fieldspec = "-";
- /*if (strlen($fieldspec) > 80) $fieldspec = substr($fieldspec, 0, 80) . "..."; */
-
- if (isset($links[$i]))
- {
- if (strstr($links[$i], "?")) $ch = "&"; else $ch = "?";
- $anchor="<a href=\"" . $links[$i] . $ch . $fields[$i] . "=" . urlencode($f[$fields[$i]]) . "\">";
- $anchor2="</a>";
- }
- else
- $anchor = $anchor2 = "";
-
- if ($strip_tags)
- $fieldspec = strip_tags($fieldspec);
- echo "<td>$anchor" . $fieldspec . "$anchor2</td>";
- }
- echo "</tr>\n";
- }
- echo "</table>\n";
-}
-
-
-/**
- * Make a 'select form field' ("Select-Form-Feld") from a table and pre-select an entry
- * @param $name Name of FORM object to generate
- * @param $selected Selected record
- * @param $globaloption Option to add as first value, syntax: key,text
- * @param $optionfield Table field to use for option keys
- * @param $descriptionfield Table field to display
- * @param $query SQL Query after "FROM ...", defaults to "ORDER BY $descriptionfield"
- */
-function make_select($name, $selected, $globaloption, $optionfield, $descriptionfield, $query="")
-{
- $globalopt = split(",", $globaloption);
-
- if (empty($query))
- $query = "ORDER BY $descriptionfield";
- $query = "SELECT * FROM $this->name $query";
-
- echo "<select name=\"$name\">";
-
- if ($globaloption != "")
- echo "<option value=\"", $globalopt[0], "\">", $globalopt[1], "</option>";
-
- $result = $this->db->safe_sql_query($query);
-
- while ($row = $this->db->fetch_array($result))
- {
- $tag = ($row[$optionfield] == $selected) ? " selected" : "";
- echo "<option value=\"", $row[$optionfield], "\"$tag>", $row[$descriptionfield], "</option>";
- }
- echo "</select>\n";
-}
-
-
-/**
- * Drops the current table from the database
- * @return MySQL result (0 means failure)
- */
-function drop()
-{
- if ($this->name == '')
- it::fatal("it_db_table::drop(): no table\n");
-
- if ($result = $this->db->sql_query('DROP TABLE IF EXISTS '.$this->name))
- {
- $this->name = '';
- $numfields = 0;
- $fieldnames = array();
- $fieldtypes = array();
- $fieldlengths = array();
- $fieldflags = array();
- }
-
- return $result;
-}
-
-} /* End class it_db_table */
-?>
diff --git a/itools.lib b/itools.lib
index af13b08..da3f0f5 100644
--- a/itools.lib
+++ b/itools.lib
@@ -21,9 +21,6 @@
require_once 'itools/auto_prepend.php';
require_once 'itools/it.class';
require_once 'itools/it_browser.class';
-require_once 'itools/it_db.class';
-require_once 'itools/it_db_record.class';
-require_once 'itools/it_db_table.class';
require_once 'itools/it_dbi.class';
require_once 'itools/it_debug.class';
require_once 'itools/it_html.class';