Fixes the score calculation concerning the relation-cid / cid interaction

This commit is contained in:
Michael 2023-09-07 12:34:46 +00:00
parent 41f3cbf727
commit c1895e7f85
7 changed files with 200 additions and 156 deletions

View file

@ -510,9 +510,9 @@ CREATE TABLE IF NOT EXISTS `config` (
CREATE TABLE IF NOT EXISTS `contact-relation` ( CREATE TABLE IF NOT EXISTS `contact-relation` (
`cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact the related contact had interacted with', `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact the related contact had interacted with',
`relation-cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'related contact who had interacted with the contact', `relation-cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'related contact who had interacted with the contact',
`last-interaction` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last interaction', `last-interaction` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last interaction by relation-cid on cid',
`follow-updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last update of the contact relationship', `follow-updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last update of the contact relationship',
`follows` boolean NOT NULL DEFAULT '0' COMMENT '', `follows` boolean NOT NULL DEFAULT '0' COMMENT 'if true, relation-cid follows cid',
`score` smallint unsigned COMMENT 'score for interactions of cid on relation-cid', `score` smallint unsigned COMMENT 'score for interactions of cid on relation-cid',
`relation-score` smallint unsigned COMMENT 'score for interactions of relation-cid on cid', `relation-score` smallint unsigned COMMENT 'score for interactions of relation-cid on cid',
`thread-score` smallint unsigned COMMENT 'score for interactions of cid on threads of relation-cid', `thread-score` smallint unsigned COMMENT 'score for interactions of cid on threads of relation-cid',

View file

@ -10,9 +10,9 @@ Fields
| --------------------- | -------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- | | --------------------- | -------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
| cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | | | cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | |
| relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | | | relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | |
| last-interaction | Date of the last interaction | datetime | NO | | 0001-01-01 00:00:00 | | | last-interaction | Date of the last interaction by relation-cid on cid | datetime | NO | | 0001-01-01 00:00:00 | |
| follow-updated | Date of the last update of the contact relationship | datetime | NO | | 0001-01-01 00:00:00 | | | follow-updated | Date of the last update of the contact relationship | datetime | NO | | 0001-01-01 00:00:00 | |
| follows | | boolean | NO | | 0 | | | follows | if true, relation-cid follows cid | boolean | NO | | 0 | |
| score | score for interactions of cid on relation-cid | smallint unsigned | YES | | NULL | | | score | score for interactions of cid on relation-cid | smallint unsigned | YES | | NULL | |
| relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | | | relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | |
| thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | | | thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | |

View file

@ -248,6 +248,10 @@ class Relation
{ {
$contact_discovery = DI::config()->get('system', 'contact_discovery'); $contact_discovery = DI::config()->get('system', 'contact_discovery');
if (Contact::isLocal($url)) {
return true;
}
if ($contact_discovery == self::DISCOVERY_NONE) { if ($contact_discovery == self::DISCOVERY_NONE) {
return false; return false;
} }
@ -790,57 +794,59 @@ class Relation
$view = Verb::getID(Activity::VIEW); $view = Verb::getID(Activity::VIEW);
$read = Verb::getID(Activity::READ); $read = Verb::getID(Activity::READ);
DBA::update('contact-relation', ['score' => 0, 'relation-score' => 0, 'thread-score' => 0, 'relation-thread-score' => 0], ['cid' => $contact_id]); DBA::update('contact-relation', ['score' => 0, 'relation-score' => 0, 'thread-score' => 0, 'relation-thread-score' => 0], ['relation-cid' => $contact_id]);
$total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)", $total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
Logger::debug('Calculate score', ['uid' => $uid, 'total' => $total['activity']]); Logger::debug('Calculate relation-score', ['uid' => $uid, 'total' => $total['activity']]);
$interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`", $interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity`, EXISTS(SELECT `pid` FROM `account-user-view` WHERE `pid` = `post`.`author-id` AND `uid` = ? AND `rel` IN (?, ?)) AS `follows`
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`",
$uid, Contact::SHARING, Contact::FRIEND, $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
while ($interaction = DBA::fetch($interactions)) { while ($interaction = DBA::fetch($interactions)) {
$score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535); $score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535);
DBA::update('contact-relation', ['score' => $score], ['cid' => $contact_id, 'relation-cid' => $interaction['author-id']]); DBA::update('contact-relation', ['relation-score' => $score, 'follows' => $interaction['follows']], ['relation-cid' => $contact_id, 'cid' => $interaction['author-id']]);
} }
DBA::close($interactions); DBA::close($interactions);
$total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)", $total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
Logger::debug('Calculate thread-score', ['uid' => $uid, 'total' => $total['activity']]); Logger::debug('Calculate relation-thread-score', ['uid' => $uid, 'total' => $total['activity']]);
$interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`", $interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity`, EXISTS(SELECT `pid` FROM `account-user-view` WHERE `pid` = `post`.`author-id` AND `uid` = ? AND `rel` IN (?, ?)) AS `follows`
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); FROM `post-user` INNER JOIN `post` ON `post`.`uri-id` = `post-user`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`",
$uid, Contact::SHARING, Contact::FRIEND, $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
while ($interaction = DBA::fetch($interactions)) { while ($interaction = DBA::fetch($interactions)) {
$score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535); $score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535);
DBA::update('contact-relation', ['thread-score' => $score], ['cid' => $contact_id, 'relation-cid' => $interaction['author-id']]); DBA::update('contact-relation', ['relation-thread-score' => $score, 'follows' => !empty($interaction['follows'])], ['relation-cid' => $contact_id, 'cid' => $interaction['author-id']]);
} }
DBA::close($interactions); DBA::close($interactions);
$total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)", $total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
Logger::debug('Calculate relation-score', ['uid' => $uid, 'total' => $total['activity']]); Logger::debug('Calculate score', ['uid' => $uid, 'total' => $total['activity']]);
$interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`", $interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`thr-parent-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
while ($interaction = DBA::fetch($interactions)) { while ($interaction = DBA::fetch($interactions)) {
$score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535); $score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535);
DBA::update('contact-relation', ['relation-score' => $score], ['cid' => $contact_id, 'relation-cid' => $interaction['author-id']]); DBA::update('contact-relation', ['score' => $score], ['relation-cid' => $contact_id, 'cid' => $interaction['author-id']]);
} }
DBA::close($interactions); DBA::close($interactions);
$total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)", $total = DBA::fetchFirst("SELECT count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?)",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
Logger::debug('Calculate relation-thread-score', ['uid' => $uid, 'total' => $total['activity']]); Logger::debug('Calculate thread-score', ['uid' => $uid, 'total' => $total['activity']]);
$interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`", $interactions = DBA::p("SELECT `post`.`author-id`, count(*) AS `activity` FROM `post-user` INNER JOIN `post` ON `post-user`.`uri-id` = `post`.`parent-uri-id` WHERE `post-user`.`author-id` = ? AND `post-user`.`received` >= ? AND `post-user`.`uid` = ? AND `post`.`author-id` != ? AND NOT `post`.`vid` IN (?, ?, ?) GROUP BY `post`.`author-id`",
$contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read); $contact_id, DateTimeFormat::utc('now - ' . $days . ' day'), $uid, $contact_id, $follow, $view, $read);
while ($interaction = DBA::fetch($interactions)) { while ($interaction = DBA::fetch($interactions)) {
$score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535); $score = min((int)(($interaction['activity'] / $total['activity']) * 65535), 65535);
DBA::update('contact-relation', ['relation-thread-score' => $score], ['cid' => $contact_id, 'relation-cid' => $interaction['author-id']]); DBA::update('contact-relation', ['thread-score' => $score], ['relation-cid' => $contact_id, 'cid' => $interaction['author-id']]);
} }
DBA::close($interactions); DBA::close($interactions);
Logger::debug('Calculation - end', ['uid' => $uid]); Logger::debug('Calculation - end', ['uid' => $uid]);

View file

@ -48,6 +48,7 @@ use Friendica\Database\Database;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Navigation\SystemMessages; use Friendica\Navigation\SystemMessages;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler; use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -56,6 +57,7 @@ class Channel extends BaseModule
const WHATSHOT = 'whatshot'; const WHATSHOT = 'whatshot';
const FORYOU = 'foryou'; const FORYOU = 'foryou';
const FOLLOWERS = 'followers'; const FOLLOWERS = 'followers';
const SHARERSOFSHARERS = 'sharersofsharers';
const IMAGE = 'image'; const IMAGE = 'image';
const VIDEO = 'video'; const VIDEO = 'video';
const AUDIO = 'audio'; const AUDIO = 'audio';
@ -165,6 +167,15 @@ class Channel extends BaseModule
'accesskey' => 'f' 'accesskey' => 'f'
]; ];
$tabs[] = [
'label' => $this->l10n->t('Sharers of sharers'),
'url' => 'channel/' . self::SHARERSOFSHARERS,
'sel' => self::$content == self::SHARERSOFSHARERS ? 'active' : '',
'title' => $this->l10n->t('Posts from accounts that are followed by accounts that you follow'),
'id' => 'channel-' . self::SHARERSOFSHARERS . '-tab',
'accesskey' => 'f'
];
$tabs[] = [ $tabs[] = [
'label' => $this->l10n->t('Images'), 'label' => $this->l10n->t('Images'),
'url' => 'channel/' . self::IMAGE, 'url' => 'channel/' . self::IMAGE,
@ -279,7 +290,7 @@ class Channel extends BaseModule
self::$content = self::FORYOU; self::$content = self::FORYOU;
} }
if (!in_array(self::$content, [self::WHATSHOT, self::FORYOU, self::FOLLOWERS, self::IMAGE, self::VIDEO, self::AUDIO, self::LANGUAGE])) { if (!in_array(self::$content, [self::WHATSHOT, self::FORYOU, self::FOLLOWERS, self::SHARERSOFSHARERS, self::IMAGE, self::VIDEO, self::AUDIO, self::LANGUAGE])) {
throw new HTTPException\BadRequestException($this->l10n->t('Channel not available.')); throw new HTTPException\BadRequestException($this->l10n->t('Channel not available.'));
} }
@ -330,13 +341,24 @@ class Channel extends BaseModule
} elseif (self::$content == self::FORYOU) { } elseif (self::$content == self::FORYOU) {
$cid = Contact::getPublicIdByUserId($this->session->getLocalUserId()); $cid = Contact::getPublicIdByUserId($this->session->getLocalUserId());
$condition = ["(`owner-id` IN (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ? AND `thread-score` > ?) OR $condition = [
((`comments` >= ? OR `activities` >= ?) AND `owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?))) OR "(`owner-id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ? AND `relation-thread-score` > ?) OR
( `owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?) AND `notify_new_posts`)))", ((`comments` >= ? OR `activities` >= ?) AND `owner-id` IN (SELECT `cid` FROM `contact-relation` WHERE `follows` AND `relation-cid` = ?)) OR
$cid, $this->getMedianThreadScore($cid, 4), $this->getMedianComments(4), $this->getMedianActivities(4), $this->session->getLocalUserId(), Contact::FRIEND, Contact::SHARING, (`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?) AND `notify_new_posts`)))",
$this->session->getLocalUserId(), Contact::FRIEND, Contact::SHARING]; $cid, $this->getMedianRelationThreadScore($cid, 4), $this->getMedianComments(4), $this->getMedianActivities(4), $cid,
$this->session->getLocalUserId(), Contact::FRIEND, Contact::SHARING
];
} elseif (self::$content == self::FOLLOWERS) { } elseif (self::$content == self::FOLLOWERS) {
$condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", $this->session->getLocalUserId(), Contact::FOLLOWER]; $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", $this->session->getLocalUserId(), Contact::FOLLOWER];
} elseif (self::$content == self::SHARERSOFSHARERS) {
$cid = Contact::getPublicIdByUserId($this->session->getLocalUserId());
$condition = [
"`owner-id` IN (SELECT `cid` FROM `contact-relation` WHERE `follows` AND `last-interaction` > ?
AND `relation-cid` IN (SELECT `cid` FROM `contact-relation` WHERE `follows` AND `relation-cid` = ? AND `relation-thread-score` >= ?)
AND NOT `cid` IN (SELECT `cid` FROM `contact-relation` WHERE `follows` AND `relation-cid` = ?))",
DateTimeFormat::utc('now - 90 day'), $cid, $this->getMedianRelationThreadScore($cid, 4), $cid
];
} elseif (self::$content == self::IMAGE) { } elseif (self::$content == self::IMAGE) {
$condition = ["`media-type` & ?", 1]; $condition = ["`media-type` & ?", 1];
} elseif (self::$content == self::VIDEO) { } elseif (self::$content == self::VIDEO) {
@ -454,7 +476,7 @@ class Channel extends BaseModule
return $activities; return $activities;
} }
private function getMedianThreadScore(int $cid, int $divider): int private function getMedianRelationThreadScore(int $cid, int $divider): int
{ {
$cache_key = 'Channel:getThreadScore:' . $cid . ':' . $divider; $cache_key = 'Channel:getThreadScore:' . $cid . ':' . $divider;
$score = $this->cache->get($cache_key); $score = $this->cache->get($cache_key);
@ -462,9 +484,9 @@ class Channel extends BaseModule
return $score; return $score;
} }
$limit = $this->database->count('contact-relation', ["`cid` = ? AND `thread-score` > ?", $cid, 0]) / $divider; $limit = $this->database->count('contact-relation', ["`relation-cid` = ? AND `relation-thread-score` > ?", $cid, 0]) / $divider;
$relation = $this->database->selectToArray('contact-relation', ['thread-score'], ['cid' => $cid], ['order' => ['thread-score' => true], 'limit' => [$limit, 1]]); $relation = $this->database->selectToArray('contact-relation', ['relation-thread-score'], ['relation-cid' => $cid], ['order' => ['relation-thread-score' => true], 'limit' => [$limit, 1]]);
$score = $relation[0]['thread-score'] ?? 0; $score = $relation[0]['relation-thread-score'] ?? 0;
if (empty($score)) { if (empty($score)) {
return 0; return 0;
} }

View file

@ -144,6 +144,13 @@ class Cron
} }
DBA::close($users); DBA::close($users);
// Update contact relations for our users
$users = DBA::select('user', ['uid'], ["NOT `account_expired` AND NOT `account_removed` AND `uid` > ?", 0]);
while ($user = DBA::fetch($users)) {
Worker::add(Worker::PRIORITY_LOW, 'ContactDiscoveryForUser', $user['uid']);
}
DBA::close($users);
// Resubscribe to relay servers // Resubscribe to relay servers
Relay::reSubscribe(); Relay::reSubscribe();

View file

@ -393,7 +393,8 @@ return [
"uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the account url"], "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the account url"],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "foreign" => ["user" => "uid"], "comment" => "User ID"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "foreign" => ["user" => "uid"], "comment" => "User ID"],
"level" => ["type" => "smallint unsigned", "comment" => "level of closeness"], "level" => ["type" => "smallint unsigned", "comment" => "level of closeness"],
"ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "If set, this account will not be suggested again"], ], "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "If set, this account will not be suggested again"],
],
"indexes" => [ "indexes" => [
"PRIMARY" => ["uid", "uri-id"], "PRIMARY" => ["uid", "uri-id"],
"uri-id_uid" => ["uri-id", "uid"], "uri-id_uid" => ["uri-id", "uid"],
@ -568,9 +569,9 @@ return [
"fields" => [ "fields" => [
"cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "primary" => "1", "comment" => "contact the related contact had interacted with"], "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "primary" => "1", "comment" => "contact the related contact had interacted with"],
"relation-cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "primary" => "1", "comment" => "related contact who had interacted with the contact"], "relation-cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "primary" => "1", "comment" => "related contact who had interacted with the contact"],
"last-interaction" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last interaction"], "last-interaction" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last interaction by relation-cid on cid"],
"follow-updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last update of the contact relationship"], "follow-updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last update of the contact relationship"],
"follows" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "follows" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if true, relation-cid follows cid"],
"score" => ["type" => "smallint unsigned", "comment" => "score for interactions of cid on relation-cid"], "score" => ["type" => "smallint unsigned", "comment" => "score for interactions of cid on relation-cid"],
"relation-score" => ["type" => "smallint unsigned", "comment" => "score for interactions of relation-cid on cid"], "relation-score" => ["type" => "smallint unsigned", "comment" => "score for interactions of relation-cid on cid"],
"thread-score" => ["type" => "smallint unsigned", "comment" => "score for interactions of cid on threads of relation-cid"], "thread-score" => ["type" => "smallint unsigned", "comment" => "score for interactions of cid on threads of relation-cid"],
@ -749,7 +750,8 @@ return [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"url" => ["type" => "varbinary(383)", "comment" => "url that awaiting to be fetched"], "url" => ["type" => "varbinary(383)", "comment" => "url that awaiting to be fetched"],
"created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date of the fetch request"], "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date of the fetch request"],
"wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"], ], "wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"],
],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
"url" => ["UNIQUE", "url"], "url" => ["UNIQUE", "url"],
@ -808,8 +810,7 @@ return [
"gserver-tag" => [ "gserver-tag" => [
"comment" => "Tags that the server has subscribed", "comment" => "Tags that the server has subscribed",
"fields" => [ "fields" => [
"gserver-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["gserver" => "id"], "primary" => "1", "gserver-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["gserver" => "id"], "primary" => "1", "comment" => "The id of the gserver"],
"comment" => "The id of the gserver"],
"tag" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "primary" => "1", "comment" => "Tag that the server has subscribed"], "tag" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "primary" => "1", "comment" => "Tag that the server has subscribed"],
], ],
"indexes" => [ "indexes" => [
@ -848,7 +849,8 @@ return [
"signer" => ["type" => "varchar(255)", "comment" => ""], "signer" => ["type" => "varchar(255)", "comment" => ""],
"push" => ["type" => "boolean", "comment" => "Is the entry pushed or have pulled it?"], "push" => ["type" => "boolean", "comment" => "Is the entry pushed or have pulled it?"],
"trust" => ["type" => "boolean", "comment" => "Do we trust this entry?"], "trust" => ["type" => "boolean", "comment" => "Do we trust this entry?"],
"wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"], ], "wid" => ["type" => "int unsigned", "foreign" => ["workerqueue" => "id"], "comment" => "Workerqueue id"],
],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
"activity-id" => ["UNIQUE", "activity-id"], "activity-id" => ["UNIQUE", "activity-id"],
@ -1073,8 +1075,7 @@ return [
"master-parent-item" => ["type" => "int unsigned", "comment" => "Deprecated"], "master-parent-item" => ["type" => "int unsigned", "comment" => "Deprecated"],
"master-parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"], "master-parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"],
"parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"receiver-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "receiver-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "comment" => "User id"],
"comment" => "User id"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2023.09-dev\n" "Project-Id-Version: 2023.09-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-03 14:48+0000\n" "POT-Creation-Date: 2023-09-07 12:24+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -793,7 +793,7 @@ msgid "All contacts"
msgstr "" msgstr ""
#: src/BaseModule.php:433 src/Content/Widget.php:239 src/Core/ACL.php:195 #: src/BaseModule.php:433 src/Content/Widget.php:239 src/Core/ACL.php:195
#: src/Module/Contact.php:415 src/Module/Conversation/Channel.php:160 #: src/Module/Contact.php:415 src/Module/Conversation/Channel.php:162
#: src/Module/PermissionTooltip.php:127 src/Module/PermissionTooltip.php:149 #: src/Module/PermissionTooltip.php:127 src/Module/PermissionTooltip.php:149
msgid "Followers" msgid "Followers"
msgstr "" msgstr ""
@ -956,7 +956,7 @@ msgstr ""
msgid "Enter user nickname: " msgid "Enter user nickname: "
msgstr "" msgstr ""
#: src/Console/User.php:182 src/Model/User.php:716 #: src/Console/User.php:182 src/Model/User.php:712
#: src/Module/Api/Twitter/ContactEndpoint.php:74 #: src/Module/Api/Twitter/ContactEndpoint.php:74
#: src/Module/Moderation/Users/Active.php:71 #: src/Module/Moderation/Users/Active.php:71
#: src/Module/Moderation/Users/Blocked.php:71 #: src/Module/Moderation/Users/Blocked.php:71
@ -1626,7 +1626,7 @@ msgstr ""
#: src/Content/GroupManager.php:152 src/Content/Nav.php:278 #: src/Content/GroupManager.php:152 src/Content/Nav.php:278
#: src/Content/Text/HTML.php:880 src/Content/Widget.php:537 #: src/Content/Text/HTML.php:880 src/Content/Widget.php:537
#: src/Model/User.php:1278 #: src/Model/User.php:1274
msgid "Groups" msgid "Groups"
msgstr "" msgstr ""
@ -1647,7 +1647,7 @@ msgstr ""
msgid "Create new group" msgid "Create new group"
msgstr "" msgstr ""
#: src/Content/Item.php:331 src/Model/Item.php:3004 #: src/Content/Item.php:331 src/Model/Item.php:3001
msgid "event" msgid "event"
msgstr "" msgstr ""
@ -1655,7 +1655,7 @@ msgstr ""
msgid "status" msgid "status"
msgstr "" msgstr ""
#: src/Content/Item.php:340 src/Model/Item.php:3006 #: src/Content/Item.php:340 src/Model/Item.php:3003
#: src/Module/Post/Tag/Add.php:123 #: src/Module/Post/Tag/Add.php:123
msgid "photo" msgid "photo"
msgstr "" msgstr ""
@ -2074,8 +2074,8 @@ msgid ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s" "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:939 src/Model/Item.php:3746 #: src/Content/Text/BBCode.php:939 src/Model/Item.php:3743
#: src/Model/Item.php:3752 src/Model/Item.php:3753 #: src/Model/Item.php:3749 src/Model/Item.php:3750
msgid "Link to source" msgid "Link to source"
msgstr "" msgstr ""
@ -2709,158 +2709,158 @@ msgstr ""
msgid "Could not connect to database." msgid "Could not connect to database."
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:430 #: src/Core/L10n.php:476 src/Model/Event.php:430
#: src/Module/Settings/Display.php:227 #: src/Module/Settings/Display.php:227
msgid "Monday" msgid "Monday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:431 #: src/Core/L10n.php:476 src/Model/Event.php:431
#: src/Module/Settings/Display.php:228 #: src/Module/Settings/Display.php:228
msgid "Tuesday" msgid "Tuesday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:432 #: src/Core/L10n.php:476 src/Model/Event.php:432
#: src/Module/Settings/Display.php:229 #: src/Module/Settings/Display.php:229
msgid "Wednesday" msgid "Wednesday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:433 #: src/Core/L10n.php:476 src/Model/Event.php:433
#: src/Module/Settings/Display.php:230 #: src/Module/Settings/Display.php:230
msgid "Thursday" msgid "Thursday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:434 #: src/Core/L10n.php:476 src/Model/Event.php:434
#: src/Module/Settings/Display.php:231 #: src/Module/Settings/Display.php:231
msgid "Friday" msgid "Friday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:435 #: src/Core/L10n.php:476 src/Model/Event.php:435
#: src/Module/Settings/Display.php:232 #: src/Module/Settings/Display.php:232
msgid "Saturday" msgid "Saturday"
msgstr "" msgstr ""
#: src/Core/L10n.php:408 src/Model/Event.php:429 #: src/Core/L10n.php:476 src/Model/Event.php:429
#: src/Module/Settings/Display.php:226 #: src/Module/Settings/Display.php:226
msgid "Sunday" msgid "Sunday"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:450 #: src/Core/L10n.php:480 src/Model/Event.php:450
msgid "January" msgid "January"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:451 #: src/Core/L10n.php:480 src/Model/Event.php:451
msgid "February" msgid "February"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:452 #: src/Core/L10n.php:480 src/Model/Event.php:452
msgid "March" msgid "March"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:453 #: src/Core/L10n.php:480 src/Model/Event.php:453
msgid "April" msgid "April"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Core/L10n.php:431 src/Model/Event.php:441 #: src/Core/L10n.php:480 src/Core/L10n.php:499 src/Model/Event.php:441
msgid "May" msgid "May"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:454 #: src/Core/L10n.php:480 src/Model/Event.php:454
msgid "June" msgid "June"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:455 #: src/Core/L10n.php:480 src/Model/Event.php:455
msgid "July" msgid "July"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:456 #: src/Core/L10n.php:480 src/Model/Event.php:456
msgid "August" msgid "August"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:457 #: src/Core/L10n.php:480 src/Model/Event.php:457
msgid "September" msgid "September"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:458 #: src/Core/L10n.php:480 src/Model/Event.php:458
msgid "October" msgid "October"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:459 #: src/Core/L10n.php:480 src/Model/Event.php:459
msgid "November" msgid "November"
msgstr "" msgstr ""
#: src/Core/L10n.php:412 src/Model/Event.php:460 #: src/Core/L10n.php:480 src/Model/Event.php:460
msgid "December" msgid "December"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:422 #: src/Core/L10n.php:495 src/Model/Event.php:422
msgid "Mon" msgid "Mon"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:423 #: src/Core/L10n.php:495 src/Model/Event.php:423
msgid "Tue" msgid "Tue"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:424 #: src/Core/L10n.php:495 src/Model/Event.php:424
msgid "Wed" msgid "Wed"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:425 #: src/Core/L10n.php:495 src/Model/Event.php:425
msgid "Thu" msgid "Thu"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:426 #: src/Core/L10n.php:495 src/Model/Event.php:426
msgid "Fri" msgid "Fri"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:427 #: src/Core/L10n.php:495 src/Model/Event.php:427
msgid "Sat" msgid "Sat"
msgstr "" msgstr ""
#: src/Core/L10n.php:427 src/Model/Event.php:421 #: src/Core/L10n.php:495 src/Model/Event.php:421
msgid "Sun" msgid "Sun"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:437 #: src/Core/L10n.php:499 src/Model/Event.php:437
msgid "Jan" msgid "Jan"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:438 #: src/Core/L10n.php:499 src/Model/Event.php:438
msgid "Feb" msgid "Feb"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:439 #: src/Core/L10n.php:499 src/Model/Event.php:439
msgid "Mar" msgid "Mar"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:440 #: src/Core/L10n.php:499 src/Model/Event.php:440
msgid "Apr" msgid "Apr"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:442 #: src/Core/L10n.php:499 src/Model/Event.php:442
msgid "Jun" msgid "Jun"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:443 #: src/Core/L10n.php:499 src/Model/Event.php:443
msgid "Jul" msgid "Jul"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:444 #: src/Core/L10n.php:499 src/Model/Event.php:444
msgid "Aug" msgid "Aug"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 #: src/Core/L10n.php:499
msgid "Sep" msgid "Sep"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:446 #: src/Core/L10n.php:499 src/Model/Event.php:446
msgid "Oct" msgid "Oct"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:447 #: src/Core/L10n.php:499 src/Model/Event.php:447
msgid "Nov" msgid "Nov"
msgstr "" msgstr ""
#: src/Core/L10n.php:431 src/Model/Event.php:448 #: src/Core/L10n.php:499 src/Model/Event.php:448
msgid "Dec" msgid "Dec"
msgstr "" msgstr ""
@ -3258,81 +3258,81 @@ msgstr ""
msgid "Happy Birthday %s" msgid "Happy Birthday %s"
msgstr "" msgstr ""
#: src/Model/Item.php:2063 #: src/Model/Item.php:2060
#, php-format #, php-format
msgid "Detected languages in this post:\\n%s" msgid "Detected languages in this post:\\n%s"
msgstr "" msgstr ""
#: src/Model/Item.php:3008 #: src/Model/Item.php:3005
msgid "activity" msgid "activity"
msgstr "" msgstr ""
#: src/Model/Item.php:3010 #: src/Model/Item.php:3007
msgid "comment" msgid "comment"
msgstr "" msgstr ""
#: src/Model/Item.php:3013 src/Module/Post/Tag/Add.php:123 #: src/Model/Item.php:3010 src/Module/Post/Tag/Add.php:123
msgid "post" msgid "post"
msgstr "" msgstr ""
#: src/Model/Item.php:3183 #: src/Model/Item.php:3180
#, php-format #, php-format
msgid "%s is blocked" msgid "%s is blocked"
msgstr "" msgstr ""
#: src/Model/Item.php:3185 #: src/Model/Item.php:3182
#, php-format #, php-format
msgid "%s is ignored" msgid "%s is ignored"
msgstr "" msgstr ""
#: src/Model/Item.php:3187 #: src/Model/Item.php:3184
#, php-format #, php-format
msgid "Content from %s is collapsed" msgid "Content from %s is collapsed"
msgstr "" msgstr ""
#: src/Model/Item.php:3191 #: src/Model/Item.php:3188
#, php-format #, php-format
msgid "Content warning: %s" msgid "Content warning: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3653 #: src/Model/Item.php:3650
msgid "bytes" msgid "bytes"
msgstr "" msgstr ""
#: src/Model/Item.php:3684 #: src/Model/Item.php:3681
#, php-format #, php-format
msgid "%2$s (%3$d%%, %1$d vote)" msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)" msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3686 #: src/Model/Item.php:3683
#, php-format #, php-format
msgid "%2$s (%1$d vote)" msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)" msgid_plural "%2$s (%1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3691 #: src/Model/Item.php:3688
#, php-format #, php-format
msgid "%d voter. Poll end: %s" msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s" msgid_plural "%d voters. Poll end: %s"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3693 #: src/Model/Item.php:3690
#, php-format #, php-format
msgid "%d voter." msgid "%d voter."
msgid_plural "%d voters." msgid_plural "%d voters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3695 #: src/Model/Item.php:3692
#, php-format #, php-format
msgid "Poll end: %s" msgid "Poll end: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3729 src/Model/Item.php:3730 #: src/Model/Item.php:3726 src/Model/Item.php:3727
msgid "View on separate page" msgid "View on separate page"
msgstr "" msgstr ""
@ -3490,145 +3490,145 @@ msgstr ""
msgid "Contact information and Social Networks" msgid "Contact information and Social Networks"
msgstr "" msgstr ""
#: src/Model/User.php:227 src/Model/User.php:1191 #: src/Model/User.php:227 src/Model/User.php:1187
msgid "SERIOUS ERROR: Generation of security keys failed." msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr "" msgstr ""
#: src/Model/User.php:625 src/Model/User.php:658 #: src/Model/User.php:621 src/Model/User.php:654
msgid "Login failed" msgid "Login failed"
msgstr "" msgstr ""
#: src/Model/User.php:690 #: src/Model/User.php:686
msgid "Not enough information to authenticate" msgid "Not enough information to authenticate"
msgstr "" msgstr ""
#: src/Model/User.php:811 #: src/Model/User.php:807
msgid "Password can't be empty" msgid "Password can't be empty"
msgstr "" msgstr ""
#: src/Model/User.php:853 #: src/Model/User.php:849
msgid "Empty passwords are not allowed." msgid "Empty passwords are not allowed."
msgstr "" msgstr ""
#: src/Model/User.php:857 #: src/Model/User.php:853
msgid "" msgid ""
"The new password has been exposed in a public data dump, please choose " "The new password has been exposed in a public data dump, please choose "
"another." "another."
msgstr "" msgstr ""
#: src/Model/User.php:861 #: src/Model/User.php:857
msgid "The password length is limited to 72 characters." msgid "The password length is limited to 72 characters."
msgstr "" msgstr ""
#: src/Model/User.php:865 #: src/Model/User.php:861
msgid "The password can't contain white spaces nor accentuated letters" msgid "The password can't contain white spaces nor accentuated letters"
msgstr "" msgstr ""
#: src/Model/User.php:1074 #: src/Model/User.php:1070
msgid "Passwords do not match. Password unchanged." msgid "Passwords do not match. Password unchanged."
msgstr "" msgstr ""
#: src/Model/User.php:1081 #: src/Model/User.php:1077
msgid "An invitation is required." msgid "An invitation is required."
msgstr "" msgstr ""
#: src/Model/User.php:1085 #: src/Model/User.php:1081
msgid "Invitation could not be verified." msgid "Invitation could not be verified."
msgstr "" msgstr ""
#: src/Model/User.php:1093 #: src/Model/User.php:1089
msgid "Invalid OpenID url" msgid "Invalid OpenID url"
msgstr "" msgstr ""
#: src/Model/User.php:1106 src/Security/Authentication.php:241 #: src/Model/User.php:1102 src/Security/Authentication.php:241
msgid "" msgid ""
"We encountered a problem while logging in with the OpenID you provided. " "We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID." "Please check the correct spelling of the ID."
msgstr "" msgstr ""
#: src/Model/User.php:1106 src/Security/Authentication.php:241 #: src/Model/User.php:1102 src/Security/Authentication.php:241
msgid "The error message was:" msgid "The error message was:"
msgstr "" msgstr ""
#: src/Model/User.php:1112 #: src/Model/User.php:1108
msgid "Please enter the required information." msgid "Please enter the required information."
msgstr "" msgstr ""
#: src/Model/User.php:1126 #: src/Model/User.php:1122
#, php-format #, php-format
msgid "" msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are " "system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values." "excluding each other, swapping values."
msgstr "" msgstr ""
#: src/Model/User.php:1133 #: src/Model/User.php:1129
#, php-format #, php-format
msgid "Username should be at least %s character." msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters." msgid_plural "Username should be at least %s characters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/User.php:1137 #: src/Model/User.php:1133
#, php-format #, php-format
msgid "Username should be at most %s character." msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters." msgid_plural "Username should be at most %s characters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/User.php:1145 #: src/Model/User.php:1141
msgid "That doesn't appear to be your full (First Last) name." msgid "That doesn't appear to be your full (First Last) name."
msgstr "" msgstr ""
#: src/Model/User.php:1150 #: src/Model/User.php:1146
msgid "Your email domain is not among those allowed on this site." msgid "Your email domain is not among those allowed on this site."
msgstr "" msgstr ""
#: src/Model/User.php:1154 #: src/Model/User.php:1150
msgid "Not a valid email address." msgid "Not a valid email address."
msgstr "" msgstr ""
#: src/Model/User.php:1157 #: src/Model/User.php:1153
msgid "The nickname was blocked from registration by the nodes admin." msgid "The nickname was blocked from registration by the nodes admin."
msgstr "" msgstr ""
#: src/Model/User.php:1161 src/Model/User.php:1167 #: src/Model/User.php:1157 src/Model/User.php:1163
msgid "Cannot use that email." msgid "Cannot use that email."
msgstr "" msgstr ""
#: src/Model/User.php:1173 #: src/Model/User.php:1169
msgid "Your nickname can only contain a-z, 0-9 and _." msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr "" msgstr ""
#: src/Model/User.php:1181 src/Model/User.php:1238 #: src/Model/User.php:1177 src/Model/User.php:1234
msgid "Nickname is already registered. Please choose another." msgid "Nickname is already registered. Please choose another."
msgstr "" msgstr ""
#: src/Model/User.php:1225 src/Model/User.php:1229 #: src/Model/User.php:1221 src/Model/User.php:1225
msgid "An error occurred during registration. Please try again." msgid "An error occurred during registration. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1252 #: src/Model/User.php:1248
msgid "An error occurred creating your default profile. Please try again." msgid "An error occurred creating your default profile. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1259 #: src/Model/User.php:1255
msgid "An error occurred creating your self contact. Please try again." msgid "An error occurred creating your self contact. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1264 #: src/Model/User.php:1260
msgid "Friends" msgid "Friends"
msgstr "" msgstr ""
#: src/Model/User.php:1268 #: src/Model/User.php:1264
msgid "" msgid ""
"An error occurred creating your default contact circle. Please try again." "An error occurred creating your default contact circle. Please try again."
msgstr "" msgstr ""
#: src/Model/User.php:1312 #: src/Model/User.php:1308
msgid "Profile Photos" msgid "Profile Photos"
msgstr "" msgstr ""
#: src/Model/User.php:1492 #: src/Model/User.php:1488
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3636,7 +3636,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you." "\t\t\tthe administrator of %2$s has set up an account for you."
msgstr "" msgstr ""
#: src/Model/User.php:1495 #: src/Model/User.php:1491
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3674,12 +3674,12 @@ msgid ""
"\t\tThank you and welcome to %4$s." "\t\tThank you and welcome to %4$s."
msgstr "" msgstr ""
#: src/Model/User.php:1528 src/Model/User.php:1635 #: src/Model/User.php:1524 src/Model/User.php:1631
#, php-format #, php-format
msgid "Registration details for %s" msgid "Registration details for %s"
msgstr "" msgstr ""
#: src/Model/User.php:1548 #: src/Model/User.php:1544
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3695,12 +3695,12 @@ msgid ""
"\t\t" "\t\t"
msgstr "" msgstr ""
#: src/Model/User.php:1567 #: src/Model/User.php:1563
#, php-format #, php-format
msgid "Registration at %s" msgid "Registration at %s"
msgstr "" msgstr ""
#: src/Model/User.php:1591 #: src/Model/User.php:1587
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3709,7 +3709,7 @@ msgid ""
"\t\t\t" "\t\t\t"
msgstr "" msgstr ""
#: src/Model/User.php:1599 #: src/Model/User.php:1595
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -6526,77 +6526,85 @@ msgstr ""
msgid "Unable to unfollow this contact, please contact your administrator" msgid "Unable to unfollow this contact, please contact your administrator"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:130 #: src/Module/Conversation/Channel.php:132
msgid "For you" msgid "For you"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:133 #: src/Module/Conversation/Channel.php:135
msgid "Posts from contacts you interact with and who interact with you" msgid "Posts from contacts you interact with and who interact with you"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:139 #: src/Module/Conversation/Channel.php:141
msgid "What's Hot" msgid "What's Hot"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:142 #: src/Module/Conversation/Channel.php:144
msgid "Posts with a lot of interactions" msgid "Posts with a lot of interactions"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:154 #: src/Module/Conversation/Channel.php:156
#, php-format #, php-format
msgid "Posts in %s" msgid "Posts in %s"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:163 #: src/Module/Conversation/Channel.php:165
msgid "Posts from your followers that you don't follow" msgid "Posts from your followers that you don't follow"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:169 #: src/Module/Conversation/Channel.php:171
msgid "Images" msgid "Sharers of sharers"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:172 #: src/Module/Conversation/Channel.php:174
msgid "Posts with images" msgid "Posts from accounts that are followed by accounts that you follow"
msgstr ""
#: src/Module/Conversation/Channel.php:178
msgid "Audio"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:181 #: src/Module/Conversation/Channel.php:181
msgid "Posts with audio" msgid "Images"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:187 #: src/Module/Conversation/Channel.php:184
msgid "Videos" msgid "Posts with images"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:190 #: src/Module/Conversation/Channel.php:190
msgid "Audio"
msgstr ""
#: src/Module/Conversation/Channel.php:193
msgid "Posts with audio"
msgstr ""
#: src/Module/Conversation/Channel.php:199
msgid "Videos"
msgstr ""
#: src/Module/Conversation/Channel.php:202
msgid "Posts with videos" msgid "Posts with videos"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:222 #: src/Module/Conversation/Channel.php:234
#: src/Module/Conversation/Community.php:134 #: src/Module/Conversation/Community.php:134
msgid "Own Contacts" msgid "Own Contacts"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:226 #: src/Module/Conversation/Channel.php:238
#: src/Module/Conversation/Community.php:138 #: src/Module/Conversation/Community.php:138
msgid "Include" msgid "Include"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:227 #: src/Module/Conversation/Channel.php:239
#: src/Module/Conversation/Community.php:139 #: src/Module/Conversation/Community.php:139
msgid "Hide" msgid "Hide"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:243 #: src/Module/Conversation/Channel.php:255
#: src/Module/Conversation/Community.php:157 src/Module/Search/Index.php:152 #: src/Module/Conversation/Community.php:157 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194 #: src/Module/Search/Index.php:194
msgid "No results." msgid "No results."
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:283 #: src/Module/Conversation/Channel.php:295
msgid "Channel not available." msgid "Channel not available."
msgstr "" msgstr ""