PluginProbe
CryptX / 1.6
CryptX v1.6
4.2.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 All 93 releases
cryptx / cryptx.php

cryptx.php in CryptX 1.6, at cryptx.php

452 lines 13.0 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: 1.6
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
59 // attach to admin menu
60 //
61 if (is_admin()) {
62 add_action('admin_menu',
63 array(&$this, '_menu')
64 );
65 }
66
67 // attach to plugin installation
68 //
69 add_action(
70 'activate_' . str_replace(
71 DIRECTORY_SEPARATOR, '/',
72 str_replace(
73 realpath(ABSPATH . PLUGINDIR) . DIRECTORY_SEPARATOR,
74 '', __FILE__
75 )
76 ),
77 array(&$this, '_install')
78 );
79
80 // attach javascript to Header
81 //
82 if (@$cryptX_var[java]) {
83 add_action(
84 'wp_head',
85 array(&$this, '_header')
86 );
87 }
88
89 } // End function
90
91 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
92
93 function _filter($apply)
94 {
95 global $cryptX_var;
96
97 if (@$cryptX_var[autolink]) {
98 add_filter($apply,
99 array(&$this, '_autolink'));
100 }
101 if (@$cryptX_var[java]) {
102 add_filter($apply,
103 array(&$this, '_encrypt'));
104 } else {
105 add_filter($apply,
106 array(&$this, '_unicode'));
107 }
108
109 }
110
111 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
112
113 function _linktext($txt)
114 {
115 global $cryptX_var;
116
117 switch ($cryptX_var[opt_linktext]) {
118
119 case 1: // alternative text for mail link
120 $linktext = $cryptX_var[alt_linktext];
121 break;
122
123 case 2: // alternative image for mail link
124 $linktext = "<img src=\"" . $cryptX_var[alt_linkimage] . "\" class=\"cryptxImage\" alt=\"email\">";
125 break;
126
127 case 3: // uploaded image for mail link
128 $imgurl = "/" . PLUGINDIR . "/" . dirname(plugin_basename (__FILE__)) . "/images/" . $cryptX_var[alt_uploadedimage];
129 $linktext = "<img src=\"" . $imgurl . "\" class=\"cryptxImage\" alt=\"" . $cryptX_var[alt_uploadedimage] . "\">";
130 break;
131
132 default:
133 $linktext = str_replace( "@", $cryptX_var[at], $txt);
134 $linktext = str_replace( ".", $cryptX_var[dot], $linktext);
135
136 }
137
138 return $linktext;
139 }
140
141 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
142
143 function _dirImages()
144 {
145 $dir = $_SERVER["DOCUMENT_ROOT"].'/'.PLUGINDIR.'/'.dirname(plugin_basename (__FILE__)).'/images';
146 $fh = opendir($dir); //Verzeichnis
147 $verzeichnisinhalt = array();
148 while (true == ($file = readdir($fh)))
149 {
150 if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif")) //Abfrage nach g�ltigen Datenformat
151 {
152 $verzeichnisinhalt[] = $file;
153 }
154 }
155 return $verzeichnisinhalt;
156 }
157
158 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
159
160 function _encrypt($content)
161 {
162 global $cryptX_var;
163
164 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
165
166 foreach( $links as $link ) {
167
168 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
169 $crypt = '';
170 $ascii = 0;
171 for ($i = 0; $i < strlen( $mail[1] ); $i++) {
172 $ascii = ord ( substr ( $mail[1], $i ) );
173 if (8364 <= $char) {
174 $ascii = 128;
175 }
176 $crypt .= chr($ascii + 1);
177 }
178 $temp = str_replace( $link[1], "javascript:DeCryptX('" . $crypt . "')", $link[0]);
179 $temp = str_replace( $link[2], $this->_linktext($link[2]), $temp);
180 $content = str_replace( $link[0], $temp, $content);
181 }
182
183 } // foreach
184
185
186 return $content;
187 }
188
189 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
190
191 function _unicode($content)
192 {
193 global $cryptX_var;
194
195 preg_match_all('/<a[^>]*href=["|\'](.*)["|\'].*>(.*)<\/a>/iUs', $content, $links, PREG_SET_ORDER);
196
197 foreach( $links as $link ) {
198
199 if(preg_match('/mailto:(.*)/', $link[1], $mail)) {
200 $mailto = "mailto:" . $mail[1];
201 $crypt = '';
202 for ($i = 0; $i < strlen( $mailto ); $i++) {
203 $crypt .= "&#" . ord ( substr ( $mailto, $i ) ) . ";";
204 }
205 $content = str_replace( $mailto, $crypt, $content);
206 $content = str_replace( $link[2], $this->_linktext($link[2]), $content);
207 }
208
209 } // foreach
210 return $content;
211 }
212
213 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
214
215 function _autolink($content) {
216
217 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
218 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
219 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
220 $src[]="/(<a[^>]*>)<a[^>]*>/";
221 $src[]="/(<\/A>)<\/A>/i";
222
223 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
224 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
225 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
226 $tar[]="\\1";
227 $tar[]="\\1";
228
229 $content = preg_replace($src,$tar,$content);
230
231 return $content;
232 }
233
234 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
235
236 function _install() {
237 add_option(
238 'cryptX',
239 array(
240 'at' => ' [at] ',
241 'dot' => ' [dot] ',
242 'theContent' => 1,
243 'theExcerpt' => 0,
244 'java' => 1,
245 'opt_linktext' => 0,
246 )
247 );
248 }
249
250 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
251
252 /**
253 * Attach the menu page to the `Options` tab
254 */
255 function _header()
256 {
257 $cryptX_script.= "<script type=\"text/javascript\" src=\"" . get_option('siteurl') . '/' . PLUGINDIR . '/' . dirname(plugin_basename (__FILE__)) . "/js/cryptx.js\"></script>\n";
258 print($cryptX_script);
259 }
260
261 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
262
263 /**
264 * Attach the menu page to the `Options` tab
265 */
266 function _menu() {
267 add_submenu_page('options-general.php',
268 'CryptX',
269 'CryptX', 9,
270 __FILE__,
271 array($this, '_submenu')
272 );
273 }
274
275 /**
276 * Handles and renders the menu page
277 */
278 function _submenu() {
279 global $cryptX_var;
280
281 // sanitize referrer
282 //
283 $_SERVER['HTTP_REFERER'] = preg_replace(
284 '~&saved=.*$~Uis','', $_SERVER['HTTP_REFERER']
285 );
286
287 // information updated ?
288 //
289 if ($_POST['submit']) {
290
291 // save
292 //
293 update_option(
294 'cryptX',
295 $_POST['cryptX_var']
296 );
297
298 die("<script>document.location.href = '{$_SERVER['HTTP_REFERER']}&saved=settings:" . time() . "';</script>");
299 }
300
301 // operation report detected
302 //
303 if (@$_GET['saved']) {
304
305 list($saved, $ts) = explode(':', $_GET['saved']);
306 if (time() - $ts < 10) {
307 echo '<div id="message" class="updated fade"><p><strong>';
308
309 switch ($saved) {
310 case 'settings' :
311 echo 'Settings saved.';
312 break;
313 }
314
315 echo '</strong></p></div>';
316 }
317 }
318
319 // read the settings
320 //
321 //$cryptX = (array) get_option('cryptX');
322
323 ?>
324 <!-- Start Optionen im Adminbereich (xhtml, au�erhalb PHP) -->
325 <div class="wrap">
326 <h2><?php _e("CryptX Options...",'cryptx'); ?></h2>
327 <form method="post">
328 <blockquote>
329 <fieldset>
330 <legend><?php _e("Presentation",'cryptx'); ?></legend>
331 <table>
332 <tr>
333 <td><input name="cryptX_var[opt_linktext]" type="radio" id="opt_linktext" value="0" <?php echo ($cryptX_var[opt_linktext] == 0) ? 'checked="checked"' : ''; ?> />&nbsp;&nbsp;</td>
334 <td nowrap><?php _e("Replacement for '@'",'cryptx'); ?>&nbsp;&nbsp;</td>
335 <td ><input name="cryptX_var[at]" value="<?php echo $cryptX_var[at]; ?>" type="text" /></td>
336 </tr>
337 <tr>
338 <td>&nbsp;</td>
339 <td nowrap><?php _e("Replacement for '.'",'cryptx'); ?>&nbsp;&nbsp;</td>
340 <td><input name="cryptX_var[dot]" value="<?php echo $cryptX_var[dot]; ?>" type="text" /></td>
341 </tr>
342 <tr>
343 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext2" value="1" <?php echo ($cryptX_var[opt_linktext] == 1) ? 'checked="checked"' : ''; ?>/></td>
344 <td nowrap><?php _e("Text for link",'cryptx'); ?>&nbsp;&nbsp;</td>
345 <td><input name="cryptX_var[alt_linktext]" value="<?php echo $cryptX_var[alt_linktext]; ?>" type="text" /></td>
346 </tr>
347 <tr>
348 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext3" value="2" <?php echo ($cryptX_var[opt_linktext] == 2) ? 'checked="checked"' : ''; ?>/></td>
349 <td nowrap><?php _e("Image-URL",'cryptx'); ?>&nbsp;&nbsp;</td>
350 <td><input name="cryptX_var[alt_linkimage]" value="<?php echo $cryptX_var[alt_linkimage]; ?>" type="text" /></td>
351 </tr>
352 <tr>
353 <td><input type="radio" name="cryptX_var[opt_linktext]" id="opt_linktext4" value="3" <?php echo ($cryptX_var[opt_linktext] == 3) ? 'checked="checked"' : ''; ?>/></td>
354 <td nowrap><?php _e("Select image from folder",'cryptx'); ?>&nbsp;&nbsp;</td>
355 <td><select name="cryptX_var[alt_uploadedimage]">
356 <?php foreach($this->_dirImages() as $image) { ?>
357 <option <?php echo ($cryptX_var[alt_uploadedimage] == $image) ? 'selected' : ''; ?> ><?php echo $image; ?></option>
358 <?php } ?>
359 </select></td>
360 </tr>
361 <tr>
362 <td>&nbsp;</td>
363 <td nowrap colspan="2"><?php _e("Upload your favorite email-image to ../plugins/cryptx/images. Only .jpg and .gif Supported!",'cryptx'); ?></td>
364 </tr>
365 </table>
366 </fieldset><br />
367 <fieldset>
368 <legend><?php _e("Gerneral",'cryptx'); ?></legend>
369 <table>
370 <tr>
371 <td valign="top"><input name="cryptX_var[theContent]" <?php echo ($cryptX_var[theContent]) ? 'checked="checked"' : ''; ?> type="checkbox" />&nbsp;&nbsp;</td>
372 <td nowrap><?php _e("Apply CryptX to the Content",'cryptx'); ?></td>
373 </tr>
374 <tr>
375 <td valign="top"><input name="cryptX_var[theExcerpt]" <?php echo ($cryptX_var[theExcerpt]) ? 'checked="checked"' : ''; ?> type="checkbox" /></td>
376 <td nowrap><?php _e("Apply CryptX to the Excerpt",'cryptx'); ?></td>
377 </tr>
378 </table><br />
379 <table>
380 <tr>
381 <td valign="top">
382 <input name="cryptX_var[java]" <?php echo ($cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="1" /></td>
383 <td nowrap><?php _e("Use javascript to hide the Email-Link.",'cryptx'); ?></td>
384 </tr>
385 <tr>
386 <td valign="top"><input name="cryptX_var[java]" <?php echo (!$cryptX_var[java]) ? 'checked="checked"' : ''; ?> type="radio" value="0" /></td>
387 <td nowrap><?php _e("Use Unicode to hide the Email-Link.",'cryptx'); ?>
388 </td>
389 </tr>
390 </table><br />
391 <table>
392 <tr>
393 <td valign="top"><input name="cryptX_var[autolink]" <?php echo ($cryptX_var[autolink]) ? 'checked="checked"' : ''; ?> type="checkbox" /></td>
394 <td nowrap><?php _e("Add mailto to all unlinked email addresses",'cryptx'); ?></td>
395 </tr>
396 </table>
397 </fieldset>
398 <input type="submit" name="submit" value="Update &raquo;" />
399 </blockquote>
400 </form>
401 </div>
402 <?php
403 }
404
405 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
406
407
408 //--end-of-class
409 }
410
411 }
412
413 /////////////////////////////////////////////////////////////////////////////
414
415 /**
416 * Initiating the plugin...
417 * @see cryptX
418 */
419 new cryptX;
420
421 /**
422 * Create Template functions...
423 * $content = string to convert
424 * $text = string to replace linktext
425 * $echo = 0: keep result in a variable, 1: show result
426 */
427 function cryptx( $content, $text="", $css="", $echo=1 )
428 {
429 global $cryptX_var;
430
431 $cryptX = new cryptX;
432
433 $content = $cryptX->_autolink( $content );
434
435 if(@$cryptX_var[java]) {
436 $content = $cryptX->_encrypt( $content );
437 } else {
438 $content = $cryptX->_unicode( $content );
439 }
440
441 if("" != $text) {
442 $content = preg_replace( "/(<a[^>]*>)(.*)(<\/a>)/i", '$1'.$text.'$3', $content );
443 }
444 if("" != $css) {
445 $content = preg_replace( "/(<a[^>]*)(>)/i", '$1 class="'.$css.'"$2', $content );
446 }
447 if(1 == $echo) echo $content;
448
449 return $content;
450 }
451 ?>
452