X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=boot.php;h=b8b0dc05935c0a9980a95565d08395beba9480a8;hb=494288ab9f9370bdf4f7b4ab9990b64f05adbd9d;hp=3b86d0dbeb3f5484de1a090ca171c2531ace9cd2;hpb=178362e50b846aef1caf4e191ea0394c5d636857;p=friendica.git diff --git a/boot.php b/boot.php index 3b86d0dbeb..b8b0dc0593 100644 --- a/boot.php +++ b/boot.php @@ -1,15 +1,27 @@ \r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); define ( 'DOWN_ARROW', '⇩' ); - + +/** + * + * Image storage quality. Lower numbers save space at cost of image detail. + * For ease of upgrade, please do not change here. Change jpeg quality with + * set_config('system','jpeg_quality',n) in .htconfig.php + * where n is netween 1 and 100, and with very poor results below about 50 + * + */ + +define ( 'JPEG_QUALITY', 100 ); /** * SSL redirection policies @@ -73,6 +85,18 @@ define ( 'PAGE_SOAPBOX', 1 ); define ( 'PAGE_COMMUNITY', 2 ); define ( 'PAGE_FREELOVE', 3 ); +/** + * Network and protocol family types + */ + +define ( 'NETWORK_DFRN', 'dfrn'); // Friendika, Mistpark, other DFRN implementations +define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations +define ( 'NETWORK_FEED', 'feed'); // RSS/Atom feeds with no known "post/notify" protocol +define ( 'NETWORK_DIASPORA', 'dspr'); // Diaspora +define ( 'NETWORK_MAIL', 'mail'); // IMAP/POP +define ( 'NETWORK_FACEBOOK', 'face'); // Facebook API + + /** * Maximum number of "people who like (or don't like) this" that we will list by name */ @@ -126,6 +150,7 @@ define ( 'ACTIVITY_OBJ_PERSON', NAMESPACE_ACTIVITY_SCHEMA . 'person' ); define ( 'ACTIVITY_OBJ_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'photo' ); define ( 'ACTIVITY_OBJ_P_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'profile-photo' ); define ( 'ACTIVITY_OBJ_ALBUM', NAMESPACE_ACTIVITY_SCHEMA . 'photo-album' ); +define ( 'ACTIVITY_OBJ_EVENT', NAMESPACE_ACTIVITY_SCHEMA . 'event' ); /** * item weight for query ordering @@ -189,6 +214,8 @@ class App { public $user; public $cid; public $contact; + public $contacts; + public $page_contact; public $content; public $data; public $error = false; @@ -264,7 +291,7 @@ class App { $this->argv = explode('/',$this->cmd); $this->argc = count($this->argv); if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) { - $this->module = $this->argv[0]; + $this->module = str_replace(".", "_", $this->argv[0]); } else { $this->module = 'home'; @@ -277,7 +304,7 @@ class App { if($this->cmd === '.well-known/host-meta') { require_once('include/hostxrd.php'); - hostxrd($this->hostname); + hostxrd($this->get_baseurl()); // NOTREACHED } @@ -352,9 +379,9 @@ class App { function init_pagehead() { $this->page['title'] = $this->config['sitename']; - $tpl = load_view_file('view/head.tpl'); + $tpl = file_get_contents('view/head.tpl'); $this->page['htmlhead'] = replace_macros($tpl,array( - '$baseurl' => $this->get_baseurl() . '/', + '$baseurl' => $this->get_baseurl(), '$generator' => 'Friendika' . ' ' . FRIENDIKA_VERSION, '$delitem' => t('Delete this item?'), '$comment' => t('Comment') @@ -437,32 +464,44 @@ function check_config(&$a) { load_config('system'); - if(! x($_SERVER,'SERVER_NAME')) - return; - $build = get_config('system','build'); if(! x($build)) $build = set_config('system','build',DB_UPDATE_VERSION); $url = get_config('system','url'); - if(! x($url)) + + // if the url isn't set or the stored url is radically different + // than the currently visited url, store the current value accordingly. + // "Radically different" ignores common variations such as http vs https + // and www.example.com vs example.com. + + if((! x($url)) || (! link_compare($url,$a->get_baseurl()))) $url = set_config('system','url',$a->get_baseurl()); if($build != DB_UPDATE_VERSION) { $stored = intval($build); $current = intval(DB_UPDATE_VERSION); if(($stored < $current) && file_exists('update.php')) { + // We're reporting a different version than what is currently installed. // Run any existing update scripts to bring the database up to current. require_once('update.php'); - for($x = $stored; $x < $current; $x ++) { - if(function_exists('update_' . $x)) { - $func = 'update_' . $x; - $func($a); + + // make sure that boot.php and update.php are the same release, we might be + // updating right this very second and the correct version of the update.php + // file may not be here yet. This can happen on a very busy site. + + if(DB_UPDATE_VERSION == UPDATE_VERSION) { + + for($x = $stored; $x < $current; $x ++) { + if(function_exists('update_' . $x)) { + $func = 'update_' . $x; + $func($a); + } } + set_config('system','build', DB_UPDATE_VERSION); } - set_config('system','build', DB_UPDATE_VERSION); } } @@ -592,19 +631,14 @@ function reload_plugins() { // For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, // depending on the order in which they were declared in the array. +require_once("include/template_processor.php"); + if(! function_exists('replace_macros')) { function replace_macros($s,$r) { + global $t; + + return $t->replace($s,$r); - $search = array(); - $replace = array(); - - if(is_array($r) && count($r)) { - foreach ($r as $k => $v ) { - $search[] = $k; - $replace[] = $v; - } - } - return str_replace($search,$replace,$s); }} @@ -658,7 +692,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) { $s = substr($s,strlen($header)+4); $header = substr($s,0,strpos($s,"\r\n\r\n")); } - if($http_code == 301 || $http_code == 302 || $http_code == 303) { + if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $url = trim(array_pop($matches)); @@ -804,7 +838,7 @@ function escape_tags($string) { if(! function_exists('login')) { function login($register = false) { $o = ""; - $register_tpl = (($register) ? load_view_file("view/register-link.tpl") : ""); + $register_tpl = (($register) ? get_markup_template("register-link.tpl") : ""); $register_html = replace_macros($register_tpl,array( '$title' => t('Create a New Account'), @@ -828,14 +862,16 @@ function login($register = false) { $lostlink = t('Password Reset'); if(local_user()) { - $tpl = load_view_file("view/logout.tpl"); + $tpl = get_markup_template("logout.tpl"); } else { - $tpl = load_view_file("view/login.tpl"); + $tpl = get_markup_template("login.tpl"); } - - $o = replace_macros($tpl,array( + + $o = ''; + + $o .= replace_macros($tpl,array( '$logout' => t('Logout'), '$register_html' => $register_html, '$classname' => $classname, @@ -981,6 +1017,13 @@ function notice($s) { if($a->interactive) $_SESSION['sysmsg'] .= $s; }} +if(! function_exists('info')) { +function info($s) { + $a = get_app(); + if($a->interactive) + $_SESSION['sysmsg_info'] .= $s; +}} + // wrapper around config to limit the text length of an incoming message @@ -1207,6 +1250,7 @@ function set_config($family,$key,$value) { global $a; if(get_config($family,$key,true) === false) { + $a->config[$family][$key] = $value; $ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ", dbesc($family), dbesc($key), @@ -1301,6 +1345,7 @@ function set_pconfig($uid,$family,$key,$value) { global $a; if(get_pconfig($uid,$family,$key,true) === false) { + $a->config[$uid][$family][$key] = $value; $ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ", intval($uid), dbesc($family), @@ -1478,7 +1523,11 @@ function lrdd($uri) { return array(); logger('lrdd: host_meta: ' . $xml, LOGGER_DATA); - $h = simplexml_load_string($xml); + + $h = parse_xml_string($xml); + if(! $h) + return array(); + $arr = convert_xml_element_to_array($h); if(isset($arr['xrd']['property'])) { @@ -1550,16 +1599,19 @@ function lrdd($uri) { $headers = $a->get_curl_headers(); logger('lrdd: headers=' . $headers, LOGGER_DEBUG); - require_once('library/HTML5/Parser.php'); - $dom = @HTML5_Parser::parse($html); - - if($dom) { - $items = $dom->getElementsByTagName('link'); - foreach($items as $item) { - $x = $item->getAttribute('rel'); - if($x == "lrdd") { - $pagelink = $item->getAttribute('href'); - break; + // don't try and parse raw xml as html + if(! strstr($html,'getElementsByTagName('link'); + foreach($items as $item) { + $x = $item->getAttribute('rel'); + if($x == "lrdd") { + $pagelink = $item->getAttribute('href'); + break; + } } } } @@ -1638,7 +1690,10 @@ function fetch_xrd_links($url) { return array(); logger('fetch_xrd_links: ' . $xml, LOGGER_DATA); - $h = simplexml_load_string($xml); + $h = parse_xml_string($xml); + if(! $h) + return array(); + $arr = convert_xml_element_to_array($h); $links = array(); @@ -1826,55 +1881,62 @@ function allowed_email($email) { return $found; }} -// Format the like/dislike text for a profile item -// $cnt = number of people who like/dislike the item -// $arr = array of pre-linked names of likers/dislikers -// $type = one of 'like, 'dislike' -// $id = item id -// returns formatted text - -if(! function_exists('format_like')) { -function format_like($cnt,$arr,$type,$id) { - $o = ''; - if($cnt == 1) - $o .= (($type === 'like') ? sprintf( t('%s likes this.'), $arr[0]) : sprintf( t('%s doesn\'t like this.'), $arr[0])) . EOL ; - else { - $spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"'; - $o .= (($type === 'like') ? - sprintf( t('%2$d people like this.'), $spanatts, $cnt) - : - sprintf( t('%2$d people don\'t like this.'), $spanatts, $cnt) ); - $o .= EOL ; - $total = count($arr); - if($total >= MAX_LIKERS) - $arr = array_slice($arr, 0, MAX_LIKERS - 1); - if($total < MAX_LIKERS) - $arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1]; - $str = implode(', ', $arr); - if($total >= MAX_LIKERS) - $str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS ); - $str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str)); - $o .= "\t" . '
'; - } - return $o; -}} // wrapper to load a view template, checking for alternate // languages before falling back to the default +// obsolete, deprecated. + if(! function_exists('load_view_file')) { function load_view_file($s) { - global $lang; + global $lang, $a; if(! isset($lang)) $lang = 'en'; $b = basename($s); $d = dirname($s); if(file_exists("$d/$lang/$b")) return file_get_contents("$d/$lang/$b"); + + $theme = current_theme(); + + if(file_exists("$d/theme/$theme/$b")) + return file_get_contents("$d/theme/$theme/$b"); + return file_get_contents($s); }} +if(! function_exists('get_intltext_template')) { +function get_intltext_template($s) { + global $lang; + + if(! isset($lang)) + $lang = 'en'; + + if(file_exists("view/$lang/$s")) + return file_get_contents("view/$lang/$s"); + elseif(file_exists("view/en/$s")) + return file_get_contents("view/en/$s"); + else + return file_get_contents("view/$s"); +}} + +if(! function_exists('get_markup_template')) { +function get_markup_template($s) { + + $theme = current_theme(); + + if(file_exists("view/theme/$theme/$s")) + return file_get_contents("view/theme/$theme/$s"); + else + return file_get_contents("view/$s"); + +}} + + + + + // for html,xml parsing - let's say you've got // an attribute foobar="class1 class2 class3" // and you want to find out if it contains 'class3'. @@ -1931,15 +1993,15 @@ function get_tags($s) { $s = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$s); if(preg_match_all('/([@#][^ \x0D\x0A,:?]+)([ \x0D\x0A,:?]|$)/',$s,$match)) { - foreach($match[1] as $match) { - if(strstr($match,"]")) { + foreach($match[1] as $mtch) { + if(strstr($mtch,"]")) { // we might be inside a bbcode color tag - leave it alone continue; } - if(substr($match,-1,1) === '.') - $ret[] = substr($match,0,-1); + if(substr($mtch,-1,1) === '.') + $ret[] = substr($mtch,0,-1); else - $ret[] = $match; + $ret[] = $mtch; } } @@ -1955,29 +2017,6 @@ return str_replace ("%","=",rawurlencode($s)); }} -if(! function_exists('like_puller')) { -function like_puller($a,$item,&$arr,$mode) { - - $url = ''; - $sparkle = ''; - $verb = (($mode === 'like') ? ACTIVITY_LIKE : ACTIVITY_DISLIKE); - - if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) { - $url = $item['author-link']; - if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === 'dfrn') && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) { - $url = $a->get_baseurl() . '/redir/' . $item['contact-id']; - $sparkle = ' class="sparkle" '; - } - if(! ((isset($arr[$item['parent'] . '-l'])) && (is_array($arr[$item['parent'] . '-l'])))) - $arr[$item['parent'] . '-l'] = array(); - if(! isset($arr[$item['parent']])) - $arr[$item['parent']] = 1; - else - $arr[$item['parent']] ++; - $arr[$item['parent'] . '-l'][] = '' . $item['author-name'] . ''; - } - return; -}} if(! function_exists('get_mentions')) { function get_mentions($item) { @@ -2024,18 +2063,7 @@ function contact_block() { if(count($r)) { $o .= '