diff --git a/database.sql b/database.sql index ab8c300a8..891b830a4 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2022.12-dev (Giant Rhubarb) --- DB_UPDATE_VERSION 1486 +-- DB_UPDATE_VERSION 1487 -- ------------------------------------------ @@ -1577,6 +1577,7 @@ CREATE TABLE IF NOT EXISTS `profile` ( `education` text COMMENT 'Deprecated', `contact` text COMMENT 'Deprecated', `homepage` varchar(255) NOT NULL DEFAULT '' COMMENT '', + `homepage_verified` boolean NOT NULL DEFAULT '0' COMMENT 'was the homepage verified by a rel-me link back to the profile', `xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT 'XMPP address', `matrix` varchar(255) NOT NULL DEFAULT '' COMMENT 'Matrix address', `photo` varbinary(383) NOT NULL DEFAULT '' COMMENT '', @@ -2674,6 +2675,7 @@ CREATE VIEW `owner-view` AS SELECT `profile`.`postal-code` AS `postal-code`, `profile`.`country-name` AS `country-name`, `profile`.`homepage` AS `homepage`, + `profile`.`homepage_verified` AS `homepage_verified`, `profile`.`dob` AS `dob` FROM `user` INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self` diff --git a/doc/database/db_profile.md b/doc/database/db_profile.md index c180332c5..ec47b94ec 100644 --- a/doc/database/db_profile.md +++ b/doc/database/db_profile.md @@ -6,51 +6,52 @@ user profiles data Fields ------ -| Field | Description | Type | Null | Key | Default | Extra | -| ------------ | --------------------------------------------- | ------------------ | ---- | --- | ---------- | -------------- | -| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | -| uid | Owner User id | mediumint unsigned | NO | | 0 | | -| profile-name | Deprecated | varchar(255) | YES | | NULL | | -| is-default | Deprecated | boolean | YES | | NULL | | -| hide-friends | Hide friend list from viewers of this profile | boolean | NO | | 0 | | -| name | | varchar(255) | NO | | | | -| pdesc | Deprecated | varchar(255) | YES | | NULL | | -| dob | Day of birth | varchar(32) | NO | | 0000-00-00 | | -| address | | varchar(255) | NO | | | | -| locality | | varchar(255) | NO | | | | -| region | | varchar(255) | NO | | | | -| postal-code | | varchar(32) | NO | | | | -| country-name | | varchar(255) | NO | | | | -| hometown | Deprecated | varchar(255) | YES | | NULL | | -| gender | Deprecated | varchar(32) | YES | | NULL | | -| marital | Deprecated | varchar(255) | YES | | NULL | | -| with | Deprecated | text | YES | | NULL | | -| howlong | Deprecated | datetime | YES | | NULL | | -| sexual | Deprecated | varchar(255) | YES | | NULL | | -| politic | Deprecated | varchar(255) | YES | | NULL | | -| religion | Deprecated | varchar(255) | YES | | NULL | | -| pub_keywords | | text | YES | | NULL | | -| prv_keywords | | text | YES | | NULL | | -| likes | Deprecated | text | YES | | NULL | | -| dislikes | Deprecated | text | YES | | NULL | | -| about | Profile description | text | YES | | NULL | | -| summary | Deprecated | varchar(255) | YES | | NULL | | -| music | Deprecated | text | YES | | NULL | | -| book | Deprecated | text | YES | | NULL | | -| tv | Deprecated | text | YES | | NULL | | -| film | Deprecated | text | YES | | NULL | | -| interest | Deprecated | text | YES | | NULL | | -| romance | Deprecated | text | YES | | NULL | | -| work | Deprecated | text | YES | | NULL | | -| education | Deprecated | text | YES | | NULL | | -| contact | Deprecated | text | YES | | NULL | | -| homepage | | varchar(255) | NO | | | | -| xmpp | XMPP address | varchar(255) | NO | | | | -| matrix | Matrix address | varchar(255) | NO | | | | -| photo | | varbinary(383) | NO | | | | -| thumb | | varbinary(383) | NO | | | | -| publish | publish default profile in local directory | boolean | NO | | 0 | | -| net-publish | publish profile in global directory | boolean | NO | | 0 | | +| Field | Description | Type | Null | Key | Default | Extra | +| ----------------- | -------------------------------------------------------------- | ------------------ | ---- | --- | ---------- | -------------- | +| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | +| uid | Owner User id | mediumint unsigned | NO | | 0 | | +| profile-name | Deprecated | varchar(255) | YES | | NULL | | +| is-default | Deprecated | boolean | YES | | NULL | | +| hide-friends | Hide friend list from viewers of this profile | boolean | NO | | 0 | | +| name | | varchar(255) | NO | | | | +| pdesc | Deprecated | varchar(255) | YES | | NULL | | +| dob | Day of birth | varchar(32) | NO | | 0000-00-00 | | +| address | | varchar(255) | NO | | | | +| locality | | varchar(255) | NO | | | | +| region | | varchar(255) | NO | | | | +| postal-code | | varchar(32) | NO | | | | +| country-name | | varchar(255) | NO | | | | +| hometown | Deprecated | varchar(255) | YES | | NULL | | +| gender | Deprecated | varchar(32) | YES | | NULL | | +| marital | Deprecated | varchar(255) | YES | | NULL | | +| with | Deprecated | text | YES | | NULL | | +| howlong | Deprecated | datetime | YES | | NULL | | +| sexual | Deprecated | varchar(255) | YES | | NULL | | +| politic | Deprecated | varchar(255) | YES | | NULL | | +| religion | Deprecated | varchar(255) | YES | | NULL | | +| pub_keywords | | text | YES | | NULL | | +| prv_keywords | | text | YES | | NULL | | +| likes | Deprecated | text | YES | | NULL | | +| dislikes | Deprecated | text | YES | | NULL | | +| about | Profile description | text | YES | | NULL | | +| summary | Deprecated | varchar(255) | YES | | NULL | | +| music | Deprecated | text | YES | | NULL | | +| book | Deprecated | text | YES | | NULL | | +| tv | Deprecated | text | YES | | NULL | | +| film | Deprecated | text | YES | | NULL | | +| interest | Deprecated | text | YES | | NULL | | +| romance | Deprecated | text | YES | | NULL | | +| work | Deprecated | text | YES | | NULL | | +| education | Deprecated | text | YES | | NULL | | +| contact | Deprecated | text | YES | | NULL | | +| homepage | | varchar(255) | NO | | | | +| homepage_verified | was the homepage verified by a rel-me link back to the profile | boolean | NO | | 0 | | +| xmpp | XMPP address | varchar(255) | NO | | | | +| matrix | Matrix address | varchar(255) | NO | | | | +| photo | | varbinary(383) | NO | | | | +| thumb | | varbinary(383) | NO | | | | +| publish | publish default profile in local directory | boolean | NO | | 0 | | +| net-publish | publish profile in global directory | boolean | NO | | 0 | | Indexes ------------ diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 14fe613c1..52f61efd4 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -38,6 +38,7 @@ use Friendica\Module\Security\Login; use Friendica\Network\HTTPException; use Friendica\Util\DateTimeFormat; use Friendica\Util\Temporal; +use Friendica\Core\Worker; class Index extends BaseSettings { @@ -127,6 +128,8 @@ class Index extends BaseSettings DI::userSession()->getLocalUserId() ); + Worker::add(Worker::PRIORITY_MEDIUM, 'CheckRelMeProfileLink', DI::userSession()->getLocalUserId()); + if (!$result) { DI::sysmsg()->addNotice(DI::l10n()->t('Profile couldn\'t be updated.')); return; @@ -210,6 +213,12 @@ class Index extends BaseSettings $personal_account = ($profile['account-type'] != User::ACCOUNT_TYPE_COMMUNITY); + if ($profile['homepage_verified']) { + $homepage_help_text = DI::l10n()->t('The homepage is verified. A rel="me" link back to your Friendica profile page was found on the homepage.'); + } else { + $homepage_help_text = DI::l10n()->t('To verify your homepage, add a rel="me" link to it, pointing to your profile URL (%s).', $profile['url']); + } + $tpl = Renderer::getMarkupTemplate('settings/profile/index.tpl'); $o .= Renderer::replaceMacros($tpl, [ '$personal_account' => $personal_account, @@ -245,7 +254,7 @@ class Index extends BaseSettings '$age' => ((intval($profile['dob'])) ? '(' . DI::l10n()->t('Age: ') . DI::l10n()->tt('%d year old', '%d years old', Temporal::getAgeByTimezone($profile['dob'], $profile['timezone'])) . ')' : ''), '$xmpp' => ['xmpp', DI::l10n()->t('XMPP (Jabber) address:'), $profile['xmpp'], DI::l10n()->t('The XMPP address will be published so that people can follow you there.')], '$matrix' => ['matrix', DI::l10n()->t('Matrix (Element) address:'), $profile['matrix'], DI::l10n()->t('The Matrix address will be published so that people can follow you there.')], - '$homepage' => ['homepage', DI::l10n()->t('Homepage URL:'), $profile['homepage']], + '$homepage' => ['homepage', DI::l10n()->t('Homepage URL:'), $profile['homepage'], $homepage_help_text], '$pub_keywords' => ['pub_keywords', DI::l10n()->t('Public Keywords:'), $profile['pub_keywords'], DI::l10n()->t('(Used for suggesting potential friends, can be seen by others)')], '$prv_keywords' => ['prv_keywords', DI::l10n()->t('Private Keywords:'), $profile['prv_keywords'], DI::l10n()->t('(Used for searching profiles, never shown to others)')], '$custom_fields_description' => DI::l10n()->t("

Custom fields appear on your profile page.

diff --git a/src/Worker/CheckRelMeProfileLink.php b/src/Worker/CheckRelMeProfileLink.php new file mode 100644 index 000000000..e5727cc83 --- /dev/null +++ b/src/Worker/CheckRelMeProfileLink.php @@ -0,0 +1,98 @@ +. + * + */ + +namespace Friendica\Worker; + +use DOMDocument; +use Friendica\DI; +use Friendica\Core\Logger; +use Friendica\Model\Profile; +use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; +use Friendica\Util\Network; +use Friendica\Util\Strings; + +/* This class is used to verify the homepage link of a user profile. + * To do so, we look for rel="me" links in the given homepage, if one + * of them points to the Friendica profile of the user, a verification + * mark is added to the link. + * + * To reverse the process, if a homepage link is given, it is displayed + * with the rel="me" attribute as well, so that 3rd party tools can + * verify the connection between the two pages. + * + * This task will be performed by the worker on a daily basis _and_ every + * time the user changes their homepage link. In the first case the priority + * of the task is set to LOW, with the second case it is MEDIUM. + * + * rel-me microformat docs https://microformats.org/wiki/rel-me + */ +class CheckRelMeProfileLink +{ + /* Cheks the homepage of a profile for a rel-me link back to the user profile + * + * @param $uid (int) the UID of the user + */ + public static function execute(int $uid) + { + Logger::notice('Verifying the homepage', ['uid' => $uid]); + Profile::update(['homepage_verified' => false], $uid); + $homepageUrlVerified = false; + $owner = User::getOwnerDataById($uid); + if (!empty($owner['homepage'])) { + $xrd_timeout = DI::config()->get('system', 'xrd_timeout'); + $curlResult = DI::httpClient()->get($owner['homepage'], $accept_content = HttpClientAccept::HTML, [HttpClientOptions::TIMEOUT => $xrd_timeout]); + if ($curlResult->isSuccess()) { + $content = $curlResult->getBody(); + if (!$content) { + Logger::notice('Empty body of the fetched homepage link). Cannot verify the relation to profile of UID %s.', ['uid' => $uid, 'owner homepage' => $owner['homepage']]); + } else { + $doc = new DOMDocument(); + $doc->loadHTML($content); + if (!$doc) { + Logger::notice('Could not parse the content'); + } else { + foreach ($doc->getElementsByTagName('a') as $link) { + $rel = $link->getAttribute('rel'); + if ($rel == 'me') { + $href = $link->getAttribute('href'); + if (!$homepageUrlVerified && Network::isValidHttpUrl($href)) { + $homepageUrlVerified = Strings::compareLink($owner['url'], $href); + } + } + } + } + if ($homepageUrlVerified) { + Profile::update(['homepage_verified' => true], $uid); + Logger::notice('Homepage URL verified', ['uid' => $uid, 'owner homepage' => $owner['homepage']]); + } else { + Logger::notice('Homepage URL could not be verified', ['uid' => $uid, 'owner homepage' => $owner['homepage']]); + } + } + } else { + Logger::notice('Could not cURL the homepage URL', ['owner homepage' => $owner['homepage']]); + } + } else { + Logger::notice('The user has no homepage link.', ['uid' => $uid]); + } + } +} diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 21d2f8a20..e0ef134a2 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -27,6 +27,7 @@ use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Tag; +use Friendica\Model\User; use Friendica\Protocol\ActivityPub\Queue; use Friendica\Protocol\Relay; @@ -85,6 +86,7 @@ class Cron // Hourly cron calls if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) { + // Update trending tags cache for the community page Tag::setLocalTrendingHashtags(24, 20); Tag::setGlobalTrendingHashtags(24, 20); @@ -132,6 +134,10 @@ class Cron Worker::add(Worker::PRIORITY_LOW, 'OptimizeTables'); } + foreach (User::getList(1, PHP_INT_MAX, 'active') as $user) { + Worker::add(Worker::PRIORITY_LOW, 'CheckRelMeProfileLink', $user['uid']); + } + // Resubscribe to relay servers Relay::reSubscribe(); diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 262d7d307..79b1539f8 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -55,7 +55,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1486); + define('DB_UPDATE_VERSION', 1487); } return [ @@ -1580,6 +1580,7 @@ return [ "education" => ["type" => "text", "comment" => "Deprecated"], "contact" => ["type" => "text", "comment" => "Deprecated"], "homepage" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], + "homepage_verified" => ["type" => "boolean", "not null" => 1, "default" => "0", "comment" => "was the homepage verified by a rel-me link back to the profile"], "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "XMPP address"], "matrix" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Matrix address"], "photo" => ["type" => "varbinary(383)", "not null" => "1", "default" => "", "comment" => ""], diff --git a/static/dbview.config.php b/static/dbview.config.php index c12cccb4c..925f82462 100644 --- a/static/dbview.config.php +++ b/static/dbview.config.php @@ -919,6 +919,7 @@ "postal-code" => ["profile", "postal-code"], "country-name" => ["profile", "country-name"], "homepage" => ["profile", "homepage"], + "homepage_verified" => ["profile", "homepage_verified"], "dob" => ["profile", "dob"], ], "query" => "FROM `user` diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 1ec18f46b..7fcf6e217 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2022.12-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-05 19:31-0400\n" +"POT-Creation-Date: 2022-11-07 11:21+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -369,7 +369,7 @@ msgid "Event Finishes:" msgstr "" #: mod/events.php:503 src/Module/Profile/Profile.php:171 -#: src/Module/Settings/Profile/Index.php:238 +#: src/Module/Settings/Profile/Index.php:247 msgid "Description:" msgstr "" @@ -401,7 +401,7 @@ msgstr "" #: src/Module/Install.php:252 src/Module/Install.php:294 #: src/Module/Install.php:331 src/Module/Invite.php:178 #: src/Module/Item/Compose.php:189 src/Module/Profile/Profile.php:246 -#: src/Module/Profile/UnkMail.php:156 src/Module/Settings/Profile/Index.php:222 +#: src/Module/Profile/UnkMail.php:156 src/Module/Settings/Profile/Index.php:231 #: src/Object/Post.php:986 view/theme/duepuntozero/config.php:85 #: view/theme/frio/config.php:171 view/theme/quattro/config.php:87 #: view/theme/vier/config.php:135 @@ -2102,7 +2102,7 @@ msgstr "" #: src/Content/Item.php:389 src/Content/Item.php:407 src/Model/Contact.php:1137 #: src/Model/Contact.php:1191 src/Model/Contact.php:1200 -#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:225 +#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:234 msgid "View Profile" msgstr "" @@ -2430,39 +2430,39 @@ msgstr "" msgid "last" msgstr "" -#: src/Content/Text/BBCode.php:1002 src/Content/Text/BBCode.php:1863 -#: src/Content/Text/BBCode.php:1864 +#: src/Content/Text/BBCode.php:1003 src/Content/Text/BBCode.php:1865 +#: src/Content/Text/BBCode.php:1866 msgid "Image/photo" msgstr "" -#: src/Content/Text/BBCode.php:1218 +#: src/Content/Text/BBCode.php:1220 #, php-format msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1243 src/Model/Item.php:3471 -#: src/Model/Item.php:3477 src/Model/Item.php:3478 +#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3482 +#: src/Model/Item.php:3488 src/Model/Item.php:3489 msgid "Link to source" msgstr "" -#: src/Content/Text/BBCode.php:1781 src/Content/Text/HTML.php:940 +#: src/Content/Text/BBCode.php:1783 src/Content/Text/HTML.php:940 msgid "Click to open/close" msgstr "" -#: src/Content/Text/BBCode.php:1812 +#: src/Content/Text/BBCode.php:1814 msgid "$1 wrote:" msgstr "" -#: src/Content/Text/BBCode.php:1868 src/Content/Text/BBCode.php:1869 +#: src/Content/Text/BBCode.php:1870 src/Content/Text/BBCode.php:1871 msgid "Encrypted content" msgstr "" -#: src/Content/Text/BBCode.php:2092 +#: src/Content/Text/BBCode.php:2098 msgid "Invalid source protocol" msgstr "" -#: src/Content/Text/BBCode.php:2107 +#: src/Content/Text/BBCode.php:2113 msgid "Invalid link protocol" msgstr "" @@ -3577,44 +3577,44 @@ msgstr "" msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3383 +#: src/Model/Item.php:3394 msgid "bytes" msgstr "" -#: src/Model/Item.php:3414 +#: src/Model/Item.php:3425 #, php-format msgid "%2$s (%3$d%%, %1$d vote)" msgid_plural "%2$s (%3$d%%, %1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3416 +#: src/Model/Item.php:3427 #, php-format msgid "%2$s (%1$d vote)" msgid_plural "%2$s (%1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3421 +#: src/Model/Item.php:3432 #, php-format msgid "%d voter. Poll end: %s" msgid_plural "%d voters. Poll end: %s" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3423 +#: src/Model/Item.php:3434 #, php-format msgid "%d voter." msgid_plural "%d voters." msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3425 +#: src/Model/Item.php:3436 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3459 src/Model/Item.php:3460 +#: src/Model/Item.php:3470 src/Model/Item.php:3471 msgid "View on separate page" msgstr "" @@ -7206,7 +7206,7 @@ msgid "Sort by post creation date" msgstr "" #: src/Module/Conversation/Network.php:280 -#: src/Module/Settings/Profile/Index.php:227 +#: src/Module/Settings/Profile/Index.php:236 msgid "Personal" msgstr "" @@ -7430,7 +7430,7 @@ msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" #: src/Module/Debug/Feed.php:52 src/Module/Filer/SaveTag.php:47 -#: src/Module/Settings/Profile/Index.php:141 +#: src/Module/Settings/Profile/Index.php:144 msgid "You must be logged in to use this module" msgstr "" @@ -8289,12 +8289,12 @@ msgstr "" msgid "Birthday:" msgstr "" -#: src/Module/Profile/Profile.php:166 src/Module/Settings/Profile/Index.php:245 +#: src/Module/Profile/Profile.php:166 src/Module/Settings/Profile/Index.php:254 #: src/Util/Temporal.php:168 msgid "Age: " msgstr "" -#: src/Module/Profile/Profile.php:166 src/Module/Settings/Profile/Index.php:245 +#: src/Module/Profile/Profile.php:166 src/Module/Settings/Profile/Index.php:254 #: src/Util/Temporal.php:168 #, php-format msgid "%d year old" @@ -9514,133 +9514,146 @@ msgstr "" msgid "Beginning of week:" msgstr "" -#: src/Module/Settings/Profile/Index.php:83 +#: src/Module/Settings/Profile/Index.php:84 msgid "Profile Name is required." msgstr "" -#: src/Module/Settings/Profile/Index.php:131 +#: src/Module/Settings/Profile/Index.php:134 msgid "Profile couldn't be updated." msgstr "" -#: src/Module/Settings/Profile/Index.php:172 -#: src/Module/Settings/Profile/Index.php:192 +#: src/Module/Settings/Profile/Index.php:175 +#: src/Module/Settings/Profile/Index.php:195 msgid "Label:" msgstr "" -#: src/Module/Settings/Profile/Index.php:173 -#: src/Module/Settings/Profile/Index.php:193 +#: src/Module/Settings/Profile/Index.php:176 +#: src/Module/Settings/Profile/Index.php:196 msgid "Value:" msgstr "" -#: src/Module/Settings/Profile/Index.php:183 -#: src/Module/Settings/Profile/Index.php:203 +#: src/Module/Settings/Profile/Index.php:186 +#: src/Module/Settings/Profile/Index.php:206 msgid "Field Permissions" msgstr "" -#: src/Module/Settings/Profile/Index.php:184 -#: src/Module/Settings/Profile/Index.php:204 +#: src/Module/Settings/Profile/Index.php:187 +#: src/Module/Settings/Profile/Index.php:207 msgid "(click to open/close)" msgstr "" -#: src/Module/Settings/Profile/Index.php:190 +#: src/Module/Settings/Profile/Index.php:193 msgid "Add a new profile field" msgstr "" -#: src/Module/Settings/Profile/Index.php:220 -msgid "Profile Actions" +#: src/Module/Settings/Profile/Index.php:217 +msgid "" +"The homepage is verified. A rel=\"me\" link back to your Friendica profile " +"page was found on the homepage." msgstr "" -#: src/Module/Settings/Profile/Index.php:221 -msgid "Edit Profile Details" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:223 -msgid "Change Profile Photo" -msgstr "" - -#: src/Module/Settings/Profile/Index.php:228 -msgid "Profile picture" +#: src/Module/Settings/Profile/Index.php:219 +#, php-format +msgid "" +"To verify your homepage, add a rel=\"me\" link to it, pointing to your " +"profile URL (%s)." msgstr "" #: src/Module/Settings/Profile/Index.php:229 +msgid "Profile Actions" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:230 +msgid "Edit Profile Details" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:232 +msgid "Change Profile Photo" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:237 +msgid "Profile picture" +msgstr "" + +#: src/Module/Settings/Profile/Index.php:238 msgid "Location" msgstr "" -#: src/Module/Settings/Profile/Index.php:230 src/Util/Temporal.php:95 +#: src/Module/Settings/Profile/Index.php:239 src/Util/Temporal.php:95 #: src/Util/Temporal.php:97 msgid "Miscellaneous" msgstr "" -#: src/Module/Settings/Profile/Index.php:231 +#: src/Module/Settings/Profile/Index.php:240 msgid "Custom Profile Fields" msgstr "" -#: src/Module/Settings/Profile/Index.php:233 src/Module/Welcome.php:58 +#: src/Module/Settings/Profile/Index.php:242 src/Module/Welcome.php:58 msgid "Upload Profile Photo" msgstr "" -#: src/Module/Settings/Profile/Index.php:237 +#: src/Module/Settings/Profile/Index.php:246 msgid "Display name:" msgstr "" -#: src/Module/Settings/Profile/Index.php:240 +#: src/Module/Settings/Profile/Index.php:249 msgid "Street Address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:241 +#: src/Module/Settings/Profile/Index.php:250 msgid "Locality/City:" msgstr "" -#: src/Module/Settings/Profile/Index.php:242 +#: src/Module/Settings/Profile/Index.php:251 msgid "Region/State:" msgstr "" -#: src/Module/Settings/Profile/Index.php:243 +#: src/Module/Settings/Profile/Index.php:252 msgid "Postal/Zip Code:" msgstr "" -#: src/Module/Settings/Profile/Index.php:244 +#: src/Module/Settings/Profile/Index.php:253 msgid "Country:" msgstr "" -#: src/Module/Settings/Profile/Index.php:246 +#: src/Module/Settings/Profile/Index.php:255 msgid "XMPP (Jabber) address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:246 +#: src/Module/Settings/Profile/Index.php:255 msgid "The XMPP address will be published so that people can follow you there." msgstr "" -#: src/Module/Settings/Profile/Index.php:247 +#: src/Module/Settings/Profile/Index.php:256 msgid "Matrix (Element) address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:247 +#: src/Module/Settings/Profile/Index.php:256 msgid "" "The Matrix address will be published so that people can follow you there." msgstr "" -#: src/Module/Settings/Profile/Index.php:248 +#: src/Module/Settings/Profile/Index.php:257 msgid "Homepage URL:" msgstr "" -#: src/Module/Settings/Profile/Index.php:249 +#: src/Module/Settings/Profile/Index.php:258 msgid "Public Keywords:" msgstr "" -#: src/Module/Settings/Profile/Index.php:249 +#: src/Module/Settings/Profile/Index.php:258 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" -#: src/Module/Settings/Profile/Index.php:250 +#: src/Module/Settings/Profile/Index.php:259 msgid "Private Keywords:" msgstr "" -#: src/Module/Settings/Profile/Index.php:250 +#: src/Module/Settings/Profile/Index.php:259 msgid "(Used for searching profiles, never shown to others)" msgstr "" -#: src/Module/Settings/Profile/Index.php:251 +#: src/Module/Settings/Profile/Index.php:260 #, php-format msgid "" "

Custom fields appear on your profile page.

\n" diff --git a/view/templates/profile/vcard.tpl b/view/templates/profile/vcard.tpl index fed6fb251..a304a9a1f 100644 --- a/view/templates/profile/vcard.tpl +++ b/view/templates/profile/vcard.tpl @@ -39,7 +39,7 @@ {{if $updated}}{{/if}} - {{if $homepage}}
{{$homepage}}
{{$profile.homepage}}
{{/if}} + {{if $homepage}}
{{$homepage}}
{{$profile.homepage}}{{if $profile.homepage_verified}} ✔{{/if}}
{{/if}} {{if $about}}
{{$about}}
{{$profile.about nofilter}}
{{/if}} diff --git a/view/templates/settings/profile/index.tpl b/view/templates/settings/profile/index.tpl index d888e0910..69812c5a8 100644 --- a/view/templates/settings/profile/index.tpl +++ b/view/templates/settings/profile/index.tpl @@ -73,6 +73,7 @@ +
{{$homepage.3}}
diff --git a/view/theme/frio/templates/profile/vcard.tpl b/view/theme/frio/templates/profile/vcard.tpl index b208eca88..35e3c8419 100644 --- a/view/theme/frio/templates/profile/vcard.tpl +++ b/view/theme/frio/templates/profile/vcard.tpl @@ -108,7 +108,7 @@ {{if $homepage}} {{/if}} diff --git a/view/theme/quattro/templates/profile/vcard.tpl b/view/theme/quattro/templates/profile/vcard.tpl index e66334dc2..86d4889c8 100644 --- a/view/theme/quattro/templates/profile/vcard.tpl +++ b/view/theme/quattro/templates/profile/vcard.tpl @@ -53,7 +53,7 @@ {{if $homepage}}
{{$homepage}}
-
{{$profile.homepage}}
+
{{$profile.homepage}}{{if $profile.homepage_verified}} ✔{{/if}}
{{/if}} diff --git a/view/theme/vier/templates/profile/vcard.tpl b/view/theme/vier/templates/profile/vcard.tpl index 01e75580d..0a9348015 100644 --- a/view/theme/vier/templates/profile/vcard.tpl +++ b/view/theme/vier/templates/profile/vcard.tpl @@ -45,7 +45,7 @@ {{if $updated}}{{/if}} - {{if $homepage}}
{{$homepage}}
{{$profile.homepage}}
{{/if}} + {{if $homepage}}
{{$homepage}}
{{$profile.homepage}}{{if $profile.homepage_verified}} ✔{{/if}}
{{/if}} {{if $about}}
{{$about}}
{{$profile.about nofilter}}
{{/if}} diff --git a/view/theme/vier/templates/settings/profile/index.tpl b/view/theme/vier/templates/settings/profile/index.tpl index 842b6aaef..f52de3703 100644 --- a/view/theme/vier/templates/settings/profile/index.tpl +++ b/view/theme/vier/templates/settings/profile/index.tpl @@ -78,6 +78,7 @@
+
{{$homepage.3}}