Merge branch '2018.08-rc' of https://github.com/friendica/friendica into develop
This commit is contained in:
Ralf Thees 2018-09-19 21:10:00 +02:00
commit 91f405bac4
107 changed files with 17101 additions and 17040 deletions

View File

@ -1 +1 @@
2018.08-dev
2018.08-rc

View File

@ -39,7 +39,7 @@ require_once 'include/text.php';
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily');
define('FRIENDICA_VERSION', '2018.08-dev');
define('FRIENDICA_VERSION', '2018.08-rc');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('DB_UPDATE_VERSION', 1283);
define('NEW_UPDATE_ROUTINE_VERSION', 1170);

View File

@ -18,13 +18,12 @@
"asika/simple-console": "^1.0",
"divineomega/password_exposed": "^2.4",
"ezyang/htmlpurifier": "~4.7.0",
"league/html-to-markdown": "~4.4.1",
"league/html-to-markdown": "~4.8.0",
"lightopenid/lightopenid": "dev-master",
"michelf/php-markdown": "^1.7",
"mobiledetect/mobiledetectlib": "2.8.*",
"paragonie/random_compat": "^2.0",
"pear/Text_LanguageDetect": "1.*",
"pear/Text_Highlighter": "dev-master",
"seld/cli-prompt": "^1.0",
"smarty/smarty": "^3.1",
"fxp/composer-asset-plugin": "~1.3",

237
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "d62c3e3d6971ee63a862a22ff3cd3768",
"content-hash": "5f6a43237dc52758484cd21cd76e8ce6",
"packages": [
{
"name": "asika/simple-console",
@ -483,16 +483,16 @@
},
{
"name": "league/html-to-markdown",
"version": "4.4.1",
"version": "4.8.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/html-to-markdown.git",
"reference": "82ea375b5b2b1da1da222644c0565c695bf88186"
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/82ea375b5b2b1da1da222644c0565c695bf88186",
"reference": "82ea375b5b2b1da1da222644c0565c695bf88186",
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/f9a879a068c68ff47b722de63f58bec79e448f9d",
"reference": "f9a879a068c68ff47b722de63f58bec79e448f9d",
"shasum": ""
},
"require": {
@ -511,7 +511,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.5-dev"
"dev-master": "4.9-dev"
}
},
"autoload": {
@ -524,17 +524,17 @@
"MIT"
],
"authors": [
{
"name": "Colin O'Dell",
"email": "colinodell@gmail.com",
"homepage": "http://www.colinodell.com",
"role": "Lead Developer"
},
{
"name": "Nick Cernis",
"email": "nick@cern.is",
"homepage": "http://modernnerd.net",
"role": "Original Author"
},
{
"name": "Colin O'Dell",
"email": "colinodell@gmail.com",
"homepage": "https://www.colinodell.com",
"role": "Lead Developer"
}
],
"description": "An HTML-to-markdown conversion helper for PHP",
@ -543,7 +543,7 @@
"html",
"markdown"
],
"time": "2017-03-16T00:45:59+00:00"
"time": "2018-09-18T12:18:08+00:00"
},
{
"name": "lightopenid/lightopenid",
@ -1669,204 +1669,6 @@
],
"time": "2018-02-15T05:50:20+00:00"
},
{
"name": "pear/console_getopt",
"version": "v1.4.1",
"source": {
"type": "git",
"url": "https://github.com/pear/Console_Getopt.git",
"reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
"reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
"shasum": ""
},
"type": "library",
"autoload": {
"psr-0": {
"Console": "./"
}
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
"./"
],
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Greg Beaver",
"email": "cellog@php.net",
"role": "Helper"
},
{
"name": "Andrei Zmievski",
"email": "andrei@php.net",
"role": "Lead"
},
{
"name": "Stig Bakken",
"email": "stig@php.net",
"role": "Developer"
}
],
"description": "More info available on: http://pear.php.net/package/Console_Getopt",
"time": "2015-07-20T20:28:12+00:00"
},
{
"name": "pear/pear-core-minimal",
"version": "v1.10.3",
"source": {
"type": "git",
"url": "https://github.com/pear/pear-core-minimal.git",
"reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115",
"reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115",
"shasum": ""
},
"require": {
"pear/console_getopt": "~1.4",
"pear/pear_exception": "~1.0"
},
"replace": {
"rsky/pear-core-min": "self.version"
},
"type": "library",
"autoload": {
"psr-0": {
"": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
"src/"
],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Christian Weiske",
"email": "cweiske@php.net",
"role": "Lead"
}
],
"description": "Minimal set of PEAR core files to be used as composer dependency",
"time": "2017-02-28T16:46:11+00:00"
},
{
"name": "pear/pear_exception",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/pear/PEAR_Exception.git",
"reference": "8c18719fdae000b690e3912be401c76e406dd13b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
"reference": "8c18719fdae000b690e3912be401c76e406dd13b",
"shasum": ""
},
"require": {
"php": ">=4.4.0"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"type": "class",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-0": {
"PEAR": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
"."
],
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Helgi Thormar",
"email": "dufuz@php.net"
},
{
"name": "Greg Beaver",
"email": "cellog@php.net"
}
],
"description": "The PEAR Exception base class.",
"homepage": "https://github.com/pear/PEAR_Exception",
"keywords": [
"exception"
],
"time": "2015-02-10T20:07:52+00:00"
},
{
"name": "pear/text_highlighter",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/pear/Text_Highlighter.git",
"reference": "2ccac2d9eaf55dc08bbbdb7136c93fb399d0f855"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pear/Text_Highlighter/zipball/2ccac2d9eaf55dc08bbbdb7136c93fb399d0f855",
"reference": "2ccac2d9eaf55dc08bbbdb7136c93fb399d0f855",
"shasum": ""
},
"require": {
"pear/pear-core-minimal": "~1.10.0",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "@stable"
},
"type": "library",
"autoload": {
"psr-0": {
"Text": "./"
}
},
"include-path": [
"./"
],
"license": [
"PHP-3.01"
],
"authors": [
{
"email": "ssttoo@gmail.com",
"name": "Stoyan Stefanov",
"role": "Lead"
},
{
"email": "demenev@gmail.com",
"name": "Andrey Demenev",
"role": "Lead"
}
],
"description": "More info available on: http://pear.php.net/package/Text_Highlighter",
"support": {
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Text_Highlighter",
"source": "https://github.com/pear/Text_Highlighter"
},
"time": "2018-01-27T08:24:15+00:00"
},
{
"name": "pear/text_languagedetect",
"version": "v1.0.0",
@ -3145,7 +2947,7 @@
}
],
"description": "Provides the functionality to compare PHP values for equality",
"homepage": "https://github.com/sebastianbergmann/comparator",
"homepage": "http://www.github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
@ -3247,7 +3049,7 @@
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
"homepage": "https://github.com/sebastianbergmann/environment",
"homepage": "http://www.github.com/sebastianbergmann/environment",
"keywords": [
"Xdebug",
"environment",
@ -3315,7 +3117,7 @@
}
],
"description": "Provides the functionality to export PHP variables for visualization",
"homepage": "https://github.com/sebastianbergmann/exporter",
"homepage": "http://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
@ -3367,7 +3169,7 @@
}
],
"description": "Snapshotting of global state",
"homepage": "https://github.com/sebastianbergmann/global-state",
"homepage": "http://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
@ -3469,7 +3271,7 @@
}
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "https://github.com/sebastianbergmann/recursion-context",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"time": "2016-11-19T07:33:16+00:00"
},
{
@ -3669,8 +3471,7 @@
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {
"lightopenid/lightopenid": 20,
"pear/text_highlighter": 20
"lightopenid/lightopenid": 20
},
"prefer-stable": false,
"prefer-lowest": false,

View File

@ -33,7 +33,7 @@ If you don't want to translate the UI, or it is already done to your satisfactio
Are you good at designing things?
If you have seen Friendica you probably have ideas to improve it, haven't you?
* If you would like to work with us on enhancing the user interface, please join the [UX Watchdogs forum](https://fc.oscp.info/profile/ux-watchdogs)
* If you would like to work with us on enhancing the user interface, please join the [forum for Friendica development](https://forum.friendi.ca/profile/developers).
* Make plans for a better Friendica interface design and share them with us.
* Tell us if you are able to realize your ideas or what kind of help you need.
We can't promise we have the right skills in the group but we'll try.

View File

@ -15,6 +15,6 @@ Remember the link at the top of this page will bring you back here.
Once you've added some groups, <a href="help/Quick-Start-andfinally">move on to the next section</a>.
<iframe src="http://dir.friendica.com/directory/forum" width="950" height="600"></iframe>
<iframe src="http://dir.friendica.social/directory" width="950" height="600"></iframe>

View File

@ -581,7 +581,10 @@ function api_get_user(App $a, $contact_id = null)
if (is_null($user) && ($a->argc > (count($called_api) - 1)) && (count($called_api) > 0)) {
$argid = count($called_api);
if (!empty($a->argv[$argid])) {
list($user, $null) = explode(".", $a->argv[$argid]);
$data = explode(".", $a->argv[$argid]);
if (count($data) > 1) {
list($user, $null) = $data;
}
}
if (is_numeric($user)) {
$user = DBA::escape(api_unique_id_to_nurl(intval($user)));
@ -1056,10 +1059,10 @@ function api_statuses_mediap($type)
// now that we have the img url in bbcode we can add it to the status and insert the wall item.
$_REQUEST['body'] = $txt . "\n\n" . '[url=' . $picture["albumpage"] . '][img]' . $picture["preview"] . "[/img][/url]";
item_post($a);
$item_id = item_post($a);
// this should output the last post (the one we just posted).
return api_status_show($type);
// output the post that we just posted.
return api_status_show($type, $item_id);
}
/// @TODO move this to top of file or somewhere better!
@ -1075,7 +1078,6 @@ api_register_func('api/statuses/mediap', 'api_statuses_mediap', true, API_METHOD
*/
function api_statuses_update($type)
{
$a = get_app();
if (api_user() === false) {
@ -1129,8 +1131,8 @@ function api_statuses_update($type)
if ($throttle_day > 0) {
$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60);
$condition = ["`uid` = ? AND `wall` AND `created` > ? AND `id` = `parent`", api_user(), $datefrom];
$posts_day = DBA::count('item', $condition);
$condition = ["`uid` = ? AND `wall` AND `created` > ?", api_user(), $datefrom];
$posts_day = DBA::count('thread', $condition);
if ($posts_day > $throttle_day) {
logger('Daily posting limit reached for user '.api_user(), LOGGER_DEBUG);
@ -1143,8 +1145,8 @@ function api_statuses_update($type)
if ($throttle_week > 0) {
$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*7);
$condition = ["`uid` = ? AND `wall` AND `created` > ? AND `id` = `parent`", api_user(), $datefrom];
$posts_week = DBA::count('item', $condition);
$condition = ["`uid` = ? AND `wall` AND `created` > ?", api_user(), $datefrom];
$posts_week = DBA::count('thread', $condition);
if ($posts_week > $throttle_week) {
logger('Weekly posting limit reached for user '.api_user(), LOGGER_DEBUG);
@ -1157,8 +1159,8 @@ function api_statuses_update($type)
if ($throttle_month > 0) {
$datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*30);
$condition = ["`uid` = ? AND `wall` AND `created` > ? AND `id` = `parent`", api_user(), $datefrom];
$posts_month = DBA::count('item', $condition);
$condition = ["`uid` = ? AND `wall` AND `created` > ?", api_user(), $datefrom];
$posts_month = DBA::count('thread', $condition);
if ($posts_month > $throttle_month) {
logger('Monthly posting limit reached for user '.api_user(), LOGGER_DEBUG);
@ -1200,10 +1202,10 @@ function api_statuses_update($type)
}
// call out normal post function
item_post($a);
$item_id = item_post($a);
// this should output the last post (the one we just posted).
return api_status_show($type);
// output the post that we just posted.
return api_status_show($type, $item_id);
}
/// @TODO move to top of file or somewhere better
@ -1260,7 +1262,7 @@ api_register_func('api/media/upload', 'api_media_upload', true, API_METHOD_POST)
*
* @return array|string
*/
function api_status_show($type)
function api_status_show($type, $item_id = 0)
{
$a = get_app();
@ -1274,9 +1276,14 @@ function api_status_show($type)
$privacy_sql = "";
}
if (!empty($item_id)) {
// Get the item with the given id
$condition = ['id' => $item_id];
} else {
// get last public wall message
$condition = ['owner-id' => $user_info['pid'], 'uid' => api_user(),
'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT]];
}
$lastwall = Item::selectFirst(Item::ITEM_FIELDLIST, $condition, ['order' => ['id' => true]]);
if (DBA::isResult($lastwall)) {
@ -1993,14 +2000,14 @@ function api_statuses_repeat($type)
$_REQUEST["source"] = api_source();
}
item_post($a);
$item_id = item_post($a);
} else {
throw new ForbiddenException();
}
// this should output the last post (the one we just posted).
// output the post that we just posted.
$called_api = [];
return api_status_show($type);
return api_status_show($type, $item_id);
}
/// @TODO move to top of file or somewhere better
@ -4396,7 +4403,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $
if ($filetype == "") {
$filetype=Image::guessType($filename);
}
$imagedata = getimagesize($src);
$imagedata = @getimagesize($src);
if ($imagedata) {
$filetype = $imagedata['mime'];
}

View File

@ -229,12 +229,12 @@ function localize_item(&$item)
$xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
$obj = XML::parseString($xmlhead.$item['object']);
$links = XML::parseString($xmlhead."<links>".unxmlify($obj->link)."</links>");
$Bname = $obj->title;
$Blink = "";
$Blink = $obj->id;
$Bphoto = "";
foreach ($links->link as $l) {
foreach ($obj->link as $l) {
$atts = $l->attributes();
switch ($atts['rel']) {
case "alternate": $Blink = $atts['href'];

View File

@ -72,7 +72,8 @@ function add_page_info_data(array $data, $no_photos = false)
$text .= " title='".$data["title"]."'";
}
if (!empty($data["images"])) {
// Only embedd a picture link when it seems to be a valid picture ("width" is set)
if (!empty($data["images"]) && !empty($data["images"][0]["width"])) {
$preview = str_replace(["[", "]"], ["&#91;", "&#93;"], htmlentities($data["images"][0]["src"], ENT_QUOTES, 'UTF-8', false));
// if the preview picture is larger than 500 pixels then show it in a larger mode
// But only, if the picture isn't higher than large (To prevent huge posts)

View File

@ -1911,58 +1911,3 @@ function format_network_name($network, $url = 0) {
return $network_name;
}
}
/**
* @brief Syntax based code highlighting for popular languages.
* @param string $s Code block
* @param string $lang Programming language
* @return string Formated html
*/
function text_highlight($s, $lang) {
if ($lang === 'js') {
$lang = 'javascript';
}
if ($lang === 'bash') {
$lang = 'sh';
}
// @TODO: Replace Text_Highlighter_Renderer_Html by scrivo/highlight.php
// Autoload the library to make constants available
class_exists('Text_Highlighter_Renderer_Html');
$options = [
'numbers' => HL_NUMBERS_LI,
'tabsize' => 4,
];
$tag_added = false;
$s = trim(html_entity_decode($s, ENT_COMPAT));
$s = str_replace(' ', "\t", $s);
/*
* The highlighter library insists on an opening php tag for php code blocks. If
* it isn't present, nothing is highlighted. So we're going to see if it's present.
* If not, we'll add it, and then quietly remove it after we get the processed output back.
*/
if ($lang === 'php' && strpos($s, '<?php') !== 0) {
$s = '<?php' . "\n" . $s;
$tag_added = true;
}
$renderer = new Text_Highlighter_Renderer_Html($options);
$factory = new Text_Highlighter();
$hl = $factory->factory($lang);
$hl->setRenderer($renderer);
$o = $hl->highlight($s);
$o = str_replace("\n", '', $o);
if ($tag_added) {
$b = substr($o, 0, strpos($o, '<li>'));
$e = substr($o, strpos($o, '</li>'));
$o = $b . $e;
}
return '<code>' . $o . '</code>';
}

View File

@ -6,9 +6,11 @@
use Friendica\Content\Text;
use Friendica\Core\L10n;
function visible_lf($s)
function visible_whitespace($s)
{
return str_replace("\n", '<br />', $s);
$s = str_replace(' ', '&nbsp;', $s);
return str_replace(["\r\n", "\n", "\r"], '<br />', $s);
}
function babel_content()
@ -20,19 +22,19 @@ function babel_content()
$bbcode = trim($_REQUEST['text']);
$results[] = [
'title' => L10n::t('Source input'),
'content' => visible_lf($bbcode)
'content' => visible_whitespace($bbcode)
];
$plain = Text\BBCode::toPlaintext($bbcode, false);
$results[] = [
'title' => L10n::t('BBCode::toPlaintext'),
'content' => visible_lf($plain)
'content' => visible_whitespace($plain)
];
$html = Text\BBCode::convert($bbcode);
$results[] = [
'title' => L10n::t("BBCode::convert \x28raw HTML\x29"),
'content' => htmlspecialchars($html)
'title' => L10n::t('BBCode::convert (raw HTML)'),
'content' => visible_whitespace(htmlspecialchars($html))
];
$results[] = [
@ -43,13 +45,13 @@ function babel_content()
$bbcode2 = Text\HTML::toBBCode($html);
$results[] = [
'title' => L10n::t('BBCode::convert => HTML::toBBCode'),
'content' => visible_lf($bbcode2)
'content' => visible_whitespace($bbcode2)
];
$markdown = Text\BBCode::toMarkdown($bbcode);
$results[] = [
'title' => L10n::t('BBCode::toMarkdown'),
'content' => visible_lf($markdown)
'content' => visible_whitespace($markdown)
];
$html2 = Text\Markdown::convert($markdown);
@ -61,22 +63,33 @@ function babel_content()
$bbcode3 = Text\Markdown::toBBCode($markdown);
$results[] = [
'title' => L10n::t('BBCode::toMarkdown => Markdown::toBBCode'),
'content' => visible_lf($bbcode3)
'content' => visible_whitespace($bbcode3)
];
$bbcode4 = Text\HTML::toBBCode($html2);
$results[] = [
'title' => L10n::t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'),
'content' => visible_lf($bbcode4)
'content' => visible_whitespace($bbcode4)
];
break;
case 'markdown':
$markdown = trim($_REQUEST['text']);
$results[] = [
'title' => L10n::t('Source input \x28Diaspora format\x29'),
'title' => L10n::t('Source input (Diaspora format)'),
'content' => '<pre>' . $markdown . '</pre>'
];
$html = Text\Markdown::convert($markdown);
$results[] = [
'title' => L10n::t('Markdown::convert (raw HTML)'),
'content' => htmlspecialchars($html)
];
$results[] = [
'title' => L10n::t('Markdown::convert'),
'content' => $html
];
$bbcode = Text\Markdown::toBBCode($markdown);
$results[] = [
'title' => L10n::t('Markdown::toBBCode'),
@ -86,7 +99,7 @@ function babel_content()
case 'html' :
$html = trim($_REQUEST['text']);
$results[] = [
'title' => L10n::t("Raw HTML input"),
'title' => L10n::t('Raw HTML input'),
'content' => htmlspecialchars($html)
];
@ -98,7 +111,13 @@ function babel_content()
$bbcode = Text\HTML::toBBCode($html);
$results[] = [
'title' => L10n::t('HTML::toBBCode'),
'content' => visible_lf($bbcode)
'content' => visible_whitespace($bbcode)
];
$markdown = Text\HTML::toMarkdown($html);
$results[] = [
'title' => L10n::t('HTML::toMarkdown'),
'content' => visible_whitespace($markdown)
];
$text = Text\HTML::toPlaintext($html);
@ -111,7 +130,7 @@ function babel_content()
$tpl = get_markup_template('babel.tpl');
$o = replace_macros($tpl, [
'$text' => ['text', L10n::t('Source text'), defaults($_REQUEST, 'text', ''), ''],
'$text' => ['text', L10n::t('Source text'), htmlentities(defaults($_REQUEST, 'text', '')), ''],
'$type_bbcode' => ['type', L10n::t('BBCode'), 'bbcode', '', defaults($_REQUEST, 'type', 'bbcode') == 'bbcode'],
'$type_markdown' => ['type', L10n::t('Markdown'), 'markdown', '', defaults($_REQUEST, 'type', 'bbcode') == 'markdown'],
'$type_html' => ['type', L10n::t('HTML'), 'html', '', defaults($_REQUEST, 'type', 'bbcode') == 'html'],

View File

@ -30,6 +30,10 @@ function bookmarklet_content(App $a)
$page = normalise_link(System::baseUrl() . "/bookmarklet");
if (!strstr($referer, $page)) {
if (empty($_REQUEST["url"])) {
System::httpExit(400, ["title" => L10n::t('Bad Request')]);
}
$content = add_page_info($_REQUEST["url"]);
$x = [

View File

@ -47,6 +47,11 @@ function contacts_init(App $a)
if (!DBA::isResult($contact)) {
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => 0]);
}
// Don't display contacts that are about to be deleted
if ($contact['network'] == Protocol::PHANTOM) {
$contact = false;
}
}
if (DBA::isResult($contact)) {
@ -122,11 +127,12 @@ function contacts_init(App $a)
function contacts_batch_actions(App $a)
{
$contacts_id = $_POST['contact_batch'];
if (!is_array($contacts_id)) {
if (empty($_POST['contact_batch']) || !is_array($_POST['contact_batch'])) {
return;
}
$contacts_id = $_POST['contact_batch'];
$orig_records = q("SELECT * FROM `contact` WHERE `id` IN (%s) AND `uid` = %d AND `self` = 0",
implode(",", $contacts_id),
intval(local_user())
@ -367,7 +373,7 @@ function _contact_drop($orig_record)
return;
}
Contact::terminateFriendship($r[0], $orig_record);
Contact::terminateFriendship($r[0], $orig_record, true);
Contact::remove($orig_record['id']);
}
@ -595,20 +601,15 @@ function contacts_content(App $a, $update = 0)
/// @todo Only show the following link with DFRN when the remote version supports it
$follow = '';
$follow_text = '';
if (in_array($contact['network'], [Protocol::DIASPORA, Protocol::OSTATUS, Protocol::DFRN])) {
if (in_array($contact['rel'], [Contact::FRIEND, Contact::SHARING])) {
if (in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
$follow = System::baseUrl(true) . "/unfollow?url=" . urlencode($contact["url"]);
$follow_text = L10n::t("Disconnect/Unfollow");
}
} else {
$follow = System::baseUrl(true) . "/follow?url=" . urlencode($contact["url"]);
$follow_text = L10n::t("Connect/Follow");
}
}
if ($contact['uid'] == 0) {
$follow = System::baseUrl(true) . "/follow?url=" . urlencode($contact["url"]);
$follow_text = L10n::t("Connect/Follow");
}
// Load contactact related actions like hide, suggest, delete and others
$contact_actions = contact_actions($contact);
@ -723,6 +724,8 @@ function contacts_content(App $a, $update = 0)
$sql_extra = " AND `blocked` = 0 ";
}
$sql_extra .= sprintf(" AND `network` != '%s' ", Protocol::PHANTOM);
$search = x($_GET, 'search') ? notags(trim($_GET['search'])) : '';
$nets = x($_GET, 'nets' ) ? notags(trim($_GET['nets'])) : '';

View File

@ -79,13 +79,13 @@ function dfrn_notify_post(App $a) {
$condition = [];
switch ($direction) {
case (-1):
$condition = ["`issued-id` = ? OR `dfrn-id` = ?", $dfrn_id, $dfrn_id];
$condition = ["(`issued-id` = ? OR `dfrn-id` = ?) AND `uid` = ?", $dfrn_id, $dfrn_id, $user['uid']];
break;
case 0:
$condition = ['issued-id' => $dfrn_id, 'duplex' => true];
$condition = ['issued-id' => $dfrn_id, 'duplex' => true, 'uid' => $user['uid']];
break;
case 1:
$condition = ['dfrn-id' => $dfrn_id, 'duplex' => true];
$condition = ['dfrn-id' => $dfrn_id, 'duplex' => true, 'uid' => $user['uid']];
break;
default:
System::xmlExit(3, 'Invalid direction');
@ -182,7 +182,7 @@ function dfrn_notify_post(App $a) {
function dfrn_dispatch_public($postdata)
{
$msg = Diaspora::decodeRaw([], $postdata);
$msg = Diaspora::decodeRaw([], $postdata, true);
if (!$msg) {
// We have to fail silently to be able to hand it over to the salmon parser
return false;
@ -287,15 +287,15 @@ function dfrn_notify_content(App $a) {
$condition = [];
switch ($direction) {
case (-1):
$condition = ["`issued-id` = ? OR `dfrn-id` = ?", $dfrn_id, $dfrn_id];
$condition = ["(`issued-id` = ? OR `dfrn-id` = ?) AND `uid` = ?", $dfrn_id, $dfrn_id, $user['uid']];
$my_id = $dfrn_id;
break;
case 0:
$condition = ['issued-id' => $dfrn_id, 'duplex' => true];
$condition = ['issued-id' => $dfrn_id, 'duplex' => true, 'uid' => $user['uid']];
$my_id = '1:' . $dfrn_id;
break;
case 1:
$condition = ['dfrn-id' => $dfrn_id, 'duplex' => true];
$condition = ['dfrn-id' => $dfrn_id, 'duplex' => true, 'uid' => $user['uid']];
$my_id = '0:' . $dfrn_id;
break;
default:
@ -322,8 +322,8 @@ function dfrn_notify_content(App $a) {
$encrypted_id = '';
$id_str = $my_id . '.' . mt_rand(1000,9999);
$prv_key = trim($importer['prvkey']);
$pub_key = trim($importer['pubkey']);
$prv_key = trim($importer['cprvkey']);
$pub_key = trim($importer['cpubkey']);
$dplx = intval($importer['duplex']);
if (($dplx && strlen($prv_key)) || (strlen($prv_key) && !strlen($pub_key))) {

View File

@ -44,7 +44,7 @@ function dirfind_content(App $a, $prefix = "") {
$local = Config::get('system','poco_local_search');
$search = $prefix.notags(trim($_REQUEST['search']));
$search = $prefix.notags(trim(defaults($_REQUEST, 'search', '')));
$header = '';

View File

@ -20,7 +20,8 @@ use Friendica\Util\Temporal;
require_once 'include/items.php';
function events_init(App $a) {
function events_init(App $a)
{
if (!local_user()) {
return;
}
@ -42,7 +43,8 @@ function events_init(App $a) {
return;
}
function events_post(App $a) {
function events_post(App $a)
{
logger('post: ' . print_r($_REQUEST, true), LOGGER_DATA);
@ -50,15 +52,15 @@ function events_post(App $a) {
return;
}
$event_id = (x($_POST, 'event_id') ? intval($_POST['event_id']) : 0);
$cid = (x($_POST, 'cid') ? intval($_POST['cid']) : 0);
$event_id = !empty($_POST['event_id']) ? intval($_POST['event_id']) : 0;
$cid = !empty($_POST['cid']) ? intval($_POST['cid']) : 0;
$uid = local_user();
$start_text = escape_tags($_REQUEST['start_text']);
$finish_text = escape_tags($_REQUEST['finish_text']);
$start_text = escape_tags(defaults($_REQUEST, 'start_text', ''));
$finish_text = escape_tags(defaults($_REQUEST, 'finish_text', ''));
$adjust = intval($_POST['adjust']);
$nofinish = intval($_POST['nofinish']);
$adjust = intval(defaults($_POST, 'adjust', 0));
$nofinish = intval(defaults($_POST, 'nofinish', 0));
// The default setting for the `private` field in event_store() is false, so mirror that
$private_event = false;
@ -91,9 +93,9 @@ function events_post(App $a) {
// and we'll waste a bunch of time responding to it. Time that
// could've been spent doing something else.
$summary = escape_tags(trim($_POST['summary']));
$desc = escape_tags(trim($_POST['desc']));
$location = escape_tags(trim($_POST['location']));
$summary = escape_tags(trim(defaults($_POST, 'summary', '')));
$desc = escape_tags(trim(defaults($_POST, 'desc', '')));
$location = escape_tags(trim(defaults($_POST, 'location', '')));
$type = 'event';
$action = ($event_id == '') ? 'new' : "event/" . $event_id;
@ -117,7 +119,7 @@ function events_post(App $a) {
goaway($onerror_url);
}
$share = (intval($_POST['share']) ? intval($_POST['share']) : 0);
$share = intval(defaults($_POST, 'share', 0));
$c = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
intval(local_user())
@ -187,8 +189,8 @@ function events_post(App $a) {
goaway($_SESSION['return_url']);
}
function events_content(App $a) {
function events_content(App $a)
{
if (!local_user()) {
notice(L10n::t('Permission denied.') . EOL);
return;
@ -244,7 +246,7 @@ function events_content(App $a) {
$mode = 'view';
$y = 0;
$m = 0;
$ignored = (x($_REQUEST, 'ignored') ? intval($_REQUEST['ignored']) : 0);
$ignored = !empty($_REQUEST['ignored']) ? intval($_REQUEST['ignored']) : 0;
if ($a->argc > 1) {
if ($a->argc > 2 && $a->argv[1] == 'event') {
@ -272,7 +274,6 @@ function events_content(App $a) {
// The view mode part is similiar to /mod/cal.php
if ($mode == 'view') {
$thisyear = DateTimeFormat::localNow('Y');
$thismonth = DateTimeFormat::localNow('m');
if (!$y) {
@ -312,10 +313,10 @@ function events_content(App $a) {
$finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59);
if ($a->argc > 1 && $a->argv[1] === 'json') {
if (x($_GET, 'start')) {
if (!empty($_GET['start'])) {
$start = $_GET['start'];
}
if (x($_GET, 'end')) {
if (!empty($_GET['end'])) {
$finish = $_GET['end'];
}
}
@ -349,7 +350,7 @@ function events_content(App $a) {
$r = Event::sortByDate($r);
foreach ($r as $rr) {
$j = $rr['adjust'] ? DateTimeFormat::local($rr['start'], 'j') : DateTimeFormat::utc($rr['start'], 'j');
if (!x($links,$j)) {
if (empty($links[$j])) {
$links[$j] = System::baseUrl() . '/' . $a->cmd . '#link-' . $j;
}
}
@ -368,7 +369,7 @@ function events_content(App $a) {
killme();
}
if (x($_GET, 'id')) {
if (!empty($_GET['id'])) {
$tpl = get_markup_template("event.tpl");
} else {
$tpl = get_markup_template("events_js.tpl");
@ -403,7 +404,7 @@ function events_content(App $a) {
'$list' => L10n::t('list'),
]);
if (x($_GET, 'id')) {
if (!empty($_GET['id'])) {
echo $o;
killme();
}
@ -428,41 +429,45 @@ function events_content(App $a) {
}
// In case of an error the browser is redirected back here, with these parameters filled in with the previous values
if (x($_REQUEST, 'nofinish')) {$orig_event['nofinish'] = $_REQUEST['nofinish'];}
if (x($_REQUEST, 'adjust')) {$orig_event['adjust'] = $_REQUEST['adjust'];}
if (x($_REQUEST, 'summary')) {$orig_event['summary'] = $_REQUEST['summary'];}
if (x($_REQUEST, 'description')) {$orig_event['description'] = $_REQUEST['description'];}
if (x($_REQUEST, 'location')) {$orig_event['location'] = $_REQUEST['location'];}
if (x($_REQUEST, 'start')) {$orig_event['start'] = $_REQUEST['start'];}
if (x($_REQUEST, 'finish')) {$orig_event['finish'] = $_REQUEST['finish'];}
if (x($_REQUEST,'finish')) $orig_event['finish'] = $_REQUEST['finish'];
if (!empty($_REQUEST['nofinish'])) {$orig_event['nofinish'] = $_REQUEST['nofinish'];}
if (!empty($_REQUEST['adjust'])) {$orig_event['adjust'] = $_REQUEST['adjust'];}
if (!empty($_REQUEST['summary'])) {$orig_event['summary'] = $_REQUEST['summary'];}
if (!empty($_REQUEST['description'])) {$orig_event['description'] = $_REQUEST['description'];}
if (!empty($_REQUEST['location'])) {$orig_event['location'] = $_REQUEST['location'];}
if (!empty($_REQUEST['start'])) {$orig_event['start'] = $_REQUEST['start'];}
if (!empty($_REQUEST['finish'])) {$orig_event['finish'] = $_REQUEST['finish'];}
$n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : '');
$a_checked = ((x($orig_event) && $orig_event['adjust']) ? ' checked="checked" ' : '');
$n_checked = (!empty($orig_event['nofinish']) ? ' checked="checked" ' : '');
$a_checked = (!empty($orig_event['adjust']) ? ' checked="checked" ' : '');
$t_orig = (x($orig_event) ? $orig_event['summary'] : '');
$d_orig = (x($orig_event) ? $orig_event['desc'] : '');
$l_orig = (x($orig_event) ? $orig_event['location'] : '');
$eid = (x($orig_event) ? $orig_event['id'] : 0);
$cid = (x($orig_event) ? $orig_event['cid'] : 0);
$uri = (x($orig_event) ? $orig_event['uri'] : '');
$t_orig = !empty($orig_event) ? $orig_event['summary'] : '';
$d_orig = !empty($orig_event) ? $orig_event['desc'] : '';
$l_orig = !empty($orig_event) ? $orig_event['location'] : '';
$eid = !empty($orig_event) ? $orig_event['id'] : 0;
$cid = !empty($orig_event) ? $orig_event['cid'] : 0;
$uri = !empty($orig_event) ? $orig_event['uri'] : '';
$sh_disabled = '';
$sh_checked = '';
if (x($orig_event)) {
$sh_checked = (($orig_event['allow_cid'] === '<' . local_user() . '>' && !$orig_event['allow_gid'] && !$orig_event['deny_cid'] && !$orig_event['deny_gid']) ? '' : ' checked="checked" ');
if (!empty($orig_event)
&& ($orig_event['allow_cid'] !== '<' . local_user() . '>'
|| $orig_event['allow_gid']
|| $orig_event['deny_cid']
|| $orig_event['deny_gid']))
{
$sh_checked = ' checked="checked" ';
}
if ($cid || $mode === 'edit') {
$sh_disabled = 'disabled="disabled"';
}
$sdt = (x($orig_event) ? $orig_event['start'] : 'now');
$fdt = (x($orig_event) ? $orig_event['finish'] : 'now');
$sdt = !empty($orig_event) ? $orig_event['start'] : 'now';
$fdt = !empty($orig_event) ? $orig_event['finish'] : 'now';
$tz = date_default_timezone_get();
if (x($orig_event)) {
if (!empty($orig_event)) {
$tz = ($orig_event['adjust'] ? date_default_timezone_get() : 'UTC');
}
@ -470,20 +475,22 @@ function events_content(App $a) {
$smonth = DateTimeFormat::convert($sdt, $tz, 'UTC', 'm');
$sday = DateTimeFormat::convert($sdt, $tz, 'UTC', 'd');
$shour = (x($orig_event) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'H') : '00');
$sminute = (x($orig_event) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'i') : '00');
$shour = !empty($orig_event) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'H') : '00';
$sminute = !empty($orig_event) ? DateTimeFormat::convert($sdt, $tz, 'UTC', 'i') : '00';
$fyear = DateTimeFormat::convert($fdt, $tz, 'UTC', 'Y');
$fmonth = DateTimeFormat::convert($fdt, $tz, 'UTC', 'm');
$fday = DateTimeFormat::convert($fdt, $tz, 'UTC', 'd');
$fhour = (x($orig_event) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00');
$fminute = (x($orig_event) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00');
$fhour = !empty($orig_event) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'H') : '00';
$fminute = !empty($orig_event) ? DateTimeFormat::convert($fdt, $tz, 'UTC', 'i') : '00';
$perms = ACL::getDefaultUserPermissions($orig_event);
if ($mode === 'new' || $mode === 'copy') {
$acl = ($cid ? '' : ACL::getFullSelectorHTML($a->user, false, $orig_event));
if (!$cid && in_array($mode, ['new', 'copy'])) {
$acl = ACL::getFullSelectorHTML($a->user, false, $orig_event);
} else {
$acl = '';
}
// If we copy an old event, we need to remove the ID and URI
@ -509,11 +516,31 @@ function events_content(App $a) {
'$title' => L10n::t('Event details'),
'$desc' => L10n::t('Starting date and Title are required.'),
'$s_text' => L10n::t('Event Starts:') . ' <span class="required" title="' . L10n::t('Required') . '">*</span>',
'$s_dsel' => Temporal::getDateTimeField(new DateTime(), DateTime::createFromFormat('Y', $syear+5), DateTime::createFromFormat('Y-m-d H:i', "$syear-$smonth-$sday $shour:$sminute"), L10n::t('Event Starts:'), 'start_text', true, true, '', '', true),
'$s_dsel' => Temporal::getDateTimeField(
new DateTime(),
DateTime::createFromFormat('Y', $syear+5),
DateTime::createFromFormat('Y-m-d H:i', "$syear-$smonth-$sday $shour:$sminute"),
L10n::t('Event Starts:'),
'start_text',
true,
true,
'',
'',
true
),
'$n_text' => L10n::t('Finish date/time is not known or not relevant'),
'$n_checked' => $n_checked,
'$f_text' => L10n::t('Event Finishes:'),
'$f_dsel' => Temporal::getDateTimeField(new DateTime(), DateTime::createFromFormat('Y', $fyear+5), DateTime::createFromFormat('Y-m-d H:i', "$fyear-$fmonth-$fday $fhour:$fminute"), L10n::t('Event Finishes:'), 'finish_text', true, true, 'start_text'),
'$f_dsel' => Temporal::getDateTimeField(
new DateTime(),
DateTime::createFromFormat('Y', $fyear+5),
DateTime::createFromFormat('Y-m-d H:i', "$fyear-$fmonth-$fday $fhour:$fminute"),
L10n::t('Event Finishes:'),
'finish_text',
true,
true,
'start_text'
),
'$a_text' => L10n::t('Adjust for viewer timezone'),
'$a_checked' => $a_checked,
'$d_text' => L10n::t('Description:'),
@ -534,7 +561,6 @@ function events_content(App $a) {
'$basic' => L10n::t('Basic'),
'$advanced' => L10n::t('Advanced'),
'$permissions' => L10n::t('Permissions'),
]);
return $o;

View File

@ -25,7 +25,7 @@ function fetch_init(App $a)
// Fetch the item
$fields = ['uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network',
'event-id', 'resource-id', 'author-link', 'owner-link', 'attach'];
'event-id', 'resource-id', 'author-link', 'author-avatar', 'author-name', 'plink', 'owner-link', 'attach'];
$condition = ['wall' => true, 'private' => false, 'guid' => $guid, 'network' => [Protocol::DFRN, Protocol::DIASPORA]];
$item = Item::selectFirst($fields, $condition);
if (!DBA::isResult($item)) {

View File

@ -39,7 +39,7 @@ require_once 'include/items.php';
function item_post(App $a) {
if (!local_user() && !remote_user()) {
return;
return 0;
}
require_once 'include/security.php';
@ -154,7 +154,7 @@ function item_post(App $a) {
if (($message_id != '') && ($profile_uid != 0)) {
if (Item::exists(['uri' => $message_id, 'uid' => $profile_uid])) {
logger("Message with URI ".$message_id." already exists for user ".$profile_uid, LOGGER_DEBUG);
return;
return 0;
}
}
@ -183,7 +183,7 @@ function item_post(App $a) {
$user = DBA::selectFirst('user', [], ['uid' => $profile_uid]);
if (!DBA::isResult($user) && !$parent) {
return;
return 0;
}
$categories = '';
@ -843,6 +843,10 @@ function item_post(App $a) {
logger('post_complete');
if ($api_source) {
return $post_id;
}
item_post_return(System::baseUrl(), $api_source, $return_path);
// NOTREACHED
}

View File

@ -8,8 +8,8 @@ use Friendica\Core\L10n;
use Friendica\Database\DBA;
use Friendica\Model\Item;
function lockview_content(App $a) {
function lockview_content(App $a)
{
$type = (($a->argc > 1) ? $a->argv[1] : 0);
if (is_numeric($type)) {
$item_id = intval($type);
@ -18,17 +18,21 @@ function lockview_content(App $a) {
$item_id = (($a->argc > 2) ? intval($a->argv[2]) : 0);
}
if (!$item_id)
if (!$item_id) {
killme();
}
if (!in_array($type, ['item','photo','event']))
if (!in_array($type, ['item','photo','event'])) {
killme();
}
$fields = ['uid', 'private', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'];
$fields = ['uid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'];
$condition = ['id' => $item_id];
if ($type != 'item') {
$item = DBA::selectFirst($type, $fields, $condition);
} else {
$fields[] = 'private';
$item = Item::selectFirst($fields, $condition);
}
@ -43,10 +47,13 @@ function lockview_content(App $a) {
killme();
}
if (($item['private'] == 1) && empty($item['allow_cid']) && empty($item['allow_gid'])
&& empty($item['deny_cid']) && empty($item['deny_gid'])) {
if (isset($item['private'])
&& $item['private'] == 1
&& empty($item['allow_cid'])
&& empty($item['allow_gid'])
&& empty($item['deny_cid'])
&& empty($item['deny_gid']))
{
echo L10n::t('Remote privacy information not available.') . '<br />';
killme();
}
@ -63,36 +70,44 @@ function lockview_content(App $a) {
$r = q("SELECT `name` FROM `group` WHERE `id` IN ( %s )",
DBA::escape(implode(', ', $allowed_groups))
);
if (DBA::isResult($r))
foreach($r as $rr)
if (DBA::isResult($r)) {
foreach ($r as $rr) {
$l[] = '<b>' . $rr['name'] . '</b>';
}
}
}
if (count($allowed_users)) {
$r = q("SELECT `name` FROM `contact` WHERE `id` IN ( %s )",
DBA::escape(implode(', ', $allowed_users))
);
if (DBA::isResult($r))
foreach($r as $rr)
if (DBA::isResult($r)) {
foreach ($r as $rr) {
$l[] = $rr['name'];
}
}
}
if (count($deny_groups)) {
$r = q("SELECT `name` FROM `group` WHERE `id` IN ( %s )",
DBA::escape(implode(', ', $deny_groups))
);
if (DBA::isResult($r))
foreach($r as $rr)
if (DBA::isResult($r)) {
foreach ($r as $rr) {
$l[] = '<b><strike>' . $rr['name'] . '</strike></b>';
}
}
}
if (count($deny_users)) {
$r = q("SELECT `name` FROM `contact` WHERE `id` IN ( %s )",
DBA::escape(implode(', ', $deny_users))
);
if (DBA::isResult($r))
foreach($r as $rr)
if (DBA::isResult($r)) {
foreach ($r as $rr) {
$l[] = '<strike>' . $rr['name'] . '</strike>';
}
}
}
echo $o . implode(', ', $l);

View File

@ -488,7 +488,7 @@ function render_messages(array $msg, $t)
'$id' => $rr['id'],
'$from_name' => $participants,
'$from_url' => Contact::magicLink($rr['url']),
'$from_addr' => $contact['addr'],
'$from_addr' => defaults($contact, 'addr', ''),
'$sparkle' => ' sparkle',
'$from_photo' => ProxyUtils::proxifyUrl($from_photo, false, ProxyUtils::SIZE_THUMB),
'$subject' => $subject_e,

View File

@ -70,8 +70,11 @@ function notes_content(App $a, $update = false)
$count = 0;
if (DBA::isResult($r)) {
$count = count($r);
$o .= conversation($a, DBA::toArray($r), 'notes', $update);
$notes = DBA::toArray($r);
$count = count($notes);
$o .= conversation($a, $notes, 'notes', $update);
}
$o .= alt_pager($a, $count);

View File

@ -21,7 +21,7 @@ function notifications_post(App $a)
$request_id = (($a->argc > 1) ? $a->argv[1] : 0);
if ($request_id === "all") {
if ($request_id === 'all') {
return;
}
@ -68,8 +68,8 @@ function notifications_content(App $a)
return;
}
$page = (x($_REQUEST,'page') ? $_REQUEST['page'] : 1);
$show = (x($_REQUEST,'show') ? $_REQUEST['show'] : 0);
$page = defaults($_REQUEST, 'page', 1);
$show = defaults($_REQUEST, 'show', 0);
Nav::setSelected('notifications');
@ -87,10 +87,11 @@ function notifications_content(App $a)
$perpage = 20;
$startrec = ($page * $perpage) - $perpage;
$notif_header = L10n::t('Notifications');
// Get introductions
if ((($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) {
Nav::setSelected('introductions');
$notif_header = L10n::t('Notifications');
$all = (($a->argc > 2) && ($a->argv[2] == 'all'));
@ -115,10 +116,8 @@ function notifications_content(App $a)
} elseif (($a->argc > 1) && ($a->argv[1] == 'home')) {
$notif_header = L10n::t('Home Notifications');
$notifs = $nm->homeNotifs($show, $startrec, $perpage);
}
// Set the pager
$a->set_pager_itemspage($perpage);
@ -133,14 +132,15 @@ function notifications_content(App $a)
$notif_tpl = get_markup_template('notifications.tpl');
if (!isset($notifs['ident'])) {
logger('Missing data in notifs: ' . System::callstack(20), LOGGER_DEBUG);
}
$notif_show_lnk = [
'href' => ($show ? 'notifications/' . $notifs['ident'] : 'notifications/' . $notifs['ident'] . '?show=all' ),
'text' => ($show ? L10n::t('Show unread') : L10n::t('Show all')),
];
// Process the data for template creation
if ($notifs['ident'] === 'introductions') {
if (defaults($notifs, 'ident', '') === 'introductions') {
$sugg = get_markup_template('suggestions.tpl');
$tpl = get_markup_template("intros.tpl");
$tpl = get_markup_template('intros.tpl');
// The link to switch between ignored and normal connection requests
$notif_show_lnk = [
@ -150,35 +150,34 @@ function notifications_content(App $a)
// Loop through all introduction notifications.This creates an array with the output html for each
// introduction
foreach ($notifs['notifications'] as $it) {
foreach ($notifs['notifications'] as $notif) {
// There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
// We have to distinguish between these two because they use different data.
switch ($it['label']) {
switch ($notif['label']) {
case 'friend_suggestion':
$notif_content[] = replace_macros($sugg, [
'$type' => $it['label'],
'$type' => $notif['label'],
'$str_notifytype' => L10n::t('Notification type:'),
'$notify_type' => $it['notify_type'],
'$intro_id' => $it['intro_id'],
'$notify_type'=> $notif['notify_type'],
'$intro_id' => $notif['intro_id'],
'$lbl_madeby' => L10n::t('Suggested by:'),
'$madeby' => $it['madeby'],
'$madeby_url' => $it['madeby_url'],
'$madeby_zrl' => $it['madeby_zrl'],
'$madeby_addr' => $it['madeby_addr'],
'$contact_id' => $it['contact_id'],
'$photo' => $it['photo'],
'$fullname' => $it['name'],
'$url' => $it['url'],
'$zrl' => $it['zrl'],
'$madeby' => $notif['madeby'],
'$madeby_url' => $notif['madeby_url'],
'$madeby_zrl' => $notif['madeby_zrl'],
'$madeby_addr'=> $notif['madeby_addr'],
'$contact_id' => $notif['contact_id'],
'$photo' => $notif['photo'],
'$fullname' => $notif['name'],
'$url' => $notif['url'],
'$zrl' => $notif['zrl'],
'$lbl_url' => L10n::t('Profile URL'),
'$addr' => $it['addr'],
'$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($it['hidden'] == 1), ''],
'$knowyou' => $it['knowyou'],
'$addr' => $notif['addr'],
'$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($notif['hidden'] == 1), ''],
'$knowyou' => $notif['knowyou'],
'$approve' => L10n::t('Approve'),
'$note' => $it['note'],
'$request' => $it['request'],
'$note' => $notif['note'],
'$request' => $notif['request'],
'$ignore' => L10n::t('Ignore'),
'$discard' => L10n::t('Discard'),
]);
@ -186,91 +185,86 @@ function notifications_content(App $a)
// Normal connection requests
default:
$friend_selected = (($it['network'] !== Protocol::OSTATUS) ? ' checked="checked" ' : ' disabled ');
$fan_selected = (($it['network'] === Protocol::OSTATUS) ? ' checked="checked" disabled ' : '');
$dfrn_tpl = get_markup_template('netfriend.tpl');
$friend_selected = (($notif['network'] !== Protocol::OSTATUS) ? ' checked="checked" ' : ' disabled ');
$fan_selected = (($notif['network'] === Protocol::OSTATUS) ? ' checked="checked" disabled ' : '');
$knowyou = '';
$lbl_knowyou = '';
$dfrn_text = '';
$knowyou = '';
$helptext = '';
$helptext2 = '';
$helptext3 = '';
if ($it['network'] === Protocol::DFRN || $it['network'] === Protocol::DIASPORA) {
if ($it['network'] === Protocol::DFRN) {
if ($notif['network'] === Protocol::DFRN) {
$lbl_knowyou = L10n::t('Claims to be known to you: ');
$knowyou = (($it['knowyou']) ? L10n::t('yes') : L10n::t('no'));
$knowyou = (($notif['knowyou']) ? L10n::t('yes') : L10n::t('no'));
$helptext = L10n::t('Shall your connection be bidirectional or not?');
$helptext2 = L10n::t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $it['name'], $it['name']);
$helptext3 = L10n::t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $it['name']);
} else {
$knowyou = '';
$helptext2 = L10n::t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notif['name'], $notif['name']);
$helptext3 = L10n::t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notif['name']);
} elseif ($notif['network'] === Protocol::DIASPORA) {
$helptext = L10n::t('Shall your connection be bidirectional or not?');
$helptext2 = L10n::t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $it['name'], $it['name']);
$helptext3 = L10n::t('Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $it['name']);
}
$helptext2 = L10n::t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $notif['name'], $notif['name']);
$helptext3 = L10n::t('Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $notif['name']);
}
$dfrn_tpl = get_markup_template('netfriend.tpl');
$dfrn_text = replace_macros($dfrn_tpl, [
'$intro_id' => $it['intro_id'],
'$intro_id' => $notif['intro_id'],
'$friend_selected' => $friend_selected,
'$fan_selected'=> $fan_selected,
'$approve_as1' => $helptext,
'$approve_as2' => $helptext2,
'$approve_as3' => $helptext3,
'$as_friend' => L10n::t('Friend'),
'$as_fan' => (($it['network'] == Protocol::DIASPORA) ? L10n::t('Sharer') : L10n::t('Subscriber'))
'$as_fan' => (($notif['network'] == Protocol::DIASPORA) ? L10n::t('Sharer') : L10n::t('Subscriber'))
]);
$header = $it["name"];
$header = $notif['name'];
if ($it["addr"] != "") {
$header .= " <".$it["addr"].">";
if ($notif['addr'] != '') {
$header .= ' <' . $notif['addr'] . '>';
}
$header .= " (".ContactSelector::networkToName($it['network'], $it['url']).")";
$header .= ' (' . ContactSelector::networkToName($notif['network'], $notif['url']) . ')';
if ($it['network'] != Protocol::DIASPORA) {
if ($notif['network'] != Protocol::DIASPORA) {
$discard = L10n::t('Discard');
} else {
$discard = '';
}
$notif_content[] = replace_macros($tpl, [
'$type' => $it['label'],
'$type' => $notif['label'],
'$header' => htmlentities($header),
'$str_notifytype' => L10n::t('Notification type:'),
'$notify_type' => $it['notify_type'],
'$notify_type' => $notif['notify_type'],
'$dfrn_text' => $dfrn_text,
'$dfrn_id' => $it['dfrn_id'],
'$uid' => $it['uid'],
'$intro_id' => $it['intro_id'],
'$contact_id' => $it['contact_id'],
'$photo' => $it['photo'],
'$fullname' => $it['name'],
'$location' => $it['location'],
'$dfrn_id' => $notif['dfrn_id'],
'$uid' => $notif['uid'],
'$intro_id' => $notif['intro_id'],
'$contact_id' => $notif['contact_id'],
'$photo' => $notif['photo'],
'$fullname' => $notif['name'],
'$location' => $notif['location'],
'$lbl_location'=> L10n::t('Location:'),
'$about' => $it['about'],
'$about' => $notif['about'],
'$lbl_about' => L10n::t('About:'),
'$keywords' => $it['keywords'],
'$keywords' => $notif['keywords'],
'$lbl_keywords'=> L10n::t('Tags:'),
'$gender' => $it['gender'],
'$gender' => $notif['gender'],
'$lbl_gender' => L10n::t('Gender:'),
'$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($it['hidden'] == 1), ''],
'$url' => $it['url'],
'$zrl' => $it['zrl'],
'$hidden' => ['hidden', L10n::t('Hide this contact from others'), ($notif['hidden'] == 1), ''],
'$url' => $notif['url'],
'$zrl' => $notif['zrl'],
'$lbl_url' => L10n::t('Profile URL'),
'$addr' => $it['addr'],
'$addr' => $notif['addr'],
'$lbl_knowyou' => $lbl_knowyou,
'$lbl_network' => L10n::t('Network:'),
'$network' => ContactSelector::networkToName($it['network'], $it['url']),
'$network' => ContactSelector::networkToName($notif['network'], $notif['url']),
'$knowyou' => $knowyou,
'$approve' => L10n::t('Approve'),
'$note' => $it['note'],
'$note' => $notif['note'],
'$ignore' => L10n::t('Ignore'),
'$discard' => $discard,
]);
break;
}
@ -281,47 +275,37 @@ function notifications_content(App $a)
}
// Normal notifications (no introductions)
} else {
// The template files we need in different cases for formatting the content
$tpl_item_like = 'notifications_likes_item.tpl';
$tpl_item_dislike = 'notifications_dislikes_item.tpl';
$tpl_item_attend = 'notifications_attend_item.tpl';
$tpl_item_attendno = 'notifications_attend_item.tpl';
$tpl_item_attendmaybe = 'notifications_attend_item.tpl';
$tpl_item_friend = 'notifications_friends_item.tpl';
$tpl_item_comment = 'notifications_comments_item.tpl';
$tpl_item_post = 'notifications_posts_item.tpl';
$tpl_item_notify = 'notify.tpl';
} elseif (!empty($notifs['notifications'])) {
// Loop trough ever notification This creates an array with the output html for each
// notification and apply the correct template according to the notificationtype (label).
foreach ($notifs['notifications'] as $it) {
// We use the notification label to get the correct template file
$tpl_var_name = 'tpl_item_'.$it['label'];
$tpl_notif = get_markup_template($$tpl_var_name);
$notif_content[] = replace_macros($tpl_notif,[
'$item_label' => $it['label'],
'$item_link' => $it['link'],
'$item_image' => $it['image'],
'$item_url' => $it['url'],
'$item_text' => $it['text'],
'$item_when' => $it['when'],
'$item_ago' => $it['ago'],
'$item_seen' => $it['seen'],
]);
}
$notif_show_lnk = [
'href' => ($show ? 'notifications/'.$notifs['ident'] : 'notifications/'.$notifs['ident'].'?show=all' ),
'text' => ($show ? L10n::t('Show unread') : L10n::t('Show all')),
foreach ($notifs['notifications'] as $notif) {
$notification_templates = [
'like' => 'notifications_likes_item.tpl',
'dislike' => 'notifications_dislikes_item.tpl',
'attend' => 'notifications_attend_item.tpl',
'attendno' => 'notifications_attend_item.tpl',
'attendmaybe' => 'notifications_attend_item.tpl',
'friend' => 'notifications_friends_item.tpl',
'comment' => 'notifications_comments_item.tpl',
'post' => 'notifications_posts_item.tpl',
'notify' => 'notify.tpl',
];
// Output if there aren't any notifications available
if (count($notifs['notifications']) == 0) {
$notif_nocontent = L10n::t('No more %s notifications.', $notifs['ident']);
$tpl_notif = get_markup_template($notification_templates[$notif['label']]);
$notif_content[] = replace_macros($tpl_notif, [
'$item_label' => $notif['label'],
'$item_link' => $notif['link'],
'$item_image' => $notif['image'],
'$item_url' => $notif['url'],
'$item_text' => $notif['text'],
'$item_when' => $notif['when'],
'$item_ago' => $notif['ago'],
'$item_seen' => $notif['seen'],
]);
}
} else {
$notif_nocontent = L10n::t('No more %s notifications.', $notifs['ident']);
}
$o .= replace_macros($notif_tpl, [

View File

@ -9,127 +9,126 @@
*
* @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
*/
use Friendica\App;
use Friendica\Core\Addon;
use Friendica\Util\Network;
use Friendica\Util\ParseUrl;
require_once("include/items.php");
function parse_url_content(App $a) {
require_once 'include/items.php';
function parse_url_content(App $a)
{
$text = null;
$str_tags = "";
$str_tags = '';
$br = "\n";
if (!empty($_GET["binurl"])) {
$url = trim(hex2bin($_GET["binurl"]));
if (!empty($_GET['binurl'])) {
$url = trim(hex2bin($_GET['binurl']));
} else {
$url = trim($_GET["url"]);
$url = trim($_GET['url']);
}
if (!empty($_GET["title"])) {
$title = strip_tags(trim($_GET["title"]));
if (!empty($_GET['title'])) {
$title = strip_tags(trim($_GET['title']));
}
if (!empty($_GET["description"])) {
$text = strip_tags(trim($_GET["description"]));
if (!empty($_GET['description'])) {
$text = strip_tags(trim($_GET['description']));
}
if (!empty($_GET["tags"])) {
$arr_tags = ParseUrl::convertTagsToArray($_GET["tags"]);
if (!empty($_GET['tags'])) {
$arr_tags = ParseUrl::convertTagsToArray($_GET['tags']);
if (count($arr_tags)) {
$str_tags = $br . implode(" ", $arr_tags) . $br;
$str_tags = $br . implode(' ', $arr_tags) . $br;
}
}
// Add url scheme if it is missing
$arrurl = parse_url($url);
if (!x($arrurl, "scheme")) {
if (x($arrurl, "host")) {
$url = "http:".$url;
if (!x($arrurl, 'scheme')) {
if (x($arrurl, 'host')) {
$url = 'http:' . $url;
} else {
$url = "http://".$url;
$url = 'http://' . $url;
}
}
logger("prse_url: " . $url);
logger($url);
// Check if the URL is an image, video or audio file. If so format
// the URL with the corresponding BBCode media tag
$redirects = 0;
// Fetch the header of the URL
$result = Network::curl($url, false, $redirects, ["novalidate" => true, "nobody" => true]);
if($result["success"]) {
$result = Network::curl($url, false, $redirects, ['novalidate' => true, 'nobody' => true]);
if ($result['success']) {
// Convert the header fields into an array
$hdrs = [];
$h = explode("\n", $result["header"]);
$h = explode("\n", $result['header']);
foreach ($h as $l) {
$header = array_map("trim", explode(":", trim($l), 2));
$header = array_map('trim', explode(':', trim($l), 2));
if (count($header) == 2) {
list($k, $v) = $header;
$hdrs[$k] = $v;
}
}
if (array_key_exists("Content-Type", $hdrs)) {
$type = $hdrs["Content-Type"];
if (array_key_exists('Content-Type', $hdrs)) {
$type = $hdrs['Content-Type'];
}
if ($type) {
if(stripos($type, "image/") !== false) {
echo $br . "[img]" . $url . "[/img]" . $br;
killme();
if (stripos($type, 'image/') !== false) {
echo $br . '[img]' . $url . '[/img]' . $br;
exit();
}
if (stripos($type, "video/") !== false) {
echo $br . "[video]" . $url . "[/video]" . $br;
killme();
if (stripos($type, 'video/') !== false) {
echo $br . '[video]' . $url . '[/video]' . $br;
exit();
}
if (stripos($type, "audio/") !== false) {
echo $br . "[audio]" . $url . "[/audio]" . $br;
killme();
if (stripos($type, 'audio/') !== false) {
echo $br . '[audio]' . $url . '[/audio]' . $br;
exit();
}
}
}
$template = "[bookmark=%s]%s[/bookmark]%s";
$template = '[bookmark=%s]%s[/bookmark]%s';
$arr = ["url" => $url, "text" => ""];
$arr = ['url' => $url, 'text' => ''];
Addon::callHooks("parse_link", $arr);
Addon::callHooks('parse_link', $arr);
if (strlen($arr["text"])) {
echo $arr["text"];
killme();
if (strlen($arr['text'])) {
echo $arr['text'];
exit();
}
// If there is already some content information submitted we don't
// need to parse the url for content.
if (!empty($url) && !empty($title) && !empty($text)) {
$title = str_replace(["\r", "\n"], ['', ''], $title);
$title = str_replace(["\r","\n"],["",""],$title);
$text = "[quote]" . trim($text) . "[/quote]" . $br;
$text = '[quote]' . trim($text) . '[/quote]' . $br;
$result = sprintf($template, $url, ($title) ? $title : $url, $text) . $str_tags;
logger("parse_url (unparsed): returns: " . $result);
logger('(unparsed): returns: ' . $result);
echo $result;
killme();
exit();
}
// Fetch the information directly from the webpage
$siteinfo = ParseUrl::getSiteinfo($url);
unset($siteinfo["keywords"]);
unset($siteinfo['keywords']);
// Format it as BBCode attachment
$info = add_page_info_data($siteinfo);
echo $info;
killme();
exit();
}
/**
@ -151,7 +150,8 @@ function parse_url_content(App $a) {
* @todo Remove this function after all Addons has been changed to use
* ParseUrl::getSiteinfoCached
*/
function parseurl_getsiteinfo_cached($url, $no_guessing = false, $do_oembed = true) {
function parseurl_getsiteinfo_cached($url, $no_guessing = false, $do_oembed = true)
{
$siteinfo = ParseUrl::getSiteinfoCached($url, $no_guessing, $do_oembed);
return $siteinfo;
}

View File

@ -212,7 +212,7 @@ function photos_post(App $a)
}
// Check if the user has responded to a delete confirmation query
if ($_REQUEST['canceled']) {
if (!empty($_REQUEST['canceled'])) {
goaway($_SESSION['photo_return']);
}
@ -762,12 +762,14 @@ function photos_post(App $a)
$filesize = $ret['filesize'];
$type = $ret['type'];
$error = UPLOAD_ERR_OK;
} else {
} elseif (!empty($_FILES['userfile'])) {
$src = $_FILES['userfile']['tmp_name'];
$filename = basename($_FILES['userfile']['name']);
$filesize = intval($_FILES['userfile']['size']);
$type = $_FILES['userfile']['type'];
$error = $_FILES['userfile']['error'];
} else {
$error = UPLOAD_ERR_NO_FILE;
}
if ($error !== UPLOAD_ERR_OK) {
@ -1633,7 +1635,7 @@ function photos_content(App $a)
'$paginate' => $paginate,
]);
$a->page['htmlhead'] .= "\n" . '<meta name="twitter:card" content="photo" />' . "\n";
$a->page['htmlhead'] .= "\n" . '<meta name="twitter:card" content="summary_large_image" />' . "\n";
$a->page['htmlhead'] .= '<meta name="twitter:title" content="' . $photo["album"] . '" />' . "\n";
$a->page['htmlhead'] .= '<meta name="twitter:image" content="' . $photo["href"] . '" />' . "\n";
$a->page['htmlhead'] .= '<meta name="twitter:image:width" content="' . $photo["width"] . '" />' . "\n";

View File

@ -511,15 +511,16 @@ function ping_get_notifications($uid)
* @deprecated
*
* @param array $data The initial ping data array
* @param int $sysnotify Number of unseen system notifications
* @param int $sysnotify_count Number of unseen system notifications
* @param array $notifs Complete list of notification
* @param array $sysmsgs List of system notice messages
* @param array $sysmsgs_info List of system info messages
* @param int $groups_unseen Number of unseen group items
* @param int $forums_unseen Number of unseen forum items
*
* @return array XML-transform ready data array
*/
function ping_format_xml_data($data, $sysnotify, $notifs, $sysmsgs, $sysmsgs_info, $groups_unseen, $forums_unseen)
function ping_format_xml_data($data, $sysnotify_count, $notifs, $sysmsgs, $sysmsgs_info, $groups_unseen, $forums_unseen)
{
$notifications = [];
foreach ($notifs as $key => $notif) {

View File

@ -24,19 +24,20 @@ use Friendica\Model\Item;
require_once 'include/security.php';
require_once 'include/items.php';
function poke_init(App $a) {
function poke_init(App $a)
{
if (!local_user()) {
return;
}
$uid = local_user();
$verb = notags(trim($_GET['verb']));
if (!$verb) {
if (empty($_GET['verb'])) {
return;
}
$verb = notags(trim($_GET['verb']));
$verbs = get_poke_verbs();
if (!array_key_exists($verb, $verbs)) {
@ -99,7 +100,7 @@ function poke_init(App $a) {
$arr['guid'] = System::createGUID(32);
$arr['uid'] = $uid;
$arr['uri'] = $uri;
$arr['parent-uri'] = ($parent_uri ? $parent_uri : $uri);
$arr['parent-uri'] = (!empty($parent_uri) ? $parent_uri : $uri);
$arr['wall'] = 1;
$arr['contact-id'] = $poster['id'];
$arr['owner-name'] = $poster['name'];
@ -121,7 +122,7 @@ function poke_init(App $a) {
$arr['origin'] = 1;
$arr['body'] = '[url=' . $poster['url'] . ']' . $poster['name'] . '[/url]' . ' ' . L10n::t($verbs[$verb][0]) . ' ' . '[url=' . $target['url'] . ']' . $target['name'] . '[/url]';
$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $target['name'] . '</title><id>' . System::baseUrl() . '/contact/' . $target['id'] . '</id>';
$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $target['name'] . '</title><id>' . $target['url'] . '</id>';
$arr['object'] .= '<link>' . xmlify('<link rel="alternate" type="text/html" href="' . $target['url'] . '" />' . "\n");
$arr['object'] .= xmlify('<link rel="photo" type="image/jpeg" href="' . $target['photo'] . '" />' . "\n");
@ -137,10 +138,8 @@ function poke_init(App $a) {
return;
}
function poke_content(App $a) {
function poke_content(App $a)
{
if (!local_user()) {
notice(L10n::t('Permission denied.') . EOL);
return;
@ -149,17 +148,17 @@ function poke_content(App $a) {
$name = '';
$id = '';
if (intval($_GET['c'])) {
$r = q("SELECT `id`,`name` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($_GET['c']),
intval(local_user())
);
if (DBA::isResult($r)) {
$name = $item['name'];
$id = $item['id'];
}
if (empty($_GET['c'])) {
return;
}
$contact = DBA::selectFirst('contact', ['id', 'name'], ['id' => $_GET['c'], 'uid' => local_user()]);
if (!DBA::isResult($contact)) {
return;
}
$name = $contact['name'];
$id = $contact['id'];
$base = System::baseUrl();

View File

@ -333,7 +333,7 @@ function profile_content(App $a, $update = 0)
}
}
$o .= conversation($a, $items, 'profile', $update, false, 'commented', local_user());
$o .= conversation($a, $items, 'profile', $update, false, 'created', local_user());
if (!$update) {
$o .= alt_pager($a, count($items));

View File

@ -41,14 +41,14 @@ function salmon_post(App $a, $xml = '') {
$base = null;
// figure out where in the DOM tree our data is hiding
if($dom->provenance->data)
if (!empty($dom->provenance->data))
$base = $dom->provenance;
elseif($dom->env->data)
elseif (!empty($dom->env->data))
$base = $dom->env;
elseif($dom->data)
elseif (!empty($dom->data))
$base = $dom;
if(! $base) {
if (empty($base)) {
logger('unable to locate salmon data in xml ');
System::httpExit(400);
}

View File

@ -10,53 +10,67 @@ use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Model\Contact;
use Friendica\Model\Profile;
use Friendica\Model\User;
function unfollow_post(App $a)
function unfollow_post()
{
$return_url = $_SESSION['return_url'];
if (!local_user()) {
notice(L10n::t('Permission denied.') . EOL);
goaway($_SESSION['return_url']);
notice(L10n::t('Permission denied.'));
goaway($return_url);
// NOTREACHED
}
if ($_REQUEST['cancel']) {
goaway($_SESSION['return_url']);
if (!empty($_REQUEST['cancel'])) {
goaway($return_url);
}
$uid = local_user();
$url = notags(trim($_REQUEST['url']));
$return_url = $_SESSION['return_url'];
$url = notags(trim(defaults($_REQUEST, 'url', '')));
$condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?",
$uid, Contact::FRIEND, normalise_link($url),
normalise_link($url), $url, Protocol::STATUSNET];
$condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?)",
$uid, Contact::SHARING, Contact::FRIEND, normalise_link($url),
normalise_link($url), $url];
$contact = DBA::selectFirst('contact', [], $condition);
if (!DBA::isResult($contact)) {
notice(L10n::t("Contact wasn't found or can't be unfollowed."));
} else {
if (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DIASPORA, Protocol::DFRN])) {
$r = q("SELECT `contact`.*, `user`.* FROM `contact` INNER JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `user`.`uid` = %d AND `contact`.`self` LIMIT 1",
intval($uid)
);
if (DBA::isResult($r)) {
Contact::terminateFriendship($r[0], $contact);
}
}
DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
info(L10n::t('Contact unfollowed').EOL);
goaway(System::baseUrl().'/contacts/'.$contact['id']);
}
notice(L10n::t("You aren't following this contact."));
goaway($return_url);
// NOTREACHED
}
if (!in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
notice(L10n::t('Unfollowing is currently not supported by your network.'));
goaway($return_url);
// NOTREACHED
}
$dissolve = ($contact['rel'] == Contact::SHARING);
$owner = User::getOwnerDataById($uid);
if ($owner) {
Contact::terminateFriendship($owner, $contact, $dissolve);
}
// Sharing-only contacts get deleted as there no relationship any more
if ($dissolve) {
Contact::remove($contact['id']);
$return_path = 'contacts';
} else {
DBA::update('contact', ['rel' => Contact::FOLLOWER], ['id' => $contact['id']]);
$return_path = 'contacts/' . $contact['id'];
}
info(L10n::t('Contact unfollowed'));
goaway($return_path);
// NOTREACHED
}
function unfollow_content(App $a)
{
if (!local_user()) {
notice(L10n::t('Permission denied.') . EOL);
notice(L10n::t('Permission denied.'));
goaway($_SESSION['return_url']);
// NOTREACHED
}
@ -64,78 +78,74 @@ function unfollow_content(App $a)
$uid = local_user();
$url = notags(trim($_REQUEST['url']));
$submit = L10n::t('Submit Request');
$condition = ["`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?",
local_user(), Contact::FRIEND, normalise_link($url),
normalise_link($url), $url, Protocol::STATUSNET];
$condition = ["`uid` = ? AND (`rel` = ? OR `rel` = ?) AND (`nurl` = ? OR `alias` = ? OR `alias` = ?)",
local_user(), Contact::SHARING, Contact::FRIEND, normalise_link($url),
normalise_link($url), $url];
$contact = DBA::selectFirst('contact', ['url', 'network', 'addr', 'name'], $condition);
if (!DBA::isResult($contact)) {
notice(L10n::t("You aren't a friend of this contact.").EOL);
$submit = "";
notice(L10n::t("You aren't following this contact."));
goaway('contacts');
// NOTREACHED
}
if (!in_array($contact['network'], [Protocol::DIASPORA, Protocol::OSTATUS, Protocol::DFRN])) {
notice(L10n::t("Unfollowing is currently not supported by your network.").EOL);
$submit = "";
if (!in_array($contact['network'], Protocol::NATIVE_SUPPORT)) {
notice(L10n::t('Unfollowing is currently not supported by your network.'));
goaway('contacts/' . $contact['id']);
// NOTREACHED
}
$request = System::baseUrl()."/unfollow";
$request = System::baseUrl() . '/unfollow';
$tpl = get_markup_template('auto_request.tpl');
$r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", intval($uid));
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
if (!$r) {
notice(L10n::t('Permission denied.') . EOL);
if (!DBA::isResult($self)) {
notice(L10n::t('Permission denied.'));
goaway($_SESSION['return_url']);
// NOTREACHED
}
$myaddr = $r[0]["url"];
// Makes the connection request for friendica contacts easier
$_SESSION["fastlane"] = $contact["url"];
$_SESSION['fastlane'] = $contact['url'];
$header = L10n::t("Disconnect/Unfollow");
$header = L10n::t('Disconnect/Unfollow');
$o = replace_macros($tpl, [
'$header' => htmlentities($header),
'$desc' => "",
'$pls_answer' => "",
'$does_know_you' => "",
'$add_note' => "",
'$page_desc' => "",
'$friendica' => "",
'$statusnet' => "",
'$diaspora' => "",
'$diasnote' => "",
'$desc' => '',
'$pls_answer' => '',
'$does_know_you' => '',
'$add_note' => '',
'$page_desc' => '',
'$friendica' => '',
'$statusnet' => '',
'$diaspora' => '',
'$diasnote' => '',
'$your_address' => L10n::t('Your Identity Address:'),
'$invite_desc' => "",
'$emailnet' => "",
'$submit' => $submit,
'$invite_desc' => '',
'$emailnet' => '',
'$submit' => L10n::t('Submit Request'),
'$cancel' => L10n::t('Cancel'),
'$nickname' => "",
'$name' => $contact["name"],
'$url' => $contact["url"],
'$zrl' => Contact::magicLink($contact["url"]),
'$url_label' => L10n::t("Profile URL"),
'$myaddr' => $myaddr,
'$nickname' => '',
'$name' => $contact['name'],
'$url' => $contact['url'],
'$zrl' => Contact::magicLink($contact['url']),
'$url_label' => L10n::t('Profile URL'),
'$myaddr' => $self['url'],
'$request' => $request,
'$keywords' => "",
'$keywords_label' => ""
'$keywords' => '',
'$keywords_label'=> ''
]);
$a->page['aside'] = "";
Profile::load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
$a->page['aside'] = '';
Profile::load($a, '', 0, Contact::getDetailsByURL($contact['url']));
$o .= replace_macros(get_markup_template('section_title.tpl'), ['$title' => L10n::t('Status Messages and Posts')]);
// Show last public posts
$o .= Contact::getPostsFromUrl($contact["url"]);
$o .= Contact::getPostsFromUrl($contact['url']);
return $o;
}

View File

@ -367,11 +367,12 @@ function videos_content(App $a)
foreach ($r as $rr) {
$alt_e = $rr['filename'];
/// @todo The album isn't part of the above query. This seems to be some unfinished code that needs to be reworked completely.
$rr['album'] = '';
$name_e = $rr['album'];
$videos[] = [
'id' => $rr['id'],
'link' => System::baseUrl() . '/videos/' . $a->data['user']['nickname'] . '/video/' . $rr['resource-id'],
'link' => System::baseUrl() . '/videos/' . $a->data['user']['nickname'] . '/video/' . $rr['hash'],
'title' => L10n::t('View Video'),
'src' => System::baseUrl() . '/attach/' . $rr['id'] . '?attachment=0',
'alt' => $alt_e,

View File

@ -23,7 +23,7 @@ function webfinger_content(App $a)
$o = '<h3>Webfinger Diagnostic</h3>';
$o .= '<form action="webfinger" method="get">';
$o .= 'Lookup address: <input type="text" style="width: 250px;" name="addr" value="' . $_GET['addr'] .'" />';
$o .= 'Lookup address: <input type="text" style="width: 250px;" name="addr" value="' . defaults($_GET, 'addr', '') .'" />';
$o .= '<input type="submit" name="submit" value="Submit" /></form>';
$o .= '<br /><br />';

View File

@ -372,13 +372,13 @@ class App
}
if (file_exists($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php')) {
$this->loadConfigFile($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php');
$this->loadConfigFile($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'local.ini.php', true);
}
}
/**
* Tries to load the specified configuration file into the App->config array.
* Overwrites previously set values.
* Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config.
*
* The config format is INI and the template for configuration files is the following:
*
@ -391,9 +391,10 @@ class App
* // Keep this line
*
* @param type $filepath
* @param bool $overwrite Force value overwrite if the config key already exists
* @throws Exception
*/
public function loadConfigFile($filepath)
public function loadConfigFile($filepath, $overwrite = false)
{
if (!file_exists($filepath)) {
throw new Exception('Error parsing non-existent config file ' . $filepath);
@ -409,7 +410,11 @@ class App
foreach ($config as $category => $values) {
foreach ($values as $key => $value) {
if ($overwrite) {
$this->setConfigValue($category, $key, $value);
} else {
$this->setDefaultConfigValue($category, $key, $value);
}
}
}
}
@ -427,7 +432,7 @@ class App
// Load the local addon config file to overwritten default addon config values
if (file_exists($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'addon.ini.php')) {
$this->loadConfigFile($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'addon.ini.php');
$this->loadConfigFile($this->basepath . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'addon.ini.php', true);
}
}
@ -1074,7 +1079,11 @@ class App
$meminfo = [];
foreach ($memdata as $line) {
list($key, $val) = explode(':', $line);
$data = explode(':', $line);
if (count($data) != 2) {
continue;
}
list($key, $val) = $data;
$meminfo[$key] = (int) trim(str_replace('kB', '', $val));
$meminfo[$key] = (int) ($meminfo[$key] / 1024);
}
@ -1240,6 +1249,20 @@ class App
return $return;
}
/**
* Sets a default value in the config cache. Ignores already existing keys.
*
* @param string $cat Config category
* @param string $k Config key
* @param mixed $v Default value to set
*/
private function setDefaultConfigValue($cat, $k, $v)
{
if (!isset($this->config[$cat][$k])) {
$this->setConfigValue($cat, $k, $v);
}
}
/**
* Sets a value in the config cache. Accepts raw output from the config table
*

View File

@ -9,7 +9,7 @@ namespace Friendica;
* The filename of the module in src/Module needs to match the class name
* exactly to make the module available.
*
* @author Hypolite Petovan mrpetovan@gmail.com
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
abstract class BaseModule extends BaseObject
{

View File

@ -31,7 +31,7 @@ require_once 'include/dba.php';
*
* @see https://oembed.com
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class OEmbed
{

View File

@ -25,7 +25,6 @@ use Friendica\Util\Map;
use Friendica\Util\Network;
use Friendica\Util\ParseUrl;
use Friendica\Util\Proxy as ProxyUtils;
use League\HTMLToMarkdown\HtmlConverter;
class BBCode extends BaseObject
{
@ -348,7 +347,7 @@ class BBCode extends BaseObject
*/
public static function toPlaintext($text, $keep_urls = true)
{
$naked_text = preg_replace('/\[(.+?)\]/','', $text);
$naked_text = preg_replace('/\[(.+?)\]\s*/','', $text);
if (!$keep_urls) {
$naked_text = preg_replace('#https?\://[^\s<]+[^\s\.\)]#i', '', $naked_text);
}
@ -572,24 +571,26 @@ class BBCode extends BaseObject
$return = sprintf('<div class="type-%s">', $data["type"]);
}
if (!empty($data['title']) && !empty($data['url'])) {
if (!empty($data["image"]) && empty($data["text"]) && ($data["type"] == "photo")) {
$return .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a>', $data["url"], self::proxyUrl($data["image"], $simplehtml), $data["title"]);
} else {
if (!empty($data["image"])) {
$return .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a><br />', $data["url"], self::proxyUrl($data["image"], $simplehtml), $data["title"]);
} elseif (!empty($data["preview"])) {
$return .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-preview" /></a><br />', $data["url"], self::proxyUrl($data["preview"], $simplehtml), $data["title"]);
}
if (($data["type"] == "photo") && !empty($data["url"]) && !empty($data["image"])) {
$return .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a>', $data["url"], self::proxyUrl($data["image"], $simplehtml), $data["title"]);
} else {
$return .= sprintf('<h4><a href="%s">%s</a></h4>', $data['url'], $data['title']);
}
}
if (!empty($data["description"]) && $data["description"] != $data["title"]) {
// Sanitize the HTML by converting it to BBCode
$bbcode = HTML::toBBCode($data["description"]);
$return .= sprintf('<blockquote>%s</blockquote>', trim(self::convert($bbcode)));
}
if ($data["type"] == "link") {
if (!empty($data['url'])) {
$return .= sprintf('<sup><a href="%s">%s</a></sup>', $data['url'], parse_url($data['url'], PHP_URL_HOST));
}
@ -1162,21 +1163,6 @@ class BBCode extends BaseObject
return $return;
}
private static function textHighlightCallback($match)
{
// Fallback in case the language doesn't exist
$return = '[code]' . $match[2] . '[/code]';
if (in_array(strtolower($match[1]),
['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby',
'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh', 'bash'])
) {
$return = text_highlight($match[2], strtolower($match[1]));
}
return $return;
}
/**
* @brief Converts a BBCode message to HTML message
*
@ -1225,6 +1211,22 @@ class BBCode extends BaseObject
return $return;
};
// Extracting multi-line code blocks before the whitespace processing
$codeblocks = [];
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is",
function ($matches) use (&$codeblocks) {
$return = $matches[0];
if (strpos($matches[2], "\n") !== false) {
$return = '#codeblock-' . count($codeblocks) . '#';
$codeblocks[] = '<pre><code class="language-' . trim($matches[1]) . '">' . trim($matches[2], "\n\r") . '</code></pre>';
}
return $return;
},
$text
);
// Hide all [noparse] contained bbtags by spacefying them
// POSSIBLE BUG --> Will the 'preg' functions crash if there's an embedded image?
@ -1271,11 +1273,6 @@ class BBCode extends BaseObject
$text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism", "\n[share$1$2]$3[/share]", $text);
}
// Check for [code] text here, before the linefeeds are messed with.
// The highlighter will unescape and re-escape the content.
if (strpos($text, '[code=') !== false) {
$text = preg_replace_callback("/\[code=(.*?)\](.*?)\[\/code\]/ism", 'self::textHighlightCallback', $text);
}
// Convert new line chars to html <br /> tags
// nlbr seems to be hopelessly messed up
@ -1769,6 +1766,18 @@ class BBCode extends BaseObject
$text = self::interpolateSavedImagesIntoItemBody($text, $saved_image);
}
// Restore code blocks
$text = preg_replace_callback('/#codeblock-([0-9]+)#/iU',
function ($matches) use ($codeblocks) {
$return = $matches[0];
if (isset($codeblocks[intval($matches[1])])) {
$return = $codeblocks[$matches[1]];
}
return $return;
},
$text
);
// Clean up the HTML by loading and saving the HTML with the DOM.
// Bad structured html can break a whole page.
// For performance reasons do it only with ativated item cache or at export.
@ -1903,23 +1912,6 @@ class BBCode extends BaseObject
// Converting images with size parameters to simple images. Markdown doesn't know it.
$text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text);
// Extracting multi-line code blocks before the whitespace processing/code highlighter in self::convert()
$codeblocks = [];
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is",
function ($matches) use (&$codeblocks) {
$return = $matches[0];
if (strpos($matches[2], "\n") !== false) {
$return = '#codeblock-' . count($codeblocks) . '#';
$prefix = '````' . $matches[1] . PHP_EOL;
$codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````';
}
return $return;
},
$text
);
// Convert it to HTML - don't try oembed
if ($for_diaspora) {
$text = self::convert($text, false, 3);
@ -1949,8 +1941,7 @@ class BBCode extends BaseObject
$stamp1 = microtime(true);
// Now convert HTML to Markdown
$converter = new HtmlConverter();
$text = $converter->convert($text);
$text = HTML::toMarkdown($text);
// unmask the special chars back to HTML
$text = str_replace(['&\_lt\_;', '&\_gt\_;', '&\_amp\_;'], ['&lt;', '&gt;', '&amp;'], $text);
@ -1973,18 +1964,6 @@ class BBCode extends BaseObject
);
}
// Restore code blocks
$text = preg_replace_callback('/#codeblock-([0-9]+)#/iU',
function ($matches) use ($codeblocks) {
$return = '';
if (isset($codeblocks[intval($matches[1])])) {
$return = $codeblocks[$matches[1]];
}
return $return;
},
$text
);
Addon::callHooks('bb2diaspora', $text);
return $text;

View File

@ -11,6 +11,7 @@ use DOMXPath;
use Friendica\Core\Addon;
use Friendica\Util\Network;
use Friendica\Util\XML;
use League\HTMLToMarkdown\HtmlConverter;
class HTML
{
@ -122,7 +123,7 @@ class HTML
// Removing code blocks before the whitespace removal processing below
$codeblocks = [];
$message = preg_replace_callback(
'#<pre><code(?: class="([^"]*)")?>(.*)</code></pre>#iUs',
'#<pre><code(?: class="language-([^"]*)")?>(.*)</code></pre>#iUs',
function ($matches) use (&$codeblocks) {
$return = '[codeblock-' . count($codeblocks) . ']';
@ -131,7 +132,7 @@ class HTML
$prefix = '[code=' . $matches[1] . ']';
}
$codeblocks[] = $prefix . trim($matches[2]) . '[/code]';
$codeblocks[] = $prefix . PHP_EOL . trim($matches[2]) . PHP_EOL . '[/code]';
return $return;
},
$message
@ -672,4 +673,19 @@ class HTML
return trim($message);
}
/**
* Converts provided HTML code to Markdown. The hardwrap parameter maximizes
* compatibility with Diaspora in spite of the Markdown standards.
*
* @param string $html
* @return string
*/
public static function toMarkdown($html)
{
$converter = new HtmlConverter(['hard_break' => true]);
$markdown = $converter->convert($html);
return $markdown;
}
}

View File

@ -14,7 +14,7 @@ use Friendica\Content\Text\HTML;
/**
* Friendica-specific usage of Markdown
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Markdown extends BaseObject
{
@ -32,6 +32,7 @@ class Markdown extends BaseObject
$MarkdownParser = new MarkdownExtra();
$MarkdownParser->hard_wrap = $hardwrap;
$MarkdownParser->code_class_prefix = 'language-';
$html = $MarkdownParser->transform($text);
self::getApp()->save_timestamp($stamp1, "parser");

View File

@ -17,7 +17,7 @@ use Friendica\Util\Network;
/**
* Handle ACL management and display
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class ACL extends BaseObject
{

View File

@ -9,7 +9,7 @@ use Friendica\Util\DateTimeFormat;
/**
* Database Cache Driver
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class DatabaseCacheDriver extends AbstractCacheDriver implements ICacheDriver
{

View File

@ -7,7 +7,7 @@ use Friendica\Core\Cache;
/**
* Cache Driver Interface
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
interface ICacheDriver
{

View File

@ -10,7 +10,7 @@ use Memcache;
/**
* Memcache Cache Driver
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class MemcacheCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
{

View File

@ -10,7 +10,7 @@ use Memcached;
/**
* Memcached Cache Driver
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
{

View File

@ -10,7 +10,7 @@ use Redis;
/**
* Redis Cache Driver. This driver is based on Memcache driver
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
* @author Roland Haeder <roland@mxchange.org>
*/
class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver

View File

@ -4,7 +4,7 @@ namespace Friendica\Core\Config;
/**
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
interface IConfigAdapter
{

View File

@ -11,7 +11,7 @@ require_once 'include/dba.php';
*
* Default Config Adapter. Provides the best performance for pages loading few configuration variables.
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class JITConfigAdapter extends BaseObject implements IConfigAdapter
{

View File

@ -11,7 +11,7 @@ require_once 'include/dba.php';
*
* Default PConfig Adapter. Provides the best performance for pages loading few configuration variables.
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class JITPConfigAdapter extends BaseObject implements IPConfigAdapter
{

View File

@ -13,7 +13,7 @@ require_once 'include/dba.php';
*
* Minimizes the number of database queries to retrieve configuration values at the cost of memory.
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class PreloadConfigAdapter extends BaseObject implements IConfigAdapter
{

View File

@ -13,7 +13,7 @@ require_once 'include/dba.php';
*
* Minimizes the number of database queries to retrieve configuration values at the cost of memory.
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class PreloadPConfigAdapter extends BaseObject implements IPConfigAdapter
{

View File

@ -5,7 +5,7 @@ namespace Friendica\Core;
/**
* Description of Console
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Console extends \Asika\SimpleConsole\Console
{

View File

@ -37,8 +37,8 @@ require_once 'include/text.php';
* set to the value of the last parameter. (e.g. "system loglevel 0" will
* disable logging)
*
* @author Tobias Diekershoff
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Tobias Diekershoff <tobias.diekershoff@gmx.net>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Config extends \Asika\SimpleConsole\Console
{

View File

@ -5,7 +5,7 @@ namespace Friendica\Core\Console;
/**
* Description of CreateDoxygen
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class CreateDoxygen extends \Asika\SimpleConsole\Console
{

View File

@ -11,9 +11,9 @@ require_once 'boot.php';
require_once 'include/dba.php';
/**
* @brief Does database updates from the command line
* @brief Performs database updates from the command line
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class DatabaseStructure extends \Asika\SimpleConsole\Console
{
@ -22,7 +22,7 @@ class DatabaseStructure extends \Asika\SimpleConsole\Console
protected function getHelp()
{
$help = <<<HELP
console dbstructure - Does database updates
console dbstructure - Performs database updates
Usage
bin/console dbstructure <command> [-h|--help|-?] [-v]

View File

@ -22,7 +22,7 @@ namespace Friendica\Core\Console;
* This is done for all files, so, in the end removing one file leads to a working doc build.
*
* @author Alexander Kampmann
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class DocBloxErrorChecker extends \Asika\SimpleConsole\Console
{

View File

@ -8,7 +8,7 @@ namespace Friendica\Core\Console;
*
* Outputs a PHP file with language strings used by Friendica
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Extract extends \Asika\SimpleConsole\Console
{

View File

@ -13,8 +13,8 @@ use Friendica\Model\Contact;
*
* License: AGPLv3 or later, same as Friendica
*
* @author Tobias Diekershoff <mrpetovan@gmail.com>
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Tobias Diekershoff <tobias.diekershoff@gmx.net>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class GlobalCommunityBlock extends \Asika\SimpleConsole\Console
{

View File

@ -19,8 +19,8 @@ require_once 'include/text.php';
*
* License: AGPLv3 or later, same as Friendica
*
* @author Tobias Diekershoff
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Tobias Diekershoff <tobias.diekershoff@gmx.net>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class GlobalCommunitySilence extends \Asika\SimpleConsole\Console
{

View File

@ -10,7 +10,7 @@ require_once 'include/dba.php';
/**
* @brief Sets maintenance mode for this node
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Maintenance extends \Asika\SimpleConsole\Console
{

View File

@ -5,7 +5,7 @@ namespace Friendica\Core\Console;
/**
* Read a strings.php file and create messages.po in the same directory
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class PhpToPo extends \Asika\SimpleConsole\Console
{

View File

@ -5,7 +5,7 @@ namespace Friendica\Core\Console;
/**
* Read a messages.po file and create strings.php in the same directory
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class PoToPhp extends \Asika\SimpleConsole\Console
{

View File

@ -3,26 +3,51 @@
namespace Friendica\Core\Console;
use Friendica\Core\L10n;
use Friendica\Core\Config;
/**
* @brief tool to block an account from the node
*
* With this tool, you can block an account in such a way, that no postings
* or comments this account writes are accepted to the node.
* Performs database post updates
*
* License: AGPLv3 or later, same as Friendica
*
* @author Tobias Diekershoff <mrpetovan@gmail.com>
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Tobias Diekershoff <tobias.diekershoff@gmx.net>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class PostUpdate extends \Asika\SimpleConsole\Console
{
protected $helpOptions = ['h', 'help', '?'];
protected function getHelp()
{
$help = <<<HELP
console postupdate - Performs database post updates
Usage
bin/console postupdate [-h|--help|-?] [--reset <version>]
Options
-h|--help|-? Show help information
--reset <version> Reset the post update version
HELP;
return $help;
}
protected function doExecute()
{
$a = get_app();
if (count($this->args) > 0) {
throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
if ($this->getOption($this->helpOptions)) {
$this->out($this->getHelp());
return 0;
}
$reset_version = $this->getOption('reset');
if (is_bool($reset_version)) {
$this->out($this->getHelp());
return 0;
} elseif ($reset_version) {
Config::set('system', 'post_update_version', $reset_version);
echo L10n::t('Post update version number has been set to %s.', $reset_version) . "\n";
return 0;
}
if ($a->isInstallMode()) {

View File

@ -6,7 +6,7 @@ namespace Friendica\Core\Console;
* Tired of chasing typos and finding them after a commit.
* Run this and quickly see if we've got any parse errors in our application files.
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Typo extends \Asika\SimpleConsole\Console
{

View File

@ -9,31 +9,37 @@ use Friendica\Util\Network;
/**
* Manage compatibility with federated networks
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Protocol
{
// Native support
const ACTIVITYPUB = 'apub'; // ActivityPub
const DFRN = 'dfrn'; // Friendica, Mistpark, other DFRN implementations
const DIASPORA = 'dspr'; // Diaspora
const DIASPORA2 = 'dspc'; // Diaspora connector
const STATUSNET = 'stac'; // Statusnet connector
const OSTATUS = 'stat'; // GNU-social, Pleroma, Mastodon, other OStatus implementations
const FEED = 'feed'; // RSS/Atom feeds with no known "post/notify" protocol
const MAIL = 'mail'; // IMAP/POP
const XMPP = 'xmpp'; // XMPP - Currently unsupported
const OSTATUS = 'stat'; // GNU-social, Pleroma, Mastodon, other OStatus implementations
const FACEBOOK = 'face'; // Facebook API
const LINKEDIN = 'lnkd'; // LinkedIn
const MYSPACE = 'mysp'; // MySpace - Currently unsupported
const GPLUS = 'goog'; // Google+
const PUMPIO = 'pump'; // pump.io
const TWITTER = 'twit'; // Twitter
const NATIVE_SUPPORT = [self::DFRN, self::DIASPORA, self::OSTATUS, self::FEED, self::MAIL, self::ACTIVITYPUB];
// Supported through a connector
const APPNET = 'apdn'; // app.net - Dead protocol
const DIASPORA2 = 'dspc'; // Diaspora connector
const FACEBOOK = 'face'; // Facebook API
const GPLUS = 'goog'; // Google+
const LINKEDIN = 'lnkd'; // LinkedIn
const PUMPIO = 'pump'; // pump.io
const STATUSNET = 'stac'; // Statusnet connector
const TWITTER = 'twit'; // Twitter
const NEWS = 'nntp'; // Network News Transfer Protocol - Currently unsupported
const ICALENDAR = 'ical'; // iCalendar - Currently unsupported
const PNUT = 'pnut'; // pnut.io - Currently unsupported
const ZOT = 'zot!'; // Zot! - Currently unsupported
// Currently unsupported
const ICALENDAR = 'ical'; // iCalendar
const MYSPACE = 'mysp'; // MySpace
const NEWS = 'nntp'; // Network News Transfer Protocol
const PNUT = 'pnut'; // pnut.io
const XMPP = 'xmpp'; // XMPP
const ZOT = 'zot!'; // Zot!
const PHANTOM = 'unkn'; // Place holder

View File

@ -11,7 +11,7 @@ use Friendica\Core\Session\DatabaseSessionHandler;
/**
* High-level Session service class
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Session
{

View File

@ -13,7 +13,7 @@ require_once 'include/text.php';
/**
* SessionHandler using Friendica Cache
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class CacheSessionHandler extends BaseObject implements SessionHandlerInterface
{

View File

@ -14,7 +14,7 @@ require_once 'include/text.php';
/**
* SessionHandler using database
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class DatabaseSessionHandler extends BaseObject implements SessionHandlerInterface
{

View File

@ -27,9 +27,6 @@ class PostUpdate
if (!self::update1194()) {
return false;
}
if (!self::update1198()) {
return false;
}
if (!self::update1206()) {
return false;
}
@ -111,88 +108,6 @@ class PostUpdate
logger("Done", LOGGER_DEBUG);
}
/**
* @brief set the author-id and owner-id in all item entries
*
* This job has to be started multiple times until all entries are set.
* It isn't started in the update function since it would consume too much time and can be done in the background.
*
* @return bool "true" when the job is done
*/
private static function update1198()
{
// Was the script completed?
if (Config::get("system", "post_update_version") >= 1198) {
return true;
}
logger("Start", LOGGER_DEBUG);
// Check if the first step is done (Setting "author-id" and "owner-id" in the item table)
$fields = ['author-link', 'author-name', 'author-avatar', 'owner-link', 'owner-name', 'owner-avatar', 'network', 'uid'];
$r = DBA::select('item', $fields, ['author-id' => 0, 'owner-id' => 0], ['limit' => 1000]);
if (!$r) {
// Are there unfinished entries in the thread table?
$r = q("SELECT COUNT(*) AS `total` FROM `thread`
INNER JOIN `item` ON `item`.`id` =`thread`.`iid`
WHERE `thread`.`author-id` = 0 AND `thread`.`owner-id` = 0 AND
(`thread`.`uid` IN (SELECT `uid` from `user`) OR `thread`.`uid` = 0)");
if ($r && ($r[0]["total"] == 0)) {
Config::set("system", "post_update_version", 1198);
logger("Done", LOGGER_DEBUG);
return true;
}
// Update the thread table from the item table
$r = q("UPDATE `thread` INNER JOIN `item` ON `item`.`id`=`thread`.`iid`
SET `thread`.`author-id` = `item`.`author-id`,
`thread`.`owner-id` = `item`.`owner-id`
WHERE `thread`.`author-id` = 0 AND `thread`.`owner-id` = 0 AND
(`thread`.`uid` IN (SELECT `uid` from `user`) OR `thread`.`uid` = 0)");
logger("Updated threads", LOGGER_DEBUG);
if (DBA::isResult($r)) {
Config::set("system", "post_update_version", 1198);
logger("Done", LOGGER_DEBUG);
return true;
}
return false;
}
logger("Query done", LOGGER_DEBUG);
$item_arr = [];
foreach ($r as $item) {
$index = $item["author-link"]."-".$item["owner-link"]."-".$item["uid"];
$item_arr[$index] = ["author-link" => $item["author-link"],
"owner-link" => $item["owner-link"],
"uid" => $item["uid"]];
}
// Set the "author-id" and "owner-id" in the item table and add a new public contact entry if needed
foreach ($item_arr as $item) {
$default = ['url' => $item['author-link'], 'name' => $item['author-name'],
'photo' => $item['author-avatar'], 'network' => $item['network']];
$author_id = Contact::getIdForURL($item["author-link"], 0, false, $default);
$default = ['url' => $item['owner-link'], 'name' => $item['owner-name'],
'photo' => $item['owner-avatar'], 'network' => $item['network']];
$owner_id = Contact::getIdForURL($item["owner-link"], 0, false, $default);
if ($author_id == 0) {
$author_id = -1;
}
if ($owner_id == 0) {
$owner_id = -1;
}
DBA::update('item', ['author-id' => $author_id, 'owner-id' => $owner_id], ['uid' => $item['uid'], 'author-link' => $item['author-link'], 'owner-link' => $item['owner-link'], 'author-id' => 0, 'owner-id' => 0]);
}
logger("Updated items", LOGGER_DEBUG);
return false;
}
/**
* @brief update the "last-item" field in the "self" contact
*
@ -253,6 +168,12 @@ class PostUpdate
$condition = ["`id` > ?", $id];
$params = ['order' => ['id'], 'limit' => 10000];
$items = Item::select($fields, $condition, $params);
if (DBA::errorNo() != 0) {
logger('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
return false;
}
while ($item = Item::fetch($items)) {
$id = $item['id'];
@ -394,6 +315,12 @@ class PostUpdate
$condition = ["`id` > ?", $id];
$params = ['order' => ['id'], 'limit' => 10000];
$items = DBA::select('item', $fields, $condition, $params);
if (DBA::errorNo() != 0) {
logger('Database error ' . DBA::errorNo() . ':' . DBA::errorMessage());
return false;
}
while ($item = DBA::fetch($items)) {
$id = $item['id'];

View File

@ -17,6 +17,7 @@ use Friendica\Model\Profile;
use Friendica\Network\Probe;
use Friendica\Object\Image;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\DFRN;
use Friendica\Protocol\OStatus;
use Friendica\Protocol\PortableContact;
use Friendica\Protocol\Salmon;
@ -530,11 +531,14 @@ class Contact extends BaseObject
*
* @param array $user User unfriending
* @param array $contact Contact unfriended
* @param boolean $dissolve Remove the contact on the remote side
* @return void
*/
public static function terminateFriendship(array $user, array $contact)
public static function terminateFriendship(array $user, array $contact, $dissolve = false)
{
if (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DFRN])) {
if (($contact['network'] == Protocol::DFRN) && $dissolve) {
DFRN::deliver($user, $contact, 'placeholder', true);
} elseif (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DFRN])) {
// create an unfollow slap
$item = [];
$item['verb'] = NAMESPACE_OSTATUS . "/unfollow";
@ -1076,6 +1080,11 @@ class Contact extends BaseObject
if (empty($data)) {
$data = Probe::uri($url, "", $uid);
// Ensure that there is a gserver entry
if (!empty($data['baseurl']) && ($data['network'] != Protocol::PHANTOM)) {
PortableContact::checkServer($data['baseurl']);
}
}
// Last try in gcontact for unsupported networks

View File

@ -12,6 +12,7 @@ use Friendica\Core\L10n;
use Friendica\Core\PConfig;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Model\Contact;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Map;
@ -589,6 +590,12 @@ class Event extends BaseObject
$title = strip_tags(html_entity_decode($title, ENT_QUOTES, 'UTF-8'));
}
$author_link = $event['author-link'];
$plink = $event['plink'];
$event['author-link'] = Contact::magicLink($author_link);
$event['plink'] = Contact::magicLink($author_link, $plink);
$html = self::getHTML($event);
$event['desc'] = BBCode::convert($event['desc']);
$event['location'] = BBCode::convert($event['location']);

View File

@ -1462,15 +1462,6 @@ class Item extends BaseObject
return 0;
}
// These fields aren't stored anymore in the item table, they are fetched upon request
unset($item['author-link']);
unset($item['author-name']);
unset($item['author-avatar']);
unset($item['owner-link']);
unset($item['owner-name']);
unset($item['owner-avatar']);
if ($item['network'] == Protocol::PHANTOM) {
logger('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG);
@ -1708,6 +1699,15 @@ class Item extends BaseObject
unset($item['postopts']);
unset($item['inform']);
// These fields aren't stored anymore in the item table, they are fetched upon request
unset($item['author-link']);
unset($item['author-name']);
unset($item['author-avatar']);
unset($item['owner-link']);
unset($item['owner-name']);
unset($item['owner-avatar']);
DBA::transaction();
$ret = DBA::insert('item', $item);

View File

@ -361,7 +361,7 @@ class Profile
if ($r) {
$remote_url = $r[0]['url'];
$message_path = preg_replace('=(.*)/profile/(.*)=ism', '$1/message/new/', $remote_url);
$wallmessage_link = $message_path . base64_encode($profile['addr']);
$wallmessage_link = $message_path . base64_encode(defaults($profile, 'addr', ''));
} else if (!empty($profile['nickname'])) {
$wallmessage_link = 'wallmessage/' . $profile['nickname'];
}
@ -492,7 +492,7 @@ class Profile
if (isset($p['address'])) {
$p['address'] = BBCode::convert($p['address']);
} else {
} elseif (isset($p['location'])) {
$p['address'] = BBCode::convert($p['location']);
}

View File

@ -730,7 +730,7 @@ class User
DBA::insert('userd', ['username' => $user['nickname']]);
// The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php)
DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc($t . " + 7 day")], ['uid' => $uid]);
DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc(DateTimeFormat::utcNow() . " + 7 day")], ['uid' => $uid]);
Worker::add(PRIORITY_HIGH, "Notifier", "removeme", $uid);
// Send an update to the directory

View File

@ -20,7 +20,7 @@ use Friendica\Protocol\OStatus;
*
* @brief Provides public Atom feeds
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Feed extends BaseModule
{

View File

@ -22,7 +22,7 @@ require_once 'include/text.php';
/**
* Login module
*
* @author Hypolite Petovan mrpetovan@gmail.com
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Login extends BaseModule
{

View File

@ -14,7 +14,7 @@ require_once 'include/security.php';
/**
* Logout module
*
* @author Hypolite Petovan mrpetovan@gmail.com
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Logout extends BaseModule
{

View File

@ -12,7 +12,7 @@ use Friendica\Content;
*
* Example: /oembed/aHR0cHM6Ly9...
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class Oembed extends BaseModule
{

View File

@ -8,6 +8,7 @@ namespace Friendica\Module;
use Friendica\App;
use Friendica\BaseModule;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Core\System;
use Friendica\Database\DBA;
use Friendica\Model\Photo;
@ -133,6 +134,10 @@ class Proxy extends BaseModule
$direct_cache = false;
}
if (empty($_REQUEST['url'])) {
System::httpExit(400, ["title" => L10n::t('Bad Request.')]);
}
if (!$direct_cache) {
$urlhash = 'pic:' . sha1($_REQUEST['url']);

View File

@ -967,23 +967,23 @@ class Probe
$hcard_url = "";
$data = [];
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == NAMESPACE_DFRN) && ($link["href"] != "")) {
if (($link["rel"] == NAMESPACE_DFRN) && !empty($link["href"])) {
$data["network"] = Protocol::DFRN;
} elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
} elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && ($link["type"] == "text/html") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && (defaults($link, "type", "") == "text/html") && !empty($link["href"])) {
$data["url"] = $link["href"];
} elseif (($link["rel"] == "http://microformats.org/profile/hcard") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://microformats.org/profile/hcard") && !empty($link["href"])) {
$hcard_url = $link["href"];
} elseif (($link["rel"] == NAMESPACE_POCO) && ($link["href"] != "")) {
} elseif (($link["rel"] == NAMESPACE_POCO) && !empty($link["href"])) {
$data["poco"] = $link["href"];
} elseif (($link["rel"] == "http://webfinger.net/rel/avatar") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://webfinger.net/rel/avatar") && !empty($link["href"])) {
$data["photo"] = $link["href"];
} elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && !empty($link["href"])) {
$data["baseurl"] = trim($link["href"], '/');
} elseif (($link["rel"] == "http://joindiaspora.com/guid") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://joindiaspora.com/guid") && !empty($link["href"])) {
$data["guid"] = $link["href"];
} elseif (($link["rel"] == "diaspora-public-key") && ($link["href"] != "")) {
} elseif (($link["rel"] == "diaspora-public-key") && !empty($link["href"])) {
$data["pubkey"] = base64_decode($link["href"]);
//if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
@ -1170,21 +1170,21 @@ class Probe
$hcard_url = "";
$data = [];
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == "http://microformats.org/profile/hcard") && ($link["href"] != "")) {
if (($link["rel"] == "http://microformats.org/profile/hcard") && !empty($link["href"])) {
$hcard_url = $link["href"];
} elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://joindiaspora.com/seed_location") && !empty($link["href"])) {
$data["baseurl"] = trim($link["href"], '/');
} elseif (($link["rel"] == "http://joindiaspora.com/guid") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://joindiaspora.com/guid") && !empty($link["href"])) {
$data["guid"] = $link["href"];
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && ($link["type"] == "text/html") && ($link["href"] != "")) {
} elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") && (defaults($link, "type", "") == "text/html") && !empty($link["href"])) {
$data["url"] = $link["href"];
} elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
} elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
} elseif (($link["rel"] == NAMESPACE_POCO) && ($link["href"] != "")) {
} elseif (($link["rel"] == NAMESPACE_POCO) && !empty($link["href"])) {
$data["poco"] = $link["href"];
} elseif (($link["rel"] == "salmon") && ($link["href"] != "")) {
} elseif (($link["rel"] == "salmon") && !empty($link["href"])) {
$data["notify"] = $link["href"];
} elseif (($link["rel"] == "diaspora-public-key") && ($link["href"] != "")) {
} elseif (($link["rel"] == "diaspora-public-key") && !empty($link["href"])) {
$data["pubkey"] = base64_decode($link["href"]);
//if (strstr($data["pubkey"], 'RSA ') || ($link["type"] == "RSA"))
@ -1272,15 +1272,15 @@ class Probe
if (is_array($webfinger["links"])) {
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == "http://webfinger.net/rel/profile-page")
&& ($link["type"] == "text/html")
&& (defaults($link, "type", "") == "text/html")
&& ($link["href"] != "")
) {
$data["url"] = $link["href"];
} elseif (($link["rel"] == "salmon") && ($link["href"] != "")) {
} elseif (($link["rel"] == "salmon") && !empty($link["href"])) {
$data["notify"] = $link["href"];
} elseif (($link["rel"] == NAMESPACE_FEED) && ($link["href"] != "")) {
} elseif (($link["rel"] == NAMESPACE_FEED) && !empty($link["href"])) {
$data["poll"] = $link["href"];
} elseif (($link["rel"] == "magic-public-key") && ($link["href"] != "")) {
} elseif (($link["rel"] == "magic-public-key") && !empty($link["href"])) {
$pubkey = $link["href"];
if (substr($pubkey, 0, 5) === 'data:') {
@ -1436,7 +1436,7 @@ class Probe
$data = [];
foreach ($webfinger["links"] as $link) {
if (($link["rel"] == "http://webfinger.net/rel/profile-page")
&& ($link["type"] == "text/html")
&& (defaults($link, "type", "") == "text/html")
&& ($link["href"] != "")
) {
$data["url"] = $link["href"];

View File

@ -792,7 +792,7 @@ class Image
try {
if (function_exists("getimagesizefromstring")) {
$data = getimagesizefromstring($img_str);
$data = @getimagesizefromstring($img_str);
} else {
$tempfile = tempnam(get_temppath(), "cache");

View File

@ -7,7 +7,7 @@ namespace Friendica\Object;
*
* @see https://oembed.com/#section2.3
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class OEmbed
{

View File

@ -82,6 +82,7 @@ class DFRN
}
$user['importer_uid'] = $user['uid'];
$user['uprvkey'] = $user['prvkey'];
} else {
$user = ['importer_uid' => 0, 'uprvkey' => '', 'timezone' => 'UTC',
'nickname' => '', 'sprvkey' => '', 'spubkey' => '',
@ -1168,11 +1169,13 @@ class DFRN
$a = get_app();
// At first try the Diaspora transport layer
if (!$dissolve) {
$ret = self::transmit($owner, $contact, $atom);
if ($ret >= 200) {
logger('Delivery via Diaspora transport layer was successful with status ' . $ret);
return $ret;
}
}
$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
@ -2252,6 +2255,11 @@ class DFRN
if ($Blink && link_compare($Blink, System::baseUrl() . "/profile/" . $importer["nickname"])) {
$author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]);
$item['id'] = $posted_id;
$parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => $importer["importer_uid"]]);
$item["parent"] = $parent['id'];
// send a notification
notification(
[
@ -2402,8 +2410,11 @@ class DFRN
break;
case "enclosure":
$enclosure = $href;
if (strlen($item["attach"])) {
if (!empty($item["attach"])) {
$item["attach"] .= ",";
} else {
$item["attach"] = "";
}
$item["attach"] .= '[attach]href="' . $href . '" length="' . $length . '" type="' . $type . '" title="' . $title . '"[/attach]';

View File

@ -367,13 +367,14 @@ class Diaspora
*
* @param array $importer Array of the importer user
* @param string $raw raw post message
* @param boolean $no_exit Don't do an http exit on error
*
* @return array
* 'message' -> decoded Diaspora XML message
* 'author' -> author diaspora handle
* 'key' -> author public key (converted to pkcs#8)
*/
public static function decodeRaw(array $importer, $raw)
public static function decodeRaw(array $importer, $raw, $no_exit = false)
{
$data = json_decode($raw);
@ -388,8 +389,12 @@ class Diaspora
if (!is_object($j_outer_key_bundle)) {
logger('Outer Salmon did not verify. Discarding.');
if ($no_exit) {
return false;
} else {
System::httpExit(400);
}
}
$outer_iv = base64_decode($j_outer_key_bundle->iv);
$outer_key = base64_decode($j_outer_key_bundle->key);
@ -403,8 +408,12 @@ class Diaspora
if (!is_object($basedom)) {
logger('Received data does not seem to be an XML. Discarding. '.$xml);
if ($no_exit) {
return false;
} else {
System::httpExit(400);
}
}
$base = $basedom->children(NAMESPACE_SALMON_ME);
@ -425,20 +434,32 @@ class Diaspora
$author_addr = base64_decode($key_id);
if ($author_addr == '') {
logger('No author could be decoded. Discarding. Message: ' . $xml);
if ($no_exit) {
return false;
} else {
System::httpExit(400);
}
}
$key = self::key($author_addr);
if ($key == '') {
logger("Couldn't get a key for handle " . $author_addr . ". Discarding.");
if ($no_exit) {
return false;
} else {
System::httpExit(400);
}
}
$verify = Crypto::rsaVerify($signed_data, $signature, $key);
if (!$verify) {
logger('Message did not verify. Discarding.');
if ($no_exit) {
return false;
} else {
System::httpExit(400);
}
}
return ['message' => (string)base64url_decode($base->data),
'author' => unxmlify($author_addr),
@ -3475,7 +3496,7 @@ class Diaspora
$myaddr = self::myHandle($owner);
$public = (($item["private"]) ? "false" : "true");
$public = ($item["private"] ? "false" : "true");
$created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM);

View File

@ -271,9 +271,14 @@ class Feed {
}
$updated = XML::getFirstNodeValue($xpath, 'atom:updated/text()', $entry);
if (empty($updated)) {
if (empty($updated) && !empty($published)) {
$updated = $published;
}
if (empty($published) && !empty($updated)) {
$published = $updated;
}
if ($published != "") {
$item["created"] = $published;
}

View File

@ -74,6 +74,16 @@ class OStatus
$author["contact-id"] = $contact["id"];
$contact = null;
/*
This here would be better, but we would get problems with contacts from the statusnet addon
This is kept here as a reminder for the future
$cid = Contact::getIdForURL($author["author-link"], $importer["uid"]);
if ($cid) {
$contact = DBA::selectFirst('contact', [], ['id' => $cid]);
}
*/
if ($aliaslink != '') {
$condition = ["`uid` = ? AND `alias` = ? AND `network` != ? AND `rel` IN (?, ?)",
$importer["uid"], $aliaslink, Protocol::STATUSNET,
@ -219,7 +229,7 @@ class OStatus
$gcid = GContact::update($contact);
GContact::link($gcid, $contact["uid"], $contact["id"]);
} else {
} elseif ($contact["network"] != Protocol::DFRN) {
$contact = null;
}
@ -312,7 +322,7 @@ class OStatus
self::$conv_list = [];
}
logger("Import OStatus message", LOGGER_DEBUG);
logger('Import OStatus message for user ' . $importer['uid'], LOGGER_DEBUG);
if ($xml == "") {
return false;
@ -351,7 +361,7 @@ class OStatus
$header["origin"] = 0;
$header["gravity"] = GRAVITY_COMMENT;
if (!is_object($doc->firstChild)) {
if (!is_object($doc->firstChild) || empty($doc->firstChild->tagName)) {
return false;
}

View File

@ -1157,9 +1157,9 @@ class PortableContact
if (isset($data['version'])) {
$platform = "Mastodon";
$version = $data['version'];
$site_name = $data['title'];
$info = $data['description'];
$version = defaults($data, 'version', '');
$site_name = defaults($data, 'title', '');
$info = defaults($data, 'description', '');
$network = Protocol::OSTATUS;
}

View File

@ -9,7 +9,7 @@ use Smarty;
/**
* Friendica extension of the Smarty3 template engine
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class FriendicaSmarty extends Smarty
{

View File

@ -9,7 +9,7 @@ use Friendica\Core\Addon;
/**
* Smarty implementation of the Friendica template engine interface
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Hypolite Petovan <hypolite@mrpetovan.com>
*/
class FriendicaSmartyEngine implements ITemplateEngine
{

View File

@ -49,7 +49,7 @@ class Emailer
.rand(10000, 99999);
// generate a multipart/alternative message header
$messageHeader = $params['additionalMailHeader'] .
$messageHeader = defaults($params, 'additionalMailHeader', '') .
"From: $fromName <{$params['fromEmail']}>\n" .
"Reply-To: $fromName <{$params['replyTo']}>\n" .
"MIME-Version: 1.0\n" .

View File

@ -125,6 +125,8 @@ class HTTPSignature
$key = $key($sig_block['keyId']);
}
logger('Got keyID ' . $sig_block['keyId']);
// We don't use Activity Pub at the moment.
// if (!$key) {
// $result['signer'] = $sig_block['keyId'];

View File

@ -118,13 +118,13 @@ class ParseUrl
// Check if the URL does contain a scheme
$scheme = parse_url($url, PHP_URL_SCHEME);
if ($scheme == "") {
$url = "http://".trim($url, "/");
if ($scheme == '') {
$url = 'http://' . trim($url, '/');
}
if ($count > 10) {
logger("parseurl_getsiteinfo: Endless loop detected for ".$url, LOGGER_DEBUG);
return($siteinfo);
logger('Endless loop detected for ' . $url, LOGGER_DEBUG);
return $siteinfo;
}
$url = trim($url, "'");
@ -132,220 +132,223 @@ class ParseUrl
$url = Network::stripTrackingQueryParams($url);
$siteinfo["url"] = $url;
$siteinfo["type"] = "link";
$siteinfo['url'] = $url;
$siteinfo['type'] = 'link';
$data = Network::curl($url);
if (!$data['success']) {
return($siteinfo);
return $siteinfo;
}
// If the file is too large then exit
if ($data["info"]["download_content_length"] > 1000000) {
return($siteinfo);
if ($data['info']['download_content_length'] > 1000000) {
return $siteinfo;
}
// If it isn't a HTML file then exit
if (($data["info"]["content_type"] != "") && !strstr(strtolower($data["info"]["content_type"]), "html")) {
return($siteinfo);
if (($data['info']['content_type'] != '') && !strstr(strtolower($data['info']['content_type']), 'html')) {
return $siteinfo;
}
$header = $data["header"];
$body = $data["body"];
$header = $data['header'];
$body = $data['body'];
if ($do_oembed) {
$oembed_data = OEmbed::fetchURL($url);
if (!empty($oembed_data->type)) {
if (!in_array($oembed_data->type, ["error", "rich", ""])) {
$siteinfo["type"] = $oembed_data->type;
if (!in_array($oembed_data->type, ['error', 'rich', ''])) {
$siteinfo['type'] = $oembed_data->type;
}
if (($oembed_data->type == "link") && ($siteinfo["type"] != "photo")) {
// See https://github.com/friendica/friendica/pull/5763#discussion_r217913178
if ($siteinfo['type'] != 'photo') {
if (isset($oembed_data->title)) {
$siteinfo["title"] = trim($oembed_data->title);
$siteinfo['title'] = trim($oembed_data->title);
}
if (isset($oembed_data->description)) {
$siteinfo["text"] = trim($oembed_data->description);
$siteinfo['text'] = trim($oembed_data->description);
}
if (isset($oembed_data->thumbnail_url)) {
$siteinfo["image"] = $oembed_data->thumbnail_url;
$siteinfo['image'] = $oembed_data->thumbnail_url;
}
}
}
}
// Fetch the first mentioned charset. Can be in body or header
$charset = "";
if (preg_match('/charset=(.*?)['."'".'"\s\n]/', $header, $matches)) {
$charset = '';
if (preg_match('/charset=(.*?)[\'"\s\n]/', $header, $matches)) {
$charset = trim(trim(trim(array_pop($matches)), ';,'));
}
if ($charset == "") {
$charset = "utf-8";
if ($charset == '') {
$charset = 'utf-8';
}
if (($charset != "") && (strtoupper($charset) != "UTF-8")) {
logger("parseurl_getsiteinfo: detected charset ".$charset, LOGGER_DEBUG);
//$body = mb_convert_encoding($body, "UTF-8", $charset);
$body = iconv($charset, "UTF-8//TRANSLIT", $body);
if (($charset != '') && (strtoupper($charset) != 'UTF-8')) {
logger('detected charset ' . $charset, LOGGER_DEBUG);
$body = iconv($charset, 'UTF-8//TRANSLIT', $body);
}
$body = mb_convert_encoding($body, 'HTML-ENTITIES', "UTF-8");
$body = mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8');
$doc = new DOMDocument();
@$doc->loadHTML($body);
XML::deleteNode($doc, "style");
XML::deleteNode($doc, "script");
XML::deleteNode($doc, "option");
XML::deleteNode($doc, "h1");
XML::deleteNode($doc, "h2");
XML::deleteNode($doc, "h3");
XML::deleteNode($doc, "h4");
XML::deleteNode($doc, "h5");
XML::deleteNode($doc, "h6");
XML::deleteNode($doc, "ol");
XML::deleteNode($doc, "ul");
XML::deleteNode($doc, 'style');
XML::deleteNode($doc, 'script');
XML::deleteNode($doc, 'option');
XML::deleteNode($doc, 'h1');
XML::deleteNode($doc, 'h2');
XML::deleteNode($doc, 'h3');
XML::deleteNode($doc, 'h4');
XML::deleteNode($doc, 'h5');
XML::deleteNode($doc, 'h6');
XML::deleteNode($doc, 'ol');
XML::deleteNode($doc, 'ul');
$xpath = new DOMXPath($doc);
$list = $xpath->query("//meta[@content]");
$list = $xpath->query('//meta[@content]');
foreach ($list as $node) {
$attr = [];
$meta_tag = [];
if ($node->attributes->length) {
foreach ($node->attributes as $attribute) {
$attr[$attribute->name] = $attribute->value;
$meta_tag[$attribute->name] = $attribute->value;
}
}
if (@$attr["http-equiv"] == "refresh") {
$path = $attr["content"];
$pathinfo = explode(";", $path);
$content = "";
if (@$meta_tag['http-equiv'] == 'refresh') {
$path = $meta_tag['content'];
$pathinfo = explode(';', $path);
$content = '';
foreach ($pathinfo as $value) {
if (substr(strtolower($value), 0, 4) == "url=") {
if (substr(strtolower($value), 0, 4) == 'url=') {
$content = substr($value, 4);
}
}
if ($content != "") {
if ($content != '') {
$siteinfo = self::getSiteinfo($content, $no_guessing, $do_oembed, ++$count);
return($siteinfo);
return $siteinfo;
}
}
}
$list = $xpath->query("//title");
$list = $xpath->query('//title');
if ($list->length > 0) {
$siteinfo["title"] = trim($list->item(0)->nodeValue);
$siteinfo['title'] = trim($list->item(0)->nodeValue);
}
//$list = $xpath->query("head/meta[@name]");
$list = $xpath->query("//meta[@name]");
$list = $xpath->query('//meta[@name]');
foreach ($list as $node) {
$attr = [];
$meta_tag = [];
if ($node->attributes->length) {
foreach ($node->attributes as $attribute) {
$attr[$attribute->name] = $attribute->value;
$meta_tag[$attribute->name] = $attribute->value;
}
}
if (!empty($attr["content"])) {
$attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8"));
if (empty($meta_tag['content'])) {
continue;
}
switch (strtolower($attr["name"])) {
case "fulltitle":
$siteinfo["title"] = trim($attr["content"]);
$meta_tag['content'] = trim(html_entity_decode($meta_tag['content'], ENT_QUOTES, 'UTF-8'));
switch (strtolower($meta_tag['name'])) {
case 'fulltitle':
$siteinfo['title'] = trim($meta_tag['content']);
break;
case "description":
$siteinfo["text"] = trim($attr["content"]);
case 'description':
$siteinfo['text'] = trim($meta_tag['content']);
break;
case "thumbnail":
$siteinfo["image"] = $attr["content"];
case 'thumbnail':
$siteinfo['image'] = $meta_tag['content'];
break;
case "twitter:image":
$siteinfo["image"] = $attr["content"];
case 'twitter:image':
$siteinfo['image'] = $meta_tag['content'];
break;
case "twitter:image:src":
$siteinfo["image"] = $attr["content"];
case 'twitter:image:src':
$siteinfo['image'] = $meta_tag['content'];
break;
case "twitter:card":
if (($siteinfo["type"] == "") || ($attr["content"] == "photo")) {
$siteinfo["type"] = $attr["content"];
case 'twitter:card':
// Detect photo pages
if ($meta_tag['content'] == 'summary_large_image') {
$siteinfo['type'] = 'photo';
}
break;
case "twitter:description":
$siteinfo["text"] = trim($attr["content"]);
case 'twitter:description':
$siteinfo['text'] = trim($meta_tag['content']);
break;
case "twitter:title":
$siteinfo["title"] = trim($attr["content"]);
case 'twitter:title':
$siteinfo['title'] = trim($meta_tag['content']);
break;
case "dc.title":
$siteinfo["title"] = trim($attr["content"]);
case 'dc.title':
$siteinfo['title'] = trim($meta_tag['content']);
break;
case "dc.description":
$siteinfo["text"] = trim($attr["content"]);
case 'dc.description':
$siteinfo['text'] = trim($meta_tag['content']);
break;
case "keywords":
$keywords = explode(",", $attr["content"]);
case 'keywords':
$keywords = explode(',', $meta_tag['content']);
break;
case "news_keywords":
$keywords = explode(",", $attr["content"]);
case 'news_keywords':
$keywords = explode(',', $meta_tag['content']);
break;
}
}
if ($siteinfo["type"] == "summary") {
$siteinfo["type"] = "link";
}
}
if (isset($keywords)) {
$siteinfo["keywords"] = [];
$siteinfo['keywords'] = [];
foreach ($keywords as $keyword) {
if (!in_array(trim($keyword), $siteinfo["keywords"])) {
$siteinfo["keywords"][] = trim($keyword);
if (!in_array(trim($keyword), $siteinfo['keywords'])) {
$siteinfo['keywords'][] = trim($keyword);
}
}
}
//$list = $xpath->query("head/meta[@property]");
$list = $xpath->query("//meta[@property]");
$list = $xpath->query('//meta[@property]');
foreach ($list as $node) {
$attr = [];
$meta_tag = [];
if ($node->attributes->length) {
foreach ($node->attributes as $attribute) {
$attr[$attribute->name] = $attribute->value;
$meta_tag[$attribute->name] = $attribute->value;
}
}
if (!empty($attr["content"])) {
$attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8"));
if (!empty($meta_tag['content'])) {
$meta_tag['content'] = trim(html_entity_decode($meta_tag['content'], ENT_QUOTES, 'UTF-8'));
switch (strtolower($attr["property"])) {
case "og:image":
$siteinfo["image"] = $attr["content"];
switch (strtolower($meta_tag['property'])) {
case 'og:image':
$siteinfo['image'] = $meta_tag['content'];
break;
case "og:title":
$siteinfo["title"] = trim($attr["content"]);
case 'og:title':
$siteinfo['title'] = trim($meta_tag['content']);
break;
case "og:description":
$siteinfo["text"] = trim($attr["content"]);
case 'og:description':
$siteinfo['text'] = trim($meta_tag['content']);
break;
}
}
}
if ((@$siteinfo["image"] == "") && !$no_guessing) {
$list = $xpath->query("//img[@src]");
// Prevent to have a photo type without an image
if ((empty($siteinfo['image']) || !empty($siteinfo['text'])) && ($siteinfo['type'] == 'photo')) {
$siteinfo['type'] = 'link';
}
if (empty($siteinfo['image']) && !$no_guessing) {
$list = $xpath->query('//img[@src]');
foreach ($list as $node) {
$attr = [];
$img_tag = [];
if ($node->attributes->length) {
foreach ($node->attributes as $attribute) {
$attr[$attribute->name] = $attribute->value;
$img_tag[$attribute->name] = $attribute->value;
}
}
$src = self::completeUrl($attr["src"], $url);
$src = self::completeUrl($img_tag['src'], $url);
$photodata = Image::getInfoFromURL($src);
if (($photodata) && ($photodata[0] > 150) && ($photodata[1] > 150)) {
@ -357,70 +360,72 @@ class ParseUrl
$photodata[0] = round($photodata[0] * (300 / $photodata[1]));
$photodata[1] = 300;
}
$siteinfo["images"][] = ["src" => $src,
"width" => $photodata[0],
"height" => $photodata[1]];
$siteinfo['images'][] = [
'src' => $src,
'width' => $photodata[0],
'height' => $photodata[1]
];
}
}
} elseif (!empty($siteinfo["image"])) {
$src = self::completeUrl($siteinfo["image"], $url);
} elseif (!empty($siteinfo['image'])) {
$src = self::completeUrl($siteinfo['image'], $url);
unset($siteinfo["image"]);
unset($siteinfo['image']);
$photodata = Image::getInfoFromURL($src);
if (($photodata) && ($photodata[0] > 10) && ($photodata[1] > 10)) {
$siteinfo["images"][] = ["src" => $src,
"width" => $photodata[0],
"height" => $photodata[1]];
$siteinfo['images'][] = ['src' => $src,
'width' => $photodata[0],
'height' => $photodata[1]];
}
}
if ((@$siteinfo["text"] == "") && (@$siteinfo["title"] != "") && !$no_guessing) {
$text = "";
if ((@$siteinfo['text'] == '') && (@$siteinfo['title'] != '') && !$no_guessing) {
$text = '';
$list = $xpath->query("//div[@class='article']");
$list = $xpath->query('//div[@class="article"]');
foreach ($list as $node) {
if (strlen($node->nodeValue) > 40) {
$text .= " ".trim($node->nodeValue);
$text .= ' ' . trim($node->nodeValue);
}
}
if ($text == "") {
$list = $xpath->query("//div[@class='content']");
if ($text == '') {
$list = $xpath->query('//div[@class="content"]');
foreach ($list as $node) {
if (strlen($node->nodeValue) > 40) {
$text .= " ".trim($node->nodeValue);
$text .= ' ' . trim($node->nodeValue);
}
}
}
// If none text was found then take the paragraph content
if ($text == "") {
$list = $xpath->query("//p");
if ($text == '') {
$list = $xpath->query('//p');
foreach ($list as $node) {
if (strlen($node->nodeValue) > 40) {
$text .= " ".trim($node->nodeValue);
$text .= ' ' . trim($node->nodeValue);
}
}
}
if ($text != "") {
$text = trim(str_replace(["\n", "\r"], [" ", " "], $text));
if ($text != '') {
$text = trim(str_replace(["\n", "\r"], [' ', ' '], $text));
while (strpos($text, " ")) {
$text = trim(str_replace(" ", " ", $text));
while (strpos($text, ' ')) {
$text = trim(str_replace(' ', ' ', $text));
}
$siteinfo["text"] = trim(html_entity_decode(substr($text, 0, 350), ENT_QUOTES, "UTF-8").'...');
$siteinfo['text'] = trim(html_entity_decode(substr($text, 0, 350), ENT_QUOTES, 'UTF-8') . '...');
}
}
logger("parseurl_getsiteinfo: Siteinfo for ".$url." ".print_r($siteinfo, true), LOGGER_DEBUG);
logger('Siteinfo for ' . $url . ' ' . print_r($siteinfo, true), LOGGER_DEBUG);
Addon::callHooks("getsiteinfo", $siteinfo);
Addon::callHooks('getsiteinfo', $siteinfo);
return($siteinfo);
return $siteinfo;
}
/**
@ -482,21 +487,23 @@ class ParseUrl
$complete = $schemearr["scheme"]."://".$schemearr["host"];
if (@$schemearr["port"] != "") {
if (!empty($schemearr["port"])) {
$complete .= ":".$schemearr["port"];
}
if (!empty($urlarr["path"])) {
if (strpos($urlarr["path"], "/") !== 0) {
$complete .= "/";
}
$complete .= $urlarr["path"];
}
if (@$urlarr["query"] != "") {
if (!empty($urlarr["query"])) {
$complete .= "?".$urlarr["query"];
}
if (@$urlarr["fragment"] != "") {
if (!empty($urlarr["fragment"])) {
$complete .= "#".$urlarr["fragment"];
}

View File

@ -96,7 +96,7 @@ class Notifier
return;
}
foreach ($r as $contact) {
Contact::terminateFriendship($user, $contact);
Contact::terminateFriendship($user, $contact, true);
}
return;
} elseif ($cmd == Delivery::RELOCATION) {
@ -217,24 +217,16 @@ class Notifier
}
// Special treatment for forum posts
if (($target_item['author-id'] != $target_item['owner-id']) &&
($owner['id'] != $target_item['contact-id']) &&
($target_item['uri'] === $target_item['parent-uri'])) {
$fields = ['forum', 'prv'];
$condition = ['id' => $target_item['contact-id']];
$contact = DBA::selectFirst('contact', $fields, $condition);
if (!DBA::isResult($contact)) {
// Should never happen
return false;
}
// Is the post from a forum?
if ($contact['forum'] || $contact['prv']) {
if (self::isForumPost($target_item, $owner)) {
$relay_to_owner = true;
$direct_forum_delivery = true;
}
// Avoid that comments in a forum thread are sent to OStatus
if (self::isForumPost($parent, $owner)) {
$direct_forum_delivery = true;
}
if ($relay_to_owner) {
// local followup to remote post
$followup = true;
@ -504,4 +496,23 @@ class Notifier
return;
}
private static function isForumPost($item, $owner) {
if (($item['author-id'] == $item['owner-id']) ||
($owner['id'] == $item['contact-id']) ||
($item['uri'] != $item['parent-uri'])) {
return false;
}
$fields = ['forum', 'prv'];
$condition = ['id' => $item['contact-id']];
$contact = DBA::selectFirst('contact', $fields, $condition);
if (!DBA::isResult($contact)) {
// Should never happen
return false;
}
// Is the post from a forum?
return ($contact['forum'] || $contact['prv']);
}
}

View File

@ -13,8 +13,8 @@ require_once 'include/dba.php';
class RemoveContact {
public static function execute($id) {
// Only delete if the contact is archived
$condition = ['archive' => true, 'network' => Protocol::PHANTOM, 'id' => $id];
// Only delete if the contact is to be deleted
$condition = ['network' => Protocol::PHANTOM, 'id' => $id];
$r = DBA::exists('contact', $condition);
if (!DBA::isResult($r)) {
return;

View File

@ -5,6 +5,7 @@ Adam Clark
Adam Jurkiewicz
Adam Magness
Aditoo
Aditoo17
AgnesElisa
Albert
Alberto Díaz Tormo
@ -99,6 +100,7 @@ hoergen
Hubert Kościański
Hypolite Petovan
Ilmari
ImgBotApp
irhen
Jak
Jakob
@ -161,6 +163,7 @@ Pascal Deklerck
Pavel Morozov
PerigGouanvic
peturisfeld
Philipp
Philipp Holzer
Pierre Rudloff
Piotr Blonkowski
@ -195,6 +198,7 @@ Simó Albert i Beltran
soko1
St John Karp
Stanislav N.
Steffen K9
StefOfficiel
Sveinn í Felli
Sven Anders
@ -211,6 +215,7 @@ thorsten23
Tino
Tobias Diekershoff
Tobias Hößl
tomacat
tomamplius
tomtom84
Tony Baldwin
@ -221,6 +226,7 @@ Tubuntu
Tupambae.org
U-SOUND\mike
ufic
Unknown
Vasudev Kamath
Vasya Novikov
vislav

View File

@ -81,6 +81,11 @@ $(function() {
Dialog.doImageBrowser("comment", id);
return;
}
if (bbcode == "imgprv") {
bbcode = "img";
}
insertFormatting(bbcode, id);
});
@ -305,7 +310,9 @@ $(function() {
// Asynchronous calls are deferred until the very end of the page load to ease on slower connections
window.addEventListener("load", function(){
NavUpdate();
if (typeof acl !== 'undefined') {
acl.get(0, 100);
}
});
// Allow folks to stop the ajax page updates with the pause/break key

File diff suppressed because it is too large Load Diff

View File

@ -7,18 +7,18 @@ function string_plural_select_cs($n){
}}
;
$a->strings["You must be logged in to use addons. "] = "Pro použití doplňků musíte být přihlášen/a.";
$a->strings["Not Found"] = "Nenalezen";
$a->strings["Not Found"] = "Nenalezeno";
$a->strings["Page not found."] = "Stránka nenalezena";
$a->strings["Permission denied"] = "Nedostatečné oprávnění";
$a->strings["Permission denied."] = "Přístup odmítnut.";
$a->strings["toggle mobile"] = "přepínat mobilní zobrazení";
$a->strings["default"] = "výchozí";
$a->strings["greenzero"] = "zelená nula";
$a->strings["purplezero"] = "fialová nula";
$a->strings["easterbunny"] = "velikonoční zajíček";
$a->strings["darkzero"] = "tmavá nula";
$a->strings["comix"] = "komiksová";
$a->strings["slackr"] = "flákač";
$a->strings["greenzero"] = "greenzero";
$a->strings["purplezero"] = "purplezero";
$a->strings["easterbunny"] = "easterbunny";
$a->strings["darkzero"] = "darkzero";
$a->strings["comix"] = "comix";
$a->strings["slackr"] = "slackr";
$a->strings["Submit"] = "Odeslat";
$a->strings["Theme settings"] = "Nastavení motivu";
$a->strings["Variations"] = "Variace";
@ -29,7 +29,7 @@ $a->strings["Color scheme"] = "Barevné schéma";
$a->strings["Posts font size"] = "Velikost písma u příspěvků";
$a->strings["Textareas font size"] = "Velikost písma textů";
$a->strings["Comma separated list of helper forums"] = "Seznam fór s pomocníky, oddělených čárkami";
$a->strings["don't show"] = "nikdy nezobrazit";
$a->strings["don't show"] = "nezobrazit";
$a->strings["show"] = "zobrazit";
$a->strings["Set style"] = "Nastavit styl";
$a->strings["Community Pages"] = "Komunitní stránky";
@ -40,7 +40,7 @@ $a->strings["Find Friends"] = "Najít přátele";
$a->strings["Last users"] = "Poslední uživatelé";
$a->strings["Find People"] = "Najít lidi";
$a->strings["Enter name or interest"] = "Zadejte jméno nebo zájmy";
$a->strings["Connect/Follow"] = "Spojit/Sledovat";
$a->strings["Connect/Follow"] = "Spojit se/sledovat";
$a->strings["Examples: Robert Morgenstein, Fishing"] = "Příklady: Josef Dvořák, rybaření";
$a->strings["Find"] = "Najít";
$a->strings["Friend Suggestions"] = "Návrhy přátel";
@ -48,11 +48,11 @@ $a->strings["Similar Interests"] = "Podobné zájmy";
$a->strings["Random Profile"] = "Náhodný Profil";
$a->strings["Invite Friends"] = "Pozvat přátele";
$a->strings["Global Directory"] = "Globální adresář";
$a->strings["Local Directory"] = "Lokální adresář";
$a->strings["Local Directory"] = "Místní adresář";
$a->strings["Forums"] = "Fóra";
$a->strings["External link to forum"] = "Externí odkaz na fórum";
$a->strings["show more"] = "zobrazit více";
$a->strings["Quick Start"] = "Rychlý start";
$a->strings["Quick Start"] = "Rychlý začátek";
$a->strings["Help"] = "Nápověda";
$a->strings["Custom"] = "Vlastní";
$a->strings["Note"] = "Poznámka";
@ -117,7 +117,7 @@ $a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = "%1\$s se neúčastní %3\$s
$a->strings["%1\$s attends maybe %2\$s's %3\$s"] = "%1\$s se možná účastní %3\$s uživatele %2\$s";
$a->strings["%1\$s is now friends with %2\$s"] = "%1\$s se nyní přátelí s uživatelem %2\$s";
$a->strings["%1\$s poked %2\$s"] = "%1\$s šťouchnul/a uživatele %2\$s";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s označil/a %3\$s uživatele %2\$s jako %4\$s";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s označil/a %3\$s uživatele %2\$s štítkem %4\$s";
$a->strings["post/item"] = "příspěvek/položka";
$a->strings["%1\$s marked %2\$s's %3\$s as favorite"] = "%1\$s označil/a %3\$s uživatele %2\$s jako oblíbené";
$a->strings["Likes"] = "Libí se";
@ -229,7 +229,7 @@ $a->strings["Please upload a profile photo."] = "Prosím nahrajte profilovou fot
$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["Friendica Notification"] = "Oznámení Friendica";
$a->strings["Thank You,"] = "Děkujeme, ";
$a->strings["Thank You,"] = "Děkuji,";
$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, administrátor %2\$s";
$a->strings["%s Administrator"] = "Administrátor %s";
$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica:Oznámení] Obdržena nová zpráva na %s";
@ -267,12 +267,12 @@ $a->strings["[Friendica:Notify] A new person is sharing with you"] = "[Friendica
$a->strings["%1\$s is sharing with you at %2\$s"] = "Uživatel %1\$s s vámi sdílí na %2\$s";
$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica:Oznámení] Máte nového sledovatele";
$a->strings["You have a new follower at %2\$s : %1\$s"] = "Máte nového sledovatele na %2\$s : %1\$s";
$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica:Oznámení] Obdržen návrh pro přátelství";
$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Obdržel/a jste návrh pro přátelství od uživatele \"%1\$s\" na %2\$s";
$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Obdržel/a jste [url=%1\$s]návrh pro přátelství[/url] s uživatelem %2\$s od uživatele %3\$s.";
$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica:Oznámení] Obdržen návrh přátelství";
$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Obdržel/a jste návrh přátelství od uživatele \"%1\$s\" na %2\$s";
$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Obdržel/a jste [url=%1\$s]návrh přátelství[/url] s uživatelem %2\$s od uživatele %3\$s.";
$a->strings["Name:"] = "Jméno:";
$a->strings["Photo:"] = "Fotka:";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Prosím navštivte %s pro schválení či zamítnutí doporučení.";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Prosím navštivte %s pro schválení či zamítnutí návrhu.";
$a->strings["[Friendica:Notify] Connection accepted"] = "[Friendica:Oznámení] Spojení přijato";
$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = "\"%1\$s\" přijal/a Váš požadavek na spojení na %2\$s";
$a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = "%2\$s přijal/a Váš [url=%1\$s]požadavek na spojení[/url].";
@ -281,7 +281,7 @@ $a->strings["Please visit %s if you wish to make any changes to this relationshi
$a->strings["'%1\$s' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically."] = "\"%1\$s\" se rozhodl/a Vás přijmout jako fanouška, což omezuje některé formy komunikace - například soukoromé zprávy a některé interakce s profily. Pokud je toto stránka celebrity či komunity, byla tato nastavení aplikována automaticky.";
$a->strings["'%1\$s' may choose to extend this into a two-way or more permissive relationship in the future."] = "\"%1\$s\" se může rozhodnout tento vztah v budoucnosti rozšířit do obousměrného či jiného liberálnějšího vztahu.";
$a->strings["Please visit %s if you wish to make any changes to this relationship."] = "Prosím navštivte %s pokud chcete změnit tento vztah.";
$a->strings["[Friendica System Notify]"] = "[Oznámení systému Friendica]";
$a->strings["[Friendica System Notify]"] = "[Systémové oznámení Friendica]";
$a->strings["registration request"] = "žádost o registraci";
$a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "Obdržel/a jste žádost o registraci od uživatele \"%1\$s\" na %2\$s";
$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Obdržel/a jste [url=%1\$s]žádost o registraci[/url] od uživatele \"%2\$s\".";
@ -293,13 +293,13 @@ $a->strings["first"] = "první";
$a->strings["prev"] = "předchozí";
$a->strings["next"] = "další";
$a->strings["last"] = "poslední";
$a->strings["Loading more entries..."] = "Načítá více záznamů...";
$a->strings["Loading more entries..."] = "Načítám více záznamů...";
$a->strings["The end"] = "Konec";
$a->strings["No contacts"] = "Žádné kontakty";
$a->strings["%d Contact"] = [
0 => "%d kontakt",
1 => "%d kontakty",
2 => "%d kontaktů",
2 => "%d kontaktu",
3 => "%d kontaktů",
];
$a->strings["View Contacts"] = "Zobrazit kontakty";
@ -308,7 +308,7 @@ $a->strings["Follow"] = "Sledovat";
$a->strings["Search"] = "Hledat";
$a->strings["@name, !forum, #tags, content"] = "@jméno, !fórum, #štítky, obsah";
$a->strings["Full Text"] = "Celý text";
$a->strings["Tags"] = "Štítky:";
$a->strings["Tags"] = "Štítky";
$a->strings["poke"] = "šťouchnout";
$a->strings["poked"] = "šťouchnul/a";
$a->strings["ping"] = "cinknout";
@ -360,7 +360,7 @@ $a->strings["Dec"] = "pro";
$a->strings["Content warning: %s"] = "Varování o obsahu: %s";
$a->strings["View Video"] = "Zobrazit video";
$a->strings["bytes"] = "bytů";
$a->strings["Click to open/close"] = "Klikněte pro otevření/zavření";
$a->strings["Click to open/close"] = "Kliknutím otevřete/zavřete";
$a->strings["View on separate page"] = "Zobrazit na separátní stránce";
$a->strings["view on separate page"] = "zobrazit na separátní stránce";
$a->strings["link to source"] = "odkaz na zdroj";
@ -368,7 +368,7 @@ $a->strings["activity"] = "aktivita";
$a->strings["comment"] = [
0 => "komentář",
1 => "komentáře",
2 => "komentářů",
2 => "komentáře",
3 => "komentářů",
];
$a->strings["post"] = "příspěvek";
@ -376,13 +376,13 @@ $a->strings["Item filed"] = "Položka vyplněna";
$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.",
2 => "Byl dosažen denní limit %d příspěvků. Příspěvek byl odmítnut.",
2 => "Byl dosažen denní limit %d příspěvku. Příspěvek byl odmítnut.",
3 => "Byl dosažen denní limit %d příspěvků. Příspěvek byl odmítnut.",
];
$a->strings["Weekly posting limit of %d post reached. The post was rejected."] = [
0 => "Byl dosažen týdenní limit %d příspěvku. Příspěvek byl odmítnut.",
1 => "Byl dosažen týdenní limit %d příspěvků. Příspěvek byl odmítnut.",
2 => "Byl dosažen týdenní limit %d příspěvků. Příspěvek byl odmítnut.",
2 => "Byl dosažen týdenní limit %d příspěvku. Příspěvek byl odmítnut.",
3 => "Byl dosažen týdenní limit %d příspěvků. Příspěvek byl odmítnut.",
];
$a->strings["Monthly posting limit of %d post reached. The post was rejected."] = "Byl dosažen měsíční limit %d příspěvků. Příspěvek byl odmítnut.";
@ -397,9 +397,9 @@ $a->strings["Mirror as forwarded posting"] = "Zrcadlit pro přeposlané přísp
$a->strings["Mirror as my own posting"] = "Zrcadlit jako mé vlastní příspěvky";
$a->strings["Return to contact editor"] = "Zpět k editoru kontaktu";
$a->strings["Refetch contact data"] = "Znovu načíst data kontaktu";
$a->strings["Remote Self"] = "Remote Self";
$a->strings["Remote Self"] = "Vzdálené zrcadlení";
$a->strings["Mirror postings from this contact"] = "Zrcadlení příspěvků od tohoto kontaktu";
$a->strings["Mark this contact as remote_self, this will cause friendica to repost new entries from this contact."] = "Označit tento kontakt jako \"remote_self\", s tímto nastavením bude friendica přeposílat všechny nové příspěvky od tohoto kontaktu.";
$a->strings["Mark this contact as remote_self, this will cause friendica to repost new entries from this contact."] = "Označit tento kontakt jako \"remote_self\", s tímto nastavením bude Friendica znovupublikovat všechny nové příspěvky od tohoto kontaktu.";
$a->strings["Name"] = "Jméno";
$a->strings["Account Nickname"] = "Přezdívka účtu";
$a->strings["@Tagname - overrides Name/Nickname"] = "@jménoštítku- upřednostněno před jménem/přezdívkou";
@ -447,8 +447,8 @@ $a->strings["Your account email address must match this in order to use the web
$a->strings["Please select a default timezone for your website"] = "Prosím, vyberte výchozí časové pásmo pro váš server";
$a->strings["Site settings"] = "Nastavení webu";
$a->strings["System Language:"] = "Systémový jazyk";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Nastavte si výchozí jazyk pro vaše instalační rozhraní Friendica a pro odesílání e-mailů.";
$a->strings["The database configuration file \"config/local.ini.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Databázový konfigurační soubor \"config/local.ini.php\" nemohl být zapsán. Prosím, použijte přiložený text k vytvoření konfiguračního souboru ve vašem kořenovém adresáři webového serveru.";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Nastavte si výchozí jazyk pro Vaše instalační rozhraní Friendica a pro odesílání e-mailů.";
$a->strings["The database configuration file \"config/local.ini.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Databázový konfigurační soubor \"config/local.ini.php\" nemohl být zapsán. Prosím, použijte přiložený text k vytvoření konfiguračního souboru v kořenovém adresáři Vašeho webového serveru.";
$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.";
@ -472,18 +472,18 @@ $a->strings["Unable to update your contact profile details on our system"] = "Ne
$a->strings["[Name Withheld]"] = "[Jméno odepřeno]";
$a->strings["People Search - %s"] = "Vyhledávání lidí - %s";
$a->strings["Forum Search - %s"] = "Vyhledávání fór - %s";
$a->strings["Connect"] = "Spojit";
$a->strings["Connect"] = "Spojit se";
$a->strings["No matches"] = "Žádné shody";
$a->strings["Manage Identities and/or Pages"] = "Správa identit a/nebo stránek";
$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Přepínání mezi různými identitami nebo komunitními/skupinovými stránkami, které sdílí Vaše detaily účtu, nebo kterým jste přidělili oprávnění nastavovat přístupová práva.";
$a->strings["Select an identity to manage: "] = "Vyberte identitu pro správu: ";
$a->strings["Select an identity to manage: "] = "Vyberte identitu ke spravování: ";
$a->strings["Do you really want to delete this video?"] = "Opravdu chcete smazat toto video?";
$a->strings["Delete Video"] = "Odstranit video";
$a->strings["Public access denied."] = "Veřejný přístup odepřen.";
$a->strings["No videos selected"] = "Není vybráno žádné video";
$a->strings["Access to this item is restricted."] = "Přístup k této položce je omezen.";
$a->strings["View Album"] = "Zobrazit album";
$a->strings["Recent Videos"] = "Aktuální videa";
$a->strings["Recent Videos"] = "Nedávná videa";
$a->strings["Upload New Videos"] = "Nahrát nová videa";
$a->strings["Only logged in users are permitted to perform a probing."] = "Pouze přihlášení uživatelé mohou zkoušet adresy.";
$a->strings["Location:"] = "Poloha:";
@ -507,7 +507,7 @@ $a->strings["Social Networks"] = "Sociální sítě";
$a->strings["Addons"] = "Doplňky";
$a->strings["Delegations"] = "Delegace";
$a->strings["Connected apps"] = "Připojené aplikace";
$a->strings["Export personal data"] = "Export osobních údajů";
$a->strings["Export personal data"] = "Exportovat osobní údaje";
$a->strings["Remove account"] = "Odstranit účet";
$a->strings["Missing some important data!"] = "Chybí některé důležité údaje!";
$a->strings["Update"] = "Aktualizace";
@ -571,7 +571,7 @@ $a->strings["IMAP port:"] = "IMAP port:";
$a->strings["Security:"] = "Zabezpečení:";
$a->strings["None"] = "Žádné";
$a->strings["Email login name:"] = "Přihlašovací jméno k e-mailu:";
$a->strings["Email password:"] = "Heslo k Vašemu e-mailu:";
$a->strings["Email password:"] = "Heslo k e-mailu:";
$a->strings["Reply-to address:"] = "Odpovědět na adresu:";
$a->strings["Send public posts to all email contacts:"] = "Poslat veřejné příspěvky na všechny e-mailové kontakty:";
$a->strings["Action after import:"] = "Akce po importu:";
@ -620,7 +620,7 @@ $a->strings["Account for community discussions."] = "Účet pro komunitní disku
$a->strings["Normal Account Page"] = "Normální stránka účtu";
$a->strings["Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"."] = "Účet pro běžný osobní profil, který vyžaduje manuální potvrzení \"Přátel\" a \"Sledovatelů\".";
$a->strings["Soapbox Page"] = "Propagační stránka";
$a->strings["Account for a public profile that automatically approves contact requests as \"Followers\"."] = "Účet pro veřejný profil, který vyžaduje manuální potvrzení \"Přátel\" a \"Sledovatelů\".";
$a->strings["Account for a public profile that automatically approves contact requests as \"Followers\"."] = "Účet pro veřejný profil, který automaticky potvrzuje žádosti o přidání kontaktu jako \"Sledovatele\".";
$a->strings["Public Forum"] = "Veřejné fórum";
$a->strings["Automatically approves all contact requests."] = "Automaticky potvrzuje všechny žádosti o přidání kontaktu.";
$a->strings["Automatic Friend Page"] = "Stránka s automatickými přátely";
@ -628,9 +628,9 @@ $a->strings["Account for a popular profile that automatically approves contact r
$a->strings["Private Forum [Experimental]"] = "Soukromé fórum [Experimentální]";
$a->strings["Requires manual approval of contact requests."] = "Vyžaduje manuální potvrzení žádostí o přidání kontaktu.";
$a->strings["OpenID:"] = "OpenID:";
$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Volitelné) Povolit OpenID pro přihlášení k tomuto účtu.";
$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Volitelné) Povolit tomuto OpenID přihlášení k tomuto účtu.";
$a->strings["Publish your default profile in your local site directory?"] = "Publikovat Váš výchozí profil v lokálním adresáři webu?";
$a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Váš profil bude publikován v <a href=\"%s\">lokálním adresáři</a> tohoto serveru. Vaše detaily o profilu mohou být veřejně viditelné v závislosti na systémových nastaveních.";
$a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Váš profil bude publikován v <a href=\"%s\">místním adresáři</a> tohoto serveru. Vaše detaily o profilu mohou být veřejně viditelné v závislosti na systémových nastaveních.";
$a->strings["No"] = "Ne";
$a->strings["Publish your default profile in the global social directory?"] = "Publikovat Váš výchozí profil v globální sociálním adresáři?";
$a->strings["Your profile will be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>). Your profile will be visible in public."] = "Váš profil bude publikován v globálních adresářich Friendica (např. <a href=\"%s\">%s</a>). Váš profil bude veřejně viditelný.";
@ -677,7 +677,7 @@ $a->strings["Security and Privacy Settings"] = "Nastavení zabezpečení a soukr
$a->strings["Maximum Friend Requests/Day:"] = "Maximální počet žádostí o přátelství za den:";
$a->strings["(to prevent spam abuse)"] = "(ay se zabránilo spamu)";
$a->strings["Default Post Permissions"] = "Výchozí oprávnění pro příspěvek";
$a->strings["(click to open/close)"] = "(Klikněte pro otevření/zavření)";
$a->strings["(click to open/close)"] = "(klikněte pro otevření/zavření)";
$a->strings["Show to Groups"] = "Zobrazit ve Skupinách";
$a->strings["Show to Contacts"] = "Zobrazit v Kontaktech";
$a->strings["Default Private Post"] = "Výchozí Soukromý příspěvek";
@ -691,7 +691,7 @@ $a->strings["Your introductions are confirmed"] = "jsou Vaše představení potv
$a->strings["Someone writes on your profile wall"] = "Vám někdo napíše na Vaši profilovou stránku";
$a->strings["Someone writes a followup comment"] = "Vám někdo napíše následný komentář";
$a->strings["You receive a private message"] = "obdržíte soukromou zprávu";
$a->strings["You receive a friend suggestion"] = "obdržíte návrh na přátelství";
$a->strings["You receive a friend suggestion"] = "obdržíte návrh přátelství";
$a->strings["You are tagged in a post"] = "jste označen v příspěvku";
$a->strings["You are poked/prodded/etc. in a post"] = "jste šťouchnut(a)/dloubnut(a)/apod. v příspěvku";
$a->strings["Activate desktop notifications"] = "Aktivovat desktopová oznámení";
@ -724,7 +724,7 @@ $a->strings["add"] = "přidat";
$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = [
0 => "Varování: Tato skupina obsahuje %s člena ze sítě, která nepovoluje posílání soukromých zpráv.",
1 => "Varování: Tato skupina obsahuje %s členy ze sítě, která nepovoluje posílání soukromých zpráv.",
2 => "Varování: Tato skupina obsahuje %s členů ze sítě, která nepovoluje posílání soukromých zpráv.",
2 => "Varování: Tato skupina obsahuje %s člena ze sítě, která nepovoluje posílání soukromých zpráv.",
3 => "Varování: Tato skupina obsahuje %s členů ze sítě, která nepovoluje posílání soukromých zpráv.",
];
$a->strings["Messages in this group won't be send to these receivers."] = "Zprávy v této skupině nebudou těmto příjemcům doručeny.";
@ -749,7 +749,7 @@ $a->strings["Group created."] = "Skupina vytvořena.";
$a->strings["Could not create group."] = "Nelze vytvořit skupinu.";
$a->strings["Group not found."] = "Skupina nenalezena.";
$a->strings["Group name changed."] = "Název skupiny byl změněn.";
$a->strings["Save Group"] = "Uložit Skupinu";
$a->strings["Save Group"] = "Uložit skupinu";
$a->strings["Filter"] = "Filtr";
$a->strings["Create a group of contacts/friends."] = "Vytvořit skupinu kontaktů/přátel.";
$a->strings["Group Name: "] = "Název skupiny: ";
@ -793,12 +793,12 @@ $a->strings["Contact unfollowed"] = "Zrušeno sledování kontaktu";
$a->strings["Submit Request"] = "Odeslat žádost";
$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["Disconnect/Unfollow"] = "Odpojit/Zrušit sledování";
$a->strings["Disconnect/Unfollow"] = "Odpojit se/Zrušit sledování";
$a->strings["Your Identity Address:"] = "Vaše adresa identity:";
$a->strings["Profile URL"] = "URL profilu";
$a->strings["Status Messages and Posts"] = "Stavové zprávy a příspěvky ";
$a->strings["[Embedded content - reload page to view]"] = "[Vložený obsah - obnovte stránku pro zobrazení]";
$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["[Embedded content - reload page to view]"] = "[Vložený obsah - pro zobrazení obnovte stránku]";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrace byla ú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řihlašovací jméno: %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.";
@ -834,7 +834,7 @@ $a->strings["Home Notifications"] = "Oznámení na domovské stránce";
$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["Suggested by:"] = "Navrhl/a:";
$a->strings["Hide this contact from others"] = "Skrýt tento kontakt před ostatními";
$a->strings["Approve"] = "Schválit";
$a->strings["Claims to be known to you: "] = "Vaši údajní známí: ";
@ -871,7 +871,7 @@ $a->strings["%s and You"] = "%s a Vy";
$a->strings["%d message"] = [
0 => "%d zpráva",
1 => "%d zprávy",
2 => "%d zpráv",
2 => "%d zprávy",
3 => "%d zpráv",
];
$a->strings["No profile"] = "Žádný profil";
@ -899,7 +899,7 @@ $a->strings["Ignore/Hide"] = "Ignorovat/skrýt";
$a->strings["- select -"] = "- vyberte -";
$a->strings["This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s."] = "Tohle je Friendica, verze %s, běžící na webové adrese %s. Verze databáze je %s, verze post update je %s.";
$a->strings["Please visit <a href=\"https://friendi.ca\">Friendi.ca</a> to learn more about the Friendica project."] = "Pro více informací o projektu Friendica, prosím, navštivte stránku <a href=\"https://friendi.ca\">Friendi.ca</a>";
$a->strings["Bug reports and issues: please visit"] = "Pro hlášení chyb a námětů na změny navštivte";
$a->strings["Bug reports and issues: please visit"] = "Pro hlášení chyb a námětů na změny prosím navštivte";
$a->strings["the bugtracker at github"] = "sledování chyb na GitHubu";
$a->strings["Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca"] = "Návrhy, pochvaly atd., prosím, posílejte na adresu \"info\" zavináč \"friendi\"-tečka-\"ca\"";
$a->strings["Installed addons/apps:"] = "Nainstalované doplňky/aplikace:";
@ -921,7 +921,7 @@ $a->strings["Getting Started"] = "Začínáme";
$a->strings["Friendica Walk-Through"] = "Prohlídka Friendica ";
$a->strings["On your <em>Quick Start</em> page - find a brief introduction to your profile and network tabs, make some new connections, and find some groups to join."] = "Na Vaší stránce <em>Rychlý začátek</em> najděte stručné představení k Vašemu profilu a síťovým záložkám, spojte ses novými kontakty a najděte skupiny, ke kterým se můžete připojit.";
$a->strings["Go to Your Settings"] = "Navštivte své nastavení";
$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web."] = "Na Vaší stránce <em>Nastavení</em> si změňte Vaše první heslo. Věnujte také svou pozornost k adrese identity. Vypadá jako emailová adresa a bude Vám užitečná pro navazování přátelství na svobodném sociálním webu.";
$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web."] = "Na Vaší stránce <em>Nastavení</em> si změňte Vaše první heslo. Věnujte také svou pozornost Vaší adrese identity. Vypadá jako e-mailová adresa a bude Vám užitečná pro navazování přátelství na svobodném sociálním webu.";
$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "Prohlédněte si další nastavení, a to zejména nastavení soukromí. Nezveřejnění svého účtu v adresáři je jako mít nezveřejněné telefonní číslo. Obecně platí, že je lepší mít svůj účet zveřejněný - leda by všichni Vaši přátelé a potenciální přátelé přesně věděli, jak Vás najít.";
$a->strings["Upload Profile Photo"] = "Nahrát profilovou fotku";
$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "Nahrajte si svou profilovou fotku, pokud jste tak již neučinil/a. Studie ukázaly, že lidé se skutečnými fotkami mají desetkrát častěji přátele než lidé, kteří nemají.";
@ -929,8 +929,8 @@ $a->strings["Edit Your Profile"] = "Upravte si svůj profil";
$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Upravte si <strong>výchozí</strong> profil podle vašich představ. Prověřte nastavení pro skrytí Vašeho seznamu přátel a skrytí profilu před neznámými návštěvníky.";
$a->strings["Profile Keywords"] = "Profilová klíčová slova";
$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Nastavte si nějaká veřejná klíčová slova pro výchozí profil, která popisují Vaše zájmy. Můžeme Vám najít další lidi s podobnými zájmy a navrhnout přátelství.";
$a->strings["Connecting"] = "Probíhá pokus o připoje";
$a->strings["Importing Emails"] = "Importování emaiů";
$a->strings["Connecting"] = "Připojuji se";
$a->strings["Importing Emails"] = "Importuji e-maily";
$a->strings["Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Pokud chcete importovat své přátele nebo mailové skupiny a komunikovat s nimi, zadejte na Vaší stránce Nastavení kontektoru své přístupové údaje do svého emailového účtu";
$a->strings["Go to Your Contacts Page"] = "Navštivte Vaši stránku s kontakty";
$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog."] = "Vaše stránka Kontakty je Vaše brána k nastavování přátelství a propojení s přáteli z dalších sítí. Typicky zadáte jejich emailovou adresu nebo URL adresu jejich serveru prostřednictvím dialogu <em>Přidat nový kontakt</em>.";
@ -1040,7 +1040,7 @@ $a->strings["Could not find any contact entry for this URL (%s)"] = "Nelze nalé
$a->strings["%s contact unblocked"] = [
0 => "%s kontakt odblokován",
1 => "%s kontakty odblokovány",
2 => "%s kontaktů odblokováno",
2 => "%s kontaktu odblokováno",
3 => "%s kontaktů odblokováno",
];
$a->strings["Remote Contact Blocklist"] = "Blokované vzdálené kontakty";
@ -1058,7 +1058,7 @@ $a->strings["Address"] = "Adresa";
$a->strings["%s total blocked contact"] = [
0 => "Celkem %s zablokovaný kontakt",
1 => "Celkem %s zablokované kontakty",
2 => "Celkem %s zablokovaných kontaktů",
2 => "Celkem %s zablokovaného kontaktu",
3 => "Celkem %s zablokovaných kontaktů",
];
$a->strings["URL of the remote contact to block."] = "Adresa URL vzdáleného kontaktu k zablokování.";
@ -1082,7 +1082,7 @@ $a->strings["Inspect Worker Queue"] = "Prozkoumat frontu pro pracovníka";
$a->strings["Job Parameters"] = "Parametry úlohy";
$a->strings["Priority"] = "Priorita";
$a->strings["This page lists the currently queued worker jobs. These jobs are handled by the worker cronjob you've set up during install."] = "Na této stránce jsou vypsány aktuálně čekající úlohy pro pracovníka . Tyto úlohy vykonává úloha cron pracovníka, kterou jste nastavil/a při instalaci.";
$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />"] = "Vaše databáze stále běží s tabulkami MyISAM. Měl/a byste změnit typ datového úložiště na InnoDB. Protože Friendica bude v budoucnu používat pouze funkce InnoDB, měl/a byste to změnit! <a href=\"%s\">Zde</a> naleznete návod, který by pro vás mohl být užitečný při konverzi úložišť. Můžete také použít příkaz <tt>php bin/console.php dbstructure toinnodb</tt> na Vaší instalaci Friendica pro automatickou konverzi.<br />";
$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />"] = "Vaše databáze stále běží s tabulkami MyISAM. Měl/a byste změnit typ datového úložiště na InnoDB. Protože Friendica bude v budoucnu používat pouze funkce pro InnoDB, měl/a byste to změnit! <a href=\"%s\">Zde</a> naleznete návod, který by pro vás mohl být užitečný při konverzi úložišť. Můžete také použít příkaz <tt>php bin/console.php dbstructure toinnodb</tt> na Vaší instalaci Friendica pro automatickou konverzi.<br />";
$a->strings["There is a new version of Friendica available for download. Your current version is %1\$s, upstream version is %2\$s"] = "Je dostupná ke stažení nová verze Friendica. Vaše aktuální verze je %1\$s, upstreamová verze je %2\$s";
$a->strings["The database update failed. Please run \"php bin/console.php dbstructure update\" from the command line and have a look at the errors that might appear."] = "Aktualizace databáze selhala. Prosím, spusťte příkaz \"php bin/console.php dbstructure update\" z příkazového řádku a podívejte se na chyby, které by se mohly vyskytnout.";
$a->strings["The worker was never executed. Please check your database structure!"] = "Pracovník nebyl nikdy spuštěn. Prosím zkontrolujte strukturu Vaší databáze!";
@ -1090,11 +1090,11 @@ $a->strings["The last worker execution was on %s UTC. This is older than one hou
$a->strings["Friendica's configuration now is stored in config/local.ini.php, please copy config/local-sample.ini.php and move your config from <code>.htconfig.php</code>. See <a href=\"%s\">the Config help page</a> for help with the transition."] = "Konfigurace Friendica je nyní uložena v souboru config/local.ini.php, prosím zkopírujte soubor config/local-sample.ini.php a přesuňte svou konfiguraci ze souboru <code>.htconfig.php</code>. Pro pomoc při přechodu navštivte <a href=\"%s\">stránku Config v sekci nápovědy</a>.";
$a->strings["<a href=\"%s\">%s</a> is not reachable on your system. This is a servere configuration issue that prevents the communication.. See <a href=\"%s\">the installation page</a> for help."] = "<a href=\"%s\">%s</a> není na Vašem systému dosažitelné. Tohle je závažná chyba konfigurace, která brání komunikaci. Pro pomoc navštivte <a href=\"%s\">stránku instalace</a>.";
$a->strings["Normal Account"] = "Normální účet";
$a->strings["Automatic Follower Account"] = "Automatický účet sledovatele";
$a->strings["Public Forum Account"] = "Veřejný účet na fóru";
$a->strings["Automatic Friend Account"] = "Účet s automatickým schvalováním přátel";
$a->strings["Blog Account"] = "Účet Blogu";
$a->strings["Private Forum Account"] = "Soukromá účet na fóru";
$a->strings["Automatic Follower Account"] = "Účet s automatickými sledovateli";
$a->strings["Public Forum Account"] = "Účet veřejného fóra";
$a->strings["Automatic Friend Account"] = "Účet s automatickými přáteli";
$a->strings["Blog Account"] = "Blogovací účet";
$a->strings["Private Forum Account"] = "Účet soukromého fóra";
$a->strings["Message queues"] = "Fronty zpráv";
$a->strings["Summary"] = "Shrnutí";
$a->strings["Registered users"] = "Registrovaní uživatelé";
@ -1109,7 +1109,7 @@ $a->strings["Public postings from users of this site"] = "Počet veřejných př
$a->strings["Public postings from the federated network"] = "Veřejné příspěvky z federované sítě";
$a->strings["Public postings from local users and the federated network"] = "Veřejné příspěvky od lokálních uživatelů a z federované sítě";
$a->strings["Disabled"] = "Zakázáno";
$a->strings["Users, Global Contacts"] = "Uživatelé, Všechny kontakty";
$a->strings["Users, Global Contacts"] = "Uživatelé, globální kontakty";
$a->strings["Users, Global Contacts/fallback"] = "Uživatelé, globální kontakty/fallback";
$a->strings["One month"] = "Jeden měsíc";
$a->strings["Three months"] = "Tři měsíce";
@ -1118,35 +1118,35 @@ $a->strings["One year"] = "Jeden rok";
$a->strings["Multi user instance"] = "Víceuživatelská instance";
$a->strings["Closed"] = "Uzavřeno";
$a->strings["Requires approval"] = "Vyžaduje schválení";
$a->strings["Open"] = "Otevřená";
$a->strings["Open"] = "Otevřeno";
$a->strings["No SSL policy, links will track page SSL state"] = "Žádná SSL politika, odkazy budou následovat SSL stav stránky";
$a->strings["Force all links to use SSL"] = "Vyžadovat u všech odkazů použití SSL";
$a->strings["Self-signed certificate, use SSL for local links only (discouraged)"] = "Certifikát podepsaný sám sebou, použít SSL pouze pro lokální odkazy (nedoporučeno)";
$a->strings["Don't check"] = "Nezkontrolovat";
$a->strings["check the stable version"] = "zkontrolovat stabilní verzi";
$a->strings["check the development version"] = "zkontrolovat verzi ve vývoji";
$a->strings["Don't check"] = "Nekontrolovat";
$a->strings["check the stable version"] = "kontrolovat stabilní verzi";
$a->strings["check the development version"] = "kontrolovat vývojovou verzi";
$a->strings["Republish users to directory"] = "Znovu publikovat uživatele do adresáře";
$a->strings["File upload"] = "Nahrání souborů";
$a->strings["Policies"] = "Politiky";
$a->strings["Advanced"] = "Pokročilé";
$a->strings["Auto Discovered Contact Directory"] = "Adresář automaticky objevených kontaktů";
$a->strings["Performance"] = "Výkonnost";
$a->strings["Performance"] = "Výkon";
$a->strings["Worker"] = "Pracovník (worker)";
$a->strings["Message Relay"] = "Přeposílání zpráv";
$a->strings["Relocate - WARNING: advanced function. Could make this server unreachable."] = "Přemístit - VAROVÁNÍ: pokročilá funkce. Tímto můžete znepřístupnit server.";
$a->strings["Site name"] = "Název webu";
$a->strings["Host name"] = "Jméno hostitele (host name)";
$a->strings["Sender Email"] = "Email ddesílatele";
$a->strings["Sender Email"] = "E-mail odesílatele";
$a->strings["The email address your server shall use to send notification emails from."] = "E-mailová adresa, kterou bude Váš server používat pro posílání e-mailů s oznámeními.";
$a->strings["Banner/Logo"] = "Banner/logo";
$a->strings["Shortcut icon"] = "Ikona zkratky";
$a->strings["Shortcut icon"] = "Favikona";
$a->strings["Link to an icon that will be used for browsers."] = "Odkaz k ikoně, která bude použita pro prohlížeče.";
$a->strings["Touch icon"] = "Dotyková ikona";
$a->strings["Link to an icon that will be used for tablets and mobiles."] = "Odkaz k ikoně, která bude použita pro tablety a mobilní zařízení.";
$a->strings["Additional Info"] = "Dodatečné informace";
$a->strings["For public servers: you can add additional information here that will be listed at %s/servers."] = "Pro veřejné servery: zde můžete přidat dodatečné informace, které budou vypsané na stránce %s/servers.";
$a->strings["System language"] = "Systémový jazyk";
$a->strings["System theme"] = "Motiv systému ";
$a->strings["System theme"] = "Systémový motiv";
$a->strings["Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"] = "Výchozí systémový motiv - může být změněn v uživatelských profilech - <a href='#' id='cnftheme'>změnit nastavení motivu</a>";
$a->strings["Mobile system theme"] = "Mobilní systémový motiv";
$a->strings["Theme for mobile devices"] = "Motiv pro mobilní zařízení";
@ -1162,25 +1162,25 @@ $a->strings["Maximum image size"] = "Maximální velikost obrázků";
$a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maximální velikost nahraných obrázků v bajtech. Výchozí hodnota je 0, což znamená bez omezení.";
$a->strings["Maximum image length"] = "Maximální velikost obrázků";
$a->strings["Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits."] = "Maximální délka delší stránky nahrávaných obrázků v pixelech. Výchozí hodnota je -1, což znamená bez omezení.";
$a->strings["JPEG image quality"] = "JPEG kvalita obrázku";
$a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = "Nahrávaný JPEG bude uložen se zadanou kvalitou v rozmezí [0-100]. Výchozí hodnota je 100, což znamená plnou kvalitu.";
$a->strings["JPEG image quality"] = "Kvalita obrázků JPEG";
$a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = "Nahrávané obrázky JPEG budou uloženy se zadanou kvalitou v rozmezí [0-100]. Výchozí hodnota je 100, což znamená plnou kvalitu.";
$a->strings["Register policy"] = "Politika registrace";
$a->strings["Maximum Daily Registrations"] = "Maximální počet denních registrací";
$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "Pokud je registrace výše povolena, zde se nastaví maximální počet registrací nových uživatelů za den.\nPokud je registrace zakázána, toto nastavení nemá žádný efekt.";
$a->strings["Register text"] = "Registrace textu";
$a->strings["Will be displayed prominently on the registration page. You can use BBCode here."] = "Bude zobrazeno viditelně na stránce registrace. Zde můžete používat BBCode.";
$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "Pokud je registrace výše povolena, zde se nastaví maximální počet registrací nových uživatelů za den. Pokud je registrace zakázána, toto nastavení nemá žádný efekt.";
$a->strings["Register text"] = "Text při registraci";
$a->strings["Will be displayed prominently on the registration page. You can use BBCode here."] = "Bude zobrazen viditelně na stránce registrace. Zde můžete používat BBCode.";
$a->strings["Forbidden Nicknames"] = "Zakázané přezdívky";
$a->strings["Comma separated list of nicknames that are forbidden from registration. Preset is a list of role names according RFC 2142."] = "Seznam přezdívek, které nelze registrovat, oddělených čárkami. Přednastaven je seznam častých přezdívek dle RFC 2142.";
$a->strings["Accounts abandoned after x days"] = "Účet je opuštěn po x dnech";
$a->strings["Accounts abandoned after x days"] = "Účty jsou opuštěny po x dnech";
$a->strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Nebude se plýtvat systémovými zdroji kontaktováním externích webů s opuštěnými účty. Zadejte 0 pro žádný časový limit.";
$a->strings["Allowed friend domains"] = "Povolené domény přátel";
$a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Čárkou oddělený seznam domén, kterým je povoleno navazovat přátelství s tímto webem. Zástupné znaky (wildcards) jsou povoleny. Prázné znamená libovolnou doménu.";
$a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Seznam domén, kterým je povoleno navazovat přátelství s tímto webem, oddělených čárkami. Zástupné znaky (wildcards) jsou povoleny. Prázné znamená libovolné domény.";
$a->strings["Allowed email domains"] = "Povolené e-mailové domény";
$a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Čárkou oddělený seznam domén emalových adres, kterým je povoleno provádět registraci na tomto webu. Zástupné znaky (wildcards) jsou povoleny. Prázné znamená libovolnou doménu.";
$a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Seznam domén e-mailových adres, kterým je povoleno provádět registraci na tomto webu, oddělených čárkami. Zástupné znaky (wildcards) jsou povoleny. Prázné znamená libovolné domény.";
$a->strings["No OEmbed rich content"] = "Žádný obohacený obsah oEmbed";
$a->strings["Don't show the rich content (e.g. embedded PDF), except from the domains listed below."] = "Neukazovat obohacený obsah (např. vložené PDF dokumenty), kromě toho z domén vypsaných níže.";
$a->strings["Allowed OEmbed domains"] = "Povolené domény pro oEmbed";
$a->strings["Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted."] = "Výpis domén, u nichž je povoleno zobrazit obsah oEmbed, oddělených čárkami. Zástupné znaky jsou povoleny.";
$a->strings["Comma separated list of domains which oembed content is allowed to be displayed. Wildcards are accepted."] = "Seznam domén, u nichž je povoleno zobrazit obsah oEmbed, oddělených čárkami. Zástupné znaky jsou povoleny.";
$a->strings["Block public"] = "Blokovat veřejný přístup";
$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Označením zablokujete veřejný přístup ke všem jinak veřejně přístupným osobním stránkám nepřihlášeným uživatelům.";
$a->strings["Force publish"] = "Vynutit publikaci";
@ -1195,7 +1195,7 @@ $a->strings["Don't include the content of a post/comment/private message/etc. in
$a->strings["Disallow public access to addons listed in the apps menu."] = "Zakázat veřejný přístup k rozšířením uvedeným v menu aplikace.";
$a->strings["Checking this box will restrict addons listed in the apps menu to members only."] = "Označení této volby omezí rozšíření uvedená v menu aplikace pouze pro členy.";
$a->strings["Don't embed private images in posts"] = "Nepovolit přidávání soukromých správ v příspěvcích";
$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = "Nenahrazovat lokální soukromé fotky v příspěvcích vloženou kopií obrázku. To znamená, že kontakty, které obdrží příspěvek obsahující soukromé fotky, budou muset autentikovat a načíst každý obrázek, což může zabrat nějaký čas.";
$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = "Nenahrazovat místní soukromé fotky v příspěvcích vloženou kopií obrázku. To znamená, že kontakty, které obdrží příspěvek obsahující soukromé fotky, budou muset autentikovat a načíst každý obrázek, což může zabrat nějaký čas.";
$a->strings["Explicit Content"] = "Explicitní obsah";
$a->strings["Set this to announce that your node is used mostly for explicit content that might not be suited for minors. This information will be published in the node information and might be used, e.g. by the global directory, to filter your node from listings of nodes to join. Additionally a note about this will be shown at the user registration page."] = "Touto funkcí oznámíte, že je Váš server používán hlavně pro explicitní obsah, který nemusí být vhodný pro mladistvé. Tato informace bude publikována na stránce informací o serveru a může být využita např. globálním adresářem pro odfiltrování Vašeho serveru ze seznamu serverů pro spojení. Poznámka o tom bude navíc zobrazena na stránce registrace.";
$a->strings["Allow Users to set remote_self"] = "Umožnit uživatelům nastavit ";
@ -1247,7 +1247,7 @@ $a->strings["When the discovery is activated, this value defines the timeframe f
$a->strings["Search the local directory"] = "Hledat v lokálním adresáři";
$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Prohledat lokální adresář místo globálního adresáře. Při lokálním prohledávání bude každé hledání provedeno v globálním adresáři na pozadí. To vylepšuje výsledky při zopakování hledání.";
$a->strings["Publish server information"] = "Zveřejnit informace o serveru";
$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details."] = "Pokud je toto povoleno, budou zveřejněna obecná data o serveru a jeho používání. Data obsahují jméno a verzi serveru, počet uživatelů s vřejnými profily, počet příspěvků a aktivované protokoly a konektory. Pro více informací navštivte <a href='http://the-federation.info/'>the-federation.info</a>.";
$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details."] = "Pokud je toto povoleno, budou zveřejněna obecná data o serveru a jeho používání. Data obsahují jméno a verzi serveru, počet uživatelů s veřejnými profily, počet příspěvků a aktivované protokoly a konektory. Pro více informací navštivte <a href='http://the-federation.info/'>the-federation.info</a>.";
$a->strings["Check upstream version"] = "Zkontrolovat upstreamovou verzi";
$a->strings["Enables checking for new Friendica versions at github. If there is a new version, you will be informed in the admin panel overview."] = "Umožní kontrolovat nové verze Friendica na GitHubu. Pokud existuje nová verze, budete informován/a na přehledu administračního panelu.";
$a->strings["Suppress Tags"] = "Potlačit štítky";
@ -1270,7 +1270,7 @@ $a->strings["Base path to installation"] = "Základní cesta k instalaci";
$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Pokud systém nemůže detekovat správnou cestu k Vaší instalaci, zde zadejte jinou cestu. Toto nastavení by mělo být nastaveno pouze, pokud používáte omezený systém a symbolické odkazy ke kořenové složce webu.";
$a->strings["Disable picture proxy"] = "Vypnutí obrázkové proxy";
$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth."] = "Obrázková proxy zvyšuje výkon a soukromí. Neměla by však být používána na systémech s velmi malou rychlostí připojení.";
$a->strings["Only search in tags"] = "Hledat pouze ve štítch";
$a->strings["Only search in tags"] = "Hledat pouze ve štítch";
$a->strings["On large systems the text search can slow down the system extremely."] = "Textové vyhledávání může u rozsáhlých systémů znamenat velmi citelné zpomalení systému.";
$a->strings["New base url"] = "Nová výchozí url adresa";
$a->strings["Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users."] = "Změnit výchozí URL adresu pro tento server. Toto odešle zprávu o přemístění všem kontaktům na Friendica a Diaspora* všech uživatelů.";
@ -1314,18 +1314,18 @@ $a->strings["This does not include updates prior to 1139, which did not return a
$a->strings["Mark success (if update was manually applied)"] = "Označit za úspěšné (pokud byla aktualizace aplikována manuálně)";
$a->strings["Attempt to execute this update step automatically"] = "Pokusit se provést tuto aktualizaci automaticky.";
$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tVážený/á%1\$s,\n\t\t\t\tadministrátor %2\$s pro Vás vytvořil uživatelský účet.";
$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$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 %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tZde jsou vaše přihlašovací detaily:\n\n\t\t\tAdresa stránky:\t\t%1\$s\n\t\t\tPřihlašovací jméno:\t%2\$s\n\t\t\tHeslo:\t\t\t%3\$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\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\t\t\tPokud byste si někdy přál/a smazat účet, může tak učinit na stránce\n\t\t\t%1\$s/removeme.\n\n\t\t\tDěkujeme vám a vítáme vás na %4\$s.";
$a->strings["Registration details for %s"] = "Registrační údaje pro %s";
$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$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 %1\$s/removeme\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tZde jsou Vaše přihlašovací detaily:\n\n\t\t\tAdresa stránky:\t\t%1\$s\n\t\t\tPřihlašovací jméno:\t%2\$s\n\t\t\tHeslo:\t\t\t%3\$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éto stránce.\n\n\t\t\tMožná byste si také přál/a 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\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\t\t\tPokud byste si někdy přál/a smazat účet, můžete tak učinit na stránce\n\t\t\t%1\$s/removeme.\n\n\t\t\tDěkujeme Vám a vítáme Vás na %4\$s.";
$a->strings["Registration details for %s"] = "Registrační údaje pro uživatele %s";
$a->strings["%s user blocked/unblocked"] = [
0 => "%s uživatel blokován/odblokován",
1 => "%s uživatelů blokováno/odblokováno",
2 => "%s uživatelů blokováno/odblokováno",
2 => "%s uživatele blokováno/odblokováno",
3 => "%s uživatelů blokováno/odblokováno",
];
$a->strings["%s user deleted"] = [
0 => "%s uživatel smazán",
1 => "%s uživatelů smazáno",
2 => "%s uživatelů smazáno",
2 => "%s uživatele smazáno",
3 => "%s uživatelů smazáno",
];
$a->strings["User '%s' deleted"] = "Uživatel \"%s\" smazán";
@ -1351,7 +1351,7 @@ $a->strings["New User"] = "Nový uživatel";
$a->strings["Deleted since"] = "Smazán od";
$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Vybraní uživatelé budou smazáni!\\n\\n Vše, co tito uživatelé na těchto stránkách vytvořili, bude trvale odstraněno!\\n\\nOpravdu chcete pokračovat?";
$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Uživatel {0} bude smazán!\\n\\n Vše, co tento uživatel na těchto stránkách vytvořil, bude trvale odstraněno!\\n\\n Opravdu chcete pokračovat?";
$a->strings["Name of the new user."] = "Jméno nového uživatele";
$a->strings["Name of the new user."] = "Jméno nového uživatele.";
$a->strings["Nickname"] = "Přezdívka";
$a->strings["Nickname of the new user."] = "Přezdívka nového uživatele.";
$a->strings["Email address of the new user."] = "Emailová adresa nového uživatele.";
@ -1394,29 +1394,29 @@ $a->strings["Warning: profile location has no profile photo."] = "Varování: um
$a->strings["%d required parameter was not found at the given location"] = [
0 => "%d požadovaný parametr nebyl nalezen na daném umístění",
1 => "%d požadované parametry nebyly nalezeny na daném umístění",
2 => "%d požadovaných parametrů nebylo nalezeno na daném umístění",
2 => "%d požadovaného parametru nebylo nalezeno na daném umístění",
3 => "%d požadovaných parametrů nebylo nalezeno na daném umístění",
];
$a->strings["Introduction complete."] = "Představení dokončeno.";
$a->strings["Unrecoverable protocol error."] = "Neopravitelná chyba protokolu";
$a->strings["Profile unavailable."] = "Profil není k dispozici.";
$a->strings["%s has received too many connection requests today."] = "%s dnes obdržel/a příliš mnoho požadavků o spojení";
$a->strings["%s has received too many connection requests today."] = "%s dnes obdržel/a příliš mnoho požadavků o spojení.";
$a->strings["Spam protection measures have been invoked."] = "Ochrana proti spamu byla aktivována";
$a->strings["Friends are advised to please try again in 24 hours."] = "Přátelům se doporučuje to zkusit znovu za 24 hodin.";
$a->strings["Invalid locator"] = "Neplatný odkaz";
$a->strings["You have already introduced yourself here."] = "Již jste se zde zavedli.";
$a->strings["You have already introduced yourself here."] = "Již jste se zde představil/a.";
$a->strings["Apparently you are already friends with %s."] = "Zřejmě jste s %s již přátelé.";
$a->strings["Invalid profile URL."] = "Neplatné URL profilu.";
$a->strings["Disallowed profile URL."] = "Nepovolené URL profilu.";
$a->strings["Failed to update contact record."] = "Nepodařilo se aktualizovat kontakt.";
$a->strings["Your introduction has been sent."] = "Vaše žádost o propojení byla odeslána.";
$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Vzdálený odběr nemůže být na Vaší síti proveden. Prosím, přihlaste se k odběru přímo na Vašem systému.";
$a->strings["Please login to confirm introduction."] = "Prosím přihlašte se k potvrzení žádosti o propojení.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Jste přihlášeni pod nesprávnou identitou. Prosím, přihlaste se do <strong>tohoto</strong> profilu.";
$a->strings["Please login to confirm introduction."] = "Pro ptvrzení představení se prosím přihlaste.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Jste přihlášen/a pod nesprávnou identitou. Prosím, přihlaste se do <strong>tohoto</strong> profilu.";
$a->strings["Confirm"] = "Potvrdit";
$a->strings["Hide this contact"] = "Skrýt tento kontakt";
$a->strings["Welcome home %s."] = "Vítejte doma, %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Prosím potvrďte Vaši žádost o propojení %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Prosím potvrďte Váš požadavek o spojení uživateli %s.";
$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Prosím zadejte Vaši \"adresu identity\" jedné z následujících podporovaných komunikačních sítí:";
$a->strings["If you are not yet a member of the free social web, <a href=\"%s\">follow this link to find a public Friendica site and join us today</a>."] = "Pokud ještě nejste členem svobodného sociálního webu, <a href=\"%s\">klikněte na tento odkaz, najděte si veřejný server Friendica a připojte se k nám ještě dnes</a>.";
$a->strings["Friend/Connection Request"] = "Požadavek o přátelství/spojení";
@ -1440,8 +1440,8 @@ $a->strings["Upload File:"] = "Nahrát soubor:";
$a->strings["Select a profile:"] = "Vybrat profil:";
$a->strings["Upload"] = "Nahrát";
$a->strings["or"] = "nebo";
$a->strings["skip this step"] = "přeskočit tento krok ";
$a->strings["select a photo from your photo albums"] = "Vybrat fotografii z Vašich fotoalb";
$a->strings["skip this step"] = "tento krok přeskočte";
$a->strings["select a photo from your photo albums"] = "si vyberte fotku z Vašich fotoalb";
$a->strings["Crop Image"] = "Oříznout obrázek";
$a->strings["Please adjust the image cropping for optimum viewing."] = "Prosím, ořízněte tento obrázek pro optimální zobrazení.";
$a->strings["Done Editing"] = "Upravování dokončeno";
@ -1453,20 +1453,20 @@ $a->strings["File upload failed."] = "Nahrání souboru se nezdařilo.";
$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["This message was sent to you by %s, a member of the Friendica social network."] = "Tuto zprávu Vám poslal/a %s, člen 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["You may visit them online at %s"] = "Můžete jej/ji 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 odesílatele odpovědí na tuto zprávu.";
$a->strings["%s posted an update."] = "%s poslal/a aktualizaci.";
$a->strings["Help:"] = "Nápověda:";
$a->strings["Move account"] = "Přesunout účet";
$a->strings["You can import an account from another Friendica server."] = "Můžete importovat účet z jiného serveru Friendica.";
$a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Musíte exportovat svůj účet na sterém serveru a nahrát ho zde. My následně vytvoříme Váš původní účet zde včetně všech kontaktů. Zároveň se pokusíme informovat všechny Vaše přátele, že jste se sem přestěhovali.";
$a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Musíte exportovat svůj účet na starém serveru a nahrát ho zde. My následně vytvoříme Váš původní účet zde včetně všech kontaktů. Zároveň se pokusíme informovat všechny Vaše přátele, že jste se sem přestěhoval/a.";
$a->strings["This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"] = "Tato vlastnost je experimentální. Nemůžeme importovat kontakty za sítě OStatus (GNU social/StatusNet) nebo z Diaspory";
$a->strings["Account file"] = "Soubor s účtem";
$a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "K exportu Vašeho účtu, jděte do \"Nastavení->Export vašich osobních dat\" a zvolte \" Export účtu\"";
$a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "K exportu Vašeho účtu jděte do \"Nastavení->Export vašich osobních dat\" a zvolte \"Exportovat účet\"";
$a->strings["Invalid profile identifier."] = "Neplatný identifikátor profilu.";
$a->strings["Profile Visibility Editor"] = "Editor viditelnosti profilu ";
$a->strings["Visible To"] = "Viditelný pro";
$a->strings["All Contacts (with secure profile access)"] = "Všechny kontakty (se zabezpečeným přístupovým profilem )";
$a->strings["Visible To"] = "Viditelný uživatelům";
$a->strings["All Contacts (with secure profile access)"] = "Všem kontaktům (se zabezpečeným přístupem k profilu)";
$a->strings["View"] = "Zobrazit";
$a->strings["Previous"] = "Předchozí";
$a->strings["today"] = "dnes";
@ -1483,15 +1483,15 @@ $a->strings["Registration revoked for %s"] = "Registrace zrušena pro %s";
$a->strings["Please login."] = "Přihlaste se, prosím.";
$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["CC: email addresses"] = "Skrytá kopie: e-mailové adresy";
$a->strings["Example: bob@example.com, mary@example.com"] = "Příklad: jan@priklad.cz, lucie@priklad.cz";
$a->strings["Applications"] = "Aplikace";
$a->strings["No installed applications."] = "Žádné nainstalované aplikace.";
$a->strings["You must be logged in to use this module"] = "Pro používání tohoto modulu musíte být přihlášen/a";
$a->strings["Source URL"] = "Zdrojová adresa URL";
$a->strings["Friend suggestion sent."] = "Návrhy přátelství odeslány ";
$a->strings["Suggest Friends"] = "Navrhněte přátelé";
$a->strings["Suggest a friend for %s"] = "Navrhněte přátelé pro uživatele %s";
$a->strings["Suggest Friends"] = "Navrhnout přátele";
$a->strings["Suggest a friend for %s"] = "Navrhnout přítele pro uživatele %s";
$a->strings["System down for maintenance"] = "Systém vypnut z důvodů údržby";
$a->strings["Requested profile is not available."] = "Požadovaný profil není dostupný.";
$a->strings["%s's timeline"] = "Časová osa uživatele %s";
@ -1501,7 +1501,7 @@ $a->strings["No friends to display."] = "Žádní přátelé k zobrazení";
$a->strings["%d contact edited."] = [
0 => "%d kontakt upraven",
1 => "%d kontakty upraveny",
2 => "%d kontaktů upraveno",
2 => "%d kontaktu upraveno",
3 => "%d kontaktů upraveno",
];
$a->strings["Could not access contact record."] = "Nelze získat přístup k záznamu kontaktu.";
@ -1523,11 +1523,11 @@ $a->strings["Private communications are not available for this contact."] = "Sou
$a->strings["Never"] = "Nikdy";
$a->strings["(Update was successful)"] = "(Aktualizace byla úspěšná)";
$a->strings["(Update was not successful)"] = "(Aktualizace nebyla úspěšná)";
$a->strings["Suggest friends"] = "Navrhněte přátelé";
$a->strings["Suggest friends"] = "Navrhnout přátele";
$a->strings["Network type: %s"] = "Typ sítě: %s";
$a->strings["Communications lost with this contact!"] = "Komunikace s tímto kontaktem byla ztracena!";
$a->strings["Fetch further information for feeds"] = "Načíst další informace pro kanál";
$a->strings["Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."] = "Načíst informace jako obrázky náhledu, nadpis a popisek z položky kanálu. Toto můžete aktivovat pokud kanál neobsahuje moc textu. Klíčová slova jsou vzata z hlavičky meta v položce kanálu a jsou zveřejněna jako hashtagy.";
$a->strings["Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags."] = "Načíst informace jako obrázky náhledu, nadpis a popisek z položky kanálu. Toto můžete aktivovat, pokud kanál neobsahuje moc textu. Klíčová slova jsou vzata z hlavičky meta v položce kanálu a jsou zveřejněna jako hashtagy.";
$a->strings["Fetch information"] = "Načíst informace";
$a->strings["Fetch keywords"] = "Načíst klíčová slova";
$a->strings["Fetch information and keywords"] = "Načíst informace a klíčová slova";
@ -1550,14 +1550,14 @@ $a->strings["Currently blocked"] = "V současnosti zablokováno";
$a->strings["Currently ignored"] = "V současnosti ignorováno";
$a->strings["Currently archived"] = "Aktuálně archivován";
$a->strings["Awaiting connection acknowledge"] = "Čekám na potrvzení spojení";
$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Odpovědi/oblíbení na Vaše veřejné příspěvky <strong>mohou být</strong> stále viditelné";
$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Odpovědi/oblíbení na Vaše veřejné příspěvky <strong>mohou</strong> být stále viditelné";
$a->strings["Notification for new posts"] = "Upozornění na nové příspěvky";
$a->strings["Send a notification of every new post of this contact"] = "Poslat upozornění při každém novém příspěvku tohoto kontaktu";
$a->strings["Blacklisted keywords"] = "Zakázaná klíčová slova";
$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Čárkou oddělený seznam klíčových slov, které by neměly být převáděna na hashtagy, když je zvoleno \"Načíst informace a klíčová slova\"";
$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Seznam klíčových slov, které by neměly být převáděna na hashtagy, když je zvoleno \"Načíst informace a klíčová slova\". Oddělujte čárkami";
$a->strings["XMPP:"] = "XMPP:";
$a->strings["Actions"] = "Akce";
$a->strings["Suggestions"] = "Doporučení";
$a->strings["Suggestions"] = "Návrhy";
$a->strings["Suggest potential friends"] = "Navrhnout potenciální přátele";
$a->strings["Show all contacts"] = "Zobrazit všechny kontakty";
$a->strings["Unblocked"] = "Odblokován";
@ -1628,11 +1628,11 @@ $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["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["l F d, Y \\@ g:i A"] = "l d. F, Y v g:i A";
$a->strings["Time Conversion"] = "Časová konverze";
$a->strings["Friendica provides this service for sharing events with other networks and friends in unknown timezones."] = "Friendica poskytuje tuto službu pro sdílení událostí s ostatními sítěmi a přáteli v neznámých časových zónách";
$a->strings["Time Conversion"] = "Časový převod";
$a->strings["Friendica provides this service for sharing events with other networks and friends in unknown timezones."] = "Friendica poskytuje tuto službu ke sdílení událostí s ostatními sítěmi a přáteli v neznámých časových pásmech";
$a->strings["UTC time: %s"] = "UTC čas: %s";
$a->strings["Current timezone: %s"] = "Aktuální časové pásmo: %s";
$a->strings["Converted localtime: %s"] = "Převedený lokální čas : %s";
$a->strings["Converted localtime: %s"] = "Převedený místní čas : %s";
$a->strings["Please select your timezone:"] = "Prosím, vyberte své časové pásmo:";
$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";
@ -1647,7 +1647,7 @@ $a->strings["%s : Message delivery failed."] = "%s : Doručení zprávy se nezda
$a->strings["%d message sent."] = [
0 => "%d zpráva odeslána.",
1 => "%d zprávy odeslány.",
2 => "%d zpráv odesláno.",
2 => "%d zprávy odesláno.",
3 => "%d zpráv odesláno.",
];
$a->strings["You have no more invitations available"] = "Nemáte k dispozici žádné další pozvánky";
@ -1655,7 +1655,7 @@ $a->strings["Visit %s for a list of public sites that you can join. Friendica me
$a->strings["To accept this invitation, please visit and register at %s or any other public Friendica website."] = "K přijetí této pozvánky prosím navštivte a registrujte se na %s nebo na kterékoliv jiném veřejném Friendica serveru.";
$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks. See %s for a list of alternate Friendica sites you can join."] = "Stránky Friendica jsou navzájem propojené a vytváří tak obrovský sociální web s dúrazem na soukromí, kterou vlastní a kontrojují její členové, Mohou se také připojit k mnoha tradičním socilním sítím. Navštivte %s pro seznam alternativních serverů Friendica, ke kterým se můžete přidat.";
$a->strings["Our apologies. This system is not currently configured to connect with other public sites or invite members."] = "Omlouváme se. Systém nyní není nastaven tak, aby se připojil k ostatním veřejným serverům nebo umožnil pozvat nové členy.";
$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks."] = "Stránky Friendica jsou navzájem propojené a vytváří tak obrovský sociální web s dúrazem na soukromí, kterou vlastní a kontrojují její členové, Mohou se také připojit k mnoha tradičním socilním sítím.";
$a->strings["Friendica sites all inter-connect to create a huge privacy-enhanced social web that is owned and controlled by its members. They can also connect with many traditional social networks."] = "Stránky Friendica jsou navzájem propojené a vytváří tak obrovský sociální web s dúrazem na soukromí, kterou vlastní a kontrolují její členové. Mohou se také připojit k mnoha tradičním sociálním sítím.";
$a->strings["To accept this invitation, please visit and register at %s."] = "Pokud chcete tuto pozvánku přijmout, prosím navštivte %s a registrujte se tam.";
$a->strings["Send invitations"] = "Poslat pozvánky";
$a->strings["Enter email addresses, one per line:"] = "Zadejte e-mailové adresy, jednu na řádek:";
@ -1702,14 +1702,14 @@ $a->strings["Relation"] = "Vztah";
$a->strings["Miscellaneous"] = "Různé";
$a->strings["Your Gender:"] = "Vaše pohlaví:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Rodinný stav:";
$a->strings["Sexual Preference:"] = "Sexuální preference:";
$a->strings["Sexual Preference:"] = "Sexuální orientace:";
$a->strings["Example: fishing photography software"] = "Příklad: rybaření fotografování software";
$a->strings["Profile Name:"] = "Jméno profilu:";
$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Toto je váš <strong>veřejný</strong> profil.<br />Ten <strong>může</strong> být viditelný kýmkoliv na internetu.";
$a->strings["Your Full Name:"] = "Vaše celé jméno:";
$a->strings["Title/Description:"] = "Název / Popis:";
$a->strings["Street Address:"] = "Ulice:";
$a->strings["Locality/City:"] = "Lokalita/Město:";
$a->strings["Locality/City:"] = "Poloha/město:";
$a->strings["Region/State:"] = "Region / stát:";
$a->strings["Postal/Zip Code:"] = "PSČ:";
$a->strings["Country:"] = "Země:";
@ -1718,10 +1718,10 @@ $a->strings["Who: (if applicable)"] = "Kdo: (pokud je možné)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Příklady: jan123, Jan Novák, jan@priklad.cz";
$a->strings["Since [date]:"] = "Od [data]:";
$a->strings["Tell us about yourself..."] = "Řekněte nám něco o sobě ...";
$a->strings["XMPP (Jabber) address:"] = "Adresa pro XMPP (Jabber)";
$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Adresa XMPP bude rozšířena mezi Vašimi kontakty, aby vás mohly sledovat.";
$a->strings["XMPP (Jabber) address:"] = "Adresa XMPP (Jabber):";
$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Adresa XMPP bude rozšířena mezi Vašemi kontakty, aby vás mohly sledovat.";
$a->strings["Homepage URL:"] = "Odkaz na domovskou stránku:";
$a->strings["Hometown:"] = "Rodné město";
$a->strings["Hometown:"] = "Rodné město:";
$a->strings["Political Views:"] = "Politické přesvědčení:";
$a->strings["Religious Views:"] = "Náboženské přesvědčení:";
$a->strings["Public Keywords:"] = "Veřejná klíčová slova:";
@ -1763,7 +1763,7 @@ $a->strings["No photos selected"] = "Není vybrána žádná fotka";
$a->strings["Upload Photos"] = "Nahrát fotky";
$a->strings["New album name: "] = "Název nového alba: ";
$a->strings["or select existing album:"] = "nebo si vyberte existující album:";
$a->strings["Do not show a status post for this upload"] = "Nezobrazovat stav pro toto nahrání";
$a->strings["Do not show a status post for this upload"] = "Nezobrazovat pro toto nahrání stavový příspěvek";
$a->strings["Edit Album"] = "Upravit album";
$a->strings["Show Newest First"] = "Zobrazit nejprve nejnovější:";
$a->strings["Show Oldest First"] = "Zobrazit nejprve nejstarší:";
@ -1782,8 +1782,8 @@ $a->strings["Caption"] = "Titulek";
$a->strings["Add a Tag"] = "Přidat štítek";
$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Příklad: @jan, @Lucie_Nováková, @jakub@priklad.cz, #Morava, #taboreni";
$a->strings["Do not rotate"] = "Neotáčet";
$a->strings["Rotate CW (right)"] = "Rotovat po směru hodinových ručiček (doprava)";
$a->strings["Rotate CCW (left)"] = "Rotovat proti směru hodinových ručiček (doleva)";
$a->strings["Rotate CW (right)"] = "Otáčet po směru hodinových ručiček (doprava)";
$a->strings["Rotate CCW (left)"] = "Otáčet proti směru hodinových ručiček (doleva)";
$a->strings["I like this (toggle)"] = "Líbí se mi to (přepínač)";
$a->strings["I don't like this (toggle)"] = "Nelíbí se mi to (přepínač)";
$a->strings["Comment"] = "Okomentovat";
@ -1807,42 +1807,42 @@ $a->strings["Command line PHP"] = "Příkazový řádek PHP";
$a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = "PHP executable není php cli binary (může být verze cgi-fgci)";
$a->strings["Found PHP version: "] = "Nalezena PHP verze:";
$a->strings["PHP cli binary"] = "PHP cli binary";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Verze PHP pro příkazový řádek na Vašem systému nemá povolen \"register_argc_argv\".";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Verze PHP pro příkazový řádek na Vašem systému nemá povoleno nastavení \"register_argc_argv\".";
$a->strings["This is required for message delivery to work."] = "Toto je nutné pro fungování doručování zpráv.";
$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv";
$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Chyba: funkce \"openssl_pkey_new\" na tomto systému není schopna generovat šifrovací klíče";
$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Pokud systém běží na Windows, seznamte se s \"http://www.php.net/manual/en/openssl.installation.php\".";
$a->strings["Generate encryption keys"] = "Generovat kriptovací klíče";
$a->strings["libCurl PHP module"] = "libCurl PHP modul";
$a->strings["GD graphics PHP module"] = "GD graphics PHP modul";
$a->strings["OpenSSL PHP module"] = "OpenSSL PHP modul";
$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Pokud systém běží na Windows, prosím přečtěte si \"http://www.php.net/manual/en/openssl.installation.php\".";
$a->strings["Generate encryption keys"] = "Generovat šifrovací klíče";
$a->strings["libCurl PHP module"] = "PHP modul libCurl";
$a->strings["GD graphics PHP module"] = "PHP modul GD graphics";
$a->strings["OpenSSL PHP module"] = "PHP modul OpenSSL";
$a->strings["PDO or MySQLi PHP module"] = "PHP modul PDO nebo MySQLi";
$a->strings["mb_string PHP module"] = "mb_string PHP modul";
$a->strings["mb_string PHP module"] = "PHP modul mb_string";
$a->strings["XML PHP module"] = "PHP modul XML";
$a->strings["iconv PHP module"] = "PHP modul iconv";
$a->strings["POSIX PHP module"] = "PHP modul POSIX";
$a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite modul";
$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Chyba: Požadovaný Apache webserver mod-rewrite modul není nainstalován.";
$a->strings["Error: libCURL PHP module required but not installed."] = "Chyba: požadovaný libcurl PHP modul není nainstalován.";
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Chyba: požadovaný GD graphics PHP modul není nainstalován.";
$a->strings["Error: openssl PHP module required but not installed."] = "Chyba: požadovaný openssl PHP modul není nainstalován.";
$a->strings["Error: PDO or MySQLi PHP module required but not installed."] = "Chyba: PHP modul PDO nebo MySQLi je vyžadován ale není nainstalován.";
$a->strings["Apache mod_rewrite module"] = "Modul Apache mod_rewrite";
$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Chyba: Modul mod_rewrite webového serveru Apache je vyadován, ale není nainstalován.";
$a->strings["Error: libCURL PHP module required but not installed."] = "Chyba: PHP modul libcurl je vyžadován, ale není nainstalován.";
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Chyba: PHP modul GD graphics je vyžadován, ale není nainstalován.";
$a->strings["Error: openssl PHP module required but not installed."] = "Chyba: PHP modul openssl je vyžadován, ale není nainstalován.";
$a->strings["Error: PDO or MySQLi PHP module required but not installed."] = "Chyba: PHP modul PDO nebo MySQLi je vyžadován, ale není nainstalován.";
$a->strings["Error: The MySQL driver for PDO is not installed."] = "Chyba: Ovladač MySQL pro PDO není nainstalován";
$a->strings["Error: mb_string PHP module required but not installed."] = "Chyba: PHP modul mb_string je vyžadován, ale není nainstalován.";
$a->strings["Error: iconv PHP module required but not installed."] = "Chyba: PHP modul iconv je vyžadován ale není nainstalován";
$a->strings["Error: POSIX PHP module required but not installed."] = "Chyba: PHP modul POSIX je vyžadován ale není nainstalován.";
$a->strings["Error, XML PHP module required but not installed."] = "Chyba: PHP modul XML je vyžadován ale není nainstalován";
$a->strings["Error: iconv PHP module required but not installed."] = "Chyba: PHP modul iconv je vyžadován, ale není nainstalován";
$a->strings["Error: POSIX PHP module required but not installed."] = "Chyba: PHP modul POSIX je vyžadován, ale není nainstalován.";
$a->strings["Error, XML PHP module required but not installed."] = "Chyba: PHP modul XML je vyžadován, ale není nainstalován";
$a->strings["The web installer needs to be able to create a file called \"local.ini.php\" in the \"config\" folder of your web server and it is unable to do so."] = "Webový instalátor musí být schopen vytvořit soubor s názvem \"local.ini.php\" v adresáři \"config\" Vašeho webového serveru, ale nyní mu to není umožněno. ";
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Toto je nejčastěji nastavením oprávnění, kdy webový server nemusí být schopen zapisovat soubory do vašeho adresáře - i když Vy můžete.";
$a->strings["At the end of this procedure, we will give you a text to save in a file named local.ini.php in your Friendica \"config\" folder."] = "Na konci této procedury od nás obdržíte text k uložení v souboru pojmenovaném local.ini.php ve Vašem kořenovém adresáři Friendica. ";
$a->strings["At the end of this procedure, we will give you a text to save in a file named local.ini.php in your Friendica \"config\" folder."] = "Na konci této procedury od nás obdržíte text k uložení v souboru pojmenovaném local.ini.php v adresáři \"config\" na Vaší instalaci Friendica.";
$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternativně můžete tento krok přeskočit a provést manuální instalaci. Přečtěte si prosím soubor \"INSTALL.txt\" pro další instrukce.";
$a->strings["config/local.ini.php is writable"] = "Do souboru config/local.ini.php lze zapisovat";
$a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica používá šablonovací nástroj Smarty3 pro zobrazení svých weobvých stránek. Smarty3 kompiluje šablony do PHP pro zrychlení vykreslování.";
$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Pro uložení kompilovaných šablon, webový server potřebuje mít přístup k zápisu do adresáře view/smarty3/ pod hlavním adresářem instalace Friendica";
$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "prosím ujistěte se, že uživatel web serveru (jako například www-data) má právo zápisu do tohoto adresáře";
$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Poznámka: jako bezpečnostní opatření, přidělte právo zápisu pouze k adresáři /view/smarty3/ a nikoliv už k souborům s šablonami (.tpl), které obsahuje.";
$a->strings["view/smarty3 is writable"] = "view/smarty3 je nastaven pro zápis";
$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Url rewrite v .htconfig nefunguje. Prověřte prosím Vaše nastavení serveru.";
$a->strings["config/local.ini.php is writable"] = "Soubor config/local.ini.php je zapisovatelný";
$a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica používá k zobrazení svých webových stránek šablonovací nástroj Smarty3. Smarty3 kompiluje šablony do PHP pro zrychlení vykreslování.";
$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Pro uložení kompilovaných šablon potřebuje webový server mít přístup k zápisu do adresáře view/smarty3/ pod kořenovým adresářem Friendica.";
$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Prosím ujistěte se, že má uživatel webového serveru (jako například www-data) právo zápisu do tohoto adresáře";
$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Poznámka: jako bezpečnostní opatření byste měl/a přidělit webovém serveru právo zápisu pouze do adresáře /view/smarty3/ -- a nikoliv už do souborů s šablonami (.tpl), které obsahuje.";
$a->strings["view/smarty3 is writable"] = "Adresář view/smarty3 je zapisovatelný";
$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Funkce URL rewrite v souboru .htaccess nefunguje. Prověřte prosím Vaše nastavení serveru.";
$a->strings["Error message from Curl when fetching"] = "Chybová zpráva od Curl při načítání";
$a->strings["Url rewrite is working"] = "Url rewrite je funkční.";
$a->strings["ImageMagick PHP extension is not installed"] = "PHP rozšíření ImageMagick není nainstalováno";
@ -1881,7 +1881,7 @@ $a->strings["User profile creation error"] = "Chyba vytváření uživatelského
$a->strings["%d contact not imported"] = [
0 => "%d kontakt nenaimportován",
1 => "%d kontakty nenaimportovány",
2 => "%d kontaktů nenaimportováno",
2 => "%d kontaktu nenaimportováno",
3 => "%d kontaktů nenaimportováno",
];
$a->strings["Done. You can now login with your username and password"] = "Hotovo. Nyní se můžete přihlásit se svým uživatelským jménem a heslem";
@ -1912,7 +1912,7 @@ $a->strings["via Wall-To-Wall:"] = "ze zdi na zeď";
$a->strings["%d comment"] = [
0 => "%d komentář",
1 => "%d komentáře",
2 => "%d komentářů",
2 => "%d komentáře",
3 => "%d komentářů",
];
$a->strings["Bold"] = "Tučné";
@ -1931,13 +1931,13 @@ $a->strings["We encountered a problem while logging in with the OpenID you provi
$a->strings["The error message was:"] = "Chybová zpráva byla:";
$a->strings["Create a New Account"] = "Vytvořit nový účet";
$a->strings["Password: "] = "Heslo: ";
$a->strings["Remember me"] = "Pamatuj si mne";
$a->strings["Remember me"] = "Pamatovat si mě";
$a->strings["Or login using OpenID: "] = "Nebo se přihlaste pomocí OpenID: ";
$a->strings["Forgot your password?"] = "Zapomněl/a jste heslo?";
$a->strings["Website Terms of Service"] = "Podmínky používání stránky";
$a->strings["terms of service"] = "podmínky používání";
$a->strings["Website Privacy Policy"] = "Pravidla ochrany soukromí serveru";
$a->strings["privacy policy"] = "ochrana soukromí";
$a->strings["Website Privacy Policy"] = "Zásady soukromí serveru";
$a->strings["privacy policy"] = "zásady soukromí";
$a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "Ve chvíli registrace, a pro poskytování komunikace mezi uživatelským účtem a jeho kontakty, musí uživatel poskytnout zobrazované jméno (pseudonym), uživatelské jméno (přezdívku) a funkční e-mailovou adresu. Jména budou dostupná na profilové stránce účtu pro kteréhokoliv návštěvníka, i kdyby ostatní detaily nebyly zobrazeny. E-mailová adresa bude použita pouze pro zasílání oznámení o interakcích, nebude ale viditelně zobrazována. Zápis účtu do adresáře účtů serveru nebo globálního adresáře účtů je nepovinný a může být ovládán v nastavení uživatele, není potřebný pro komunikaci.";
$a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "Tato data jsou vyžadována ke komunikaci a jsou předávána serverům komunikačních partnerů a jsou tam ukládána. Uživatelé mohou zadávat dodatečná soukromá data, která mohou být odeslána na účty komunikačních partnerů.";
$a->strings["At any point in time a logged in user can export their account data from the <a href=\"%1\$s/settings/uexport\">account settings</a>. If the user wants to delete their account they can do so at <a href=\"%1\$s/removeme\">%1\$s/removeme</a>. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "Přihlášený uživatel si kdykoliv může exportovat svoje data účtu z <a href=\"%1\$s/settings/uexport\">nastavení účtu</a>. Pokud by chtěl uživatel svůj účet smazat, může tak učinit na stránce <a href=\"%1\$s/removeme\">%1\$s/removeme</a>. Smazání účtu bude trvalé. Na serverech komunikačních partnerů bude zároveň vyžádáno smazání dat.";
@ -1954,16 +1954,16 @@ $a->strings["Birthday:"] = "Narozeniny:";
$a->strings["YYYY-MM-DD or MM-DD"] = "RRRR-MM-DD nebo MM-DD";
$a->strings["never"] = "nikdy";
$a->strings["less than a second ago"] = "méně než před sekundou";
$a->strings["year"] = "rokem";
$a->strings["years"] = "lety";
$a->strings["months"] = "měsíci";
$a->strings["weeks"] = "týdny";
$a->strings["days"] = "dny";
$a->strings["hour"] = "hodinou";
$a->strings["hours"] = "hodinami";
$a->strings["minute"] = "minutou";
$a->strings["minutes"] = "minutami";
$a->strings["second"] = "sekundou";
$a->strings["year"] = "rok";
$a->strings["years"] = "let";
$a->strings["months"] = "měsíců";
$a->strings["weeks"] = "týdnů";
$a->strings["days"] = "dní";
$a->strings["hour"] = "hodina";
$a->strings["hours"] = "hodin";
$a->strings["minute"] = "minuta";
$a->strings["minutes"] = "minut";
$a->strings["second"] = "sekunda";
$a->strings["seconds"] = "sekund";
$a->strings["%1\$d %2\$s ago"] = "před %1\$d %2\$s";
$a->strings["[no subject]"] = "[bez předmětu]";
@ -1995,11 +1995,11 @@ $a->strings["Duplicate event"] = "Duplikovat událost";
$a->strings["Delete event"] = "Smazat událost";
$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["Show map"] = "Zobrazit mapu";
$a->strings["Hide map"] = "Skrýt mapu";
$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.";
$a->strings["An invitation is required."] = "Je vyžadována pozvánka.";
$a->strings["Invitation could not be verified."] = "Pozvánka nemohla být ověřena.";
$a->strings["Invalid OpenID url"] = "Neplatný odkaz OpenID";
$a->strings["Please enter the required information."] = "Zadejte prosím požadované informace.";
@ -2021,7 +2021,7 @@ $a->strings["An error occurred creating your default contact group. Please try a
$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tThank you for registering at %2\$s. Your account is pending for approval by the administrator.\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 čeká na schválení administrátora.\n\t\t";
$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["\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éto stránce.\n\n\t\t\tMožná byste si také přál/a 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\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\t\t\tPokud byste si někdy přál/a smazat účet, můžete 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["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Dříve smazaná skupina s tímto jménem byla obnovena. Stávající oprávnění <strong>může</strong> ovlivnit tuto skupinu a její budoucí členy. Pokud to není to, co jste chtěli, vytvořte, prosím, další skupinu s jiným názvem.";
$a->strings["Default privacy group for new contacts"] = "Výchozí soukromá skupina pro nové kontakty.";
$a->strings["Everybody"] = "Všichni";
@ -2045,7 +2045,7 @@ $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["for %1\$d %2\$s"] = "%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ě:";
@ -2066,7 +2066,7 @@ $a->strings["Example: bob@example.com, http://example.com/barbara"] = "Příklad
$a->strings["%d invitation available"] = [
0 => "%d pozvánka k dispozici",
1 => "%d pozvánky k dispozici",
2 => "%d pozvánek k dispozici",
2 => "%d pozvánky k dispozici",
3 => "%d pozvánek k dispozici",
];
$a->strings["Networks"] = "Sítě";
@ -2075,10 +2075,10 @@ $a->strings["Saved Folders"] = "Uložené složky";
$a->strings["Everything"] = "Všechno";
$a->strings["Categories"] = "Kategorie";
$a->strings["%d contact in common"] = [
0 => "%d sdílený kontakt",
1 => "%d sdílených kontaktů",
2 => "%d sdílených kontaktů",
3 => "%d sdílených kontaktů",
0 => "%d společný kontakt",
1 => "%d společné kontakty",
2 => "%d společného kontaktu",
3 => "%d společných kontaktů",
];
$a->strings["Frequently"] = "Často";
$a->strings["Hourly"] = "Hodinově";
@ -2096,12 +2096,12 @@ $a->strings["Google+"] = "Google+";
$a->strings["pump.io"] = "pump.io";
$a->strings["Twitter"] = "Twitter";
$a->strings["Diaspora Connector"] = "Diaspora Connector";
$a->strings["GNU Social Connector"] = "GNU Social Connector";
$a->strings["GNU Social Connector"] = "GNU social Connector";
$a->strings["pnut"] = "pnut";
$a->strings["Male"] = "Muž";
$a->strings["Female"] = "Žena";
$a->strings["Currently Male"] = "V současné době muž";
$a->strings["Currently Female"] = "V současné době žena";
$a->strings["Currently Male"] = "V současnosti muž";
$a->strings["Currently Female"] = "V současnosti žena";
$a->strings["Mostly Male"] = "Z větší části muž";
$a->strings["Mostly Female"] = "Z větší části žena";
$a->strings["Transgender"] = "Transgender";
@ -2124,35 +2124,35 @@ $a->strings["Deviant"] = "Deviant";
$a->strings["Fetish"] = "Fetišista";
$a->strings["Oodles"] = "Hodně";
$a->strings["Nonsexual"] = "Nesexuální";
$a->strings["Single"] = "Svobodný";
$a->strings["Lonely"] = "Osamnělý";
$a->strings["Available"] = "Dostupný";
$a->strings["Unavailable"] = "Nedostupný";
$a->strings["Has crush"] = "Zamilovaný";
$a->strings["Infatuated"] = "Zabouchnutý";
$a->strings["Dating"] = "Seznamující se";
$a->strings["Unfaithful"] = "Nevěrný";
$a->strings["Sex Addict"] = "Závislý na sexu";
$a->strings["Single"] = "Svobodný";
$a->strings["Lonely"] = "Osamělý";
$a->strings["Available"] = "Dostupný";
$a->strings["Unavailable"] = "Nedostupný";
$a->strings["Has crush"] = "Zamilovaný";
$a->strings["Infatuated"] = "Zabouchnutý";
$a->strings["Dating"] = "Chodím s někým";
$a->strings["Unfaithful"] = "Nevěrný";
$a->strings["Sex Addict"] = "Posedlý/á sexem";
$a->strings["Friends/Benefits"] = "Přátelé/výhody";
$a->strings["Casual"] = "Ležérní";
$a->strings["Engaged"] = "Zadaný";
$a->strings["Engaged"] = "Zadaný";
$a->strings["Married"] = "Ženatý/vdaná";
$a->strings["Imaginarily married"] = "Pomyslně ženatý/vdaná";
$a->strings["Partners"] = "Partneři";
$a->strings["Cohabiting"] = "Žijící ve společné domácnosti";
$a->strings["Cohabiting"] = "Žiji ve společné domácnosti";
$a->strings["Common law"] = "Zvykové právo";
$a->strings["Happy"] = "Šťastný";
$a->strings["Happy"] = "Šťastný";
$a->strings["Not looking"] = "Nehledající";
$a->strings["Swinger"] = "Swinger";
$a->strings["Betrayed"] = "Zrazen";
$a->strings["Separated"] = "Odloučený";
$a->strings["Unstable"] = "Nestálý";
$a->strings["Divorced"] = "Rozvedený(á)";
$a->strings["Imaginarily divorced"] = "Pomyslně rozvedený";
$a->strings["Widowed"] = "Ovdovělý(á)";
$a->strings["Uncertain"] = "Nejistý";
$a->strings["Betrayed"] = "Zrazen/a";
$a->strings["Separated"] = "Odloučený";
$a->strings["Unstable"] = "Nestálý";
$a->strings["Divorced"] = "Rozvedený";
$a->strings["Imaginarily divorced"] = "Pomyslně rozvedený";
$a->strings["Widowed"] = "Ovdovělý";
$a->strings["Uncertain"] = "Nejistý";
$a->strings["It's complicated"] = "Je to složité";
$a->strings["Don't care"] = "Nezajímá";
$a->strings["Don't care"] = "Nezájem";
$a->strings["Ask me"] = "Zeptej se mě";
$a->strings["General Features"] = "Obecné vlastnosti";
$a->strings["Multiple Profiles"] = "Vícenásobné profily";
@ -2164,7 +2164,7 @@ $a->strings["Ability for visitors to download the public calendar"] = "Umožnit
$a->strings["Post Composition Features"] = "Nastavení vytváření příspěvků";
$a->strings["Post Preview"] = "Náhled příspěvku";
$a->strings["Allow previewing posts and comments before publishing them"] = "Povolit náhledy příspěvků a komentářů před jejich zveřejněním";
$a->strings["Auto-mention Forums"] = "Automaticky zmínit fóra";
$a->strings["Auto-mention Forums"] = "Automaticky zmiňovat fóra";
$a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = "Přidat/odstranit zmínku, když je stránka na fóru označena/odznačena v okně ACL.";
$a->strings["Network Sidebar"] = "Síťová postranní lišta";
$a->strings["Ability to select posts by date ranges"] = "Možnost označit příspěvky dle časového intervalu";
@ -2238,10 +2238,10 @@ $a->strings["Export"] = "Exportovat";
$a->strings["Export calendar as ical"] = "Exportovat kalendář jako ical";
$a->strings["Export calendar as csv"] = "Exportovat kalendář jako csv";
$a->strings["Embedding disabled"] = "Vkládání zakázáno";
$a->strings["Embedded content"] = "vložený obsah";
$a->strings["Embedded content"] = "Vložený obsah";
$a->strings["view full size"] = "zobrazit v plné velikosti";
$a->strings["Image/photo"] = "Obrázek/fotka";
$a->strings["$1 wrote:"] = "$1 napsal/a:";
$a->strings["Encrypted content"] = "Šifrovaný obsah";
$a->strings["Invalid source protocol"] = "Neplatný zdrojový protocol";
$a->strings["Invalid link protocol"] = "Neplatný linkový protokol";
$a->strings["Invalid source protocol"] = "Neplatný protokol zdroje";
$a->strings["Invalid link protocol"] = "Neplatný protokol odkazu";

View File

@ -8,7 +8,7 @@
# Damien Goutte-Gattat <damien+transifex@incenp.org>, 2015-2016
# Damien Goutte-Gattat <damien+transifex@incenp.org>, 2015
# Domovoy <domovoy@errlock.org>, 2012
# Hypolite Petovan <mrpetovan@gmail.com>, 2016
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
# Jak <inactive+Jak@transifex.com>, 2014
# Lionel Triay <zapimax38@free.fr>, 2013
# Thecross, 2017

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -54,20 +54,19 @@ $(document).ready(function() {
// without page reloading (e.g. closing an old modal and open a new modal).
// Otherwise we wouldn't get the ACL data.
/// @todo: Try to implement some kind of ACL reloading in acl.js.
if (typeof acl !== "undefined") {
var eventPerms = document.getElementById('event-edit-form');
acl = new ACL(
baseurl + "/acl",
[
eventPerms.dataset.allow_cid,
eventPerms.dataset.allow_gid,
eventPerms.dataset.deny_cid,
eventPerms.dataset.deny_gid
JSON.parse(eventPerms.dataset.allow_cid),
JSON.parse(eventPerms.dataset.allow_gid),
JSON.parse(eventPerms.dataset.deny_cid),
JSON.parse(eventPerms.dataset.deny_gid)
]
);
}
acl.get(0, 100);
});
// Load the html of the actual event and incect the output to the

Some files were not shown because too many files have changed in this diff Show More