Merge pull request #12109 from tobiasd/verify-homepage-relme
Verify homepage by checking for a rel-me link back to the user profile
This commit is contained in:
commit
6cb6841866
14 changed files with 252 additions and 119 deletions
|
@ -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`
|
||||
|
|
|
@ -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
|
||||
------------
|
||||
|
|
|
@ -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("<p>Custom fields appear on <a href=\"%s\">your profile page</a>.</p>
|
||||
|
|
98
src/Worker/CheckRelMeProfileLink.php
Normal file
98
src/Worker/CheckRelMeProfileLink.php
Normal file
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022, the Friendica project
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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" => ""],
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %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 ""
|
||||
"<p>Custom fields appear on <a href=\"%s\">your profile page</a>.</p>\n"
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
{{if $updated}}<div class="updated" style="display:none;">{{$updated}}</div>{{/if}}
|
||||
|
||||
{{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url u-url"><a href="{{$profile.homepage}}" rel="me" target="_blank" rel="noopener noreferrer">{{$profile.homepage}}</a></dd></dl>{{/if}}
|
||||
{{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url u-url"><a href="{{$profile.homepage}}" rel="me" target="_blank" rel="noopener noreferrer">{{$profile.homepage}}</a>{{if $profile.homepage_verified}} ✔{{/if}}</dd></dl>{{/if}}
|
||||
|
||||
{{if $about}}<dl class="about"><dt class="about-label">{{$about}}</dt><dd class="x-network" dir="auto">{{$profile.about nofilter}}</dd></dl>{{/if}}
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
<label id="profile-edit-homepage-label" for="profile-edit-homepage">{{$homepage.1}} </label>
|
||||
<input type="url" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage.2}}"/>
|
||||
</div>
|
||||
<div id="profile-edit-homepage-desc">{{$homepage.3}}</div>
|
||||
<div id="profile-edit-homepage-end"></div>
|
||||
<div id="profile-edit-xmpp-wrapper">
|
||||
<label id="profile-edit-xmpp-label" for="profile-edit-xmpp">{{$xmpp.1}} </label>
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
{{if $homepage}}
|
||||
<div class="homepage detail">
|
||||
<span class="homepage-label icon"><i class="fa fa-external-link"></i></span>
|
||||
<span class="homepage-url u-url"><a href="{{$profile.homepage}}" rel="me" target="_blank" rel="noopener noreferrer">{{include file="sub/punct_wrap.tpl" text=$profile.homepage}}</a></span>
|
||||
<span class="homepage-url u-url"><a href="{{$profile.homepage}}" rel="me" target="_blank" rel="noopener noreferrer">{{include file="sub/punct_wrap.tpl" text=$profile.homepage}}</a>{{if $profile.homepage_verified}} ✔{{/if}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
{{if $homepage}}
|
||||
<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt>
|
||||
<dd class="homepage-url"><a href="{{$profile.homepage}}" class="u-url" rel="me" target="external-link">{{$profile.homepage}}</a></dd>
|
||||
<dd class="homepage-url"><a href="{{$profile.homepage}}" class="u-url" rel="me" target="external-link">{{$profile.homepage}}</a>{{if $profile.homepage_verified}} ✔{{/if}}</dd>
|
||||
</dl>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
{{if $updated}}<div class="updated" style="display:none;">{{$updated}}</div>{{/if}}
|
||||
|
||||
{{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url"><a href="{{$profile.homepage}}" class="u-url" rel="me" target="_blank" rel="noopener noreferrer">{{$profile.homepage}}</a></dd></dl>{{/if}}
|
||||
{{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url"><a href="{{$profile.homepage}}" class="u-url" rel="me" target="_blank" rel="noopener noreferrer">{{$profile.homepage}}</a>{{if $profile.homepage_verified}} ✔{{/if}}</dd></dl>{{/if}}
|
||||
|
||||
{{if $about}}<dl class="about"><dt class="about-label">{{$about}}</dt><dd class="x-network" dir="auto">{{$profile.about nofilter}}</dd></dl>{{/if}}
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
<label id="profile-edit-homepage-label" for="profile-edit-homepage">{{$homepage.1}} </label>
|
||||
<input type="text" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage.2}}"/>
|
||||
</div>
|
||||
<div id="profile-edit-homepage-desc">{{$homepage.3}}</div>
|
||||
<div id="profile-edit-homepage-end"></div>
|
||||
|
||||
<div id="profile-edit-dob-wrapper">
|
||||
|
|
Loading…
Reference in a new issue