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

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