]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
little fix
[friendica.git] / boot.php
index 334f0a742feb5a525254a5bc4eecad5554401a9e..92741eaee840f84b826063c52deec3d62f692d91 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.945' );
+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' );
@@ -437,15 +437,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 +1481,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 +1555,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 +1646,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();
@@ -2654,14 +2662,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 +2686,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;
@@ -2682,32 +2695,50 @@ function item_photo_menu($item){
        $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'] ;
 
-       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'] ;
-               } 
+       // $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']])) {
-                       $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'] ;
-                                               
+                       $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
+               t("Send PM") => $pm_url,
        );
        
+       
        $args = array($item, &$menu);
        
        call_hooks('item_photo_menu', $args);
@@ -2738,3 +2769,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;
+}}