]> jfr.im git - z_archive/KronOS.git/blob - system/helpers/url_helper.php
Fixed account.php (this ain't python bro); fixed permissions because I'm picky.
[z_archive/KronOS.git] / system / helpers / url_helper.php
1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
9 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16 // ------------------------------------------------------------------------
17
18 /**
19 * CodeIgniter URL Helpers
20 *
21 * @package CodeIgniter
22 * @subpackage Helpers
23 * @category Helpers
24 * @author ExpressionEngine Dev Team
25 * @link http://codeigniter.com/user_guide/helpers/url_helper.html
26 */
27
28 // ------------------------------------------------------------------------
29
30 /**
31 * Site URL
32 *
33 * Create a local URL based on your basepath. Segments can be passed via the
34 * first parameter either as a string or an array.
35 *
36 * @access public
37 * @param string
38 * @return string
39 */
40 if ( ! function_exists('site_url'))
41 {
42 function site_url($uri = '')
43 {
44 $CI =& get_instance();
45 return $CI->config->site_url($uri);
46 }
47 }
48
49 // ------------------------------------------------------------------------
50
51 /**
52 * Base URL
53 *
54 * Create a local URL based on your basepath.
55 * Segments can be passed in as a string or an array, same as site_url
56 * or a URL to a file can be passed in, e.g. to an image file.
57 *
58 * @access public
59 * @param string
60 * @return string
61 */
62 if ( ! function_exists('base_url'))
63 {
64 function base_url($uri = '')
65 {
66 $CI =& get_instance();
67 return $CI->config->base_url($uri);
68 }
69 }
70
71 // ------------------------------------------------------------------------
72
73 /**
74 * Current URL
75 *
76 * Returns the full URL (including segments) of the page where this
77 * function is placed
78 *
79 * @access public
80 * @return string
81 */
82 if ( ! function_exists('current_url'))
83 {
84 function current_url()
85 {
86 $CI =& get_instance();
87 return $CI->config->site_url($CI->uri->uri_string());
88 }
89 }
90
91 // ------------------------------------------------------------------------
92 /**
93 * URL String
94 *
95 * Returns the URI segments.
96 *
97 * @access public
98 * @return string
99 */
100 if ( ! function_exists('uri_string'))
101 {
102 function uri_string()
103 {
104 $CI =& get_instance();
105 return $CI->uri->uri_string();
106 }
107 }
108
109 // ------------------------------------------------------------------------
110
111 /**
112 * Index page
113 *
114 * Returns the "index_page" from your config file
115 *
116 * @access public
117 * @return string
118 */
119 if ( ! function_exists('index_page'))
120 {
121 function index_page()
122 {
123 $CI =& get_instance();
124 return $CI->config->item('index_page');
125 }
126 }
127
128 // ------------------------------------------------------------------------
129
130 /**
131 * Anchor Link
132 *
133 * Creates an anchor based on the local URL.
134 *
135 * @access public
136 * @param string the URL
137 * @param string the link title
138 * @param mixed any attributes
139 * @return string
140 */
141 if ( ! function_exists('anchor'))
142 {
143 function anchor($uri = '', $title = '', $attributes = '')
144 {
145 $title = (string) $title;
146
147 if ( ! is_array($uri))
148 {
149 $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? site_url($uri) : $uri;
150 }
151 else
152 {
153 $site_url = site_url($uri);
154 }
155
156 if ($title == '')
157 {
158 $title = $site_url;
159 }
160
161 if ($attributes != '')
162 {
163 $attributes = _parse_attributes($attributes);
164 }
165
166 return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';
167 }
168 }
169
170 // ------------------------------------------------------------------------
171
172 /**
173 * Anchor Link - Pop-up version
174 *
175 * Creates an anchor based on the local URL. The link
176 * opens a new window based on the attributes specified.
177 *
178 * @access public
179 * @param string the URL
180 * @param string the link title
181 * @param mixed any attributes
182 * @return string
183 */
184 if ( ! function_exists('anchor_popup'))
185 {
186 function anchor_popup($uri = '', $title = '', $attributes = FALSE)
187 {
188 $title = (string) $title;
189
190 $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? site_url($uri) : $uri;
191
192 if ($title == '')
193 {
194 $title = $site_url;
195 }
196
197 if ($attributes === FALSE)
198 {
199 return "<a href='javascript:void(0);' onclick=\"window.open('".$site_url."', '_blank');\">".$title."</a>";
200 }
201
202 if ( ! is_array($attributes))
203 {
204 $attributes = array();
205 }
206
207 foreach (array('width' => '800', 'height' => '600', 'scrollbars' => 'yes', 'status' => 'yes', 'resizable' => 'yes', 'screenx' => '0', 'screeny' => '0', ) as $key => $val)
208 {
209 $atts[$key] = ( ! isset($attributes[$key])) ? $val : $attributes[$key];
210 unset($attributes[$key]);
211 }
212
213 if ($attributes != '')
214 {
215 $attributes = _parse_attributes($attributes);
216 }
217
218 return "<a href='javascript:void(0);' onclick=\"window.open('".$site_url."', '_blank', '"._parse_attributes($atts, TRUE)."');\"$attributes>".$title."</a>";
219 }
220 }
221
222 // ------------------------------------------------------------------------
223
224 /**
225 * Mailto Link
226 *
227 * @access public
228 * @param string the email address
229 * @param string the link title
230 * @param mixed any attributes
231 * @return string
232 */
233 if ( ! function_exists('mailto'))
234 {
235 function mailto($email, $title = '', $attributes = '')
236 {
237 $title = (string) $title;
238
239 if ($title == "")
240 {
241 $title = $email;
242 }
243
244 $attributes = _parse_attributes($attributes);
245
246 return '<a href="mailto:'.$email.'"'.$attributes.'>'.$title.'</a>';
247 }
248 }
249
250 // ------------------------------------------------------------------------
251
252 /**
253 * Encoded Mailto Link
254 *
255 * Create a spam-protected mailto link written in Javascript
256 *
257 * @access public
258 * @param string the email address
259 * @param string the link title
260 * @param mixed any attributes
261 * @return string
262 */
263 if ( ! function_exists('safe_mailto'))
264 {
265 function safe_mailto($email, $title = '', $attributes = '')
266 {
267 $title = (string) $title;
268
269 if ($title == "")
270 {
271 $title = $email;
272 }
273
274 for ($i = 0; $i < 16; $i++)
275 {
276 $x[] = substr('<a href="mailto:', $i, 1);
277 }
278
279 for ($i = 0; $i < strlen($email); $i++)
280 {
281 $x[] = "|".ord(substr($email, $i, 1));
282 }
283
284 $x[] = '"';
285
286 if ($attributes != '')
287 {
288 if (is_array($attributes))
289 {
290 foreach ($attributes as $key => $val)
291 {
292 $x[] = ' '.$key.'="';
293 for ($i = 0; $i < strlen($val); $i++)
294 {
295 $x[] = "|".ord(substr($val, $i, 1));
296 }
297 $x[] = '"';
298 }
299 }
300 else
301 {
302 for ($i = 0; $i < strlen($attributes); $i++)
303 {
304 $x[] = substr($attributes, $i, 1);
305 }
306 }
307 }
308
309 $x[] = '>';
310
311 $temp = array();
312 for ($i = 0; $i < strlen($title); $i++)
313 {
314 $ordinal = ord($title[$i]);
315
316 if ($ordinal < 128)
317 {
318 $x[] = "|".$ordinal;
319 }
320 else
321 {
322 if (count($temp) == 0)
323 {
324 $count = ($ordinal < 224) ? 2 : 3;
325 }
326
327 $temp[] = $ordinal;
328 if (count($temp) == $count)
329 {
330 $number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64);
331 $x[] = "|".$number;
332 $count = 1;
333 $temp = array();
334 }
335 }
336 }
337
338 $x[] = '<'; $x[] = '/'; $x[] = 'a'; $x[] = '>';
339
340 $x = array_reverse($x);
341 ob_start();
342
343 ?><script type="text/javascript">
344 //<![CDATA[
345 var l=new Array();
346 <?php
347 $i = 0;
348 foreach ($x as $val){ ?>l[<?php echo $i++; ?>]='<?php echo $val; ?>';<?php } ?>
349
350 for (var i = l.length-1; i >= 0; i=i-1){
351 if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
352 else document.write(unescape(l[i]));}
353 //]]>
354 </script><?php
355
356 $buffer = ob_get_contents();
357 ob_end_clean();
358 return $buffer;
359 }
360 }
361
362 // ------------------------------------------------------------------------
363
364 /**
365 * Auto-linker
366 *
367 * Automatically links URL and Email addresses.
368 * Note: There's a bit of extra code here to deal with
369 * URLs or emails that end in a period. We'll strip these
370 * off and add them after the link.
371 *
372 * @access public
373 * @param string the string
374 * @param string the type: email, url, or both
375 * @param bool whether to create pop-up links
376 * @return string
377 */
378 if ( ! function_exists('auto_link'))
379 {
380 function auto_link($str, $type = 'both', $popup = FALSE)
381 {
382 if ($type != 'email')
383 {
384 if (preg_match_all("#(^|\s|\()((http(s?)://)|(www\.))(\w+[^\s\)\<]+)#i", $str, $matches))
385 {
386 $pop = ($popup == TRUE) ? " target=\"_blank\" " : "";
387
388 for ($i = 0; $i < count($matches['0']); $i++)
389 {
390 $period = '';
391 if (preg_match("|\.$|", $matches['6'][$i]))
392 {
393 $period = '.';
394 $matches['6'][$i] = substr($matches['6'][$i], 0, -1);
395 }
396
397 $str = str_replace($matches['0'][$i],
398 $matches['1'][$i].'<a href="http'.
399 $matches['4'][$i].'://'.
400 $matches['5'][$i].
401 $matches['6'][$i].'"'.$pop.'>http'.
402 $matches['4'][$i].'://'.
403 $matches['5'][$i].
404 $matches['6'][$i].'</a>'.
405 $period, $str);
406 }
407 }
408 }
409
410 if ($type != 'url')
411 {
412 if (preg_match_all("/([a-zA-Z0-9_\.\-\+]+)@([a-zA-Z0-9\-]+)\.([a-zA-Z0-9\-\.]*)/i", $str, $matches))
413 {
414 for ($i = 0; $i < count($matches['0']); $i++)
415 {
416 $period = '';
417 if (preg_match("|\.$|", $matches['3'][$i]))
418 {
419 $period = '.';
420 $matches['3'][$i] = substr($matches['3'][$i], 0, -1);
421 }
422
423 $str = str_replace($matches['0'][$i], safe_mailto($matches['1'][$i].'@'.$matches['2'][$i].'.'.$matches['3'][$i]).$period, $str);
424 }
425 }
426 }
427
428 return $str;
429 }
430 }
431
432 // ------------------------------------------------------------------------
433
434 /**
435 * Prep URL
436 *
437 * Simply adds the http:// part if no scheme is included
438 *
439 * @access public
440 * @param string the URL
441 * @return string
442 */
443 if ( ! function_exists('prep_url'))
444 {
445 function prep_url($str = '')
446 {
447 if ($str == 'http://' OR $str == '')
448 {
449 return '';
450 }
451
452 $url = parse_url($str);
453
454 if ( ! $url OR ! isset($url['scheme']))
455 {
456 $str = 'http://'.$str;
457 }
458
459 return $str;
460 }
461 }
462
463 // ------------------------------------------------------------------------
464
465 /**
466 * Create URL Title
467 *
468 * Takes a "title" string as input and creates a
469 * human-friendly URL string with a "separator" string
470 * as the word separator.
471 *
472 * @access public
473 * @param string the string
474 * @param string the separator
475 * @return string
476 */
477 if ( ! function_exists('url_title'))
478 {
479 function url_title($str, $separator = '-', $lowercase = FALSE)
480 {
481 if ($separator == 'dash')
482 {
483 $separator = '-';
484 }
485 else if ($separator == 'underscore')
486 {
487 $separator = '_';
488 }
489
490 $q_separator = preg_quote($separator);
491
492 $trans = array(
493 '&.+?;' => '',
494 '[^a-z0-9 _-]' => '',
495 '\s+' => $separator,
496 '('.$q_separator.')+' => $separator
497 );
498
499 $str = strip_tags($str);
500
501 foreach ($trans as $key => $val)
502 {
503 $str = preg_replace("#".$key."#i", $val, $str);
504 }
505
506 if ($lowercase === TRUE)
507 {
508 $str = strtolower($str);
509 }
510
511 return trim($str, $separator);
512 }
513 }
514
515 // ------------------------------------------------------------------------
516
517 /**
518 * Header Redirect
519 *
520 * Header redirect in two flavors
521 * For very fine grained control over headers, you could use the Output
522 * Library's set_header() function.
523 *
524 * @access public
525 * @param string the URL
526 * @param string the method: location or redirect
527 * @return string
528 */
529 if ( ! function_exists('redirect'))
530 {
531 function redirect($uri = '', $method = 'location', $http_response_code = 302)
532 {
533 if ( ! preg_match('#^https?://#i', $uri))
534 {
535 $uri = site_url($uri);
536 }
537
538 switch($method)
539 {
540 case 'refresh' : header("Refresh:0;url=".$uri);
541 break;
542 default : header("Location: ".$uri, TRUE, $http_response_code);
543 break;
544 }
545 exit;
546 }
547 }
548
549 // ------------------------------------------------------------------------
550
551 /**
552 * Parse out the attributes
553 *
554 * Some of the functions use this
555 *
556 * @access private
557 * @param array
558 * @param bool
559 * @return string
560 */
561 if ( ! function_exists('_parse_attributes'))
562 {
563 function _parse_attributes($attributes, $javascript = FALSE)
564 {
565 if (is_string($attributes))
566 {
567 return ($attributes != '') ? ' '.$attributes : '';
568 }
569
570 $att = '';
571 foreach ($attributes as $key => $val)
572 {
573 if ($javascript == TRUE)
574 {
575 $att .= $key . '=' . $val . ',';
576 }
577 else
578 {
579 $att .= ' ' . $key . '="' . $val . '"';
580 }
581 }
582
583 if ($javascript == TRUE AND $att != '')
584 {
585 $att = substr($att, 0, -1);
586 }
587
588 return $att;
589 }
590 }
591
592
593 /* End of file url_helper.php */
594 /* Location: ./system/helpers/url_helper.php */