]> git.mxchange.org Git - friendica.git/blobdiff - include/socgraph.php
Workaround for vanished database connections while authentication
[friendica.git] / include / socgraph.php
index 421a68cc9ef9212aad785505f179c2814cec5dab..5960764f9e7ffa6bba874d35e09487fb0129652d 100644 (file)
@@ -40,7 +40,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
                        $r = q("select `poco`, `uid` from `contact` where `id` = %d limit 1",
                                intval($cid)
                        );
-                       if(count($r)) {
+                       if (dbm::is_result($r)) {
                                $url = $r[0]['poco'];
                                $uid = $r[0]['uid'];
                        }
@@ -93,19 +93,19 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
 
                if(isset($entry->urls)) {
                        foreach($entry->urls as $url) {
-                               if($url->type == 'profile') {
+                               if ($url->type == 'profile') {
                                        $profile_url = $url->value;
                                        continue;
                                }
-                               if($url->type == 'webfinger') {
+                               if ($url->type == 'webfinger') {
                                        $connect_url = str_replace('acct:' , '', $url->value);
                                        continue;
                                }
                        }
                }
-               if(isset($entry->photos)) {
+               if (isset($entry->photos)) {
                        foreach($entry->photos as $photo) {
-                               if($photo->type == 'profile') {
+                               if ($photo->type == 'profile') {
                                        $profile_photo = $photo->value;
                                        continue;
                                }
@@ -207,20 +207,21 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
        $orig_updated = $updated;
 
        // The global contacts should contain the original picture, not the cached one
-       if (($generation != 1) AND stristr(normalise_link($profile_photo), normalise_link($a->get_baseurl()."/photo/")))
+       if (($generation != 1) AND stristr(normalise_link($profile_photo), normalise_link(App::get_baseurl()."/photo/"))) {
                $profile_photo = "";
+       }
 
        $r = q("SELECT `network` FROM `contact` WHERE `nurl` = '%s' AND `network` != '' AND `network` != '%s' LIMIT 1",
                dbesc(normalise_link($profile_url)), dbesc(NETWORK_STATUSNET)
        );
-       if(count($r))
+       if (dbm::is_result($r))
                $network = $r[0]["network"];
 
        if (($network == "") OR ($network == NETWORK_OSTATUS)) {
                $r = q("SELECT `network`, `url` FROM `contact` WHERE `alias` IN ('%s', '%s') AND `network` != '' AND `network` != '%s' LIMIT 1",
                        dbesc($profile_url), dbesc(normalise_link($profile_url)), dbesc(NETWORK_STATUSNET)
                );
-               if(count($r)) {
+               if (dbm::is_result($r)) {
                        $network = $r[0]["network"];
                        //$profile_url = $r[0]["url"];
                }
@@ -330,7 +331,7 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                intval($gcid),
                intval($zcid)
        );
-       if(! count($r)) {
+       if (! dbm::is_result($r)) {
                q("INSERT INTO `glink` (`cid`,`uid`,`gcid`,`zcid`, `updated`) VALUES (%d,%d,%d,%d, '%s') ",
                        intval($cid),
                        intval($uid),
@@ -391,6 +392,15 @@ function poco_detect_server($profile) {
                }
        }
 
+       // Mastodon
+       if ($server_url == "") {
+               $red = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile);
+               if ($red != $profile) {
+                       $server_url = $red;
+                       $network = NETWORK_OSTATUS;
+               }
+       }
+
        return $server_url;
 }
 
@@ -755,6 +765,13 @@ function poco_check_server($server_url, $network = "", $force = false) {
                                                $versionparts = explode("-", $version);
                                                $version = $versionparts[0];
                                        }
+
+                                       if(stristr($line,'Server: Mastodon')) {
+                                               $platform = "Mastodon";
+                                               $network = NETWORK_OSTATUS;
+                                               // Mastodon doesn't reveal version numbers
+                                               $version = "";
+                                       }
                                }
                }
        }
@@ -960,7 +977,7 @@ function count_common_friends($uid,$cid) {
        );
 
 //     logger("count_common_friends: $uid $cid {$r[0]['total']}");
-       if(count($r))
+       if (dbm::is_result($r))
                return $r[0]['total'];
        return 0;
 
@@ -1006,7 +1023,7 @@ function count_common_friends_zcid($uid,$zcid) {
                intval($uid)
        );
 
-       if(count($r))
+       if (dbm::is_result($r))
                return $r[0]['total'];
        return 0;
 
@@ -1045,7 +1062,7 @@ function count_all_friends($uid,$cid) {
                intval($uid)
        );
 
-       if(count($r))
+       if (dbm::is_result($r))
                return $r[0]['total'];
        return 0;
 
@@ -1117,7 +1134,7 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
                intval($limit)
        );
 
-       if (count($r) && count($r) >= ($limit -1)) {
+       if (dbm::is_result($r) && count($r) >= ($limit -1)) {
 // Uncommented because the result of the queries are to big to store it in the cache.
 // We need to decide if we want to change the db column type or if we want to delete it.
 //             Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $r, CACHE_FIVE_MINUTES);
@@ -1165,22 +1182,23 @@ function update_suggestions() {
        $done = array();
 
        /// TODO Check if it is really neccessary to poll the own server
-       poco_load(0,0,0,$a->get_baseurl() . '/poco');
+       poco_load(0,0,0,App::get_baseurl() . '/poco');
 
-       $done[] = $a->get_baseurl() . '/poco';
+       $done[] = App::get_baseurl() . '/poco';
 
        if(strlen(get_config('system','directory'))) {
                $x = fetch_url(get_server()."/pubsites");
-               if($x) {
+               if ($x) {
                        $j = json_decode($x);
-                       if($j->entries) {
+                       if ($j->entries) {
                                foreach($j->entries as $entry) {
 
                                        poco_check_server($entry->url);
 
                                        $url = $entry->url . '/poco';
-                                       if(! in_array($url,$done))
+                                       if (! in_array($url,$done)) {
                                                poco_load(0,0,0,$entry->url . '/poco');
+                                       }
                                }
                        }
                }
@@ -1191,7 +1209,7 @@ function update_suggestions() {
                dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA)
        );
 
-       if(count($r)) {
+       if (dbm::is_result($r)) {
                foreach($r as $rr) {
                        $base = substr($rr['poco'],0,strrpos($rr['poco'],'/'));
                        if(! in_array($base,$done))
@@ -1317,7 +1335,7 @@ function poco_discover_server_users($data, $server) {
                $username = "";
                if (isset($entry->urls)) {
                        foreach($entry->urls as $url)
-                               if($url->type == 'profile') {
+                               if ($url->type == 'profile') {
                                        $profile_url = $url->value;
                                        $urlparts = parse_url($profile_url);
                                        $username = end(explode("/", $urlparts["path"]));
@@ -1361,11 +1379,11 @@ function poco_discover_server($data, $default_generation = 0) {
 
                if(isset($entry->urls)) {
                        foreach($entry->urls as $url) {
-                               if($url->type == 'profile') {
+                               if ($url->type == 'profile') {
                                        $profile_url = $url->value;
                                        continue;
                                }
-                               if($url->type == 'webfinger') {
+                               if ($url->type == 'webfinger') {
                                        $connect_url = str_replace('acct:' , '', $url->value);
                                        continue;
                                }
@@ -1755,8 +1773,6 @@ function gs_fetch_users($server) {
 
        logger("Fetching users from GNU Social server ".$server, LOGGER_DEBUG);
 
-       $a = get_app();
-
        $url = $server."/main/statistics";
 
        $result = z_fetch_url($url);
@@ -1795,7 +1811,7 @@ function gs_fetch_users($server) {
                                        "nick" => $user->nickname,
                                        "about" => $user->bio,
                                        "network" => NETWORK_OSTATUS,
-                                       "photo" => $a->get_baseurl()."/images/person-175.jpg");
+                                       "photo" => App::get_baseurl()."/images/person-175.jpg");
                        get_gcontact_id($contact);
                }
 }