diff --git a/model/DomainHandler.php b/model/DomainHandler.php index a766efd4..3a34713b 100644 --- a/model/DomainHandler.php +++ b/model/DomainHandler.php @@ -16,9 +16,9 @@ class DomainHandler extends PFAHandler { public $errormsg = array(); - # error messages used in init() and view() - protected $error_already_exists = 'pAdminCreate_domain_domain_text_error'; - protected $error_does_not_exist = 'domain_does_not_exist'; + # messages used in various functions + # (stored separately to make the functions reuseable) + protected $msg = array(); /** * Constructor: fill $struct etc. @@ -27,6 +27,7 @@ class DomainHandler extends PFAHandler { public function __construct($new = 0) { if ($new) $this->new = 1; $this->initStruct(); + $this->initMsg(); } /** @@ -40,7 +41,7 @@ class DomainHandler extends PFAHandler { if ($this->new) { if ($exists) { - $this->errormsg[] = Lang::read($this->error_already_exists); + $this->errormsg[] = Lang::read($this->msg['error_already_exists']); return false; } elseif (!$this->validate_id() ) { # errormsg filled by validate_id() @@ -50,7 +51,7 @@ class DomainHandler extends PFAHandler { } } else { # edit mode if (!$exists) { - $this->errormsg[] = Lang::read($this->error_does_not_exist); + $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); return false; } else { return true; @@ -69,6 +70,7 @@ class DomainHandler extends PFAHandler { } } + # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { $this->db_table = 'domain'; $this->id_field = 'domain'; @@ -100,6 +102,21 @@ class DomainHandler extends PFAHandler { } + # 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'; + if ($this->new) { + $this->msg['logname'] = 'create_domain'; + $this->msg['store_error'] = 'pAdminCreate_domain_result_error'; + } else { + $this->msg['logname'] = 'edit_domain'; + $this->msg['store_error'] = 'pAdminEdit_domain_result_error'; + } + } + public function getStruct() { return $this->struct; } @@ -116,9 +133,6 @@ class DomainHandler extends PFAHandler { 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) - - ($values['backupmx'] == true) ? $values['backupmx'] = db_get_boolean(true) : $values['backupmx'] = db_get_boolean(false); if ($this->new == 1) { $values[$this->id_field] = $this->username; @@ -133,24 +147,32 @@ class DomainHandler extends PFAHandler { $this->values[$key] = $row['default']; } } else { - $func="_inp_".$row['type']; - # TODO: error out if an editable field is not set in $values (on $this->new) -or- skip if in edit mode - $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) ) { - if ($this->{$func}($key, $values[$key])) { + 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 + + $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? + } + + # TODO: more validation (_field_$fieldname() ?) + + if ($valid) { $this->values[$key] = $values[$key]; } - } else { - # TODO: warning if no validation function exists? - $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"; } } } - # TODO: more validation - if (count($this->errormsg) == 0) { $this->values_valid = true; } @@ -164,13 +186,29 @@ class DomainHandler extends PFAHandler { } $db_values = $this->values; - unset ($db_values['default_aliases']); # TODO: automate based on $this->struct - $result = db_insert($this->db_table, $db_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->new) { + $result = db_insert($this->db_table, $db_values); + } else { + $result = db_update($this->db_table, $this->id_field, $this->username, $db_values); + } if ($result != 1) { - $this->errormsg[] = Lang::read('pAdminCreate_domain_result_error') . "\n(" . $this->username . ")\n"; + $this->errormsg[] = Lang::read($this->msg['store_error']) . "\n(" . $this->username . ")\n"; # TODO: change message + use sprintf return false; } else { +# TODO: drop the "else {" - if $result != 1, the "return false" will already exit the function +# TODO: everything after this comment (= specific to domains) should be a separate function, +# TODO: because everything above is generic "write values to DB" code if ($this->new && $this->values['default_aliases']) { foreach (Config::read('default_aliases') as $address=>$goto) { $address = $address . "@" . $this->username; @@ -184,12 +222,21 @@ class DomainHandler extends PFAHandler { # TODO: error checking } } - $tMessage = Lang::read('pAdminCreate_domain_result_success') . " (" . $this->username . ")"; # TODO: tMessage is not used/returned anywhere + if ($this->new) { + $tMessage = Lang::read('pAdminCreate_domain_result_success') . " (" . $this->username . ")"; # TODO: tMessage is not used/returned anywhere + } else { + # TODO: success message for edit + } } - if (!domain_postcreation($this->username)) { - $this->errormsg[] = Lang::read('pAdminCreate_domain_error'); + + if ($this->new) { + if (!domain_postcreation($this->username)) { + $this->errormsg[] = Lang::read('pAdminCreate_domain_error'); + } + } else { + # we don't have domain_postedit() } - db_log ($this->username, 'create_domain', ""); + db_log ($this->username, $this->msg['logname'], ""); return true; } @@ -225,7 +272,7 @@ class DomainHandler extends PFAHandler { } return true; } - if ($errors) $this->errormsg[] = Lang::read($this->error_does_not_exist); + if ($errors) $this->errormsg[] = Lang::read($this->msg['error_does_not_exist']); # $this->errormsg[] = $result['error']; return false; }