]> git.mxchange.org Git - friendica.git/commitdiff
Contact Type is now transmitted via poco
authorMichael Vogel <ike@pirati.ca>
Tue, 4 Oct 2016 03:48:01 +0000 (03:48 +0000)
committerMichael Vogel <ike@pirati.ca>
Tue, 4 Oct 2016 03:48:01 +0000 (03:48 +0000)
include/dbstructure.php
include/dfrn.php
include/socgraph.php
mod/poco.php

index 6224b434d819cb5267d34478d45e028661dadd1c..32d5986fe97f27398f51b0af1e0a0bd446c2e2ca 100644 (file)
@@ -686,6 +686,7 @@ function db_definition($charset) {
                                        "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
                                        "birthday" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"),
                                        "community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
+                                       "contact-type" => array("type" => "tinyint(1)", "not null" => "1", "default" => "-1"),
                                        "hide" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "nsfw" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1492,6 +1493,22 @@ function dbstructure_run(&$argv, &$argc) {
                switch ($argv[1]) {
                        case "update":
                                update_structure(true, true);
+
+                               $build = get_config('system','build');
+                               if (!x($build)) {
+                                       set_config('system','build',DB_UPDATE_VERSION);
+                                       $build = DB_UPDATE_VERSION;
+                               }
+
+                               $stored = intval($build);
+                               $current = intval(DB_UPDATE_VERSION);
+
+                               // run any left update_nnnn functions in update.php
+                               for($x = $stored; $x < $current; $x ++) {
+                                       $r = run_update_function($x);
+                                       if (!$r) break;
+                               }
+
                                set_config('system','build',DB_UPDATE_VERSION);
                                return;
                        case "dumpsql":
index c5d00e8a6730e8f2e8404d71891485e4b17df474..3b06932d8a186424d3c45ac4351bf996590a2cbe 100644 (file)
@@ -1147,7 +1147,7 @@ class dfrn {
                $author["link"] = $xpath->evaluate($element."/atom:uri/text()", $context)->item(0)->nodeValue;
 
                $r = q("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`,
-                               `name`, `nick`, `about`, `location`, `keywords`, `xmpp`, `bdyear`, `bd`, `hidden`
+                               `name`, `nick`, `about`, `location`, `keywords`, `xmpp`, `bdyear`, `bd`, `hidden`, `contact-type`
                                FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
                        intval($importer["uid"]), dbesc(normalise_link($author["link"])), dbesc(NETWORK_STATUSNET));
                if ($r) {
@@ -1336,6 +1336,7 @@ class dfrn {
                        $poco["generation"] = 2;
                        $poco["photo"] = $author["avatar"];
                        $poco["hide"] = $hide;
+                       $poco["contact-type"] = $contact["contact-type"];
                        update_gcontact($poco);
                }
 
index 89897aaa7ce5eceeeaa41a2b299b15cad5e5edfa..a41861d6eae0b33978797ad63fc5c201b3b0cc1c 100644 (file)
@@ -52,7 +52,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
        if(! $url)
                return;
 
-       $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation') ;
+       $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ;
 
        logger('poco_load: ' . $url, LOGGER_DEBUG);
 
@@ -86,6 +86,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
                $about = '';
                $keywords = '';
                $gender = '';
+               $contact_type = -1;
                $generation = 0;
 
                $name = $entry->displayName;
@@ -133,6 +134,9 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
                        foreach($entry->tags as $tag)
                                $keywords = implode(", ", $tag);
 
+               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
                /// TODO It could also be a Redmatrix server
                //if ($uid == 0)
@@ -140,6 +144,9 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
 
                poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $generation, $cid, $uid, $zcid);
 
+               $gcontact = array("url" => $profile_url, "contact-type" => $contact_type, "generation" => $generation);
+               update_gcontact($gcontact);
+
                // Update the Friendica contacts. Diaspora is doing it via a message. (See include/diaspora.php)
                // Deactivated because we now update Friendica contacts in dfrn.php
                //if (($location != "") OR ($about != "") OR ($keywords != "") OR ($gender != ""))
@@ -1236,7 +1243,7 @@ function poco_discover($complete = false) {
                        }
 
                        // Fetch all users from the other server
-                       $url = $server["poco"]."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation";
+                       $url = $server["poco"]."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
 
                        logger("Fetch all users from the server ".$server["nurl"], LOGGER_DEBUG);
 
@@ -1255,7 +1262,7 @@ function poco_discover($complete = false) {
                                        $updatedSince = date("Y-m-d H:i:s", time() - $timeframe * 86400);
 
                                        // Fetch all global contacts from the other server (Not working with Redmatrix and Friendica versions before 3.3)
-                                       $url = $server["poco"]."/@global?updatedSince=".$updatedSince."&fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation";
+                                       $url = $server["poco"]."/@global?updatedSince=".$updatedSince."&fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
 
                                        $success = false;
 
@@ -1303,7 +1310,7 @@ function poco_discover_server_users($data, $server) {
                        logger("Fetch contacts for the user ".$username." from the server ".$server["nurl"], LOGGER_DEBUG);
 
                        // Fetch all contacts from a given user from the other server
-                       $url = $server["poco"]."/".$username."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,generation";
+                       $url = $server["poco"]."/".$username."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
 
                        $retdata = z_fetch_url($url);
                        if ($retdata["success"])
@@ -1330,6 +1337,7 @@ function poco_discover_server($data, $default_generation = 0) {
                $about = '';
                $keywords = '';
                $gender = '';
+               $contact_type = -1;
                $generation = $default_generation;
 
                $name = $entry->displayName;
@@ -1374,6 +1382,9 @@ function poco_discover_server($data, $default_generation = 0) {
                if(isset($entry->generation) AND ($entry->generation > 0))
                        $generation = ++$entry->generation;
 
+               if(isset($entry->contactType) AND ($entry->contactType >= 0))
+                       $contact_type = $entry->contactType;
+
                if(isset($entry->tags))
                        foreach($entry->tags as $tag)
                                $keywords = implode(", ", $tag);
@@ -1383,6 +1394,10 @@ function poco_discover_server($data, $default_generation = 0) {
 
                        logger("Store profile ".$profile_url, LOGGER_DEBUG);
                        poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $generation, 0, 0, 0);
+
+                       $gcontact = array("url" => $profile_url, "contact-type" => $contact_type, "generation" => $generation);
+                       update_gcontact($gcontact);
+
                        logger("Done for profile ".$profile_url, LOGGER_DEBUG);
                }
        }
@@ -1534,7 +1549,7 @@ function update_gcontact($contact) {
                return false;
 
        $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`,
-                       `hide`, `nsfw`, `network`, `alias`, `notify`, `server_url`, `connect`, `updated`, `url`
+                       `contact-type`, `hide`, `nsfw`, `network`, `alias`, `notify`, `server_url`, `connect`, `updated`, `url`
                FROM `gcontact` WHERE `id` = %d LIMIT 1",
                intval($gcontact_id));
 
@@ -1614,20 +1629,20 @@ function update_gcontact($contact) {
        }
 
        if ($update) {
-               logger("Update gcontact for ".$contact["url"]." Callstack: ".App::callstack(), LOGGER_DEBUG);
+               logger("Update gcontact for ".$contact["url"], LOGGER_DEBUG);
 
                q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s',
                                        `birthday` = '%s', `gender` = '%s', `keywords` = '%s', `hide` = %d, `nsfw` = %d,
-                                       `alias` = '%s', `notify` = '%s', `url` = '%s',
+                                       `contact-type` = %d, `alias` = '%s', `notify` = '%s', `url` = '%s',
                                        `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s',
                                        `server_url` = '%s', `connect` = '%s'
                                WHERE `nurl` = '%s' AND (`generation` = 0 OR `generation` >= %d)",
                        dbesc($contact["photo"]), dbesc($contact["name"]), dbesc($contact["nick"]),
                        dbesc($contact["addr"]), dbesc($contact["network"]), dbesc($contact["birthday"]),
                        dbesc($contact["gender"]), dbesc($contact["keywords"]), intval($contact["hide"]),
-                       intval($contact["nsfw"]), dbesc($contact["alias"]), dbesc($contact["notify"]),
-                       dbesc($contact["url"]), dbesc($contact["location"]), dbesc($contact["about"]),
-                       intval($contact["generation"]), dbesc($contact["updated"]),
+                       intval($contact["nsfw"]), intval($contact["contact-type"]), dbesc($contact["alias"]),
+                       dbesc($contact["notify"]), dbesc($contact["url"]), dbesc($contact["location"]),
+                       dbesc($contact["about"]), intval($contact["generation"]), dbesc($contact["updated"]),
                        dbesc($contact["server_url"]), dbesc($contact["connect"]),
                        dbesc(normalise_link($contact["url"])), intval($contact["generation"]));
 
@@ -1644,13 +1659,14 @@ function update_gcontact($contact) {
 
                        q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s',
                                                `network` = '%s', `bd` = '%s', `gender` = '%s',
-                                               `keywords` = '%s', `alias` = '%s', `url` = '%s',
-                                               `location` = '%s', `about` = '%s'
+                                               `keywords` = '%s', `alias` = '%s', `contact-type` = %d,
+                                               `url` = '%s', `location` = '%s', `about` = '%s'
                                        WHERE `id` = %d",
                                dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["addr"]),
                                dbesc($contact["network"]), dbesc($contact["birthday"]), dbesc($contact["gender"]),
-                               dbesc($contact["keywords"]), dbesc($contact["alias"]), dbesc($contact["url"]),
-                               dbesc($contact["location"]), dbesc($contact["about"]), intval($r[0]["id"]));
+                               dbesc($contact["keywords"]), dbesc($contact["alias"]), intval($contact["contact-type"]),
+                               dbesc($contact["url"]), dbesc($contact["location"]), dbesc($contact["about"]),
+                               intval($r[0]["id"]));
                }
        }
 
index 0a1b392169b22dbf3e5748bb4ebbbebc8aa65a25..1ec5b2d4e1b07e1c91157cfadc31c28e59c30d14 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+// See here for a documentation for portable contacts:
+// https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html
 
 function poco_init(&$a) {
        require_once("include/bbcode.php");
@@ -104,9 +106,11 @@ function poco_init(&$a) {
                );
        } elseif($system_mode) {
                logger("Start system mode query", LOGGER_DEBUG);
-               $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender`,
-                       `profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`, `profile`.`postal-code` AS `ppostalcode`, `profile`.`country-name` AS `pcountry`
+               $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`,
+                               `profile`.`gender` AS `pgender`, `profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`,
+                               `profile`.`postal-code` AS `ppostalcode`, `profile`.`country-name` AS `pcountry`, `user`.`account-type`
                        FROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid`
+                               INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
                        WHERE `self` = 1 AND `profile`.`is-default`
                        AND `contact`.`uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d",
                        intval($startIndex),
@@ -155,6 +159,7 @@ function poco_init(&$a) {
                'gender' => false,
                'tags' => false,
                'address' => false,
+               'contactType' => false,
                'generation' => false
        );
 
@@ -207,6 +212,9 @@ function poco_init(&$a) {
                                if (($rr['keywords'] == "") AND isset($rr['pub_keywords']))
                                        $rr['keywords'] = $rr['pub_keywords'];
 
+                               if (isset($rr['account-type']))
+                                       $rr['contact-type'] = $rr['account-type'];
+
                                $about = Cache::get("about:".$rr['updated'].":".$rr['nurl']);
                                if (is_null($about)) {
                                        $about = bbcode($rr['about'], false, false);
@@ -300,6 +308,9 @@ function poco_init(&$a) {
                                                 $entry['address']['country'] = $rr['pcountry'];
                                }
 
+                               if($fields_ret['contactType'])
+                                       $entry['contactType'] = intval($rr['contact-type']);
+
                                $ret['entry'][] = $entry;
                        }
                }