PluginProbe
CryptX / 2.4.0
CryptX v2.4.0
4.2.1 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 All 93 releases
cryptx / cryptx.php

cryptx.php in CryptX 2.4.0, at cryptx.php

513 lines 16.9 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: 2.4.0
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 add_action('admin_menu',
93 array(&$this, 'cryptx_meta_box')
94 );
95
96 add_action('wp_insert_post',
97 array(&$this, 'cryptx_insert_post')
98 );
99 add_action('wp_update_post',
100 array(&$this, 'cryptx_insert_post')
101 );
102
103 } // End function
104
105 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
106
107 function filter($apply)
108 {
109 global $cryptX_var;
110
111 if (@$cryptX_var[autolink]) {
112 add_filter($apply,
113 array(&$this, 'autolink'),
114 5);
115 }
116
117 add_filter($apply, array($this, 'encryptx'), 11);
118 add_filter($apply, array($this, 'linktext'), 12);
119 }
120
121 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
122
123
124 function linktext($content)
125 {
126 global $post;
127 $cryptxoffmeta = get_post_meta($post->ID,'cryptxoff',true);
128 if ($cryptxoffmeta == "false") {
129 $content = preg_replace_callback("/([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/i", array(get_class($this), '_Linktext'), $content );
130 }
131 return $content;
132 }
133
134 function _linktext($Match)
135 {
136 global $cryptX_var;
137 switch ($cryptX_var[opt_linktext]) {
138
139 case 1: // alternative text for mail link
140 $linktext = $cryptX_var[alt_linktext];
141 break;
142
143 case 2: // alternative image for mail link
144 $linktext = "<img src=\"" . $cryptX_var[alt_linkimage] . "\" class=\"cryptxImage\" alt=\"" . $cryptX_var[alt_linkimage_title] . "\" title=\"" . $cryptX_var[alt_linkimage_title] . "\">";
145 break;
146
147 case 3: // uploaded image for mail link
148 $imgurl = "/" . PLUGINDIR . "/" . dirname(plugin_basename (__FILE__)) . "/images/" . $cryptX_var[alt_uploadedimage];
149 $linktext = "<img src=\"" . $imgurl . "\" class=\"cryptxImage\" alt=\"" . $cryptX_var[http_linkimage_title] . "\" title=\"" . $cryptX_var[http_linkimage_title] . "\">";
150 break;
151
152 case 4: // text scrambled by antispambot
153 $linktext = antispambot($Match[1]);
154 break;
155
156 default:
157 $linktext = str_replace( "@", $cryptX_var[at], $Match[1]);
158 $linktext = str_replace( ".", $cryptX_var[dot], $linktext);
159
160 }
161 return $linktext;
162 }
163
164 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
165
166 function _dirImages()
167 {
168 $dir = $_SERVER["DOCUMENT_ROOT"].'/'.PLUGINDIR.'/'.dirname(plugin_basename (__FILE__)).'/images';
169 echo "<!-- cryptximgdir: $dir -->";
170 $fh = opendir($dir); //Verzeichnis
171 $verzeichnisinhalt = array();
172 while (true == ($file = readdir($fh)))
173 {
174 echo "<!-- BILD: $file -->";
175 if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif"))
176 {
177 $verzeichnisinhalt[] = $file;
178 }
179 }
180 return $verzeichnisinhalt;
181 }
182
183 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
184
185 function encryptx($content)
186 {
187 global $post;
188 $cryptxoffmeta = get_post_meta($post->ID,'cryptxoff',true);
189 if ($cryptxoffmeta == "false") {
190 $content = preg_replace_callback('/<a (.*?)(href=("|\')mailto:(.*?)("|\')(.*?)|)>(.*?)<\/a>/i', array(get_class($this), 'mailtocrypt'), $content );
191 }
192 return $content;
193 }
194
195 function mailtocrypt($Match)
196 {
197 global $cryptX_var;
198 $return = $Match[0];
199 $mailto = "mailto:" . $Match[4];
200 if (@$cryptX_var[java]) {
201 $crypt = '';
202 $ascii = 0;
203 for ($i = 0; $i < strlen( $Match[4] ); $i++) {
204 $ascii = ord ( substr ( $Match[4], $i ) );
205 if (8364 <= $char) {
206 $ascii = 128;
207 }
208 $crypt .= chr($ascii + 1);
209 }
210 $javascript="javascript:DeCryptX('" . $crypt . "')";
211 $return = str_replace( "mailto:".$Match[4], $javascript, $return);
212 } else {
213 $return = str_replace( $mailto, antispambot($mailto), $return);
214 }
215 return $return;
216 }
217
218
219 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
220
221 function autolink($content) {
222
223 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
224 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
225 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
226 $src[]="/(<a[^>]*>)<a[^>]*>/";
227 $src[]="/(<\/A>)<\/A>/i";
228
229 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
230 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
231 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
232 $tar[]="\\1";
233 $tar[]="\\1";
234
235 $content = preg_replace($src,$tar,$content);
236
237 return $content;
238 }
239
240 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
241
242
243 function install() {
244 add_option(
245 'cryptX',
246 array(
247 'at' => ' [at] ',
248 'dot' => ' [dot] ',
249 'theContent' => 1,
250 'theExcerpt' => 0,
251 'commentText' => 1,
252 'java' => 1,
253 'opt_linktext' => 0,
254 )
255 );
256 }
257
258 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
259
260 /**
261 * Attach the menu page to the `Options` tab
262 */
263 function header()
264 {
265 $cryptX_script.= "<script type=\"text/javascript\" src=\"" . get_option('siteurl') . '/' . PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) . "/js/cryptx.js\"></script>\n";
266 print($cryptX_script);
267 }
268
269 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
270
271
272 function cryptx_meta() {
273 global $post;
274 $cryptxoff = false;
275 $cryptxoffmeta = get_post_meta($post->ID,'cryptxoff',true);
276 if ($cryptxoffmeta == "true") {
277 $cryptxoff = true;
278 }
279 ?>
280 <input type="checkbox" name="cryptxoff" <?php if ($cryptxoff) { echo 'checked="checked"'; } ?>/> Disable CryptX
281 <?php
282 }
283
284 function cryptx_option() {
285 global $post;
286 $cryptxoff = false;
287 $cryptxoffmeta = get_post_meta($post->ID,'cryptxoff',true);
288 if ($cryptxoffmeta == "true") {
289 $cryptxoff = true;
290 }
291 if ( current_user_can('edit_posts') ) { ?>
292 <fieldset id="cryptxoption" class="dbx-box">
293 <h3 class="dbx-handle">CryptX</h3>
294 <div class="dbx-content">
295 <input type="checkbox" name="cryptxon" <?php if ($cryptxoff) { echo 'checked="checked"'; } ?>/> CryptX disabled?
296 </div>
297 </fieldset>
298 <?php
299 }
300 }
301
302 function cryptx_meta_box() {
303 // Check whether the 2.5 function add_meta_box exists, and if it doesn't use 2.3 functions.
304 if ( function_exists('add_meta_box') ) {
305 add_meta_box('cryptx','CryptX', array(&$this, 'cryptx_meta'),'post');
306 add_meta_box('cryptx','CryptX', array(&$this, 'cryptx_meta'),'page');
307 } else {
308 add_action('dbx_post_sidebar', array(&$this, 'cryptx_option'));
309 add_action('dbx_page_sidebar', array(&$this, 'cryptx_option'));
310 }
311 }
312
313 //add_action('admin_menu', 'cryptx_meta_box');
314
315 function cryptx_insert_post($pID) {
316 if (isset($_POST['cryptxoff'])) {
317 add_post_meta($pID,'cryptxoff',"true", true) or update_post_meta($pID, 'cryptxoff', "true");
318 } else {
319 add_post_meta($pID,'cryptxoff',"false", true) or update_post_meta($pID, 'cryptxoff', "false");
320 }
321 }
322 //add_action('wp_insert_post', array(&$this, 'cryptx_insert_post'));
323
324
325
326
327 /**
328 * Attach the menu page to the `Options` tab
329 */
330 function menu() {
331 add_options_page(
332 'CryptX',
333 (version_compare($GLOBALS['wp_version'], '2.6.999', '>') ? '<img src="' .@plugins_url('cryptx/icon.png'). '" width="10" height="10" alt="CryptX Icon" />' : ''). 'CryptX',
334 9,
335 __FILE__,
336 array(
337 $this,
338 '_submenu'
339 )
340 );
341 }
342
343 /**
344 * Handles and renders the menu page
345 */
346 function _submenu() {
347 global $cryptX_var;
348
349 if (isset($_POST) && !empty($_POST)) {
350 if (function_exists('current_user_can') === true && (current_user_can('manage_options') === false || current_user_can('edit_plugins') === false)) {
351 wp_die("You don't have permission to access!");
352 }
353 check_admin_referer('cryptX');
354 update_option( 'cryptX', $_POST['cryptX_var']);
355 $cryptX_var = (array) get_option('cryptX'); // reread Options
356 ?>
357 <div id="message" class="updated fade">
358 <p><strong><?php _e('Settings saved.') ?></strong></p>
359 </div>
360 <?php } ?>
361
362 <div class="wrap">
363 <?php if (version_compare($GLOBALS['wp_version'], '2.6.999', '>')) { ?>
364 <div class="icon32" style="background: url(<?php echo @plugins_url('cryptx/icon32.png') ?>) no-repeat"><br /></div>
365 <?php } ?>
366 <h2>CryptX</h2>
367
368 <form method="post" action="">
369
370 <?php wp_nonce_field('cryptX') ?>
371
372 <div id="poststuff" class="ui-sortable">
373 <div id="wp_seo_about_wpseo" class="postbox">
374
375 <h3><?php _e("Presentation",'cryptx'); ?></h3>
376
377 <div class="inside">
378 <table class="form-table">
379 <tr valign="top">
380 <td><input name="cryptX_var[opt_linktext]" type="radio" id="opt_linktext" value="0" <?php echo ($cryptX_var[opt_linktext] == 0) ? 'checked="checked"' : ''; ?> /></td>
381 <th scope="row"><label for="cryptX_var[at]"><?php _e("Replacement for '@'",'cryptx'); ?></label></th>
382 <td><input name="cryptX_var[at]" value="<?php echo $cryptX_var[at]; ?>" type="text" class="regular-text" /></td>
383 </tr>
384 <tr valign="top">
385 <td>&nbsp;</td>
386 <th scope="row"><label for="cryptX_var[dot]"><?php _e("Replacement for '.'",'cryptx'); ?></label></th>
387 <td><input name="cryptX_var[dot]" value="<?php echo $cryptX_var[dot]; ?>" type="text" class="regular-text" /></td>
388 </tr>
389 <tr valign="top">
390 <td scope="row"><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext2" value="1" <?php echo ($cryptX_var[opt_linktext] == 1) ? 'checked="checked"' : ''; ?>/></td>
391 <th><label for="cryptX_var[alt_linktext]"><?php _e("Text for link",'cryptx'); ?></label></th>
392 <td><input name="cryptX_var[alt_linktext]" value="<?php echo $cryptX_var[alt_linktext]; ?>" type="text" class="regular-text" /></td>
393 </tr>
394 <tr valign="top">
395 <td scope="row"><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext3" value="2" <?php echo ($cryptX_var[opt_linktext] == 2) ? 'checked="checked"' : ''; ?>/></td>
396 <th><label for="cryptX_var[alt_linkimage]"><?php _e("Image-URL",'cryptx'); ?></label></th>
397 <td><input name="cryptX_var[alt_linkimage]" value="<?php echo $cryptX_var[alt_linkimage]; ?>" type="text" class="regular-text" /></td>
398 </tr>
399 <tr valign="top">
400 <td scope="row">&nbsp;</td>
401 <th><label for="cryptX_var[http_linkimage_title]"><?php _e("Title-Tag for the Image",'cryptx'); ?></label></th>
402 <td><input name="cryptX_var[http_linkimage_title]" value="<?php echo $cryptX_var[http_linkimage_title]; ?>" type="text" class="regular-text" /></td>
403 </tr>
404 <tr valign="top">
405 <td scope="row"><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext4" value="3" <?php echo ($cryptX_var[opt_linktext] == 3) ? 'checked="checked"' : ''; ?>/></td>
406 <th><label for="cryptX_var[alt_uploadedimage]"><?php _e("Select image from folder",'cryptx'); ?></label></th>
407 <td><select name="cryptX_var[alt_uploadedimage]" onchange="cryptX_bild_wechsel(this)">
408 <?php foreach($this->_dirImages() as $image) {
409 $FirstIMG = (!isset($FirstIMG))? plugins_url('cryptx/images/').$image : ($cryptX_var[alt_uploadedimage] == plugins_url('cryptx/images/').$image) ? plugins_url('cryptx/images/').$image : $FirstIMG;
410 ?>
411 <option value="<?php echo plugins_url('cryptx/images/').$image; ?>" <?php echo ($cryptX_var[alt_uploadedimage] == plugins_url('cryptx/images/').$image) ? 'selected' : ''; ?> ><?php echo $image; ?></option>
412 <?php } ?>
413 </select>&nbsp;&nbsp;<img src="<?php echo $FirstIMG; ?>" id="cryptXmailTo"></td>
414 </tr>
415 <tr valign="top">
416 <td>&nbsp;</td>
417 <th><label for="cryptX_var[alt_linkimage_title]"><?php _e("Title-Tag for the Image",'cryptx'); ?></label></th>
418 <td><input name="cryptX_var[alt_linkimage_title]" value="<?php echo $cryptX_var[alt_linkimage_title]; ?>" type="text" class="regular-text" />
419 <span class="setting-description"><?php _e("Upload your favorite email-image to ../plugins/cryptx/images. Only .jpg and .gif Supported!",'cryptx'); ?></span></td>
420 </tr>
421 <tr valign="top">
422 <td scope="row"><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext" value="4" <?php echo ($cryptX_var[opt_linktext] == 4) ? 'checked="checked"' : ''; ?>/></td>
423 <th colspan="2"><?php _e("Text scrambled by AntiSpamBot (<small>Try it and look at your site and check the html source!</small>)",'cryptx'); ?></th>
424 </tr>
425 </table>
426 </div>
427 </div>
428
429 <div id="wp_seo_about_wpseo" class="postbox">
430
431 <h3><?php _e("General",'cryptx'); ?></h3>
432
433 <div class="inside">
434 <table class="form-table">
435 <tr valign="top">
436 <th scope="row"><?php _e("Apply CryptX to...",'cryptx'); ?></th>
437 <td><input name="cryptX_var[theContent]" <?php echo ($cryptX_var[theContent]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Content",'cryptx'); ?><br/>
438 <input name="cryptX_var[theExcerpt]" <?php echo ($cryptX_var[theExcerpt]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Excerpt",'cryptx'); ?><br/>
439 <input name="cryptX_var[commentText]" <?php echo ($cryptX_var[commentText]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Comments",'cryptx'); ?></td>
440 </tr>
441 <tr valign="top">
442 <th scope="row"><?php _e("Type of decryption",'cryptx'); ?></th>
443 <td><input name="cryptX_var[java]" <?php echo ($cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="1" />&nbsp;&nbsp;<?php _e("Use javascript to hide the Email-Link.",'cryptx'); ?><br/>
444 <input name="cryptX_var[java]" <?php echo (!$cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="0" />&nbsp;&nbsp;<?php _e("Use Unicode to hide the Email-Link.",'cryptx'); ?></td>
445 </tr>
446 <tr valign="top">
447 <th scope="row" colspan="2"><input name="cryptX_var[autolink]" <?php echo ($cryptX_var[autolink]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Add mailto to all unlinked email addresses",'cryptx'); ?></th>
448 </tr>
449 </table>
450
451 </div>
452 </div>
453 <p><input type="submit" name="cryptX" class="button-primary" value="<?php _e('Save Changes') ?>" /></p>
454 </div>
455
456 </form>
457
458 <script type="text/javascript">
459 <!--
460 function cryptX_bild_wechsel(select){
461 document.getElementById("cryptXmailTo").src = select.options[select.options.selectedIndex].value;
462 return true;
463 } //-->
464 </script>
465
466 </div>
467 <?php
468 }
469
470 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
471
472
473 //--end-of-class
474 }
475
476 }
477
478 /////////////////////////////////////////////////////////////////////////////
479
480 /**
481 * Initiating the plugin...
482 * @see cryptX
483 */
484 new cryptX;
485
486 /**
487 * Create Template functions...
488 * $content = string to convert
489 * $text = string to replace linktext
490 * $css = assign a css class to the link
491 * $echo = 0: keep result in a variable, 1: show result
492 */
493 function cryptx( $content, $text="", $css="", $echo=1 )
494 {
495 global $cryptX_var;
496
497 $cryptX = new cryptX;
498
499 $content = $cryptX->autolink( $content );
500
501 $content = $cryptX->encryptx( $content );
502
503 if("" != $text) {
504 $content = preg_replace( "/(<a[^>]*>)(.*)(<\/a>)/i", '$1'.$text.'$3', $content );
505 }
506 if("" != $css) {
507 $content = preg_replace( "/(<a[^>]*)(>)/i", '$1 class="'.$css.'"$2', $content );
508 }
509 if(1 == $echo) echo $content;
510
511 return $content;
512 }
513 ?>