Thread: SF.net SVN: postfixadmin:[712] trunk/model
Brought to you by:
christian_boltz,
gingerdog
From: <chr...@us...> - 2009-08-21 12:11:01
|
Revision: 712 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=712&view=rev Author: christian_boltz Date: 2009-08-21 12:10:54 +0000 (Fri, 21 Aug 2009) Log Message: ----------- model/*.php: - fix unquoted boolean values in sql queries which probably caused postgresql errors Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/UserHandler.php trunk/model/VacationHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2009-08-21 12:02:55 UTC (rev 711) +++ trunk/model/AliasHandler.php 2009-08-21 12:10:54 UTC (rev 712) @@ -145,7 +145,7 @@ } if($this->hasAliasRecord() == false) { $true = db_get_boolean(True); - $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), $true)"; + $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')"; } else { $sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'"; Modified: trunk/model/UserHandler.php =================================================================== --- trunk/model/UserHandler.php 2009-08-21 12:02:55 UTC (rev 711) +++ trunk/model/UserHandler.php 2009-08-21 12:10:54 UTC (rev 712) @@ -30,7 +30,7 @@ $table_mailbox = table_by_key('mailbox'); $active = db_get_boolean(True); - $result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active=$active"); + $result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active='$active'"); $new_db_password = escape_string(pacrypt($new_password)); $result = db_query ("UPDATE $table_mailbox SET password='$new_db_password',modified=NOW() WHERE username='$username'"); @@ -51,7 +51,7 @@ $table_mailbox = table_by_key('mailbox'); $active = db_get_boolean(True); - $query = "SELECT password FROM $table_mailbox WHERE username='$username' AND active=$active"; + $query = "SELECT password FROM $table_mailbox WHERE username='$username' AND active='$active'"; $result = db_query ($query); if ($result['rows'] == 1) Modified: trunk/model/VacationHandler.php =================================================================== --- trunk/model/VacationHandler.php 2009-08-21 12:02:55 UTC (rev 711) +++ trunk/model/VacationHandler.php 2009-08-21 12:10:54 UTC (rev 712) @@ -29,7 +29,7 @@ // tidy up vacation table. $active = db_get_boolean(False); $username = escape_string($this->username); - $result = db_query("UPDATE $table_vacation SET active = $active WHERE email='$username'"); + $result = db_query("UPDATE $table_vacation SET active = '$active' WHERE email='$username'"); $result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$username'"); /* crap error handling; oh for exceptions... */ return true; @@ -95,12 +95,12 @@ $active = db_get_boolean(True); // check if the user has a vacation entry already, if so just update it if($result['rows'] == 1) { - $result = db_query("UPDATE $table_vacation SET active = $active, body = '$body', subject = '$subject', created = NOW() WHERE email = '$username'"); + $result = db_query("UPDATE $table_vacation SET active = '$active', body = '$body', subject = '$subject', created = NOW() WHERE email = '$username'"); } else { $tmp = preg_split ('/@/', $username); $domain = escape_string($tmp[1]); - $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$username','$subject','$body','$domain',NOW(),$active)"); + $result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$username','$subject','$body','$domain',NOW(),'$active')"); } $ah = new AliasHandler($this->username); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-02-27 23:22:00
|
Revision: 975 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=975&view=rev Author: christian_boltz Date: 2011-02-27 23:21:54 +0000 (Sun, 27 Feb 2011) Log Message: ----------- model/AliasHandler.php: - fix comment for delete() - it no longer has a param model/*: - add svn $Id line Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/DomainHandler.php trunk/model/UserHandler.php trunk/model/VacationHandler.php Property Changed: ---------------- trunk/model/AliasHandler.php trunk/model/DomainHandler.php trunk/model/UserHandler.php trunk/model/VacationHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2011-02-27 23:06:57 UTC (rev 974) +++ trunk/model/AliasHandler.php 2011-02-27 23:21:54 UTC (rev 975) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * Handlers User level alias actions - e.g. add alias, get aliases, update etc. @@ -209,7 +210,6 @@ } /** - * @param alias address * @return true on success false on failure */ public function delete(){ Property changes on: trunk/model/AliasHandler.php ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2011-02-27 23:06:57 UTC (rev 974) +++ trunk/model/DomainHandler.php 2011-02-27 23:21:54 UTC (rev 975) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * Handlers User level alias actions - e.g. add alias, get aliases, update etc. Property changes on: trunk/model/DomainHandler.php ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/model/UserHandler.php =================================================================== --- trunk/model/UserHandler.php 2011-02-27 23:06:57 UTC (rev 974) +++ trunk/model/UserHandler.php 2011-02-27 23:21:54 UTC (rev 975) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * Simple class to represent a user. Property changes on: trunk/model/UserHandler.php ___________________________________________________________________ Added: svn:keywords + Id Modified: trunk/model/VacationHandler.php =================================================================== --- trunk/model/VacationHandler.php 2011-02-27 23:06:57 UTC (rev 974) +++ trunk/model/VacationHandler.php 2011-02-27 23:21:54 UTC (rev 975) @@ -1,4 +1,5 @@ <?php +# $Id$ class VacationHandler { protected $username = null; Property changes on: trunk/model/VacationHandler.php ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-10-16 20:31:53
|
Revision: 1205 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1205&view=rev Author: christian_boltz Date: 2011-10-16 20:31:46 +0000 (Sun, 16 Oct 2011) Log Message: ----------- PFAHandler, AliasHandler: - move result() from AliasHandler to PFAHandler - AliasHandler now extends PFAHandler Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2011-10-16 19:33:31 UTC (rev 1204) +++ trunk/model/AliasHandler.php 2011-10-16 20:31:46 UTC (rev 1205) @@ -6,7 +6,7 @@ * @property $username name of alias * @property $return return of methods */ -class AliasHandler { +class AliasHandler extends PFAHandler { private $username = null; @@ -237,12 +237,6 @@ } } - /** - * @return return value of previously called method - */ - public function result() { - return $this->return; - } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-10-16 19:33:31 UTC (rev 1204) +++ trunk/model/PFAHandler.php 2011-10-16 20:31:46 UTC (rev 1205) @@ -1,5 +1,17 @@ <?php class PFAHandler { + + /** + * @return return value of previously called method + */ + public function result() { + return $this->return; + } + + + /** + * functions for basic input validation + */ function _inp_num($val) { return (int)($val); } @@ -12,5 +24,6 @@ # TODO: fetchmail specific. Not suited for mailbox/admin passwords. return base64_encode($val); } + } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-10-16 23:37:17
|
Revision: 1210 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1210&view=rev Author: christian_boltz Date: 2011-10-16 23:37:11 +0000 (Sun, 16 Oct 2011) Log Message: ----------- DomainHandler.php: - split add() function to - set() (validate values) and - store() (write to database) - set(): - replace $checked with $this->values - store validation summary in $this->values_valid PFAHandler.php: - change _inp_* functions to return true/false if value is (in)valid instead if the sanitized value. They now also set $this->errormsg[] (not the final solution, but works for now) Modified Paths: -------------- trunk/model/DomainHandler.php trunk/model/PFAHandler.php Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2011-10-16 22:32:22 UTC (rev 1209) +++ trunk/model/DomainHandler.php 2011-10-16 23:37:11 UTC (rev 1210) @@ -11,6 +11,8 @@ protected $id_field = null; protected $struct = array(); protected $new = 0; # 1 on create, otherwise 0 + protected $values = array(); + protected $values_valid = false; public $errormsg = array(); @@ -99,7 +101,7 @@ return $transports[$id-1]; } - public function add($values) { + public function set($values) { # TODO: make this a generic function for add and edit # TODO: move DB writes etc. to separate save() function (to allow on-the-fly validation before saving to DB) @@ -110,11 +112,12 @@ } # base validation - $checked = array(); + $this->values = array(); + $this->values_valid = false; foreach($this->struct as $key=>$row) { if ($row['editable'] == 0) { # not editable if ($this->new == 1) { - $checked[$key] = $row['default']; + $this->values[$key] = $row['default']; } } else { $func="_inp_".$row['type']; @@ -122,10 +125,12 @@ $val=$values[$key]; if ($row['type'] != "password" || strlen($values[$key]) > 0 || $this->new == 1) { # skip on empty (aka unchanged) password on edit if (method_exists($this, $func) ) { - $checked[$key] = $this->{$func}($values[$key]); + if ($this->{$func}($key, $values[$key])) { + $this->values[$key] = $values[$key]; + } } else { # TODO: warning if no validation function exists? - $checked[$key] = $values[$key]; + $this->values[$key] = $values[$key]; } } } @@ -133,9 +138,19 @@ # TODO: more validation -# $checked[$this->id_field] = $this->username; # should already be set (if $this->new) via values[$this->id_field] and the base check + if (count($this->errormsg) == 0) { + $this->values_valid = true; + } + return $this->values_valid; + } - $db_values = $checked; + function store() { + if ($this->values_valid == false) { + $this->errormsg[] = "one or more values are invalid!"; + return false; + } + + $db_values = $this->values; unset ($db_values['default_aliases']); # TODO: automate based on $this->struct $result = db_insert($this->db_table, $db_values); @@ -143,7 +158,7 @@ $this->errormsg[] = Lang::read('pAdminCreate_domain_result_error') . "\n(" . $this->username . ")\n"; return false; } else { - if ($this->new && $values['default_aliases']) { + if ($this->new && $this->values['default_aliases']) { foreach (Config::read('default_aliases') as $address=>$goto) { $address = $address . "@" . $this->username; # TODO: use AliasHandler->add instead of writing directly to the alias table Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-10-16 22:32:22 UTC (rev 1209) +++ trunk/model/PFAHandler.php 2011-10-16 23:37:11 UTC (rev 1210) @@ -12,17 +12,25 @@ /** * functions for basic input validation */ - function _inp_num($val) { - return (int)($val); + function _inp_num($field, $val) { + $valid = is_numeric($val); + if ($val < -1) $valid = false; + if (!$valid) $this->errormsg[] = "$field must be numeric"; + return $valid; + # return (int)($val); } - function _inp_bool($val) { - return $val ? db_get_boolean(true): db_get_boolean(false); + function _inp_bool($field, $val) { + if ($val == "0" || $val == "1") return true; + $this->errormsg[] = "$field must be boolean"; + return false; + # return $val ? db_get_boolean(true): db_get_boolean(false); } - function _inp_password($val){ + function _inp_password($field, $val){ # TODO: fetchmail specific. Not suited for mailbox/admin passwords. - return base64_encode($val); + 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...> - 2011-10-30 20:58:07
|
Revision: 1254 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1254&view=rev Author: christian_boltz Date: 2011-10-30 20:58:00 +0000 (Sun, 30 Oct 2011) Log Message: ----------- PFAHandler.php, DomainHandler.php: - move definition of public and protected variables to DomainHandler.php - move lots of functions from DomainHandler.php to PFAHandler.php: - __construct() - init() - set() - store() - read_from_db() - view() - getList() - getStruct() - getId_field() All functions and comments were moved without any modification. See the history of DomainHandler.php if you need to find out something about the history of the functions listed above. Modified Paths: -------------- trunk/model/DomainHandler.php trunk/model/PFAHandler.php Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2011-10-30 20:39:14 UTC (rev 1253) +++ trunk/model/DomainHandler.php 2011-10-30 20:58:00 UTC (rev 1254) @@ -6,59 +6,6 @@ */ class DomainHandler extends PFAHandler { - protected $id = null; - protected $db_table = null; - protected $id_field = null; - protected $struct = array(); - protected $new = 0; # 1 on create, otherwise 0 - protected $values = array(); - protected $values_valid = false; - - public $errormsg = array(); - - # messages used in various functions - # (stored separately to make the functions reuseable) - protected $msg = array(); - - /** - * Constructor: fill $struct etc. - * @param string $new - */ - public function __construct($new = 0) { - if ($new) $this->new = 1; - $this->initStruct(); - $this->initMsg(); - } - - /** - * initialize with $id and check if it is valid - * @param string $id - */ - public function init($id) { - $this->id = strtolower($id); - - $exists = $this->view(false); - - if ($this->new) { - if ($exists) { - $this->errormsg[$this->id_field] = Lang::read($this->msg['error_already_exists']); - return false; - } elseif (!$this->validate_new_id() ) { - # errormsg filled by validate_new_id() - return false; - } else { - return true; - } - } else { # edit mode - if (!$exists) { - $this->errormsg[$this->id_field] = Lang::read($this->msg['error_does_not_exist']); - return false; - } else { - return true; - } - } - } - protected function validate_new_id() { $valid = check_domain($this->id); @@ -146,14 +93,6 @@ } } - public function getStruct() { - return $this->struct; - } - - public function getId_field() { - return $this->id_field; - } - public function getTransports() { return Config::read('transport_options'); } @@ -164,101 +103,7 @@ return $transports[$id-1]; } - public function set($values) { - # TODO: make this a generic function for add and edit - - if ($this->new == 1) { - $values[$this->id_field] = $this->id; - } - - # base validation - $this->values = array(); - $this->values_valid = false; - foreach($this->struct as $key=>$row) { - if ($row['editable'] == 0) { # not editable - if ($this->new == 1) { - $this->values[$key] = $row['default']; - } - } else { - if (isset($values[$key])) { - if ($row['type'] != "password" || 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) - $func="_inp_".$row['type']; - if (method_exists($this, $func) ) { - if (!$this->{$func}($key, $values[$key])) $valid = false; - } else { - # TODO: warning if no validation function exists? - } - - # validate based on field name (_field_$fieldname) - $func="_field_".$key; - if (method_exists($this, $func) ) { - if (!$this->{$func}($key, $values[$key])) $valid = false; - } - - if ($valid) { - $this->values[$key] = $values[$key]; - } - } - } elseif ($this->new) { # new, field not set in input data - $this->errormsg[] = "field $key is missing"; - # echo "MISSING / not set: $key\n"; - } else { # edit, field unchanged - # echo "skipped / not set: $key\n"; - } - } - } - - if (count($this->errormsg) == 0) { - $this->values_valid = true; - } - return $this->values_valid; - } - /** - * store $this->values in the database - * calls $this->storemore() where additional things can be done - */ - public function store() { - if ($this->values_valid == false) { - $this->errormsg[] = "one or more values are invalid!"; - return false; - } - - $db_values = $this->values; - - foreach(array_keys($db_values) as $key) { - switch ($this->struct[$key]['type']) { # modify field content for some types - case 'bool': - $db_values[$key] = db_get_boolean($db_values[$key]); - break; - # TODO: passwords -> pacrypt() - } - 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 - } - - if ($this->new) { - $result = db_insert($this->db_table, $db_values); - } else { - $result = db_update($this->db_table, $this->id_field, $this->id, $db_values); - } - if ($result != 1) { - $this->errormsg[] = Lang::read($this->msg['store_error']) . "\n(" . $this->id . ")\n"; # TODO: change message + use sprintf - return false; - } - - $result = $this->storemore(); - - if ($result) { - db_log ($this->id, $this->msg['logname'], ""); - } - return $result; - } - - /** * called by $this->store() after storing $this->values in the database * can be used to update additional tables, call scripts etc. */ @@ -293,108 +138,6 @@ } /** - * 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 - */ - protected function read_from_db($condition) { - $select_cols = array(); - - $yes = escape_string(Lang::read('YES')); - $no = escape_string(Lang::read('NO')); - - # TODO: replace hardcoded %Y-%m-%d with a country-specific date format via *.lang? - # TODO: (not too easy because pgsql uses a different formatstring format :-/ ) - if (Config::read('database_type') == 'pgsql') { - $formatted_date = "TO_DATE(text(###KEY###), 'YYYY-mm-dd')"; - } else { - $formatted_date = "DATE_FORMAT(###KEY###, '%Y-%m-%d')"; - } - - $colformat = array( - 'ts' => "$formatted_date AS ###KEY###, ###KEY### AS _###KEY###", - '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###", - ); - - # 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['select'] != '') $key = $row['select']; - - if ($row['extrafrom'] != '') $extrafrom = $extrafrom . " " . $row['extrafrom'] . "\n"; - - if (isset($colformat[$row['type']])) { - $select_cols[] = str_replace('###KEY###', $key, $colformat[$row['type']] ); - } else { - $select_cols[] = $key; - } - - } - } - - $cols = join(',', $select_cols); - $table = table_by_key($this->db_table); - - if (is_array($condition)) { - $where = db_where_clause($condition, $this->struct); - } else { - $where = " WHERE $condition "; - } - - $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; - $result = db_query($query); - - $db_result = array(); - if ($result['rows'] != 0) { - while ($row = db_assoc ($result['result'])) { - $db_result[] = $row; - } - } - - return $db_result; - } - - /** - * get the settings of a domain - * @param array or string $condition - * @return bool - true if at least one domain was found - * The data is stored in $this->return (as associative array of column => value) - */ - public function view($errors=true) { - $result = $this->read_from_db(array($this->id_field => $this->id) ); - if (count($result) == 1) { - $this->return = $result[0]; - return true; - } - - if ($errors) $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); -# $this->errormsg[] = $result['error']; - return false; - } - - /** - * get a list of one or more domains with all settings - * @param array or string $condition - * @return bool - true if at least one domain 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) { - $result = $this->read_from_db($condition); - if (count($result) >= 1) { - $this->return = $result; - return true; - } - -# $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); -# $this->errormsg[] = $result['error']; - return false; - } - - - - /** * @return true on success false on failure */ public function delete() { Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-10-30 20:39:14 UTC (rev 1253) +++ trunk/model/PFAHandler.php 2011-10-30 20:58:00 UTC (rev 1254) @@ -1,7 +1,271 @@ <?php class PFAHandler { + protected $id = null; + protected $db_table = null; + protected $id_field = null; + protected $struct = array(); + protected $new = 0; # 1 on create, otherwise 0 + protected $values = array(); + protected $values_valid = false; + + public $errormsg = array(); + + # messages used in various functions + # (stored separately to make the functions reuseable) + protected $msg = array(); + + + /** + * Constructor: fill $struct etc. + * @param string $new + */ + public function __construct($new = 0) { + if ($new) $this->new = 1; + $this->initStruct(); + $this->initMsg(); + } + + /** + * initialize with $id and check if it is valid + * @param string $id + */ + public function init($id) { + $this->id = strtolower($id); + + $exists = $this->view(false); + + if ($this->new) { + if ($exists) { + $this->errormsg[$this->id_field] = Lang::read($this->msg['error_already_exists']); + return false; + } elseif (!$this->validate_new_id() ) { + # errormsg filled by validate_new_id() + return false; + } else { + return true; + } + } else { # edit mode + if (!$exists) { + $this->errormsg[$this->id_field] = Lang::read($this->msg['error_does_not_exist']); + return false; + } else { + return true; + } + } + } + + + + + public function set($values) { + # TODO: make this a generic function for add and edit + + if ($this->new == 1) { + $values[$this->id_field] = $this->id; + } + + # base validation + $this->values = array(); + $this->values_valid = false; + foreach($this->struct as $key=>$row) { + if ($row['editable'] == 0) { # not editable + if ($this->new == 1) { + $this->values[$key] = $row['default']; + } + } else { + if (isset($values[$key])) { + if ($row['type'] != "password" || 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) + $func="_inp_".$row['type']; + if (method_exists($this, $func) ) { + if (!$this->{$func}($key, $values[$key])) $valid = false; + } else { + # TODO: warning if no validation function exists? + } + + # validate based on field name (_field_$fieldname) + $func="_field_".$key; + if (method_exists($this, $func) ) { + if (!$this->{$func}($key, $values[$key])) $valid = false; + } + + if ($valid) { + $this->values[$key] = $values[$key]; + } + } + } elseif ($this->new) { # new, field not set in input data + $this->errormsg[] = "field $key is missing"; + # echo "MISSING / not set: $key\n"; + } else { # edit, field unchanged + # echo "skipped / not set: $key\n"; + } + } + } + + if (count($this->errormsg) == 0) { + $this->values_valid = true; + } + return $this->values_valid; + } + + /** + * store $this->values in the database + * calls $this->storemore() where additional things can be done + */ + public function store() { + if ($this->values_valid == false) { + $this->errormsg[] = "one or more values are invalid!"; + return false; + } + + $db_values = $this->values; + + foreach(array_keys($db_values) as $key) { + switch ($this->struct[$key]['type']) { # modify field content for some types + case 'bool': + $db_values[$key] = db_get_boolean($db_values[$key]); + break; + # TODO: passwords -> pacrypt() + } + 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 + } + + if ($this->new) { + $result = db_insert($this->db_table, $db_values); + } else { + $result = db_update($this->db_table, $this->id_field, $this->id, $db_values); + } + if ($result != 1) { + $this->errormsg[] = Lang::read($this->msg['store_error']) . "\n(" . $this->id . ")\n"; # TODO: change message + use sprintf + return false; + } + + $result = $this->storemore(); + + if ($result) { + db_log ($this->id, $this->msg['logname'], ""); + } + return $result; + } + + + + /** + * 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 + */ + protected function read_from_db($condition) { + $select_cols = array(); + + $yes = escape_string(Lang::read('YES')); + $no = escape_string(Lang::read('NO')); + + # TODO: replace hardcoded %Y-%m-%d with a country-specific date format via *.lang? + # TODO: (not too easy because pgsql uses a different formatstring format :-/ ) + if (Config::read('database_type') == 'pgsql') { + $formatted_date = "TO_DATE(text(###KEY###), 'YYYY-mm-dd')"; + } else { + $formatted_date = "DATE_FORMAT(###KEY###, '%Y-%m-%d')"; + } + + $colformat = array( + 'ts' => "$formatted_date AS ###KEY###, ###KEY### AS _###KEY###", + '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###", + ); + + # 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['select'] != '') $key = $row['select']; + + if ($row['extrafrom'] != '') $extrafrom = $extrafrom . " " . $row['extrafrom'] . "\n"; + + if (isset($colformat[$row['type']])) { + $select_cols[] = str_replace('###KEY###', $key, $colformat[$row['type']] ); + } else { + $select_cols[] = $key; + } + + } + } + + $cols = join(',', $select_cols); + $table = table_by_key($this->db_table); + + if (is_array($condition)) { + $where = db_where_clause($condition, $this->struct); + } else { + $where = " WHERE $condition "; + } + + $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; + $result = db_query($query); + + $db_result = array(); + if ($result['rows'] != 0) { + while ($row = db_assoc ($result['result'])) { + $db_result[] = $row; + } + } + + return $db_result; + } + + /** + * get the settings of a domain + * @param array or string $condition + * @return bool - true if at least one domain was found + * The data is stored in $this->return (as associative array of column => value) + */ + public function view($errors=true) { + $result = $this->read_from_db(array($this->id_field => $this->id) ); + if (count($result) == 1) { + $this->return = $result[0]; + return true; + } + + if ($errors) $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); +# $this->errormsg[] = $result['error']; + return false; + } + + /** + * get a list of one or more domains with all settings + * @param array or string $condition + * @return bool - true if at least one domain 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) { + $result = $this->read_from_db($condition); + if (count($result) >= 1) { + $this->return = $result; + return true; + } + +# $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); +# $this->errormsg[] = $result['error']; + return false; + } + + + + public function getStruct() { + return $this->struct; + } + + public function getId_field() { + return $this->id_field; + } + + /** * @return return value of previously called method */ public function result() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-12-19 22:50:18
|
Revision: 1297 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1297&view=rev Author: christian_boltz Date: 2011-12-19 22:50:12 +0000 (Mon, 19 Dec 2011) Log Message: ----------- PFAHandler.php: - store unchecked input values given to set() in $this->RAWvalues before running the validation functions. This is needed to make comparing password and password2 possible. (uppercase RAW intentional to make usage harder - hopefully hard enough to give everybody who wants to use it some time to think over secure programming when working with unchecked input ;-) AdminHandler.php: - compare password and password2 This commit means AdminHandler is complete :-) (Note: db_log can't handle the admin-related log actions yet.) Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2011-12-18 21:30:21 UTC (rev 1296) +++ trunk/model/AdminHandler.php 2011-12-19 22:50:12 UTC (rev 1297) @@ -206,6 +206,20 @@ } } + /** + * compare password / password2 field + * error message will be displayed at the password2 field + */ + protected function _field_password2($field, $val) { + if ($this->RAWvalues['password'] == $this->RAWvalues['password2']) { + unset ($this->errormsg['password2']); # no need to warn about too short etc. passwords - it's enough to display this message at the 'password' field + return true; + } + + $this->errormsg['password2'] = Lang::read('pAdminEdit_admin_password_text_error'); + return false; + } + } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-12-18 21:30:21 UTC (rev 1296) +++ trunk/model/PFAHandler.php 2011-12-19 22:50:12 UTC (rev 1297) @@ -7,6 +7,7 @@ protected $struct = array(); protected $new = 0; # 1 on create, otherwise 0 protected $values = array(); + protected $RAWvalues = array(); # unchecked (!) input given to set() - use it carefully! protected $values_valid = false; protected $admin_username = ""; # if set, restrict $allowed_domains to this admin protected $domain_field = ""; # column containing the domain @@ -88,6 +89,9 @@ $values[$this->id_field] = $this->id; } + $this->RAWvalues = $values; # allows comparison of two fields before the second field is checked + # Warning: $this->RAWvalues contains unchecked input data - use it carefully! + # base validation $this->values = array(); $this->values_valid = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-12-26 18:27:31
|
Revision: 1309 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1309&view=rev Author: christian_boltz Date: 2011-12-26 18:27:25 +0000 (Mon, 26 Dec 2011) Log Message: ----------- AliasdomainHandler.php, PFAHandler.php: - move empty storemore() function from AliasdomainHandler to PFAHandler Modified Paths: -------------- trunk/model/AliasdomainHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AliasdomainHandler.php =================================================================== --- trunk/model/AliasdomainHandler.php 2011-12-26 16:26:30 UTC (rev 1308) +++ trunk/model/AliasdomainHandler.php 2011-12-26 18:27:25 UTC (rev 1309) @@ -100,13 +100,6 @@ return true; # alias_domain is enum, so we don't need to check its syntax etc. } - /** - * called by $this->store() after storing $this->values in the database - * can be used to update additional tables, call scripts etc. - */ - protected function storemore() { - return true; # do nothing, successfully ;-) - } /** * @return true on success false on failure Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-12-26 16:26:30 UTC (rev 1308) +++ trunk/model/PFAHandler.php 2011-12-26 18:27:25 UTC (rev 1309) @@ -189,6 +189,13 @@ return $result; } + /** + * called by $this->store() after storing $this->values in the database + * can be used to update additional tables, call scripts etc. + */ + protected function storemore() { + return true; # do nothing, successfully ;-) + } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-08 23:07:28
|
Revision: 1353 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1353&view=rev Author: christian_boltz Date: 2012-04-08 23:07:22 +0000 (Sun, 08 Apr 2012) Log Message: ----------- PFAHandler: - add support for LIMIT/OFFSET to getList() AliasHandler: - overload getList() to only return non-mailbox aliases Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-08 22:20:55 UTC (rev 1352) +++ trunk/model/AliasHandler.php 2012-04-08 23:07:22 UTC (rev 1353) @@ -244,6 +244,11 @@ return $db_result; } + public function getList($condition, $limit=-1, $offset=-1) { + # only list aliases that do not belong to mailboxes + return parent::getList( "__is_mailbox IS NULL AND ( $condition )", $limit, $offset); + } + /* delete is already implemented in the "old functions" section public function delete() { $this->errormsg[] = '*** Alias domain deletion not implemented yet ***'; Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2012-04-08 22:20:55 UTC (rev 1352) +++ trunk/model/PFAHandler.php 2012-04-08 23:07:22 UTC (rev 1353) @@ -214,7 +214,7 @@ * @param array or string - condition (an array will be AND'ed using db_where_clause, a string will be directly used) * @return array - rows */ - protected function read_from_db($condition) { + protected function read_from_db($condition, $limit=-1, $offset=-1) { $select_cols = array(); $yes = escape_string(Lang::read('YES')); @@ -266,6 +266,11 @@ } $query = "SELECT $cols FROM $table $extrafrom $where ORDER BY " . $this->id_field; + + if ($limit > -1 && $offset > -1) { + $query .= " LIMIT $limit OFFSET $offset "; + } + $result = db_query($query); $db_result = array(); @@ -309,8 +314,8 @@ * @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) { - $result = $this->read_from_db($condition); + public function getList($condition, $limit=-1, $offset=-1) { + $result = $this->read_from_db($condition, $limit, $offset); if (count($result) >= 1) { $this->return = $result; return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-09 02:00:16
|
Revision: 1359 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1359&view=rev Author: christian_boltz Date: 2012-04-09 02:00:10 +0000 (Mon, 09 Apr 2012) Log Message: ----------- VacationHandler: - move getVacationAlias to AliasHandler (the only code that uses it) AliasHandler: - insert (and rewrite) function getVacationAlias() - change $vh->getVacationAlias() calls to $this->getVacationAlias. This also means we don't need to call VacationHandler anymore to get the vacation alias. Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/VacationHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-09 01:48:04 UTC (rev 1358) +++ trunk/model/AliasHandler.php 2012-04-09 02:00:10 UTC (rev 1359) @@ -201,8 +201,7 @@ } if ($values['on_vacation']) { - $vh = new VacationHandler($this->id); - $values['goto'][] = $vh->getVacationAlias(); + $values['goto'][] = $this->getVacationAlias(); } if ($oldvalues['is_mailbox']) { # alias belongs to a mailbox - add/keep mailbox to/in goto @@ -228,12 +227,8 @@ foreach ($db_result as $key => $value) { $db_result[$key]['goto'] = explode(',', $db_result[$key]['goto']); - $vh = new VacationHandler($this->id); - $vacation_alias = $vh->getVacationAlias(); # TODO: move getVacationAlias to functions.inc.php to avoid the need - # for lots of VacationHandler instances (performance)? - # Vacation enabled? - list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $vacation_alias); + list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $this->getVacationAlias() ); # if it is a mailbox, does the alias point to the mailbox? if ($db_result[$key]['is_mailbox']) { @@ -291,6 +286,18 @@ } } + + /** + * Returns the vacation alias for this user. + * i.e. if this user's username was ro...@ex..., and the autoreply domain was set to + * autoreply.fish.net in config.inc.php we'd return roger#exa...@au... + * @return string an email alias. + */ + protected function getVacationAlias() { + $vacation_goto = str_replace('@', '#', $this->id); + return $vacation_goto . '@' . Config::read('vacation_domain'); + } + /********************************************************************************************************************************************************** old function from non-PFAHandler times of AliasHandler Will be replaced by a global delete() function in PFAHandler Modified: trunk/model/VacationHandler.php =================================================================== --- trunk/model/VacationHandler.php 2012-04-09 01:48:04 UTC (rev 1358) +++ trunk/model/VacationHandler.php 2012-04-09 02:00:10 UTC (rev 1359) @@ -155,18 +155,5 @@ return true; } - /** - * Returns the vacation alias for this user. - * i.e. if this user's username was ro...@ex..., and the autoreply domain was set to - * autoreply.fish.net in config.inc.php we'd return roger#exa...@au... - * @return string an email alias. - */ - public function getVacationAlias() { - global $CONF; - $vacation_domain = $CONF['vacation_domain']; - $vacation_goto = str_replace('@', '#', $this->username); - $vacation_goto = "{$vacation_goto}@{$vacation_domain}"; - return $vacation_goto; - } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-09 15:41:45
|
Revision: 1361 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1361&view=rev Author: christian_boltz Date: 2012-04-09 15:41:39 +0000 (Mon, 09 Apr 2012) Log Message: ----------- PFAHandler: - add function compare_password_fields() - compares if two fields contain the same password (based on _field_password2() from AdminHandler) and use pEdit_mailbox_password_text_error as error message because it doesn't contain "... or empty" AdminHandler: - replace _field_password2() with a call to $this->compare_password_fields() Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2012-04-09 15:02:16 UTC (rev 1360) +++ trunk/model/AdminHandler.php 2012-04-09 15:41:39 UTC (rev 1361) @@ -213,13 +213,7 @@ * error message will be displayed at the password2 field */ protected function _field_password2($field, $val) { - if ($this->RAWvalues['password'] == $this->RAWvalues['password2']) { - unset ($this->errormsg['password2']); # no need to warn about too short etc. passwords - it's enough to display this message at the 'password' field - return true; - } - - $this->errormsg['password2'] = Lang::read('pAdminEdit_admin_password_text_error'); - return false; + return $this->compare_password_fields('password', 'password2'); } } Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2012-04-09 15:02:16 UTC (rev 1360) +++ trunk/model/PFAHandler.php 2012-04-09 15:41:39 UTC (rev 1361) @@ -346,6 +346,22 @@ } + /** + * compare two password fields + * typically called from _field_password2() + * @param string $field1 - "password" field + * @param string $field2 - "repeat password" field + */ + protected function compare_password_fields($field1, $field2) { + if ($this->RAWvalues[$field1] == $this->RAWvalues[$field2]) { + unset ($this->errormsg[$field2]); # no need to warn about too short etc. passwords - it's enough to display this message at the 'password' field + return true; + } + + $this->errormsg[$field2] = Lang::read('pEdit_mailbox_password_text_error'); + return false; + } + /************************************************************************** * functions for basic input validation */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-29 20:52:36
|
Revision: 1382 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1382&view=rev Author: christian_boltz Date: 2012-04-29 20:52:30 +0000 (Sun, 29 Apr 2012) Log Message: ----------- AliasHandler.php: - initStruct(): add 'editable' virtual field - add various comments AdminHandler.php: - add some comments Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/AliasHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2012-04-29 19:12:33 UTC (rev 1381) +++ trunk/model/AdminHandler.php 2012-04-29 20:52:30 UTC (rev 1382) @@ -128,6 +128,7 @@ * can be used to update additional tables, call scripts etc. */ protected function storemore() { + # store list of allowed domains in the domain_admins table if (isset($this->values['domains'])) { if (is_array($this->values['domains'])) { $domains = $this->values['domains']; @@ -173,6 +174,7 @@ protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $row) { + # convert 'domains' field to an array if ($row['domains'] == '') { $db_result[$key]['domains'] = array(); } else { Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-29 19:12:33 UTC (rev 1381) +++ trunk/model/AliasHandler.php 2012-04-29 20:52:30 UTC (rev 1382) @@ -20,6 +20,8 @@ $this->db_table = 'alias'; $this->id_field = 'address'; + # hide 'goto_mailbox' if $this->new + # (for existing aliases, init() hides it for non-mailbox aliases) $mbgoto = 1 - $this->new; $this->struct=array( @@ -46,13 +48,21 @@ ' ) AS __mailbox ON __mailbox_username = address' ), 'goto_mailbox' => pacol( $mbgoto, $mbgoto,$mbgoto,'bool', 'pEdit_alias_forward_and_store' , '' , 0, /*options*/ '', - /*not_in_db*/ 1 ), + /*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value 'on_vacation' => pacol( 1, 0, 1, 'bool', 'pUsersMenu_vacation' , '' , 0 , /*options*/ '', - /*not_in_db*/ 1 ), + /*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value - TODO: read active flag from vacation table instead? 'active' => pacol( 1, 1, 1, 'bool', 'pAdminEdit_domain_active' , '' , 1 ), 'created' => pacol( 0, 0, 1, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'pAdminList_domain_modified' , '' ), + 'editable' => pacol( 0, 0, 1, 'int', '' , '' , 0 , + # aliases listed in $CONF[default_aliases] are read-only for domain admins if $CONF[special_alias_control] is NO. + # technically 'editable' is bool, but the automatic bool conversion breaks the query. Flagging it as int avoids this problem. + # Maybe having a vbool type (without the automatic conversion) would be cleaner - we'll see if we need it. + /*options*/ '', + /*not_in_db*/ 0, + /*dont_write_to_db*/ 1, + /*select*/ '1 as editable' ), ); } @@ -91,6 +101,10 @@ } + /** + * AliasHandler needs some special handling in init() and therefore overloads the function. + * It also calls parent::init() + */ public function init($id) { @list($local_part,$domain) = explode ('@', $id); # supress error message if $id doesn't contain '@' @@ -220,11 +234,12 @@ } } - $this->values['goto'] = join(',', $values['goto']); # TODO: add mailbox and vacation aliases + $this->values['goto'] = join(',', $values['goto']); } protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $value) { + # split comma-separated 'goto' into an array $db_result[$key]['goto'] = explode(',', $db_result[$key]['goto']); # Vacation enabled? @@ -232,12 +247,15 @@ # if it is a mailbox, does the alias point to the mailbox? if ($db_result[$key]['is_mailbox']) { - # this intentionally does not catch mailbox targets with recipient delimiter. + # this intentionally does not match mailbox targets with recipient delimiter. # if it would, we would have to make goto_mailbox a text instead of a bool (which would annoy 99% of the users) list($db_result[$key]['goto_mailbox'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $key); } else { # not a mailbox $db_result[$key]['goto_mailbox'] = 0; } + + # TODO: set 'editable' to 0 if not superadmin, $CONF[special_alias_control] == NO and alias is in $CONF[default_aliases] + # TODO: see check_alias_owner() in functions.inc.php } return $db_result; @@ -269,6 +287,7 @@ if (substr($singlegoto, 0, 1) == '@') { # domain-wide forward - check only the domain part # Note: alias domains are better, but we should keep this way supported for backward compatibility # and because alias domains can't forward to external domains + # TODO: allow this only if $this->id is a catchall? list (/*NULL*/, $domain) = explode('@', $singlegoto); if (!check_domain($domain)) { $errors[] = "invalid: $singlegoto"; # TODO: better error message @@ -279,7 +298,7 @@ } if (count($errors)) { - $this->errormsg[$field] = join(" ", $errors); + $this->errormsg[$field] = join(" ", $errors); # TODO: find a way to display multiple error messages per field return false; } else { return true; @@ -289,6 +308,9 @@ protected function _missing_on_vacation($field) { return $this->set_default_value($field); } protected function _missing_active ($field) { return $this->set_default_value($field); } + /** + * on $this->new, set localpart based on address + */ protected function _missing_localpart ($field) { if (isset($this->RAWvalues['address'])) { $parts = explode('@', $this->RAWvalues['address']); @@ -296,6 +318,9 @@ } } + /** + * on $this->new, set localpart based on address + */ protected function _missing_domain ($field) { if (isset($this->RAWvalues['address'])) { $parts = explode('@', $this->RAWvalues['address']); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-05-06 20:01:39
|
Revision: 1385 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1385&view=rev Author: christian_boltz Date: 2012-05-06 20:01:32 +0000 (Sun, 06 May 2012) Log Message: ----------- PFAHandler: - make PFAHandler an "abstract class" - add functions that must be implemented by every *Handler class as abstract functions: - abstract protected function initStruct(); - abstract protected function initMsg(); - abstract public function webformConfig(); - abstract protected function validate_new_id(); - lots of additional comments AdminHandler, AliasdomainHandler, DomainHandler, MailboxHandler: - remove comments that are now in PFAHandler Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/AliasdomainHandler.php trunk/model/DomainHandler.php trunk/model/MailboxHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2012-05-06 18:36:03 UTC (rev 1384) +++ trunk/model/AdminHandler.php 2012-05-06 20:01:32 UTC (rev 1385) @@ -26,17 +26,6 @@ # TODO: shorter PALANG labels ;-) # TODO: hardcode 'default' to Config::read in pacol()? - # values for the "type" column: - # text one line of text - # pass password (will be encrypted with pacrypt()) - # num number - # txtl text "list" - array of one line texts - # 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 - # list like enum, but allow multiple selections - # NOTE: There are dependencies between domains and domain_count # NOTE: If you disable "display in list" for domain_count, the SQL query for domains might break. # NOTE: (Disabling both shouldn't be a problem.) @@ -84,9 +73,6 @@ ); } - # messages used in various functions. - # always list the key to hand over to Lang::read - # the only exception is 'logname' which uses the key for db_log protected function initMsg() { $this->msg['error_already_exists'] = 'pAdminCreate_admin_username_text_error2'; # TODO: better error message $this->msg['error_does_not_exist'] = 'pAdminEdit_admin_result_error'; # TODO: better error message @@ -99,9 +85,6 @@ } } - /* - * Configuration for the web interface - */ public function webformConfig() { if ($this->new) { $successmsg = 'pAdminCreate_admin_result_success'; Modified: trunk/model/AliasdomainHandler.php =================================================================== --- trunk/model/AliasdomainHandler.php 2012-05-06 18:36:03 UTC (rev 1384) +++ trunk/model/AliasdomainHandler.php 2012-05-06 20:01:32 UTC (rev 1385) @@ -63,9 +63,6 @@ return $success; } - # messages used in various functions. - # always list the key to hand over to Lang::read - # the only exception is 'logname' which uses the key for db_log protected function initMsg() { $this->msg['error_already_exists'] = 'pCreate_alias_domain_error2'; # TODO: better error message $this->msg['error_does_not_exist'] = 'pCreate_alias_domain_error2'; # TODO: better error message @@ -78,9 +75,6 @@ } } - /* - * Configuration for the web interface - */ public function webformConfig() { return array( # $PALANG labels Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2012-05-06 18:36:03 UTC (rev 1384) +++ trunk/model/DomainHandler.php 2012-05-06 20:01:32 UTC (rev 1385) @@ -31,14 +31,6 @@ $quota = boolconf('quota') ? 1 : 0; # TOOD: use a function or write a Config::intbool function $dom_q = boolconf('domain_quota') ? 1 : 0; # TOOD: use a function or write a Config::intbool function - # values for the "type" column: - # text one line of text - # num number - # 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 - # NOTE: There are dependencies between alias_count, mailbox_count and total_quota. # NOTE: If you disable "display in list" for one of them, the SQL query for the others might break. # NOTE: (Disabling all of them shouldn't be a problem.) @@ -78,9 +70,6 @@ ); } - # messages used in various functions. - # always list the key to hand over to Lang::read - # the only exception is 'logname' which uses the key for db_log protected function initMsg() { $this->msg['error_already_exists'] = 'pAdminCreate_domain_domain_text_error'; $this->msg['error_does_not_exist'] = 'domain_does_not_exist'; @@ -93,9 +82,6 @@ } } - /* - * Configuration for the web interface - */ public function webformConfig() { return array( # $PALANG labels Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2012-05-06 18:36:03 UTC (rev 1384) +++ trunk/model/MailboxHandler.php 2012-05-06 20:01:32 UTC (rev 1385) @@ -40,9 +40,6 @@ ); } - # messages used in various functions. - # always list the key to hand over to Lang::read - # the only exception is 'logname' which uses the key for db_log protected function initMsg() { $this->msg['error_already_exists'] = 'pCreate_mailbox_username_text_error2'; $this->msg['error_does_not_exist'] = 'pCreate_mailbox_username_text_error1'; @@ -55,9 +52,6 @@ } } - /* - * Configuration for the web interface - */ public function webformConfig() { if ($this->new) { # the webform will display a local_part field + domain dropdown on $new $this->struct['username']['display_in_form'] = 0; Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2012-05-06 18:36:03 UTC (rev 1384) +++ trunk/model/PFAHandler.php 2012-05-06 20:01:32 UTC (rev 1385) @@ -1,5 +1,5 @@ <?php -class PFAHandler { +abstract class PFAHandler { /** * public variables @@ -71,7 +71,8 @@ /** * Constructor: fill $struct etc. - * @param string $new + * @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 */ public function __construct($new = 0, $admin_username = "") { if ($new) $this->new = 1; @@ -97,11 +98,56 @@ $this->initMsg(); } + /** + * ensure a lazy programmer can't give access to all items accidently + * + * to intentionally disable the check if $this->domain_field is empty, override this function + */ protected function no_domain_field() { if ($this->admin_username != "") die('Attemp to restrict domains without setting $this->domain_field!'); } /** + * init $this->struct (an array of pacol() results) + * see pacol() in functions.inc.php for all available parameters + * + * available values for the "type" column: + * text one line of text + * pass password (will be encrypted with pacrypt()) + * num number + * txtl text "list" - array of one line texts + * 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 + * 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 + * + */ + abstract protected function initStruct(); + + /** + * init $this->msg[] with messages used in various functions. + * + * always list the key to hand over to Lang::read + * the only exception is 'logname' which uses the key for db_log + * + * The values can depend on $this->new + * TODO: use separate keys edit_* and new_* and choose the needed message at runtime + */ + abstract protected function initMsg(); + + /** + * returns an array with some labels and settings for the web interface + * can also change $this->struct to something that makes the web interface better + * (for example, it can make local_part and domain editable as separate fields + * so that users can choose the domain from a dropdown) + * + * @return array + */ + abstract public function webformConfig(); + + /** * initialize with $id and check if it is valid * @param string $id */ @@ -130,8 +176,14 @@ } } + /** + * on $new, check if the ID is valid (for example, check if it is a valid mail address syntax-wise) + * called by init() + * @return boolean true/false + * must also set $this->errormsg[$this->id_field] if ID is invalid + */ + abstract protected function validate_new_id(); - /** * set and verify values * @param array values - associative array with ($field1 => $value1, $field2 => $value2, ...) @@ -184,6 +236,7 @@ } # validate based on field name (_field_$fieldname) + # TODO: rename to _validate_$key ? $func="_field_".$key; if (method_exists($this, $func) ) { if (!$this->{$func}($key, $values[$key])) $valid = false; @@ -194,7 +247,7 @@ } } } elseif ($this->new) { # new, field not set in input data - $this->errormsg[] = "field $key is missing"; + $this->errormsg[] = "field $key is missing"; # TODO: make translateable # TODO: use $this->errormsg[$key] ? # echo "MISSING / not set: $key\n"; } else { # edit, field unchanged # echo "skipped / not set: $key\n"; @@ -221,8 +274,11 @@ /** * store $this->values in the database + * + * converts values based on $this->struct[*][type] (boolean, password encryption) + * * calls $this->storemore() where additional things can be done - * @return bool - true if all values are valid, otherwise false + * @return bool - true if all values were stored in the database, otherwise false * error messages (if any) are stored in $this->errormsg */ public function store() { @@ -275,7 +331,14 @@ /** * 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 (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!) * @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) @@ -295,7 +358,9 @@ } $colformat = array( + # 'ts' fields are always returned as $formatted_date, and the raw value as _$field 'ts' => "$formatted_date AS ###KEY###, ###KEY### AS _###KEY###", + # '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###", ); @@ -328,6 +393,8 @@ } if ($this->domain_field != "") { + # TODO: wrap where clause in (...) to avoid problems if OR is used? + # TODO: Note: this would need a change in db_where_clause not to include the WHERE keyword in the result $where .= " AND " . db_in_clause($this->domain_field, $this->allowed_domains); } @@ -352,6 +419,10 @@ return $db_result; } + /** + * allows to postprocess the database result + * called by read_from_db() + */ protected function read_from_db_postprocess($db_result) { return $db_result; } @@ -359,8 +430,8 @@ /** * get the values of an item - * @param array or string $condition - * @return bool - true if at least one item was found + * @param boolean (optional) - if false, $this->errormsg[] will not be filled in case of errors + * @return bool - true if 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 */ @@ -378,7 +449,7 @@ /** * get a list of one or more items with all values - * @param array or string $condition + * @param array or string $condition - see read_from_db for details * @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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-04-01 19:57:28
|
Revision: 1449 http://sourceforge.net/p/postfixadmin/code/1449 Author: christian_boltz Date: 2013-04-01 19:57:25 +0000 (Mon, 01 Apr 2013) Log Message: ----------- PFAHandler.php: - initStruct(): add some comments - add calledBy() and protected $called_by - calledBy() should be called if one *Handler class calls another one (to avoid loops etc.) AliasHandler.php: - replace $called_by_MailboxHandler / MailboxAliasConfig() with $called_by (code moved to PFAHandler->calledBy()) MailboxHandler.php: - beforestore(): update alias active status on edit (contains some whitespace changes - basically I removed "if ($this->new)" around most parts of the code) - use calledBy() instead of MailboxAliasConfig() Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/MailboxHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-04-01 17:03:25 UTC (rev 1448) +++ trunk/model/AliasHandler.php 2013-04-01 19:57:25 UTC (rev 1449) @@ -10,8 +10,6 @@ protected $domain_field = 'domain'; - protected $called_by_MailboxHandler = false; - /** * * @public @@ -105,13 +103,6 @@ } /** - * set a special flag if called by MailboxHandler - */ - public function MailboxAliasConfig() { - $this->called_by_MailboxHandler = true; - } - - /** * AliasHandler needs some special handling in init() and therefore overloads the function. * It also calls parent::init() */ @@ -177,7 +168,7 @@ * check number of existing aliases for this domain - is one more allowed? */ private function create_allowed($domain) { - if ($this->called_by_MailboxHandler) return true; # always allow creating an alias for a mailbox + if ($this->called_by == 'MailboxHandler') return true; # always allow creating an alias for a mailbox $limit = get_domain_properties ($domain); Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-04-01 17:03:25 UTC (rev 1448) +++ trunk/model/MailboxHandler.php 2013-04-01 19:57:25 UTC (rev 1449) @@ -189,33 +189,35 @@ $this->values['quota'] = $this->values['quota'] * Config::read('quota_multiplier'); # convert quota from MB to bytes } - if ($this->new) { - $ah = new AliasHandler(1, $this->admin_username); + $ah = new AliasHandler($this->new, $this->admin_username); - $ah->MailboxAliasConfig(); + $ah->calledBy('MailboxHandler'); - if ( !$ah->init($this->id) ) { - $this->errormsg[] = $ah->errormsg[0]; - return false; - } + if ( !$ah->init($this->id) ) { + $this->errormsg[] = $ah->errormsg[0]; + return false; + } - $alias_data = array( - # 'goto_mailbox' = 1; # would be technically correct, but setting 'goto' is easier - 'goto' => array($this->id), - 'active' => $this->values['active'], - ); + $alias_data = array(); - if (!$ah->set($alias_data)) { - $this->errormsg[] = $ah->errormsg[0]; - return false; - } + if (isset($this->values['active'])) { # might not be set in edit mode + $alias_data['active'] = $this->values['active']; + } - if (!$ah->store()) { - $this->errormsg[] = $ah->errormsg[0]; - return false; - } + if ($this->new) { + $alias_data['goto'] == array($this->id); # 'goto_mailbox' = 1; # would be technically correct, but setting 'goto' is easier } + if (!$ah->set($alias_data)) { + $this->errormsg[] = $ah->errormsg[0]; + return false; + } + + if (!$ah->store()) { + $this->errormsg[] = $ah->errormsg[0]; + return false; + } + return true; # still here? good! } Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-04-01 17:03:25 UTC (rev 1448) +++ trunk/model/PFAHandler.php 2013-04-01 19:57:25 UTC (rev 1449) @@ -69,6 +69,8 @@ # filled by initMsg() protected $msg = array(); + # called via another *Handler class? (use calledBy() to set this information) + protected $called_by = ''; /** @@ -125,6 +127,11 @@ * 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 * + * All database tables should have a 'created' and a 'modified' column. + * + * Do not use one of the following field names: + * edit, delete, prefill, webroot, help + * because those are used as parameter names in the web and/or commandline interface */ abstract protected function initStruct(); @@ -150,6 +157,16 @@ abstract public function webformConfig(); /** + * if you call one *Handler class from another one, tell the "child" *Handler as early as possible (before init()) + * The flag can be used to avoid logging, avoid loops etc. The exact handling is up to the implementation in *Handler + * + * @param string calling class + */ + public function calledBy($calling_class) { + $this->called_by = $calling_class; + } + + /** * 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...> - 2013-06-06 20:47:30
|
Revision: 1473 http://sourceforge.net/p/postfixadmin/code/1473 Author: christian_boltz Date: 2013-06-06 20:47:28 +0000 (Thu, 06 Jun 2013) Log Message: ----------- Config.php: - add intbool() - similar to bool(), but returns 1/0 instead of true/false DomainHandler.php - initStruct(): use Config::intbool() instead of boolconf() Modified Paths: -------------- trunk/model/Config.php trunk/model/DomainHandler.php Modified: trunk/model/Config.php =================================================================== --- trunk/model/Config.php 2013-06-06 20:40:54 UTC (rev 1472) +++ trunk/model/Config.php 2013-06-06 20:47:28 UTC (rev 1473) @@ -158,8 +158,16 @@ } } + /** + * Used to read Config::$var, converted to bool, returned as integer (0 or 1) + * @see bool() + */ + public static function intbool($var) { + return Config::bool($var) ? 1 : 0; + } + function getAll() { $output = $this->config; return $output; Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2013-06-06 20:40:54 UTC (rev 1472) +++ trunk/model/DomainHandler.php 2013-06-06 20:47:28 UTC (rev 1473) @@ -27,9 +27,9 @@ # TODO: shorter PALANG labels ;-) # TODO: hardcode 'default' to Config::read in pacol()? - $transp = boolconf('transport') ? 1 : 0; # TOOD: use a function or write a Config::intbool function - $quota = boolconf('quota') ? 1 : 0; # TOOD: use a function or write a Config::intbool function - $dom_q = boolconf('domain_quota') ? 1 : 0; # TOOD: use a function or write a Config::intbool function + $transp = Config::intbool('transport'); + $quota = Config::intbool('quota'); + $dom_q = Config::intbool('domain_quota'); # NOTE: There are dependencies between alias_count, mailbox_count and total_quota. # NOTE: If you disable "display in list" for one of them, the SQL query for the others might break. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-11-08 21:26:49
|
Revision: 1555 http://sourceforge.net/p/postfixadmin/code/1555 Author: christian_boltz Date: 2013-11-08 21:26:46 +0000 (Fri, 08 Nov 2013) Log Message: ----------- PFAHandler, *Handler: - rename _field_$field() to _validate_$field() to make the function name more obvious Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/AdminpasswordHandler.php trunk/model/AliasHandler.php trunk/model/MailboxHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2013-11-01 19:54:25 UTC (rev 1554) +++ trunk/model/AdminHandler.php 2013-11-08 21:26:46 UTC (rev 1555) @@ -197,7 +197,7 @@ * compare password / password2 field * error message will be displayed at the password2 field */ - protected function _field_password2($field, $val) { + protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } Modified: trunk/model/AdminpasswordHandler.php =================================================================== --- trunk/model/AdminpasswordHandler.php 2013-11-01 19:54:25 UTC (rev 1554) +++ trunk/model/AdminpasswordHandler.php 2013-11-08 21:26:46 UTC (rev 1555) @@ -77,7 +77,7 @@ /** * check if old password is correct */ - protected function _field_oldpass($field, $val) { + protected function _validate_oldpass($field, $val) { if ( $this->login($this->id, $val) ) { return true; } @@ -99,7 +99,7 @@ * compare password / password2 field * error message will be displayed at the password2 field */ - protected function _field_password2($field, $val) { + protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-11-01 19:54:25 UTC (rev 1554) +++ trunk/model/AliasHandler.php 2013-11-08 21:26:46 UTC (rev 1555) @@ -288,7 +288,7 @@ } */ - protected function _field_goto($field, $val) { + protected function _validate_goto($field, $val) { if (count($val) == 0) { # empty is ok for mailboxes - this is checked in setmore() which can clear the error message $this->errormsg[$field] = Config::lang('pEdit_alias_goto_text_error1'); Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-11-01 19:54:25 UTC (rev 1554) +++ trunk/model/MailboxHandler.php 2013-11-08 21:26:46 UTC (rev 1555) @@ -291,7 +291,7 @@ /** * check if quota is allowed */ - protected function _field_quota($field, $val) { + protected function _validate_quota($field, $val) { if ( !$this->check_quota ($val) ) { $this->errormsg[$field] = Config::lang('pEdit_mailbox_quota_text_error'); return false; @@ -304,8 +304,8 @@ * - autogenerate password if enabled in config and $new * - display password on $new if enabled in config or autogenerated */ - protected function _field_password($field, $val) { - if (!$this->_field_password2($field, $val)) return false; + protected function _validate_password($field, $val) { + if (!$this->_validate_password2($field, $val)) return false; if ($this->new && Config::read('generate_password') == 'YES' && $val == '') { # auto-generate new password @@ -325,7 +325,7 @@ * compare password / password2 field * error message will be displayed at the password2 field */ - protected function _field_password2($field, $val) { + protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-11-01 19:54:25 UTC (rev 1554) +++ trunk/model/PFAHandler.php 2013-11-08 21:26:46 UTC (rev 1555) @@ -280,9 +280,8 @@ # TODO: warning if no validation function exists? } - # validate based on field name (_field_$fieldname) - # TODO: rename to _validate_$key ? - $func="_field_".$key; + # validate based on field name (_validate_$fieldname) + $func="_validate_".$key; if (method_exists($this, $func) ) { if (!$this->{$func}($key, $values[$key])) $valid = false; } @@ -577,7 +576,7 @@ /** * compare two password fields - * typically called from _field_password2() + * typically called from _validate_password2() * @param string $field1 - "password" field * @param string $field2 - "repeat password" field */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-11-10 19:38:45
|
Revision: 1562 http://sourceforge.net/p/postfixadmin/code/1562 Author: christian_boltz Date: 2013-11-10 19:38:43 +0000 (Sun, 10 Nov 2013) Log Message: ----------- MailboxHandler.php: - rewrite and simplify delete() - also cleanup fetchmail, quota and quota2 tables AliasHandler.php: - update delete() to match the workflow in other classes Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/MailboxHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-11-10 18:55:23 UTC (rev 1561) +++ trunk/model/AliasHandler.php 2013-11-10 19:38:43 UTC (rev 1562) @@ -355,15 +355,10 @@ return $vacation_goto . '@' . Config::read('vacation_domain'); } -/********************************************************************************************************************************************************** - old function from non-PFAHandler times of AliasHandler - Will be replaced by a global delete() function in PFAHandler - **********************************************************************************************************************************************************/ - /** * @return true on success false on failure */ - public function delete(){ + public function delete() { if( ! $this->view() ) { $this->errormsg[] = 'An alias with that address does not exist.'; # TODO: make translatable return false; @@ -374,14 +369,14 @@ return false; } - $result = db_delete('alias', 'address', $this->id); - if( $result == 1 ) { - list(/*NULL*/,$domain) = explode('@', $this->id); - db_log ($domain, 'delete_alias', $this->id); - return true; - } + db_delete('alias', 'address', $this->id); + + list(/*NULL*/,$domain) = explode('@', $this->id); + db_log ($domain, 'delete_alias', $this->id); + $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); + return true; } - } +} /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-11-10 18:55:23 UTC (rev 1561) +++ trunk/model/MailboxHandler.php 2013-11-10 19:38:43 UTC (rev 1562) @@ -273,14 +273,37 @@ return true; # even if a hook failed, mark the overall operation as OK } + public function delete() { + if ( ! $this->view() ) { + $this->errormsg[] = Config::Lang('pFetchmail_invalid_mailbox'); # TODO: can users hit this message at all? init() should already fail... + return false; + } -/* function already exists (see old code below - public function delete() { - $this->errormsg[] = '*** deletion not implemented yet ***'; - return false; # XXX function aborts here! XXX + # the correct way would be to delete the alias and fetchmail entries with *Handler before + # deleting the mailbox, but it's easier and a bit faster to do it on the database level. + # cleaning up all tables doesn't hurt, even if vacation or displaying the quota is disabled + + db_delete('fetchmail', 'mailbox', $this->id); + db_delete('vacation', 'email', $this->id); + db_delete('vacation_notification', 'on_vacation', $this->id); # should be caught by cascade, if PgSQL + db_delete('quota', 'username', $this->id); + db_delete('quota2', 'username', $this->id); + db_delete('alias', 'address', $this->id); + db_delete($this->db_table, $this->id_field, $this->id); # finally delete the mailbox + + list(/*NULL*/,$domain) = explode('@', $this->id); + if ( !mailbox_postdeletion($username,$domain) ) { + $this->error_msg[] = 'Mailbox postdeletion failed!'; # TODO: make translateable + } + + list(/*NULL*/,$domain) = explode('@', $this->id); + db_log ($domain, 'delete_mailbox', $this->id); + $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); + return true; } -*/ + + protected function _prefill_domain($field, $val) { if (in_array($val, $this->struct[$field]['options'])) { $this->struct[$field]['default'] = $val; @@ -650,78 +673,6 @@ #TODO: more self explaining language strings! - public function delete() { - $username = $this->id; - list(/*$local_part*/,$domain) = explode ('@', $username); - - $E_username = escape_string($username); - $E_domain = escape_string($domain); - -#TODO: At this level of table by key calls we should think about a solution in our query function and drupal like {mailbox} {alias}. -# Pseudocode for db_query etc. -# if {} in query then -# table_by_key( content between { and } ) -# else error - - $table_mailbox = table_by_key('mailbox'); - $table_alias = table_by_key('alias'); - $table_vacation = table_by_key('vacation'); - $table_vacation_notification = table_by_key('vacation_notification'); - - db_begin(); - -#TODO: true/false replacement! - $error = 0; - - $result = db_query("SELECT * FROM $table_alias WHERE address = '$E_username' AND domain = '$E_domain'"); - if($result['rows'] == 1) { - $result = db_delete('alias', 'address', $username); - db_log ($domain, 'delete_alias', $username); - } else { - $this->errormsg[] = "no alias $username"; # todo: better message, make translatable - $error = 1; - } - - /* is there a mailbox? if do delete it from orbit; it's the only way to be sure */ - $result = db_query ("SELECT * FROM $table_mailbox WHERE username='$E_username' AND domain='$E_domain'"); - if ($result['rows'] == 1) { - $result = db_delete('mailbox', 'username', $username); - $postdel_res=mailbox_postdeletion($username,$domain); - if ($result != 1 || !$postdel_res) { - - $tMessage = Config::lang('pDelete_delete_error') . "$username ("; - if ($result['rows']!=1) { # TODO: invalid test, $result is from db_delete and only contains the number of deleted rows - $tMessage.='mailbox'; - if (!$postdel_res) $tMessage.=', '; - $this->errormsg[] = "no mailbox $username"; # todo: better message, make translatable - $error = 1; - } - if (!$postdel_res) { - $tMessage.='post-deletion'; - $this->errormsg[] = "post-deletion script failed"; # todo: better message, make translatable - $error = 1; - } - $this->errormsg[] = $tMessage.')'; - # TODO: does db_rollback(); make sense? Not sure because mailbox_postdeletion was already called (move the call checking the db_delete result?) - # TODO: maybe mailbox_postdeletion should be run after all queries, just before commit/rollback - $error = 1; -# return false; # TODO: does this make sense? Or should we still cleanup vacation and vacation_notification? - } - db_log ($domain, 'delete_mailbox', $username); - } else { - $this->errormsg[] = "no mailbox $username"; # TODO: better message, make translatable - $error = 1; - } - $result = db_query("SELECT * FROM $table_vacation WHERE email = '$E_username' AND domain = '$E_domain'"); - if($result['rows'] == 1) { - db_delete('vacation', 'email', $username); - db_delete('vacation_notification', 'on_vacation', $username); # TODO: delete vacation_notification independent of vacation? (in case of "forgotten" vacation_notification entries) - } - db_commit(); - if ($error != 0) return false; - return true; - } - } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-09-12 09:22:11
|
Revision: 1684 http://sourceforge.net/p/postfixadmin/code/1684 Author: christian_boltz Date: 2014-09-12 09:22:09 +0000 (Fri, 12 Sep 2014) Log Message: ----------- PFAHandler.php: fix logging - log the domain instead of $this->id - add protected $domain (used for logging) - add function domain_from_id() - http://sourceforge.net/p/postfixadmin/bugs/317/ AliasHandler.php: - add function domain_from_id() MailboxHandler.php: - add function domain_from_id() - init(): use $this->domain instead of splitting $this-id again Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/MailboxHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2014-09-11 22:17:59 UTC (rev 1683) +++ trunk/model/AliasHandler.php 2014-09-12 09:22:09 UTC (rev 1684) @@ -138,6 +138,11 @@ return $retval; } + protected function domain_from_id() { + list(/*NULL*/,$domain) = explode('@', $this->id); + return $domain; + } + protected function validate_new_id() { if ($this->id == '') { $this->errormsg[$this->id_field] = Config::lang('pCreate_alias_address_text_error1'); Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2014-09-11 22:17:59 UTC (rev 1683) +++ trunk/model/MailboxHandler.php 2014-09-12 09:22:09 UTC (rev 1684) @@ -51,19 +51,22 @@ return false; } - list(/*NULL*/,$domain) = explode('@', $this->id); - if ($this->new) { $currentquota = 0; } else { $currentquota = $this->result['quotabytes']; # parent::init called ->view() } - $this->updateMaxquota($domain, $currentquota); + $this->updateMaxquota($this->domain, $currentquota); return true; # still here? good. } + protected function domain_from_id() { + list(/*NULL*/,$domain) = explode('@', $this->id); + return $domain; + } + /** * show max allowed quota in quota field description * @param string - domain Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2014-09-11 22:17:59 UTC (rev 1683) +++ trunk/model/PFAHandler.php 2014-09-12 09:22:09 UTC (rev 1684) @@ -51,6 +51,10 @@ # filled in init() protected $id = null; + # the domain of the current item (used for logging) + # filled in domain_from_id() via init() + protected $domain = null; + # structure of the database table, list, edit form etc. # filled in initStruct() protected $struct = array(); @@ -189,17 +193,21 @@ } elseif (!$this->validate_new_id() ) { # errormsg filled by validate_new_id() return false; - } else { - return true; +# } else { +# return true; } } else { # edit mode if (!$exists) { $this->errormsg[$this->id_field] = Config::lang($this->msg['error_does_not_exist']); return false; - } else { - return true; +# } else { +# return true; } } + + $this->domain = $this->domain_from_id(); + + return true; } /** @@ -211,6 +219,21 @@ abstract protected function validate_new_id(); /** + * called by init() if $this->id != $this->domain_field + * must be overridden if $id_field != $domain_field + * @return string the domain to use for logging + */ + protected function domain_from_id() { + if ($this->id_field == $this->domain_field) { + return $this->id; + } elseif ($this->domain_field == "") { + return ""; + } else { + die('You must override domain_from_id()!'); + } + } + + /** * web interface can prefill some fields * if a _prefill_$field method exists, call it (it can for example modify $struct) * @param string - field @@ -367,7 +390,7 @@ $result = $this->storemore(); # db_log() even if storemore() failed - db_log ($this->id, $this->msg['logname'], ""); + db_log ($this->domain, $this->msg['logname'], $this->id); if ($result) { # return success message 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:05:42
|
Revision: 1709 http://sourceforge.net/p/postfixadmin/code/1709 Author: christian_boltz Date: 2014-11-01 18:05:39 +0000 (Sat, 01 Nov 2014) Log Message: ----------- Cli*.php: - add SVN $Id header Modified Paths: -------------- trunk/model/CliDelete.php trunk/model/CliEdit.php trunk/model/CliHelp.php trunk/model/CliView.php Modified: trunk/model/CliDelete.php =================================================================== --- trunk/model/CliDelete.php 2014-10-28 22:34:49 UTC (rev 1708) +++ trunk/model/CliDelete.php 2014-11-01 18:05:39 UTC (rev 1709) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * class to handle 'delete' in Cli */ Modified: trunk/model/CliEdit.php =================================================================== --- trunk/model/CliEdit.php 2014-10-28 22:34:49 UTC (rev 1708) +++ trunk/model/CliEdit.php 2014-11-01 18:05:39 UTC (rev 1709) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * class to handle add and edit in Cli * Modified: trunk/model/CliHelp.php =================================================================== --- trunk/model/CliHelp.php 2014-10-28 22:34:49 UTC (rev 1708) +++ trunk/model/CliHelp.php 2014-11-01 18:05:39 UTC (rev 1709) @@ -1,4 +1,5 @@ <?php +# $Id$ class CliHelp extends Shell { Modified: trunk/model/CliView.php =================================================================== --- trunk/model/CliView.php 2014-10-28 22:34:49 UTC (rev 1708) +++ trunk/model/CliView.php 2014-11-01 18:05:39 UTC (rev 1709) @@ -1,4 +1,5 @@ <?php +# $Id$ /** * class to handle 'view' in Cli */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-12-20 16:46:17
|
Revision: 1302 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1302&view=rev Author: christian_boltz Date: 2011-12-20 16:46:08 +0000 (Tue, 20 Dec 2011) Log Message: ----------- PFAHandler.php: - encrypt passwords ("pass" fields) with pacrypt() AdminHandler.php: - update/remove various TODO notes Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/PFAHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2011-12-20 01:06:49 UTC (rev 1301) +++ trunk/model/AdminHandler.php 2011-12-20 16:46:08 UTC (rev 1302) @@ -28,13 +28,13 @@ # values for the "type" column: # text one line of text - # pass password (will be encrypted with pacrypt()) # TODO: not implemented yet + # pass password (will be encrypted with pacrypt()) # num number # 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 -#TODO # list like enum, but allow multiple selections + # list like enum, but allow multiple selections # NOTE: There are dependencies between domains and domain_count # NOTE: If you disable "display in list" for domain_count, the SQL query for domains might break. @@ -61,7 +61,6 @@ ), 'domains' => pacol( 1, 1, 1, 'list', 'pAdminCreate_admin_address' , '' , array(), list_domains(), -# TODO: on read: split domains - on write: write to domain_admins table /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(domains,"") as domains' @@ -196,19 +195,19 @@ $this->errormsg[] = '*** Admin deletion not implemented yet ***'; return false; # XXX function aborts here until TODO below is implemented! XXX - # TODO: recursively delete mailboxes, aliases, alias_domains, fetchmail entries etc. before deleting the domain + # TODO: delete from domain_admins before deleting the admin # TODO: move the needed code from delete.php here $result = db_delete($this->db_table, $this->id_field, $this->id); if ( $result == 1 ) { list(/*NULL*/,$domain) = explode('@', $this->id); - db_log ($domain, 'delete_admin', $this->id); # TODO delete_domain is not a valid db_log keyword yet because we don't yet log add/delete domain + db_log ($domain, 'delete_admin', $this->id); # TODO delete_admin is not a valid db_log keyword yet return true; } } # TODO: generate password if $new, no password specified and $CONF['generate_password'] is set -# TODO: except if $this->admin_username == setup.php +# TODO: except if $this->admin_username == setup.php --- this exception should be handled directly in setup.php ("if $values['password'] == '' error_out") /** * compare password / password2 field Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2011-12-20 01:06:49 UTC (rev 1301) +++ trunk/model/PFAHandler.php 2011-12-20 16:46:08 UTC (rev 1302) @@ -157,7 +157,9 @@ case 'bool': $db_values[$key] = db_get_boolean($db_values[$key]); break; - # TODO: passwords -> pacrypt() + case 'pass': + $db_values[$key] = pacrypt($db_values[$key]); + 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...> - 2013-06-23 15:04:07
|
Revision: 1483 http://sourceforge.net/p/postfixadmin/code/1483 Author: christian_boltz Date: 2013-06-23 15:04:05 +0000 (Sun, 23 Jun 2013) Log Message: ----------- *Handler.php: - set $db_table and $id_field in the class, not inside initStruct() Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/AliasHandler.php trunk/model/AliasdomainHandler.php trunk/model/DomainHandler.php trunk/model/MailboxHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2013-06-23 14:59:55 UTC (rev 1482) +++ trunk/model/AdminHandler.php 2013-06-23 15:04:05 UTC (rev 1483) @@ -3,6 +3,9 @@ class AdminHandler extends PFAHandler { + protected $db_table = 'admin'; + protected $id_field = 'username'; + protected function validate_new_id() { $email_check = check_email($this->id); @@ -21,9 +24,6 @@ # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { - $this->db_table = 'admin'; - $this->id_field = 'username'; - # TODO: shorter PALANG labels ;-) # TODO: hardcode 'default' to Config::read in pacol()? Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-06-23 14:59:55 UTC (rev 1482) +++ trunk/model/AliasHandler.php 2013-06-23 15:04:05 UTC (rev 1483) @@ -8,6 +8,8 @@ */ class AliasHandler extends PFAHandler { + protected $db_table = 'alias'; + protected $id_field = 'address'; protected $domain_field = 'domain'; /** @@ -17,9 +19,6 @@ public $return = null; protected function initStruct() { - $this->db_table = 'alias'; - $this->id_field = 'address'; - # hide 'goto_mailbox' if $this->new # (for existing aliases, init() hides it for non-mailbox aliases) $mbgoto = 1 - $this->new; Modified: trunk/model/AliasdomainHandler.php =================================================================== --- trunk/model/AliasdomainHandler.php 2013-06-23 14:59:55 UTC (rev 1482) +++ trunk/model/AliasdomainHandler.php 2013-06-23 15:04:05 UTC (rev 1483) @@ -6,13 +6,12 @@ */ class AliasdomainHandler extends PFAHandler { + protected $db_table = 'alias_domain'; + protected $id_field = 'alias_domain'; protected $domain_field = 'alias_domain'; # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { - $this->db_table = 'alias_domain'; - $this->id_field = 'alias_domain'; - # TODO: add public function set_options_for_admin() to list only domains available to that admin $this->struct=array( Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2013-06-23 14:59:55 UTC (rev 1482) +++ trunk/model/DomainHandler.php 2013-06-23 15:04:05 UTC (rev 1483) @@ -6,6 +6,8 @@ */ class DomainHandler extends PFAHandler { + protected $db_table = 'domain'; + protected $id_field = 'domain'; protected $domain_field = 'domain'; protected function validate_new_id() { @@ -21,9 +23,6 @@ # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { - $this->db_table = 'domain'; - $this->id_field = 'domain'; - # TODO: shorter PALANG labels ;-) # TODO: hardcode 'default' to Config::read in pacol()? Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-06-23 14:59:55 UTC (rev 1482) +++ trunk/model/MailboxHandler.php 2013-06-23 15:04:05 UTC (rev 1483) @@ -6,13 +6,12 @@ */ class MailboxHandler extends PFAHandler { + protected $db_table = 'mailbox'; + protected $id_field = 'username'; protected $domain_field = 'domain'; # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { - $this->db_table = 'mailbox'; - $this->id_field = 'username'; - $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-06-23 15:13:35
|
Revision: 1485 http://sourceforge.net/p/postfixadmin/code/1485 Author: christian_boltz Date: 2013-06-23 15:13:33 +0000 (Sun, 23 Jun 2013) Log Message: ----------- PFAHandler.php, MailboxHandler.php: - move login() to PFAHandler.php Modified Paths: -------------- trunk/model/MailboxHandler.php trunk/model/PFAHandler.php Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-06-23 15:07:17 UTC (rev 1484) +++ trunk/model/MailboxHandler.php 2013-06-23 15:13:33 UTC (rev 1485) @@ -436,31 +436,6 @@ return true; } - /** - * Attempt to log a user in. - * @param string $username - * @param string $password - * @return boolean true on successful login (i.e. password matches etc) - */ - public function login($username, $password) { - $username = escape_string($username); - - $table = table_by_key($this->db_table); - $active = db_get_boolean(True); - $query = "SELECT password FROM $table WHERE " . $this->id_field . "='$username' AND active='$active'"; - - $result = db_query ($query); - if ($result['rows'] == 1) { - $row = db_array ($result['result']); - $crypt_password = pacrypt ($password, $row['password']); - - if($row['password'] == $crypt_password) { - return true; - } - } - return false; - } - # remaining comments from add(): # FIXME: default value of $quota (-999) is intentionally invalid. Add fallback to default quota. # Solution: Invent an sub config class with additional informations about domain based configs like default qouta. Modified: trunk/model/PFAHandler.php =================================================================== --- trunk/model/PFAHandler.php 2013-06-23 15:07:17 UTC (rev 1484) +++ trunk/model/PFAHandler.php 2013-06-23 15:13:33 UTC (rev 1485) @@ -528,6 +528,32 @@ } + /** + * Attempt to log a user in. + * @param string $username + * @param string $password + * @return boolean true on successful login (i.e. password matches etc) + */ + public function login($username, $password) { + $username = escape_string($username); + + $table = table_by_key($this->db_table); + $active = db_get_boolean(True); + $query = "SELECT password FROM $table WHERE " . $this->id_field . "='$username' AND active='$active'"; + + $result = db_query ($query); + if ($result['rows'] == 1) { + $row = db_array ($result['result']); + $crypt_password = pacrypt ($password, $row['password']); + + if($row['password'] == $crypt_password) { + return true; + } + } + return false; + } + + /************************************************************************** * functions to read protected variables */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-11-10 17:26:49
|
Revision: 1560 http://sourceforge.net/p/postfixadmin/code/1560 Author: christian_boltz Date: 2013-11-10 17:26:47 +0000 (Sun, 10 Nov 2013) Log Message: ----------- DomainHandler.php, AdminHandler.php: - implement delete() Modified Paths: -------------- trunk/model/AdminHandler.php trunk/model/DomainHandler.php Modified: trunk/model/AdminHandler.php =================================================================== --- trunk/model/AdminHandler.php 2013-11-10 16:00:20 UTC (rev 1559) +++ trunk/model/AdminHandler.php 2013-11-10 17:26:47 UTC (rev 1560) @@ -179,14 +179,12 @@ return false; } - $result = db_delete('domain_admins', $this->id_field, $this->id); # TODO: check for errors? + db_delete('domain_admins', $this->id_field, $this->id); + db_delete($this->db_table, $this->id_field, $this->id); - $result = db_delete($this->db_table, $this->id_field, $this->id); - if ( $result == 1 ) { - list(/*NULL*/,$domain) = explode('@', $this->id); - db_log ($domain, 'delete_admin', $this->id); # TODO delete_admin is not a valid db_log keyword yet - return true; - } + db_log ('admin', 'delete_admin', $this->id); # TODO delete_admin is not a valid db_log keyword yet, and 'admin' is not displayed in viewlog.php + $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); + return true; } Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2013-11-10 16:00:20 UTC (rev 1559) +++ trunk/model/DomainHandler.php 2013-11-10 17:26:47 UTC (rev 1560) @@ -136,21 +136,42 @@ */ public function delete() { if ( ! $this->view() ) { - $this->errormsg[] = 'A domain with that name does not exist.'; # TODO: make translatable + $this->errormsg[] = Config::Lang('domain_does_not_exist'); # TODO: can users hit this message at all? init() should already fail... return false; } - $this->errormsg[] = '*** Domain deletion not implemented yet ***'; - return false; # XXX function aborts here until TODO below is implemented! XXX + # TODO: check if this domain is an alias domain target - if yes, do not allow to delete it - # TODO: recursively delete mailboxes, aliases, alias_domains, fetchmail entries etc. before deleting the domain - # TODO: move the needed code from delete.php here - $result = db_delete($this->db_table, $this->id_field, $this->id); - if ( $result == 1 ) { - list(/*NULL*/,$domain) = explode('@', $this->id); - db_log ($domain, 'delete_domain', $this->id); # TODO delete_domain is not a valid db_log keyword yet because we don't yet log add/delete domain - return true; + + # the correct way would be to recursively delete mailboxes, aliases, alias_domains, fetchmail entries + # with *Handler before deleting the domain, but this would be terribly slow on domains with many aliases etc., + # so we do it the fast way on the database level + # cleaning up all tables doesn't hurt, even if vacation or displaying the quota is disabled + + # some tables don't have a domain field, so we need a workaround + $like_domain = "LIKE '" . escape_string('%@' . $this->id) . "'"; + + db_delete('domain_admins', 'domain', $this->id); + db_delete('alias', 'domain', $this->id); + db_delete('mailbox', 'domain', $this->id); + db_delete('alias_domain', 'alias_domain', $this->id); + db_delete('vacation', 'domain', $this->id); + db_delete('vacation_notification', 'on_vacation', $this->id, "OR on_vacation $like_domain"); + db_delete('quota', 'username', $this->id, "OR username $like_domain"); + db_delete('quota2', 'username', $this->id, "OR username $like_domain"); + db_delete('fetchmail', 'mailbox', $this->id, "OR mailbox $like_domain"); + db_delete('log', 'domain', $this->id); # TODO: should we really delete the log? + + # finally delete the domain + db_delete($this->db_table, $this->id_field, $this->id); + + if ( !domain_postdeletion($this->id) ) { + $this->error_msg[] = $PALANG['pAdminDelete_domain_error']; # TODO: better error message } + + db_log ($this->id, 'delete_domain', $this->id); # TODO delete_domain is not a valid db_log keyword yet + $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $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...> - 2013-11-12 21:37:11
|
Revision: 1573 http://sourceforge.net/p/postfixadmin/code/1573 Author: christian_boltz Date: 2013-11-12 21:37:08 +0000 (Tue, 12 Nov 2013) Log Message: ----------- DomainHandler.php: - add some _formatted_*() functions to get a more informative output (currently only used in CLI) MailboxHandler.php: - add TODO for reading used quota from quota/quota2 table and adding a formatted_quota() function Modified Paths: -------------- trunk/model/DomainHandler.php trunk/model/MailboxHandler.php Modified: trunk/model/DomainHandler.php =================================================================== --- trunk/model/DomainHandler.php 2013-11-12 21:32:49 UTC (rev 1572) +++ trunk/model/DomainHandler.php 2013-11-12 21:37:08 UTC (rev 1573) @@ -183,6 +183,16 @@ return true; } + + + /** + * get formatted version of fields + * + * @param array values of current item + */ + public function _formatted_aliases ($item) { return $item['alias_count'] . ' / ' . $item['aliases'] ; } + public function _formatted_mailboxes($item) { return $item['mailbox_count'] . ' / ' . $item['mailboxes']; } + public function _formatted_quota ($item) { return $item['total_quota'] . ' / ' . $item['quota'] ; } + } - /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2013-11-12 21:32:49 UTC (rev 1572) +++ trunk/model/MailboxHandler.php 2013-11-12 21:37:08 UTC (rev 1573) @@ -32,6 +32,7 @@ 'name' => pacol( 1, 1, 1, 'text', 'name' , 'pCreate_mailbox_name_text' , '' ), 'quota' => pacol( 1, 1, 1, 'int' , 'pEdit_mailbox_quota' , 'pEdit_mailbox_quota_text' , '' ), # in MB # read_from_db_postprocess() also sets 'quotabytes' for use in init() + # TODO: read used quota from quota/quota2 table 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), 'welcome_mail' => pacol( $this->new, $this->new, 0, 'bool', 'pCreate_mailbox_mail' , '' , 1, /*options*/ '', @@ -368,7 +369,11 @@ $this->RAWvalues['domain'] = $domain; } + # TODO: read used quota from quota/quota2 table, then enable _formatted_quota() + # public function _formatted_quota ($item) { return $item['used_quota'] . ' / ' . $item['quota'] ; } + + /** * calculate maildir path for the mailbox */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2015-01-07 21:25:28
|
Revision: 1735 http://sourceforge.net/p/postfixadmin/code/1735 Author: christian_boltz Date: 2015-01-07 21:25:20 +0000 (Wed, 07 Jan 2015) Log Message: ----------- MailboxHandler, AliasHandler: - initStruct: set "display in list" to 1 to allow searching for domain with list.php (nevertheless, the domain won't be displayed because it doesn't have a column label set) Modified Paths: -------------- trunk/model/AliasHandler.php trunk/model/MailboxHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2014-11-02 23:13:35 UTC (rev 1734) +++ trunk/model/AliasHandler.php 2015-01-07 21:25:20 UTC (rev 1735) @@ -30,7 +30,7 @@ 'localpart' => pacol( $this->new, 0, 0, 'text', 'alias' , 'pCreate_alias_catchall_text' , '', /*options*/ '', /*not_in_db*/ 1 ), - 'domain' => pacol( $this->new, 0, 0, 'enum', '' , '' , '', + 'domain' => pacol( $this->new, 0, 1, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), 'goto' => pacol( 1, 1, 1, 'txtl', 'to' , 'pEdit_alias_help' , array() ), 'is_mailbox' => pacol( 0, 0, 1, 'int', '' , '' , 0 , Modified: trunk/model/MailboxHandler.php =================================================================== --- trunk/model/MailboxHandler.php 2014-11-02 23:13:35 UTC (rev 1734) +++ trunk/model/MailboxHandler.php 2015-01-07 21:25:20 UTC (rev 1735) @@ -17,7 +17,7 @@ # editing? form list 'username' => pacol( $this->new, 1, 1, 'mail', 'pEdit_mailbox_username' , '' , '' ), 'local_part' => pacol( $this->new, 0, 0, 'text', 'pEdit_mailbox_username' , '' , '' ), - 'domain' => pacol( $this->new, 0, 0, 'enum', '' , '' , '', + 'domain' => pacol( $this->new, 0, 1, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), # TODO: maildir: display in list is needed to include maildir in SQL result (for post_edit hook) # TODO: (not a perfect solution, but works for now - maybe we need a separate "include in SELECT query" field?) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |