Thread: SF.net SVN: postfixadmin:[1255] trunk/model/PFAHandler.php
Brought to you by:
christian_boltz,
gingerdog
From: <chr...@us...> - 2011-10-30 21:21:45
|
Revision: 1255 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1255&view=rev Author: christian_boltz Date: 2011-10-30 21:21:39 +0000 (Sun, 30 Oct 2011) Log Message: ----------- PFAHandler.php: - add/update several comments Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-10-30 20:58:00 UTC (rev 1254) +++ trunk/model/PFAHandler.php 2011-10-30 21:21:39 UTC (rev 1255) @@ -58,10 +58,13 @@ - + /** + * set and verify values + * @param array values - associative array with ($field1 => $value1, $field2 => $value2, ...) + * @return bool - true if all values are valid, otherwise false + * error messages (if any) are stored in $this->errormsg + */ public function set($values) { - # TODO: make this a generic function for add and edit - if ($this->new == 1) { $values[$this->id_field] = $this->id; } @@ -115,6 +118,8 @@ /** * store $this->values in the database * calls $this->storemore() where additional things can be done + * @return bool - true if all values are valid, otherwise false + * error messages (if any) are stored in $this->errormsg */ public function store() { if ($this->values_valid == false) { @@ -220,10 +225,11 @@ } /** - * get the settings of a domain + * get the values of an item * @param array or string $condition - * @return bool - true if at least one domain was found + * @return bool - true if at least one item was found * The data is stored in $this->return (as associative array of column => value) + * error messages (if any) are stored in $this->errormsg */ public function view($errors=true) { $result = $this->read_from_db(array($this->id_field => $this->id) ); @@ -238,9 +244,9 @@ } /** - * get a list of one or more domains with all settings + * get a list of one or more items with all values * @param array or string $condition - * @return bool - true if at least one domain was found + * @return bool - true if at least one item was found * The data is stored in $this->return (as array of rows, each row is an associative array of column => value) */ public function getList($condition) { @@ -256,7 +262,9 @@ } - + /************************************************************************** + * functions to read protected variables + */ public function getStruct() { return $this->struct; } @@ -273,7 +281,7 @@ } - /** + /************************************************************************** * functions for basic input validation */ function _inp_num($field, $val) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-12 21:46:31
|
Revision: 1266 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1266&view=rev Author: christian_boltz Date: 2011-11-12 21:46:25 +0000 (Sat, 12 Nov 2011) Log Message: ----------- PFAHandler.php: allow restriction to an admin's domain permissions - new protected variables: $admin_username - if set, restrict $allowed_domains to this admin $domain_field - column containing the domain $allowed_domains - if $domain_field is set, this is an array with the domain list - __construct: new optional parameter $admin_username to restrict allowed domains to this admin's permissions - read_from_db(): handle $allowed_domains - read_from_db(): fix query if $condition == "" PS: Yes, I know some people would like to kill me for including permission stuff in PFAHandler, but it's the best (and shortest, only +20 lines) way to handle it. Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-12 20:44:35 UTC (rev 1265) +++ trunk/model/PFAHandler.php 2011-11-12 21:46:25 UTC (rev 1266) @@ -8,6 +8,9 @@ protected $new = 0; # 1 on create, otherwise 0 protected $values = array(); protected $values_valid = false; + protected $admin_username = ""; # if set, restrict $allowed_domains to this admin + protected $domain_field = ""; # column containing the domain + protected $allowed_domains = false; # if $domain_field is set, this is an array with the domain list public $errormsg = array(); @@ -21,8 +24,20 @@ * Constructor: fill $struct etc. * @param string $new */ - public function __construct($new = 0) { + public function __construct($new = 0, $admin_username = "") { if ($new) $this->new = 1; + $this->admin_username = $admin_username; + + if ($this->domain_field == "") { + if ($admin_username != "") die('Attemp to restrict domains without setting $this->domain_field!'); + } else { + if ($admin_username != "") { + $this->allowed_domains = list_domains_for_admin($admin_username); + } else { + $this->allowed_domains = list_domains(); + } + } + $this->initStruct(); $this->initMsg(); } @@ -208,9 +223,14 @@ if (is_array($condition)) { $where = db_where_clause($condition, $this->struct); } else { + if ($condition == "") $condition = '1=1'; $where = " WHERE $condition "; } + if ($this->domain_field != "") { + $where .= " AND " . db_in_clause($this->domain_field, $this->allowed_domains); + } + $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; $result = db_query($query); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-12 23:28:09
|
Revision: 1268 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1268&view=rev Author: christian_boltz Date: 2011-11-12 23:28:03 +0000 (Sat, 12 Nov 2011) Log Message: ----------- PFAHandler.php: - read_from_db(): use associative array for database content (with $this->id_field as key) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-12 22:01:45 UTC (rev 1267) +++ trunk/model/PFAHandler.php 2011-11-12 23:28:03 UTC (rev 1268) @@ -237,7 +237,7 @@ $db_result = array(); if ($result['rows'] != 0) { while ($row = db_assoc ($result['result'])) { - $db_result[] = $row; + $db_result[$row[$this->id_field]] = $row; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-13 22:15:10
|
Revision: 1273 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1273&view=rev Author: christian_boltz Date: 2011-11-13 22:15:04 +0000 (Sun, 13 Nov 2011) Log Message: ----------- PFAHandler.php: - fix view() to use associative array key Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-13 21:42:32 UTC (rev 1272) +++ trunk/model/PFAHandler.php 2011-11-13 22:15:04 UTC (rev 1273) @@ -254,7 +254,7 @@ public function view($errors=true) { $result = $this->read_from_db(array($this->id_field => $this->id) ); if (count($result) == 1) { - $this->return = $result[0]; + $this->return = $result[$this->id]; return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-27 21:29:06
|
Revision: 1286 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1286&view=rev Author: christian_boltz Date: 2011-11-27 21:29:00 +0000 (Sun, 27 Nov 2011) Log Message: ----------- PFAHandler: - split code to handle domain_field == "" && admin_username != "" from __construct() to no_domain_field(). Default behaviour stays to die(), but AdminHandler will override it Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-27 21:24:29 UTC (rev 1285) +++ trunk/model/PFAHandler.php 2011-11-27 21:29:00 UTC (rev 1286) @@ -29,7 +29,7 @@ $this->admin_username = $admin_username; if ($this->domain_field == "") { - if ($admin_username != "") die('Attemp to restrict domains without setting $this->domain_field!'); + $this->no_domain_field(); } else { if ($admin_username != "") { $this->allowed_domains = list_domains_for_admin($admin_username); @@ -42,6 +42,10 @@ $this->initMsg(); } + protected function no_domain_field() { + if ($this->admin_username != "") die('Attemp to restrict domains without setting $this->domain_field!'); + } + /** * initialize with $id and check if it is valid * @param string $id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-27 22:03:40
|
Revision: 1287 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1287&view=rev Author: christian_boltz Date: 2011-11-27 22:03:34 +0000 (Sun, 27 Nov 2011) Log Message: ----------- PFAHandler.php - read_from_db(): - also include column in SELECT if display_in_form != 0 - call read_from_db_postprocess() hook before returning data Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-27 21:29:00 UTC (rev 1286) +++ trunk/model/PFAHandler.php 2011-11-27 22:03:34 UTC (rev 1287) @@ -207,7 +207,7 @@ # get list of fields to display $extrafrom = ""; foreach($this->struct as $key=>$row) { - if ( $row['display_in_list'] != 0 && $row['not_in_db'] == 0 ) { + if ( ($row['display_in_list'] != 0 || $row['display_in_form'] != 0) && $row['not_in_db'] == 0 ) { if ($row['select'] != '') $key = $row['select']; if ($row['extrafrom'] != '') $extrafrom = $extrafrom . " " . $row['extrafrom'] . "\n"; @@ -245,9 +245,15 @@ } } + $db_result = $this->read_from_db_postprocess($db_result); return $db_result; } + protected function read_from_db_postprocess($db_result) { + return $db_result; + } + + /** * get the values of an item * @param array or string $condition This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-11-29 00:24:01
|
Revision: 1293 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1293&view=rev Author: christian_boltz Date: 2011-11-29 00:23:55 +0000 (Tue, 29 Nov 2011) Log Message: ----------- PFAHandler.php: - fix field type for skipping password fields (must be 'pass', not 'password') - implement validation of 'pass' fields with validate_password() Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-11-28 00:37:41 UTC (rev 1292) +++ trunk/model/PFAHandler.php 2011-11-29 00:23:55 UTC (rev 1293) @@ -98,7 +98,7 @@ } } else { if (isset($values[$key])) { - if ($row['type'] != "password" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit + if ($row['type'] != "pass" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit $valid = true; # trust input unless validator objects # validate based on field type (_inp_$type) @@ -335,11 +335,13 @@ return false; } - function _inp_password($field, $val){ - # TODO: fetchmail specific. Not suited for mailbox/admin passwords. - $this->errormsg[$field] = "_inp_password not implemented yet"; + function _inp_pass($field, $val){ + $validpass = validate_password($val); + + if(count($validpass) == 0) return true; + + $this->errormsg[$field] = $validpass[0]; # TODO: honor all error messages, not only the first one? return false; - # return base64_encode($val); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-05-05 23:09:35
|
Revision: 1383 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1383&view=rev Author: christian_boltz Date: 2012-05-05 23:09:29 +0000 (Sat, 05 May 2012) Log Message: ----------- PFAHandler.php: - add lots of comments - sort variables into categories - public variables (currently only errorMsg) - must be defined in *Handler classes - set by methods - (no "real" code changes) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2012-04-29 20:52:30 UTC (rev 1382) +++ trunk/model/PFAHandler.php 2012-05-05 23:09:29 UTC (rev 1383) @@ -1,22 +1,70 @@ <?php class PFAHandler { - protected $id = null; + /** + * public variables + */ + + # array of error messages - if a method returns false, you'll find the error message(s) here + public $errormsg = array(); + + + /** + * variables that must be defined in all *Handler classes + */ + + # (default) name of the database table + # (can be overridden by $CONF[database_prefix] and $CONF[database_tables][*] via table_by_key()) protected $db_table = null; + + # field containing the ID protected $id_field = null; + + # column containing the domain + # if a table does not contain a domain column, leave empty and override no_domain_field()) + protected $domain_field = ""; + + + /** + * internal variables - filled by methods of *Handler + */ + + # if $domain_field is set, this is an array with the domain list + # set in __construct() + protected $allowed_domains = false; + + # if set, restrict $allowed_domains to this admin + # set in __construct() + protected $admin_username = ""; + + + # the ID of the current item (where item can be an admin, domain, mailbox, alias etc.) + # filled in init() + protected $id = null; + + # structure of the database table, list, edit form etc. + # filled in initStruct() protected $struct = array(); + + # new item or edit existing one? + # set in __construct() protected $new = 0; # 1 on create, otherwise 0 + + # validated values + # filled in set() protected $values = array(); - protected $RAWvalues = array(); # unchecked (!) input given to set() - use it carefully! + + # unchecked (!) input given to set() - use it carefully! + # filled in set(), can be modified by _missing_$field() + protected $RAWvalues = array(); + + # are the values given to set() valid? + # set by set(), checked by store() protected $values_valid = false; - protected $admin_username = ""; # if set, restrict $allowed_domains to this admin - protected $domain_field = ""; # column containing the domain - protected $allowed_domains = false; # if $domain_field is set, this is an array with the domain list - public $errormsg = array(); - # messages used in various functions # (stored separately to make the functions reuseable) + # filled by initMsg() protected $msg = array(); @@ -101,7 +149,9 @@ if ($this->new) { foreach($this->struct as $key=>$row) { if ($row['editable'] && !isset($values[$key]) ) { - $func="_missing_".$key; # call $this->_missing_$fieldname() + # if a field is editable and not set, call $this->_missing_$fieldname() + # (if the method exists - otherwise the field won't be set, resulting in an error later) + $func="_missing_".$key; if (method_exists($this, $func) ) { $this->{$func}($key); # function can set $this->RAWvalues[$key] (or do nothing if it can't set a useful value) } @@ -117,14 +167,15 @@ foreach($this->struct as $key=>$row) { if ($row['editable'] == 0) { # not editable if ($this->new == 1) { + # on $new, always set non-editable field to default value on $new (even if input data contains another value) $this->values[$key] = $row['default']; } - } else { + } else { # field is editable if (isset($values[$key])) { if ($row['type'] != "pass" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit $valid = true; # trust input unless validator objects - # validate based on field type (_inp_$type) + # validate based on field type ($this->_inp_$type) $func="_inp_".$row['type']; if (method_exists($this, $func) ) { if (!$this->{$func}($key, $values[$key])) $valid = false; @@ -225,7 +276,9 @@ /** * read_from_db * @param array or string - condition (an array will be AND'ed using db_where_clause, a string will be directly used) - * @return array - rows + * @param integer limit - maximum number of rows to return + * @param integer offset - number of first row to return + * @return array - rows (as associative array, with the ID as key) */ protected function read_from_db($condition, $limit=-1, $offset=-1) { $select_cols = array(); @@ -281,6 +334,8 @@ $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; if ($limit > -1 && $offset > -1) { + # TODO: make sure $limit and $offset are really integers - cast via (int) ? + # TODO: make sure $limit is > 0 (0 doesn't break anything, but guarantees an empty resultset, so it's pointless) $query .= " LIMIT $limit OFFSET $offset "; } @@ -324,6 +379,8 @@ /** * get a list of one or more items with all values * @param array or string $condition + * @param integer limit - maximum number of rows to return + * @param integer offset - number of first row to return * @return bool - true if at least one item was found * The data is stored in $this->return (as array of rows, each row is an associative array of column => value) */ @@ -388,31 +445,47 @@ /************************************************************************** + * _inp_*() * functions for basic input validation + * @return boolean - true if the value is valid, otherwise false + * also set $this->errormsg[$field] if a value is invalid */ + + /** + * check if value is numeric and >= -1 (= minimum value for quota) + */ function _inp_num($field, $val) { $valid = is_numeric($val); if ($val < -1) $valid = false; - if (!$valid) $this->errormsg[$field] = "$field must be numeric"; + if (!$valid) $this->errormsg[$field] = "$field must be numeric"; # TODO: make translateable return $valid; # return (int)($val); } + /** + * check if value is (numeric) boolean - in other words: 0 or 1 + */ function _inp_bool($field, $val) { if ($val == "0" || $val == "1") return true; - $this->errormsg[$field] = "$field must be boolean"; + $this->errormsg[$field] = "$field must be boolean"; # TODO: make translateable return false; # return $val ? db_get_boolean(true): db_get_boolean(false); } + /** + * check if value of an enum field is in the list of allowed values + */ function _inp_enum($field, $val) { if(in_array($val, $this->struct[$field]['options'])) return true; - $this->errormsg[$field] = "Invalid parameter given for $field"; + $this->errormsg[$field] = "Invalid parameter given for $field"; # TODO: make translateable return false; } + /** + * check if a password is secure enough + */ function _inp_pass($field, $val){ - $validpass = validate_password($val); + $validpass = validate_password($val); # returns array of error messages, or empty array on success if(count($validpass) == 0) return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-05-06 18:36:10
|
Revision: 1384 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1384&view=rev Author: christian_boltz Date: 2012-05-06 18:36:03 +0000 (Sun, 06 May 2012) Log Message: ----------- PFAHandler: - mark _inp_* functions as protected Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2012-05-05 23:09:29 UTC (rev 1383) +++ trunk/model/PFAHandler.php 2012-05-06 18:36:03 UTC (rev 1384) @@ -454,7 +454,7 @@ /** * check if value is numeric and >= -1 (= minimum value for quota) */ - function _inp_num($field, $val) { + protected function _inp_num($field, $val) { $valid = is_numeric($val); if ($val < -1) $valid = false; if (!$valid) $this->errormsg[$field] = "$field must be numeric"; # TODO: make translateable @@ -465,7 +465,7 @@ /** * check if value is (numeric) boolean - in other words: 0 or 1 */ - function _inp_bool($field, $val) { + protected function _inp_bool($field, $val) { if ($val == "0" || $val == "1") return true; $this->errormsg[$field] = "$field must be boolean"; # TODO: make translateable return false; @@ -475,7 +475,7 @@ /** * check if value of an enum field is in the list of allowed values */ - function _inp_enum($field, $val) { + protected function _inp_enum($field, $val) { if(in_array($val, $this->struct[$field]['options'])) return true; $this->errormsg[$field] = "Invalid parameter given for $field"; # TODO: make translateable return false; @@ -484,7 +484,7 @@ /** * check if a password is secure enough */ - function _inp_pass($field, $val){ + protected function _inp_pass($field, $val){ $validpass = validate_password($val); # returns array of error messages, or empty array on success if(count($validpass) == 0) return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-02-04 21:39:05
|
Revision: 1423 http://sourceforge.net/p/postfixadmin/code/1423 Author: christian_boltz Date: 2013-02-04 21:38:59 +0000 (Mon, 04 Feb 2013) Log Message: ----------- PFAHandler.php: - set(): if a field is not set and there's no _missing_$field() method for it, take default value from $this->struct (side effect: this automagically fixes CLI create domain) - store(): add a beforestore() hook that is called at the beginning of store() - add empty beforestore() (will be overwritten by MailboxHandler) - some comment updates Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-01-27 19:52:19 UTC (rev 1422) +++ trunk/model/PFAHandler.php 2013-02-04 21:38:59 UTC (rev 1423) @@ -201,11 +201,19 @@ if ($this->new) { foreach($this->struct as $key=>$row) { if ($row['editable'] && !isset($values[$key]) ) { - # if a field is editable and not set, call $this->_missing_$fieldname() - # (if the method exists - otherwise the field won't be set, resulting in an error later) + /** + * when creating a new item: + * if a field is editable and not set, + * - if $this->_missing_$fieldname() exists, call it + * (it can set $this->RAWvalues[$fieldname] - or do nothing if it can't set a useful value) + * - otherwise use the default value from $this->struct + * (if you don't want this, create an empty _missing_$fieldname() function) + */ $func="_missing_".$key; if (method_exists($this, $func) ) { - $this->{$func}($key); # function can set $this->RAWvalues[$key] (or do nothing if it can't set a useful value) + $this->{$func}($key); # call _missing_$fieldname() + } else { + $this->set_default_value($key); # take default value from $this->struct } } } @@ -225,6 +233,7 @@ } else { # field is editable if (isset($values[$key])) { if ($row['type'] != "pass" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit +# TODO: do not skip "password2" if "password" is filled, but "password2" is empty $valid = true; # trust input unless validator objects # validate based on field type ($this->_inp_$type) @@ -287,6 +296,10 @@ return false; } + if ( !$this->beforestore() ) { + return false; + } + $db_values = $this->values; foreach(array_keys($db_values) as $key) { @@ -321,6 +334,14 @@ } /** + * called by $this->store() before storing the values in the database + * @return bool - if false, store() will abort + */ + protected function beforestore() { + return true; # do nothing, successfully ;-) + } + + /** * called by $this->store() after storing $this->values in the database * can be used to update additional tables, call scripts etc. */ @@ -505,7 +526,6 @@ /** * set field to default value - * typically called from _missing_$fieldname() * @param string $field - fieldname */ protected function set_default_value($field) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-06-23 17:34:17
|
Revision: 1490 http://sourceforge.net/p/postfixadmin/code/1490 Author: christian_boltz Date: 2013-06-23 17:34:14 +0000 (Sun, 23 Jun 2013) Log Message: ----------- PFAHandler.php: - add $skip_empty_pass (default: true) - set to false to disable skipping empty password fields in edit mode (needed for "change password" form) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-06-23 17:31:18 UTC (rev 1489) +++ trunk/model/PFAHandler.php 2013-06-23 17:34:14 UTC (rev 1490) @@ -26,6 +26,10 @@ # if a table does not contain a domain column, leave empty and override no_domain_field()) protected $domain_field = ""; + # skip empty password fields in edit mode + # enabled by default to allow changing an admin, mailbox etc. without changing the password + # disable for "edit password" forms + protected $skip_empty_pass = true; /** * internal variables - filled by methods of *Handler @@ -264,7 +268,7 @@ } } else { # field is editable if (isset($values[$key])) { - if ($row['type'] != "pass" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit + if ($row['type'] != "pass" || strlen($values[$key]) > 0 || $this->new == 1 || $this->skip_empty_pass != true) { # skip on empty (aka unchanged) password on edit # TODO: do not skip "password2" if "password" is filled, but "password2" is empty $valid = true; # trust input unless validator objects This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-11-16 19:10:18
|
Revision: 1584 http://sourceforge.net/p/postfixadmin/code/1584 Author: christian_boltz Date: 2013-11-16 19:10:15 +0000 (Sat, 16 Nov 2013) Log Message: ----------- PFAHandler: - read_from_db(): convert $limit and $offset with (int) to make sure they contain a sane value Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-11-16 19:02:44 UTC (rev 1583) +++ trunk/model/PFAHandler.php 2013-11-16 19:10:15 UTC (rev 1584) @@ -460,9 +460,9 @@ $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; + $limit = (int) $limit; # make sure $limit and $offset are really integers + $offset = (int) $offset; if ($limit > -1 && $offset > -1) { - # TODO: make sure $limit and $offset are really integers - cast via (int) ? - # TODO: make sure $limit is > 0 (0 doesn't break anything, but guarantees an empty resultset, so it's pointless) $query .= " LIMIT $limit OFFSET $offset "; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-01 18:54:30
|
Revision: 1711 http://sourceforge.net/p/postfixadmin/code/1711 Author: christian_boltz Date: 2014-11-01 18:54:27 +0000 (Sat, 01 Nov 2014) Log Message: ----------- PFAHandler: - add validation for "enma" field type - list of options, must be given in column "options" as associative array (value => displayed value) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-01 18:08:11 UTC (rev 1710) +++ trunk/model/PFAHandler.php 2014-11-01 18:54:27 UTC (rev 1711) @@ -135,6 +135,7 @@ * bool boolean (converted to 0/1, additional column _$field with yes/no) * ts timestamp (created/modified) * enum list of options, must be given in column "options" as array + * enma list of options, must be given in column "options" as associative array * list like enum, but allow multiple selections * You can use custom types, but you'll have to add handling for them in *Handler and the smarty templates * @@ -664,6 +665,15 @@ } /** + * check if value of an enum field is in the list of allowed values + */ + protected function _inp_enma($field, $val) { + if(array_key_exists($val, $this->struct[$field]['options'])) return true; + $this->errormsg[$field] = Config::Lang_f('invalid_value_given', $field); + return false; + } + + /** * check if a password is secure enough */ protected function _inp_pass($field, $val){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-01 19:25:16
|
Revision: 1713 http://sourceforge.net/p/postfixadmin/code/1713 Author: christian_boltz Date: 2014-11-01 19:25:11 +0000 (Sat, 01 Nov 2014) Log Message: ----------- PFAHandler: - automatically skip quot, vnum and vtxt fields in store() (as if dont_write_to_db == 1) - document new field types vtxt and quot and mark field types that will never be stored in db Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-01 19:19:00 UTC (rev 1712) +++ trunk/model/PFAHandler.php 2014-11-01 19:25:11 UTC (rev 1713) @@ -128,16 +128,20 @@ * * available values for the "type" column: * text one line of text + * *vtxt "virtual" line of text, coming from JOINs etc. * pass password (will be encrypted with pacrypt()) * num number * txtl text "list" - array of one line texts - * vnum "virtual" number, coming from JOINs etc. + * *vnum "virtual" number, coming from JOINs etc. * bool boolean (converted to 0/1, additional column _$field with yes/no) * ts timestamp (created/modified) * enum list of options, must be given in column "options" as array * enma list of options, must be given in column "options" as associative array * list like enum, but allow multiple selections + * *quot used / total quota ("5 / 10") - for field "quotausage", there must also be a "_quotausage_percent" (type vnum) * You can use custom types, but you'll have to add handling for them in *Handler and the smarty templates + * + * Field types marked with * will automatically be skipped in store(). * * All database tables should have a 'created' and a 'modified' column. * @@ -373,6 +377,11 @@ case 'pass': $db_values[$key] = pacrypt($db_values[$key]); break; + case 'quot': + case 'vnum': + case 'vtxt': + unset ($db_values[$key]); # virtual field, never write it + break; } if ($this->struct[$key]['not_in_db'] == 1) unset ($db_values[$key]); # remove 'not in db' columns if ($this->struct[$key]['dont_write_to_db'] == 1) unset ($db_values[$key]); # remove 'dont_write_to_db' columns This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-01 19:31:02
|
Revision: 1714 http://sourceforge.net/p/postfixadmin/code/1714 Author: christian_boltz Date: 2014-11-01 19:30:54 +0000 (Sat, 01 Nov 2014) Log Message: ----------- PFAHandler: - add protected $is_superadmin = 1; will be set to 0 if $admin_username is set and is not a superadmin Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-01 19:25:11 UTC (rev 1713) +++ trunk/model/PFAHandler.php 2014-11-01 19:30:54 UTC (rev 1714) @@ -46,6 +46,8 @@ # set in __construct() protected $admin_username = ""; + # will be set to 0 if $admin_username is set and is not a superadmin + protected $is_superadmin = 1; # the ID of the current item (where item can be an admin, domain, mailbox, alias etc.) # filled in init() @@ -93,6 +95,10 @@ if ($new) $this->new = 1; $this->admin_username = $admin_username; + if ($admin_username != "" && (! authentication_has_role('global-admin') ) ) { + $this->is_superadmin = 0; + } + if ($this->domain_field == "") { $this->no_domain_field(); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-01 19:38:31
|
Revision: 1715 http://sourceforge.net/p/postfixadmin/code/1715 Author: christian_boltz Date: 2014-11-01 19:38:28 +0000 (Sat, 01 Nov 2014) Log Message: ----------- PFAHandler: - add handling of users (non-admins), including permission checks Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-01 19:30:54 UTC (rev 1714) +++ trunk/model/PFAHandler.php 2014-11-01 19:38:28 UTC (rev 1715) @@ -29,6 +29,9 @@ # if a table does not contain a domain column, leave empty and override no_domain_field()) protected $domain_field = ""; + # column containing the username (if logged in as non-admin) + protected $user_field = ''; + # skip empty password fields in edit mode # enabled by default to allow changing an admin, mailbox etc. without changing the password # disable for "edit password" forms @@ -49,6 +52,12 @@ # will be set to 0 if $admin_username is set and is not a superadmin protected $is_superadmin = 1; + # if set, switch to user (non-admin) mode + protected $username = ''; + + # will be set to 0 if a user (non-admin) is logged in + protected $is_admin = 1; + # the ID of the current item (where item can be an admin, domain, mailbox, alias etc.) # filled in init() protected $id = null; @@ -90,25 +99,37 @@ * Constructor: fill $struct etc. * @param integer - 0 is edit mode, set to 1 to switch to create mode * @param string - if an admin_username is specified, permissions will be restricted to the domains this admin may manage + * @param integer - 0 if logged in as user, 1 if logged in as admin or superadmin */ - public function __construct($new = 0, $admin_username = "") { + public function __construct($new = 0, $username = "", $is_admin = 1) { if ($new) $this->new = 1; - $this->admin_username = $admin_username; - if ($admin_username != "" && (! authentication_has_role('global-admin') ) ) { + if ($is_admin) { + $this->admin_username = $username; + } else { + $this->username = $username; + $this->is_admin = 0; $this->is_superadmin = 0; } + if ($username != "" && (! authentication_has_role('global-admin') ) ) { + $this->is_superadmin = 0; + } + if ($this->domain_field == "") { $this->no_domain_field(); } else { - if ($admin_username != "") { - $this->allowed_domains = list_domains_for_admin($admin_username); + if ($this->admin_username != "") { + $this->allowed_domains = list_domains_for_admin($username); } else { $this->allowed_domains = list_domains(); } } + if ($this->user_field == '') { + $this->no_user_field(); + } + $this->initStruct(); $struct_hook = Config::read($this->db_table . '_struct_hook'); @@ -129,6 +150,17 @@ } /** + * ensure a lazy programmer can't give access to all items accidently + * + * to intentionally disable the check if $this->user_field is empty, override this function + */ + protected function no_user_field() { + if ($this->username != '') die('Attemp to restrict users without setting $this->user_field!'); + } + + + + /** * init $this->struct (an array of pacol() results) * see pacol() in functions.inc.php for all available parameters * @@ -499,6 +531,11 @@ $where .= " AND " . db_in_clause($this->domain_field, $this->allowed_domains); } + # if logged in as user, restrict to the items the user is allowed to see + if ( (!$this->is_admin) && $this->user_field != '') { + $where .= " AND " . $this->user_field . " = '" . escape_string($this->username) . "' "; + } + $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; $limit = (int) $limit; # make sure $limit and $offset are really integers This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-01 19:51:31
|
Revision: 1716 http://sourceforge.net/p/postfixadmin/code/1716 Author: christian_boltz Date: 2014-11-01 19:51:25 +0000 (Sat, 01 Nov 2014) Log Message: ----------- PFAHandler: Add $can_edit and $can_delete flags. This makes it possible to make some, but not all items non-editable or non-deletable (based on a database column/query or read_from_db_postprocess()) - add $can_edit and $can_delete - after initStruct, check if $struct contains _can_edit and _can_delete. If not, fill with default values (allowed) - init(): set $this->can_edit and $this->can_delete (only in view/edit mode) - set(): abort if !$this->can_edit Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-01 19:38:28 UTC (rev 1715) +++ trunk/model/PFAHandler.php 2014-11-01 19:51:25 UTC (rev 1716) @@ -66,6 +66,15 @@ # filled in domain_from_id() via init() protected $domain = null; + # can this item be edited? + # filled in init() (only in edit mode) + protected $can_edit = 1; + + # can this item be deleted? + # filled in init() (only in edit mode) + protected $can_delete = 1; + # TODO: needs to be implemented in delete() + # structure of the database table, list, edit form etc. # filled in initStruct() protected $struct = array(); @@ -132,6 +141,22 @@ $this->initStruct(); + if (!isset($this->struct['_can_edit'])) { + $this->struct['_can_edit'] = pacol( 0, 0, 1, 'vnum', '' , '' , '', '', + /*not_in_db*/ 0, + /*dont_write_to_db*/ 1, + /*select*/ '1 as _can_edit' + ); + } + + if (!isset($this->struct['_can_delete'])) { + $this->struct['_can_delete'] = pacol( 0, 0, 1, 'vnum', '' , '' , '', '', + /*not_in_db*/ 0, + /*dont_write_to_db*/ 1, + /*select*/ '1 as _can_delete' + ); + } + $struct_hook = Config::read($this->db_table . '_struct_hook'); if ( $struct_hook != 'NO' && function_exists($struct_hook) ) { $this->struct = $struct_hook($this->struct); @@ -239,11 +264,13 @@ # } else { # return true; } - } else { # edit mode + } else { # view or edit mode if (!$exists) { $this->errormsg[$this->id_field] = Config::lang($this->msg['error_does_not_exist']); return false; -# } else { + } else { + $this->can_edit = $this->result['_can_edit']; + $this->can_delete = $this->result['_can_delete']; # return true; } } @@ -298,6 +325,11 @@ * error messages (if any) are stored in $this->errormsg */ public function set($values) { + if ( !$this->can_edit ) { + $this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->id); + return false; + } + if ($this->new == 1) { $values[$this->id_field] = $this->id; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-02 21:56:03
|
Revision: 1728 http://sourceforge.net/p/postfixadmin/code/1728 Author: christian_boltz Date: 2014-11-02 21:55:56 +0000 (Sun, 02 Nov 2014) Log Message: ----------- PFAHandler: - add getMsg() function (needed by list.php) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-02 21:47:31 UTC (rev 1727) +++ trunk/model/PFAHandler.php 2014-11-02 21:55:56 UTC (rev 1728) @@ -672,6 +672,10 @@ return $this->struct; } + public function getMsg() { + return $this->msg; + } + public function getId_field() { return $this->id_field; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-02 22:04:01
|
Revision: 1729 http://sourceforge.net/p/postfixadmin/code/1729 Author: christian_boltz Date: 2014-11-02 22:03:58 +0000 (Sun, 02 Nov 2014) Log Message: ----------- PFAHandler: - add $this->label_field and $this->label (defaults to $this->id_field and $this->id) to allow nicer messages - use $this->label in various messages Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-02 21:55:56 UTC (rev 1728) +++ trunk/model/PFAHandler.php 2014-11-02 22:03:58 UTC (rev 1729) @@ -25,6 +25,10 @@ # field containing the ID protected $id_field = null; + # field containing the label + # defaults to $id_field if not set + protected $label_field = null; + # column containing the domain # if a table does not contain a domain column, leave empty and override no_domain_field()) protected $domain_field = ""; @@ -66,6 +70,10 @@ # filled in domain_from_id() via init() protected $domain = null; + # the label of the current item (for usage in error/info messages) + # filled in init() (only contains the "real" label in edit mode - in new mode, it will be the same as $id) + protected $label = null; + # can this item be edited? # filled in init() (only in edit mode) protected $can_edit = 1; @@ -111,6 +119,11 @@ * @param integer - 0 if logged in as user, 1 if logged in as admin or superadmin */ public function __construct($new = 0, $username = "", $is_admin = 1) { + # set label_field if not explicitely set + if (empty($this->label_field)) { + $this->label_field = $this->id_field; + } + if ($new) $this->new = 1; if ($is_admin) { @@ -251,6 +264,7 @@ */ public function init($id) { $this->id = strtolower($id); + $this->label = $this->id; $exists = $this->view(false); @@ -271,6 +285,7 @@ } else { $this->can_edit = $this->result['_can_edit']; $this->can_delete = $this->result['_can_delete']; + $this->label = $this->result[$this->label_field]; # return true; } } @@ -326,7 +341,7 @@ */ public function set($values) { if ( !$this->can_edit ) { - $this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->id); + $this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->label); return false; } @@ -463,7 +478,7 @@ $result = db_update($this->db_table, $this->id_field, $this->id, $db_values); } if ($result != 1) { - $this->errormsg[] = Config::lang_f($this->msg['store_error'], $this->id); + $this->errormsg[] = Config::lang_f($this->msg['store_error'], $this->label); return false; } @@ -475,7 +490,7 @@ if ($result) { # return success message # TODO: add option to override the success message (for example to include autogenerated passwords) - $this->infomsg['success'] = Config::lang_f($this->msg['successmessage'], $this->id); + $this->infomsg['success'] = Config::lang_f($this->msg['successmessage'], $this->label); } return $result; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-11-02 22:07:25
|
Revision: 1730 http://sourceforge.net/p/postfixadmin/code/1730 Author: christian_boltz Date: 2014-11-02 22:07:20 +0000 (Sun, 02 Nov 2014) Log Message: ----------- PFAHandler: - add $this->order_by to allow ordering by any field(s) (defaults to $this->id_field) Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-11-02 22:03:58 UTC (rev 1729) +++ trunk/model/PFAHandler.php 2014-11-02 22:07:20 UTC (rev 1730) @@ -29,6 +29,11 @@ # defaults to $id_field if not set protected $label_field = null; + # field(s) to use in the ORDER BY clause + # can contain multiple comma-separated fields + # defaults to $id_field if not set + protected $order_by = null; + # column containing the domain # if a table does not contain a domain column, leave empty and override no_domain_field()) protected $domain_field = ""; @@ -124,6 +129,11 @@ $this->label_field = $this->id_field; } + # set order_by if not explicitely set + if (empty($this->order_by)) { + $this->order_by = $this->id_field; + } + if ($new) $this->new = 1; if ($is_admin) { @@ -582,9 +592,8 @@ if ( (!$this->is_admin) && $this->user_field != '') { $where .= " AND " . $this->user_field . " = '" . escape_string($this->username) . "' "; } + $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->order_by; - $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; - $limit = (int) $limit; # make sure $limit and $offset are really integers $offset = (int) $offset; if ($limit > -1 && $offset > -1) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2015-03-19 22:05:57
|
Revision: 1756 http://sourceforge.net/p/postfixadmin/code/1756 Author: christian_boltz Date: 2015-03-19 22:05:49 +0000 (Thu, 19 Mar 2015) Log Message: ----------- PFAHandler.php: - split off build_select_query() from read_from_db() as preparation for using build_select_query() to generate the pagebrowser query Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2015-03-19 00:01:35 UTC (rev 1755) +++ trunk/model/PFAHandler.php 2015-03-19 22:05:49 UTC (rev 1756) @@ -535,22 +535,18 @@ /** - * read_from_db + * build_select_query * - * reads all fields specified in $this->struct from the database - * and auto-converts them to database-independent values based on the field type (see $colformat) + * helper function to build the inner part of the select query + * can be used by read_from_db() and for generating the pagebrowser * - * calls $this->read_from_db_postprocess() to postprocess the result - * * @param array or string - condition (an array will be AND'ed using db_where_clause, a string will be directly used) * (if you use a string, make sure it is correctly escaped!) * - WARNING: will be changed to array only in the future, with an option to include a raw string inside the array * @param array searchmode - operators to use (=, <, >) if $condition is an array. Defaults to = if not specified for a field. - * @param integer limit - maximum number of rows to return - * @param integer offset - number of first row to return - * @return array - rows (as associative array, with the ID as key) + * @return array - contains query parts */ - protected function read_from_db($condition, $searchmode = array(), $limit=-1, $offset=-1) { + protected function build_select_query($condition, $searchmode) { $select_cols = array(); $yes = escape_string(Config::lang('YES')); @@ -610,8 +606,31 @@ $where = " WHERE ( $condition ) $additional_where"; } - $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->order_by; + return array( + 'select_cols' => " SELECT $cols ", + 'from_where_order' => " FROM $table $extrafrom $where ORDER BY " . $this->order_by, + ); + } + /** + * read_from_db + * + * reads all fields specified in $this->struct from the database + * and auto-converts them to database-independent values based on the field type (see $colformat) + * + * calls $this->read_from_db_postprocess() to postprocess the result + * + * @param array or string condition -see build_select_query() for details + * @param array searchmode - see build_select_query() for details + * @param integer limit - maximum number of rows to return + * @param integer offset - number of first row to return + * @return array - rows (as associative array, with the ID as key) + */ + protected function read_from_db($condition, $searchmode = array(), $limit=-1, $offset=-1) { + $queryparts = $this->build_select_query($condition, $searchmode); + + $query = $queryparts['select_cols'] . $queryparts['from_where_order']; + $limit = (int) $limit; # make sure $limit and $offset are really integers $offset = (int) $offset; if ($limit > -1 && $offset > -1) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2015-04-04 14:37:54
|
Revision: 1768 http://sourceforge.net/p/postfixadmin/code/1768 Author: christian_boltz Date: 2015-04-04 14:37:46 +0000 (Sat, 04 Apr 2015) Log Message: ----------- PFAHandler: - set(): if errormsg is set for a field, assume it's invalid (even if the validator functions did not (or forgot to) return False) In theory this should never happen, but it's a nice safety net against programming errors in validator functions that don't have an explicit return False; Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2015-04-04 14:32:58 UTC (rev 1767) +++ trunk/model/PFAHandler.php 2015-04-04 14:37:46 UTC (rev 1768) @@ -422,6 +422,8 @@ if (!$this->{$func}($key, $values[$key])) $valid = false; } + if (isset($this->errormsg[$key]) && $this->errormsg[$key] != '') $valid = false; + if ($valid) { $this->values[$key] = $values[$key]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2016-05-22 17:44:20
|
Revision: 1847 http://sourceforge.net/p/postfixadmin/code/1847 Author: christian_boltz Date: 2016-05-22 17:44:17 +0000 (Sun, 22 May 2016) Log Message: ----------- Don't decode b64p (base64-encoded password) fields. This is not supported in MySQL < 5.6. Besides that, we don't display the content of b64p fields anywhere, so the easiest way is not to decode it. Note: Currently, the only user of b64p is FetchmailHandler. Fixes https://sourceforge.net/p/postfixadmin/bugs/357/ Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2016-05-22 16:57:09 UTC (rev 1846) +++ trunk/model/PFAHandler.php 2016-05-22 17:44:17 UTC (rev 1847) @@ -228,7 +228,7 @@ * *vtxt "virtual" line of text, coming from JOINs etc. * html raw html (use carefully, won't get auto-escaped by smarty! Don't use with user input!) * pass password (will be encrypted with pacrypt()) - * b64p password (will be stored with base64_encode()) + * b64p password (will be stored with base64_encode() - but will NOT be decoded automatically) * num number * txtl text "list" - array of one line texts * *vnum "virtual" number, coming from JOINs etc. @@ -566,14 +566,14 @@ if (db_pgsql()) { $formatted_date = "TO_DATE(text(###KEY###), '" . escape_string(Config::Lang('dateformat_pgsql')) . "')"; - $base64_decode = "DECODE(###KEY###, 'base64')"; + # $base64_decode = "DECODE(###KEY###, 'base64')"; } elseif (db_sqlite()) { $formatted_date = "strftime(###KEY###, '" . escape_string(Config::Lang('dateformat_mysql')) . "')"; - $base64_decode = "base64_decode(###KEY###)"; + # $base64_decode = "base64_decode(###KEY###)"; } else { $formatted_date = "DATE_FORMAT(###KEY###, '" . escape_string(Config::Lang('dateformat_mysql')) . "')"; - $base64_decode = "FROM_BASE64(###KEY###)"; + # $base64_decode = "FROM_BASE64(###KEY###)"; # requires MySQL >= 5.6 } $colformat = array( @@ -582,7 +582,7 @@ # 'bool' fields are always returned as 0/1, additonally _$field contains yes/no (already translated) 'bool' => "CASE ###KEY### WHEN '" . db_get_boolean(true) . "' THEN '1' WHEN '" . db_get_boolean(false) . "' THEN '0' END as ###KEY###," . "CASE ###KEY### WHEN '" . db_get_boolean(true) . "' THEN '$yes' WHEN '" . db_get_boolean(false) . "' THEN '$no' END as _###KEY###", - 'b64p' => "$base64_decode AS ###KEY###", + # 'b64p' => "$base64_decode AS ###KEY###", # not available in MySQL < 5.6, therefore not decoding for any database ); # get list of fields to display This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gin...@us...> - 2016-12-21 10:26:00
|
Revision: 1884 http://sourceforge.net/p/postfixadmin/code/1884 Author: gingerdog Date: 2016-12-21 10:25:58 +0000 (Wed, 21 Dec 2016) Log Message: ----------- fix date formatting in non-english languages, thanks to uz...@mu... Modified Paths: -------------- trunk/model/PFAHandler.php Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2016-12-20 08:39:18 UTC (rev 1883) +++ trunk/model/PFAHandler.php 2016-12-21 10:25:58 UTC (rev 1884) @@ -565,7 +565,7 @@ $no = escape_string(Config::lang('NO')); if (db_pgsql()) { - $formatted_date = "TO_DATE(text(###KEY###), '" . escape_string(Config::Lang('dateformat_pgsql')) . "')"; + $formatted_date = "TO_CHAR(###KEY###, '" . escape_string(Config::Lang('dateformat_pgsql')) . "')"; # $base64_decode = "DECODE(###KEY###, 'base64')"; } elseif (db_sqlite()) { $formatted_date = "strftime(###KEY###, '" . escape_string(Config::Lang('dateformat_mysql')) . "')"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |