]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
wrong variable passed
[friendica.git] / boot.php
index 3ede1cbc829475f8700d79dba0c409690cdb2912..7dfaa021ee7743cb35df845166e938fa741b5c2e 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -2,9 +2,9 @@
 
 set_time_limit(0);
 
-define ( 'FRIENDIKA_VERSION',      '2.1.938' );
-define ( 'DFRN_PROTOCOL_VERSION',  '2.2'  );
-define ( 'DB_UPDATE_VERSION',      1046   );
+define ( 'FRIENDIKA_VERSION',      '2.1.946' );
+define ( 'DFRN_PROTOCOL_VERSION',  '2.21'    );
+define ( 'DB_UPDATE_VERSION',      1048      );
 
 define ( 'EOL',                    "<br />\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
  */
@@ -437,15 +449,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) {
@@ -1478,7 +1493,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 +1567,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,'<?xml')) {
+               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;
+                               }
                        }
                }
        }
@@ -1638,7 +1658,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();
@@ -2293,9 +2313,9 @@ function profile_sidebar($profile) {
 
        $pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
 
-       $marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">&hearts;</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div></div><div class="profile-clear"></div>' : '');
+       $marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">&hearts;</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div><div class="profile-clear"></div>' : '');
 
-       $homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div></div><div class="profile-clear"></div>' : '');
+       $homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : '');
 
        $tpl = load_view_file('view/profile_vcard.tpl');
 
@@ -2654,14 +2674,19 @@ function extract_item_authors($arr,$uid) {
 
        // 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 ",
+               $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();
-                       foreach($r as $rr)
-                               $ret[$rr['url']] = $rr['id'];
+                       $authors = array();
+                       foreach($r as $rr){
+                               if ($rr['network']=='dfrn')
+                                       $ret[$rr['url']] = $rr['id'];
+                               $authors[$r['url']]= $rr;
+                       }
+                       $a->authors = $authors;
                        return $ret;
                }
        }
@@ -2673,7 +2698,7 @@ 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()));
+               $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;
@@ -2686,33 +2711,34 @@ function item_photo_menu($item){
        $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.
 
-       if(strlen($item['author-link'])) {
-               if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
-                       $status_link = $redirect_url."?url=status";
-                       $profile_link = $redirect_url."?url=profile";
-                       $photos_link = $redirect_url."?url=photos";
-                       if (local_user()){
-                               $pm_url = $a->get_baseurl() . '/message/new/' . $item['cid'];
-                               $contact_url = $item['self']?"":$a->get_baseurl() . '/contacts/' . $item['cid'];
-                       }
-               } 
+       $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']])) {
-                       $redirect_url = $a->get_baseurl() . '/redir/' . $a->authors[$item['author-link']]['id'];
-                       $status_link = $redirect_url."?url=status";
-                       $profile_link = $redirect_url."?url=profile";
-                       $photos_link = $redirect_url."?url=photos";
-
-                       if (local_user()){
-                               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'] ;
-                       }
-                                               
+                       $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);
        }
 
 
@@ -2755,3 +2781,18 @@ function lang_selector() {
        $o .= '</select></form></div>';
        return $o;
 }}
+
+
+if(! function_exists('parse_xml_string')) {
+function parse_xml_string($s) {
+       if(! strstr($s,'<?xml'))
+               return false;
+       $s2 = substr($s,strpos($s,'<?xml'));
+       libxml_use_internal_errors(true);
+       $x = @simplexml_load_string($s2);
+       if(count(libxml_get_errors()))
+               foreach(libxml_get_errors() as $err)
+                       logger('libxml: parse: ' . $err, LOGGER_DATA);
+       libxml_clear_errors();
+       return $x;
+}}