00001 <?php 00050 function smarty_function_mailto($params, &$smarty) 00051 { 00052 $extra = ''; 00053 00054 if (empty($params['address'])) { 00055 $smarty->trigger_error("mailto: missing 'address' parameter"); 00056 return; 00057 } else { 00058 $address = $params['address']; 00059 } 00060 00061 $text = $address; 00062 00063 // netscape and mozilla do not decode %40 (@) in BCC field (bug?) 00064 // so, don't encode it. 00065 $search = array('%40', '%2C'); 00066 $replace = array('@', ','); 00067 $mail_parms = array(); 00068 foreach ($params as $var=>$value) { 00069 switch ($var) { 00070 case 'cc': 00071 case 'bcc': 00072 case 'followupto': 00073 if (!empty($value)) 00074 $mail_parms[] = $var.'='.str_replace($search,$replace,rawurlencode($value)); 00075 break; 00076 00077 case 'subject': 00078 case 'newsgroups': 00079 $mail_parms[] = $var.'='.rawurlencode($value); 00080 break; 00081 00082 case 'extra': 00083 case 'text': 00084 $$var = $value; 00085 00086 default: 00087 } 00088 } 00089 00090 $mail_parm_vals = ''; 00091 for ($i=0; $i<count($mail_parms); $i++) { 00092 $mail_parm_vals .= (0==$i) ? '?' : '&'; 00093 $mail_parm_vals .= $mail_parms[$i]; 00094 } 00095 $address .= $mail_parm_vals; 00096 00097 $encode = (empty($params['encode'])) ? 'none' : $params['encode']; 00098 if (!in_array($encode,array('javascript','javascript_charcode','hex','none')) ) { 00099 $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex"); 00100 return; 00101 } 00102 00103 if ($encode == 'javascript' ) { 00104 $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');'; 00105 00106 $js_encode = ''; 00107 for ($x=0; $x < strlen($string); $x++) { 00108 $js_encode .= '%' . bin2hex($string[$x]); 00109 } 00110 00111 return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>'; 00112 00113 } elseif ($encode == 'javascript_charcode' ) { 00114 $string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>'; 00115 00116 for($x = 0, $y = strlen($string); $x < $y; $x++ ) { 00117 $ord[] = ord($string[$x]); 00118 } 00119 00120 $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n"; 00121 $_ret .= "<!--\n"; 00122 $_ret .= "{document.write(String.fromCharCode("; 00123 $_ret .= implode(',',$ord); 00124 $_ret .= "))"; 00125 $_ret .= "}\n"; 00126 $_ret .= "//-->\n"; 00127 $_ret .= "</script>\n"; 00128 00129 return $_ret; 00130 00131 00132 } elseif ($encode == 'hex') { 00133 00134 preg_match('!^(.*)(\?.*)$!',$address,$match); 00135 if(!empty($match[2])) { 00136 $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript."); 00137 return; 00138 } 00139 $address_encode = ''; 00140 for ($x=0; $x < strlen($address); $x++) { 00141 if(preg_match('!\w!',$address[$x])) { 00142 $address_encode .= '%' . bin2hex($address[$x]); 00143 } else { 00144 $address_encode .= $address[$x]; 00145 } 00146 } 00147 $text_encode = ''; 00148 for ($x=0; $x < strlen($text); $x++) { 00149 $text_encode .= '&#x' . bin2hex($text[$x]).';'; 00150 } 00151 00152 $mailto = "mailto:"; 00153 return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>'; 00154 00155 } else { 00156 // no encoding 00157 return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>'; 00158 00159 } 00160 00161 } 00162 00163 /* vim: set expandtab: */ 00164 00165 ?>
| Copyright © 2003 - 2009 MyOOS [Shopsystem]. All rights reserved. MyOOS [Shopsystem] is Free Software released under the GNU/GPL License. Webmaster: info@r23.de (Impressum) |
|
