Merge remote-tracking branch 'upstream/2021.09-rc' into user-contact

This commit is contained in:
Michael 2021-09-18 20:27:24 +00:00
commit 3dddea96fa
30 changed files with 414 additions and 301 deletions

View file

@ -8,7 +8,6 @@ Adam Magness
Aditoo
AgnesElisa
Albert
Alberto Díaz Tormo
Aleksandr "M.O.Z.G" Dikov
Alex
Alexander An
@ -31,7 +30,6 @@ Anthronaut
Antron Samurai
Arian - Cazare Muncitori
Asher Pen
Athalbert
aweiher
axelt
balderino
@ -98,6 +96,7 @@ Fabio Comuni
felixgilles
Filip Bugaj
Filip H.F. "FiXato" Slagter
Finn Dean
FlxAlbroscheit
foss
Francesco Apruzzese
@ -217,6 +216,7 @@ Ralf Thees
Ralph
Ratten
rcmaniac
RealKinetix
rebeka-catalina
René Wagner
repat
@ -239,10 +239,12 @@ Senex Petrovic
Seth
Silke Meyer
Simon L'nu
Simon Rupf
Simó Albert i Beltran
softmetz
soko1
Spencer Dub
SpencerDub
St John Karp
Stanislav N.
Steffen K9
@ -256,6 +258,7 @@ szymon.filip
Sérgio Lima
Taekus
Tazman DeVille
Tealk
teho
Thecross
Thomas

View file

@ -419,7 +419,14 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o
$tpl = 'search_item.tpl';
$uriids = [];
foreach ($items as $item) {
if (in_array($item['uri-id'], $uriids)) {
continue;
}
$uriids[] = $item['uri-id'];
if (!visible_activity($item)) {
continue;
@ -1140,10 +1147,10 @@ function status_editor(App $a, array $x = [], $notes_cid = 0, $popup = false)
'$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? DI::l10n()->t("Categories \x28comma-separated list\x29") : '',
'$scheduled_at' => Temporal::getDateTimeField(
new DateTime(),
DateTime::createFromFormat(DateTimeFormat::MYSQL, DateTimeFormat::local('now + 6 months')),
new DateTime('now + 6 months'),
null,
DI::l10n()->t('Scheduled at'),
'scheduled_at',
'scheduled_at'
),
'$wait' => DI::l10n()->t('Please wait'),
'$permset' => DI::l10n()->t('Permission settings'),

View file

@ -156,8 +156,8 @@ function follow_content(App $a)
DI::page()['aside'] = '';
if ($protocol != Protocol::PHANTOM) {
DI::page()['aside'] = Widget\VCard::getHTML(Contact::getByURL($contact['url'], false));
if (!in_array($protocol, [Protocol::PHANTOM, Protocol::MAIL])) {
DI::page()['aside'] = Widget\VCard::getHTML($contact);
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('section_title.tpl'),
['$title' => DI::l10n()->t('Status Messages and Posts')]

View file

@ -22,6 +22,8 @@
use Friendica\App;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Util\Proxy;
function msearch_post(App $a)
{
@ -72,7 +74,7 @@ function msearch_post(App $a)
$results[] = [
'name' => $search_result['name'],
'url' => DI::baseUrl() . '/profile/' . $search_result['nickname'],
'photo' => DI::baseUrl() . '/photo/avatar/' . $search_result['uid'] . '.jpg',
'photo' => User::getAvatarUrlForId($search_result['uid'], Proxy::SIZE_THUMB),
'tags' => str_replace([',', ' '], [' ', ' '], $search_result['pub_keywords'])
];
}

View file

@ -1025,6 +1025,7 @@ function photos_content(App $a)
'$confirm' => DI::l10n()->t('Delete Album'),
'$confirm_url' => $drop_url,
'$confirm_name' => 'dropalbum',
'$confirm_value' => 'dropalbum',
'$cancel' => DI::l10n()->t('Cancel'),
]);
}
@ -1131,6 +1132,7 @@ function photos_content(App $a)
'$confirm' => DI::l10n()->t('Delete Photo'),
'$confirm_url' => $drop_url,
'$confirm_name' => 'delete',
'$confirm_value' => 'delete',
'$cancel' => DI::l10n()->t('Cancel'),
]);
}

View file

@ -5,6 +5,7 @@ bin/console.bat
bin/console.php
bin/daemon.php
bin/testargs.php
bin/wait-for-connection
bin/worker.php
config/
doc/

View file

@ -1461,8 +1461,12 @@ class Database
$row = $this->fetchFirst($sql, $condition);
// Ensure to always return either a "null" or a numeric value
return is_numeric($row['count']) ? (int)$row['count'] : $row['count'];
if (!isset($row['count'])) {
$this->logger->notice('Invalid count.', ['table' => $table, 'row' => $row, 'expression' => $expression, 'condition' => $condition_string, 'callstack' => System::callstack()]);
return 0;
} else {
return (int)$row['count'];
}
}
/**

View file

@ -653,9 +653,9 @@ class Contact
'nick' => $user['nickname'],
'pubkey' => $user['pubkey'],
'prvkey' => $user['prvkey'],
'photo' => DI::baseUrl() . '/photo/profile/' . $user['uid'] . '.jpg',
'thumb' => DI::baseUrl() . '/photo/avatar/' . $user['uid'] . '.jpg',
'micro' => DI::baseUrl() . '/photo/micro/' . $user['uid'] . '.jpg',
'photo' => User::getAvatarUrlForId($user['uid']),
'thumb' => User::getAvatarUrlForId($user['uid'], Proxy::SIZE_THUMB),
'micro' => User::getAvatarUrlForId($user['uid'], Proxy::SIZE_MICRO),
'blocked' => 0,
'pending' => 0,
'url' => DI::baseUrl() . '/profile/' . $user['nickname'],
@ -768,7 +768,7 @@ class Contact
$fields['micro'] = self::getDefaultAvatar($fields, Proxy::SIZE_MICRO);
}
$fields['avatar'] = DI::baseUrl() . '/photo/profile/' .$uid . '.' . $file_suffix;
$fields['avatar'] = User::getAvatarUrlForId($uid);
$fields['forum'] = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY;
$fields['prv'] = $user['page-flags'] == User::PAGE_FLAGS_PRVGROUP;
$fields['unsearchable'] = !$profile['net-publish'];
@ -794,8 +794,11 @@ class Contact
self::update($fields, ['uid' => 0, 'nurl' => $self['nurl']]);
// Update the profile
$fields = ['photo' => DI::baseUrl() . '/photo/profile/' .$uid . '.' . $file_suffix,
'thumb' => DI::baseUrl() . '/photo/avatar/' . $uid .'.' . $file_suffix];
$fields = [
'photo' => User::getAvatarUrlForId($uid),
'thumb' => User::getAvatarUrlForId($uid, Proxy::SIZE_THUMB)
];
DBA::update('profile', $fields, ['uid' => $uid]);
}
@ -2780,12 +2783,14 @@ class Contact
return null;
}
public static function removeFollower($importer, $contact)
public static function removeFollower(array $contact)
{
if (($contact['rel'] == self::FRIEND) || ($contact['rel'] == self::SHARING)) {
self::update(['rel' => self::SHARING], ['id' => $contact['id']]);
} else {
if (in_array($contact['rel'] ?? [], [self::FRIEND, self::SHARING])) {
DBA::update('contact', ['rel' => self::SHARING], ['id' => $contact['id']]);
} elseif (!empty($contact['id'])) {
self::remove($contact['id']);
} else {
DI::logger()->info('Couldn\'t remove follower because of invalid contact array', ['contact' => $contact, 'callstack' => System::callstack()]);
}
}

View file

@ -547,7 +547,7 @@ class Media
return $attachments;
}
$height = 0;
$heights = [];
$selected = '';
$previews = [];
@ -591,14 +591,11 @@ class Media
in_array($filetype, ['audio', 'image'])) {
$attachments['visual'][] = $medium;
} elseif (($medium['type'] == self::VIDEO) || ($filetype == 'video')) {
if (strpos($medium['url'], $guid) !== false) {
if (!empty($medium['height'])) {
// Peertube videos are delivered in many different resolutions. We pick a moderate one.
// By checking against the GUID we also ensure to only work this way on Peertube posts.
// This wouldn't be executed when someone for example on Mastodon was sharing multiple videos in a single post.
if (empty($height) || ($height > $medium['height']) && ($medium['height'] >= 480)) {
$height = $medium['height'];
$selected = $medium['url'];
}
// Since only Peertube provides a "height" parameter, this wouldn't be executed
// when someone for example on Mastodon was sharing multiple videos in a single post.
$heights[$medium['height']] = $medium['url'];
$video[$medium['url']] = $medium;
} else {
$attachments['visual'][] = $medium;
@ -607,13 +604,24 @@ class Media
$attachments['additional'][] = $medium;
}
}
if (!empty($selected)) {
$attachments['visual'][] = $video[$selected];
unset($video[$selected]);
foreach ($video as $element) {
$attachments['additional'][] = $element;
if (!empty($heights)) {
ksort($heights);
foreach ($heights as $height => $url) {
if (empty($selected) || $height <= 480) {
$selected = $url;
}
}
if (!empty($selected)) {
$attachments['visual'][] = $video[$selected];
unset($video[$selected]);
foreach ($video as $element) {
$attachments['additional'][] = $element;
}
}
}
return $attachments;
}

View file

@ -840,6 +840,57 @@ class User
return false;
}
/**
* Get avatar link for given user id
*
* @param integer $uid user id
* @param string $size One of the ProxyUtils::SIZE_* constants
* @return string avatar link
*/
public static function getAvatarUrlForId(int $uid, string $size = ''):string
{
$url = DI::baseUrl() . '/photo/';
switch ($size) {
case Proxy::SIZE_MICRO:
$url .= 'micro/';
$scale = 6;
break;
case Proxy::SIZE_THUMB:
$url .= 'avatar/';
$scale = 5;
break;
default:
$url .= 'profile/';
$scale = 4;
break;
}
$updated = '';
$imagetype = IMAGETYPE_JPEG;
$photo = Photo::selectFirst(['type', 'created', 'edited', 'updated'], ["scale" => $scale, 'uid' => $uid, 'profile' => true]);
if (!empty($photo)) {
$updated = max($photo['created'], $photo['edited'], $photo['updated']);
switch ($photo['type']) {
case 'image/png':
$imagetype = IMAGETYPE_PNG;
break;
case 'image/gif':
$imagetype = IMAGETYPE_PNG;
break;
default:
$imagetype = IMAGETYPE_JPEG;
break;
}
}
return $url . $uid . image_type_to_extension($imagetype) . ($updated ? '?ts=' . strtotime($updated) : '');
}
/**
* Catch-all user creation function
*
@ -1054,8 +1105,8 @@ class User
$insert_result = DBA::insert('profile', [
'uid' => $uid,
'name' => $username,
'photo' => DI::baseUrl() . "/photo/profile/{$uid}.jpg",
'thumb' => DI::baseUrl() . "/photo/avatar/{$uid}.jpg",
'photo' => self::getAvatarUrlForId($uid),
'thumb' => self::getAvatarUrlForId($uid, Proxy::SIZE_THUMB),
'publish' => $publish,
'net-publish' => $netpublish,
]);

View file

@ -290,11 +290,17 @@ class Contact extends BaseModule
$contact_id = $data['user'];
}
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => [0, local_user()], 'deleted' => false]);
if (!empty($data)) {
$contact = DBA::selectFirst('contact', [], [
'id' => $contact_id,
'uid' => [0, local_user()],
'deleted' => false
]);
// Don't display contacts that are about to be deleted
if ($contact['network'] == Protocol::PHANTOM) {
$contact = false;
// Don't display contacts that are about to be deleted
if (DBA::isResult($contact) && !empty($contact['network']) && $contact['network'] == Protocol::PHANTOM) {
$contact = false;
}
}
}
@ -432,7 +438,8 @@ class Contact extends BaseModule
'$message' => DI::l10n()->t('Do you really want to delete this contact?'),
'$confirm' => DI::l10n()->t('Yes'),
'$confirm_url' => DI::args()->getCommand(),
'$confirm_name' => 'confirmed',
'$confirm_name' => 't',
'$confirm_value' => BaseModule::getFormSecurityToken('contact_action'),
'$cancel' => DI::l10n()->t('Cancel'),
]);
}

View file

@ -27,7 +27,6 @@ use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Notification;
use Friendica\Model\User;
use Friendica\Network\HTTPException\ForbiddenException;
@ -123,12 +122,7 @@ class Delegation extends BaseModule
//getting additinal information for each identity
foreach ($identities as $key => $identity) {
$self = Contact::selectFirst(['id', 'updated'], ['uid' => $identity['uid'], 'self' => true]);
if (!DBA::isResult($self)) {
continue;
}
$identities[$key]['thumb'] = Contact::getAvatarUrlForId($self['id'], Proxy::SIZE_THUMB, $self['updated']);
$identities[$key]['thumb'] = User::getAvatarUrlForId($identity['uid'], Proxy::SIZE_THUMB);
$identities[$key]['selected'] = ($identity['nickname'] === DI::app()->getLoggedInUserNickname());

View file

@ -167,13 +167,12 @@ class Compose extends BaseModule
'$placeholdercategory' => (Feature::isEnabled(local_user(),'categories') ? DI::l10n()->t('Categories (comma-separated list)') : ''),
'$scheduled_at' => Temporal::getDateTimeField(
new DateTime(),
DateTime::createFromFormat(DateTimeFormat::MYSQL, DateTimeFormat::local('now + 6 months')),
new DateTime('now + 6 months'),
null,
DI::l10n()->t('Scheduled at'),
'scheduled_at',
'scheduled_at'
),
'$title' => $title,
'$category' => $category,
'$body' => $body,

View file

@ -26,7 +26,6 @@ use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\User;
/**
@ -81,7 +80,7 @@ class NoScrape extends BaseModule
$keywords = explode(',', $keywords);
$json_info['fn'] = $profile['name'];
$json_info['photo'] = Contact::getAvatarUrlForUrl($profile['url'], $profile['uid']);
$json_info['photo'] = User::getAvatarUrlForId($profile['uid']);
$json_info['tags'] = $keywords;
$json_info['language'] = $profile['language'];

View file

@ -31,6 +31,8 @@ use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model;
use Friendica\Model\User;
use Friendica\Util\Proxy;
use Friendica\Util\Strings;
/**
@ -372,7 +374,7 @@ class Register extends BaseModule
'source_mail' => $user['email'],
'source_nick' => $user['nickname'],
'source_link' => $base_url . '/admin/users/',
'source_photo' => $base_url . '/photo/avatar/' . $user['uid'] . '.jpg',
'source_photo' => User::getAvatarUrlForId($user['uid'], Proxy::SIZE_THUMB),
'show_in_notification_page' => false
]);
}

View file

@ -26,7 +26,6 @@ use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Photo;
use Friendica\Model\User;
use Friendica\Protocol\ActivityNamespace;
@ -197,7 +196,7 @@ class Xrd extends BaseModule
[
'rel' => 'http://webfinger.net/rel/avatar',
'type' => $avatar['type'],
'href' => Contact::getAvatarUrlForUrl($owner['url'], $owner['uid']),
'href' => User::getAvatarUrlForId($owner['uid']),
],
[
'rel' => 'http://joindiaspora.com/seed_location',
@ -253,7 +252,7 @@ class Xrd extends BaseModule
'$hcard_url' => $baseURL . '/hcard/' . $owner['nickname'],
'$atom' => $owner['poll'],
'$poco_url' => $owner['poco'],
'$photo' => Contact::getAvatarUrlForUrl($owner['url'], $owner['uid']),
'$photo' => User::getAvatarUrlForId($owner['uid']),
'$type' => $avatar['type'],
'$salmon' => $baseURL . '/salmon/' . $owner['nickname'],
'$salmen' => $baseURL . '/salmon/' . $owner['nickname'] . '/mention',

View file

@ -101,7 +101,7 @@ class Probe
if (isset($data[$field])) {
if (in_array($field, $numeric_fields)) {
$newdata[$field] = (int)$data[$field];
} else {
} else {
$newdata[$field] = $data[$field];
}
} elseif (!in_array($field, $numeric_fields)) {
@ -2229,11 +2229,11 @@ class Probe
$data = [
'name' => $profile['name'], 'nick' => $profile['nick'], 'guid' => $approfile['diaspora:guid'] ?? '',
'url' => $profile['url'], 'addr' => $profile['addr'], 'alias' => $profile['alias'],
'photo' => Contact::getAvatarUrlForId($profile['id'], '', $profile['updated']),
'photo' => User::getAvatarUrlForId($uid),
'header' => $profile['header'] ? Contact::getHeaderUrlForId($profile['id'], $profile['updated']) : '',
'account-type' => $profile['contact-type'], 'community' => ($profile['contact-type'] == User::ACCOUNT_TYPE_COMMUNITY),
'keywords' => $profile['keywords'], 'location' => $profile['location'], 'about' => $profile['about'],
'xmpp' => $profile['xmpp'], 'matrix' => $profile['matrix'],
'xmpp' => $profile['xmpp'], 'matrix' => $profile['matrix'],
'hide' => !$profile['net-publish'], 'batch' => '', 'notify' => $profile['notify'],
'poll' => $profile['poll'], 'request' => $profile['request'], 'confirm' => $profile['confirm'],
'subscribe' => $approfile['generator']['url'] . '/follow?url={uri}', 'poco' => $profile['poco'],

View file

@ -64,10 +64,14 @@ class ActivityPub
'diaspora' => 'https://diasporafoundation.org/ns/',
'litepub' => 'http://litepub.social/ns#',
'toot' => 'http://joinmastodon.org/ns#',
'schema' => 'http://schema.org#',
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
'sensitive' => 'as:sensitive', 'Hashtag' => 'as:Hashtag',
'directMessage' => 'litepub:directMessage',
'discoverable' => 'toot:discoverable']];
'discoverable' => 'toot:discoverable',
'PropertyValue' => 'schema:PropertyValue',
'value' => 'schema:value',
]];
const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application', 'Tombstone'];
/**
* Checks if the web request is done for the AP protocol

View file

@ -1102,7 +1102,7 @@ class Processor
return;
}
Contact::removeFollower($owner, $contact);
Contact::removeFollower($contact);
Logger::info('Undo following request', ['contact' => $cid, 'user' => $uid]);
}

View file

@ -370,7 +370,7 @@ class Transmitter
'owner' => $owner['url'],
'publicKeyPem' => $owner['pubkey']];
$data['endpoints'] = ['sharedInbox' => DI::baseUrl() . '/inbox'];
$data['icon'] = ['type' => 'Image', 'url' => Contact::getAvatarUrlForId($owner['id'], '', $owner['updated'])];
$data['icon'] = ['type' => 'Image', 'url' => User::getAvatarUrlForId($uid)];
$resourceid = Photo::ridFromURI($owner['photo']);
if (!empty($resourceid)) {
@ -392,6 +392,20 @@ class Transmitter
}
}
$custom_fields = [];
foreach (DI::profileField()->selectByContactId(0, $uid) as $profile_field) {
$custom_fields[] = [
'type' => 'PropertyValue',
'name' => $profile_field->label,
'value' => BBCode::convertForUriId($owner['uri-id'], $profile_field->value)
];
};
if (!empty($custom_fields)) {
$data['attachment'] = $custom_fields;
}
$data['generator'] = self::getService();
// tags: https://kitty.town/@inmysocks/100656097926961126.json

View file

@ -449,7 +449,7 @@ class DFRN
$attributes = ["rel" => "photo", "type" => "image/jpeg",
"media:width" => Proxy::PIXEL_SMALL, "media:height" => Proxy::PIXEL_SMALL,
"href" => Contact::getAvatarUrlForId($owner['id'], Proxy::SIZE_SMALL, $owner['updated'])];
"href" => User::getAvatarUrlForId($owner['uid'], Proxy::SIZE_SMALL)];
if (!$public || !$hide) {
$attributes["dfrn:updated"] = $picdate;
@ -1584,7 +1584,7 @@ class DFRN
}
if ($activity->match($item["verb"], Activity::UNFOLLOW)) {
Logger::log("Lost follower");
Contact::removeFollower($importer, $contact, $item);
Contact::removeFollower($contact);
return false;
}
if ($activity->match($item["verb"], Activity::REQ_FRIEND)) {

View file

@ -2211,7 +2211,7 @@ class Diaspora
return true;
} else {
Logger::log("Author ".$author." doesn't want to follow us anymore.", Logger::DEBUG);
Contact::removeFollower($importer, $contact);
Contact::removeFollower($contact);
return true;
}
}

View file

@ -965,7 +965,7 @@ class Feed
XML::addElement($doc, $root, "id", DI::baseUrl() . "/profile/" . $owner["nick"]);
XML::addElement($doc, $root, "title", $title);
XML::addElement($doc, $root, "subtitle", sprintf("Updates from %s on %s", $owner["name"], DI::config()->get('config', 'sitename')));
XML::addElement($doc, $root, "logo", Contact::getAvatarUrlForId($owner['id'], Proxy::SIZE_SMALL, $owner['updated']));
XML::addElement($doc, $root, "logo", User::getAvatarUrlForId($owner['uid'], Proxy::SIZE_SMALL));
XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM));
$author = self::addAuthor($doc, $owner);

View file

@ -471,7 +471,7 @@ class OStatus
if ($item["verb"] == Activity::O_UNFOLLOW) {
$dummy = null;
Contact::removeFollower($importer, $contact, $item, $dummy);
Contact::removeFollower($contact);
continue;
}
@ -1275,7 +1275,7 @@ class OStatus
XML::addElement($doc, $root, "id", DI::baseUrl() . "/profile/" . $owner["nick"]);
XML::addElement($doc, $root, "title", $title);
XML::addElement($doc, $root, "subtitle", sprintf("Updates from %s on %s", $owner["name"], DI::config()->get('config', 'sitename')));
XML::addElement($doc, $root, "logo", Contact::getAvatarUrlForId($owner['id'], ProxyUtils::SIZE_SMALL, $owner['updated']));
XML::addElement($doc, $root, "logo", User::getAvatarUrlForId($owner['uid'], ProxyUtils::SIZE_SMALL));
XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM));
$author = self::addAuthor($doc, $owner, true);
@ -1432,7 +1432,7 @@ class OStatus
"type" => "image/jpeg", // To-Do?
"media:width" => ProxyUtils::PIXEL_SMALL,
"media:height" => ProxyUtils::PIXEL_SMALL,
"href" => Contact::getAvatarUrlForId($owner['id'], ProxyUtils::SIZE_SMALL, $owner['updated'])];
"href" => User::getAvatarUrlForId($owner['uid'], ProxyUtils::SIZE_SMALL)];
XML::addElement($doc, $author, "link", "", $attributes);
if (isset($owner["thumb"])) {
@ -1441,7 +1441,7 @@ class OStatus
"type" => "image/jpeg", // To-Do?
"media:width" => ProxyUtils::PIXEL_THUMB,
"media:height" => ProxyUtils::PIXEL_THUMB,
"href" => Contact::getAvatarUrlForId($owner['id'], ProxyUtils::SIZE_THUMB, $owner['updated'])];
"href" => User::getAvatarUrlForId($owner['uid'], ProxyUtils::SIZE_THUMB)];
XML::addElement($doc, $author, "link", "", $attributes);
}

File diff suppressed because it is too large Load diff

View file

@ -1326,6 +1326,8 @@ $a->strings["Don't embed private images in posts"] = "Ne ágyazzon be személyes
$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = "Ne cserélje ki a bejegyzésekben lévő helyileg kiszolgált személyes fényképeket a kép beágyazott másolatával. Ez azt jelenti, hogy a személyes fényképeket tartalmazó bejegyzéseket fogadó partnereknek hitelesíteniük kell magukat és be kell tölteniük minden egyes képet, ami eltarthat egy ideig.";
$a->strings["Explicit Content"] = "Felnőtteknek szánt tartalom";
$a->strings["Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page."] = "Állítsa be ezt annak közléséhez, hogy a csomópontját főként felnőtteknek szóló tartalomhoz használják, ami lehet, hogy nem alkalmas kiskorúak számára. Ez az információ közzé lesz téve a csomópont információiban, és használhatja például a globális könyvtár is, hogy kiszűrje a csomópontját a csatlakozáshoz felajánlott csomópontok listájából. Ezenkívül egy megjegyzés is meg lesz jelenítve ezzel kapcsolatban a felhasználó regisztrációs oldalán.";
$a->strings["Proxify external content"] = "Külső tartalom proxyzása";
$a->strings["Route external content via the proxy functionality. This is used for example for some OEmbed accesses and in some other rare cases."] = "Külső tartalom átirányítása a proxy funkción keresztül. Ezt például néhány OEmbed-hozzáférésnél és egyéb ritka esetekben használják.";
$a->strings["Allow Users to set remote_self"] = "Távoli önmaguk beállításának engedélyezése a felhasználóknak";
$a->strings["With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream."] = "Ennek bejelölésével minden egyes felhasználó számára engedélyezett, hogy az egyes partnereket távoli önmagukként jelöljék meg a partner javítása párbeszédablakban. Ezen jelző beállítása egy partnernél a tartalom minden egyes beküldésének tükrözését okozza a felhasználók adatfolyamában.";
$a->strings["Enable multiple registrations"] = "Többszörös regisztrációk engedélyezése";

View file

@ -4,8 +4,8 @@
<h3 id="confirm-message">{{$message}}</h3>
<input class="confirm-button" id="confirm-submit-button" type="submit" name="{{$confirm_name}}" value="{{$confirm}}" />
<input class="confirm-button" id="confirm-cancel-button" type="submit" name="canceled" value="{{$cancel}}" />
<button class="confirm-button" id="confirm-submit-button" type="submit" name="{{$confirm_name}}" value="{{$confirm_value}}">{{$confirm}}</button>
<button class="confirm-button" id="confirm-cancel-button" type="submit" name="canceled" value="{{$cancel}}">{{$cancel}}</button>
</form>
</center>

View file

@ -3,7 +3,7 @@
<div id="confirm-message">{{$message}}</div>
<div class="form-group pull-right settings-submit-wrapper">
<button type="submit" name="{{$confirm_name}}" id="confirm-submit-button" class="btn btn-primary confirm-button" value="{{$confirm}}">{{$confirm}}</button>
<button type="submit" name="canceled" id="confirm-cancel-button" class="btn confirm-button" data-dismiss="modal">{{$cancel}}</button>
<button type="submit" name="{{$confirm_name}}" id="confirm-submit-button" class="btn btn-primary confirm-button" value="{{$confirm_value}}">{{$confirm}}</button>
<button type="submit" name="canceled" value="{{$cancel}} id="confirm-cancel-button" class="btn confirm-button" data-dismiss="modal">{{$cancel}}</button>
</div>
</form>

View file

@ -27,7 +27,7 @@
{{/if}}
<li role="presentation"><a role="menuitem" href="{{$contact_actions.block.url}}" title="{{$contact_actions.block.title}}">{{$contact_actions.block.label}}</a></li>
<li role="presentation"><a role="menuitem" href="{{$contact_actions.ignore.url}}" title="{{$contact_actions.ignore.title}}">{{$contact_actions.ignore.label}}</a></li>
{{if $contact_actions.delete.url}}<li role="presentation"><button role="menuitem" type="button" class="btn-link" title="{{$contact_actions.delete.title}}" onclick="addToModal('{{$contact_actions.delete.url}}?confirm=1');">{{$contact_actions.delete.label}}</button></li>{{/if}}
{{if $contact_actions.delete.url}}<li role="presentation"><button role="menuitem" type="button" class="btn-link" title="{{$contact_actions.delete.title}}" onclick="addToModal('{{$contact_actions.delete.url}}&confirm=1');">{{$contact_actions.delete.label}}</button></li>{{/if}}
</ul>
</li>
</ul>
@ -76,7 +76,7 @@
<div id="contact-edit-profile-collapse" class="panel-body panel-collapse collapse in" role="tabpanel" aria-labelledby="contact-edit-profile">
<div class="section-content-tools-wrapper">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 text-muted">{{$profileurllabel}}</div><a target="blank" href="{{$url}}">{{$profileurl}}</a>
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 text-muted">{{$profileurllabel}}</div><a target="blank" href="{{$profileurl}}">{{$profileurl}}</a>
</div>
{{if $location}}

View file

@ -48,7 +48,7 @@
</div> {{* End of contact-edit-status-wrapper *}}
{{* Some information about the contact from the profile *}}
<dl><dt>{{$profileurllabel}}</dt><dd><a target="blank" href="{{$url}}">{{$profileurl}}</a></dd></dl>
<dl><dt>{{$profileurllabel}}</dt><dd><a target="blank" href="{{$profileurl}}">{{$profileurl}}</a></dd></dl>
{{if $location}}<dl><dt>{{$location_label}}</dt><dd>{{$location nofilter}}</dd></dl>{{/if}}
{{if $xmpp}}<dl><dt>{{$xmpp_label}}</dt><dd>{{$xmpp}}</dd></dl>{{/if}}
{{if $matrix}}<dl><dt>{{$matrix_label}}</dt><dd>{{$matrix}}</dd></dl>{{/if}}