1: <?php
2: 3: 4: 5: 6: 7:
8:
9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
51: function smarty_function_mailto($params)
52: {
53: static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
54: $extra = '';
55:
56: if (empty($params['address'])) {
57: trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
58:
59: return;
60: } else {
61: $address = $params['address'];
62: }
63:
64: $text = $address;
65:
66:
67: $search = array('%40', '%2C');
68: $replace = array('@', ',');
69: $mail_parms = array();
70: foreach ($params as $var => $value) {
71: switch ($var) {
72: case 'cc':
73: case 'bcc':
74: case 'followupto':
75: if (!empty($value)) {
76: $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
77: }
78: break;
79:
80: case 'subject':
81: case 'newsgroups':
82: $mail_parms[] = $var . '=' . rawurlencode($value);
83: break;
84:
85: case 'extra':
86: case 'text':
87: $$var = $value;
88:
89: default:
90: }
91: }
92:
93: if ($mail_parms) {
94: $address .= '?' . join('&', $mail_parms);
95: }
96:
97: $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
98: if (!isset($_allowed_encoding[$encode])) {
99: trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
100:
101: return;
102: }
103:
104: if ($encode == 'javascript') {
105: $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
106:
107: $js_encode = '';
108: for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
109: $js_encode .= '%' . bin2hex($string[$x]);
110: }
111:
112: return '<script type="text/javascript">eval(unescape(\'' . $js_encode . '\'))</script>';
113: } elseif ($encode == 'javascript_charcode') {
114: $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
115:
116: for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
117: $ord[] = ord($string[$x]);
118: }
119:
120: $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n"
121: . "{document.write(String.fromCharCode("
122: . implode(',', $ord)
123: . "))"
124: . "}\n"
125: . "</script>\n";
126:
127: return $_ret;
128: } elseif ($encode == 'hex') {
129: preg_match('!^(.*)(\?.*)$!', $address, $match);
130: if (!empty($match[2])) {
131: trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
132:
133: return;
134: }
135: $address_encode = '';
136: for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
137: if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
138: $address_encode .= '%' . bin2hex($address[$x]);
139: } else {
140: $address_encode .= $address[$x];
141: }
142: }
143: $text_encode = '';
144: for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
145: $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
146: }
147:
148: $mailto = "mailto:";
149:
150: return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
151: } else {
152:
153: return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
154: }
155: }
156: