From 6acf660ebd80ce38293af80a4764b3171761a912 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 2 Sep 2020 19:19:00 +0000 Subject: [PATCH] New model class "host" --- database.sql | 12 +++++- src/Model/Host.php | 79 +++++++++++++++++++++++++++++++++++ static/dbstructure.config.php | 13 +++++- 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/Model/Host.php diff --git a/database.sql b/database.sql index 46a2981e77..addd396ffd 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2020.09-dev (Red Hot Poker) --- DB_UPDATE_VERSION 1366 +-- DB_UPDATE_VERSION 1367 -- ------------------------------------------ @@ -585,6 +585,16 @@ CREATE TABLE IF NOT EXISTS `hook` ( UNIQUE INDEX `hook_file_function` (`hook`,`file`,`function`) ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='addon hook registry'; +-- +-- TABLE host +-- +CREATE TABLE IF NOT EXISTS `host` ( + `id` tinyint unsigned NOT NULL auto_increment COMMENT 'sequential ID', + `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'The hostname', + PRIMARY KEY(`id`), + UNIQUE INDEX `name` (`name`) +) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Hostname'; + -- -- TABLE inbox-status -- diff --git a/src/Model/Host.php b/src/Model/Host.php new file mode 100644 index 0000000000..15f75bd100 --- /dev/null +++ b/src/Model/Host.php @@ -0,0 +1,79 @@ +. + * + */ + +namespace Friendica\Model; + +use Friendica\Core\Logger; +use Friendica\Database\DBA; + +class Host +{ + /** + * Get the id for a given hostname + * When empty, the current hostname is used + * + * @param string $hostname + * + * @return integer host name id + * @throws \Exception + */ + public static function getId(string $hostname = '') + { + if (empty($hostname)) { + $hostname = php_uname('n'); + } + + $hostname = strtolower($hostname); + + $host = DBA::selectFirst('host', ['id'], ['name' => $hostname]); + if (!empty($host['id'])) { + return $host['id']; + } + + DBA::replace('host', ['name' => $hostname]); + + $host = DBA::selectFirst('host', ['id'], ['name' => $hostname]); + if (empty($host['id'])) { + Logger::warning('Host name could not be inserted', ['name' => $hostname]); + return 0; + } + + return $host['id']; + } + + /** + * Get the hostname for a given id + * + * @param int $id + * + * @return string host name + * @throws \Exception + */ + public static function getName(int $id) + { + $host = DBA::selectFirst('host', ['name'], ['id' => $id]); + if (!empty($host['name'])) { + return $host['name']; + } + + return ''; + } +} diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index b1cbb6b27b..23a299e652 100755 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -54,7 +54,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1366); + define('DB_UPDATE_VERSION', 1367); } return [ @@ -653,6 +653,17 @@ return [ "hook_file_function" => ["UNIQUE", "hook", "file", "function"], ] ], + "host" => [ + "comment" => "Hostname", + "fields" => [ + "id" => ["type" => "tinyint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"], + "name" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => "The hostname"], + ], + "indexes" => [ + "PRIMARY" => ["id"], + "name" => ["UNIQUE", "name"], + ] + ], "inbox-status" => [ "comment" => "Status of ActivityPub inboxes", "fields" => [