PluginProbe
CryptX / 2.4.3
CryptX v2.4.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 2.4.3, at cryptx.php

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