PluginProbe
CryptX / 2.1
CryptX v2.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 2.4.5 All 92 releases
cryptx / cryptx.php

cryptx.php in CryptX 2.1, at cryptx.php

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