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

467 lines 15.3 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.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 } // 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 echo "<!-- ".$fh." -->";
155 $verzeichnisinhalt = array();
156 while (true == ($file = readdir($fh)))
157 {
158 echo "<!-- ".$file." -->";
159 if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif")) //Abfrage nach g�ltigen Datenformat
160 {
161 $verzeichnisinhalt[] = $file;
162 }
163 }
164 return $verzeichnisinhalt;
165 }
166
167 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
168
169 function _encrypt($content)
170 {
171 global $cryptX_var;
172
173 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
174
175 foreach( $links as $link ) {
176
177 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
178 $crypt = '';
179 $ascii = 0;
180 for ($i = 0; $i < strlen( $mail[1] ); $i++) {
181 $ascii = ord ( substr ( $mail[1], $i ) );
182 if (8364 <= $char) {
183 $ascii = 128;
184 }
185 $crypt .= chr($ascii + 1);
186 }
187 $temp = str_replace( $link[1], "javascript:DeCryptX('" . $crypt . "')", $link[0]);
188 $temp = str_replace( $link[2], $this->_linktext($link[2]), $temp);
189 $content = str_replace( $link[0], $temp, $content);
190 }
191
192 } // foreach
193
194
195 return $content;
196 }
197
198 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
199
200 function _unicode($content)
201 {
202 global $cryptX_var;
203
204 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
205
206 foreach( $links as $link ) {
207
208 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
209 $mailto = "mailto:" . $mail[1];
210 /*
211 $crypt = '';
212 for ($i = 0; $i < strlen( $mailto ); $i++) {
213 $crypt .= "&#" . ord ( substr ( $mailto, $i ) ) . ";";
214 }
215 $content = str_replace( $mailto, $crypt, $content);
216 */
217 $content = str_replace( $mailto, antispambot($mailto), $content);
218 $content = str_replace( $link[2], $this->_linktext($link[2]), $content);
219 }
220
221 } // foreach
222 return $content;
223 }
224
225 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
226
227 function _autolink($content) {
228
229 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
230 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
231 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
232 $src[]="/(<a[^>]*>)<a[^>]*>/";
233 $src[]="/(<\/A>)<\/A>/i";
234
235 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
236 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
237 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
238 $tar[]="\\1";
239 $tar[]="\\1";
240
241 $content = preg_replace($src,$tar,$content);
242
243 return $content;
244 }
245
246 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
247
248
249 function _install() {
250 add_option(
251 'cryptX',
252 array(
253 'at' => ' [at] ',
254 'dot' => ' [dot] ',
255 'theContent' => 1,
256 'theExcerpt' => 0,
257 'commentText' => 1,
258 'java' => 1,
259 'opt_linktext' => 0,
260 )
261 );
262 }
263
264 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
265
266 /**
267 * Attach the menu page to the `Options` tab
268 */
269 function _header()
270 {
271 $cryptX_script.= "<script type=\"text/javascript\" src=\"" . get_option('siteurl') . '/' . PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) . "/js/cryptx.js\"></script>\n";
272 print($cryptX_script);
273 }
274
275 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
276
277 /**
278 * Attach the menu page to the `Options` tab
279 */
280 function _menu() {
281 add_options_page(
282 'CryptX',
283 (version_compare($GLOBALS['wp_version'], '2.6.999', '>') ? '<img src="' .@plugins_url('cryptx/icon.png'). '" width="10" height="10" alt="CryptX Icon" />' : ''). 'CryptX',
284 9,
285 __FILE__,
286 array(
287 $this,
288 '_submenu'
289 )
290 );
291 }
292
293 /**
294 * Handles and renders the menu page
295 */
296 function _submenu() {
297 global $cryptX_var;
298
299 if (isset($_POST) && !empty($_POST)) {
300 if (function_exists('current_user_can') === true && (current_user_can('manage_options') === false || current_user_can('edit_plugins') === false)) {
301 wp_die("You don't have permission to access!");
302 }
303 check_admin_referer('cryptX');
304 update_option( 'cryptX', $_POST['cryptX_var']);
305 $cryptX_var = (array) get_option('cryptX'); // reread Options
306 ?>
307 <div id="message" class="updated fade">
308 <p><strong><?php _e('Settings saved.') ?></strong></p>
309 </div>
310 <?php } ?>
311
312 <div class="wrap">
313 <?php if (version_compare($GLOBALS['wp_version'], '2.6.999', '>')) { ?>
314 <div class="icon32" style="background: url(<?php echo @plugins_url('cryptx/icon32.png') ?>) no-repeat"><br /></div>
315 <?php } ?>
316 <h2>CryptX</h2>
317
318 <form method="post" action="">
319
320 <?php wp_nonce_field('cryptX') ?>
321
322 <div id="poststuff" class="ui-sortable">
323 <div id="wp_seo_about_wpseo" class="postbox">
324
325 <h3><?php _e("Presentation",'cryptx'); ?></h3>
326
327 <div class="inside">
328 <table class="form-table">
329 <tr valign="top">
330 <td><input name="cryptX_var[opt_linktext]" type="radio" id="opt_linktext" value="0" <?php echo ($cryptX_var[opt_linktext] == 0) ? 'checked="checked"' : ''; ?> /></td>
331 <th scope="row"><label for="cryptX_var[at]"><?php _e("Replacement for '@'",'cryptx'); ?></label></th>
332 <td><input name="cryptX_var[at]" value="<?php echo $cryptX_var[at]; ?>" type="text" class="regular-text" /></td>
333 </tr>
334 <tr valign="top">
335 <td>&nbsp;</td>
336 <th scope="row"><label for="cryptX_var[dot]"><?php _e("Replacement for '.'",'cryptx'); ?></label></th>
337 <td><input name="cryptX_var[dot]" value="<?php echo $cryptX_var[dot]; ?>" type="text" class="regular-text" /></td>
338 </tr>
339 <tr valign="top">
340 <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>
341 <th><label for="cryptX_var[alt_linktext]"><?php _e("Text for link",'cryptx'); ?></label></th>
342 <td><input name="cryptX_var[alt_linktext]" value="<?php echo $cryptX_var[alt_linktext]; ?>" type="text" class="regular-text" /></td>
343 </tr>
344 <tr valign="top">
345 <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>
346 <th><label for="cryptX_var[alt_linkimage]"><?php _e("Image-URL",'cryptx'); ?></label></th>
347 <td><input name="cryptX_var[alt_linkimage]" value="<?php echo $cryptX_var[alt_linkimage]; ?>" type="text" class="regular-text" /></td>
348 </tr>
349 <tr valign="top">
350 <td scope="row">&nbsp;</td>
351 <th><label for="cryptX_var[http_linkimage_title]"><?php _e("Title-Tag for the Image",'cryptx'); ?></label></th>
352 <td><input name="cryptX_var[http_linkimage_title]" value="<?php echo $cryptX_var[http_linkimage_title]; ?>" type="text" class="regular-text" /></td>
353 </tr>
354 <tr valign="top">
355 <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>
356 <th><label for="cryptX_var[alt_uploadedimage]"><?php _e("Select image from folder",'cryptx'); ?></label></th>
357 <td><select name="cryptX_var[alt_uploadedimage]" onchange="cryptX_bild_wechsel(this)">
358 <?php foreach($this->_dirImages() as $image) {
359 $FirstIMG = (!isset($FirstIMG))? plugins_url('cryptx/images/').$image : ($cryptX_var[alt_uploadedimage] == plugins_url('cryptx/images/').$image) ? plugins_url('cryptx/images/').$image : $FirstIMG;
360 ?>
361 <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>
362 <?php } ?>
363 </select>&nbsp;&nbsp;<img src="<?php echo $FirstIMG; ?>" id="cryptXmailTo"></td>
364 </tr>
365 <tr valign="top">
366 <td>&nbsp;</td>
367 <th><label for="cryptX_var[alt_linkimage_title]"><?php _e("Title-Tag for the Image",'cryptx'); ?></label></th>
368 <td><input name="cryptX_var[alt_linkimage_title]" value="<?php echo $cryptX_var[alt_linkimage_title]; ?>" type="text" class="regular-text" />
369 <span class="setting-description"><?php _e("Upload your favorite email-image to ../plugins/cryptx/images. Only .jpg and .gif Supported!",'cryptx'); ?></span></td>
370 </tr>
371 <tr valign="top">
372 <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>
373 <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>
374 </tr>
375 </table>
376 </div>
377 </div>
378
379 <div id="wp_seo_about_wpseo" class="postbox">
380
381 <h3><?php _e("General",'cryptx'); ?></h3>
382
383 <div class="inside">
384 <table class="form-table">
385 <tr valign="top">
386 <th scope="row"><?php _e("Apply CryptX to...",'cryptx'); ?></th>
387 <td><input name="cryptX_var[theContent]" <?php echo ($cryptX_var[theContent]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Content",'cryptx'); ?><br/>
388 <input name="cryptX_var[theExcerpt]" <?php echo ($cryptX_var[theExcerpt]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Excerpt",'cryptx'); ?><br/>
389 <input name="cryptX_var[commentText]" <?php echo ($cryptX_var[commentText]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;<?php _e("Comments",'cryptx'); ?></td>
390 </tr>
391 <tr valign="top">
392 <th scope="row"><?php _e("Type of decryption",'cryptx'); ?></th>
393 <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/>
394 <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>
395 </tr>
396 <tr valign="top">
397 <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>
398 </tr>
399 </table>
400
401 </div>
402 </div>
403 <p><input type="submit" name="cryptX" class="button-primary" value="<?php _e('Save Changes') ?>" /></p>
404 </div>
405
406 </form>
407
408 <script type="text/javascript">
409 <!--
410 function cryptX_bild_wechsel(select){
411 document.getElementById("cryptXmailTo").src = select.options[select.options.selectedIndex].value;
412 return true;
413 } //-->
414 </script>
415
416 </div>
417 <?php
418 }
419
420 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
421
422
423 //--end-of-class
424 }
425
426 }
427
428 /////////////////////////////////////////////////////////////////////////////
429
430 /**
431 * Initiating the plugin...
432 * @see cryptX
433 */
434 new cryptX;
435
436 /**
437 * Create Template functions...
438 * $content = string to convert
439 * $text = string to replace linktext
440 * $echo = 0: keep result in a variable, 1: show result
441 */
442 function cryptx( $content, $text="", $css="", $echo=1 )
443 {
444 global $cryptX_var;
445
446 $cryptX = new cryptX;
447
448 $content = $cryptX->_autolink( $content );
449
450 if(@$cryptX_var[java]) {
451 $content = $cryptX->_encrypt( $content );
452 } else {
453 $content = $cryptX->_unicode( $content );
454 }
455
456 if("" != $text) {
457 $content = preg_replace( "/(<a[^>]*>)(.*)(<\/a>)/i", '$1'.$text.'$3', $content );
458 }
459 if("" != $css) {
460 $content = preg_replace( "/(<a[^>]*)(>)/i", '$1 class="'.$css.'"$2', $content );
461 }
462 if(1 == $echo) echo $content;
463
464 return $content;
465 }
466 ?>
467