X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=boot.php;h=fbf7df1e2529cb7f86988f04e0c70f76c00652ad;hb=75c4e6e9a6d2230a467c6ffc37c66ae971b498b6;hp=b11c9031256acafc8fdcffef77e467496134339b;hpb=61915a524debe3db08a07f0adb86033ee894be28;p=friendica.git diff --git a/boot.php b/boot.php index b11c903125..fbf7df1e25 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 @@ -201,6 +213,7 @@ class App { public $user; public $cid; public $contact; + public $contacts; public $page_contact; public $content; public $data; @@ -277,7 +290,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'; @@ -290,7 +303,7 @@ class App { if($this->cmd === '.well-known/host-meta') { require_once('include/hostxrd.php'); - hostxrd($this->hostname); + hostxrd($this->get_baseurl()); // NOTREACHED } @@ -365,9 +378,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') @@ -608,19 +621,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); }} @@ -820,7 +828,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'), @@ -844,14 +852,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, @@ -1223,6 +1233,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), @@ -1317,6 +1328,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), @@ -1847,55 +1859,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'. @@ -1976,29 +1995,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) { @@ -2081,7 +2077,7 @@ function micropro($contact, $redirect = false, $class = '') { $url = ''; return '
' . $contact['name'] 
 		. '
' . "\r\n"; }} @@ -2179,7 +2175,7 @@ function smilies($s) { $a = get_app(); return str_replace( - array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'), + array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'), array( '<3', '</3', @@ -2189,6 +2185,7 @@ function smilies($s) { ':-(', ':(', ':-P', + ':P', ':-\', ':-x', ':-X', @@ -2306,8 +2303,15 @@ function profile_sidebar($profile) { $photo = '
' . $profile['name'] . '
'; + // don't show connect link to yourself + $connect = (($profile['uid'] != local_user()) ? '
  • ' . t('Connect') . '
  • ' : ''); - + + // don't show connect link to authenticated visitors either + + if((remote_user()) && ($_SESSION['visitor_visiting'] == $profile['uid'])) + $connect = ''; + if((x($profile,'address') == 1) || (x($profile,'locality') == 1) || (x($profile,'region') == 1) @@ -2336,7 +2340,7 @@ function profile_sidebar($profile) { $homepage = ((x($profile,'homepage') == 1) ? '
    ' . t('Homepage:') . ' ' . linkify($profile['homepage']) . '
    ' : ''); - $tpl = load_view_file('view/profile_vcard.tpl'); + $tpl = get_markup_template('profile_vcard.tpl'); $o .= replace_macros($tpl, array( '$fullname' => $fullname, @@ -2461,28 +2465,34 @@ function get_birthdays() { if(strlen($rr['name'])) $total ++; - $o .= ''; - $o .= ''; } - - $o .= ''; } + return $o; +}} - return $o; +if(! function_exists('normalise_link')) { +function normalise_link($url) { + $ret = str_replace(array('https:','//www.'), array('http:','//'), $url); + return(rtrim($ret,'/')); }} /** @@ -2498,9 +2508,7 @@ function get_birthdays() { if(! function_exists('link_compare')) { function link_compare($a,$b) { - $a1 = str_replace(array('https:','//www.'), array('http:','//'), $a); - $b1 = str_replace(array('https:','//www.'), array('http:','//'), $b); - if(strcasecmp($a1,$b1) === 0) + if(strcasecmp(normalise_link($a),normalise_link($b)) === 0) return true; return false; }} @@ -2553,34 +2561,38 @@ function proc_run($cmd){ proc_close(proc_open($cmdline." &",array(),$foo)); }} -/* - * Return full URL to theme which is currently in effect. - * Provide a sane default if nothing is chosen or the specified theme does not exist. - */ - -if(! function_exists('current_theme_url')) { -function current_theme_url() { - +if(! function_exists('current_theme')) { +function current_theme(){ $app_base_themes = array('duepuntozero', 'loozah'); - + $a = get_app(); - + $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : ''); - $theme_name = ((x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme); - + $theme_name = ((is_array($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme); + if($theme_name && file_exists('view/theme/' . $theme_name . '/style.css')) - return($a->get_baseurl() . '/view/theme/' . $theme_name . '/style.css'); - + return($theme_name); + foreach($app_base_themes as $t) { if(file_exists('view/theme/' . $t . '/style.css')) - return($a->get_baseurl() . '/view/theme/' . $t . '/style.css'); - } - + return($t); + } + $fallback = glob('view/theme/*/style.css'); if(count($fallback)) - return($a->get_baseurl() . $fallback[0]); + return (str_replace('view/theme/','', str_replace("/style.css","",$fallback[0]))); - +}} + +/* +* Return full URL to theme which is currently in effect. +* Provide a sane default if nothing is chosen or the specified theme does not exist. +*/ +if(! function_exists('current_theme_url')) { +function current_theme_url() { + global $a; + $t = current_theme(); + return($a->get_baseurl() . '/view/theme/' . $t . '/style.css'); }} if(! function_exists('feed_birthday')) { @@ -2671,7 +2683,7 @@ if(! function_exists('get_plink')) { function get_plink($item) { $a = get_app(); $plink = (((x($item,'plink')) && (! $item['private'])) ? '' : ''); + . $item['plink'] . '" title="' . t('link to source') . '" target="external-link" class="icon remote-link">' : ''); return $plink; }} @@ -2680,106 +2692,6 @@ function unamp($s) { return str_replace('&', '&', $s); }} -if(! function_exists('extract_item_authors')) { -function extract_item_authors($arr,$uid) { - - if((! $uid) || (! is_array($arr)) || (! count($arr))) - return array(); - $urls = array(); - foreach($arr as $rr) { - if(! in_array("'" . dbesc($rr['author-link']) . "'",$urls)) - $urls[] = "'" . dbesc($rr['author-link']) . "'"; - } - - // pre-quoted, don't put quotes on %s - if(count($urls)) { - $r = q("SELECT `id`,`network`,`url` FROM `contact` WHERE `uid` = %d AND `url` IN ( %s ) AND `self` = 0 AND `blocked` = 0 ", - intval($uid), - implode(',',$urls) - ); - if(count($r)) { - $ret = array(); - $authors = array(); - foreach($r as $rr){ - if ($rr['network']=='dfrn') - $ret[$rr['url']] = $rr['id']; - $authors[$r['url']]= $rr; - } - $a->authors = $authors; - return $ret; - } - } - return array(); -}} - -if(! function_exists('item_photo_menu')){ -function item_photo_menu($item){ - $a = get_app(); - - if (!isset($a->authors)){ - $rr = q("SELECT `id`, `network`, `url` FROM `contact` WHERE `uid`=%d AND `self`=0 AND `blocked`=0 ", intval(local_user())); - $authors = array(); - foreach($rr as $r) $authors[$r['url']]= $r; - $a->authors = $authors; - } - - $contact_url=""; - $pm_url=""; - - $status_link=""; - $photo_link=""; - $profile_link = ((strlen($item['author-link'])) ? $item['author-link'] : $item['url']); - $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ; - - // $item['contact-uid'] is only set on profile page and indicates the uid of the user who owns the profile. - - $profile_owner = ((x($item,'contact-uid')) && intval($item['contact-uid']) ? intval($item['contact-uid']) : 0); - - // So we are checking that this is a logged in user on some page that *isn't* a profile page - // OR a profile page where the viewer owns the profile. - // Then check if we can use a sparkle (redirect) link to the profile by virtue of it being our contact - // or a friend's contact that we both have a connection to. - - if((local_user() && ($profile_owner == 0)) - || ($profile_owner && $profile_owner == local_user())) { - - if(strlen($item['author-link']) && link_compare($item['author-link'],$item['url'])) - $redir = $redirect_url; - elseif(isset($a->authors[$item['author-link']])) { - $redir = $a->get_baseurl() . '/redir/' . $a->authors[$item['author-link']]['id']; - $cid = $a->authors[$item['author-link']]['id']; - } - - if($item['network'] === 'dfrn' && (! $item['self'])) { - $status_link = $redir . "?url=status"; - $profile_link = $redir . "?url=profile"; - $photos_link = $redir . "?url=photos"; - $pm_url = $a->get_baseurl() . '/message/new/' . $cid; - } - - $contact_url = $item['self']?"":$a->get_baseurl() . '/contacts/' . (($item['cid']) ? $item['cid'] : $cid); - } - - - $menu = Array( - t("View status") => $status_link, - t("View profile") => $profile_link, - t("View photos") => $photos_link, - t("Edit contact") => $contact_url, - t("Send PM") => $pm_url, - ); - - - $args = array($item, &$menu); - - call_hooks('item_photo_menu', $args); - - $o = ""; - foreach($menu as $k=>$v){ - if ($v!="") $o .= "
  • $k
  • \n"; - } - return $o; -}} if(! function_exists('lang_selector')) { function lang_selector() { @@ -2811,7 +2723,7 @@ function parse_xml_string($s) { $x = @simplexml_load_string($s2); if(count(libxml_get_errors())) foreach(libxml_get_errors() as $err) - logger('libxml: parse: ' . $err, LOGGER_DATA); + logger('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA); libxml_clear_errors(); return $x; }}