]> git.mxchange.org Git - friendica.git/blobdiff - include/socgraph.php
Merge pull request #3077 from Hypolite/issue/#3039-mod-1of3
[friendica.git] / include / socgraph.php
index e1b5cdbf9acfaf1d02554566b9e95ea5f4c946a6..6249f189e9a0a0d30c0b44cfa4fa78fd95ba86ec 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'];
                        }
@@ -91,50 +91,58 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
 
                $name = $entry->displayName;
 
-               if(isset($entry->urls)) {
-                       foreach($entry->urls as $url) {
-                               if($url->type == 'profile') {
+               if (isset($entry->urls)) {
+                       foreach ($entry->urls as $url) {
+                               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)) {
-                       foreach($entry->photos as $photo) {
-                               if($photo->type == 'profile') {
+               if (isset($entry->photos)) {
+                       foreach ($entry->photos as $photo) {
+                               if ($photo->type == 'profile') {
                                        $profile_photo = $photo->value;
                                        continue;
                                }
                        }
                }
 
-               if(isset($entry->updated))
+               if (isset($entry->updated)) {
                        $updated = date("Y-m-d H:i:s", strtotime($entry->updated));
+               }
 
-               if(isset($entry->network))
+               if (isset($entry->network)) {
                        $network = $entry->network;
+               }
 
-               if(isset($entry->currentLocation))
+               if (isset($entry->currentLocation)) {
                        $location = $entry->currentLocation;
+               }
 
-               if(isset($entry->aboutMe))
+               if (isset($entry->aboutMe)) {
                        $about = html2bbcode($entry->aboutMe);
+               }
 
-               if(isset($entry->gender))
+               if (isset($entry->gender)) {
                        $gender = $entry->gender;
+               }
 
-               if(isset($entry->generation) AND ($entry->generation > 0))
+               if (isset($entry->generation) AND ($entry->generation > 0)) {
                        $generation = ++$entry->generation;
+               }
 
-               if(isset($entry->tags))
-                       foreach($entry->tags as $tag)
+               if (isset($entry->tags)) {
+                       foreach($entry->tags as $tag) {
                                $keywords = implode(", ", $tag);
+                       }
+               }
 
-               if(isset($entry->contactType) AND ($entry->contactType >= 0))
+               if (isset($entry->contactType) AND ($entry->contactType >= 0))
                        $contact_type = $entry->contactType;
 
                // If you query a Friendica server for its profiles, the network has to be Friendica
@@ -171,8 +179,6 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
 
 function poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $generation, $cid = 0, $uid = 0, $zcid = 0) {
 
-       $a = get_app();
-
        // Generation:
        //  0: No definition
        //  1: Profiles on this server
@@ -207,20 +213,22 @@ 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 +338,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 +399,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 +772,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 +984,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 +1030,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 +1069,7 @@ function count_all_friends($uid,$cid) {
                intval($uid)
        );
 
-       if(count($r))
+       if (dbm::is_result($r))
                return $r[0]['total'];
        return 0;
 
@@ -1079,10 +1103,12 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
                return array();
        }
 
-       $list = Cache::get("suggestion_query:".$uid.":".$start.":".$limit);
-       if (!is_null($list)) {
-               return $list;
-       }
+// 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.
+//     $list = Cache::get("suggestion_query:".$uid.":".$start.":".$limit);
+//     if (!is_null($list)) {
+//             return $list;
+//     }
 
        $network = array(NETWORK_DFRN);
 
@@ -1115,8 +1141,11 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
                intval($limit)
        );
 
-       if(count($r) && count($r) >= ($limit -1)) {
-               Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $r, CACHE_FIVE_MINUTES);
+       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);
+
                return $r;
        }
 
@@ -1147,7 +1176,9 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
        while (sizeof($list) > ($limit))
                array_pop($list);
 
-       Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $list, CACHE_FIVE_MINUTES);
+// 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, $list, CACHE_FIVE_MINUTES);
        return $list;
 }
 
@@ -1157,23 +1188,24 @@ 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');
+       /// @TODO Check if it is really neccessary to poll the own server
+       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'))) {
+       if (strlen(get_config('system','directory'))) {
                $x = fetch_url(get_server()."/pubsites");
-               if($x) {
+               if ($x) {
                        $j = json_decode($x);
-                       if($j->entries) {
-                               foreach($j->entries as $entry) {
+                       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');
+                                       }
                                }
                        }
                }
@@ -1184,8 +1216,8 @@ function update_suggestions() {
                dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA)
        );
 
-       if(count($r)) {
-               foreach($r as $rr) {
+       if (dbm::is_result($r)) {
+               foreach ($r as $rr) {
                        $base = substr($rr['poco'],0,strrpos($rr['poco'],'/'));
                        if(! in_array($base,$done))
                                poco_load(0,0,0,$base);
@@ -1196,7 +1228,7 @@ function update_suggestions() {
 function poco_discover_federation() {
        $last = get_config('poco','last_federation_discovery');
 
-       if($last) {
+       if ($last) {
                $next = $last + (24 * 60 * 60);
                if($next > time())
                        return;
@@ -1310,7 +1342,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"]));
@@ -1352,52 +1384,61 @@ function poco_discover_server($data, $default_generation = 0) {
 
                $name = $entry->displayName;
 
-               if(isset($entry->urls)) {
+               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)) {
-                       foreach($entry->photos as $photo) {
-                               if($photo->type == 'profile') {
+               if (isset($entry->photos)) {
+                       foreach ($entry->photos as $photo) {
+                               if ($photo->type == 'profile') {
                                        $profile_photo = $photo->value;
                                        continue;
                                }
                        }
                }
 
-               if(isset($entry->updated))
+               if (isset($entry->updated)) {
                        $updated = date("Y-m-d H:i:s", strtotime($entry->updated));
+               }
 
-               if(isset($entry->network))
+               if(isset($entry->network)) {
                        $network = $entry->network;
+               }
 
-               if(isset($entry->currentLocation))
+               if(isset($entry->currentLocation)) {
                        $location = $entry->currentLocation;
+               }
 
-               if(isset($entry->aboutMe))
+               if(isset($entry->aboutMe)) {
                        $about = html2bbcode($entry->aboutMe);
+               }
 
-               if(isset($entry->gender))
+               if(isset($entry->gender)) {
                        $gender = $entry->gender;
+               }
 
-               if(isset($entry->generation) AND ($entry->generation > 0))
+               if(isset($entry->generation) AND ($entry->generation > 0)) {
                        $generation = ++$entry->generation;
+               }
 
-               if(isset($entry->contactType) AND ($entry->contactType >= 0))
+               if(isset($entry->contactType) AND ($entry->contactType >= 0)) {
                        $contact_type = $entry->contactType;
+               }
 
-               if(isset($entry->tags))
-                       foreach($entry->tags as $tag)
+               if(isset($entry->tags)) {
+                       foreach ($entry->tags as $tag) {
                                $keywords = implode(", ", $tag);
+                       }
+               }
 
                if ($generation > 0) {
                        $success = true;
@@ -1535,7 +1576,7 @@ function get_gcontact_id($contact) {
                proc_run(PRIORITY_LOW, 'include/gprobe.php', bin2hex($contact["url"]));
        }
 
-       if ((count($r) > 1) AND ($gcontact_id > 0) AND ($contact["url"] != ""))
+       if ((dbm::is_result($r)) AND (count($r) > 1) AND ($gcontact_id > 0) AND ($contact["url"] != ""))
         q("DELETE FROM `gcontact` WHERE `nurl` = '%s' AND `id` != %d",
                dbesc(normalise_link($contact["url"])),
                intval($gcontact_id));
@@ -1748,8 +1789,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);
@@ -1788,7 +1827,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);
                }
 }