PageRenderTime 55ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/quicky/classes/plugins/function.mailto.php

https://bitbucket.org/seyar/parshin.local
PHP | 81 lines | 77 code | 1 blank | 3 comment | 17 complexity | 88aae3eee6db6c0f927ab1612ef7bcf4 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1
  1. <?php
  2. function quicky_function_mailto($params,$quicky)
  3. {
  4. $extra = '';
  5. if (empty($params['address'])) {return $quicky->_syntax_error('mailto: missing \'address\' parameter');}
  6. else {$address = $params['address'];}
  7. $text = $address;
  8. // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
  9. // so, don't encode it.
  10. $search = array('%40','%2C');
  11. $replace = array('@',',');
  12. $mail_parms = array();
  13. foreach ($params as $var => $value)
  14. {
  15. switch ($var)
  16. {
  17. case 'cc':
  18. case 'bcc':
  19. case 'followupto': if (!empty($value)) $mail_parms[] = $var.'='.str_replace($search,$replace,rawurlencode($value)); break;
  20. case 'subject':
  21. case 'newsgroups': $mail_parms[] = $var.'='.rawurlencode($value); break;
  22. case 'extra':
  23. case 'text': $$var = $value;
  24. default:
  25. }
  26. }
  27. $mail_parm_vals = '';
  28. for ($i = 0; $i < sizeof($mail_parms); $i++)
  29. {
  30. $mail_parm_vals .= (0==$i) ? '?' : '&';
  31. $mail_parm_vals .= $mail_parms[$i];
  32. }
  33. $address .= $mail_parm_vals;
  34. $encode = (empty($params['encode']))?'none':$params['encode'];
  35. if (!in_array($encode,array('javascript','javascript_charcode','hex','none')))
  36. {
  37. return $quicky->warning("mailto: 'encode' parameter must be none, javascript or hex");
  38. }
  39. if ($encode == 'javascript' )
  40. {
  41. $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';
  42. $js_encode = '';
  43. for ($x = 0; $x < strlen($string); $x++) {$js_encode .= '%'.bin2hex($string[$x]);}
  44. return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
  45. }
  46. elseif ($encode == 'javascript_charcode' )
  47. {
  48. $string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
  49. for($x = 0, $y = strlen($string); $x < $y; $x++ ) {$ord[] = ord($string[$x]);}
  50. $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
  51. $_ret .= "<!--\n";
  52. $_ret .= "{document.write(String.fromCharCode(";
  53. $_ret .= implode(',',$ord);
  54. $_ret .= "))";
  55. $_ret .= "}\n";
  56. $_ret .= "//-->\n";
  57. $_ret .= "</script>\n";
  58. return $_ret;
  59. }
  60. elseif ($encode == 'hex')
  61. {
  62. preg_match('!^(.*)(\?.*)$!',$address,$match);
  63. if (!empty($match[2])) {return $quicky->warning('mailto: hex encoding does not work with extra attributes. Try javascript.');}
  64. $address_encode = '';
  65. for ($x=0; $x < strlen($address); $x++)
  66. {
  67. if (preg_match('!\w!',$address[$x])) {$address_encode .= '%'.bin2hex($address[$x]);}
  68. else {$address_encode .= $address[$x];}
  69. }
  70. $text_encode = '';
  71. for ($x=0; $x < strlen($text); $x++) {$text_encode .= '&#x'.bin2hex($text[$x]).';';}
  72. $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
  73. return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
  74. }
  75. else
  76. {
  77. // no encoding
  78. return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
  79. }
  80. }