PluginProbe
CryptX / 1.3
CryptX v1.3
4.2.0 4.1.1 trunk 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.9 2.0 2.1 2.2 2.3 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 All 92 releases
cryptx / cryptx.php

cryptx.php in CryptX 1.3, at cryptx.php

360 lines 8.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: CryptX
4 Plugin URI: http://weber-nrw/wordpress/cryptx/
5 Description: No more SPAM by spiders scanning you site for email adresses. With CryptX you can hide all your email adresses, with and without a mailto-link, by converting them using javascript or UNICODE. Although you can choose to add a mailto-link to all unlinked email adresses with only one klick at the settings. That's great, isn't it?
6 Version: 1.3
7 Author: Ralf Weber
8 Author URI: http://weber-nrw.de/
9 */
10
11 /////////////////////////////////////////////////////////////////////////////
12
13 /**
14 * @internal prevent from direct calls
15 */
16 if (!defined('ABSPATH')) {
17 return ;
18 }
19
20 /**
21 * @internal prevent from second inclusion
22 */
23 if (!class_exists('cryptX')) {
24
25 /////////////////////////////////////////////////////////////////////////////
26
27 load_plugin_textdomain('cryptx', PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) );
28
29 $cryptX_var = (array) get_option('cryptX');
30
31 /**
32 * "CryptX" WordPress Plugin
33 *
34 * @author Ralf Weber <ralf@weber-nrw.de>
35 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
36 */
37 Class cryptX {
38
39 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40
41 /**
42 * Constructor
43 *
44 * This constructor attaches the needer plugin hook callbacks
45 */
46 function cryptX() {
47
48 global $cryptX_var;
49
50 // attach the converstion handlers
51 //
52 if (@$cryptX_var[theContent]) {
53 $this->_filter('the_content');
54 }
55 if (@$cryptX_var[theExcerpt]) {
56 $this->_filter('the_excerpt');
57 }
58
59 // attach to admin menu
60 //
61 if (is_admin()) {
62 add_action('admin_menu',
63 array(&$this, '_menu')
64 );
65 }
66
67 // attach to plugin installation
68 //
69 add_action(
70 'activate_' . str_replace(
71 DIRECTORY_SEPARATOR, '/',
72 str_replace(
73 realpath(ABSPATH . PLUGINDIR) . DIRECTORY_SEPARATOR,
74 '', __FILE__
75 )
76 ),
77 array(&$this, '_install')
78 );
79
80 // attach javascript to Header
81 //
82 if (@$cryptX_var[java]) {
83 add_action(
84 'wp_head',
85 array(&$this, '_header')
86 );
87 }
88
89 } // End function
90
91 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
92
93 /**
94 * Wrap _filter
95 * @param string $content
96 * @return string
97 */
98 function _filter($apply)
99 {
100 global $cryptX_var;
101
102 if (@$cryptX_var[autolink]) {
103 add_filter($apply,
104 array(&$this, '_autolink'));
105 }
106 if (@$cryptX_var[java]) {
107 add_filter($apply,
108 array(&$this, '_encrypt'));
109 } else {
110 add_filter($apply,
111 array(&$this, '_unicode'));
112 }
113
114 }
115
116 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
117
118 /**
119 * Wrap _encrypt
120 * @param string $content
121 * @return string
122 */
123 function _encrypt($content)
124 {
125 global $cryptX_var;
126
127 preg_match_all('/<a[^>]*href=["|\'](.*)["|\']*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
128
129 foreach( $links as $link ) {
130
131 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
132 $crypt = '';
133 $ascii = 0;
134 for ($i = 0; $i < strlen( $mail[1] ); $i++) {
135 $ascii = ord ( substr ( $mail[1], $i ) );
136 if (8364 <= $char) {
137 $ascii = 128;
138 }
139 $crypt .= chr($ascii + 1);
140 }
141 $temp = str_replace( $link[1], "javascript:DeCryptX('" . $crypt . "')", $link[0]);
142 $new_mail = str_replace( "@", $cryptX_var[at], $link[2]);
143 $new_mail = str_replace( ".", $cryptX_var[dot], $new_mail);
144 $temp = str_replace( $link[2], $new_mail, $temp);
145 $content = str_replace( $link[0], $temp, $content);
146 }
147
148 } // foreach
149
150
151 return $content;
152 }
153
154 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
155
156 /**
157 * Wrap _unicode
158 * @param string $content
159 * @return string
160 */
161 function _unicode($content)
162 {
163 global $cryptX_var;
164
165 preg_match_all('/<a[^>]*href=["|\'](.*)["|\']*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
166
167 foreach( $links as $link ) {
168
169 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
170 $mailto = "mailto:" . $mail[1];
171 $crypt = '';
172 for ($i = 0; $i < strlen( $mailto ); $i++) {
173 $crypt .= "&#" . ord ( substr ( $mailto, $i ) ) . ";";
174 }
175 $content = str_replace( $mailto, $crypt, $content);
176 $new_mail = str_replace( "@", $cryptX_var[at], $link[2]);
177 $new_mail = str_replace( ".", $cryptX_var[dot], $new_mail);
178 $content = str_replace( $link[2], $new_mail, $content);
179 }
180
181 } // foreach
182 return $content;
183 }
184
185 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
186
187 function _autolink($content) {
188
189 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
190 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
191 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
192 $src[]="/(<a[^>]*>)<a[^>]*>/";
193 $src[]="/(<\/A>)<\/A>/i";
194
195 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
196 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
197 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
198 $tar[]="\\1";
199 $tar[]="\\1";
200
201 $content = preg_replace($src,$tar,$content);
202
203 return $content;
204 }
205
206 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
207
208 /**
209 * Performs the routines required at plugin installation:
210 * in general introducing the settings array
211 */
212 function _install() {
213 add_option(
214 'cryptX',
215 array(
216 'at' => ' [at] ',
217 'dot' => ' [dot] ',
218 'theContent' => 1,
219 'theExcerpt' => 0,
220 'java' => 1,
221 )
222 );
223 }
224
225 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
226
227 /**
228 * Attach the menu page to the `Options` tab
229 */
230 function _header()
231 {
232 $cryptX_script.= "<script type=\"text/javascript\" src=\"" . get_option('siteurl') . '/' . PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) . "/js/cryptx.js\"></script>\n";
233 print($cryptX_script);
234 }
235
236 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
237
238 /**
239 * Attach the menu page to the `Options` tab
240 */
241 function _menu() {
242 add_submenu_page('options-general.php',
243 'CryptX',
244 'CryptX', 9,
245 __FILE__,
246 array($this, '_submenu')
247 );
248 }
249
250 /**
251 * Handles and renders the menu page
252 */
253 function _submenu() {
254 global $cryptX_var;
255
256 // sanitize referrer
257 //
258 $_SERVER['HTTP_REFERER'] = preg_replace(
259 '~&saved=.*$~Uis','', $_SERVER['HTTP_REFERER']
260 );
261
262 // information updated ?
263 //
264 if ($_POST['submit']) {
265
266 // save
267 //
268 update_option(
269 'cryptX',
270 $_POST['cryptX_var']
271 );
272
273 die("<script>document.location.href = '{$_SERVER['HTTP_REFERER']}&saved=settings:" . time() . "';</script>");
274 }
275
276 // operation report detected
277 //
278 if (@$_GET['saved']) {
279
280 list($saved, $ts) = explode(':', $_GET['saved']);
281 if (time() - $ts < 10) {
282 echo '<div id="message" class="updated fade"><p><strong>';
283
284 switch ($saved) {
285 case 'settings' :
286 echo 'Settings saved.';
287 break;
288 }
289
290 echo '</strong></p></div>';
291 }
292 }
293
294 // read the settings
295 //
296 //$cryptX = (array) get_option('cryptX');
297
298 ?>
299 <!-- Start Optionen im Adminbereich (xhtml, au�erhalb PHP) -->
300 <div class="wrap">
301 <h2><?php _e("CryptX Options...",'cryptx'); ?></h2>
302 <form method="post">
303 <blockquote>
304 <table>
305 <tr>
306 <td valign="top"><?php _e("Replacement for '@'",'cryptx'); ?>
307 <input name="cryptX_var[at]" value="<?php echo $cryptX_var[at]; ?>" type="text" /></td>
308 </tr>
309 <tr>
310 <td valign="top"><?php _e("Replacement for '.'",'cryptx'); ?>
311 <input name="cryptX_var[dot]" value="<?php echo $cryptX_var[dot]; ?>" type="text" /></td>
312 </tr>
313 <tr>
314 <td valign="top"><input name="cryptX_var[theContent]" <?php echo ($cryptX_var[theContent]) ? 'checked="checked"' : ''; ?> type="checkbox" />
315 <?php _e("Apply CryptX to the Content",'cryptx'); ?></td>
316 </tr>
317 <tr>
318 <td valign="top"><input name="cryptX_var[theExcerpt]" <?php echo ($cryptX_var[theExcerpt]) ? 'checked="checked"' : ''; ?> type="checkbox" />
319 <?php _e("Apply CryptX to the Excerpt",'cryptx'); ?></td>
320 </tr>
321 <tr>
322 <td valign="top">
323 <input name="cryptX_var[java]" <?php echo ($cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="1" />
324 <?php _e("Use javascript to hide the Email-Link.",'cryptx'); ?><br />
325 <input name="cryptX_var[java]" <?php echo (!$cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="0" />
326 <?php _e("Use Unicode to hide the Email-Link.",'cryptx'); ?>
327 </td>
328 </tr>
329 <tr>
330 <td valign="top"><input name="cryptX_var[autolink]" <?php echo ($cryptX_var[autolink]) ? 'checked="checked"' : ''; ?> type="checkbox" />
331 <?php _e("Add mailto to all unlinked email addresses",'cryptx'); ?></td>
332 </tr>
333 <tr>
334 <td><input type="submit" name="submit" value="Update &raquo;" /></td>
335 </tr>
336 </table>
337 </blockquote>
338 </form>
339 </div>
340 <?php
341 }
342
343 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
344
345
346 //--end-of-class
347 }
348
349 }
350
351 /////////////////////////////////////////////////////////////////////////////
352
353 /**
354 * Initiating the plugin...
355 * @see cryptX
356 */
357 new cryptX;
358
359 ?>
360