PluginProbe
CryptX / 2.4.2
CryptX v2.4.2
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.2, at cryptx.php

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