From dab83c8b4093ff99963fc1e594e73c5f8ec6b5ad Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 18 Dec 2017 23:58:18 +0000 Subject: [PATCH] We now fetch the number of registered users --- boot.php | 2 +- database.sql | 3 +- src/Database/DBStructure.php | 1 + src/Protocol/PortableContact.php | 69 ++++++++++++++++---------------- update.php | 2 +- 5 files changed, 40 insertions(+), 37 deletions(-) diff --git a/boot.php b/boot.php index 00058727f5..8d70e9fca9 100644 --- a/boot.php +++ b/boot.php @@ -43,7 +43,7 @@ define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_CODENAME', 'Asparagus'); define('FRIENDICA_VERSION', '3.6-dev'); define('DFRN_PROTOCOL_VERSION', '2.23'); -define('DB_UPDATE_VERSION', 1237); +define('DB_UPDATE_VERSION', 1238); define('NEW_UPDATE_ROUTINE_VERSION', 1170); /** diff --git a/database.sql b/database.sql index f8ed2e5c15..a8c12f272b 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.6-dev (Asparagus) --- DB_UPDATE_VERSION 1237 +-- DB_UPDATE_VERSION 1238 -- ------------------------------------------ @@ -392,6 +392,7 @@ CREATE TABLE IF NOT EXISTS `gserver` ( `site_name` varchar(255) NOT NULL DEFAULT '', `info` text, `register_policy` tinyint(1) NOT NULL DEFAULT 0, + `registered-users` int(10) NOT NULL DEFAULT 0, `poco` varchar(255) NOT NULL DEFAULT '', `noscrape` varchar(255) NOT NULL DEFAULT '', `network` varchar(32) NOT NULL DEFAULT '', diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index c5bd3e99bc..aac0eeed76 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -1010,6 +1010,7 @@ class DBStructure { "site_name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "info" => array("type" => "text"), "register_policy" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), + "registered-users" => array("type" => "int(10)", "not null" => "1", "default" => "0"), "poco" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "noscrape" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 04b16a72db..384256fe98 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -722,6 +722,10 @@ class PortableContact } } + if (!empty($nodeinfo->usage->users->total)) { + $server['registered-users'] = $nodeinfo->usage->users->total; + } + $diaspora = false; $friendica = false; $gnusocial = false; @@ -853,6 +857,7 @@ class PortableContact $site_name = $servers[0]["site_name"]; $info = $servers[0]["info"]; $register_policy = $servers[0]["register_policy"]; + $registered_users = $servers[0]["registered-users"]; if (!$force && !self::updateNeeded($servers[0]["created"], "", $last_failure, $last_contact)) { logger("Use cached data for server ".$server_url, LOGGER_DEBUG); @@ -866,6 +871,7 @@ class PortableContact $site_name = ""; $info = ""; $register_policy = -1; + $registered_users = 0; $last_contact = NULL_DATE; $last_failure = NULL_DATE; @@ -928,12 +934,18 @@ class PortableContact $register_policy = -1; } + if (!$failure) { + // This will be too low, but better than no value at all. + $registered_users = dba::count('gcontact', ['server_url' => normalise_link($server_url)]); + } + // Look for poco if (!$failure) { $serverret = z_fetch_url($server_url."/poco"); if ($serverret["success"]) { $data = json_decode($serverret["body"]); if (isset($data->totalResults)) { + $registered_users = $data->totalResults; $poco = $server_url."/poco"; $server = self::detectPocoData($data); if ($server) { @@ -1020,6 +1032,9 @@ class PortableContact $info = $data->description; $network = NETWORK_OSTATUS; } + if (!empty($data->stats->user_count)) { + $registered_users = $data->stats->user_count; + } } if (strstr($orig_version.$version, 'Pleroma')) { $platform = 'Pleroma'; @@ -1040,6 +1055,9 @@ class PortableContact if (!empty($data->site_name)) { $site_name = $data->site_name; } + if (!empty($data->channels_total)) { + $registered_users = $data->channels_total; + } switch ($data->register_policy) { case "REGISTER_OPEN": $register_policy = REGISTER_OPEN; @@ -1160,6 +1178,10 @@ class PortableContact if (isset($server['site_name'])) { $site_name = $server['site_name']; } + + if (isset($server['registered-users'])) { + $registered_users = $server['registered-users']; + } } } @@ -1227,41 +1249,20 @@ class PortableContact $platform = strip_tags($platform); if ($servers) { - q( - "UPDATE `gserver` SET `url` = '%s', `version` = '%s', `site_name` = '%s', `info` = '%s', `register_policy` = %d, `poco` = '%s', `noscrape` = '%s', - `network` = '%s', `platform` = '%s', `last_contact` = '%s', `last_failure` = '%s' WHERE `nurl` = '%s'", - dbesc($server_url), - dbesc($version), - dbesc($site_name), - dbesc($info), - intval($register_policy), - dbesc($poco), - dbesc($noscrape), - dbesc($network), - dbesc($platform), - dbesc($last_contact), - dbesc($last_failure), - dbesc(normalise_link($server_url)) - ); + $fields = ['url' => $server_url, 'version' => $version, + 'site_name' => $site_name, 'info' => $info, 'register_policy' => $register_policy, + 'poco' => $poco, 'noscrape' => $noscrape, 'network' => $network, + 'platform' => $platform, 'registered-users' => $registered_users, + 'last_contact' => $last_contact, 'last_failure' => last_failure]; + dba::update('gserver', $fields, ['nurl' => normalise_link($server_url)]); } elseif (!$failure) { - q( - "INSERT INTO `gserver` (`url`, `nurl`, `version`, `site_name`, `info`, `register_policy`, `poco`, `noscrape`, `network`, `platform`, `created`, `last_contact`, `last_failure`) - VALUES ('%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s')", - dbesc($server_url), - dbesc(normalise_link($server_url)), - dbesc($version), - dbesc($site_name), - dbesc($info), - intval($register_policy), - dbesc($poco), - dbesc($noscrape), - dbesc($network), - dbesc($platform), - dbesc(datetime_convert()), - dbesc($last_contact), - dbesc($last_failure), - dbesc(datetime_convert()) - ); + $fields = ['url' => $server_url, 'nurl' => normalise_link($server_url), 'version' => $version, + 'site_name' => $site_name, 'info' => $info, 'register_policy' => $register_policy, + 'poco' => $poco, 'noscrape' => $noscrape, 'network' => $network, + 'platform' => $platform, 'registered-users' => $registered_users, + 'created' => datetime_convert(), + 'last_contact' => $last_contact, 'last_failure' => last_failure]; + dba::insert('gserver', $fields); } logger("End discovery for server " . $server_url, LOGGER_DEBUG); diff --git a/update.php b/update.php index 9701e9e398..a968451e36 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@