From 095fa872ed885abb6351879169cce391dc64a75e Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 4 Oct 2016 03:48:01 +0000 Subject: [PATCH 1/3] Contact Type is now transmitted via poco --- include/dbstructure.php | 17 ++++++++++++++++ include/dfrn.php | 3 ++- include/socgraph.php | 44 ++++++++++++++++++++++++++++------------- mod/poco.php | 15 ++++++++++++-- 4 files changed, 62 insertions(+), 17 deletions(-) diff --git a/include/dbstructure.php b/include/dbstructure.php index 6224b434d8..32d5986fe9 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -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": diff --git a/include/dfrn.php b/include/dfrn.php index c5d00e8a67..3b06932d8a 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -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); } diff --git a/include/socgraph.php b/include/socgraph.php index 89897aaa7c..a41861d6ea 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -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"])); } } diff --git a/mod/poco.php b/mod/poco.php index 0a1b392169..1ec5b2d4e1 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -1,4 +1,6 @@ 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; } } From 5f9f3b3570e68a232d51acf57f096163b9c74451 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 4 Oct 2016 03:53:31 +0000 Subject: [PATCH 2/3] Added the database field to database.sql --- boot.php | 2 +- database.sql | 3 ++- update.php | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index ea14428fd0..1c475ca935 100644 --- a/boot.php +++ b/boot.php @@ -38,7 +38,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_CODENAME', 'Asparagus'); define ( 'FRIENDICA_VERSION', '3.5.1-dev' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1203 ); +define ( 'DB_UPDATE_VERSION', 1204 ); /** * @brief Constant with a HTML line break. diff --git a/database.sql b/database.sql index a482b106cf..4133d3e825 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.5.1-dev (Asparagus) --- DB_UPDATE_VERSION 1203 +-- DB_UPDATE_VERSION 1204 -- ------------------------------------------ @@ -328,6 +328,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` ( `gender` varchar(32) NOT NULL DEFAULT '', `birthday` varchar(32) NOT NULL DEFAULT '0000-00-00', `community` tinyint(1) NOT NULL DEFAULT 0, + `contact-type` tinyint(1) NOT NULL DEFAULT -1, `hide` tinyint(1) NOT NULL DEFAULT 0, `nsfw` tinyint(1) NOT NULL DEFAULT 0, `network` varchar(255) NOT NULL DEFAULT '', diff --git a/update.php b/update.php index 31f7852a2f..863025ccc7 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Tue, 4 Oct 2016 03:58:47 +0000 Subject: [PATCH 3/3] When we have the field, we should use it :) --- include/Contact.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Contact.php b/include/Contact.php index 458f56ce52..6daba33844 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -223,7 +223,7 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) { // Fetch the data from the gcontact table if (!$r) $r = q("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`, - `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, 0 AS `contact-type`, `birthday`, 0 AS `self` + `keywords`, `gender`, `photo`, `photo` AS `thumb`, `photo` AS `micro`, `community` AS `forum`, 0 AS `prv`, `community`, `contact-type`, `birthday`, 0 AS `self` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($url)));