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

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