PluginProbe
CryptX / 2.4.1
CryptX v2.4.1
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.1, at cryptx.php

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