Fixed: Added missing idn converts to mail functions
Added: Changed idn function to support multi-line fields (like mail forward)
| | |
| | | /** IDN converter wrapper. |
| | | * all converter classes should be placed in ISPC_CLASS_PATH.'/idn/' |
| | | */ |
| | | public function idn_encode($domain) { |
| | | private function _idn_encode_decode($domain, $encode = true) { |
| | | if($domain == '') return ''; |
| | | if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee encoded |
| | | |
| | |
| | | $domain = substr($domain, strrpos($domain, '@') + 1); |
| | | } |
| | | |
| | | if($encode == true) { |
| | | if(function_exists('idn_to_ascii')) { |
| | | $domain = idn_to_ascii($domain); |
| | | } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { |
| | |
| | | } |
| | | $domain = $this->idn_converter->encode($domain); |
| | | } |
| | | |
| | | if($user_part !== false) return $user_part . '@' . $domain; |
| | | else return $domain; |
| | | } |
| | | |
| | | public function idn_decode($domain) { |
| | | if($domain == '') return ''; |
| | | if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee decoded |
| | | |
| | | // get domain and user part if it is an email |
| | | $user_part = false; |
| | | if(strpos($domain, '@') !== false) { |
| | | $user_part = substr($domain, 0, strrpos($domain, '@')); |
| | | $domain = substr($domain, strrpos($domain, '@') + 1); |
| | | } |
| | | } else { |
| | | if(function_exists('idn_to_utf8')) { |
| | | $domain = idn_to_utf8($domain); |
| | | } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) { |
| | |
| | | } |
| | | $domain = $this->idn_converter->decode($domain); |
| | | } |
| | | } |
| | | |
| | | if($user_part !== false) return $user_part . '@' . $domain; |
| | | else return $domain; |
| | | } |
| | | |
| | | public function idn_encode($domain) { |
| | | $domains = explode("\n", $domain); |
| | | for($d = 0; $d < count($domains); $d++) { |
| | | $domains[$d] = $this->_idn_encode_decode($domains[$d], true); |
| | | } |
| | | return implode("\n", $domains); |
| | | } |
| | | |
| | | public function idn_decode($domain) { |
| | | $domains = explode("\n", $domain); |
| | | for($d = 0; $d < count($domains); $d++) { |
| | | $domains[$d] = $this->_idn_encode_decode($domains[$d], false); |
| | | } |
| | | return implode("\n", $domains); |
| | | } |
| | | |
| | | } |
| | | |
| | | ?> |
| | |
| | | $this->errorMessage .= "Custom datasource class or function is empty<br />\r\n"; |
| | | } |
| | | } |
| | | |
| | | if(isset($field['filters']) && is_array($field['filters'])) { |
| | | $new_values = array(); |
| | | foreach($values as $index => $value) { |
| | | $new_index = $this->filterField($index, $index, $field['filters'], 'SHOW'); |
| | | $new_values[$new_index] = $this->filterField($index, (isset($values[$index]))?$values[$index]:'', $field['filters'], 'SHOW'); |
| | | } |
| | | $values = $new_values; |
| | | unset($new_values); |
| | | unset($new_index); |
| | | } |
| | | |
| | | return $values; |
| | | |
| | |
| | | 'login' => array ( |
| | | 'datatype' => 'VARCHAR', |
| | | 'formtype' => 'TEXT', |
| | | 'filters' => array( 0 => array( 'event' => 'SAVE', |
| | | 'type' => 'IDNTOASCII'), |
| | | 1 => array( 'event' => 'SHOW', |
| | | 'type' => 'IDNTOUTF8'), |
| | | 2 => array( 'event' => 'SAVE', |
| | | 'type' => 'TOLOWER') |
| | | ), |
| | | 'validators' => array ( |
| | | 0 => array ( 'type' => 'UNIQUE', |
| | | 'errmsg'=> 'login_error_unique'), |
| | |
| | | |
| | | $liste["item"][] = array( 'field' => "login", |
| | | 'datatype' => "VARCHAR", |
| | | 'filters' => array( 0 => array( 'event' => 'SHOW', |
| | | 'type' => 'IDNTOUTF8') |
| | | ), |
| | | 'formtype' => "TEXT", |
| | | 'op' => "like", |
| | | 'prefix' => "%", |
| | |
| | | $email = $this->dataRecord["source"]; |
| | | $email_parts = explode("@",$email); |
| | | $app->tpl->setVar("email_local_part",$email_parts[0]); |
| | | $email_parts[1] = $app->functions->idn_decode($email_parts[1]); |
| | | |
| | | // Getting Domains of the user |
| | | // $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain'; |
| | |
| | | $domain_select = ''; |
| | | if(is_array($domains)) { |
| | | foreach( $domains as $domain) { |
| | | $domain['domain'] = $app->functions->idn_decode($domain['domain']); |
| | | $selected = ($domain["domain"] == @$email_parts[1])?'SELECTED':''; |
| | | $domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n"; |
| | | } |
| | |
| | | global $app, $conf; |
| | | |
| | | // Check if Domain belongs to user |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | |
| | | // Check the client limits, if user is not the admin |
| | | if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin |
| | |
| | | |
| | | |
| | | // compose the email field |
| | | $this->dataRecord["source"] = $_POST["email_local_part"]."@".$_POST["email_domain"]; |
| | | $this->dataRecord["source"] = $_POST["email_local_part"]."@".$app->functions->idn_encode($_POST["email_domain"]); |
| | | // Set the server id of the mailbox = server ID of mail domain. |
| | | $this->dataRecord["server_id"] = $domain["server_id"]; |
| | | |
| | |
| | | function onAfterInsert() { |
| | | global $app; |
| | | |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("update mail_forwarding SET sys_groupid = ".$domain['sys_groupid']." WHERE forwarding_id = ".$this->id); |
| | | |
| | | } |
| | |
| | | function onShowEnd() { |
| | | global $app, $conf; |
| | | |
| | | $source_domain = substr($this->dataRecord["source"],1); |
| | | $destination_domain = substr($this->dataRecord["destination"],1); |
| | | $source_domain = $app->functions->idn_decode(substr($this->dataRecord["source"],1)); |
| | | $destination_domain = $app->functions->idn_decode(substr($this->dataRecord["destination"],1)); |
| | | |
| | | // Getting Domains of the user |
| | | $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain'; |
| | |
| | | $destination_select = ''; |
| | | if(is_array($domains)) { |
| | | foreach( $domains as $domain) { |
| | | $domain['domain'] = $app->functions->idn_decode($domain['domain']); |
| | | $selected = ($domain["domain"] == @$source_domain)?'SELECTED':''; |
| | | $source_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n"; |
| | | $selected = ($domain["domain"] == @$destination_domain)?'SELECTED':''; |
| | |
| | | global $app, $conf; |
| | | |
| | | // Check if source Domain belongs to user |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["source"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["source"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["source"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["source"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | |
| | | // Check if the destination domain belongs to the user |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["destination"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["destination"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["destination"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | |
| | | // Check the client limits, if user is not the admin |
| | | if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin |
| | |
| | | function onAfterInsert() { |
| | | global $app; |
| | | |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($_POST["destination"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["destination"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("update mail_forwarding SET sys_groupid = ".$domain['sys_groupid']." WHERE forwarding_id = ".$this->id); |
| | | |
| | | } |
| | |
| | | $email = $this->dataRecord["source"]; |
| | | $email_parts = explode("@",$email); |
| | | $app->tpl->setVar("email_local_part",$email_parts[0]); |
| | | $email_parts[1] = $app->functions->idn_decode($email_parts[1]); |
| | | |
| | | // Getting Domains of the user |
| | | $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r'); |
| | |
| | | $domain_select = ''; |
| | | if(is_array($domains)) { |
| | | foreach( $domains as $domain) { |
| | | $domain['domain'] = $app->functions->idn_decode($domain['domain']); |
| | | $selected = (isset($email_parts[1]) && $domain["domain"] == $email_parts[1])?'SELECTED':''; |
| | | $domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n"; |
| | | } |
| | |
| | | global $app, $conf; |
| | | |
| | | // Check if Domain belongs to user |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | |
| | | // Check the client limits, if user is not the admin |
| | | if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin |
| | |
| | | } // end if user is not admin |
| | | |
| | | // compose the email field |
| | | $this->dataRecord["source"] = "@".$_POST["email_domain"]; |
| | | $this->dataRecord["source"] = "@".$app->functions->idn_encode($_POST["email_domain"]); |
| | | // Set the server id of the mailbox = server ID of mail domain. |
| | | $this->dataRecord["server_id"] = $domain["server_id"]; |
| | | |
| | |
| | | function onAfterInsert() { |
| | | global $app; |
| | | |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("update mail_forwarding SET sys_groupid = ".$domain['sys_groupid']." WHERE forwarding_id = ".$this->id); |
| | | |
| | | } |
| | |
| | | $email = $this->dataRecord["source"]; |
| | | $email_parts = explode("@",$email); |
| | | $app->tpl->setVar("email_local_part",$email_parts[0]); |
| | | $email_parts[1] = $app->functions->idn_decode($email_parts[1]); |
| | | |
| | | // Getting Domains of the user |
| | | //$sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain'; |
| | |
| | | $domains = $app->db->queryAllRecords($sql); |
| | | $domain_select = ''; |
| | | foreach( $domains as $domain) { |
| | | $domain['domain'] = $app->functions->idn_decode($domain['domain']); |
| | | $selected = (isset($email_parts[1]) && $domain["domain"] == $email_parts[1])?'SELECTED':''; |
| | | $domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n"; |
| | | } |
| | |
| | | global $app, $conf; |
| | | |
| | | // Check if Domain belongs to user |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"]; |
| | | |
| | | // Check the client limits, if user is not the admin |
| | | if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin |
| | |
| | | } // end if user is not admin |
| | | |
| | | // compose the email field |
| | | $this->dataRecord["source"] = $_POST["email_local_part"]."@".$_POST["email_domain"]; |
| | | $this->dataRecord["source"] = $_POST["email_local_part"]."@".$app->functions->idn_encode($_POST["email_domain"]); |
| | | // Set the server id of the mailbox = server ID of mail domain. |
| | | $this->dataRecord["server_id"] = $domain["server_id"]; |
| | | |
| | |
| | | function onAfterInsert() { |
| | | global $app; |
| | | |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("update mail_forwarding SET sys_groupid = ".$domain['sys_groupid']." WHERE forwarding_id = ".$this->id); |
| | | |
| | | } |
| | |
| | | $email = $this->dataRecord["email"]; |
| | | $email_parts = explode("@",$email); |
| | | $app->tpl->setVar("email_local_part",$email_parts[0]); |
| | | $email_parts[1] = $app->functions->idn_decode($email_parts[1]); |
| | | |
| | | // Getting Domains of the user |
| | | // $sql = "SELECT domain, server_id FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain'; |
| | |
| | | $domain_select = ''; |
| | | if(is_array($domains)) { |
| | | foreach( $domains as $domain) { |
| | | $domain['domain'] = $app->functions->idn_decode($domain['domain']); |
| | | $selected = ($domain["domain"] == @$email_parts[1])?'SELECTED':''; |
| | | $domain_select .= "<option value='$domain[domain]' $selected>$domain[domain]</option>\r\n"; |
| | | } |
| | |
| | | |
| | | //* Check if Domain belongs to user |
| | | if(isset($_POST["email_domain"])) { |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm"); |
| | | $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | if($domain["domain"] != $app->functions->idn_encode($_POST["email_domain"])) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm"); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | //* compose the email field |
| | | if(isset($_POST["email_local_part"]) && isset($_POST["email_domain"])) { |
| | | $this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$_POST["email_domain"]); |
| | | $this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$app->functions->idn_encode($_POST["email_domain"])); |
| | | |
| | | // Set the server id of the mailbox = server ID of mail domain. |
| | | $this->dataRecord["server_id"] = $domain["server_id"]; |
| | |
| | | global $app, $conf; |
| | | |
| | | // Set the domain owner as mailbox owner |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("UPDATE mail_user SET sys_groupid = ".$domain["sys_groupid"]." WHERE mailuser_id = ".$this->id); |
| | | |
| | | // Spamfilter policy |
| | |
| | | |
| | | // Set the domain owner as mailbox owner |
| | | if(isset($_POST["email_domain"])) { |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r')); |
| | | $domain = $app->db->queryOneRecord("SELECT sys_groupid, server_id FROM mail_domain WHERE domain = '".$app->db->quote($app->functions->idn_encode($_POST["email_domain"]))."' AND ".$app->tform->getAuthSQL('r')); |
| | | $app->db->query("UPDATE mail_user SET sys_groupid = ".$domain["sys_groupid"]." WHERE mailuser_id = ".$this->id); |
| | | |
| | | // Spamfilter policy |