merged from develop and increased DB-version

This commit is contained in:
Philipp Holzer 2018-07-04 23:44:11 +02:00
commit 19209f6826
No known key found for this signature in database
GPG key ID: 58160D7D6AF942B6
29 changed files with 3900 additions and 3515 deletions

View file

@ -41,7 +41,7 @@ define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily');
define('FRIENDICA_VERSION', '2018.08-dev');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('DB_UPDATE_VERSION', 1273);
define('DB_UPDATE_VERSION', 1274);
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
/**

View file

@ -1,6 +1,6 @@
-- ------------------------------------------
-- Friendica 2018.08-dev (The Tazmans Flax-lily)
-- DB_UPDATE_VERSION 1272
-- DB_UPDATE_VERSION 1274
-- ------------------------------------------
@ -536,9 +536,6 @@ CREATE TABLE IF NOT EXISTS `item` (
INDEX `ownerid` (`owner-id`),
INDEX `uid_uri` (`uid`,`uri`(190)),
INDEX `resource-id` (`resource-id`),
INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)),
INDEX `uid_type_changed` (`uid`,`type`,`changed`),
INDEX `contactid_verb` (`contact-id`,`verb`),
INDEX `deleted_changed` (`deleted`,`changed`),
INDEX `uid_wall_changed` (`uid`,`wall`,`changed`),
INDEX `uid_eventid` (`uid`,`event-id`),
@ -557,6 +554,7 @@ CREATE TABLE IF NOT EXISTS `item-content` (
`body` mediumtext COMMENT 'item body content',
`location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
`language` text COMMENT 'Language information about this post',
`app` varchar(255) NOT NULL DEFAULT '' COMMENT 'application which generated this item',
`rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`rendered-html` mediumtext COMMENT 'item.body converted to html',
@ -986,7 +984,6 @@ CREATE TABLE IF NOT EXISTS `term` (
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`global` boolean NOT NULL DEFAULT '0' COMMENT '',
`aid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
PRIMARY KEY(`tid`),
INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`(32)),

View file

@ -45,6 +45,7 @@ Example: To set the automatic database cleanup process add this line to your .ht
* **dlogfile** - location of the developer log file
* **dlogip** - restricts develop log writes to requests originating from this IP address
* **frontend_worker_timeout** - Value in minutes after we think that a frontend task was killed by the webserver. Default value is 10.
* **groupedit_image_limit** (Integer) - Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names. Default is 400. This can alternatively be set on a per account basis in the pconfig table.
* **hsts** (Boolean) - Enables the sending of HTTP Strict Transport Security headers
* **ignore_cache** (Boolean) - For development only. Disables the item cache.
* **instances_social_key** - Key to the API of https://instances.social which retrieves data about mastodon servers. See https://instances.social/api/token to get an API key.

View file

@ -262,14 +262,20 @@ function localize_item(&$item)
}
if (activity_match($item['verb'], ACTIVITY_TAG)) {
$fields = ['author-link', 'author-name', 'verb', 'object-type', 'resource-id', 'body', 'plink'];
$fields = ['author-id', 'author-link', 'author-name', 'author-network',
'verb', 'object-type', 'resource-id', 'body', 'plink'];
$obj = Item::selectFirst($fields, ['uri' => $item['parent-uri']]);
if (!DBM::is_result($obj)) {
return;
}
$author = '[url=' . Contact::magicLinkById($item['author-id']) . ']' . $item['author-name'] . '[/url]';
$objauthor = '[url=' . Contact::magicLinkById($obj['author-id']) . ']' . $obj['author-name'] . '[/url]';
$author_arr = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$author = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $item['author-name'] . '[/url]';
$author_arr = ['uid' => 0, 'id' => $obj['author-id'],
'network' => $obj['author-network'], 'url' => $obj['author-link']];
$objauthor = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $obj['author-name'] . '[/url]';
switch ($obj['verb']) {
case ACTIVITY_POST:
@ -341,7 +347,9 @@ function localize_item(&$item)
}
// add sparkle links to appropriate permalinks
$item['plink'] = Contact::magicLinkById($item['author-id'], $item['plink']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$item['plink'] = Contact::magicLinkbyContact($author, $item['plink']);
}
/**
@ -569,7 +577,9 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
$tags = \Friendica\Model\Term::populateTagsFromItem($item);
$profile_link = Contact::magicLinkbyId($item['author-id']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkbyContact($author);
if (strpos($profile_link, 'redir/') === 0) {
$sparkle = ' sparkle';
@ -803,7 +813,9 @@ function item_photo_menu($item) {
$sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;';
}
$profile_link = Contact::magicLinkById($item['author-id']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkbyContact($author);
$sparkle = (strpos($profile_link, 'redir/') === 0);
$cid = 0;
@ -908,7 +920,9 @@ function builtin_activity_puller($item, &$conv_responses) {
}
if (activity_match($item['verb'], $verb) && ($item['id'] != $item['parent'])) {
$url = Contact::MagicLinkbyId($item['author-id']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$url = Contact::magicLinkbyContact($author);
if (strpos($url, 'redir/') === 0) {
$sparkle = ' class="sparkle" ';
}

View file

@ -738,18 +738,13 @@ function check_item_notification($itemid, $uid, $defaulttype = "") {
// Only act if it is a "real" post
// We need the additional check for the "local_profile" because of mixed situations on connector networks
$item = q("SELECT `id`, `mention`, `tag`,`parent`, `title`, `body`, `author-id`, `guid`,
`parent-uri`, `uri`, `contact-id`, `network`
FROM `item` WHERE `id` = %d AND `gravity` IN (%d, %d) AND
NOT (`author-id` IN ($contact_list)) LIMIT 1",
intval($itemid), intval(GRAVITY_PARENT), intval(GRAVITY_COMMENT));
if (!$item)
return false;
if ($item[0]['network'] != NETWORK_FEED) {
$author = dba::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item[0]['author-id']]);
} else {
$author = dba::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item[0]['contact-id']]);
$fields = ['id', 'mention', 'tag', 'parent', 'title', 'body',
'author-link', 'author-name', 'author-avatar', 'author-id',
'guid', 'parent-uri', 'uri', 'contact-id', 'network'];
$condition = ['id' => $itemid, 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT]];
$item = Item::selectFirst($fields, $condition);
if (!DBM::is_result($item) || in_array($item['author-id'], $contacts)) {
return;
}
// Generate the notification array
@ -759,17 +754,17 @@ function check_item_notification($itemid, $uid, $defaulttype = "") {
$params["language"] = $user["language"];
$params["to_name"] = $user["username"];
$params["to_email"] = $user["email"];
$params["item"] = $item[0];
$params["parent"] = $item[0]["parent"];
$params["link"] = System::baseUrl().'/display/'.urlencode($item[0]["guid"]);
$params["item"] = $item;
$params["parent"] = $item["parent"];
$params["link"] = System::baseUrl().'/display/'.urlencode($item["guid"]);
$params["otype"] = 'item';
$params["source_name"] = $author["name"];
$params["source_link"] = $author["url"];
$params["source_photo"] = $author["thumb"];
$params["source_name"] = $item["author-name"];
$params["source_link"] = $item["author-link"];
$params["source_photo"] = $item["author-avatar"];
if ($item[0]["parent-uri"] === $item[0]["uri"]) {
if ($item["parent-uri"] === $item["uri"]) {
// Send a notification for every new post?
$send_notification = dba::exists('contact', ['id' => $item[0]['contact-id'], 'notify_new_posts' => true]);
$send_notification = dba::exists('contact', ['id' => $item['contact-id'], 'notify_new_posts' => true]);
if (!$send_notification) {
$tags = q("SELECT `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` = %d AND `uid` = %d",
@ -796,11 +791,11 @@ function check_item_notification($itemid, $uid, $defaulttype = "") {
$tagged = false;
foreach ($profiles AS $profile) {
if (strpos($item[0]["tag"], "=".$profile."]") || strpos($item[0]["body"], "=".$profile."]"))
if (strpos($item["tag"], "=".$profile."]") || strpos($item["body"], "=".$profile."]"))
$tagged = true;
}
if ($item[0]["mention"] || $tagged || ($defaulttype == NOTIFY_TAGSELF)) {
if ($item["mention"] || $tagged || ($defaulttype == NOTIFY_TAGSELF)) {
$params["type"] = NOTIFY_TAGSELF;
$params["verb"] = ACTIVITY_TAG;
}
@ -810,7 +805,7 @@ function check_item_notification($itemid, $uid, $defaulttype = "") {
WHERE `thread`.`iid` = %d AND NOT `thread`.`ignored` AND
(`thread`.`mention` OR `item`.`author-id` IN ($contact_list))
LIMIT 1",
intval($item[0]["parent"]));
intval($item["parent"]));
if ($parent && !isset($params["type"])) {
$params["type"] = NOTIFY_COMMENT;

View file

@ -737,7 +737,7 @@ function item_post(App $a) {
goaway($return_path);
}
$datarray = dba::selectFirst('item', [], ['id' => $post_id]);
$datarray = Item::selectFirst(Item::ITEM_FIELDLIST, ['id' => $post_id]);
if (!DBM::is_result($datarray)) {
logger("Item with id ".$post_id." couldn't be fetched.");

View file

@ -360,21 +360,21 @@ function network_content(App $a, $update = 0, $parent = 0)
$arr = ['query' => $a->query_string];
Addon::callHooks('network_content_init', $arr);
$nouveau = false;
$flat_mode = false;
if ($a->argc > 1) {
for ($x = 1; $x < $a->argc; $x ++) {
if ($a->argv[$x] === 'new') {
$nouveau = true;
$flat_mode = true;
}
}
}
if (x($_GET, 'file')) {
$nouveau = true;
$flat_mode = true;
}
if ($nouveau) {
if ($flat_mode) {
$o = networkFlatView($a, $update);
} else {
$o = networkThreadedView($a, $update, $parent);
@ -393,7 +393,7 @@ function network_content(App $a, $update = 0, $parent = 0)
function networkFlatView(App $a, $update = 0)
{
// Rawmode is used for fetching new content at the end of the page
$rawmode = (isset($_GET['mode']) AND ( $_GET['mode'] == 'raw'));
$rawmode = (isset($_GET['mode']) && ($_GET['mode'] == 'raw'));
if (isset($_GET['last_id'])) {
$last_id = intval($_GET['last_id']);

View file

@ -1380,6 +1380,13 @@ class BBCode extends BaseObject
}, $text
);
$text = preg_replace_callback(
"&\[url=/people\?q\=(.*)\](.*)\[\/url\]&Usi",
function ($match) {
return "[url=" . System::baseUrl() . "/search?search=%40" . $match[1] . "]" . $match[2] . "[/url]";
}, $text
);
// Server independent link to posts and comments
// See issue: https://github.com/diaspora/diaspora_federation/issues/75
$expression = "=diaspora://.*?/post/([0-9A-Za-z\-_@.:]{15,254}[0-9A-Za-z])=ism";

View file

@ -1241,9 +1241,6 @@ class DBStructure
"ownerid" => ["owner-id"],
"uid_uri" => ["uid", "uri(190)"],
"resource-id" => ["resource-id"],
"contactid_allowcid_allowpid_denycid_denygid" => ["contact-id","allow_cid(10)","allow_gid(10)","deny_cid(10)","deny_gid(10)"], //
"uid_type_changed" => ["uid","type","changed"],
"contactid_verb" => ["contact-id","verb"],
"deleted_changed" => ["deleted","changed"],
"uid_wall_changed" => ["uid","wall","changed"],
"uid_eventid" => ["uid","event-id"],
@ -1261,6 +1258,7 @@ class DBStructure
"body" => ["type" => "mediumtext", "comment" => "item body content"],
"location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"],
"coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"],
"language" => ["type" => "text", "comment" => "Language information about this post"],
"app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "application which generated this item"],
"rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
"rendered-html" => ["type" => "mediumtext", "comment" => "item.body converted to html"],
@ -1716,7 +1714,6 @@ class DBStructure
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"received" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"aid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
],
"indexes" => [

View file

@ -7,6 +7,7 @@ namespace Friendica\Database;
use Friendica\Core\Config;
use Friendica\Database\DBM;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use dba;
require_once 'include/dba.php';
@ -30,6 +31,9 @@ class PostUpdate
if (!self::update1206()) {
return;
}
if (!self::update1274()) {
return;
}
}
/**
@ -217,4 +221,58 @@ class PostUpdate
logger("Done", LOGGER_DEBUG);
return true;
}
/**
* @brief update the "item-content" table
*
* @return bool "true" when the job is done
*/
private static function update1274()
{
// Was the script completed?
if (Config::get("system", "post_update_version") >= 1274) {
return true;
}
logger("Start", LOGGER_DEBUG);
$fields = ['id', 'title', 'content-warning', 'body', 'location', 'tag', 'file',
'coord', 'app', 'rendered-hash', 'rendered-html', 'verb',
'object-type', 'object', 'target-type', 'target', 'plink',
'author-id', 'owner-id'];
$condition = ["`icid` IS NULL"];
$params = ['limit' => 10000];
$items = Item::select($fields, $condition, $params);
if (!DBM::is_result($items)) {
Config::set("system", "post_update_version", 1274);
logger("Done", LOGGER_DEBUG);
return true;
}
$rows = 0;
while ($item = Item::fetch($items)) {
// Clearing the author and owner data if there is an id.
if ($item['author-id'] > 0) {
$item['author-name'] = '';
$item['author-link'] = '';
$item['author-avatar'] = '';
}
if ($item['owner-id'] > 0) {
$item['owner-name'] = '';
$item['owner-link'] = '';
$item['owner-avatar'] = '';
}
Item::update($item, ['id' => $item['id']]);
++$rows;
}
dba::close($items);
logger("Processed rows: " . $rows, LOGGER_DEBUG);
return true;
}
}

View file

@ -1732,8 +1732,21 @@ class Contact extends BaseObject
*/
public static function magicLinkbyId($cid, $url = '')
{
$contact = dba::selectFirst('contact', ['network', 'url', 'uid'], ['id' => $cid]);
$contact = dba::selectFirst('contact', ['id', 'network', 'url', 'uid'], ['id' => $cid]);
return self::magicLinkbyContact($contact, $url);
}
/**
* @brief Returns a magic link to authenticate remote visitors
*
* @param array $contact The contact array with "uid", "network" and "url"
* @param integer $url An url that we will be redirected to after the authentication
*
* @return string with "redir" link
*/
public static function magicLinkbyContact($contact, $url = '')
{
if ($contact['network'] != NETWORK_DFRN) {
return $url ?: $contact['url']; // Equivalent to ($url != '') ? $url : $contact['url'];
}
@ -1747,7 +1760,7 @@ class Contact extends BaseObject
return self::magicLink($contact['url'], $url);
}
$redirect = 'redir/' . $cid;
$redirect = 'redir/' . $contact['id'];
if ($url != '') {
$redirect .= '?url=' . $url;

View file

@ -268,9 +268,9 @@ class Event extends BaseObject
if ($event['id']) {
// has the event actually changed?
$existing_event = dba::selectFirst('event', ['edited'], ['id' => $event['id'], 'uid' => $event['uid']]);
if ((! DBM::is_result($existing_event)) || ($existing_event['edited'] === $event['edited'])) {
if (!DBM::is_result($existing_event) || ($existing_event['edited'] === $event['edited'])) {
$item = dba::selectFirst('item', [], ['event-id' => $event['id'], 'uid' => $event['uid']]);
$item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]);
return DBM::is_result($item) ? $item['id'] : 0;
}
@ -289,7 +289,7 @@ class Event extends BaseObject
dba::update('event', $updated_fields, ['id' => $event['id'], 'uid' => $event['uid']]);
$item = dba::selectFirst('item', ['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]);
$item = Item::selectFirst(['id'], ['event-id' => $event['id'], 'uid' => $event['uid']]);
if (DBM::is_result($item)) {
$object = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($event['uri']) . '</id>';
$object .= '<content>' . xmlify(self::getBBCode($event)) . '</content>';
@ -464,8 +464,7 @@ class Event extends BaseObject
}
// Query for the event by event id
$r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`,
`item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event`
$r = q("SELECT `event`.*, `item`.`id` AS `itemid` FROM `event`
LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra",
intval($owner_uid),
@ -505,8 +504,7 @@ class Event extends BaseObject
// Query for the event by date.
// @todo Slow query (518 seconds to run), to be optimzed
$r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`,
`item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event`
$r = q("SELECT `event`.*, `item`.`id` AS `itemid` FROM `event`
LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
WHERE `event`.`uid` = %d AND event.ignore = %d
AND ((`adjust` = 0 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s')
@ -542,6 +540,11 @@ class Event extends BaseObject
$last_date = '';
$fmt = L10n::t('l, F j');
foreach ($event_result as $event) {
$item = Item::selectFirst(['plink', 'author-name', 'author-avatar', 'author-link'], ['id' => $event['itemid']]);
if (DBM::is_result($item)) {
$event = array_merge($event, $item);
}
$start = $event['adjust'] ? DateTimeFormat::local($event['start'], 'c') : DateTimeFormat::utc($event['start'], 'c');
$j = $event['adjust'] ? DateTimeFormat::local($event['start'], 'j') : DateTimeFormat::utc($event['start'], 'j');
$day = $event['adjust'] ? DateTimeFormat::local($event['start'], $fmt) : DateTimeFormat::utc($event['start'], $fmt);

View file

@ -24,6 +24,7 @@ use Friendica\Protocol\Diaspora;
use Friendica\Protocol\OStatus;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\XML;
use Friendica\Util\Lock;
use dba;
use Text_LanguageDetect;
@ -36,11 +37,11 @@ class Item extends BaseObject
// Field list that is used to display the items
const DISPLAY_FIELDLIST = ['uid', 'id', 'parent', 'uri', 'thr-parent', 'parent-uri', 'guid', 'network',
'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink',
'wall', 'private', 'starred', 'origin', 'title', 'body', 'file', 'attach',
'wall', 'private', 'starred', 'origin', 'title', 'body', 'file', 'attach', 'language',
'content-warning', 'location', 'coord', 'app', 'rendered-hash', 'rendered-html', 'object',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'item_id',
'author-id', 'author-link', 'author-name', 'author-avatar',
'owner-id', 'owner-link', 'owner-name', 'owner-avatar',
'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network',
'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network',
'contact-id', 'contact-link', 'contact-name', 'contact-avatar',
'writable', 'self', 'cid', 'alias',
'event-id', 'event-created', 'event-edited', 'event-start', 'event-finish',
@ -57,9 +58,12 @@ class Item extends BaseObject
'signed_text', 'signature', 'signer'];
// Field list for "item-content" table that is mixed with the item table
const CONTENT_FIELDLIST = ['title', 'content-warning', 'body', 'location',
const MIXED_CONTENT_FIELDLIST = ['title', 'content-warning', 'body', 'location',
'coord', 'app', 'rendered-hash', 'rendered-html', 'verb',
'object-type', 'object', 'target-type', 'target'];
'object-type', 'object', 'target-type', 'target', 'plink'];
// Field list for "item-content" table that is not present in the "item" table
const CONTENT_FIELDLIST = ['language'];
// All fields in the item table
const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', 'guid',
@ -85,7 +89,7 @@ class Item extends BaseObject
$row = dba::fetch($stmt);
// Fetch data from the item-content table whenever there is content there
foreach (self::CONTENT_FIELDLIST as $field) {
foreach (self::MIXED_CONTENT_FIELDLIST as $field) {
if (empty($row[$field]) && !empty($row['item-' . $field])) {
$row[$field] = $row['item-' . $field];
}
@ -113,6 +117,16 @@ class Item extends BaseObject
}
}
// Build the tag string out of the term entries
if (isset($row['id']) && array_key_exists('tag', $row)) {
$row['tag'] = Term::tagTextFromItemId($row['id']);
}
// Build the file string out of the term entries
if (isset($row['id']) && array_key_exists('file', $row)) {
$row['file'] = Term::fileTextFromItemId($row['id']);
}
// We can always comment on posts from these networks
if (isset($row['writable']) && !empty($row['network']) &&
in_array($row['network'], [NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS])) {
@ -265,7 +279,7 @@ class Item extends BaseObject
$param_string = self::addTablesToFields(dba::buildParameter($params), $fields);
$table = "`item` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, false);
$table = "`item` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, false, $usermode);
$sql = "SELECT " . $select_fields . " FROM " . $table . $condition_string . $param_string;
@ -380,7 +394,7 @@ class Item extends BaseObject
$param_string = self::addTablesToFields($param_string, $threadfields);
$param_string = self::addTablesToFields($param_string, $fields);
$table = "`thread` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, true);
$table = "`thread` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, true, $usermode);
$sql = "SELECT " . $select_fields . " FROM " . $table . $condition_string . $param_string;
@ -399,19 +413,19 @@ class Item extends BaseObject
$fields['item'] = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', 'guid',
'contact-id', 'owner-id', 'author-id', 'type', 'wall', 'gravity', 'extid',
'created', 'edited', 'commented', 'received', 'changed', 'postopts',
'plink', 'resource-id', 'event-id', 'tag', 'attach', 'inform',
'resource-id', 'event-id', 'tag', 'attach', 'inform',
'file', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'private', 'pubmail', 'moderated', 'visible', 'starred', 'bookmark',
'unseen', 'deleted', 'origin', 'forum_mode', 'mention', 'global',
'id' => 'item_id', 'network', 'icid'];
$fields['item-content'] = self::CONTENT_FIELDLIST;
$fields['item-content'] = array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST);
$fields['author'] = ['url' => 'author-link', 'name' => 'author-name',
'thumb' => 'author-avatar', 'nick' => 'author-nick'];
'thumb' => 'author-avatar', 'nick' => 'author-nick', 'network' => 'author-network'];
$fields['owner'] = ['url' => 'owner-link', 'name' => 'owner-name',
'thumb' => 'owner-avatar', 'nick' => 'owner-nick'];
'thumb' => 'owner-avatar', 'nick' => 'owner-nick', 'network' => 'owner-network'];
$fields['contact'] = ['url' => 'contact-link', 'name' => 'contact-name', 'thumb' => 'contact-avatar',
'writable', 'self', 'id' => 'cid', 'alias', 'uid' => 'contact-uid',
@ -459,7 +473,7 @@ class Item extends BaseObject
*
* @return string The SQL joins for the "select" functions
*/
private static function constructJoins($uid, $sql_commands, $thread_mode)
private static function constructJoins($uid, $sql_commands, $thread_mode, $user_mode)
{
if ($thread_mode) {
$master_table = "`thread`";
@ -471,14 +485,26 @@ class Item extends BaseObject
$joins = '';
}
$joins .= sprintf("STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`
AND NOT `contact`.`blocked`
AND ((NOT `contact`.`readonly` AND NOT `contact`.`pending` AND (`contact`.`rel` IN (%s, %s)))
OR `contact`.`self` OR (`item`.`id` != `item`.`parent`) OR `contact`.`uid` = 0)
STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id` AND NOT `author`.`blocked`
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id` AND NOT `owner`.`blocked`
LEFT JOIN `user-item` ON `user-item`.`iid` = $master_table_key AND `user-item`.`uid` = %d",
CONTACT_IS_SHARING, CONTACT_IS_FRIEND, intval($uid));
if ($user_mode) {
$joins .= sprintf("STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`
AND NOT `contact`.`blocked`
AND ((NOT `contact`.`readonly` AND NOT `contact`.`pending` AND (`contact`.`rel` IN (%s, %s)))
OR `contact`.`self` OR (`item`.`id` != `item`.`parent`) OR `contact`.`uid` = 0)
STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id` AND NOT `author`.`blocked`
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id` AND NOT `owner`.`blocked`
LEFT JOIN `user-item` ON `user-item`.`iid` = $master_table_key AND `user-item`.`uid` = %d",
CONTACT_IS_SHARING, CONTACT_IS_FRIEND, intval($uid));
} else {
if (strpos($sql_commands, "`contact`.") !== false) {
$joins .= "STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`";
}
if (strpos($sql_commands, "`author`.") !== false) {
$joins .= " STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id`";
}
if (strpos($sql_commands, "`owner`.") !== false) {
$joins .= " STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id`";
}
}
if (strpos($sql_commands, "`group_member`.") !== false) {
$joins .= " STRAIGHT_JOIN `group_member` ON `group_member`.`contact-id` = $master_table.`contact-id`";
@ -521,11 +547,21 @@ class Item extends BaseObject
*/
private static function constructSelectFields($fields, $selected)
{
// To be able to fetch the tags we need the item id
if (in_array('tag', $selected) && !in_array('id', $selected)) {
$selected[] = 'id';
}
// To be able to fetch the files we need the item id
if (in_array('file', $selected) && !in_array('id', $selected)) {
$selected[] = 'id';
}
$selection = [];
foreach ($fields as $table => $table_fields) {
foreach ($table_fields as $field => $select) {
if (empty($selected) || in_array($select, $selected)) {
if (in_array($select, self::CONTENT_FIELDLIST)) {
if (in_array($select, self::MIXED_CONTENT_FIELDLIST)) {
$selection[] = "`item`.`".$select."` AS `item-" . $select . "`";
}
if (is_int($field)) {
@ -590,16 +626,30 @@ class Item extends BaseObject
// We cannot simply expand the condition to check for origin entries
// The condition needn't to be a simple array but could be a complex condition.
// And we have to execute this query before the update to ensure to fetch the same data.
$items = dba::select('item', ['id', 'origin', 'uri', 'plink'], $condition);
$items = dba::select('item', ['id', 'origin', 'uri', 'plink', 'icid'], $condition);
$content_fields = [];
foreach (self::CONTENT_FIELDLIST as $field) {
foreach (array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST) as $field) {
if (isset($fields[$field])) {
$content_fields[$field] = $fields[$field];
unset($fields[$field]);
}
}
if (array_key_exists('tag', $fields)) {
$tags = $fields['tag'];
unset($fields['tag']);
} else {
$tags = '';
}
if (array_key_exists('file', $fields)) {
$files = $fields['file'];
unset($fields['file']);
} else {
$files = '';
}
if (!empty($fields)) {
$success = dba::update('item', $fields, $condition);
@ -618,8 +668,29 @@ class Item extends BaseObject
$content_fields['plink'] = $item['plink'];
}
self::updateContent($content_fields, ['uri' => $item['uri']]);
Term::insertFromTagFieldByItemId($item['id']);
Term::insertFromFileFieldByItemId($item['id']);
if (empty($item['icid'])) {
$item_content = dba::selectFirst('item-content', [], ['uri' => $item['uri']]);
if (DBM::is_result($item_content)) {
$item_fields = ['icid' => $item_content['id']];
// Clear all fields in the item table that have a content in the item-content table
foreach ($item_content as $field => $content) {
if (in_array($field, self::MIXED_CONTENT_FIELDLIST) && !empty($item_content[$field])) {
$item_fields[$field] = '';
}
}
dba::update('item', $item_fields, ['id' => $item['id']]);
}
}
if (!empty($tags)) {
Term::insertFromTagFieldByItemId($item['id'], $tags);
}
if (!empty($files)) {
Term::insertFromFileFieldByItemId($item['id'], $files);
}
self::updateThread($item['id']);
// We only need to notfiy others when it is an original entry from us.
@ -689,7 +760,7 @@ class Item extends BaseObject
$fields = ['id', 'uri', 'uid', 'parent', 'parent-uri', 'origin',
'deleted', 'file', 'resource-id', 'event-id', 'attach',
'verb', 'object-type', 'object', 'target', 'contact-id'];
$item = dba::selectFirst('item', $fields, ['id' => $item_id]);
$item = self::selectFirst($fields, ['id' => $item_id]);
if (!DBM::is_result($item)) {
logger('Item with ID ' . $item_id . " hasn't been found.", LOGGER_DEBUG);
return false;
@ -700,7 +771,7 @@ class Item extends BaseObject
return false;
}
$parent = dba::selectFirst('item', ['origin'], ['id' => $item['parent']]);
$parent = self::selectFirst(['origin'], ['id' => $item['parent']]);
if (!DBM::is_result($parent)) {
$parent = ['origin' => false];
}
@ -749,11 +820,15 @@ class Item extends BaseObject
self::deleteTagsFromItem($item);
// Set the item to "deleted"
dba::update('item', ['deleted' => true, 'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()],
['id' => $item['id']]);
// This erasing of item content is superfluous for items with a matching item-content.
// But for the next time we will still have old content in the item table.
$item_fields = ['deleted' => true, 'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow(),
'body' => '', 'title' => '', 'content-warning' => '', 'rendered-hash' => '', 'rendered-html' => '',
'object' => '', 'target' => '', 'tag' => '', 'postopts' => '', 'attach' => '', 'file' => ''];
dba::update('item', $item_fields, ['id' => $item['id']]);
Term::insertFromTagFieldByItemId($item['id']);
Term::insertFromFileFieldByItemId($item['id']);
Term::insertFromTagFieldByItemId($item['id'], '');
Term::insertFromFileFieldByItemId($item['id'], '');
self::deleteThread($item['id'], $item['parent-uri']);
if (!self::exists(["`uri` = ? AND `uid` != 0 AND NOT `deleted`", $item['uri']])) {
@ -776,7 +851,7 @@ class Item extends BaseObject
} elseif ($item['uid'] != 0) {
// When we delete just our local user copy of an item, we have to set a marker to hide it
$global_item = dba::selectFirst('item', ['id'], ['uri' => $item['uri'], 'uid' => 0, 'deleted' => false]);
$global_item = self::selectFirst(['id'], ['uri' => $item['uri'], 'uid' => 0, 'deleted' => false]);
if (DBM::is_result($global_item)) {
dba::update('user-item', ['hidden' => true], ['iid' => $global_item['id'], 'uid' => $item['uid']], true);
}
@ -800,7 +875,7 @@ class Item extends BaseObject
return;
}
$i = dba::selectFirst('item', ['id', 'contact-id', 'tag'], ['uri' => $xt->id, 'uid' => $item['uid']]);
$i = self::selectFirst(['id', 'contact-id', 'tag'], ['uri' => $xt->id, 'uid' => $item['uid']]);
if (!DBM::is_result($i)) {
return;
}
@ -1016,7 +1091,7 @@ class Item extends BaseObject
$condition = ["`uri` = ? AND `uid` = ? AND `network` IN (?, ?, ?)",
trim($item['uri']), $item['uid'],
NETWORK_DIASPORA, NETWORK_DFRN, NETWORK_OSTATUS];
$existing = dba::selectFirst('item', ['id', 'network'], $condition);
$existing = self::selectFirst(['id', 'network'], $condition);
if (DBM::is_result($existing)) {
// We only log the entries with a different user id than 0. Otherwise we would have too many false positives
if ($uid != 0) {
@ -1027,7 +1102,7 @@ class Item extends BaseObject
}
}
self::addLanguageInPostopts($item);
self::addLanguageToItemArray($item);
$item['wall'] = intval(defaults($item, 'wall', 0));
$item['extid'] = trim(defaults($item, 'extid', ''));
@ -1173,7 +1248,7 @@ class Item extends BaseObject
'wall', 'private', 'forum_mode', 'origin'];
$condition = ['uri' => $item['parent-uri'], 'uid' => $item['uid']];
$params = ['order' => ['id' => false]];
$parent = dba::selectFirst('item', $fields, $condition, $params);
$parent = self::selectFirst($fields, $condition, $params);
if (DBM::is_result($parent)) {
// is the new message multi-level threaded?
@ -1187,7 +1262,7 @@ class Item extends BaseObject
'parent-uri' => $item['parent-uri'],
'uid' => $item['uid']];
$params = ['order' => ['id' => false]];
$toplevel_parent = dba::selectFirst('item', $fields, $condition, $params);
$toplevel_parent = self::selectFirst($fields, $condition, $params);
if (DBM::is_result($toplevel_parent)) {
$parent = $toplevel_parent;
@ -1332,8 +1407,24 @@ class Item extends BaseObject
logger('' . print_r($item,true), LOGGER_DATA);
dba::transaction();
if (array_key_exists('tag', $item)) {
$tags = $item['tag'];
unset($item['tag']);
} else {
$tags = '';
}
if (array_key_exists('file', $item)) {
$files = $item['file'];
unset($item['file']);
} else {
$files = '';
}
// We are doing this outside of the transaction to avoid timing problems
self::insertContent($item);
dba::transaction();
$ret = dba::insert('item', $item);
// When the item was successfully stored we fetch the ID of the item.
@ -1404,7 +1495,7 @@ class Item extends BaseObject
// update the commented timestamp on the parent
// Only update "commented" if it is really a comment
if (($item['verb'] == ACTIVITY_POST) || !Config::get("system", "like_no_comment")) {
if (($item['gravity'] != GRAVITY_ACTIVITY) || !Config::get("system", "like_no_comment")) {
dba::update('item', ['commented' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
} else {
dba::update('item', ['changed' => DateTimeFormat::utcNow()], ['id' => $parent_id]);
@ -1437,7 +1528,7 @@ class Item extends BaseObject
* in it.
*/
if (!$deleted && !$dontcache) {
$posted_item = dba::selectFirst('item', [], ['id' => $current_post]);
$posted_item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $current_post]);
if (DBM::is_result($posted_item)) {
if ($notify) {
Addon::callHooks('post_local_end', $posted_item);
@ -1461,8 +1552,13 @@ class Item extends BaseObject
* Due to deadlock issues with the "term" table we are doing these steps after the commit.
* This is not perfect - but a workable solution until we found the reason for the problem.
*/
Term::insertFromTagFieldByItemId($current_post);
Term::insertFromFileFieldByItemId($current_post);
if (!empty($tags)) {
Term::insertFromTagFieldByItemId($current_post, $tags);
}
if (!empty($files)) {
Term::insertFromFileFieldByItemId($current_post, $files);
}
if ($item['parent-uri'] === $item['uri']) {
self::addShadow($current_post);
@ -1491,24 +1587,51 @@ class Item extends BaseObject
$fields = ['uri' => $item['uri'], 'plink' => $item['plink'],
'uri-plink-hash' => hash('sha1', $item['plink']).hash('sha1', $item['uri'])];
unset($item['plink']);
foreach (self::CONTENT_FIELDLIST as $field) {
foreach (array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST) as $field) {
if (isset($item[$field])) {
$fields[$field] = $item[$field];
unset($item[$field]);
}
}
// Do we already have this content?
if (!dba::exists('item-content', ['uri' => $item['uri']])) {
dba::insert('item-content', $fields, true);
// To avoid timing problems, we are using locks.
$locked = Lock::set('item_insert_content');
if (!$locked) {
logger("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
}
// Do we already have this content?
$item_content = dba::selectFirst('item-content', ['id'], ['uri' => $item['uri']]);
if (DBM::is_result($item_content)) {
$item['icid'] = $item_content['id'];
logger('Insert content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
logger('Fetched content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
} elseif (dba::insert('item-content', $fields)) {
$item['icid'] = dba::lastInsertId();
logger('Inserted content for URI ' . $item['uri'] . ' (' . $item['icid'] . ')');
} else {
// By setting the ICID value through the worker we should avoid timing problems.
// When the locking works, this shouldn't be needed. But better be prepared.
Worker::add(PRIORITY_HIGH, 'SetItemContentID', $item['uri']);
logger('Could not insert content for URI ' . $item['uri'] . ' - trying asynchronously');
}
if ($locked) {
Lock::remove('item_insert_content');
}
}
/**
* @brief Set the item content id for a given URI
*
* @param string $uri The item URI
*/
public static function setICIDforURI($uri)
{
$item_content = dba::selectFirst('item-content', ['id'], ['uri' => $uri]);
if (DBM::is_result($item_content)) {
dba::update('item', ['icid' => $item_content['id']], ['icid' => 0, 'uri' => $uri]);
logger('Asynchronously set item content id for URI ' . $uri . ' (' . $item_content['id'] . ') - Affected: '. (int)dba::affected_rows());
} else {
logger('No item-content found for URI ' . $uri);
}
}
@ -1522,7 +1645,7 @@ class Item extends BaseObject
{
// We have to select only the fields from the "item-content" table
$fields = [];
foreach (self::CONTENT_FIELDLIST as $field) {
foreach (array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST) as $field) {
if (isset($item[$field])) {
$fields[$field] = $item[$field];
}
@ -1533,8 +1656,10 @@ class Item extends BaseObject
}
if (!empty($item['plink'])) {
$fields['plink'] = $item['plink'];
$fields['uri-plink-hash'] = hash('sha1', $item['plink']) . hash('sha1', $condition['uri']);
} else {
// Ensure that we don't delete the plink
unset($fields['plink']);
}
logger('Update content for URI ' . $condition['uri']);
@ -1551,7 +1676,7 @@ class Item extends BaseObject
public static function distribute($itemid, $signed_text = '')
{
$condition = ["`id` IN (SELECT `parent` FROM `item` WHERE `id` = ?)", $itemid];
$parent = dba::selectFirst('item', ['owner-id'], $condition);
$parent = self::selectFirst(['owner-id'], $condition);
if (!DBM::is_result($parent)) {
return;
}
@ -1584,7 +1709,7 @@ class Item extends BaseObject
$origin_uid = 0;
if ($item['uri'] != $item['parent-uri']) {
$parents = dba::select('item', ['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
$parents = self::select(['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
while ($parent = dba::fetch($parents)) {
$users[$parent['uid']] = $parent['uid'];
if ($parent['origin'] && !$item['origin']) {
@ -1663,9 +1788,9 @@ class Item extends BaseObject
*/
public static function addShadow($itemid)
{
$fields = ['uid', 'private', 'moderated', 'visible', 'deleted', 'network'];
$fields = ['uid', 'private', 'moderated', 'visible', 'deleted', 'network', 'uri'];
$condition = ['id' => $itemid, 'parent' => [0, $itemid]];
$item = dba::selectFirst('item', $fields, $condition);
$item = self::selectFirst($fields, $condition);
if (!DBM::is_result($item)) {
return;
@ -1686,36 +1811,36 @@ class Item extends BaseObject
return;
}
if (self::exists(['uri' => $item['uri'], 'uid' => 0])) {
return;
}
$item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]);
if (DBM::is_result($item) && ($item["allow_cid"] == '') && ($item["allow_gid"] == '') &&
($item["deny_cid"] == '') && ($item["deny_gid"] == '')) {
if (!self::exists(['uri' => $item['uri'], 'uid' => 0])) {
// Preparing public shadow (removing user specific data)
$item['uid'] = 0;
unset($item['id']);
unset($item['parent']);
unset($item['wall']);
unset($item['mention']);
unset($item['origin']);
unset($item['starred']);
if ($item['uri'] == $item['parent-uri']) {
$item['contact-id'] = $item['owner-id'];
} else {
$item['contact-id'] = $item['author-id'];
}
if (in_array($item['type'], ["net-comment", "wall-comment"])) {
$item['type'] = 'remote-comment';
} elseif ($item['type'] == 'wall') {
$item['type'] = 'remote';
}
$public_shadow = self::insert($item, false, false, true);
logger("Stored public shadow for thread ".$itemid." under id ".$public_shadow, LOGGER_DEBUG);
if (DBM::is_result($item)) {
// Preparing public shadow (removing user specific data)
$item['uid'] = 0;
unset($item['id']);
unset($item['parent']);
unset($item['wall']);
unset($item['mention']);
unset($item['origin']);
unset($item['starred']);
if ($item['uri'] == $item['parent-uri']) {
$item['contact-id'] = $item['owner-id'];
} else {
$item['contact-id'] = $item['author-id'];
}
if (in_array($item['type'], ["net-comment", "wall-comment"])) {
$item['type'] = 'remote-comment';
} elseif ($item['type'] == 'wall') {
$item['type'] = 'remote';
}
$public_shadow = self::insert($item, false, false, true);
logger("Stored public shadow for thread ".$itemid." under id ".$public_shadow, LOGGER_DEBUG);
}
}
@ -1786,39 +1911,19 @@ class Item extends BaseObject
}
/**
* Adds a "lang" specification in a "postopts" element of given $arr,
* if possible and not already present.
* Adds a language specification in a "language" element of given $arr.
* Expects "body" element to exist in $arr.
*/
private static function addLanguageInPostopts(&$item)
private static function addLanguageToItemArray(&$item)
{
$postopts = "";
if (!empty($item['postopts'])) {
if (strstr($item['postopts'], 'lang=')) {
// do not override
return;
}
$postopts = $item['postopts'];
}
$naked_body = Text\BBCode::toPlaintext($item['body'], false);
$languages = (new Text_LanguageDetect())->detect($naked_body, 3);
$ld = new Text_LanguageDetect();
$ld->setNameMode(2);
$languages = $ld->detect($naked_body, 3);
if (sizeof($languages) > 0) {
if ($postopts != '') {
$postopts .= '&'; // arbitrary separator, to be reviewed
}
$postopts .= 'lang=';
$sep = "";
foreach ($languages as $language => $score) {
$postopts .= $sep . $language . ";" . $score;
$sep = ':';
}
$item['postopts'] = $postopts;
if (is_array($languages)) {
$item['language'] = json_encode($languages);
}
}
@ -1991,7 +2096,7 @@ class Item extends BaseObject
public static function getGuidById($id)
{
$item = dba::selectFirst('item', ['guid'], ['id' => $id]);
$item = self::selectFirst(['guid'], ['id' => $id]);
if (DBM::is_result($item)) {
return $item['guid'];
} else {
@ -2025,8 +2130,6 @@ class Item extends BaseObject
$item = dba::fetch_first("SELECT `item`.`id`, `user`.`nickname` FROM `item`
INNER JOIN `user` ON `user`.`uid` = `item`.`uid`
WHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`
AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = ''
AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
AND NOT `item`.`private` AND `item`.`wall`
AND `item`.`guid` = ?", $guid);
if (DBM::is_result($item)) {
@ -2055,7 +2158,7 @@ class Item extends BaseObject
$community_page = (($user['page-flags'] == PAGE_COMMUNITY) ? true : false);
$prvgroup = (($user['page-flags'] == PAGE_PRVGROUP) ? true : false);
$item = dba::selectFirst('item', [], ['id' => $item_id]);
$item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $item_id]);
if (!DBM::is_result($item)) {
return;
}
@ -2328,17 +2431,8 @@ class Item extends BaseObject
private static function hasPermissions($obj)
{
return (
(
x($obj, 'allow_cid')
) || (
x($obj, 'allow_gid')
) || (
x($obj, 'deny_cid')
) || (
x($obj, 'deny_gid')
)
);
return !empty($obj['allow_cid']) || !empty($obj['allow_gid']) ||
!empty($obj['deny_cid']) || !empty($obj['deny_gid']);
}
private static function samePermissions($obj1, $obj2)
@ -2404,74 +2498,79 @@ class Item extends BaseObject
return;
}
$condition = ["`uid` = ? AND NOT `deleted` AND `id` = `parent` AND `gravity` = ?",
$uid, GRAVITY_PARENT];
/*
* $expire_network_only = save your own wall posts
* and just expire conversations started by others
*/
$expire_network_only = PConfig::get($uid,'expire', 'network_only');
$sql_extra = (intval($expire_network_only) ? " AND wall = 0 " : "");
$expire_network_only = PConfig::get($uid, 'expire', 'network_only', false);
if ($expire_network_only) {
$condition[0] .= " AND NOT `wall`";
}
if ($network != "") {
$sql_extra .= sprintf(" AND network = '%s' ", dbesc($network));
$condition[0] .= " AND `network` = ?";
$condition[] = $network;
/*
* There is an index "uid_network_received" but not "uid_network_created"
* This avoids the creation of another index just for one purpose.
* And it doesn't really matter wether to look at "received" or "created"
*/
$range = "AND `received` < UTC_TIMESTAMP() - INTERVAL %d DAY ";
$condition[0] .= " AND `received` < UTC_TIMESTAMP() - INTERVAL ? DAY";
$condition[] = $days;
} else {
$range = "AND `created` < UTC_TIMESTAMP() - INTERVAL %d DAY ";
$condition[0] .= " AND `created` < UTC_TIMESTAMP() - INTERVAL ? DAY";
$condition[] = $days;
}
$r = q("SELECT `file`, `resource-id`, `starred`, `type`, `id` FROM `item`
WHERE `uid` = %d $range
AND `id` = `parent`
$sql_extra
AND `deleted` = 0",
intval($uid),
intval($days)
);
$items = self::select(['file', 'resource-id', 'starred', 'type', 'id'], $condition);
if (!DBM::is_result($r)) {
if (!DBM::is_result($items)) {
return;
}
$expire_items = PConfig::get($uid, 'expire', 'items', 1);
$expire_items = PConfig::get($uid, 'expire', 'items', true);
// Forcing expiring of items - but not notes and marked items
if ($force) {
$expire_items = true;
}
$expire_notes = PConfig::get($uid, 'expire', 'notes', 1);
$expire_starred = PConfig::get($uid, 'expire', 'starred', 1);
$expire_photos = PConfig::get($uid, 'expire', 'photos', 0);
$expire_notes = PConfig::get($uid, 'expire', 'notes', true);
$expire_starred = PConfig::get($uid, 'expire', 'starred', true);
$expire_photos = PConfig::get($uid, 'expire', 'photos', false);
logger('User '.$uid.': expire: # items=' . count($r). "; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
foreach ($r as $item) {
$expired = 0;
while ($item = Item::fetch($items)) {
// don't expire filed items
if (strpos($item['file'],'[') !== false) {
if (strpos($item['file'], '[') !== false) {
continue;
}
// Only expire posts, not photos and photo comments
if ($expire_photos == 0 && strlen($item['resource-id'])) {
if (!$expire_photos && strlen($item['resource-id'])) {
continue;
} elseif ($expire_starred == 0 && intval($item['starred'])) {
} elseif (!$expire_starred && intval($item['starred'])) {
continue;
} elseif ($expire_notes == 0 && $item['type'] == 'note') {
} elseif (!$expire_notes && $item['type'] == 'note') {
continue;
} elseif ($expire_items == 0 && $item['type'] != 'note') {
} elseif (!$expire_items && $item['type'] != 'note') {
continue;
}
self::deleteById($item['id'], PRIORITY_LOW);
++$expired;
}
dba::close($items);
logger('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
}
public static function firstPostDate($uid, $wall = false)
@ -2541,7 +2640,7 @@ class Item extends BaseObject
logger('like: verb ' . $verb . ' item ' . $item_id);
$item = dba::selectFirst('item', [], ['`id` = ? OR `uri` = ?', $item_id, $item_id]);
$item = self::selectFirst(self::ITEM_FIELDLIST, ['`id` = ? OR `uri` = ?', $item_id, $item_id]);
if (!DBM::is_result($item)) {
logger('like: unknown item ' . $item_id);
return false;
@ -2596,7 +2695,7 @@ class Item extends BaseObject
}
$base_condition = ['verb' => $verbs, 'deleted' => false, 'gravity' => GRAVITY_ACTIVITY,
'author-id' => $author_contact['id'], 'uid' => item['uid']];
'author-id' => $author_contact['id'], 'uid' => $item['uid']];
$condition = array_merge($base_condition, ['parent' => $item_id]);
$like_item = self::selectFirst(['id', 'guid', 'verb'], $condition);
@ -2718,7 +2817,7 @@ EOT;
'moderated', 'visible', 'starred', 'bookmark', 'contact-id',
'deleted', 'origin', 'forum_mode', 'mention', 'network', 'author-id', 'owner-id'];
$condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];
$item = dba::selectFirst('item', $fields, $condition);
$item = self::selectFirst($fields, $condition);
if (!DBM::is_result($item)) {
return;
@ -2740,7 +2839,7 @@ EOT;
'deleted', 'origin', 'forum_mode', 'network', 'author-id', 'owner-id'];
$condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];
$item = dba::selectFirst('item', $fields, $condition);
$item = self::selectFirst($fields, $condition);
if (!DBM::is_result($item)) {
return;
}

View file

@ -710,7 +710,7 @@ class Profile
'$classtoday' => $classtoday,
'$count' => count($r),
'$event_reminders' => L10n::t('Event Reminders'),
'$event_title' => L10n::t('Events this week:'),
'$event_title' => L10n::t('Upcoming events the next 7 days:'),
'$events' => $r,
]);
}

View file

@ -15,7 +15,42 @@ require_once 'include/dba.php';
class Term
{
public static function insertFromTagFieldByItemId($itemid)
public static function tagTextFromItemId($itemid)
{
$tag_text = '';
$condition = ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_HASHTAG, TERM_MENTION]];
$tags = dba::select('term', [], $condition);
while ($tag = dba::fetch($tags)) {
if ($tag_text != '') {
$tag_text .= ',';
}
if ($tag['type'] == 1) {
$tag_text .= '#';
} else {
$tag_text .= '@';
}
$tag_text .= '[url=' . $tag['url'] . ']' . $tag['term'] . '[/url]';
}
return $tag_text;
}
public static function fileTextFromItemId($itemid)
{
$file_text = '';
$condition = ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_FILE, TERM_CATEGORY]];
$tags = dba::select('term', [], $condition);
while ($tag = dba::fetch($tags)) {
if ($tag['type'] == TERM_CATEGORY) {
$file_text .= '<' . $tag['term'] . '>';
} else {
$file_text .= '[' . $tag['term'] . ']';
}
}
return $file_text;
}
public static function insertFromTagFieldByItemId($itemid, $tags)
{
$profile_base = System::baseUrl();
$profile_data = parse_url($profile_base);
@ -23,12 +58,14 @@ class Term
$profile_base_friendica = $profile_data['host'] . $profile_path . '/profile/';
$profile_base_diaspora = $profile_data['host'] . $profile_path . '/u/';
$fields = ['guid', 'uid', 'id', 'edited', 'deleted', 'created', 'received', 'title', 'body', 'tag', 'parent'];
$fields = ['guid', 'uid', 'id', 'edited', 'deleted', 'created', 'received', 'title', 'body', 'parent'];
$message = Item::selectFirst($fields, ['id' => $itemid]);
if (!DBM::is_result($message)) {
return;
}
$message['tag'] = $tags;
// Clean up all tags
dba::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_HASHTAG, TERM_MENTION]]);
@ -57,14 +94,14 @@ class Term
$pattern = '/\W\#([^\[].*?)[\s\'".,:;\?!\[\]\/]/ism';
if (preg_match_all($pattern, $data, $matches)) {
foreach ($matches[1] as $match) {
$tags['#' . strtolower($match)] = '';
$tags['#' . $match] = '';
}
}
$pattern = '/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism';
if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$tags[$match[1] . strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
$tags[$match[1] . trim($match[3], ',.:;[]/\"?!')] = $match[2];
}
}
@ -128,9 +165,9 @@ class Term
* @param integer $itemid item id
* @return void
*/
public static function insertFromFileFieldByItemId($itemid)
public static function insertFromFileFieldByItemId($itemid, $files)
{
$message = Item::selectFirst(['uid', 'deleted', 'file'], ['id' => $itemid]);
$message = Item::selectFirst(['uid', 'deleted'], ['id' => $itemid]);
if (!DBM::is_result($message)) {
return;
}
@ -142,6 +179,8 @@ class Term
return;
}
$message['file'] = $files;
if (preg_match_all("/\[(.*?)\]/ism", $message["file"], $files)) {
foreach ($files[1] as $file) {
dba::insert('term', [
@ -193,12 +232,14 @@ class Term
while ($tag = dba::fetch($taglist)) {
if ($tag["url"] == "") {
$tag["url"] = $searchpath . strtolower($tag["term"]);
$tag["url"] = $searchpath . $tag["term"];
}
$orig_tag = $tag["url"];
$tag["url"] = Contact::magicLinkById($item['author-id'], $tag['url']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$tag["url"] = Contact::magicLinkByContact($author, $tag['url']);
if ($tag["type"] == TERM_HASHTAG) {
if ($orig_tag != $tag["url"]) {

View file

@ -70,8 +70,10 @@ class Post extends BaseObject
}
$this->writable = $this->getDataValue('writable') || $this->getDataValue('self');
$this->redirect_url = Contact::magicLinkById($this->getDataValue('cid'));
$author = ['uid' => 0, 'id' => $this->getDataValue('author-id'),
'network' => $this->getDataValue('author-network'),
'url' => $this->getDataValue('author-link')];
$this->redirect_url = Contact::magicLinkbyContact($author);
if (!$this->isToplevel()) {
$this->threaded = true;
}
@ -203,7 +205,9 @@ class Post extends BaseObject
$profile_name = $item['author-link'];
}
$profile_link = Contact::magicLinkById($item['author-id']);
$author = ['uid' => 0, 'id' => $item['author-id'],
'network' => $item['author-network'], 'url' => $item['author-link']];
$profile_link = Contact::magicLinkbyContact($author);
if (strpos($profile_link, 'redir/') === 0) {
$sparkle = ' sparkle';
}
@ -839,7 +843,7 @@ class Post extends BaseObject
$alias_linkmatch = (($this->getDataValue('alias')) && link_compare($this->getDataValue('alias'), $this->getDataValue('author-link')));
$owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name'));
if ((!$owner_linkmatch) && (!$alias_linkmatch) && (!$owner_namematch)) {
if (!$owner_linkmatch && !$alias_linkmatch && !$owner_namematch) {
// The author url doesn't match the owner (typically the contact)
// and also doesn't match the contact alias.
// The name match is a hack to catch several weird cases where URLs are
@ -852,7 +856,11 @@ class Post extends BaseObject
$this->owner_photo = $this->getDataValue('owner-avatar');
$this->owner_name = $this->getDataValue('owner-name');
$this->wall_to_wall = true;
$this->owner_url = Contact::magicLinkById($this->getDataValue('owner-id'));
$owner = ['uid' => 0, 'id' => $this->getDataValue('owner-id'),
'network' => $this->getDataValue('owner-network'),
'url' => $this->getDataValue('owner-link')];
$this->owner_url = Contact::magicLinkbyContact($owner);
}
}
}

View file

@ -2087,13 +2087,6 @@ class DFRN
logger('Contacts are updated.');
// update items
// This is an extreme performance killer
Item::update(['owner-link' => $relocate["url"]], ['owner-link' => $old["url"], 'uid' => $importer["importer_uid"]]);
Item::update(['author-link' => $relocate["url"]], ['author-link' => $old["url"], 'uid' => $importer["importer_uid"]]);
logger('Items are updated.');
/// @TODO
/// merge with current record, current contents have priority
/// update record, set url-updated

View file

@ -1543,13 +1543,6 @@ class Diaspora
logger('Contacts are updated.');
// update items
// This is an extreme performance killer
Item::update(['owner-link' => $data["url"]], ['owner-link' => $contact["url"], 'uid' => $importer["uid"]]);
Item::update(['author-link' => $data["url"]], ['author-link' => $contact["url"], 'uid' => $importer["uid"]]);
logger('Items are updated.');
return true;
}

View file

@ -341,7 +341,7 @@ class OStatus
$header["type"] = "remote";
$header["wall"] = 0;
$header["origin"] = 0;
$header["gravity"] = GRAVITY_PARENT;
$header["gravity"] = GRAVITY_COMMENT;
$first_child = $doc->firstChild->tagName;
@ -683,9 +683,9 @@ class OStatus
}
$item["type"] = 'remote-comment';
$item["gravity"] = GRAVITY_COMMENT;
} else {
$item["parent-uri"] = $item["uri"];
$item["gravity"] = GRAVITY_PARENT;
}
if (($item['author-link'] != '') && !empty($item['protocol'])) {

View file

@ -0,0 +1,21 @@
<?php
/**
* @file src/Worker/SetItemContentID.php
* @brief This script sets the "icid" value in the item table if it couldn't set before.
*
* This script is started from mod/item.php to fix timing problems.
*/
namespace Friendica\Worker;
use Friendica\Model\Item;
class SetItemContentID {
public static function execute($uri = '') {
if (empty($uri)) {
return;
}
Item::setICIDforURI($uri);
}
}

View file

@ -4,6 +4,7 @@ Abrax
Adam Clark
Adam Jurkiewicz
Adam Magness
Aditoo
AgnesElisa
Albert
Alberto Díaz Tormo
@ -22,6 +23,7 @@ André Lohan
Andy H3
Andy Hee
AndyHee
Angristan
Anthronaut
Arian - Cazare Muncitori
Athalbert
@ -89,6 +91,7 @@ Gregory Smith
Haakon Meland Eriksen
Hans Meine
hauke
Hauke
Hauke Altmann
Hauke Zühl
Herbert Thielen
@ -110,7 +113,6 @@ Josef Moravek
juanman
julia.domagalska
Karel
Karel Vandecandelaere
Karolina
Keith Fernie
Klaus Weidenbach
@ -120,6 +122,7 @@ Lea1995polish
Leberwurscht
Leonard Lausen
Lionel Triay
Lorem Ipsum
Ludovic Grossard
maase2
Magdalena Gazda
@ -144,6 +147,7 @@ Michael Vogel
Michal Šupler
Michalina
Mike Macgirvin
miqrogroove
mytbk
Nicola Spanti
Olaf Conradi
@ -152,13 +156,16 @@ Olivier
Olivier Mehani
Olivier Migeot
Paolo Wave
Pascal
Pascal Deklerck
Pavel Morozov
Perig Gouanvic
PerigGouanvic
peturisfeld
Philipp Holzer
Pierre Rudloff
Piotr Blonkowski
pokerazor
R C
Rabuzarus
Radek
Rafael Garau
@ -172,6 +179,7 @@ Ricardo Pereira
RJ Madsen
Roland Häder
Rui Andrada
RyDroid
S.Krumbholz
Sakałoŭ Alaksiej
Sam
@ -216,11 +224,13 @@ ufic
Vasudev Kamath
Vasya Novikov
vislav
VVelox
Vít Šesták 'v6ak'
Waldemar Stoczkowski
Yasen Pramatarov
ylms
Zach Prezkuta
Zane C. Bowers-Hadley
Zered
zotlabs
zottel

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,17 @@ function string_plural_select_cs($n){
return ($n == 1 && $n % 1 == 0) ? 0 : ($n >= 2 && $n <= 4 && $n % 1 == 0) ? 1: ($n % 1 != 0 ) ? 2 : 3;;
}}
;
$a->strings["Item not found."] = "Položka nenalezena.";
$a->strings["Do you really want to delete this item?"] = "Opravdu chcete smazat tuto položku?";
$a->strings["Yes"] = "Ano";
$a->strings["Cancel"] = "Zrušit";
$a->strings["Permission denied."] = "Přístup odmítnut.";
$a->strings["Archives"] = "Archív";
$a->strings["show more"] = "zobrazit více";
$a->strings["Welcome "] = "Vítejte ";
$a->strings["Please upload a profile photo."] = "Prosím nahrejte profilovou fotografii";
$a->strings["Welcome back "] = "Vítejte zpět ";
$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Formulářový bezpečnostní token nebyl správný. To pravděpodobně nastalo kvůli tom, že formulář byl otevřen příliš dlouho (>3 hodiny) před jeho odesláním.";
$a->strings["Daily posting limit of %d post reached. The post was rejected."] = [
0 => "Byl dosažen denní limit %d příspěvku. Příspěvek byl odmítnut.",
1 => "Byl dosažen denní limit %d příspěvků. Příspěvek byl odmítnut.",
@ -109,7 +120,6 @@ $a->strings["Permission settings"] = "Nastavení oprávnění";
$a->strings["permissions"] = "oprávnění";
$a->strings["Public post"] = "Veřejný příspěvek";
$a->strings["Preview"] = "Náhled";
$a->strings["Cancel"] = "Zrušit";
$a->strings["Post to Groups"] = "Zveřejnit na Groups";
$a->strings["Post to Contacts"] = "Zveřejnit na Groups";
$a->strings["Private post"] = "Soukromý příspěvek";
@ -199,16 +209,6 @@ $a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "O
$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Obdržel jste [url=%1\$s]žádost o registraci[/url] od '%2\$s'.";
$a->strings["Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)"] = "Celé jméno:\t\t%s\nAdresa stránky:\t\t%s\nPřihlašovací jméno:\t%s (%s)";
$a->strings["Please visit %s to approve or reject the request."] = "Prosím navštivte %s k odsouhlasení nebo k zamítnutí požadavku.";
$a->strings["Item not found."] = "Položka nenalezena.";
$a->strings["Do you really want to delete this item?"] = "Opravdu chcete smazat tuto položku?";
$a->strings["Yes"] = "Ano";
$a->strings["Permission denied."] = "Přístup odmítnut.";
$a->strings["Archives"] = "Archív";
$a->strings["show more"] = "zobrazit více";
$a->strings["Welcome "] = "Vítejte ";
$a->strings["Please upload a profile photo."] = "Prosím nahrejte profilovou fotografii";
$a->strings["Welcome back "] = "Vítejte zpět ";
$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Formulářový bezpečnostní token nebyl správný. To pravděpodobně nastalo kvůli tom, že formulář byl otevřen příliš dlouho (>3 hodiny) před jeho odesláním.";
$a->strings["newer"] = "novější";
$a->strings["older"] = "starší";
$a->strings["first"] = "první";
@ -586,7 +586,6 @@ $a->strings["Friend Confirm URL"] = "URL adresa potvrzení přátelství";
$a->strings["Notification Endpoint URL"] = "Notifikační URL adresa";
$a->strings["Poll/Feed URL"] = "Poll/Feed URL adresa";
$a->strings["New photo from this URL"] = "Nové foto z této URL adresy";
$a->strings["%1\$s welcomes %2\$s"] = "%1\$s vítá %2\$s";
$a->strings["Help:"] = "Nápověda:";
$a->strings["Help"] = "Nápověda";
$a->strings["Not Found"] = "Nenalezen";
@ -619,15 +618,6 @@ $a->strings["The database configuration file \".htconfig.php\" could not be writ
$a->strings["<h1>What next</h1>"] = "<h1>Co dál<h1>";
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the worker."] = "DŮLEŽITÉ: Budete si muset [manuálně] nastavit naplánovaný úkol pro pracovníka.";
$a->strings["Go to your new Friendica node <a href=\"%s/register\">registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel."] = "Přejděte k <a href=\"%s/register\">registrační stránce</a> Vašeho nového serveru Friendica a zaregistrujte se jako nový uživatel. Nezapomeňte použít stejný e-mail, který jste zadal/a jako administrátorský e-mail. To Vám umožní navštívit panel pro administraci stránky.";
$a->strings["Access denied."] = "Přístup odmítnut";
$a->strings["Community option not available."] = "Možnost komunity není dostupná.";
$a->strings["Not available."] = "Není k dispozici.";
$a->strings["Local Community"] = "Lokální komunita";
$a->strings["Posts from local users on this server"] = "Příspěvky od lokálních uživatelů na tomto serveru";
$a->strings["Global Community"] = "Globální komunita";
$a->strings["Posts from users of the whole federated network"] = "Příspěvky od uživatelů z celé federované sítě";
$a->strings["No results."] = "Žádné výsledky.";
$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Tento komunitní proud ukazuje všechny veřejné příspěvky, které tento server přijme. Nemusí odrážet názory uživatelů serveru.";
$a->strings["Profile not found."] = "Profil nenalezen.";
$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "To se může občas stát pokud kontakt byl zažádán oběma osobami a již byl schválen.";
$a->strings["Response from remote site was not understood."] = "Odpověď ze vzdáleného serveru nebyla srozumitelná.";
@ -1507,14 +1497,6 @@ $a->strings["Friendica"] = "Friendica";
$a->strings["GNU Social (Pleroma, Mastodon)"] = "GNU social (Pleroma, Mastodon)";
$a->strings["Diaspora (Socialhome, Hubzilla)"] = "Diaspora (Socialhome, Hubzilla)";
$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - prosím nepoužívejte tento formulář. Místo toho zadejte %s do Vašeho Diaspora vyhledávacího pole.";
$a->strings["Gender:"] = "Pohlaví:";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Domácí stránka:";
$a->strings["Global Directory"] = "Globální adresář";
$a->strings["Find on this site"] = "Nalézt na tomto webu";
$a->strings["Results for:"] = "Výsledky pro:";
$a->strings["Site Directory"] = "Adresář serveru";
$a->strings["No entries (some entries may be hidden)."] = "Žádné záznamy (některé položky mohou být skryty).";
$a->strings["People Search - %s"] = "Vyhledávání lidí - %s";
$a->strings["Forum Search - %s"] = "Vyhledávání ve fóru - %s";
$a->strings["No matches"] = "Žádné shody";
@ -1522,16 +1504,96 @@ $a->strings["Item not found"] = "Položka nenalezena";
$a->strings["Edit post"] = "Upravit příspěvek";
$a->strings["CC: email addresses"] = "skrytá kopie: e-mailové adresy";
$a->strings["Example: bob@example.com, mary@example.com"] = "Příklad: bob@example.com, mary@example.com";
$a->strings["No keywords to match. Please add keywords to your default profile."] = "Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho výchozího profilu.";
$a->strings["is interested in:"] = "se zajímá o:";
$a->strings["Profile Match"] = "Shoda profilu";
$a->strings["Invalid request identifier."] = "Neplatný identifikátor požadavku.";
$a->strings["Discard"] = "Odstranit";
$a->strings["Notifications"] = "Upozornění";
$a->strings["Network Notifications"] = "Upozornění Sítě";
$a->strings["Personal Notifications"] = "Osobní upozornění";
$a->strings["Home Notifications"] = "Upozornění na vstupní straně";
$a->strings["Show Ignored Requests"] = "Zobrazit ignorované žádosti";
$a->strings["Hide Ignored Requests"] = "Skrýt ignorované žádosti";
$a->strings["Notification type:"] = "Typ oznámení:";
$a->strings["Suggested by:"] = "Navrženo:";
$a->strings["Claims to be known to you: "] = "Vaši údajní známí: ";
$a->strings["yes"] = "ano";
$a->strings["no"] = "ne";
$a->strings["Shall your connection be bidirectional or not?"] = "Má Vaše spojení být obousměrné, nebo ne?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Přijetí %s jako přítele dovolí %s odebírat Vaše příspěvky a Vy budete také přijímat aktualizace od nich ve Vašem kanále.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Přijetí %s jako odběratele jim dovolí odebírat Vaše příspěvky, ale nebudete od nich přijímat aktualizace ve Vašem kanále.";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Přijetí %s jako sdílejícího jim dovolí odebírat Vaše příspěvky, ale nebudete od nich přijímat aktualizace ve Vašem kanále.";
$a->strings["Friend"] = "Přítel";
$a->strings["Sharer"] = "Sdílející";
$a->strings["Subscriber"] = "Odběratel";
$a->strings["Gender:"] = "Pohlaví:";
$a->strings["No introductions."] = "Žádné představení.";
$a->strings["Show unread"] = "Zobrazit nepřečtené";
$a->strings["Show all"] = "Zobrazit vše";
$a->strings["No more %s notifications."] = "Žádná další %s oznámení";
$a->strings["Poke/Prod"] = "Šťouchnout/dloubnout";
$a->strings["poke, prod or do other things to somebody"] = "někoho šťouchnout, dloubnout, nebo mu provést jinou věc";
$a->strings["Recipient"] = "Příjemce";
$a->strings["Choose what you wish to do to recipient"] = "Vyberte, co si přejete příjemci udělat";
$a->strings["Make this post private"] = "Změnit tento příspěvek na soukromý";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrace úspěšná. Zkontrolujte prosím svůj e-mail pro další instrukce.";
$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Nepovedlo se odeslat emailovou zprávu. Zde jsou detaily Vašeho účtu:<br> přihlášení: %s<br> heslo: %s<br><br>Své heslo si můžete změnit po přihlášení.";
$a->strings["Registration successful."] = "Registrace byla úspěšná.";
$a->strings["Your registration can not be processed."] = "Vaši registraci nelze zpracovat.";
$a->strings["Your registration is pending approval by the site owner."] = "Vaše registrace čeká na schválení vlastníkem serveru.";
$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Tento formulář můžete (volitelně) vyplnit s pomocí OpenID tím, že vyplníte své OpenID a kliknutete na tlačítko \"Zaregistrovat\".";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé položky.";
$a->strings["Your OpenID (optional): "] = "Vaše OpenID (nepovinné): ";
$a->strings["Include your profile in member directory?"] = "Chcete zahrnout Váš profil v adresáři členů?";
$a->strings["Note for the admin"] = "Poznámka pro administrátora";
$a->strings["Leave a message for the admin, why you want to join this node"] = "Zanechejte administrátorovi zprávu, proč se k tomuto serveru chcete připojit";
$a->strings["Membership on this site is by invitation only."] = "Členství na tomto webu je pouze na pozvání.";
$a->strings["Your invitation code: "] = "Váš kód pozvánky: ";
$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Celé jméno (např. Joe Smith, skutečné či skutečně vypadající):";
$a->strings["Your Email Address: (Initial information will be send there, so this has to be an existing address.)"] = "Vaše e-mailová adresa: (Budou zde poslány počáteční informace, musí to proto být existující adresa.)";
$a->strings["Leave empty for an auto generated password."] = "Ponechte prázdné pro automatické vygenerovaní hesla.";
$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@%s</strong>'."] = "Vyberte si přezdívku pro Váš profil. Musí začínat textovým znakem. Vaše profilová adresa na této stránce bude mít tvar \"<strong>přezdívka@%s</strong>\".";
$a->strings["Choose a nickname: "] = "Vyberte přezdívku:";
$a->strings["Register"] = "Registrovat";
$a->strings["Import your profile to this friendica instance"] = "Import Vašeho profilu do této friendica instance";
$a->strings["Do you really want to delete this suggestion?"] = "Opravdu chcete smazat tento návrh?";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Nejsou dostupné žádné návrhy. Pokud je toto nový server, zkuste to znovu za 24 hodin.";
$a->strings["Ignore/Hide"] = "Ignorovat/skrýt";
$a->strings["Friend Suggestions"] = "Návrhy přátel";
$a->strings["Tag removed"] = "Štítek odstraněn";
$a->strings["Remove Item Tag"] = "Odebrat štítek položky";
$a->strings["Select a tag to remove: "] = "Vyberte štítek k odebrání: ";
$a->strings["Contact wasn't found or can't be unfollowed."] = "Kontakt nebyl nalezen, nebo u něj nemůže být zrušeno sledování.";
$a->strings["Contact unfollowed"] = "Zrušeno sledování kontaktu";
$a->strings["You aren't a friend of this contact."] = "nejste přítelem tohoto kontaktu";
$a->strings["Unfollowing is currently not supported by your network."] = "Zrušení sledování není aktuálně na Vaši síti podporováno.";
$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovte stránku pro zobrazení]";
$a->strings["No contacts."] = "Žádné kontakty.";
$a->strings["Access denied."] = "Přístup odmítnut";
$a->strings["Wall Photos"] = "Fotografie na zdi";
$a->strings["Community option not available."] = "Možnost komunity není dostupná.";
$a->strings["Not available."] = "Není k dispozici.";
$a->strings["Local Community"] = "Lokální komunita";
$a->strings["Posts from local users on this server"] = "Příspěvky od lokálních uživatelů na tomto serveru";
$a->strings["Global Community"] = "Globální komunita";
$a->strings["Posts from users of the whole federated network"] = "Příspěvky od uživatelů z celé federované sítě";
$a->strings["No results."] = "Žádné výsledky.";
$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Tento komunitní proud ukazuje všechny veřejné příspěvky, které tento server přijme. Nemusí odrážet názory uživatelů serveru.";
$a->strings["%1\$s welcomes %2\$s"] = "%1\$s vítá %2\$s";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Domácí stránka:";
$a->strings["Global Directory"] = "Globální adresář";
$a->strings["Find on this site"] = "Nalézt na tomto webu";
$a->strings["Results for:"] = "Výsledky pro:";
$a->strings["Site Directory"] = "Adresář serveru";
$a->strings["No entries (some entries may be hidden)."] = "Žádné záznamy (některé položky mohou být skryty).";
$a->strings["Unable to locate original post."] = "Nelze nalézt původní příspěvek.";
$a->strings["Empty post discarded."] = "Prázdný příspěvek odstraněn.";
$a->strings["Wall Photos"] = "Fotografie na zdi";
$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Tato zpráva vám byla zaslána od %s, člena sociální sítě Friendica.";
$a->strings["You may visit them online at %s"] = "Můžete je navštívit online na adrese %s";
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Pokud nechcete dostávat tyto zprávy, kontaktujte prosím odesilatele odpovědí na tento záznam.";
$a->strings["%s posted an update."] = "%s poslal aktualizaci.";
$a->strings["No keywords to match. Please add keywords to your default profile."] = "Žádná klíčová slova k porovnání. Prosím, přidejte klíčová slova do Vašeho výchozího profilu.";
$a->strings["is interested in:"] = "se zajímá o:";
$a->strings["Profile Match"] = "Shoda profilu";
$a->strings["New Message"] = "Nová zpráva";
$a->strings["Unable to locate contact information."] = "Nepodařilo se najít kontaktní informace.";
$a->strings["Messages"] = "Zprávy";
@ -1580,30 +1642,6 @@ $a->strings["Interesting Links"] = "Zajímavé odkazy";
$a->strings["Starred"] = "S hvězdičkou";
$a->strings["Favourite Posts"] = "Oblíbené přízpěvky";
$a->strings["Personal Notes"] = "Osobní poznámky";
$a->strings["Invalid request identifier."] = "Neplatný identifikátor požadavku.";
$a->strings["Discard"] = "Odstranit";
$a->strings["Notifications"] = "Upozornění";
$a->strings["Network Notifications"] = "Upozornění Sítě";
$a->strings["Personal Notifications"] = "Osobní upozornění";
$a->strings["Home Notifications"] = "Upozornění na vstupní straně";
$a->strings["Show Ignored Requests"] = "Zobrazit ignorované žádosti";
$a->strings["Hide Ignored Requests"] = "Skrýt ignorované žádosti";
$a->strings["Notification type:"] = "Typ oznámení:";
$a->strings["Suggested by:"] = "Navrženo:";
$a->strings["Claims to be known to you: "] = "Vaši údajní známí: ";
$a->strings["yes"] = "ano";
$a->strings["no"] = "ne";
$a->strings["Shall your connection be bidirectional or not?"] = "Má Vaše spojení být obousměrné, nebo ne?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Přijetí %s jako přítele dovolí %s odebírat Vaše příspěvky a Vy budete také přijímat aktualizace od nich ve Vašem kanále.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Přijetí %s jako odběratele jim dovolí odebírat Vaše příspěvky, ale nebudete od nich přijímat aktualizace ve Vašem kanále.";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Přijetí %s jako sdílejícího jim dovolí odebírat Vaše příspěvky, ale nebudete od nich přijímat aktualizace ve Vašem kanále.";
$a->strings["Friend"] = "Přítel";
$a->strings["Sharer"] = "Sdílející";
$a->strings["Subscriber"] = "Odběratel";
$a->strings["No introductions."] = "Žádné představení.";
$a->strings["Show unread"] = "Zobrazit nepřečtené";
$a->strings["Show all"] = "Zobrazit vše";
$a->strings["No more %s notifications."] = "Žádná další %s oznámení";
$a->strings["Photo Albums"] = "Fotoalba";
$a->strings["Recent Photos"] = "Aktuální fotografie";
$a->strings["Upload New Photos"] = "Nahrát nové fotografie";
@ -1651,54 +1689,16 @@ $a->strings["Map"] = "Mapa";
$a->strings["{0} wants to be your friend"] = "{0} chce být Vaším přítelem";
$a->strings["{0} sent you a message"] = "{0} vám poslal zprávu";
$a->strings["{0} requested registration"] = "{0} požaduje registraci";
$a->strings["Poke/Prod"] = "Šťouchnout/dloubnout";
$a->strings["poke, prod or do other things to somebody"] = "někoho šťouchnout, dloubnout, nebo mu provést jinou věc";
$a->strings["Recipient"] = "Příjemce";
$a->strings["Choose what you wish to do to recipient"] = "Vyberte, co si přejete příjemci udělat";
$a->strings["Make this post private"] = "Změnit tento příspěvek na soukromý";
$a->strings["Requested profile is not available."] = "Požadovaný profil není k dispozici.";
$a->strings["%s's timeline"] = "Časová osa %s";
$a->strings["%s's posts"] = "Příspěvky %s";
$a->strings["%s's comments"] = "Komentáře %s";
$a->strings["Tips for New Members"] = "Tipy pro nové členy";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrace úspěšná. Zkontrolujte prosím svůj e-mail pro další instrukce.";
$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Nepovedlo se odeslat emailovou zprávu. Zde jsou detaily Vašeho účtu:<br> přihlášení: %s<br> heslo: %s<br><br>Své heslo si můžete změnit po přihlášení.";
$a->strings["Registration successful."] = "Registrace byla úspěšná.";
$a->strings["Your registration can not be processed."] = "Vaši registraci nelze zpracovat.";
$a->strings["Your registration is pending approval by the site owner."] = "Vaše registrace čeká na schválení vlastníkem serveru.";
$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Tento formulář můžete (volitelně) vyplnit s pomocí OpenID tím, že vyplníte své OpenID a kliknutete na tlačítko \"Zaregistrovat\".";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Pokud nepoužíváte OpenID, nechte prosím toto pole prázdné a vyplňte zbylé položky.";
$a->strings["Your OpenID (optional): "] = "Vaše OpenID (nepovinné): ";
$a->strings["Include your profile in member directory?"] = "Chcete zahrnout Váš profil v adresáři členů?";
$a->strings["Note for the admin"] = "Poznámka pro administrátora";
$a->strings["Leave a message for the admin, why you want to join this node"] = "Zanechejte administrátorovi zprávu, proč se k tomuto serveru chcete připojit";
$a->strings["Membership on this site is by invitation only."] = "Členství na tomto webu je pouze na pozvání.";
$a->strings["Your invitation code: "] = "Váš kód pozvánky: ";
$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Celé jméno (např. Joe Smith, skutečné či skutečně vypadající):";
$a->strings["Your Email Address: (Initial information will be send there, so this has to be an existing address.)"] = "Vaše e-mailová adresa: (Budou zde poslány počáteční informace, musí to proto být existující adresa.)";
$a->strings["Leave empty for an auto generated password."] = "Ponechte prázdné pro automatické vygenerovaní hesla.";
$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@%s</strong>'."] = "Vyberte si přezdívku pro Váš profil. Musí začínat textovým znakem. Vaše profilová adresa na této stránce bude mít tvar \"<strong>přezdívka@%s</strong>\".";
$a->strings["Choose a nickname: "] = "Vyberte přezdívku:";
$a->strings["Register"] = "Registrovat";
$a->strings["Import your profile to this friendica instance"] = "Import Vašeho profilu do této friendica instance";
$a->strings["Only logged in users are permitted to perform a search."] = "Pouze přihlášení uživatelé mohou prohledávat tento server.";
$a->strings["Too Many Requests"] = "Příliš mnoho požadavků";
$a->strings["Only one search per minute is permitted for not logged in users."] = "Nepřihlášení uživatelé mohou vyhledávat pouze jednou za minutu.";
$a->strings["Items tagged with: %s"] = "Položky označené jako: %s";
$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s následuje %3\$s uživatele %2\$s";
$a->strings["Do you really want to delete this suggestion?"] = "Opravdu chcete smazat tento návrh?";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Nejsou dostupné žádné návrhy. Pokud je toto nový server, zkuste to znovu za 24 hodin.";
$a->strings["Ignore/Hide"] = "Ignorovat/skrýt";
$a->strings["Friend Suggestions"] = "Návrhy přátel";
$a->strings["Tag removed"] = "Štítek odstraněn";
$a->strings["Remove Item Tag"] = "Odebrat štítek položky";
$a->strings["Select a tag to remove: "] = "Vyberte štítek k odebrání: ";
$a->strings["Contact wasn't found or can't be unfollowed."] = "Kontakt nebyl nalezen, nebo u něj nemůže být zrušeno sledování.";
$a->strings["Contact unfollowed"] = "Zrušeno sledování kontaktu";
$a->strings["You aren't a friend of this contact."] = "nejste přítelem tohoto kontaktu";
$a->strings["Unfollowing is currently not supported by your network."] = "Zrušení sledování není aktuálně na Vaši síti podporováno.";
$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovte stránku pro zobrazení]";
$a->strings["No contacts."] = "Žádné kontakty.";
$a->strings["default"] = "standardní";
$a->strings["greenzero"] = "zelená nula";
$a->strings["purplezero"] = "fialová nula";
@ -2075,24 +2075,6 @@ $a->strings["Edit group"] = "Editovat skupinu";
$a->strings["Contacts not in any group"] = "Kontakty, které nejsou v žádné skupině";
$a->strings["Create a new group"] = "Vytvořit novou skupinu";
$a->strings["Edit groups"] = "Upravit skupiny";
$a->strings["Drop Contact"] = "Odstranit kontakt";
$a->strings["Organisation"] = "Organizace";
$a->strings["News"] = "Zprávy";
$a->strings["Forum"] = "Fórum";
$a->strings["Connect URL missing."] = "Chybí URL adresa pro připojení.";
$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = "Kontakt nemohl být přidán. Prosím zkontrolujte relevantní přihlašovací údaje sítě na stránce Nastavení -> Sociální sítě.";
$a->strings["This site is not configured to allow communications with other networks."] = "Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními sítěmi.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Nenalezen žádný kompatibilní komunikační protokol nebo kanál.";
$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace.";
$a->strings["An author or name was not found."] = "Autor nebo jméno nenalezeno";
$a->strings["No browser URL could be matched to this address."] = "Této adrese neodpovídá žádné URL prohlížeče.";
$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Není možné namapovat adresu Identity ve stylu @ s žádným možným protokolem ani emailovým kontaktem.";
$a->strings["Use mailto: in front of address to force email check."] = "Použite mailo: před adresou k vynucení emailové kontroly.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Zadaná adresa profilu patří do sítě, která byla na tomto serveru zakázána.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé/osobní sdělení.";
$a->strings["Unable to retrieve contact information."] = "Nepodařilo se získat kontaktní informace.";
$a->strings["%s's birthday"] = "%s má narozeniny";
$a->strings["Happy Birthday %s"] = "Veselé narozeniny, %s";
$a->strings["Starts:"] = "Začíná:";
$a->strings["Finishes:"] = "Končí:";
$a->strings["all-day"] = "celodenní";
@ -2107,38 +2089,6 @@ $a->strings["D g:i A"] = "D g:i A";
$a->strings["g:i A"] = "g:i A";
$a->strings["Show map"] = "Ukázat mapu";
$a->strings["Hide map"] = "Skrýt mapu";
$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s se zúčactní %3\$s %2\$s";
$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s se nezúčastní %3\$s %2\$s";
$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s by se mohl/a zúčastnit %3\$s %2\$s";
$a->strings["Requested account is not available."] = "Požadovaný účet není dostupný.";
$a->strings["Edit profile"] = "Upravit profil";
$a->strings["Atom feed"] = "Kanál Atom";
$a->strings["Manage/edit profiles"] = "Spravovat/upravit profily";
$a->strings["g A l F d"] = "g A l F d";
$a->strings["F d"] = "F d";
$a->strings["[today]"] = "[dnes]";
$a->strings["Birthday Reminders"] = "Připomínka narozenin";
$a->strings["Birthdays this week:"] = "Narozeniny tento týden:";
$a->strings["[No description]"] = "[Žádný popis]";
$a->strings["Event Reminders"] = "Připomenutí událostí";
$a->strings["Events this week:"] = "Události tohoto týdne:";
$a->strings["Member since:"] = "Členem od:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Věk:";
$a->strings["for %1\$d %2\$s"] = "pro %1\$d %2\$s";
$a->strings["Religion:"] = "Náboženství:";
$a->strings["Hobbies/Interests:"] = "Koníčky/zájmy:";
$a->strings["Contact information and Social Networks:"] = "Kontaktní informace a sociální sítě:";
$a->strings["Musical interests:"] = "Hudební vkus:";
$a->strings["Books, literature:"] = "Knihy, literatura:";
$a->strings["Television:"] = "Televize:";
$a->strings["Film/dance/culture/entertainment:"] = "Film/tanec/kultura/zábava:";
$a->strings["Love/Romance:"] = "Láska/romantika";
$a->strings["Work/employment:"] = "Práce/zaměstnání:";
$a->strings["School/education:"] = "Škola/vzdělávání:";
$a->strings["Forums:"] = "Fóra";
$a->strings["Only You Can See This"] = "Toto můžete vidět jen Vy";
$a->strings["Login failed"] = "Přihlášení selhalo";
$a->strings["Not enough information to authenticate"] = "Není dost informací pro autentikaci";
$a->strings["An invitation is required."] = "Pozvánka je vyžadována.";
@ -2164,6 +2114,57 @@ $a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Yo
$a->strings["Registration at %s"] = "Registrace na %s";
$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t\t"] = "\n\t\t\tVážený/á %1\$s,\n\t\t\t\tDěkujeme, že jste se registroval/a na %2\$s. Váš účet byl vytvořen.\n\t\t";
$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%3\$s\n\t\t\tLogin Name:\t\t%1\$s\n\t\t\tPassword:\t\t%5\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %3\$s/removeme\n\n\t\t\tThank you and welcome to %2\$s."] = "\n\t\t\tZde jsou vaše přihlašovací detaily:\n\n\t\t\tAdresa stránky:\t\t%3\$s\n\t\t\tPřihlašovací jméno:\t%1\$s\n\t\t\tHeslo:\t\t\t%5\$s\n\n\t\t\tSvé heslo si po přihlášení můžete změnit na stránce \"Nastavení\" vašeho\n\t\t\túčtu.\n\n\t\t\tProsím, prohlédněte si na chvilku ostatní nastavení účtu na té stránce.\n\n\t\t\tMožná byste si také přáli přidat pár základních informací na svůj výchozí\n\t\t\tprofil (na stránce \"Profily\") aby vás další lidé mohli snadno najít.\n\n\t\t\tDoporučujeme nastavit si vaše celé jméno, přidat profilovou fotku,\n\t\t\tpřidat pár \"klíčových slov\" k profilu (velmi užitečné při získávání nových\n\t\t\tpřátel) - a možná v jaké zemi žijete; pokud nechcete být konkrétnější.\n\n\t\t\tZcela respektujeme vaše právo na soukromí a žádnou z těchto položek\n\t\t\tnení potřeba vyplňovat. Pokud jste zde nový/á a nikoho zde neznáte, mohou vám\n\t\t\tpomoci si získat nové a zajímavé přátele.\n\n\t\t\tPokud byste si někdy přál/a smazat účet, může tak učinit na stránce\n\t\t\t%3\$s/removeme.\n\n\t\t\tDěkujeme vám a vítáme vás na %2\$s.";
$a->strings["Drop Contact"] = "Odstranit kontakt";
$a->strings["Organisation"] = "Organizace";
$a->strings["News"] = "Zprávy";
$a->strings["Forum"] = "Fórum";
$a->strings["Connect URL missing."] = "Chybí URL adresa pro připojení.";
$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = "Kontakt nemohl být přidán. Prosím zkontrolujte relevantní přihlašovací údaje sítě na stránce Nastavení -> Sociální sítě.";
$a->strings["This site is not configured to allow communications with other networks."] = "Tento web není nakonfigurován tak, aby umožňoval komunikaci s ostatními sítěmi.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Nenalezen žádný kompatibilní komunikační protokol nebo kanál.";
$a->strings["The profile address specified does not provide adequate information."] = "Uvedená adresa profilu neposkytuje dostatečné informace.";
$a->strings["An author or name was not found."] = "Autor nebo jméno nenalezeno";
$a->strings["No browser URL could be matched to this address."] = "Této adrese neodpovídá žádné URL prohlížeče.";
$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Není možné namapovat adresu Identity ve stylu @ s žádným možným protokolem ani emailovým kontaktem.";
$a->strings["Use mailto: in front of address to force email check."] = "Použite mailo: před adresou k vynucení emailové kontroly.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Zadaná adresa profilu patří do sítě, která byla na tomto serveru zakázána.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Omezený profil. Tato osoba nebude schopna od Vás přijímat přímé/osobní sdělení.";
$a->strings["Unable to retrieve contact information."] = "Nepodařilo se získat kontaktní informace.";
$a->strings["%s's birthday"] = "%s má narozeniny";
$a->strings["Happy Birthday %s"] = "Veselé narozeniny, %s";
$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s se zúčactní %3\$s %2\$s";
$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s se nezúčastní %3\$s %2\$s";
$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s by se mohl/a zúčastnit %3\$s %2\$s";
$a->strings["Requested account is not available."] = "Požadovaný účet není dostupný.";
$a->strings["Edit profile"] = "Upravit profil";
$a->strings["Atom feed"] = "Kanál Atom";
$a->strings["Manage/edit profiles"] = "Spravovat/upravit profily";
$a->strings["g A l F d"] = "g A l F d";
$a->strings["F d"] = "F d";
$a->strings["[today]"] = "[dnes]";
$a->strings["Birthday Reminders"] = "Připomínka narozenin";
$a->strings["Birthdays this week:"] = "Narozeniny tento týden:";
$a->strings["[No description]"] = "[Žádný popis]";
$a->strings["Event Reminders"] = "Připomenutí událostí";
$a->strings["Upcoming events the next 7 days:"] = "Nadcházející události v příštích 7 dnech:";
$a->strings["Member since:"] = "Členem od:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Věk:";
$a->strings["for %1\$d %2\$s"] = "pro %1\$d %2\$s";
$a->strings["Religion:"] = "Náboženství:";
$a->strings["Hobbies/Interests:"] = "Koníčky/zájmy:";
$a->strings["Contact information and Social Networks:"] = "Kontaktní informace a sociální sítě:";
$a->strings["Musical interests:"] = "Hudební vkus:";
$a->strings["Books, literature:"] = "Knihy, literatura:";
$a->strings["Television:"] = "Televize:";
$a->strings["Film/dance/culture/entertainment:"] = "Film/tanec/kultura/zábava:";
$a->strings["Love/Romance:"] = "Láska/romantika";
$a->strings["Work/employment:"] = "Práce/zaměstnání:";
$a->strings["School/education:"] = "Škola/vzdělávání:";
$a->strings["Forums:"] = "Fóra";
$a->strings["Only You Can See This"] = "Toto můžete vidět jen Vy";
$a->strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s vítá %2\$s";
$a->strings["Sharing notification from Diaspora network"] = "Oznámení o sdílení ze sítě Diaspora";
$a->strings["Attachments:"] = "Přílohy:";
$a->strings["%s is now following %s."] = "%s nyní sleduje %s.";
@ -2225,6 +2226,6 @@ $a->strings["Video"] = "Video";
$a->strings["Delete this item?"] = "Odstranit tuto položku?";
$a->strings["show fewer"] = "zobrazit méně";
$a->strings["No system theme config value set."] = "Není nastavena konfigurační hodnota systémového motivu.";
$a->strings["toggle mobile"] = "přepínat mobilní zobrazení";
$a->strings["%s: Updating author-id and owner-id in item and thread table. "] = "%s: Aktualizuji author-id a owner-id v tabulce položek a vláken.";
$a->strings["Update %s failed. See error logs."] = "Aktualizace %s selhala. Zkontrolujte protokol chyb.";
$a->strings["toggle mobile"] = "přepínat mobilní zobrazení";

File diff suppressed because it is too large Load diff

View file

@ -6,6 +6,17 @@ function string_plural_select_de($n){
return ($n != 1);;
}}
;
$a->strings["Item not found."] = "Beitrag nicht gefunden.";
$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?";
$a->strings["Yes"] = "Ja";
$a->strings["Cancel"] = "Abbrechen";
$a->strings["Permission denied."] = "Zugriff verweigert.";
$a->strings["Archives"] = "Archiv";
$a->strings["show more"] = "mehr anzeigen";
$a->strings["Welcome "] = "Willkommen ";
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
$a->strings["Welcome back "] = "Willkommen zurück ";
$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden).";
$a->strings["Daily posting limit of %d post reached. The post was rejected."] = [
0 => "Das tägliche Limit von %d Beitrag wurde erreicht. Die Nachricht wurde verworfen.",
1 => "Das tägliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.",
@ -103,7 +114,6 @@ $a->strings["Permission settings"] = "Berechtigungseinstellungen";
$a->strings["permissions"] = "Zugriffsrechte";
$a->strings["Public post"] = "Öffentlicher Beitrag";
$a->strings["Preview"] = "Vorschau";
$a->strings["Cancel"] = "Abbrechen";
$a->strings["Post to Groups"] = "Poste an Gruppe";
$a->strings["Post to Contacts"] = "Poste an Kontakte";
$a->strings["Private post"] = "Privater Beitrag";
@ -185,16 +195,6 @@ $a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "D
$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Registrierungsanfrage[/url] von %2\$s erhalten.";
$a->strings["Full Name:\t%s\nSite Location:\t%s\nLogin Name:\t%s (%s)"] = "Kompletter Name: %s\nURL der Seite: %s\nLogin Name: %s(%s)";
$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten.";
$a->strings["Item not found."] = "Beitrag nicht gefunden.";
$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?";
$a->strings["Yes"] = "Ja";
$a->strings["Permission denied."] = "Zugriff verweigert.";
$a->strings["Archives"] = "Archiv";
$a->strings["show more"] = "mehr anzeigen";
$a->strings["Welcome "] = "Willkommen ";
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
$a->strings["Welcome back "] = "Willkommen zurück ";
$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden).";
$a->strings["newer"] = "neuer";
$a->strings["older"] = "älter";
$a->strings["first"] = "erste";
@ -566,7 +566,6 @@ $a->strings["Friend Confirm URL"] = "URL für Bestätigungen von Kontaktanfragen
$a->strings["Notification Endpoint URL"] = "URL-Endpunkt für Benachrichtigungen";
$a->strings["Poll/Feed URL"] = "Pull/Feed-URL";
$a->strings["New photo from this URL"] = "Neues Foto von dieser URL";
$a->strings["%1\$s welcomes %2\$s"] = "%1\$s heißt %2\$s herzlich willkommen";
$a->strings["Help:"] = "Hilfe:";
$a->strings["Help"] = "Hilfe";
$a->strings["Not Found"] = "Nicht gefunden";
@ -599,15 +598,6 @@ $a->strings["The database configuration file \".htconfig.php\" could not be writ
$a->strings["<h1>What next</h1>"] = "<h1>Wie geht es weiter?</h1>";
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the worker."] = "Wichtig: Du musst [manuell] einen Cronjob (o.ä.) für den Worker einrichten.";
$a->strings["Go to your new Friendica node <a href=\"%s/register\">registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel."] = "Du solltest nun die Seite zur <a href=\"%s/register\">Nutzerregistrierung</a> deiner neuen Friendica Instanz besuchen und einen neuen Nutzer einrichten. Bitte denke daran die selbe E-Mail Adresse anzugeben, die du auch als Administrator E-Mail angegeben hast, damit du das Admin-Panel verwenden kannst.";
$a->strings["Access denied."] = "Zugriff verweigert.";
$a->strings["Community option not available."] = "Optionen für die Gemeinschaftsseite nicht verfügbar.";
$a->strings["Not available."] = "Nicht verfügbar.";
$a->strings["Local Community"] = "Lokale Gemeinschaft";
$a->strings["Posts from local users on this server"] = "Beiträge von Nutzern dieses Servers";
$a->strings["Global Community"] = "Globale Gemeinschaft";
$a->strings["Posts from users of the whole federated network"] = "Beiträge von Nutzern des gesamten föderalen Netzwerks";
$a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.";
$a->strings["Profile not found."] = "Profil nicht gefunden.";
$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde.";
$a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich.";
@ -1475,14 +1465,6 @@ $a->strings["Friendica"] = "Friendica";
$a->strings["GNU Social (Pleroma, Mastodon)"] = "GNU Social (Pleroma, Mastodon)";
$a->strings["Diaspora (Socialhome, Hubzilla)"] = "Diaspora (Socialhome, Hubzilla)";
$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste.";
$a->strings["Gender:"] = "Geschlecht:";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Homepage:";
$a->strings["Global Directory"] = "Weltweites Verzeichnis";
$a->strings["Find on this site"] = "Auf diesem Server suchen";
$a->strings["Results for:"] = "Ergebnisse für:";
$a->strings["Site Directory"] = "Verzeichnis";
$a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein).";
$a->strings["People Search - %s"] = "Personensuche - %s";
$a->strings["Forum Search - %s"] = "Forensuche - %s";
$a->strings["No matches"] = "Keine Übereinstimmungen";
@ -1490,16 +1472,96 @@ $a->strings["Item not found"] = "Beitrag nicht gefunden";
$a->strings["Edit post"] = "Beitrag bearbeiten";
$a->strings["CC: email addresses"] = "Cc: E-Mail-Addressen";
$a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com";
$a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu.";
$a->strings["is interested in:"] = "ist interessiert an:";
$a->strings["Profile Match"] = "Profilübereinstimmungen";
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen";
$a->strings["Notifications"] = "Benachrichtigungen";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
$a->strings["Notification type:"] = "Art der Benachrichtigung:";
$a->strings["Suggested by:"] = "Vorgeschlagen von:";
$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: ";
$a->strings["yes"] = "ja";
$a->strings["no"] = "nein";
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Friend"] = "Kontakt";
$a->strings["Sharer"] = "Teilenden";
$a->strings["Subscriber"] = "Abonnent";
$a->strings["Gender:"] = "Geschlecht:";
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
$a->strings["Show unread"] = "Ungelesene anzeigen";
$a->strings["Show all"] = "Alle anzeigen";
$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen";
$a->strings["Poke/Prod"] = "Anstupsen";
$a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen";
$a->strings["Recipient"] = "Empfänger";
$a->strings["Choose what you wish to do to recipient"] = "Was willst Du mit dem Empfänger machen:";
$a->strings["Make this post private"] = "Diesen Beitrag privat machen";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet.";
$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern.";
$a->strings["Registration successful."] = "Registrierung erfolgreich.";
$a->strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden.";
$a->strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden.";
$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst.";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.";
$a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): ";
$a->strings["Include your profile in member directory?"] = "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?";
$a->strings["Note for the admin"] = "Hinweis für den Admin";
$a->strings["Leave a message for the admin, why you want to join this node"] = "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest.";
$a->strings["Membership on this site is by invitation only."] = "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich.";
$a->strings["Your invitation code: "] = "Dein Ein­la­dungs­code";
$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):";
$a->strings["Your Email Address: (Initial information will be send there, so this has to be an existing address.)"] = "Deine E-Mail Adresse (Informationen zur Registrierung werden an diese Adresse gesendet, darum muss sie existieren.)";
$a->strings["Leave empty for an auto generated password."] = "Leer lassen um das Passwort automatisch zu generieren.";
$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@%s</strong>'."] = "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@%s</strong>' sein.";
$a->strings["Choose a nickname: "] = "Spitznamen wählen: ";
$a->strings["Register"] = "Registrieren";
$a->strings["Import your profile to this friendica instance"] = "Importiere Dein Profil auf diese Friendica Instanz";
$a->strings["Do you really want to delete this suggestion?"] = "Möchtest Du wirklich diese Empfehlung löschen?";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen";
$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
$a->strings["Tag removed"] = "Tag entfernt";
$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen";
$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: ";
$a->strings["Contact wasn't found or can't be unfollowed."] = "Der Kontakt konnte nicht gefunden oder nicht entfolgt werden.";
$a->strings["Contact unfollowed"] = "Kontakt wird nicht mehr gefolgt";
$a->strings["You aren't a friend of this contact."] = "Du hast keine beidseitige Freundschaft mit diesem Kontakt.";
$a->strings["Unfollowing is currently not supported by your network."] = "Bei diesem Netzwerk wird das Entfolgen derzeit nicht unterstützt.";
$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]";
$a->strings["No contacts."] = "Keine Kontakte.";
$a->strings["Access denied."] = "Zugriff verweigert.";
$a->strings["Wall Photos"] = "Pinnwand-Bilder";
$a->strings["Community option not available."] = "Optionen für die Gemeinschaftsseite nicht verfügbar.";
$a->strings["Not available."] = "Nicht verfügbar.";
$a->strings["Local Community"] = "Lokale Gemeinschaft";
$a->strings["Posts from local users on this server"] = "Beiträge von Nutzern dieses Servers";
$a->strings["Global Community"] = "Globale Gemeinschaft";
$a->strings["Posts from users of the whole federated network"] = "Beiträge von Nutzern des gesamten föderalen Netzwerks";
$a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.";
$a->strings["%1\$s welcomes %2\$s"] = "%1\$s heißt %2\$s herzlich willkommen";
$a->strings["Status:"] = "Status:";
$a->strings["Homepage:"] = "Homepage:";
$a->strings["Global Directory"] = "Weltweites Verzeichnis";
$a->strings["Find on this site"] = "Auf diesem Server suchen";
$a->strings["Results for:"] = "Ergebnisse für:";
$a->strings["Site Directory"] = "Verzeichnis";
$a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein).";
$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
$a->strings["Wall Photos"] = "Pinnwand-Bilder";
$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest.";
$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
$a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu.";
$a->strings["is interested in:"] = "ist interessiert an:";
$a->strings["Profile Match"] = "Profilübereinstimmungen";
$a->strings["New Message"] = "Neue Nachricht";
$a->strings["Unable to locate contact information."] = "Konnte die Kontaktinformationen nicht finden.";
$a->strings["Messages"] = "Nachrichten";
@ -1544,30 +1606,6 @@ $a->strings["Interesting Links"] = "Interessante Links";
$a->strings["Starred"] = "Markierte";
$a->strings["Favourite Posts"] = "Favorisierte Beiträge";
$a->strings["Personal Notes"] = "Persönliche Notizen";
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen";
$a->strings["Notifications"] = "Benachrichtigungen";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
$a->strings["Notification type:"] = "Art der Benachrichtigung:";
$a->strings["Suggested by:"] = "Vorgeschlagen von:";
$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: ";
$a->strings["yes"] = "ja";
$a->strings["no"] = "nein";
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Friend"] = "Kontakt";
$a->strings["Sharer"] = "Teilenden";
$a->strings["Subscriber"] = "Abonnent";
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
$a->strings["Show unread"] = "Ungelesene anzeigen";
$a->strings["Show all"] = "Alle anzeigen";
$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen";
$a->strings["Photo Albums"] = "Fotoalben";
$a->strings["Recent Photos"] = "Neueste Fotos";
$a->strings["Upload New Photos"] = "Neue Fotos hochladen";
@ -1615,54 +1653,16 @@ $a->strings["Map"] = "Karte";
$a->strings["{0} wants to be your friend"] = "{0} möchte mit Dir in Kontakt treten";
$a->strings["{0} sent you a message"] = "{0} schickte Dir eine Nachricht";
$a->strings["{0} requested registration"] = "{0} möchte sich registrieren";
$a->strings["Poke/Prod"] = "Anstupsen";
$a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen";
$a->strings["Recipient"] = "Empfänger";
$a->strings["Choose what you wish to do to recipient"] = "Was willst Du mit dem Empfänger machen:";
$a->strings["Make this post private"] = "Diesen Beitrag privat machen";
$a->strings["Requested profile is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["%s's timeline"] = "Timeline von %s";
$a->strings["%s's posts"] = "Beiträge von %s";
$a->strings["%s's comments"] = "Kommentare von %s";
$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet.";
$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern.";
$a->strings["Registration successful."] = "Registrierung erfolgreich.";
$a->strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden.";
$a->strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden.";
$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst.";
$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.";
$a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): ";
$a->strings["Include your profile in member directory?"] = "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?";
$a->strings["Note for the admin"] = "Hinweis für den Admin";
$a->strings["Leave a message for the admin, why you want to join this node"] = "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest.";
$a->strings["Membership on this site is by invitation only."] = "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich.";
$a->strings["Your invitation code: "] = "Dein Ein­la­dungs­code";
$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):";
$a->strings["Your Email Address: (Initial information will be send there, so this has to be an existing address.)"] = "Deine E-Mail Adresse (Informationen zur Registrierung werden an diese Adresse gesendet, darum muss sie existieren.)";
$a->strings["Leave empty for an auto generated password."] = "Leer lassen um das Passwort automatisch zu generieren.";
$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@%s</strong>'."] = "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@%s</strong>' sein.";
$a->strings["Choose a nickname: "] = "Spitznamen wählen: ";
$a->strings["Register"] = "Registrieren";
$a->strings["Import your profile to this friendica instance"] = "Importiere Dein Profil auf diese Friendica Instanz";
$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet.";
$a->strings["Too Many Requests"] = "Zu viele Abfragen";
$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.";
$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind";
$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s";
$a->strings["Do you really want to delete this suggestion?"] = "Möchtest Du wirklich diese Empfehlung löschen?";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
$a->strings["Ignore/Hide"] = "Ignorieren/Verbergen";
$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
$a->strings["Tag removed"] = "Tag entfernt";
$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen";
$a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: ";
$a->strings["Contact wasn't found or can't be unfollowed."] = "Der Kontakt konnte nicht gefunden oder nicht entfolgt werden.";
$a->strings["Contact unfollowed"] = "Kontakt wird nicht mehr gefolgt";
$a->strings["You aren't a friend of this contact."] = "Du hast keine beidseitige Freundschaft mit diesem Kontakt.";
$a->strings["Unfollowing is currently not supported by your network."] = "Bei diesem Netzwerk wird das Entfolgen derzeit nicht unterstützt.";
$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]";
$a->strings["No contacts."] = "Keine Kontakte.";
$a->strings["default"] = "Standard";
$a->strings["greenzero"] = "greenzero";
$a->strings["purplezero"] = "purplezero";
@ -2033,24 +2033,6 @@ $a->strings["Edit group"] = "Gruppe bearbeiten";
$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe";
$a->strings["Create a new group"] = "Neue Gruppe erstellen";
$a->strings["Edit groups"] = "Gruppen bearbeiten";
$a->strings["Drop Contact"] = "Kontakt löschen";
$a->strings["Organisation"] = "Organisation";
$a->strings["News"] = "Nachrichten";
$a->strings["Forum"] = "Forum";
$a->strings["Connect URL missing."] = "Connect-URL fehlt";
$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = "Der Kontakt konnte nicht hinzugefügt werden. Bitte überprüfe die Einstellungen unter Einstellungen -> Soziale Netzwerke";
$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden.";
$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen.";
$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können.";
$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
$a->strings["%s's birthday"] = "%ss Geburtstag";
$a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s";
$a->strings["Starts:"] = "Beginnt:";
$a->strings["Finishes:"] = "Endet:";
$a->strings["all-day"] = "ganztägig";
@ -2065,38 +2047,6 @@ $a->strings["D g:i A"] = "D H:i";
$a->strings["g:i A"] = "H:i";
$a->strings["Show map"] = "Karte anzeigen";
$a->strings["Hide map"] = "Karte verbergen";
$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil.";
$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil.";
$a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["Edit profile"] = "Profil bearbeiten";
$a->strings["Atom feed"] = "Atom-Feed";
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
$a->strings["g A l F d"] = "l, d. F G \\U\\h\\r";
$a->strings["F d"] = "d. F";
$a->strings["[today]"] = "[heute]";
$a->strings["Birthday Reminders"] = "Geburtstagserinnerungen";
$a->strings["Birthdays this week:"] = "Geburtstage diese Woche:";
$a->strings["[No description]"] = "[keine Beschreibung]";
$a->strings["Event Reminders"] = "Veranstaltungserinnerungen";
$a->strings["Events this week:"] = "Veranstaltungen diese Woche";
$a->strings["Member since:"] = "Mitglied seit:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Alter:";
$a->strings["for %1\$d %2\$s"] = "für %1\$d %2\$s";
$a->strings["Religion:"] = "Religion:";
$a->strings["Hobbies/Interests:"] = "Hobbies/Interessen:";
$a->strings["Contact information and Social Networks:"] = "Kontaktinformationen und Soziale Netzwerke:";
$a->strings["Musical interests:"] = "Musikalische Interessen:";
$a->strings["Books, literature:"] = "Literatur/Bücher:";
$a->strings["Television:"] = "Fernsehen:";
$a->strings["Film/dance/culture/entertainment:"] = "Filme/Tänze/Kultur/Unterhaltung:";
$a->strings["Love/Romance:"] = "Liebesleben:";
$a->strings["Work/employment:"] = "Arbeit/Beschäftigung:";
$a->strings["School/education:"] = "Schule/Ausbildung:";
$a->strings["Forums:"] = "Foren:";
$a->strings["Only You Can See This"] = "Nur Du kannst das sehen";
$a->strings["Login failed"] = "Anmeldung fehlgeschlagen";
$a->strings["Not enough information to authenticate"] = "Nicht genügend Informationen für die Authentifizierung";
$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
@ -2122,6 +2072,57 @@ $a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Yo
$a->strings["Registration at %s"] = "Registrierung als %s";
$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde eingerichtet.";
$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%3\$s\n\t\t\tLogin Name:\t\t%1\$s\n\t\t\tPassword:\t\t%5\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tIf you ever want to delete your account, you can do so at %3\$s/removeme\n\n\t\t\tThank you and welcome to %2\$s."] = "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3\$s\n\tBenutzernamename:\t%1\$s\n\tPasswort:\t%5\$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nSolltest du dein Nutzerkonto löschen wollen, kannst du dies unter %3\$s/removeme jederzeit tun.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2\$s.";
$a->strings["Drop Contact"] = "Kontakt löschen";
$a->strings["Organisation"] = "Organisation";
$a->strings["News"] = "Nachrichten";
$a->strings["Forum"] = "Forum";
$a->strings["Connect URL missing."] = "Connect-URL fehlt";
$a->strings["The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page."] = "Der Kontakt konnte nicht hinzugefügt werden. Bitte überprüfe die Einstellungen unter Einstellungen -> Soziale Netzwerke";
$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden.";
$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen.";
$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können.";
$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
$a->strings["%s's birthday"] = "%ss Geburtstag";
$a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s";
$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil.";
$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil.";
$a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["Edit profile"] = "Profil bearbeiten";
$a->strings["Atom feed"] = "Atom-Feed";
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
$a->strings["g A l F d"] = "l, d. F G \\U\\h\\r";
$a->strings["F d"] = "d. F";
$a->strings["[today]"] = "[heute]";
$a->strings["Birthday Reminders"] = "Geburtstagserinnerungen";
$a->strings["Birthdays this week:"] = "Geburtstage diese Woche:";
$a->strings["[No description]"] = "[keine Beschreibung]";
$a->strings["Event Reminders"] = "Veranstaltungserinnerungen";
$a->strings["Upcoming events the next 7 days:"] = "Veranstaltungen der nächsten 7 Tage:";
$a->strings["Member since:"] = "Mitglied seit:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Alter:";
$a->strings["for %1\$d %2\$s"] = "für %1\$d %2\$s";
$a->strings["Religion:"] = "Religion:";
$a->strings["Hobbies/Interests:"] = "Hobbies/Interessen:";
$a->strings["Contact information and Social Networks:"] = "Kontaktinformationen und Soziale Netzwerke:";
$a->strings["Musical interests:"] = "Musikalische Interessen:";
$a->strings["Books, literature:"] = "Literatur/Bücher:";
$a->strings["Television:"] = "Fernsehen:";
$a->strings["Film/dance/culture/entertainment:"] = "Filme/Tänze/Kultur/Unterhaltung:";
$a->strings["Love/Romance:"] = "Liebesleben:";
$a->strings["Work/employment:"] = "Arbeit/Beschäftigung:";
$a->strings["School/education:"] = "Schule/Ausbildung:";
$a->strings["Forums:"] = "Foren:";
$a->strings["Only You Can See This"] = "Nur Du kannst das sehen";
$a->strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s heißt %2\$sherzlich willkommen";
$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora";
$a->strings["Attachments:"] = "Anhänge:";
$a->strings["%s is now following %s."] = "%s folgt nun %s";
@ -2181,6 +2182,6 @@ $a->strings["Video"] = "Video";
$a->strings["Delete this item?"] = "Diesen Beitrag löschen?";
$a->strings["show fewer"] = "weniger anzeigen";
$a->strings["No system theme config value set."] = "Es wurde kein Konfigurationswert für das Systemweite Theme gesetzt.";
$a->strings["toggle mobile"] = "auf/von Mobile Ansicht wechseln";
$a->strings["%s: Updating author-id and owner-id in item and thread table. "] = "%s: Aktualisiere die author-id und owner-id in der Thread Tabelle";
$a->strings["Update %s failed. See error logs."] = "Update %s fehlgeschlagen. Bitte Fehlerprotokoll überprüfen.";
$a->strings["toggle mobile"] = "auf/von Mobile Ansicht wechseln";

View file

@ -0,0 +1,99 @@
/*
Licence : AGPL
Created on : 29.06.2018, 15:03:06
Author : hoergen
Color picker : https://www.w3schools.com/colors/colors_names.asp
CSS UTF8 icons : https://www.utf8icons.com
*/
body {
background: url(scheme/plusminus.jpg);
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
height: auto;
}
aside .widget, .form-control, .panel, .nav-container, .wall-item-content, .e-content, .p-name, .topbar, post, shiny, tread-wrapper, #topbar-second {
color: #000;
background-color: #f5f5f5;
}
.form-control {
font-family: ".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Helvetica,Arial,sans-serif;
}
#topbar-first #nav-notifications-menu li.notify-unseen {
border-left: 3px solid #f3fcfd;
background-color: antiquewhite;
}
.birthday-notice {
background-color:#cc0000;
color: white;
}
#birthday-title {
background-color:#ff0000;
color: white;
text-indent: 6px;
}
.birthday-list:before {
content: "\1F382 ";
}
.birthday-list{
margin: 1px;
color: black;
background-color: yellow;
text-indent: 10px;
border-radius: 5px;
}
#event-notice{
color: white;
background-color: #004c5b;
text-indent: 2px;
}
#event-title{
color: whitesmoke;
background-color: #006c83;
text-indent: 6px;
}
.event-list:before {
content: "\1F5D3 ";
}
.event-list {
margin: 1px;
color: black;
background-color: #00c7f0;
text-indent: 10px;
border-radius: 5px;
}
.panel .panel-body {
padding-top: 1px;
padding-bottom: 1px;
padding-left:5px;
padding-right:5px;
border: 1px;
}
.wall-item-network {
font-size: 12px;
}
.wall-item-content .clearfix .post .comment-container .well .well-sm .wall-item-body .e-content .p-name .media .comment .wall-item-bottom .wall-item-links .wall-item-tags .wall-item-actions .wall-item-responses #hr {
box-sizing: border-box;
margin-top: 0px;
margin-bottom: 0px;
border:0px;
padding:0px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,17 @@
<?php
/*
* Name: Plusminus
* Author: hoergen
*
* List here all variables which will get overwritten through this scheme
* Overwrites: nav_bg, nav_icon_color, link_color, background_color, contentbg_transp
*/
$nav_bg = "#000b95";
$nav_icon_color = "#eee";
$link_color = "#000b95";
//$background_color = "#ededed";
//$login_bg_color = "#ededed";
$contentbg_transp = 100;