X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=inline;f=boot.php;h=4e23794695d29929456d4e5a6b4d013c71da48c4;hb=b3a5fccc9d4af4dc66ae8f0404817690a333c433;hp=8084fcc11c5952c1268c7277475c7b0f969ed5eb;hpb=b59c504b16c1326e37019c58f0e989c85411fcd5;p=friendica.git
diff --git a/boot.php b/boot.php
index 8084fcc11c..4e23794695 100644
--- a/boot.php
+++ b/boot.php
@@ -2,9 +2,9 @@
set_time_limit(0);
-define ( 'FRIENDIKA_VERSION', '2.1.933' );
-define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
-define ( 'DB_UPDATE_VERSION', 1045 );
+define ( 'FRIENDIKA_VERSION', '2.1.962' );
+define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
+define ( 'DB_UPDATE_VERSION', 1054 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -73,6 +73,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
*/
@@ -189,6 +201,7 @@ class App {
public $user;
public $cid;
public $contact;
+ public $page_contact;
public $content;
public $data;
public $error = false;
@@ -277,7 +290,7 @@ class App {
if($this->cmd === '.well-known/host-meta') {
require_once('include/hostxrd.php');
- hostxrd($this->hostname);
+ hostxrd($this->get_baseurl());
// NOTREACHED
}
@@ -437,15 +450,18 @@ 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) {
@@ -592,19 +608,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);
}}
@@ -1207,6 +1218,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 +1313,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 +1491,9 @@ function lrdd($uri) {
return array();
logger('lrdd: host_meta: ' . $xml, LOGGER_DATA);
- $h = simplexml_load_string($xml);
+
+ $h = parse_xml_string($xml);
+
$arr = convert_xml_element_to_array($h);
if(isset($arr['xrd']['property'])) {
@@ -1550,16 +1565,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 +1656,7 @@ function fetch_xrd_links($url) {
return array();
logger('fetch_xrd_links: ' . $xml, LOGGER_DATA);
- $h = simplexml_load_string($xml);
+ $h = parse_xml_string($xml);
$arr = convert_xml_element_to_array($h);
$links = array();
@@ -1826,38 +1844,6 @@ 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" . '
' . $str . '
';
- }
- return $o;
-}}
// wrapper to load a view template, checking for alternate
@@ -1865,13 +1851,19 @@ function format_like($cnt,$arr,$type,$id) {
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);
}}
@@ -1955,29 +1947,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) {
@@ -2022,20 +1991,9 @@ function contact_block() {
intval($shown)
);
if(count($r)) {
- $o .= '';
+ $o .= '
';
$o .= '
';
@@ -2049,6 +2007,35 @@ function contact_block() {
}}
+if(! function_exists('micropro')) {
+function micropro($contact, $redirect = false, $class = '') {
+
+ if($class)
+ $class = ' ' . $class;
+
+ $url = $contact['url'];
+ $sparkle = '';
+
+ if($redirect) {
+ $a = get_app();
+ $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id'];
+ if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) {
+ $url = $redirect_url;
+ $sparkle = ' sparkle';
+ }
+ }
+ $click = ((x($contact,'click')) ? ' onclick="' . $contact['click'] . '" ' : '');
+ if($click)
+ $url = '';
+ return '
' . "\r\n";
+}}
+
+
+
if(! function_exists('search')) {
function search($s) {
$a = get_app();
@@ -2140,7 +2127,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](' . $a->get_baseurl() . '/images/smiley-heart.gif)
',
'
![</3](' . $a->get_baseurl() . '/images/smiley-brokenheart.gif)
',
@@ -2150,6 +2137,7 @@ function smilies($s) {
'
![:-(](' . $a->get_baseurl() . '/images/smiley-frown.gif)
',
'
![:(](' . $a->get_baseurl() . '/images/smiley-frown.gif)
',
'
![:-P](' . $a->get_baseurl() . '/images/smiley-tongue-out.gif)
',
+ '
![:P](' . $a->get_baseurl() . '/images/smiley-tongue-out.gif)
',
'
![:-\](' . $a->get_baseurl() . '/images/smiley-kiss.gif)
',
'
![:-x](' . $a->get_baseurl() . '/images/smiley-kiss.gif)
',
'
![:-X](' . $a->get_baseurl() . '/images/smiley-kiss.gif)
',
@@ -2267,8 +2255,15 @@ function profile_sidebar($profile) {
$photo = '
';
+ // 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)
@@ -2293,9 +2288,9 @@ function profile_sidebar($profile) {
$pubkey = ((x($profile,'pubkey') == 1) ? '
' . $profile['pubkey'] . '
' : '');
- $marital = ((x($profile,'marital') == 1) ? '
♥ ' . t('Status:') . ' ' . $profile['marital'] . '
' : '');
+ $marital = ((x($profile,'marital') == 1) ? '♥ ' . t('Status:') . ' ' . $profile['marital'] . '
' : '');
- $homepage = ((x($profile,'homepage') == 1) ? '' . t('Homepage:') . ' ' . linkify($profile['homepage']) . '
' : '');
+ $homepage = ((x($profile,'homepage') == 1) ? '' . t('Homepage:') . ' ' . linkify($profile['homepage']) . '
' : '');
$tpl = load_view_file('view/profile_vcard.tpl');
@@ -2405,9 +2400,7 @@ function get_birthdays() {
if(! local_user())
return $o;
- $bd_format = get_config('system','birthday_format');
- if(! $bd_format)
- $bd_format = 'g A l F d' ; // 8 AM Friday January 18
+ $bd_format = t('g A l F d') ; // 8 AM Friday January 18
$r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event`
LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid`
@@ -2516,34 +2509,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')) {
@@ -2634,7 +2631,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;
}}
@@ -2643,81 +2640,38 @@ 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`,`url` FROM `contact` WHERE `uid` = %d AND `url` IN ( %s ) AND `network` = 'dfrn' AND `self` = 0 AND `blocked` = 0 ",
- intval($uid),
- implode(',',$urls)
- );
- if(count($r)) {
- $ret = array();
- foreach($r as $rr)
- $ret[$rr['url']] = $rr['id'];
- return $ret;
+if(! function_exists('lang_selector')) {
+function lang_selector() {
+ global $lang;
+ $o .= '';
+ $o .= '
';
+ return $o;
}}
-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!=1", intval(local_user()));
- $authors = array();
- foreach($rr as $r) $authors[$r['url']]= $r;
- $a->authors = $authors;
- }
-
- $contact_url="";
- $pm_url="";
-
- $profile_link = ((strlen($item['author-link'])) ? $item['author-link']."?tab=profile" : $item['url']);
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(strlen($item['author-link'])) {
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $pm_url = $a->get_baseurl() . '/message/new/' . $item['cid'] ;
- $contact_url = $item['self']?"":$a->get_baseurl() . '/contacts/' . $item['cid'] ;
- }
- elseif(isset($a->authors[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $a->authors[$item['author-link']]['id'];
- if ($a->authors[$item['author-link']]['network']==='dfrn'){
- $pm_url = $a->get_baseurl() . '/message/new/' . $a->authors[$item['author-link']]['id'];
- }
- $contact_url = $item['self']?"":$a->get_baseurl() . '/contacts/' . $a->authors[$item['author-link']]['id'] ;
-
- }
- }
-
-
- $menu = Array(
- t("View profile") => $profile_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('parse_xml_string')) {
+function parse_xml_string($s) {
+ if(! strstr($s,'code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
+ libxml_clear_errors();
+ return $x;
}}