mirror of
https://github.com/postfixadmin/postfixadmin.git
synced 2024-09-19 19:22:14 +02:00
functions.inc.php:
- new function db_where_clause($condition, $struct) to create a WHERE clause. bool values are converted with db_get_boolean() based on $struct model/DomainHandler.php - view(): - build WHERE clause with db_where_clause() - new array $colformat for columns which need special handling in the field list (that's more readable than tons of elseif on the long term, and allows easier customization (hook/$CONF value?)) git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@1228 a1433add-5e2c-0410-b055-b7f2511e0802
This commit is contained in:
parent
7ed7c67fbe
commit
429ef27031
@ -1878,6 +1878,30 @@ function db_in_clause($field, $values) {
|
|||||||
. "') ";
|
. "') ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* db_where_clause
|
||||||
|
* Action: builds and returns a WHERE clause for database queries. All given conditions will be AND'ed.
|
||||||
|
* Call: db_where_clause (array $conditions, array $struct)
|
||||||
|
* param array $conditios: array('field' => 'value', 'field2' => 'value2, ...)
|
||||||
|
* param array $struct - field structure, used for automatic bool conversion
|
||||||
|
*/
|
||||||
|
function db_where_clause($condition, $struct) {
|
||||||
|
if (!is_array($condition)) {
|
||||||
|
die('db_where_cond: parameter $cond is not an array!');
|
||||||
|
} elseif (count($condition) == 0) {
|
||||||
|
die("db_where_cond: parameter is an empty array!"); # die() might sound harsh, but can prevent information leaks
|
||||||
|
} elseif(!is_array($struct)) {
|
||||||
|
die('db_where_cond: parameter $struct is not an array!');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($condition as $field => $value) {
|
||||||
|
if (isset($struct[$field]) && $struct[$field]['type'] == 'bool') $value = db_get_boolean($value);
|
||||||
|
$parts[] = "$field='" . escape_string($value) . "'";
|
||||||
|
}
|
||||||
|
$query = " WHERE " . join(" AND ", $parts) . " ";
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// table_by_key
|
// table_by_key
|
||||||
// Action: Return table name for given key
|
// Action: Return table name for given key
|
||||||
|
@ -248,27 +248,32 @@ class DomainHandler extends PFAHandler {
|
|||||||
$select_cols = array();
|
$select_cols = array();
|
||||||
$bool_fields = array();
|
$bool_fields = array();
|
||||||
|
|
||||||
|
$colformat = array(
|
||||||
|
# TODO: replace hardcoded %Y-%m-%d with a country-specific date format via *.lang?
|
||||||
|
'ts' => "DATE_FORMAT(###KEY###, '%Y-%m-%d') AS ###KEY###, ###KEY### AS _###KEY###",
|
||||||
|
);
|
||||||
|
|
||||||
# get list of fields to display
|
# get list of fields to display
|
||||||
foreach($this->struct as $key=>$row) {
|
foreach($this->struct as $key=>$row) {
|
||||||
if ( $row['display_in_list'] != 0 && $row['not_in_db'] == 0 ) {
|
if ( $row['display_in_list'] != 0 && $row['not_in_db'] == 0 ) {
|
||||||
if ($row['type'] == 'ts') {
|
if (isset($colformat[$row['type']])) {
|
||||||
# TODO: replace hardcoded %Y-%m-%d with a country-specific date format via *.lang?
|
$select_cols[] = str_replace('###KEY###', $key, $colformat[$row['type']] );
|
||||||
$select_cols[] = "DATE_FORMAT($key, '%Y-%m-%d') AS $key, $key AS _$key"; # timestamps formatted as date, raw data in _fieldname
|
|
||||||
} elseif ($row['type'] == 'bool') {
|
|
||||||
$bool_fields[] = $key; # remember boolean fields (will be converted to integer 0/1 later) - TODO: do this in the sql query with CASE?
|
|
||||||
$select_cols[] = $key;
|
|
||||||
} else {
|
} else {
|
||||||
$select_cols[] = $key;
|
$select_cols[] = $key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($row['type'] == 'bool') {
|
||||||
|
$bool_fields[] = $key; # remember boolean fields (will be converted to integer 0/1 later) - TODO: do this in the sql query/$colformat with CASE?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$cols = join(',', $select_cols);
|
$cols = join(',', $select_cols);
|
||||||
$table = table_by_key($this->db_table);
|
$table = table_by_key($this->db_table);
|
||||||
$id_field = $this->id_field;
|
|
||||||
$E_username = escape_string($this->username);
|
|
||||||
|
|
||||||
$result = db_query("SELECT $cols FROM $table WHERE $id_field='$E_username'");
|
$where = db_where_clause( array($this->id_field => $this->username), $this->struct);
|
||||||
|
$result = db_query("SELECT $cols FROM $table $where");
|
||||||
|
|
||||||
if ($result['rows'] != 0) {
|
if ($result['rows'] != 0) {
|
||||||
$this->return = db_array($result['result']);
|
$this->return = db_array($result['result']);
|
||||||
foreach ($bool_fields as $field) {
|
foreach ($bool_fields as $field) {
|
||||||
|
Loading…
Reference in New Issue
Block a user