• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List

E:/E/GEAMP/www/openbiz/openbiz/others/Smarty/libs/plugins/function.mailto.php

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     $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 = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
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 ?>

Generated on Thu Apr 19 2012 17:01:16 for openbiz by  doxygen 1.7.2