]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
wrong variable passed
[friendica.git] / boot.php
index 3b5da170cbab8d95f4349d342741e1a2776dbc4c..7dfaa021ee7743cb35df845166e938fa741b5c2e 100644 (file)
--- 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.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();
@@ -2022,7 +2042,7 @@ function contact_block() {
                        intval($shown)
        );
        if(count($r)) {
-               $o .= '<h4 class="contact-h4">' .  sprintf(tt('%d Contact','%d Contacts', $total),$total) . '</h4><div id="contact-block">';
+               $o .= '<h4 class="contact-h4">' .  sprintf( tt('%d Contact','%d Contacts', $total),$total) . '</h4><div id="contact-block">';
                foreach($r as $rr) {
                        $redirect_url = $a->get_baseurl() . '/redir/' . $rr['id'];
                        if(local_user() && ($rr['uid'] == local_user())
@@ -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');
 
@@ -2405,9 +2425,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` 
@@ -2656,16 +2674,125 @@ 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;
                }
        }
        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 .= "<li><a href='$v'>$k</a></li>\n";
+       }
+       return $o;
+}}
+
+if(! function_exists('lang_selector')) {
+function lang_selector() {
+       global $lang;
+       $o .= '<div id="language-selector" style="display: none;" >';
+       $o .= '<form action="" method="post" ><select name="system_language" onchange="this.form.submit();" >';
+       $langs = glob('view/*/strings.php');
+       if(is_array($langs) && count($langs)) {
+               if(! in_array('view/en/strings.php',$langs))
+                       $langs[] = 'view/en/';
+               foreach($langs as $l) {
+                       $ll = substr($l,5);
+                       $ll = substr($ll,0,strrpos($ll,'/'));
+                       $selected = (($ll === $lang) ? ' selected="selected" ' : '');
+                       $o .= '<option value="' . $ll . '"' . $selected . '>' . $ll . '</option>';
+               }
+       }
+       $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;
+}}