X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FContent%2FContactSelector.php;h=e4585cd297392962775558387054ff2d0439c13a;hb=b9bb525fe91c176ada2323c2d628291a27594d59;hp=64a2b5be9e4f4b92182a1f277a5408c88f27e6b2;hpb=8e2910976f126ee7c728ba4716f317ac496f377b;p=friendica.git diff --git a/src/Content/ContactSelector.php b/src/Content/ContactSelector.php index 64a2b5be9e..e4585cd297 100644 --- a/src/Content/ContactSelector.php +++ b/src/Content/ContactSelector.php @@ -1,7 +1,24 @@ . + * */ + namespace Friendica\Content; use Friendica\Core\Hook; @@ -16,12 +33,15 @@ use Friendica\Util\Strings; */ class ContactSelector { + static $serverdata = []; + static $server_url = []; + /** * @param string $current current * @param boolean $disabled optional, default false - * @return object + * @return string */ - public static function pollInterval($current, $disabled = false) + public static function pollInterval(string $current, bool $disabled = false): string { $dis = (($disabled) ? ' disabled="disabled" ' : ''); $o = ''; @@ -44,13 +64,32 @@ class ContactSelector return $o; } + private static function getServerForProfile(string $profile) + { + $server_url = self::getServerURLForProfile($profile); + + if (!empty(self::$serverdata[$server_url])) { + return self::$serverdata[$server_url]; + } + + // Now query the GServer for the platform name + $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]); + + self::$serverdata[$server_url] = $gserver; + return $gserver; + } + /** * @param string $profile Profile URL * @return string Server URL - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \Exception */ - private static function getServerURLForProfile($profile) + private static function getServerURLForProfile(string $profile): string { + if (!empty(self::$server_url[$profile])) { + return self::$server_url[$profile]; + } + $server_url = ''; // Fetch the server url from the contact table @@ -59,14 +98,6 @@ class ContactSelector $server_url = Strings::normaliseLink($contact['baseurl']); } - if (empty($server_url)) { - // Fetch the server url from the gcontact table - $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($profile)]); - if (!empty($gcontact) && !empty($gcontact['server_url'])) { - $server_url = Strings::normaliseLink($gcontact['server_url']); - } - } - if (empty($server_url)) { // Create the server url out of the profile url $parts = parse_url($profile); @@ -74,17 +105,22 @@ class ContactSelector $server_url = Strings::normaliseLink(Network::unparseURL($parts)); } + self::$server_url[$profile] = $server_url; + return $server_url; } /** + * Determines network name + * * @param string $network network of the contact * @param string $profile optional, default empty * @param string $protocol (Optional) Protocol that is used for the transmission + * @param int $gsid Server id * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function networkToName($network, $profile = '', $protocol = '') + public static function networkToName(string $network, string $profile = '', string $protocol = '', int $gsid = null): string { $nets = [ Protocol::DFRN => DI::l10n()->t('DFRN'), @@ -104,6 +140,8 @@ class ContactSelector Protocol::STATUSNET => DI::l10n()->t('GNU Social Connector'), Protocol::ACTIVITYPUB => DI::l10n()->t('ActivityPub'), Protocol::PNUT => DI::l10n()->t('pnut'), + Protocol::TUMBLR => DI::l10n()->t('Tumblr'), + Protocol::BLUESKY => DI::l10n()->t('Bluesky'), ]; Hook::callAll('network_to_name', $nets); @@ -114,24 +152,26 @@ class ContactSelector $networkname = str_replace($search, $replace, $network); if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) { - $server_url = self::getServerURLForProfile($profile); - - // Now query the GServer for the platform name - $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]); + if (!empty($gsid) && !empty(self::$serverdata[$gsid])) { + $gserver = self::$serverdata[$gsid]; + } elseif (!empty($gsid)) { + $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['id' => $gsid]); + self::$serverdata[$gsid] = $gserver; + } else { + $gserver = self::getServerForProfile($profile); + } - if (DBA::isResult($gserver)) { - if (!empty($gserver['platform'])) { - $platform = $gserver['platform']; - } elseif (!empty($gserver['network']) && ($gserver['network'] != Protocol::ACTIVITYPUB)) { - $platform = self::networkToName($gserver['network']); - } + if (!empty($gserver['platform'])) { + $platform = $gserver['platform']; + } elseif (!empty($gserver['network']) && ($gserver['network'] != Protocol::ACTIVITYPUB)) { + $platform = self::networkToName($gserver['network']); + } - if (!empty($platform)) { - $networkname = $platform; + if (!empty($platform)) { + $networkname = $platform; - if ($network == Protocol::ACTIVITYPUB) { - $networkname .= ' (AP)'; - } + if ($network == Protocol::ACTIVITYPUB) { + $networkname .= ' (AP)'; } } } @@ -144,12 +184,15 @@ class ContactSelector } /** + * Determines network's icon name + * * @param string $network network * @param string $profile optional, default empty - * @return string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @param int $gsid Server id + * @return string Name for network icon + * @throws \Exception */ - public static function networkToIcon($network, $profile = "") + public static function networkToIcon(string $network, string $profile = "", int $gsid = null): string { $nets = [ Protocol::DFRN => 'friendica', @@ -169,13 +212,15 @@ class ContactSelector Protocol::STATUSNET => 'gnu-social', Protocol::ACTIVITYPUB => 'activitypub', Protocol::PNUT => 'file-text-o', /// @todo + Protocol::TUMBLR => 'tumblr', + Protocol::BLUESKY => 'circle', /// @todo ]; $platform_icons = ['diaspora' => 'diaspora', 'friendica' => 'friendica', 'friendika' => 'friendica', 'GNU Social' => 'gnu-social', 'gnusocial' => 'gnu-social', 'hubzilla' => 'hubzilla', 'mastodon' => 'mastodon', 'peertube' => 'peertube', 'pixelfed' => 'pixelfed', 'pleroma' => 'pleroma', 'red' => 'hubzilla', 'redmatrix' => 'hubzilla', - 'socialhome' => 'social-home', 'wordpress' => 'wordpress']; + 'socialhome' => 'social-home', 'wordpress' => 'wordpress', 'lemmy' => 'users']; $search = array_keys($nets); $replace = array_values($nets); @@ -183,110 +228,19 @@ class ContactSelector $network_icon = str_replace($search, $replace, $network); if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) { - $server_url = self::getServerURLForProfile($profile); - - // Now query the GServer for the platform name - $gserver = DBA::selectFirst('gserver', ['platform'], ['nurl' => $server_url]); - - if (DBA::isResult($gserver) && !empty($gserver['platform'])) { + if (!empty($gsid) && !empty(self::$serverdata[$gsid])) { + $gserver = self::$serverdata[$gsid]; + } elseif (!empty($gsid)) { + $gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['id' => $gsid]); + self::$serverdata[$gsid] = $gserver; + } else { + $gserver = self::getServerForProfile($profile); + } + if (!empty($gserver['platform'])) { $network_icon = $platform_icons[strtolower($gserver['platform'])] ?? $network_icon; } } return $network_icon; } - - /** - * @param string $current optional, default empty - * @param string $suffix optionsl, default empty - * @return string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ - public static function sexualPreference($current = "", $suffix = "") - { - $o = ''; - $select = [ - '' => DI::l10n()->t('No answer'), - 'Males' => DI::l10n()->t('Males'), - 'Females' => DI::l10n()->t('Females'), - 'Gay' => DI::l10n()->t('Gay'), - 'Lesbian' => DI::l10n()->t('Lesbian'), - 'No Preference' => DI::l10n()->t('No Preference'), - 'Bisexual' => DI::l10n()->t('Bisexual'), - 'Autosexual' => DI::l10n()->t('Autosexual'), - 'Abstinent' => DI::l10n()->t('Abstinent'), - 'Virgin' => DI::l10n()->t('Virgin'), - 'Deviant' => DI::l10n()->t('Deviant'), - 'Fetish' => DI::l10n()->t('Fetish'), - 'Oodles' => DI::l10n()->t('Oodles'), - 'Nonsexual' => DI::l10n()->t('Nonsexual'), - ]; - - Hook::callAll('sexpref_selector', $select); - - $o .= "'; - return $o; - } - - /** - * @param string $current optional, default empty - * @return string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ - public static function maritalStatus($current = "") - { - $o = ''; - $select = [ - '' => DI::l10n()->t('No answer'), - 'Single' => DI::l10n()->t('Single'), - 'Lonely' => DI::l10n()->t('Lonely'), - 'In a relation' => DI::l10n()->t('In a relation'), - 'Has crush' => DI::l10n()->t('Has crush'), - 'Infatuated' => DI::l10n()->t('Infatuated'), - 'Dating' => DI::l10n()->t('Dating'), - 'Unfaithful' => DI::l10n()->t('Unfaithful'), - 'Sex Addict' => DI::l10n()->t('Sex Addict'), - 'Friends' => DI::l10n()->t('Friends'), - 'Friends/Benefits' => DI::l10n()->t('Friends/Benefits'), - 'Casual' => DI::l10n()->t('Casual'), - 'Engaged' => DI::l10n()->t('Engaged'), - 'Married' => DI::l10n()->t('Married'), - 'Imaginarily married' => DI::l10n()->t('Imaginarily married'), - 'Partners' => DI::l10n()->t('Partners'), - 'Cohabiting' => DI::l10n()->t('Cohabiting'), - 'Common law' => DI::l10n()->t('Common law'), - 'Happy' => DI::l10n()->t('Happy'), - 'Not looking' => DI::l10n()->t('Not looking'), - 'Swinger' => DI::l10n()->t('Swinger'), - 'Betrayed' => DI::l10n()->t('Betrayed'), - 'Separated' => DI::l10n()->t('Separated'), - 'Unstable' => DI::l10n()->t('Unstable'), - 'Divorced' => DI::l10n()->t('Divorced'), - 'Imaginarily divorced' => DI::l10n()->t('Imaginarily divorced'), - 'Widowed' => DI::l10n()->t('Widowed'), - 'Uncertain' => DI::l10n()->t('Uncertain'), - 'It\'s complicated' => DI::l10n()->t('It\'s complicated'), - 'Don\'t care' => DI::l10n()->t('Don\'t care'), - 'Ask me' => DI::l10n()->t('Ask me'), - ]; - - Hook::callAll('marital_selector', $select); - - $o .= ''; - return $o; - } }