PluginProbe
CryptX / 3.2.14
CryptX v3.2.14
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 / functions.php

functions.php in CryptX 3.2.14, at functions.php

428 lines 13.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * CryptX functions
4 **/
5
6 /**
7 * Don't load this file direct!
8 */
9 if (!defined('ABSPATH')) {
10 return ;
11 }
12
13 /*
14 * Loading defaults
15 */
16 function rw_loadDefaults($options='') {
17 $firstImage = rw_cryptx_listDir(plugin_dir_path( __FILE__ ).'images', array("jpg","gif"));
18 $firstFont = rw_cryptx_listDir(plugin_dir_path( __FILE__ ).'fonts', "ttf");
19 $defaults = array(
20 'at' => ' [at] ',
21 'dot' => ' [dot] ',
22 'css_id' => '',
23 'css_class' => '',
24 'the_content' => 1,
25 'the_meta_key' => 1,
26 'the_excerpt' => 1,
27 'comment_text' => 1,
28 'widget_text' => 1,
29 'java' => 1,
30 'load_java' => 0,
31 'opt_linktext' => 0,
32 'autolink' => 1,
33 'alt_linktext' => '',
34 'alt_linkimage' => '',
35 'http_linkimage_title' => '',
36 'alt_linkimage_title' => '',
37 'excludedIDs' => '',
38 'metaBox' => 1,
39 'alt_uploadedimage' => plugins_url('cryptx/images/').$firstImage[0],
40 'c2i_font' => plugin_dir_path( __FILE__ ).'fonts/'.$firstFont[0],
41 'c2i_fontSize' => 10,
42 'c2i_fontRGB' => '000000',
43 'echo' => 1,
44 'filter' => array('the_content','the_meta_key','the_excerpt','comment_text','widget_text')
45 );
46 $return = wp_parse_args( get_option('cryptX'), $defaults );
47 $return = (is_array($options))? wp_parse_args( $options, $return ) : $return ;
48
49 return $return;
50 }
51
52 /*
53 * Add support for Shortcode
54 */
55 function rw_cryptx_shortcode( $atts, $content=null) {
56 global $cryptX_var;
57
58 if (@$cryptX_var[autolink]) $content = rw_cryptx_autolink($content, true);
59 $content = rw_cryptx_encryptx($content, true);
60 $content = rw_cryptx_linktext($content, true);
61
62 return $content;
63 }
64
65 /*
66 * load CryptX news
67 */
68 function rw_cryptx_parse_request( $wp ) {
69 if ( isset($_GET['cryptx']) ) {
70 switch( $_GET['cryptx'] ) {
71 case 'news':
72 include( 'ajax/news.php' );
73 break;
74 }
75 exit;
76 }
77 }
78
79 /*
80 * creyte image from tinyurl
81 */
82 function rw_cryptx_init_tinyurl() {
83 global $cryptX_var;
84 $url = $_SERVER['REQUEST_URI'];
85 $params = explode( '/', $url );
86 if ( count( $params ) > 1 ) {
87 $tiny_url = $params[count( $params ) -2];
88 if ( $tiny_url == md5( get_bloginfo('url') ) ) {
89 $font = $cryptX_var['c2i_font'];
90 $msg = $params[count( $params ) -1];
91 $size = $cryptX_var['c2i_fontSize'];
92 $pad = 1;
93 $transparent = 1;
94 $red = hexdec(substr($cryptX_var['c2i_fontRGB'],0,2));
95 $grn = hexdec(substr($cryptX_var['c2i_fontRGB'],2,2));
96 $blu = hexdec(substr($cryptX_var['c2i_fontRGB'],4,2));
97 $bg_red = 255 - $red;
98 $bg_grn = 255 - $grn;
99 $bg_blu = 255 - $blu;
100 $width = 0;
101 $height = 0;
102 $offset_x = 0;
103 $offset_y = 0;
104 $bounds = array();
105 $image = "";
106 $bounds = ImageTTFBBox($size, 0, $font, "W");
107 $font_height = abs($bounds[7]-$bounds[1]);
108 $bounds = ImageTTFBBox($size, 0, $font, $msg);
109 $width = abs($bounds[4]-$bounds[6]);
110 $height = abs($bounds[7]-$bounds[1]);
111 $offset_y = $font_height+abs(($height - $font_height)/2)-1;
112 $offset_x = 0;
113 $image = imagecreatetruecolor($width+($pad*2),$height+($pad*2));
114 imagesavealpha($image, true);
115 $foreground = ImageColorAllocate($image, $red, $grn, $blu);
116 $background = imagecolorallocatealpha($image, 0, 0, 0, 127);
117 imagefill($image, 0, 0, $background);
118 ImageTTFText($image, $size, 0, $offset_x+$pad, $offset_y+$pad, $foreground, $font, $msg);
119 Header("Content-type: image/png");
120 imagePNG($image);
121 die;
122 }
123 }
124 }
125
126 /*
127 * acivate needed filter
128 */
129 function rw_cryptx_filter($apply) {
130 global $cryptX_var, $shortcode_tags;
131 if (@$cryptX_var['autolink']) {
132 add_filter($apply, 'rw_cryptx_autolink', 5);
133 if (!empty($shortcode_tags) || is_array($shortcode_tags)) {
134 add_filter($apply, 'rw_cryptx_autolink', 11);
135 }
136 }
137 add_filter($apply, 'rw_cryptx_encryptx', 12);
138 add_filter($apply, 'rw_cryptx_linktext', 13);
139 }
140
141 /*
142 * check for excuded IDs
143 */
144 function rw_cryptx_excluded($ID) {
145 global $cryptX_var;
146 $return = false;
147 $exIDs = explode(",", $cryptX_var['excludedIDs']);
148 if(in_array($ID, $exIDs) > 0 ) $return = true;
149 return $return;
150 }
151
152 /*
153 * search for link texts
154 */
155 function rw_cryptx_linktext($content, $shortcode=false) {
156 global $post;
157 $postID = (is_object($post))? $post->ID : -1;
158 if (!rw_cryptx_excluded($postID) OR $shortcode!=false) {
159 $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", 'rw_cryptx_do_Linktext', $content );
160 }
161 return $content;
162 }
163
164 /*
165 * replace linktexts
166 */
167 function rw_cryptx_do_linktext($Match) {
168 global $cryptX_var;
169 $vars = $cryptX_var;
170 switch ($vars['opt_linktext']) {
171
172 case 1: // alternative text for mail link
173 $linktext = $vars['alt_linktext'];
174 break;
175
176 case 2: // alternative image for mail link
177 $linktext = "<img src=\"" . $vars['alt_linkimage'] . "\" class=\"cryptxImage\" alt=\"" . $vars['alt_linkimage_title'] . "\" title=\"" . antispambot($vars['alt_linkimage_title']) . "\" />";
178 break;
179
180 case 3: // uploaded image for mail link
181 $imgurl = $vars['alt_uploadedimage'];
182 $linktext = "<img src=\"" . $imgurl . "\" class=\"cryptxImage\" alt=\"" . $vars['http_linkimage_title'] . "\" title=\"" .antispambot( $vars['http_linkimage_title']) . "\" />";
183 break;
184
185 case 4: // text scrambled by antispambot
186 $linktext = antispambot($Match[1]);
187 break;
188
189 case 5: // convert to image
190 $linktext = "<img src=\"" . get_bloginfo('url') . "/" . md5( get_bloginfo('url') ) . "/" . antispambot($Match[1]) . "\" class=\"cryptxImage\" alt=\"" . antispambot($Match[1]) . "\" title=\"" . antispambot($Match[1]) . "\" />";
191 break;
192
193 default:
194 $linktext = str_replace( "@", $vars['at'], $Match[1]);
195 $linktext = str_replace( ".", $vars['dot'], $linktext);
196
197 }
198 return $linktext;
199 }
200
201 /*
202 * get filtered content of directory
203 */
204 function rw_cryptx_listDir( $path, $filter) {
205 if(!is_array($filter)) $filter = (array)$filter;
206 $fh = opendir($path);
207 $verzeichnisinhalt = array();
208 while (true == ($file = readdir($fh)))
209 {
210 if ( in_array( substr( strtolower($file), -3), $filter ))
211 {
212 $verzeichnisinhalt[] = $file;
213 }
214 }
215 return $verzeichnisinhalt;
216 }
217
218 /*
219 * search for mailto tags
220 */
221 function rw_cryptx_encryptx($content, $shortcode=false) {
222 global $post;
223 $postID = (is_object($post))? $post->ID : -1;
224
225 if (!rw_cryptx_excluded($postID) OR $shortcode!=false) {
226 $content = preg_replace_callback('/<a (.*?)(href=("|\')mailto:(.*?)("|\')(.*?)|)>\s*(.*?)\s*<\/a>/i', 'rw_cryptx_mailtocrypt', $content );
227 }
228 return $content;
229 }
230
231 /*
232 * encryptx adresses with javascript
233 */
234 function rw_cryptx_mailtocrypt($Match) {
235 global $cryptX_var;
236 $return = $Match[0];
237 $mailto = "mailto:" . $Match[4];
238 $return = preg_replace('/target=((\"(.*?)\")|(\'(.*?)\'))/i', '', $return);
239 if (substr($Match[4], 0, 9) =="?subject=") return $return;
240 if (@$cryptX_var['java']) {
241 $javascript="javascript:DeCryptX('" . rw_cryptx_generate_hash($Match[4]) . "')";
242 $return = str_replace( "mailto:".$Match[4], $javascript, $return);
243 } else {
244 $return = str_replace( $mailto, antispambot($mailto), $return);
245 }
246 if(!empty($cryptX_var['css_id'])) {
247 $return = preg_replace( '/(.*)(">)/i', '$1" id="'.$cryptX_var['css_id'].'">', $return );
248 }
249 if(!empty($cryptX_var['css_class'])) {
250 $return = preg_replace( '/(.*)(">)/i', '$1" class="'.$cryptX_var['css_class'].'">', $return );
251 }
252 return $return;
253 }
254
255 /*
256 * generate the unique hash
257 */
258 function rw_cryptx_generate_hash($string) {
259 $string = str_replace("&amp;", "&", $string);
260 $blacklist = array(
261 '32', // Space
262 '39', // Single quote
263 '60', // Less than
264 '62', // Greater than
265 '63', // Question mark
266 '92', // Backslash
267 '94', // Caret - circumflex
268 '96', // Grave accent
269 '127', // Delete
270 );
271 $crypt = '';
272 $ascii = 0;
273
274 for ($i = 0; $i < strlen( $string ); $i++) {
275 $salt = mt_rand(0, 3);
276 $ascii = ord ( substr ( $string, $i ) ) + $salt;
277 if (8364 <= $ascii) {
278 $ascii = 128;
279 }
280 // blacklisted chars are impossible for hash! retry with new random...
281 if(in_array($ascii, $blacklist)) {
282 return rw_cryptx_generate_hash($string);
283 }
284 $crypt .= $salt.chr($ascii);
285 }
286 return $crypt;
287 }
288
289 /*
290 * add link to email adresses
291 */
292 function rw_cryptx_autolink($content, $shortcode=false) {
293 global $post;
294 $postID = (is_object($post))? $post->ID : -1;
295 if (rw_cryptx_excluded($postID) AND $shortcode==false) return $content;
296 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
297 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
298 $src[]="/(\()([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(\))/si";
299 $src[]="/(>)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))([\s])/si";
300 $src[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))(<)/si";
301 $src[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
302 $src[]="/(<a[^>]*>)<a[^>]*>/";
303 $src[]="/(<\/A>)<\/A>/i";
304
305 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>";
306 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
307 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
308 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
309 $tar[]="\\1<a href=\"mailto:\\2\">\\2</a>\\6";
310 $tar[]="<a href=\"mailto:\\0\">\\0</a>";
311 $tar[]="\\1";
312 $tar[]="\\1";
313 $content = preg_replace($src,$tar,$content);
314 return $content;
315 }
316
317 /*
318 * needed stuff for install process
319 */
320 function rw_cryptx_install() {
321 global $cryptX_var, $wpdb;
322 $cryptX_var = rw_loadDefaults(); // reread Options
323 $cryptX_var['admin_notices_deprecated']=true;
324 if ($cryptX_var['excludedIDs'] == "") {
325 $tmp = array();
326 $excludes = $wpdb->get_results("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'cryptxoff' AND meta_value = 'true'");
327 if(count($excludes) > 0) {
328 foreach ($excludes as $exclude) {
329 $tmp[] = $exclude->post_id;
330 }
331 sort($tmp);
332 $cryptX_var['excludedIDs'] = implode(",", $tmp);
333 update_option( 'cryptX', $cryptX_var);
334 $cryptX_var = rw_loadDefaults(); // reread Options
335 $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_key = 'cryptxoff'");
336 }
337 }
338 if (empty($cryptX_var['c2i_font'])) {
339 $cryptX_var['c2i_font'] = plugin_dir_path( __FILE__ ).'fonts/'.$firstFont[0];
340 }
341 if (empty($cryptX_var['c2i_fontSize'])) {
342 $cryptX_var['c2i_fontSize'] = 10;
343 }
344 if (empty($cryptX_var['c2i_fontRGB'])) {
345 $cryptX_var['c2i_fontRGB'] = '000000';
346 }
347 update_option( 'cryptX', $cryptX_var);
348 $cryptX_var = rw_loadDefaults(); // reread Options
349 }
350
351 /*
352 * add support for CryptX MetaBox
353 */
354 function rw_cryptx_meta_box() {
355 if ( function_exists('add_meta_box') ) {
356 add_meta_box('cryptx','CryptX', 'rw_cryptx_meta','post');
357 add_meta_box('cryptx','CryptX', 'rw_cryptx_meta','page');
358 } else {
359 add_action('dbx_post_sidebar', 'rw_cryptx_option');
360 add_action('dbx_page_sidebar', 'rw_cryptx_option');
361 }
362 }
363
364 /*
365 * The MetaBox new-style
366 */
367 function rw_cryptx_meta() {
368 global $post;
369 ?>
370 <input type="checkbox" name="cryptxoff" <?php if (rw_cryptx_excluded($post->ID)) { echo 'checked="checked"'; } ?>/> Disable CryptX for this post/page
371 <?php
372 }
373
374 /*
375 * The MetaBox old-style
376 */
377 function rw_cryptx_option() {
378 global $post;
379 if ( current_user_can('edit_posts') ) { ?>
380 <fieldset id="cryptxoption" class="dbx-box">
381 <h3 class="dbx-handle">CryptX</h3>
382 <div class="dbx-content">
383 <input type="checkbox" name="cryptxoff" <?php if (rw_cryptx_excluded($post->ID)) { echo 'checked="checked"'; } ?>/> Disable CryptX for this post/page
384 </div>
385 </fieldset>
386 <?php
387 }
388 }
389
390 /*
391 * add ID to exclude list
392 */
393 function rw_cryptx_insert_post($pID) {
394 global $cryptX_var, $post;
395 $rev = wp_is_post_revision($pID);
396 if($rev) $pID = $rev;
397 $b = explode(",", $cryptX_var['excludedIDs']);
398 if($b[0] == '') unset($b[0]);
399 foreach($b as $x=>$y) {
400 if($y == $pID) {
401 unset($b[$x]);
402 break;
403 }
404 }
405 if (isset($_POST['cryptxoff'])) $b[] = $pID;
406 $b = array_unique($b);
407 sort($b);
408 $cryptX_var['excludedIDs'] = implode(",", $b);
409 update_option( 'cryptX', $cryptX_var);
410 $cryptX_var = rw_loadDefaults(); // reread Options
411 }
412
413 /**
414 * print admin notice
415 */
416 function rw_cryptx_showMessage($message, $errormsg = false)
417 {
418 if ($errormsg) {
419 echo '<div id="message" class="error">';
420 }
421 else {
422 echo '<div id="message" class="updated fade">';
423 }
424
425 echo "$message</div>";
426 }
427
428 ?>