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
00064
00065 $mail_parms = array();
00066 foreach ($params as $var=>$value) {
00067 switch ($var) {
00068 case 'cc':
00069 case 'bcc':
00070 case 'followupto':
00071 if (!empty($value))
00072 $mail_parms[] = $var.'='.str_replace('%40','@',rawurlencode($value));
00073 break;
00074
00075 case 'subject':
00076 case 'newsgroups':
00077 $mail_parms[] = $var.'='.rawurlencode($value);
00078 break;
00079
00080 case 'extra':
00081 case 'text':
00082 $$var = $value;
00083
00084 default:
00085 }
00086 }
00087
00088 $mail_parm_vals = '';
00089 for ($i=0; $i<count($mail_parms); $i++) {
00090 $mail_parm_vals .= (0==$i) ? '?' : '&';
00091 $mail_parm_vals .= $mail_parms[$i];
00092 }
00093 $address .= $mail_parm_vals;
00094
00095 $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
00096 if (!in_array($encode,array('javascript','javascript_charcode','hex','none')) ) {
00097 $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
00098 return;
00099 }
00100
00101 if ($encode == 'javascript' ) {
00102 $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';
00103
00104 $js_encode = '';
00105 for ($x=0; $x < strlen($string); $x++) {
00106 $js_encode .= '%' . bin2hex($string[$x]);
00107 }
00108
00109 return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
00110
00111 } elseif ($encode == 'javascript_charcode' ) {
00112 $string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
00113
00114 for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
00115 $ord[] = ord($string[$x]);
00116 }
00117
00118 $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
00119 $_ret .= "<!--\n";
00120 $_ret .= "{document.write(String.fromCharCode(";
00121 $_ret .= implode(',',$ord);
00122 $_ret .= "))";
00123 $_ret .= "}\n";
00124 $_ret .= "//-->\n";
00125 $_ret .= "</script>\n";
00126
00127 return $_ret;
00128
00129
00130 } elseif ($encode == 'hex') {
00131
00132 preg_match('!^(.*)(\?.*)$!',$address,$match);
00133 if(!empty($match[2])) {
00134 $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
00135 return;
00136 }
00137 $address_encode = '';
00138 for ($x=0; $x < strlen($address); $x++) {
00139 if(preg_match('!\w!',$address[$x])) {
00140 $address_encode .= '%' . bin2hex($address[$x]);
00141 } else {
00142 $address_encode .= $address[$x];
00143 }
00144 }
00145 $text_encode = '';
00146 for ($x=0; $x < strlen($text); $x++) {
00147 $text_encode .= '&#x' . bin2hex($text[$x]).';';
00148 }
00149
00150 $mailto = "mailto:";
00151 return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
00152
00153 } else {
00154 // no encoding
00155 return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
00156
00157 }
00158
00159 }
00160
00161 /* vim: set expandtab: */
00162
00163 ?>