]> git.mxchange.org Git - friendica.git/blob - boot.php
7754ad1f4e253206c46f4d4f8ec8b5aedee46dcd
[friendica.git] / boot.php
1 <?php
2
3 set_time_limit(0);
4
5 define ( 'BUILD_ID' , 1000 );
6
7 define ( 'EOL', "<br />\r\n");
8
9 define ( 'REGISTER_CLOSED',  0);
10 define ( 'REGISTER_APPROVE', 1);
11 define ( 'REGISTER_OPEN',    2);
12
13 define ( 'DIRECTION_ANY',  0);
14 define ( 'DIRECTION_IN',   1);
15 define ( 'DIRECTION_OUT',  2);
16 define ( 'DIRECTION_BOTH', 3);
17
18 define ( 'NOTIFY_INTRO',   0x0001 );
19 define ( 'NOTIFY_CONFIRM', 0x0002 );
20 define ( 'NOTIFY_WALL',    0x0004 );
21 define ( 'NOTIFY_COMMENT', 0x0008 );
22 define ( 'NOTIFY_MAIL',    0x0010 );
23
24 define ( 'NAMESPACE_DFRN' , 'http://purl.org/macgirvin/dfrn/1.0' ); 
25
26
27 if(! class_exists('App')) {
28 class App {
29
30         public  $module_loaded = false;
31         public  $config;
32         public  $page;
33         public  $profile;
34         public  $user;
35         public  $cid;
36         public  $contact;
37         public  $content;
38         public  $data;
39         public  $error = false;
40         public  $cmd;
41         public  $argv;
42         public  $argc;
43         public  $module;
44         public  $pager;
45         public  $strings;   
46         public  $path;
47
48         private $scheme;
49         private $hostname;
50         private $baseurl;
51         private $db;
52
53         function __construct() {
54
55                 $this->config = array();
56                 $this->page = array();
57                 $this->pager= array();
58
59                 $this->scheme = ((isset($_SERVER['HTTPS']) 
60                                 && ($_SERVER['HTTPS'])) ?  'https' : 'http' );
61                 $this->hostname = str_replace('www.','',
62                                 $_SERVER['SERVER_NAME']);
63                 set_include_path("include/$this->hostname" 
64                                 . PATH_SEPARATOR . 'include' 
65                                 . PATH_SEPARATOR . '.' );
66
67                 if(substr($_SERVER['QUERY_STRING'],0,2) == "q=")
68                         $_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'],2);
69                 $this->cmd = trim($_GET['q'],'/');
70
71
72                 $this->argv = explode('/',$this->cmd);
73                 $this->argc = count($this->argv);
74                 if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) {
75                         $this->module = $this->argv[0];
76                 }
77                 else {
78                         $this->module = 'home';
79                 }
80
81                 if($this->cmd == '.well-known/host-meta')
82                         require_once('include/hostxrd.php');
83
84                 $this->pager['page'] = ((x($_GET,'page')) ? $_GET['page'] : 1);
85                 $this->pager['itemspage'] = 50;
86                 $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
87                 $this->pager['total'] = 0;
88         }
89
90         function get_baseurl($ssl = false) {
91                 if(strlen($this->baseurl))
92                         return $this->baseurl;
93
94                 $this->baseurl = (($ssl) ? 'https' : $this->scheme) . "://" . $this->hostname
95                         . ((isset($this->path) && strlen($this->path)) 
96                         ? '/' . $this->path : '' );
97                 return $this->baseurl;
98         }
99
100         function set_baseurl($url) {
101                 $this->baseurl = $url;
102                 $this->hostname = basename($url);
103         }
104
105         function get_hostname() {
106                 return $this->hostname;
107         }
108
109         function set_hostname($h) {
110                 $this->hostname = $h;
111         }
112
113         function set_path($p) {
114                 $this->path = ltrim(trim($p),'/');
115         } 
116
117         function get_path() {
118                 return $this->path;
119         }
120
121         function set_pager_total($n) {
122                 $this->pager['total'] = intval($n);
123         }
124
125         function set_pager_itemspage($n) {
126                 $this->pager['itemspage'] = intval($n);
127                 $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
128
129         } 
130
131         function init_pagehead() {
132                 if(file_exists("view/head.tpl"))
133                         $s = file_get_contents("view/head.tpl");
134                 $this->page['htmlhead'] = replace_macros($s,array(
135                         '$baseurl' => $this->get_baseurl()
136                 ));
137         }
138
139 }}
140
141
142 if(! function_exists('x')) {
143 function x($s,$k = NULL) {
144         if($k != NULL) {
145                 if((is_array($s)) && (array_key_exists($k,$s))) {
146                         if($s[$k])
147                                 return (int) 1;
148                         return (int) 0;
149                 }
150                 return false;
151         }
152         else {          
153                 if(isset($s)) {
154                         if($s) {
155                                 return (int) 1;
156                         }
157                         return (int) 0;
158                 }
159                 return false;
160         }
161 }}
162
163 if(! function_exists('system_unavailable')) {
164 function system_unavailable() {
165         include('system_unavailable.php');
166         killme();
167 }}
168
169
170 if(! function_exists('check_config')) {
171 function check_config(&$a) {
172
173         $build = get_config('system','build');
174         if(! x($build))
175                 $build = set_config('system','build',BUILD_ID);
176
177         $url = get_config('system','url');
178         if(! x($url))
179                 $url = set_config('system','url',$a->get_baseurl());
180
181         if($build != BUILD_ID) {
182                 $stored = intval($build);
183                 $current = intval(BUILD_ID);
184                 if(($stored < $current) && file_exists('update.php')) {
185
186                         // We're reporting a different version than what is currently installed.
187                         // Run any existing update scripts to bring the database up to current.
188
189                         require_once('update.php');
190                         for($x = $stored; $x <= $current; $x ++) {
191                                 if(function_exists('update_' . $x)) {
192                                         $func = 'update_' . $x;
193                                         $func($a);
194                                 }
195                         }
196                         set_config('system','build', BUILD_ID);
197                 }
198         }
199         return;
200 }}
201
202
203
204 if(! function_exists('replace_macros')) {  
205 function replace_macros($s,$r) {
206
207         $search = array();
208         $replace = array();
209
210         if(is_array($r) && count($r)) {
211                 foreach ($r as $k => $v ) {
212                         $search[] =  $k;
213                         $replace[] = $v;
214                 }
215         }
216         return str_replace($search,$replace,$s);
217 }}
218
219
220 if(! function_exists('load_translation_table')) {
221 function load_translation_table($lang) {
222         global $a;
223
224 }}
225
226 if(! function_exists('t')) {
227 function t($s) {
228         global $a;
229
230         if($a->strings[$s])
231                 return $a->strings[$s];
232         return $s;
233 }}
234
235 if(! function_exists('fetch_url')) {
236 function fetch_url($url,$binary = false) {
237         $ch = curl_init($url);
238         if(! $ch) return false;
239
240         curl_setopt($ch, CURLOPT_HEADER, 0);
241         curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
242         curl_setopt($ch, CURLOPT_MAXREDIRS,8);
243         curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
244         if($binary)
245                 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
246
247         $s = curl_exec($ch);
248         curl_close($ch);
249         return($s);
250 }}
251
252
253 if(! function_exists('post_url')) {
254 function post_url($url,$params) {
255         $ch = curl_init($url);
256         if(! $ch) return false;
257
258         curl_setopt($ch, CURLOPT_HEADER, 0);
259         curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
260         curl_setopt($ch, CURLOPT_MAXREDIRS,8);
261         curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
262         curl_setopt($ch, CURLOPT_POST,1);
263         curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
264
265         $s = curl_exec($ch);
266         curl_close($ch);
267         return($s);
268 }}
269
270
271 if(! function_exists('random_string')) {
272 function random_string() {
273         return(hash('sha256',uniqid(rand(),true)));
274 }}
275
276 if(! function_exists('notags')) {
277 function notags($string) {
278         // protect against :<> with high-bit set
279         return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string));
280 }}
281
282 if(! function_exists('escape_tags')) {
283 function escape_tags($string) {
284
285         return(htmlspecialchars($string));
286 }}
287
288 if(! function_exists('login')) {
289 function login($register = false) {
290         $o = "";
291         $register_html = (($register) ? file_get_contents("view/register-link.tpl") : "");
292
293
294         if(x($_SESSION,'authenticated')) {
295                 $o = file_get_contents("view/logout.tpl");
296         }
297         else {
298                 $o = file_get_contents("view/login.tpl");
299
300                 $o = replace_macros($o,array('$register_html' => $register_html ));
301         }
302         return $o;
303 }}
304
305
306 if(! function_exists('autoname')) {
307 function autoname($len) {
308
309         $vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u'); 
310         if(mt_rand(0,5) == 4)
311                 $vowels[] = 'y';
312
313         $cons = array(
314                         'b','bl','br',
315                         'c','ch','cl','cr',
316                         'd','dr',
317                         'f','fl','fr',
318                         'g','gh','gl','gr',
319                         'h',
320                         'j',
321                         'k','kh','kl','kr',
322                         'l',
323                         'm',
324                         'n',
325                         'p','ph','pl','pr',
326                         'qu',
327                         'r','rh',
328                         's','sc','sh','sm','sp','st',
329                         't','th','tr',
330                         'v',
331                         'w','wh',
332                         'x',
333                         'z','zh'
334                         );
335
336         $midcons = array('ck','ct','gn','ld','lf','lm','lt','mb','mm', 'mn','mp',
337                                 'nd','ng','nk','nt','rn','rp','rt');
338
339         $noend = array('bl', 'br', 'cl','cr','dr','fl','fr','gl','gr',
340                                 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh');
341
342         $start = mt_rand(0,2);
343         if($start == 0)
344                 $table = $vowels;
345         else
346                 $table = $cons;
347
348         $word = '';
349
350         for ($x = 0; $x < $len; $x ++) {
351                 $r = mt_rand(0,count($table) - 1);
352                 $word .= $table[$r];
353   
354                 if($table == $vowels)
355                         $table = array_merge($cons,$midcons);
356                 else
357                         $table = $vowels;
358
359         }
360
361         $word = substr($word,0,$len);
362
363         foreach($noend as $noe) {
364                 if((strlen($word) > 2) && (substr($word,-2) == $noe)) {
365                         $word = substr($word,0,-1);
366                         break;
367                 }
368         }
369         if(substr($word,-1) == 'q')
370                 $word = substr($word,0,-1);    
371         return $word;
372 }}
373
374 if(! function_exists('killme')) {
375 function killme() {
376         session_write_close();
377         exit;
378 }}
379
380 if(! function_exists('goaway')) {
381 function goaway($s) {
382         header("Location: $s");
383         killme();
384 }}
385
386
387 if(! function_exists('xml_status')) {
388 function xml_status($st) {
389         header( "Content-type: text/xml" );
390         echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
391         echo "<result><status>$st</status></result>\r\n";
392         killme();
393 }}
394
395 if(! function_exists('local_user')) {
396 function local_user() {
397         if((x($_SESSION,'authenticated')) && (x($_SESSION,'uid')))
398                 return $_SESSION['uid'];
399         return false;
400 }}
401
402 if(! function_exists('remote_user')) {
403 function remote_user() {
404         if((x($_SESSION,'authenticated')) && (x($_SESSION,'visitor_id')))
405                 return $_SESSION['visitor_id'];
406         return false;
407 }}
408
409 if(! function_exists('notice')) {
410 function notice($s) {
411
412         $_SESSION['sysmsg'] .= $s;
413
414 }}
415
416 if(! function_exists('get_max_import_size')) {
417 function get_max_import_size() {
418         global $a;
419         return ((x($a->config,'max_import_size')) ? $a->config['max_import_size'] : 0 );
420 }}
421
422 if(! function_exists('xmlify')) {
423 function xmlify($str) {
424         $buffer = '';
425         
426         for($x = 0; $x < strlen($str); $x ++) {
427                 $char = $str[$x];
428         
429                 switch( $char ) {
430
431                         case "\r" :
432                                 break;
433                         case "&" :
434                                 $buffer .= '&amp;';
435                                 break;
436                         case "'" :
437                                 $buffer .= '&apos;';
438                                 break;
439
440                         case "\"" :
441                                 $buffer .= '&quot;';
442                                 break;
443                         case '<' :
444                                 $buffer .= '&lt;';
445                                 break;
446                         case '>' :
447                                 $buffer .= '&gt;';
448                                 break;
449                         case "\n" :
450                                 $buffer .= ' ';
451                                 break;
452                         default :
453                                 $buffer .= $char;
454                                 break;
455                 }       
456         }
457         $buffer = trim($buffer);
458         return($buffer);
459 }}
460
461 if(! function_exists('unxmlify')) {
462 function unxmlify($s) {
463         $ret = str_replace('&amp;','&', $s);
464         $ret = str_replace(array('&lt;','&gt;','&quot;','&apos;'),array('<','>','"',"'"),$ret);
465         return $ret;    
466 }}
467
468 if(! function_exists('hex2bin')) {
469 function hex2bin($s) {
470         return(pack("H*",$s));
471 }}
472
473
474 if(! function_exists('paginate')) {
475 function paginate(&$a) {
476         $o = '';
477         $stripped = ereg_replace("(&page=[0-9]*)","",$_SERVER['QUERY_STRING']);
478         $stripped = str_replace('q=','',$stripped);
479         $stripped = trim($stripped,'/');
480         $url = $a->get_baseurl() . '/' . $stripped;
481
482
483           if($a->pager['total'] > $a->pager['itemspage']) {
484                 $o .= '<div class="pager">';
485                 if($a->pager['page'] != 1)
486                         $o .= '<span class="pager_prev">'."<a href=\"$url".'&page='.($a->pager['page'] - 1).'">' . t('prev') . '</a></span> ';
487
488                 $o .=  "<span class=\"pager_first\"><a href=\"$url"."&page=1\">" . t('first') . "</a></span> ";
489
490                 $numpages = $a->pager['total'] / $a->pager['itemspage'];
491
492                 $numstart = 1;
493                 $numstop = $numpages;
494
495                 if($numpages > 14) {
496                         $numstart = (($pagenum > 7) ? ($pagenum - 7) : 1);
497                         $numstop = (($pagenum > ($numpages - 7)) ? $numpages : ($numstart + 14));
498                 }
499    
500                 for($i = $numstart; $i <= $numstop; $i++){
501                         if($i == $a->pager['page'])
502                                 $o .= '<span class="pager_current">'.(($i < 10) ? '&nbsp;'.$i : $i);
503                         else
504                                 $o .= "<span class=\"pager_n\"><a href=\"$url"."&page=$i\">".(($i < 10) ? '&nbsp;'.$i : $i)."</a>";
505                         $o .= '</span> ';
506                 }
507
508                 if(($a->pager['total'] % $a->pager['itemspage']) != 0) {
509                         if($i == $a->pager['page'])
510                                 $o .= '<span class="pager_current">'.(($i < 10) ? '&nbsp;'.$i : $i);
511                         else
512                                 $o .= "<span class=\"pager_n\"><a href=\"$url"."&page=$i\">".(($i < 10) ? '&nbsp;'.$i : $i)."</a>";
513                         $o .= '</span> ';
514                 }
515
516                 $lastpage = (($numpages > intval($numpages)) ? intval($numpages)+1 : $numpages);
517                 $o .= "<span class=\"pager_last\"><a href=\"$url"."&page=$lastpage\">" . t('last') . "</a></span> ";
518
519                 if(($a->pager['total'] - ($a->pager['itemspage'] * $a->pager['page'])) > 0)
520                         $o .= '<span class="pager_next">'."<a href=\"$url"."&page=".($a->pager['page'] + 1).'">' . t('next') . '</a></span>';
521                 $o .= '</div>'."\r\n";
522         }
523         return $o;
524 }}
525
526 if(! function_exists('expand_acl')) {
527 function expand_acl($s) {
528
529         if(strlen($s)) {
530                 $a = explode('<',$s);
531                 for($x = 0; $x < count($a); $x ++) {
532                         $a[$x] = intval(str_replace(array('<','>'),array('',''),$a[$x]));
533                 }
534                 return $a;
535         }
536         return array();
537 }}              
538
539 if(! function_exists('sanitise_acl')) {
540 function sanitise_acl(&$item) {
541         if(intval($item))
542                 $item = '<' . intval(notags(trim($item))) . '>';
543         else
544                 unset($item);
545 }}
546
547 if(! function_exists('get_config')) {
548 function get_config($family,$key) {
549         $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
550                 dbesc($family),
551                 dbesc($key)
552         );
553         if(count($ret))
554                 return $ret[0]['v'];
555         return false;
556 }}
557
558 if(! function_exists('set_config')) {
559 function set_config($family,$key,$value) {
560         if(get_config($family,$key) === false) {
561                 $ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
562                         dbesc($family),
563                         dbesc($key),
564                         dbesc($value)
565                 );
566                 if($ret) 
567                         return $value;
568                 return $ret;
569         }
570         $ret = q("SUPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
571                 dbesc($value),
572                 dbesc($family),
573                 dbesc($key)
574         );
575         if($ret)
576                 return $value;
577         return $ret;
578 }}