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

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