PluginProbe
CryptX / 1.9
CryptX v1.9
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.9, at cryptx.php

481 lines 14.5 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.de/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.9
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__)) . '/languages');
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 if (@$cryptX_var[commentText]) {
59 $this->_filter('comment_text');
60 }
61
62 // attach to admin menu
63 //
64 if (is_admin()) {
65 add_action('admin_menu',
66 array(&$this, '_menu')
67 );
68 }
69
70 // attach to plugin installation
71 //
72 add_action(
73 'activate_' . str_replace(
74 DIRECTORY_SEPARATOR, '/',
75 str_replace(
76 realpath(ABSPATH . PLUGINDIR) . DIRECTORY_SEPARATOR,
77 '', __FILE__
78 )
79 ),
80 array(&$this, '_install')
81 );
82
83 // attach javascript to Header
84 //
85 if (@$cryptX_var[java]) {
86 add_action(
87 'wp_head',
88 array(&$this, '_header')
89 );
90 }
91
92 } // End function
93
94 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
95
96 function _filter($apply)
97 {
98 global $cryptX_var;
99
100 if (@$cryptX_var[autolink]) {
101 add_filter($apply,
102 array(&$this, '_autolink'));
103 }
104 if (@$cryptX_var[java]) {
105 add_filter($apply,
106 array(&$this, '_encrypt'));
107 } else {
108 add_filter($apply,
109 array(&$this, '_unicode'));
110 }
111
112 }
113
114 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
115
116 function _linktext($txt)
117 {
118 global $cryptX_var;
119
120 switch ($cryptX_var[opt_linktext]) {
121
122 case 1: // alternative text for mail link
123 $linktext = $cryptX_var[alt_linktext];
124 break;
125
126 case 2: // alternative image for mail link
127 $linktext = "<img src=\"" . $cryptX_var[alt_linkimage] . "\" class=\"cryptxImage\" alt=\"" . $cryptX_var[alt_linkimage_title] . "\" title=\"" . $cryptX_var[alt_linkimage_title] . "\">";
128 break;
129
130 case 3: // uploaded image for mail link
131 $imgurl = "/" . PLUGINDIR . "/" . dirname(plugin_basename (__FILE__)) . "/images/" . $cryptX_var[alt_uploadedimage];
132 $linktext = "<img src=\"" . $imgurl . "\" class=\"cryptxImage\" alt=\"" . $cryptX_var[http_linkimage_title] . "\" title=\"" . $cryptX_var[http_linkimage_title] . "\">";
133 break;
134
135 case 4: // text scrambled by antispambot
136 $linktext = antispambot($txt);
137 break;
138
139 default:
140 $linktext = str_replace( "@", $cryptX_var[at], $txt);
141 $linktext = str_replace( ".", $cryptX_var[dot], $linktext);
142
143 }
144
145 return $linktext;
146 }
147
148 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
149
150 function _dirImages()
151 {
152 $dir = $_SERVER["DOCUMENT_ROOT"].'/'.PLUGINDIR.'/'.dirname(plugin_basename (__FILE__)).'/images';
153 $fh = opendir($dir); //Verzeichnis
154 $verzeichnisinhalt = array();
155 while (true == ($file = readdir($fh)))
156 {
157 if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif")) //Abfrage nach g�ltigen Datenformat
158 {
159 $verzeichnisinhalt[] = $file;
160 }
161 }
162 return $verzeichnisinhalt;
163 }
164
165 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
166
167 function _encrypt($content)
168 {
169 global $cryptX_var;
170
171 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
172
173 foreach( $links as $link ) {
174
175 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
176 $crypt = '';
177 $ascii = 0;
178 for ($i = 0; $i < strlen( $mail[1] ); $i++) {
179 $ascii = ord ( substr ( $mail[1], $i ) );
180 if (8364 <= $char) {
181 $ascii = 128;
182 }
183 $crypt .= chr($ascii + 1);
184 }
185 $temp = str_replace( $link[1], "javascript:DeCryptX('" . $crypt . "')", $link[0]);
186 $temp = str_replace( $link[2], $this->_linktext($link[2]), $temp);
187 $content = str_replace( $link[0], $temp, $content);
188 }
189
190 } // foreach
191
192
193 return $content;
194 }
195
196 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
197
198 function _unicode($content)
199 {
200 global $cryptX_var;
201
202 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
203
204 foreach( $links as $link ) {
205
206 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
207 $mailto = "mailto:" . $mail[1];
208 /*
209 $crypt = '';
210 for ($i = 0; $i < strlen( $mailto ); $i++) {
211 $crypt .= "&#" . ord ( substr ( $mailto, $i ) ) . ";";
212 }
213 $content = str_replace( $mailto, $crypt, $content);
214 */
215 $content = str_replace( $mailto, antispambot($mailto), $content);
216 $content = str_replace( $link[2], $this->_linktext($link[2]), $content);
217 }
218
219 } // foreach
220 return $content;
221 }
222
223 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
224
225 function _autolink($content) {
226
227 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
228 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
229 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
230 $src[]="/(<a[^>]*>)<a[^>]*>/";
231 $src[]="/(<\/A>)<\/A>/i";
232
233 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
234 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
235 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
236 $tar[]="\\1";
237 $tar[]="\\1";
238
239 $content = preg_replace($src,$tar,$content);
240
241 return $content;
242 }
243
244 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
245
246
247 function _install() {
248 add_option(
249 'cryptX',
250 array(
251 'at' => ' [at] ',
252 'dot' => ' [dot] ',
253 'theContent' => 1,
254 'theExcerpt' => 0,
255 'java' => 1,
256 'opt_linktext' => 0,
257 )
258 );
259 }
260
261 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
262
263 /**
264 * Attach the menu page to the `Options` tab
265 */
266 function _header()
267 {
268 $cryptX_script.= "<script type=\"text/javascript\" src=\"" . get_option('siteurl') . '/' . PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) . "/js/cryptx.js\"></script>\n";
269 print($cryptX_script);
270 }
271
272 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
273
274 /**
275 * Attach the menu page to the `Options` tab
276 */
277 function _menu() {
278 add_submenu_page('options-general.php',
279 'CryptX',
280 'CryptX', 9,
281 __FILE__,
282 array($this, '_submenu')
283 );
284 }
285
286 /**
287 * Handles and renders the menu page
288 */
289 function _submenu() {
290 global $cryptX_var;
291
292 // sanitize referrer
293 //
294 $_SERVER['HTTP_REFERER'] = preg_replace(
295 '~&saved=.*$~Uis','', $_SERVER['HTTP_REFERER']
296 );
297
298 // information updated ?
299 //
300 if ($_POST['submit']) {
301
302 // save
303 //
304 update_option(
305 'cryptX',
306 $_POST['cryptX_var']
307 );
308
309 die("<script>document.location.href = '{$_SERVER['HTTP_REFERER']}&saved=settings:" . time() . "';</script>");
310 }
311
312 // operation report detected
313 //
314 if (@$_GET['saved']) {
315
316 list($saved, $ts) = explode(':', $_GET['saved']);
317 if (time() - $ts < 10) {
318 echo '<div id="message" class="updated fade"><p><strong>';
319
320 switch ($saved) {
321 case 'settings' :
322 echo 'Settings saved.';
323 break;
324 }
325
326 echo '</strong></p></div>';
327 }
328 }
329
330 // read the settings
331 //
332 //$cryptX = (array) get_option('cryptX');
333
334 ?>
335 <!-- Start Optionen im Adminbereich (xhtml, au�erhalb PHP) -->
336 <div class="wrap">
337 <h2><?php _e("CryptX Options...",'cryptx'); ?></h2>
338 <form method="post">
339 <blockquote>
340 <fieldset>
341 <legend><?php _e("Presentation",'cryptx'); ?></legend>
342 <table>
343 <tr>
344 <td><input name="cryptX_var[opt_linktext]" type="radio" id="opt_linktext" value="0" <?php echo ($cryptX_var[opt_linktext] == 0) ? 'checked="checked"' : ''; ?> />&nbsp;&nbsp;</td>
345 <td nowrap><?php _e("Replacement for '@'",'cryptx'); ?>&nbsp;&nbsp;</td>
346 <td ><input name="cryptX_var[at]" value="<?php echo $cryptX_var[at]; ?>" type="text" /></td>
347 </tr>
348 <tr>
349 <td>&nbsp;</td>
350 <td nowrap><?php _e("Replacement for '.'",'cryptx'); ?>&nbsp;&nbsp;</td>
351 <td><input name="cryptX_var[dot]" value="<?php echo $cryptX_var[dot]; ?>" type="text" /></td>
352 </tr>
353 <tr>
354 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext2" value="1" <?php echo ($cryptX_var[opt_linktext] == 1) ? 'checked="checked"' : ''; ?>/></td>
355 <td nowrap><?php _e("Text for link",'cryptx'); ?>&nbsp;&nbsp;</td>
356 <td><input name="cryptX_var[alt_linktext]" value="<?php echo $cryptX_var[alt_linktext]; ?>" type="text" /></td>
357 </tr>
358 <tr>
359 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext3" value="2" <?php echo ($cryptX_var[opt_linktext] == 2) ? 'checked="checked"' : ''; ?>/></td>
360 <td nowrap><?php _e("Image-URL",'cryptx'); ?>&nbsp;&nbsp;</td>
361 <td><input name="cryptX_var[alt_linkimage]" value="<?php echo $cryptX_var[alt_linkimage]; ?>" type="text" /></td>
362 </tr>
363 <tr>
364 <td>&nbsp;</td>
365 <td nowrap><?php _e("Title-Tag for the Image",'cryptx'); ?>&nbsp;&nbsp;</td>
366 <td><input name="cryptX_var[http_linkimage_title]" value="<?php echo $cryptX_var[http_linkimage_title]; ?>" type="text" /></td>
367 </tr>
368 <tr>
369 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext4" value="3" <?php echo ($cryptX_var[opt_linktext] == 3) ? 'checked="checked"' : ''; ?>/></td>
370 <td nowrap><?php _e("Select image from folder",'cryptx'); ?>&nbsp;&nbsp;</td>
371 <td><select name="cryptX_var[alt_uploadedimage]">
372 <?php foreach($this->_dirImages() as $image) { ?>
373 <option <?php echo ($cryptX_var[alt_uploadedimage] == $image) ? 'selected' : ''; ?> ><?php echo $image; ?></option>
374 <?php } ?>
375 </select></td>
376 </tr>
377 <tr>
378 <td>&nbsp;</td>
379 <td nowrap><?php _e("Title-Tag for the Image",'cryptx'); ?>&nbsp;&nbsp;</td>
380 <td><input name="cryptX_var[alt_linkimage_title]" value="<?php echo $cryptX_var[alt_linkimage_title]; ?>" type="text" /></td>
381 </tr>
382 <tr>
383 <td>&nbsp;</td>
384 <td nowrap colspan="2"><?php _e("Upload your favorite email-image to ../plugins/cryptx/images. Only .jpg and .gif Supported!",'cryptx'); ?></td>
385 </tr>
386 <tr>
387 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext2" value="4" <?php echo ($cryptX_var[opt_linktext] == 4) ? 'checked="checked"' : ''; ?>/></td>
388 <td nowrap colspan="2"><?php _e("Text scrambled by AntiSpamBot (<small>Try it and look at your site and check the html source!</small>)",'cryptx'); ?>&nbsp;&nbsp;</td>
389 </tr>
390 </table>
391 </fieldset><br />
392 <fieldset>
393 <legend><?php _e("General",'cryptx'); ?></legend>
394 <table>
395 <tr>
396 <td valign="top"><input name="cryptX_var[theContent]" <?php echo ($cryptX_var[theContent]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;</td>
397 <td nowrap><?php _e("Apply CryptX to the Content",'cryptx'); ?></td>
398 </tr>
399 <tr>
400 <td valign="top"><input name="cryptX_var[theExcerpt]" <?php echo ($cryptX_var[theExcerpt]) ? 'checked="checked"' : ''; ?> type="checkbox" /></td>
401 <td nowrap><?php _e("Apply CryptX to the Excerpt",'cryptx'); ?></td>
402 </tr>
403 <tr>
404 <td valign="top"><input name="cryptX_var[commentText]" <?php echo ($cryptX_var[commentText]) ? 'checked="checked"' : ''; ?> type="checkbox" /></td>
405 <td nowrap><?php _e("Apply CryptX to the Comments",'cryptx'); ?></td>
406 </tr>
407 </table><br />
408 <table>
409 <tr>
410 <td valign="top">
411 <input name="cryptX_var[java]" <?php echo ($cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="1" /></td>
412 <td nowrap><?php _e("Use javascript to hide the Email-Link.",'cryptx'); ?></td>
413 </tr>
414 <tr>
415 <td valign="top"><input name="cryptX_var[java]" <?php echo (!$cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="0" /></td>
416 <td nowrap><?php _e("Use Unicode to hide the Email-Link.",'cryptx'); ?>
417 </td>
418 </tr>
419 </table><br />
420 <table>
421 <tr>
422 <td valign="top"><input name="cryptX_var[autolink]" <?php echo ($cryptX_var[autolink]) ? 'checked="checked"' : ''; ?> type="checkbox" /></td>
423 <td nowrap><?php _e("Add mailto to all unlinked email addresses",'cryptx'); ?></td>
424 </tr>
425 </table>
426 </fieldset>
427 <input type="submit" name="submit" value="<?php _e("Update &raquo;",'cryptx'); ?>" />
428 </blockquote>
429 </form>
430 </div>
431 <?php
432 }
433
434 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
435
436
437 //--end-of-class
438 }
439
440 }
441
442 /////////////////////////////////////////////////////////////////////////////
443
444 /**
445 * Initiating the plugin...
446 * @see cryptX
447 */
448 new cryptX;
449
450 /**
451 * Create Template functions...
452 * $content = string to convert
453 * $text = string to replace linktext
454 * $echo = 0: keep result in a variable, 1: show result
455 */
456 function cryptx( $content, $text="", $css="", $echo=1 )
457 {
458 global $cryptX_var;
459
460 $cryptX = new cryptX;
461
462 $content = $cryptX->_autolink( $content );
463
464 if(@$cryptX_var[java]) {
465 $content = $cryptX->_encrypt( $content );
466 } else {
467 $content = $cryptX->_unicode( $content );
468 }
469
470 if("" != $text) {
471 $content = preg_replace( "/(<a[^>]*>)(.*)(<\/a>)/i", '$1'.$text.'$3', $content );
472 }
473 if("" != $css) {
474 $content = preg_replace( "/(<a[^>]*)(>)/i", '$1 class="'.$css.'"$2', $content );
475 }
476 if(1 == $echo) echo $content;
477
478 return $content;
479 }
480 ?>
481