From: Silke Meyer Date: Wed, 4 Oct 2017 19:28:35 +0000 (+0200) Subject: Merge remote-tracking branch 'upstream/develop' into develop X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=ab87f1215a28884c48fc89b130b8615e4e398702;hp=eadeb3ed21c0b6412de851da510b64aaa3c43aed;p=friendica.git Merge remote-tracking branch 'upstream/develop' into develop --- diff --git a/INSTALL.txt b/INSTALL.txt index 592d3f5557..4a88ac8417 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -37,7 +37,7 @@ local .htaccess file - PHP *command line* access with register_argc_argv set to true in the php.ini file [or see 'poormancron' in section 8] - - curl, gd (with at least jpeg support), mysql, mbstring and openssl extensions + - curl, gd (with at least jpeg support), mysql, mbstring, xml and openssl extensions - some form of email server or email gateway such that PHP mail() works diff --git a/boot.php b/boot.php index c3ad39cd57..32fee4f509 100644 --- a/boot.php +++ b/boot.php @@ -229,8 +229,9 @@ define('PROTOCOL_UNKNOWN', 0); define('PROTOCOL_DFRN', 1); define('PROTOCOL_DIASPORA', 2); define('PROTOCOL_OSTATUS_SALMON', 3); -define('PROTOCOL_OSTATUS_FEED', 4); -define('PROTOCOL_GS_CONVERSATION', 5); +define('PROTOCOL_OSTATUS_FEED', 4); // Deprecated +define('PROTOCOL_GS_CONVERSATION', 5); // Deprecated +define('PROTOCOL_SPLITTED_CONV', 6); /** @}*/ /** @@ -320,6 +321,8 @@ define ( 'NOTIFY_TAGSHARE', 0x0100 ); define ( 'NOTIFY_POKE', 0x0200 ); define ( 'NOTIFY_SHARE', 0x0400 ); +define ( 'SYSTEM_EMAIL', 0x4000 ); + define ( 'NOTIFY_SYSTEM', 0x8000 ); /* @}*/ @@ -391,6 +394,7 @@ define ( 'ACTIVITY_POST', NAMESPACE_ACTIVITY_SCHEMA . 'post' ); define ( 'ACTIVITY_UPDATE', NAMESPACE_ACTIVITY_SCHEMA . 'update' ); define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' ); define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' ); +define ( 'ACTIVITY_UNFAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'unfavorite' ); define ( 'ACTIVITY_SHARE', NAMESPACE_ACTIVITY_SCHEMA . 'share' ); define ( 'ACTIVITY_DELETE', NAMESPACE_ACTIVITY_SCHEMA . 'delete' ); diff --git a/doc/Install.md b/doc/Install.md index 06ae77352b..cda58fa6f7 100644 --- a/doc/Install.md +++ b/doc/Install.md @@ -28,7 +28,7 @@ Requirements * Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file * PHP 5.4+. * PHP *command line* access with register_argc_argv set to true in the php.ini file -* Curl, GD, PDO, MySQLi, hash and OpenSSL extensions +* Curl, GD, PDO, MySQLi, hash, xml and OpenSSL extensions * some form of email server or email gateway such that PHP mail() works * Mysql 5.5.3+ or an equivalant alternative for MySQL (MariaDB, Percona Server etc.) * the ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows) (Note: other options are presented in Section 7 of this document.) diff --git a/doc/de/Install.md b/doc/de/Install.md index 344117c56a..538641f1bd 100644 --- a/doc/de/Install.md +++ b/doc/de/Install.md @@ -24,7 +24,7 @@ Wir planen, diese Einschränkung in einer zukünftigen Version zu beheben. - Apache mit einer aktiverten mod-rewrite-Funktion und dem Eintrag "Options All", so dass du die lokale .htaccess-Datei nutzen kannst - PHP 5.2+. Je neuer, desto besser. Du benötigst 5.3 für die Authentifizierung untereinander. In einer Windows-Umgebung arbeitet die Version 5.2+ möglicherweise nicht, da die Funktion dns_get_record() erst ab Version 5.3 verfügbar ist. - PHP *Kommandozeilen*-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei - - Curl, GD, PDO, MySQLi und OpenSSL-Erweiterung + - Curl, GD, PDO, MySQLi, xml und OpenSSL-Erweiterung - etwas in der Art eines Email-Servers oder eines Gateways wie PHP mail() - Mysql 5.x - die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden] diff --git a/doc/htconfig.md b/doc/htconfig.md index aeb0c92022..dd7ab8047c 100644 --- a/doc/htconfig.md +++ b/doc/htconfig.md @@ -44,6 +44,7 @@ Example: To set the directory value please add this line to your .htconfig.php: * **dlogfile - location of the developer log file * **event_input_format** - Default value is "ymd". * **frontend_worker_timeout** - Value in minutes after we think that a frontend task was killed by the webserver. Default value is 10. +* **hsts** (Boolean) - Enables the sending of HTTP Strict Transport Security headers * **ignore_cache** (Boolean) - For development only. Disables the item cache. * **like_no_comment** (Boolean) - Don't update the "commented" value of an item when it is liked. * **local_block** (Boolean) - Used in conjunction with "block_public". diff --git a/include/Contact.php b/include/Contact.php index 7d480ab020..a4477c8cb3 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -9,27 +9,27 @@ use Friendica\Network\Probe; // authorisation to do this. function user_remove($uid) { - if(! $uid) + if (!$uid) { return; + } + logger('Removing user: ' . $uid); - $r = q("select * from user where uid = %d limit 1", intval($uid)); + $r = dba::select('user', array(), array('uid' => $uid), array("limit" => 1)); - call_hooks('remove_user',$r[0]); + call_hooks('remove_user',$r); // save username (actually the nickname as it is guaranteed // unique), so it cannot be re-registered in the future. - q("insert into userd ( username ) values ( '%s' )", - $r[0]['nickname'] - ); + dba::insert('userd', array('username' => $r['nickname'])); // The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php) q("UPDATE `user` SET `account_removed` = 1, `account_expires_on` = UTC_TIMESTAMP() WHERE `uid` = %d", intval($uid)); proc_run(PRIORITY_HIGH, "include/notifier.php", "removeme", $uid); // Send an update to the directory - proc_run(PRIORITY_LOW, "include/directory.php", $r[0]['url']); + proc_run(PRIORITY_LOW, "include/directory.php", $r['url']); if($uid == local_user()) { unset($_SESSION['authenticated']); @@ -206,6 +206,8 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) { return $cache[$url][$uid]; } + $ssl_url = str_replace('http://', 'https://', $url); + // Fetch contact data from the contact table for the given user $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self` @@ -213,6 +215,15 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) { normalise_link($url), $uid); $r = dba::inArray($s); + // Fetch contact data from the contact table for the given user, checking with the alias + if (!dbm::is_result($r)) { + $s = dba::p("SELECT `id`, `id` AS `cid`, 0 AS `gid`, 0 AS `zid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, + `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, `self` + FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = ?", + normalise_link($url), $url, $ssl_url, $uid); + $r = dba::inArray($s); + } + // Fetch the data from the contact table with "uid=0" (which is filled automatically) if (!dbm::is_result($r)) { $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, @@ -222,6 +233,15 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) { $r = dba::inArray($s); } + // Fetch the data from the contact table with "uid=0" (which is filled automatically) - checked with the alias + if (!dbm::is_result($r)) { + $s = dba::p("SELECT `id`, 0 AS `cid`, `id` AS `zid`, 0 AS `gid`, `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, `xmpp`, + `keywords`, `gender`, `photo`, `thumb`, `micro`, `forum`, `prv`, (`forum` | `prv`) AS `community`, `contact-type`, `bd` AS `birthday`, 0 AS `self` + FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = 0", + normalise_link($url), $url, $ssl_url); + $r = dba::inArray($s); + } + // Fetch the data from the gcontact table if (!dbm::is_result($r)) { $s = dba::p("SELECT 0 AS `id`, 0 AS `cid`, `id` AS `gid`, 0 AS `zid`, 0 AS `uid`, `url`, `nurl`, `alias`, `network`, `name`, `nick`, `addr`, `location`, `about`, '' AS `xmpp`, @@ -542,8 +562,10 @@ function get_contact($url, $uid = 0, $no_update = false) { // Then the alias (which could be anything) if (!dbm::is_result($contact)) { - $r = dba::p("SELECT `id`, `avatar-date` FROM `contact` WHERE `alias` IN (?, ?) AND `uid` = ? LIMIT 1", - $url, normalise_link($url), $uid); + // The link could be provided as http although we stored it as https + $ssl_url = str_replace('http://', 'https://', $url); + $r = dba::p("SELECT `id`, `avatar-date` FROM `contact` WHERE `alias` IN (?, ?, ?) AND `uid` = ? LIMIT 1", + $url, normalise_link($url), $ssl_url, $uid); $contact = dba::fetch($r); dba::close($r); } diff --git a/include/Photo.php b/include/Photo.php index f02ee130a0..78d448fbc2 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -628,92 +628,24 @@ class Photo { public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') { - $r = q("SELECT `guid` FROM `photo` WHERE `resource-id` = '%s' AND `guid` != '' LIMIT 1", - dbesc($rid) - ); + $r = dba::select('photo', array('guid'), array("`resource-id` = ? AND `guid` != ?", $rid, ''), array('limit' => 1)); if (dbm::is_result($r)) { - $guid = $r[0]['guid']; + $guid = $r['guid']; } else { $guid = get_guid(); } - $x = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `contact-id` = %d AND `scale` = %d LIMIT 1", - dbesc($rid), - intval($uid), - intval($cid), - intval($scale) - ); + $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1)); + + $fields = array('uid' => $uid, 'contact-id' => $cid, 'guid' => $guid, 'resource-id' => $rid, 'created' => datetime_convert(), 'edited' => datetime_convert(), + 'filename' => basename($filename), 'type' => $this->getType(), 'album' => $album, 'height' => $this->getHeight(), 'width' => $this->getWidth(), + 'datasize' => strlen($this->imageString()), 'data' => $this->imageString(), 'scale' => $scale, 'profile' => $profile, + 'allow_cid' => $allow_cid, 'allow_gid' => $allow_gid, 'deny_cid' => $deny_cid, 'deny_gid' => $deny_gid, 'desc' => $desc); + if (dbm::is_result($x)) { - $r = q("UPDATE `photo` - SET `uid` = %d, - `contact-id` = %d, - `guid` = '%s', - `resource-id` = '%s', - `created` = '%s', - `edited` = '%s', - `filename` = '%s', - `type` = '%s', - `album` = '%s', - `height` = %d, - `width` = %d, - `datasize` = %d, - `data` = '%s', - `scale` = %d, - `profile` = %d, - `allow_cid` = '%s', - `allow_gid` = '%s', - `deny_cid` = '%s', - `deny_gid` = '%s', - `desc` = '%s' - WHERE `id` = %d", - - intval($uid), - intval($cid), - dbesc($guid), - dbesc($rid), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(basename($filename)), - dbesc($this->getType()), - dbesc($album), - intval($this->getHeight()), - intval($this->getWidth()), - dbesc(strlen($this->imageString())), - dbesc($this->imageString()), - intval($scale), - intval($profile), - dbesc($allow_cid), - dbesc($allow_gid), - dbesc($deny_cid), - dbesc($deny_gid), - dbesc($desc), - intval($x[0]['id']) - ); + $r = dba::update('photo', $fields, array('id' => $x['id'])); } else { - $r = q("INSERT INTO `photo` - (`uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `datasize`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `desc`) - VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s')", - intval($uid), - intval($cid), - dbesc($guid), - dbesc($rid), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(basename($filename)), - dbesc($this->getType()), - dbesc($album), - intval($this->getHeight()), - intval($this->getWidth()), - dbesc(strlen($this->imageString())), - dbesc($this->imageString()), - intval($scale), - intval($profile), - dbesc($allow_cid), - dbesc($allow_gid), - dbesc($deny_cid), - dbesc($deny_gid), - dbesc($desc) - ); + $r = dba::insert('photo', $fields); } return $r; diff --git a/include/api.php b/include/api.php index e7c320e62d..45c9ed2554 100644 --- a/include/api.php +++ b/include/api.php @@ -2233,7 +2233,7 @@ $called_api = null; //don't send title to regular StatusNET requests to avoid confusing these apps if (x($_GET, 'getText')) { - $ret['title'] = $item['title'] ; + $ret['title'] = $item['title']; if ($_GET['getText'] == 'html') { $ret['text'] = bbcode($item['body'], false, false); } elseif ($_GET['getText'] == 'plain') { @@ -2276,18 +2276,32 @@ $called_api = null; $statushtml = trim(bbcode($body, false, false)); + // Workaround for clients with limited HTML parser functionality $search = array("
", "
", "
", "

", "

", "

", "

", "

", "

", "

", "

", "
", "
", "
", "
"); - $replace = array("
\n", "\n
", "
\n", - "\n

", "

\n", "\n

", "

\n", - "\n

", "

\n", "\n

", "

\n", - "\n
", "
\n", "\n
", "
\n"); + $replace = array("
", "
", "

", + "

", "


", "

", "


", + "

", "


", "

", "


", + "
", "

", "
", "

"); $statushtml = str_replace($search, $replace, $statushtml); if ($item['title'] != "") { - $statushtml = "

" . bbcode($item['title']) . "

\n" . $statushtml; + $statushtml = "

" . bbcode($item['title']) . "


" . $statushtml; + } + + do { + $oldtext = $statushtml; + $statushtml = str_replace("

", "
", $statushtml); + } while ($oldtext != $statushtml); + + if (substr($statushtml, 0, 4) == '
') { + $statushtml = substr($statushtml, 4); + } + + if (substr($statushtml, 0, -4) == '
') { + $statushtml = substr($statushtml, -4); } // feeds without body should contain the link diff --git a/include/bbcode.php b/include/bbcode.php index be4667a298..a14e3ee8e9 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -987,7 +987,8 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa // Server independent link to posts and comments // See issue: https://github.com/diaspora/diaspora_federation/issues/75 - $Text = preg_replace("=diaspora://(.*?)/([^\s\]]*)=ism", System::baseUrl()."/display/$2", $Text); + $expression = "=diaspora://.*?/post/([0-9A-Za-z\-_@.:]{15,254}[0-9A-Za-z])=ism"; + $Text = preg_replace($expression, System::baseUrl()."/display/$1", $Text); // if the HTML is used to generate plain text, then don't do this search, but replace all URL of that kind to text // if ($simplehtml != 7) { diff --git a/include/cron.php b/include/cron.php index ccac49b637..8b0fab77ab 100644 --- a/include/cron.php +++ b/include/cron.php @@ -42,12 +42,6 @@ function cron_run(&$argv, &$argc){ // Expire and remove user entries proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "expire_and_remove_users"); - // Check OStatus conversations - proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_mentions"); - - // Check every conversation - proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_conversations"); - // Call possible post update functions proc_run(PRIORITY_LOW, "include/cronjobs.php", "post_update"); diff --git a/include/cronjobs.php b/include/cronjobs.php index 53316e464f..437fedd53c 100644 --- a/include/cronjobs.php +++ b/include/cronjobs.php @@ -8,7 +8,6 @@ function cronjobs_run(&$argv, &$argc){ global $a; require_once 'include/datetime.php'; - require_once 'include/ostatus.php'; require_once 'include/post_update.php'; require_once 'mod/nodeinfo.php'; require_once 'include/photos.php'; @@ -22,19 +21,6 @@ function cronjobs_run(&$argv, &$argc){ logger("Starting cronjob ".$argv[1], LOGGER_DEBUG); - // Check OStatus conversations - // Check only conversations with mentions (for a longer time) - if ($argv[1] == 'ostatus_mentions') { - ostatus::check_conversations(true); - return; - } - - // Check every conversation - if ($argv[1] == 'ostatus_conversations') { - ostatus::check_conversations(false); - return; - } - // Call possible post update functions // see include/post_update.php for more details if ($argv[1] == 'post_update') { diff --git a/include/dba.php b/include/dba.php index c945228297..bc38029351 100644 --- a/include/dba.php +++ b/include/dba.php @@ -7,11 +7,6 @@ require_once('include/datetime.php'); /** * @class MySQL database class * - * For debugging, insert 'dbg(1);' anywhere in the program flow. - * dbg(0); will turn it off. Logging is performed at LOGGER_DATA level. - * When logging, all binary info is converted to text and html entities are escaped so that - * the debugging stream is safe to view within both terminals and web pages. - * * This class is for the low level database stuff that does driver specific things. */ @@ -214,175 +209,32 @@ class dba { } } - public function q($sql, $onlyquery = false) { - $a = get_app(); - - if (!$this->db || !$this->connected) { - return false; - } - - $this->error = ''; - - $connstr = ($this->connected() ? "Connected" : "Disonnected"); - - $stamp1 = microtime(true); - - $orig_sql = $sql; - - if (x($a->config,'system') && x($a->config['system'], 'db_callstack')) { - $sql = "/*".System::callstack()." */ ".$sql; - } - - $columns = 0; - - switch ($this->driver) { - case 'pdo': - $result = @$this->db->query($sql); - // Is used to separate between queries that returning data - or not - if (!is_bool($result)) { - $columns = $result->columnCount(); - } - break; - case 'mysqli': - $result = @$this->db->query($sql); - break; - case 'mysql': - $result = @mysql_query($sql,$this->db); - break; - } - $stamp2 = microtime(true); - $duration = (float)($stamp2 - $stamp1); - - $a->save_timestamp($stamp1, "database"); - - if (strtolower(substr($orig_sql, 0, 6)) != "select") { - $a->save_timestamp($stamp1, "database_write"); - } - if (x($a->config,'system') && x($a->config['system'],'db_log')) { - if (($duration > $a->config["system"]["db_loglimit"])) { - $duration = round($duration, 3); - $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t". - basename($backtrace[1]["file"])."\t". - $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t". - substr($sql, 0, 2000)."\n", FILE_APPEND); - } - } - - switch ($this->driver) { - case 'pdo': - $errorInfo = $this->db->errorInfo(); - if ($errorInfo) { - $this->error = $errorInfo[2]; - $this->errorno = $errorInfo[1]; - } - break; - case 'mysqli': - if ($this->db->errno) { - $this->error = $this->db->error; - $this->errorno = $this->db->errno; - } - break; - case 'mysql': - if (mysql_errno($this->db)) { - $this->error = mysql_error($this->db); - $this->errorno = mysql_errno($this->db); - } - break; - } - if (strlen($this->error)) { - logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error); - } - - if ($this->debug) { - - $mesg = ''; - - if ($result === false) { - $mesg = 'false'; - } elseif ($result === true) { - $mesg = 'true'; - } else { - switch ($this->driver) { - case 'pdo': - $mesg = $result->rowCount().' results'.EOL; - break; - case 'mysqli': - $mesg = $result->num_rows.' results'.EOL; - break; - case 'mysql': - $mesg = mysql_num_rows($result).' results'.EOL; - break; - } - } - - $str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg - . (($this->error) ? ' error: ' . $this->error : '') - . EOL; - - logger('dba: ' . $str ); - } - - /** - * If dbfail.out exists, we will write any failed calls directly to it, - * regardless of any logging that may or may nor be in effect. - * These usually indicate SQL syntax errors that need to be resolved. - */ + /** + * @brief execute SQL query - deprecated + * + * Please use the dba:: functions instead: + * dba::select, dba::exists, dba::insert + * dba::delete, dba::update, dba::p, dba::e + * + * @param string $sql SQL query + * @return array Query array + */ + public function q($sql) { + $ret = self::p($sql); - if ($result === false) { - logger('dba: ' . printable($sql) . ' returned false.' . "\n" . $this->error); - if (file_exists('dbfail.out')) { - file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND); - } + if (is_bool($ret)) { + return $ret; } - if (is_bool($result)) { - return $result; - } - if ($onlyquery) { - $this->result = $result; - return true; - } + $columns = self::columnCount($ret); - $r = array(); - switch ($this->driver) { - case 'pdo': - while ($x = $result->fetch(PDO::FETCH_ASSOC)) { - $r[] = $x; - } - $result->closeCursor(); - break; - case 'mysqli': - while ($x = $result->fetch_array(MYSQLI_ASSOC)) { - $r[] = $x; - } - $result->free_result(); - break; - case 'mysql': - while ($x = mysql_fetch_array($result, MYSQL_ASSOC)) { - $r[] = $x; - } - mysql_free_result($result); - break; - } + $data = self::inArray($ret); - // PDO doesn't return "true" on successful operations - like mysqli does - // Emulate this behaviour by checking if the query returned data and had columns - // This should be reliable enough - if (($this->driver == 'pdo') && (count($r) == 0) && ($columns == 0)) { + if ((count($data) == 0) && ($columns == 0)) { return true; } - //$a->save_timestamp($stamp1, "database"); - - if ($this->debug) { - logger('dba: ' . printable(print_r($r, true))); - } - return($r); - } - - public function dbg($dbg) { - $this->debug = $dbg; + return $data; } public function escape($str) { @@ -515,6 +367,10 @@ class dba { /** * @brief Executes a prepared statement that returns data * @usage Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid); + * + * Please only use it with complicated queries. + * For all regular queries please use dba::select or dba::exists + * * @param string $sql SQL statement * @return object statement object */ @@ -540,7 +396,7 @@ class dba { return false; } - if (substr_count($sql, '?') != count($args)) { + if ((substr_count($sql, '?') != count($args)) && (count($args) > 0)) { // Question: Should we continue or stop the query here? logger('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG); } @@ -572,6 +428,19 @@ class dba { switch (self::$dbo->driver) { case 'pdo': + // If there are no arguments we use "query" + if (count($args) == 0) { + if (!$retval = self::$dbo->db->query($sql)) { + $errorInfo = self::$dbo->db->errorInfo(); + self::$dbo->error = $errorInfo[2]; + self::$dbo->errorno = $errorInfo[1]; + $retval = false; + break; + } + self::$dbo->affected_rows = $retval->rowCount(); + break; + } + if (!$stmt = self::$dbo->db->prepare($sql)) { $errorInfo = self::$dbo->db->errorInfo(); self::$dbo->error = $errorInfo[2]; @@ -600,8 +469,8 @@ class dba { $command = strtolower($parts[0]); $can_be_prepared = in_array($command, array('select', 'update', 'insert', 'delete')); - // The fallback routine currently only works with statements that doesn't return values - if (!$can_be_prepared && $called_from_e) { + // The fallback routine is called as well when there are no arguments + if (!$can_be_prepared || (count($args) == 0)) { $retval = self::$dbo->db->query(self::replace_parameters($sql, $args)); if (self::$dbo->db->errno) { self::$dbo->error = self::$dbo->db->error; @@ -710,6 +579,8 @@ class dba { /** * @brief Executes a prepared statement like UPDATE or INSERT that doesn't return data * + * Please use dba::delete, dba::insert, dba::update, ... instead + * * @param string $sql SQL statement * @return boolean Was the query successfull? False is returned only if an error occurred */ @@ -792,6 +663,8 @@ class dba { /** * @brief Fetches the first row * + * Please use dba::select or dba::exists whenever this is possible. + * * @param string $sql SQL statement * @return array first row of query */ @@ -820,6 +693,26 @@ class dba { return self::$dbo->affected_rows; } + /** + * @brief Returns the number of columns of a statement + * + * @param object Statement object + * @return int Number of columns + */ + public static function columnCount($stmt) { + if (!is_object($stmt)) { + return 0; + } + switch (self::$dbo->driver) { + case 'pdo': + return $stmt->columnCount(); + case 'mysqli': + return $stmt->field_count; + case 'mysql': + return mysql_affected_rows($stmt); + } + return 0; + } /** * @brief Returns the number of rows of a statement * @@ -856,6 +749,10 @@ class dba { case 'pdo': return $stmt->fetch(PDO::FETCH_ASSOC); case 'mysqli': + if (get_class($stmt) == 'mysqli_result') { + return $stmt->fetch_assoc(); + } + // This code works, but is slow // Bind the result to a result array @@ -1019,13 +916,13 @@ class dba { $definition = db_definition(); foreach ($definition AS $table => $structure) { - foreach ($structure['fields'] AS $field => $field_struct) { - if (isset($field_struct['relation'])) { - foreach ($field_struct['relation'] AS $rel_table => $rel_field) { - self::$relation[$rel_table][$rel_field][$table][] = $field; - } - } - } + foreach ($structure['fields'] AS $field => $field_struct) { + if (isset($field_struct['relation'])) { + foreach ($field_struct['relation'] AS $rel_table => $rel_field) { + self::$relation[$rel_table][$rel_field][$table][] = $field; + } + } + } } } @@ -1271,7 +1168,11 @@ class dba { * Example: * $table = "item"; * $fields = array("id", "uri", "uid", "network"); + * * $condition = array("uid" => 1, "network" => 'dspr'); + * or: + * $condition = array("`uid` = ? AND `network` IN (?, ?)", 1, 'dfrn', 'dspr'); + * * $params = array("order" => array("id", "received" => true), "limit" => 1); * * $data = dba::select($table, $fields, $condition, $params); @@ -1381,24 +1282,6 @@ class dba { } } -function printable($s) { - $s = preg_replace("~([\x01-\x08\x0E-\x0F\x10-\x1F\x7F-\xFF])~",".", $s); - $s = str_replace("\x00",'.',$s); - if (x($_SERVER,'SERVER_NAME')) { - $s = escape_tags($s); - } - return $s; -} - -// Procedural functions -function dbg($state) { - global $db; - - if ($db) { - $db->dbg($state); - } -} - function dbesc($str) { global $db; @@ -1409,107 +1292,46 @@ function dbesc($str) { } } -// Function: q($sql,$args); -// Description: execute SQL query with printf style args. -// Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d", -// 'user', 1); -function q($sql) { - global $db; - $args = func_get_args(); - unset($args[0]); - - if ($db && $db->connected) { - $sql = $db->clean_query($sql); - $sql = $db->any_value_fallback($sql); - $stmt = @vsprintf($sql,$args); // Disabled warnings - //logger("dba: q: $stmt", LOGGER_ALL); - if ($stmt === false) - logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); - - $db->log_index($stmt); - - return $db->q($stmt); - } - - /** - * - * This will happen occasionally trying to store the - * session data after abnormal program termination - * - */ - logger('dba: no database: ' . print_r($args,true)); - return false; -} - /** - * @brief Performs a query with "dirty reads" + * @brief execute SQL query with printf style args - deprecated * - * By doing dirty reads (reading uncommitted data) no locks are performed - * This function can be used to fetch data that doesn't need to be reliable. + * Please use the dba:: functions instead: + * dba::select, dba::exists, dba::insert + * dba::delete, dba::update, dba::p, dba::e * * @param $args Query parameters (1 to N parameters of different types) * @return array Query array */ -function qu($sql) { +function q($sql) { global $db; $args = func_get_args(); unset($args[0]); - if ($db && $db->connected) { - $sql = $db->clean_query($sql); - $sql = $db->any_value_fallback($sql); - $stmt = @vsprintf($sql,$args); // Disabled warnings - if ($stmt === false) - logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); - - $db->log_index($stmt); - - $db->q("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;"); - $retval = $db->q($stmt); - $db->q("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;"); - return $retval; + if (!$db || !$db->connected) { + return false; } - /** - * - * This will happen occasionally trying to store the - * session data after abnormal program termination - * - */ - logger('dba: no database: ' . print_r($args,true)); - return false; -} + $sql = $db->clean_query($sql); + $sql = $db->any_value_fallback($sql); -/** - * - * Raw db query, no arguments - * - */ -function dbq($sql) { - global $db; + $stmt = @vsprintf($sql, $args); - if ($db && $db->connected) { - $ret = $db->q($sql); - } else { - $ret = false; + $ret = dba::p($stmt); + + if (is_bool($ret)) { + return $ret; } - return $ret; -} -// Caller is responsible for ensuring that any integer arguments to -// dbesc_array are actually integers and not malformed strings containing -// SQL injection vectors. All integer array elements should be specifically -// cast to int to avoid trouble. -function dbesc_array_cb(&$item, $key) { - if (is_string($item)) - $item = dbesc($item); -} + $columns = dba::columnCount($ret); + + $data = dba::inArray($ret); -function dbesc_array(&$arr) { - if (is_array($arr) && count($arr)) { - array_walk($arr,'dbesc_array_cb'); + if ((count($data) == 0) && ($columns == 0)) { + return true; } + + return $data; } function dba_timer() { diff --git a/include/dbstructure.php b/include/dbstructure.php index a2599fc392..4d615a2f14 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -31,7 +31,7 @@ function convert_to_innodb() { $sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME'])); echo $sql."\n"; - $result = $db->q($sql); + $result = dba::e($sql); if (!dbm::is_result($result)) { print_update_error($db, $sql); } @@ -74,7 +74,7 @@ function update_fail($update_id, $error_message) { $body = sprintf($body, $error_message); notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $admin['email'], 'preamble' => $preamble, 'body' => $body, @@ -442,9 +442,9 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { // Ensure index conversion to unique removes duplicates if ($is_unique) { if ($ignore != "") { - $db->q("SET session old_alter_table=1;"); + dba::e("SET session old_alter_table=1;"); } else { - $r = $db->q("CREATE TABLE `".$temp_name."` LIKE `".$name."`;"); + $r = dba::e("CREATE TABLE `".$temp_name."` LIKE `".$name."`;"); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); return $errors; @@ -452,25 +452,25 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { } } - $r = @$db->q($sql3); + $r = @dba::e($sql3); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); } if ($is_unique) { if ($ignore != "") { - $db->q("SET session old_alter_table=0;"); + dba::e("SET session old_alter_table=0;"); } else { - $r = $db->q("INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";"); + $r = dba::e("INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";"); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); return $errors; } - $r = $db->q("DROP TABLE `".$name."`;"); + $r = dba::e("DROP TABLE `".$name."`;"); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); return $errors; } - $r = $db->q("RENAME TABLE `".$temp_name."` TO `".$name."`;"); + $r = dba::e("RENAME TABLE `".$temp_name."` TO `".$name."`;"); if (!dbm::is_result($r)) { $errors .= print_update_error($db, $sql3); return $errors; @@ -551,7 +551,7 @@ function db_create_table($name, $fields, $verbose, $action, $indexes=null) { echo $sql.";\n"; if ($action) - $r = @$db->q($sql); + $r = @dba::e($sql); return $r; } diff --git a/include/dfrn.php b/include/dfrn.php index 4c8f828af6..9a821a9d91 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -303,7 +303,7 @@ class dfrn { AND (NOT `contact`.`blocked` OR `contact`.`pending`) LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `item`.`id` = %d AND `item`.`visible` AND NOT `item`.`moderated` AND `item`.`parent` != 0 - AND `item`.`wall` AND NOT `item`.`private`", + AND NOT `item`.`private`", intval($item_id) ); @@ -330,12 +330,9 @@ class dfrn { $alternatelink = $owner['url']; - $root = self::add_header($doc, $owner, 'dfrn:owner', $alternatelink, true); - $type = 'html'; - $entry = self::entry($doc, $type, $item, $owner, true); - $root->appendChild($entry); + $root = self::entry($doc, $type, $item, $owner, true, 0, true); $atom = trim($doc->saveXML()); return $atom; @@ -823,11 +820,12 @@ class dfrn { * @param array $owner Owner record * @param bool $comment Trigger the sending of the "comment" element * @param int $cid Contact ID of the recipient + * @param bool $single If set, the entry is created as an XML document with a single "entry" element * * @return object XML entry object * @todo Add type-hints */ - private static function entry($doc, $type, $item, $owner, $comment = false, $cid = 0) { + private static function entry($doc, $type, $item, $owner, $comment = false, $cid = 0, $single = false) { $mentioned = array(); @@ -840,7 +838,22 @@ class dfrn { return xml::create_element($doc, "at:deleted-entry", "", $attributes); } - $entry = $doc->createElement("entry"); + if (!$single) { + $entry = $doc->createElement("entry"); + } else { + $entry = $doc->createElementNS(NAMESPACE_ATOM1, 'entry'); + $doc->appendChild($entry); + + $entry->setAttribute("xmlns:thr", NAMESPACE_THREAD); + $entry->setAttribute("xmlns:at", NAMESPACE_TOMB); + $entry->setAttribute("xmlns:media", NAMESPACE_MEDIA); + $entry->setAttribute("xmlns:dfrn", NAMESPACE_DFRN); + $entry->setAttribute("xmlns:activity", NAMESPACE_ACTIVITY); + $entry->setAttribute("xmlns:georss", NAMESPACE_GEORSS); + $entry->setAttribute("xmlns:poco", NAMESPACE_POCO); + $entry->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS); + $entry->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET); + } if ($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid']) { $body = fix_private_photos($item['body'],$owner['uid'],$item,$cid); @@ -868,10 +881,10 @@ class dfrn { $entry->appendChild($dfrnowner); if (($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) { - $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"])); $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); + $parent = q("SELECT `guid`,`plink` FROM `item` WHERE `uri` = '%s' AND `uid` = %d", dbesc($parent_item), intval($item['uid'])); $attributes = array("ref" => $parent_item, "type" => "text/html", - "href" => System::baseUrl().'/display/'.$parent[0]['guid'], + "href" => $parent[0]['plink'], "dfrn:diaspora_guid" => $parent[0]['guid']); xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes); } @@ -1656,9 +1669,7 @@ class dfrn { $msg["seen"] = 0; $msg["replied"] = 0; - dbm::esc_array($msg, true); - - $r = dbq("INSERT INTO `mail` (`".implode("`, `", array_keys($msg))."`) VALUES (".implode(", ", array_values($msg)).")"); + dba::insert('mail', $msg); // send notifications. /// @TODO Arange this mess diff --git a/include/diaspora.php b/include/diaspora.php index 1907c0d5ad..63958f30bf 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -1013,7 +1013,8 @@ class Diaspora { * @param array $item The item array */ private static function fetch_guid($item) { - preg_replace_callback("=diaspora://.*?/([^\s\]]*)=ism", + $expression = "=diaspora://.*?/post/([0-9A-Za-z\-_@.:]{15,254}[0-9A-Za-z])=ism"; + preg_replace_callback($expression, function ($match) use ($item) { return self::fetch_guid_sub($match, $item); }, $item["body"]); @@ -1182,7 +1183,7 @@ class Diaspora { * @return array the item record */ private static function parent_item($uid, $guid, $author, $contact) { - $r = q("SELECT `id`, `body`, `wall`, `uri`, `private`, `origin`, + $r = q("SELECT `id`, `parent`, `body`, `wall`, `uri`, `private`, `origin`, `author-name`, `author-link`, `author-avatar`, `owner-name`, `owner-link`, `owner-avatar` FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", @@ -1776,8 +1777,16 @@ class Diaspora { logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG); } + // like on comments have the comment as parent. So we need to fetch the toplevel parent + if ($parent_item["id"] != $parent_item["parent"]) { + $toplevel = dba::select('item', array('origin'), array('id' => $parent_item["parent"]), array('limit' => 1)); + $origin = $toplevel["origin"]; + } else { + $origin = $parent_item["origin"]; + } + // If we are the origin of the parent we store the original data and notify our followers - if ($message_id && $parent_item["origin"]) { + if ($message_id && $origin) { // Formerly we stored the signed text, the signature and the author in different fields. // We now store the raw data so that we are more flexible. @@ -3517,7 +3526,14 @@ class Diaspora { $itemaddr = self::handle_from_contact($item["contact-id"], $item["gcontact-id"]); $msg_type = "retraction"; - $target_type = "Post"; + + if ($item['id'] == $item['parent']) { + $target_type = "Post"; + } elseif ($item["verb"] == ACTIVITY_LIKE) { + $target_type = "Like"; + } else { + $target_type = "Comment"; + } $message = array("author" => $itemaddr, "target_guid" => $item['guid'], diff --git a/include/enotify.php b/include/enotify.php index 62328c01fd..10723fb418 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -46,12 +46,14 @@ function notification($params) { if (empty($sender_email)) $sender_email = t('noreply').'@'.$hostname; - $user = dba::select('user', array('nickname', 'page-flags'), + if ($params['type'] != SYSTEM_EMAIL) { + $user = dba::select('user', array('nickname', 'page-flags'), array('uid' => $params['uid']), array('limit' => 1)); - // There is no need to create notifications for forum accounts - if (!dbm::is_result($user) || in_array($user["page-flags"], array(PAGE_COMMUNITY, PAGE_PRVGROUP))) { - return; + // There is no need to create notifications for forum accounts + if (!dbm::is_result($user) || in_array($user["page-flags"], array(PAGE_COMMUNITY, PAGE_PRVGROUP))) { + return; + } } $nickname = $user["nickname"]; @@ -366,7 +368,7 @@ function notification($params) { } } - if ($params['type'] == "SYSTEM_EMAIL") { + if ($params['type'] == SYSTEM_EMAIL) { // not part of the notifications. // it just send a mail to the user. // It will be used by the system to send emails to users (like @@ -517,7 +519,7 @@ function notification($params) { // send email notification if notification preferences permit if ((intval($params['notify_flags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM - || $params['type'] == "SYSTEM_EMAIL") { + || $params['type'] == SYSTEM_EMAIL) { logger('sending notification email'); @@ -586,8 +588,8 @@ function notification($params) { call_hooks('enotify_mail', $datarray); // check whether sending post content in email notifications is allowed - // always true for "SYSTEM_EMAIL" - $content_allowed = ((!get_config('system', 'enotify_no_content')) || ($params['type'] == "SYSTEM_EMAIL")); + // always true for SYSTEM_EMAIL + $content_allowed = ((!get_config('system', 'enotify_no_content')) || ($params['type'] == SYSTEM_EMAIL)); // load the template for private message notifications $tpl = get_markup_template('email_notify_html.tpl'); diff --git a/include/items.php b/include/items.php index eb9f44c3eb..4b61641627 100644 --- a/include/items.php +++ b/include/items.php @@ -534,6 +534,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f } // Converting the plink + /// @todo Check if this is really still needed if ($arr['network'] == NETWORK_OSTATUS) { if (isset($arr['plink'])) { $arr['plink'] = ostatus::convert_href($arr['plink']); @@ -954,7 +955,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f * An unique index would help - but the limitations of MySQL (maximum size of index values) prevent this. */ if ($arr["uid"] == 0) { - $r = qu("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = 0 LIMIT 1", dbesc(trim($arr['uri']))); + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = 0 LIMIT 1", dbesc(trim($arr['uri']))); if (dbm::is_result($r)) { logger('Global item already stored. URI: '.$arr['uri'].' on network '.$arr['network'], LOGGER_DEBUG); return 0; @@ -1595,9 +1596,6 @@ function item_is_remote_self($contact, &$datarray) { $datarray['author-link'] = $datarray['owner-link']; $datarray['author-avatar'] = $datarray['owner-avatar']; - // Trigger automatic reactions for addons - $datarray['api_source'] = true; - unset($datarray['created']); unset($datarray['edited']); } @@ -1623,6 +1621,13 @@ function item_is_remote_self($contact, &$datarray) { $datarray["app"] = "Feed"; } + // Trigger automatic reactions for addons + $datarray['api_source'] = true; + + // We have to tell the hooks who we are - this really should be improved + $_SESSION["authenticated"] = true; + $_SESSION["uid"] = $contact['uid']; + return true; } diff --git a/include/message.php b/include/message.php index 6800663b5c..d6b1601110 100644 --- a/include/message.php +++ b/include/message.php @@ -60,22 +60,14 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){ $handles = $recip_handle . ';' . $sender_handle; - $r = q("insert into conv (uid,guid,creator,created,updated,subject,recips) values(%d, '%s', '%s', '%s', '%s', '%s', '%s') ", - intval(local_user()), - dbesc($conv_guid), - dbesc($sender_handle), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($subject), - dbesc($handles) - ); + $fields = array('uid' => local_user(), 'guid' => $conv_guid, 'creator' => $sender_handle, + 'created' => datetime_convert(), 'updated' => datetime_convert(), + 'subject' => $subject, 'recips' => $handles); + $r = dba::insert('conv', $fields); - $r = q("select * from conv where guid = '%s' and uid = %d limit 1", - dbesc($conv_guid), - intval(local_user()) - ); + $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => local_user()), array('limit' => 1)); if (dbm::is_result($r)) - $convid = $r[0]['id']; + $convid = $r['id']; } if (! $convid) { @@ -194,28 +186,18 @@ function send_wallmessage($recipient='', $body='', $subject='', $replyto=''){ $handles = $recip_handle . ';' . $sender_handle; - $r = q("INSERT INTO `conv` (`uid`,`guid`,`creator`,`created`,`updated`,`subject`,`recips`) values(%d, '%s', '%s', '%s', '%s', '%s', '%s') ", - intval($recipient['uid']), - dbesc($conv_guid), - dbesc($sender_handle), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($subject), - dbesc($handles) - ); - - $r = q("SELECT * FROM `conv` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1", - dbesc($conv_guid), - intval($recipient['uid']) - ); - + $fields = array('uid' => $recipient['uid'], 'guid' => $conv_guid, 'creator' => $sender_handle, + 'created' => datetime_convert(), 'updated' => datetime_convert(), + 'subject' => $subject, 'recips' => $handles); + $r = dba::insert('conv', $fields); - if (! dbm::is_result($r)) { + $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => $recipient['uid']), array('limit' => 1)); + if (!dbm::is_result($r)) { logger('send message: conversation not found.'); return -4; } - $convid = $r[0]['id']; + $convid = $r['id']; $r = q("INSERT INTO `mail` ( `uid`, `guid`, `convid`, `from-name`, `from-photo`, `from-url`, `contact-id`, `title`, `body`, `seen`, `reply`, `replied`, `uri`, `parent-uri`, `created`, `unknown`) diff --git a/include/ostatus.php b/include/ostatus.php index 809a48cd02..19392b9173 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -7,6 +7,7 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Network\Probe; +use Friendica\Util\Lock; require_once 'include/Contact.php'; require_once 'include/threads.php'; @@ -29,15 +30,15 @@ require_once 'include/cache.php'; * */ class ostatus { - const OSTATUS_DEFAULT_POLL_INTERVAL = 30; // given in minutes - const OSTATUS_DEFAULT_POLL_TIMEFRAME = 1440; // given in minutes - const OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS = 14400; // given in minutes + + private static $itemlist; + private static $conv_list = array(); /** * @brief Fetches author data * * @param object $xpath The xpath object - * @param object $context The xml context of the author detals + * @param object $context The xml context of the author details * @param array $importer user record of the importing user * @param array $contact Called by reference, will contain the fetched contact * @param bool $onlyfetch Only fetch the header without updating the contact entries @@ -64,28 +65,34 @@ class ostatus { $author["contact-id"] = $contact["id"]; + $found = false; + if ($author["author-link"] != "") { if ($aliaslink == "") { $aliaslink = $author["author-link"]; } - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'", - intval($importer["uid"]), dbesc(normalise_link($author["author-link"])), - dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET)); + $condition = array("`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"], + normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET); + $r = dba::select('contact', array(), $condition, array('limit' => 1)); if (dbm::is_result($r)) { - $contact = $r[0]; - $author["contact-id"] = $r[0]["id"]; - $author["author-link"] = $r[0]["url"]; + $found = true; + $contact = $r; + $author["contact-id"] = $r["id"]; + $author["author-link"] = $r["url"]; } - } elseif ($addr != "") { - // Should not happen - $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `uid` = ? AND `addr` = ? AND `network` != ?", + } + + if (!$found && ($addr != "")) { + $condition = array("`uid` = ? AND `addr` = ? AND `network` != ?", $importer["uid"], $addr, NETWORK_STATUSNET); + $r = dba::select('contact', array(), $condition, array('limit' => 1)); - if (dbm::is_result($contact)) { - $author["contact-id"] = $contact["id"]; - $author["author-link"] = $contact["url"]; + if (dbm::is_result($r)) { + $contact = $r; + $author["contact-id"] = $r["id"]; + $author["author-link"] = $r["url"]; } } @@ -176,14 +183,16 @@ class ostatus { $cid = get_contact($author["author-link"], 0); if ($cid) { + $fields = array('url', 'name', 'nick', 'alias', 'about', 'location'); + $old_contact = dba::select('contact', $fields, array('id' => $cid), array('limit' => 1)); + // Update it with the current values - q("UPDATE `contact` SET `url` = '%s', `name` = '%s', `nick` = '%s', `alias` = '%s', - `about` = '%s', `location` = '%s', - `success_update` = '%s', `last-update` = '%s' - WHERE `id` = %d", - dbesc($author["author-link"]), dbesc($contact["name"]), dbesc($contact["nick"]), - dbesc($contact["alias"]), dbesc($contact["about"]), dbesc($contact["location"]), - dbesc(datetime_convert()), dbesc(datetime_convert()), intval($cid)); + $fields = array('url' => $author["author-link"], 'name' => $contact["name"], + 'nick' => $contact["nick"], 'alias' => $contact["alias"], + 'about' => $contact["about"], 'location' => $contact["location"], + 'success_update' => datetime_convert(), 'last-update' => datetime_convert()); + + dba::update('contact', $fields, array('id' => $cid), $old_contact); // Update the avatar update_contact_avatar($author["author-avatar"], 0, $cid); @@ -257,20 +266,36 @@ class ostatus { * * @param string $xml The XML * @param array $importer user record of the importing user - * @param $contact - * @param array $hub Called by reference, returns the fetched hub data + * @param array $contact + * @param string $hub Called by reference, returns the fetched hub data + */ + public static function import($xml, $importer, &$contact, &$hub) { + self::process($xml, $importer, $contact, $hub); + } + + /** + * @brief Internal feed processing + * + * @param string $xml The XML + * @param array $importer user record of the importing user + * @param array $contact + * @param string $hub Called by reference, returns the fetched hub data + * @param boolean $stored Is the post fresh imported or from the database? + * @param boolean $initialize Is it the leading post so that data has to be initialized? + * + * @return boolean Could the XML be processed? */ - public static function import($xml,$importer,&$contact, &$hub) { - /// @todo this function is too long. It has to be split in many parts + private static function process($xml, $importer, &$contact, &$hub, $stored = false, $initialize = true) { + if ($initialize) { + self::$itemlist = array(); + self::$conv_list = array(); + } logger("Import OStatus message", LOGGER_DEBUG); if ($xml == "") { - return; + return false; } - //$tempfile = tempnam(get_temppath(), "import"); - //file_put_contents($tempfile, $xml); - $doc = new DOMDocument(); @$doc->loadXML($xml); @@ -284,7 +309,7 @@ class ostatus { $xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS); $xpath->registerNamespace('statusnet', NAMESPACE_STATUSNET); - $gub = ""; + $hub = ""; $hub_attributes = $xpath->query("/atom:feed/atom:link[@rel='hub']")->item(0)->attributes; if (is_object($hub_attributes)) { foreach ($hub_attributes AS $hub_attribute) { @@ -294,6 +319,7 @@ class ostatus { } } } + $header = array(); $header["uid"] = $importer["uid"]; $header["network"] = NETWORK_OSTATUS; @@ -302,20 +328,33 @@ class ostatus { $header["origin"] = 0; $header["gravity"] = GRAVITY_PARENT; - // it could either be a received post or a post we fetched by ourselves - // depending on that, the first node is different $first_child = $doc->firstChild->tagName; if ($first_child == "feed") { $entries = $xpath->query('/atom:feed/atom:entry'); - $header["protocol"] = PROTOCOL_OSTATUS_FEED; } else { $entries = $xpath->query('/atom:entry'); + } + + if ($entries->length == 1) { + // We reformat the XML to make it better readable + $doc2 = new DOMDocument(); + $doc2->loadXML($xml); + $doc2->preserveWhiteSpace = false; + $doc2->formatOutput = true; + $xml2 = $doc2->saveXML(); + $header["protocol"] = PROTOCOL_OSTATUS_SALMON; + $header["source"] = $xml2; + } elseif (!$initialize) { + return false; } - $conversation = ""; - $conversationlist = array(); - $item_id = 0; + + // Fetch the first author + $authordata = $xpath->query('//author')->item(0); + $author = self::fetchauthor($xpath, $authordata, $importer, $contact, $stored); + + $entry = $xpath->query('/atom:entry'); // Reverse the order of the entries $entrylist = array(); @@ -323,64 +362,56 @@ class ostatus { foreach ($entries AS $entry) { $entrylist[] = $entry; } - foreach (array_reverse($entrylist) AS $entry) { - - $mention = false; + foreach (array_reverse($entrylist) AS $entry) { // fetch the author - if ($first_child == "feed") { - $author = self::fetchauthor($xpath, $doc->firstChild, $importer, $contact, false); - } else { - $author = self::fetchauthor($xpath, $entry, $importer, $contact, false); + $authorelement = $xpath->query('/atom:entry/atom:author', $entry); + if ($authorelement->length > 0) { + $author = self::fetchauthor($xpath, $entry, $importer, $contact, $stored); } - $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $context)->item(0)->nodeValue; + + $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $entry)->item(0)->nodeValue; if ($value != "") { $nickname = $value; } else { $nickname = $author["author-name"]; } + $item = array_merge($header, $author); - // Now get the item $item["uri"] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue; - $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'", - intval($importer["uid"]), dbesc($item["uri"])); - if (dbm::is_result($r)) { - logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); - continue; - } - - $item["body"] = add_page_info_to_body(html2bbcode($xpath->query('atom:content/text()', $entry)->item(0)->nodeValue)); - $item["object-type"] = $xpath->query('activity:object-type/text()', $entry)->item(0)->nodeValue; $item["verb"] = $xpath->query('activity:verb/text()', $entry)->item(0)->nodeValue; - // Mastodon Content Warning - if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) { - $clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; - - $item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]'; + // Delete a message + if (in_array($item["verb"], array('qvitter-delete-notice', ACTIVITY_DELETE, 'delete'))) { + self::deleteNotice($item); + continue; } - if (($item["object-type"] == ACTIVITY_OBJ_BOOKMARK) || ($item["object-type"] == ACTIVITY_OBJ_EVENT)) { - $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; - $item["body"] = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; - } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) { - $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; + if (in_array($item["verb"], array(NAMESPACE_OSTATUS."/unfavorite", ACTIVITY_UNFAVORITE))) { + // Ignore "Unfavorite" message + logger("Ignore unfavorite message ".print_r($item, true), LOGGER_DEBUG); + continue; } - $item["source"] = $xml; - /// @TODO - /// Delete a message - if ($item["verb"] == "qvitter-delete-notice" || $item["verb"] == ACTIVITY_DELETE) { - // ignore "Delete" messages (by now) - logger("Ignore delete message ".print_r($item, true)); + // Deletions come with the same uri, so we check for duplicates after processing deletions + if (dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item["uri"]))) { + logger('Post with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG); continue; + } else { + logger('Processing post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG); } if ($item["verb"] == ACTIVITY_JOIN) { // ignore "Join" messages - logger("Ignore join message ".print_r($item, true)); + logger("Ignore join message ".print_r($item, true), LOGGER_DEBUG); + continue; + } + + if ($item["verb"] == "http://mastodon.social/schema/1.0/block") { + // ignore mastodon "block" messages + logger("Ignore block message ".print_r($item, true), LOGGER_DEBUG); continue; } @@ -403,958 +434,661 @@ class ostatus { $item["gravity"] = GRAVITY_LIKE; } - if ($item["verb"] == NAMESPACE_OSTATUS."/unfavorite") { - // Ignore "Unfavorite" message - logger("Ignore unfavorite message ".print_r($item, true)); - continue; - } - // http://activitystrea.ms/schema/1.0/rsvp-yes if (!in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_LIKE, ACTIVITY_SHARE))) { - logger("Unhandled verb ".$item["verb"]." ".print_r($item, true)); - } - $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; - $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue; - $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; - $item['conversation-uri'] = $conversation; - - $conv = $xpath->query('ostatus:conversation', $entry); - if (is_object($conv->item(0))) { - foreach ($conv->item(0)->attributes AS $attributes) { - if ($attributes->name == "ref") { - $item['conversation-uri'] = $attributes->textContent; - } - if ($attributes->name == "href") { - $item['conversation-href'] = $attributes->textContent; - } - } + logger("Unhandled verb ".$item["verb"]." ".print_r($item, true), LOGGER_DEBUG); } - $related = ""; + self::processPost($xpath, $entry, $item, $importer); - $inreplyto = $xpath->query('thr:in-reply-to', $entry); - if (is_object($inreplyto->item(0))) { - foreach ($inreplyto->item(0)->attributes AS $attributes) { - if ($attributes->name == "ref") { - $item["parent-uri"] = $attributes->textContent; - } - if ($attributes->name == "href") { - $related = $attributes->textContent; + if ($initialize && (count(self::$itemlist) > 0)) { + if (self::$itemlist[0]['uri'] == self::$itemlist[0]['parent-uri']) { + // We will import it everytime, when it is started by our contacts + $valid = !empty(self::$itemlist[0]['contact-id']); + if (!$valid) { + // If not, then it depends on this setting + $valid = !Config::get('system','ostatus_full_threads'); } - } - } - - $georsspoint = $xpath->query('georss:point', $entry); - if ($georsspoint) { - $item["coord"] = $georsspoint->item(0)->nodeValue; - } - $categories = $xpath->query('atom:category', $entry); - if ($categories) { - foreach ($categories AS $category) { - foreach ($category->attributes AS $attributes) { - if ($attributes->name == "term") { - $term = $attributes->textContent; - if (strlen($item["tag"])) { - $item["tag"] .= ','; + if ($valid) { + // Never post a thread when the only interaction by our contact was a like + $valid = false; + $verbs = array(ACTIVITY_POST, ACTIVITY_SHARE); + foreach (self::$itemlist AS $item) { + if (!empty($item['contact-id']) && in_array($item['verb'], $verbs)) { + $valid = true; } - $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]"; } } + } else { + // But we will only import complete threads + $valid = dba::exists('item', array('uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri'])); } - } - - $self = ""; - $enclosure = ""; - $links = $xpath->query('atom:link', $entry); - if ($links) { - foreach ($links AS $link) { - $attribute = self::read_attributes($link); - - if (($attribute['rel'] != "") && ($attribute['href'] != "")) { - switch ($attribute['rel']) { - case "alternate": - $item["plink"] = $attribute['href']; - if (($item["object-type"] == ACTIVITY_OBJ_QUESTION) || - ($item["object-type"] == ACTIVITY_OBJ_EVENT)) { - $item["body"] .= add_page_info($attribute['href']); - } - break; - case "ostatus:conversation": - $conversation = $attribute['href']; - $item['conversation-href'] = $conversation; - if (!isset($item['conversation-uri'])) { - $item['conversation-uri'] = $item['conversation-href']; - } - break; - case "enclosure": - $enclosure = $attribute['href']; - if (strlen($item["attach"])) { - $item["attach"] .= ','; - } - if (!isset($attribute['length'])) { - $attribute['length'] = "0"; - } - $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]'; - break; - case "related": - if ($item["object-type"] != ACTIVITY_OBJ_BOOKMARK) { - if (!isset($item["parent-uri"])) { - $item["parent-uri"] = $attribute['href']; - } - if ($related == "") { - $related = $attribute['href']; - } - } else { - $item["body"] .= add_page_info($attribute['href']); - } - break; - case "self": - $self = $attribute['href']; - break; - case "mentioned": - // Notification check - if ($importer["nurl"] == normalise_link($attribute['href'])) { - $mention = true; - } - break; + if ($valid) { + $default_contact = 0; + $key = count(self::$itemlist); + for ($key = count(self::$itemlist) - 1; $key >= 0; $key--) { + if (empty(self::$itemlist[$key]['contact-id'])) { + self::$itemlist[$key]['contact-id'] = $default_contact; + } else { + $default_contact = $item['contact-id']; } } - } - } - - $local_id = ""; - $repeat_of = ""; - - $notice_info = $xpath->query('statusnet:notice_info', $entry); - if ($notice_info && ($notice_info->length > 0)) { - foreach ($notice_info->item(0)->attributes AS $attributes) { - if ($attributes->name == "source") { - $item["app"] = strip_tags($attributes->textContent); - } - if ($attributes->name == "local_id") { - $local_id = $attributes->textContent; - } - if ($attributes->name == "repeat_of") { - $repeat_of = $attributes->textContent; + foreach (self::$itemlist AS $item) { + $found = dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item["uri"])); + if ($found) { + logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already exists.", LOGGER_DEBUG); + } else { + // We are having duplicated entries. Hopefully this solves it. + if (Lock::set('ostatus_process_item_store')) { + $ret = item_store($item); + Lock::remove('ostatus_process_item_store'); + logger("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret); + } else { + $ret = item_store($item); + logger("We couldn't lock - but tried to store the item anyway. Return value is ".$ret); + } + } } } + self::$itemlist = array(); } + logger('Processing done for post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG); + } + return true; + } - // Is it a repeated post? - if (($repeat_of != "") || ($item["verb"] == ACTIVITY_SHARE)) { - $activityobjects = $xpath->query('activity:object', $entry)->item(0); - - if (is_object($activityobjects)) { + private static function deleteNotice($item) { - $orig_uri = $xpath->query("activity:object/atom:id", $activityobjects)->item(0)->nodeValue; - if (!isset($orig_uri)) { - $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue; - } - $orig_links = $xpath->query("activity:object/atom:link[@rel='alternate']", $activityobjects); - if ($orig_links && ($orig_links->length > 0)) { - foreach ($orig_links->item(0)->attributes AS $attributes) { - if ($attributes->name == "href") { - $orig_link = $attributes->textContent; - } - } - } - if (!isset($orig_link)) { - $orig_link = $xpath->query("atom:link[@rel='alternate']", $activityobjects)->item(0)->nodeValue; - } - if (!isset($orig_link)) { - $orig_link = self::convert_href($orig_uri); - } - $orig_body = $xpath->query('activity:object/atom:content/text()', $activityobjects)->item(0)->nodeValue; - if (!isset($orig_body)) { - $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue; - } - $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue; - $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue; + $condition = array('uid' => $item['uid'], 'author-link' => $item['author-link'], 'uri' => $item['uri']); + $deleted = dba::select('item', array('id', 'parent-uri'), $condition, array('limit' => 1)); + if (!dbm::is_result($deleted)) { + logger('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it. "); + return; + } - $orig_contact = $contact; - $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false); + // Currently we don't have a central deletion function that we could use in this case. The function "item_drop" doesn't work for that case + dba::update('item', array('deleted' => true, 'title' => '', 'body' => '', + 'edited' => datetime_convert(), 'changed' => datetime_convert()), + array('id' => $deleted["id"])); - $item["author-name"] = $orig_author["author-name"]; - $item["author-link"] = $orig_author["author-link"]; - $item["author-avatar"] = $orig_author["author-avatar"]; + delete_thread($deleted["id"], $deleted["parent-uri"]); - $item["body"] = add_page_info_to_body(html2bbcode($orig_body)); - $item["created"] = $orig_created; - $item["edited"] = $orig_edited; + logger('Deleted item with uri '.$item['uri'].' for user '.$item['uid']); + } - $item["uri"] = $orig_uri; + /** + * @brief Processes the XML for a post + * + * @param object $xpath The xpath object + * @param object $entry The xml entry that is processed + * @param array $item The item array + * @param array $importer user record of the importing user + */ + private static function processPost($xpath, $entry, &$item, $importer) { + $item["body"] = html2bbcode($xpath->query('atom:content/text()', $entry)->item(0)->nodeValue); + $item["object-type"] = $xpath->query('activity:object-type/text()', $entry)->item(0)->nodeValue; + if (($item["object-type"] == ACTIVITY_OBJ_BOOKMARK) || ($item["object-type"] == ACTIVITY_OBJ_EVENT)) { + $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; + $item["body"] = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; + } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) { + $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; + } + + $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; + $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue; + $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; + $item['conversation-uri'] = $conversation; + + $conv = $xpath->query('ostatus:conversation', $entry); + if (is_object($conv->item(0))) { + foreach ($conv->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $item['conversation-uri'] = $attributes->textContent; + } + if ($attributes->name == "href") { + $item['conversation-href'] = $attributes->textContent; + } + } + } - if (!isset($item["plink"])) { - $item["plink"] = $orig_link; - } + $related = ""; - $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue; + $inreplyto = $xpath->query('thr:in-reply-to', $entry); + if (is_object($inreplyto->item(0))) { + foreach ($inreplyto->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $item["parent-uri"] = $attributes->textContent; + } + if ($attributes->name == "href") { + $related = $attributes->textContent; + } + } + } - $item["object-type"] = $xpath->query('activity:object/activity:object-type/text()', $activityobjects)->item(0)->nodeValue; - if (!isset($item["object-type"])) { - $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue; - } + $georsspoint = $xpath->query('georss:point', $entry); + if (!empty($georsspoint) && ($georsspoint->length > 0)) { + $item["coord"] = $georsspoint->item(0)->nodeValue; + } - $enclosures = $xpath->query("atom:link[@rel='alternate']", $activityobjects); - if ($enclosures) { - foreach ($enclosures AS $link) { - $attribute = self::read_attributes($link); - if ($href != "") { - $enclosure = $attribute['href']; - if (strlen($item["attach"])) { - $item["attach"] .= ','; - } - if (!isset($attribute['length'])) { - $attribute['length'] = "0"; - } - $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]'; - } + $categories = $xpath->query('atom:category', $entry); + if ($categories) { + foreach ($categories AS $category) { + foreach ($category->attributes AS $attributes) { + if ($attributes->name == "term") { + $term = $attributes->textContent; + if (strlen($item["tag"])) { + $item["tag"] .= ','; } + $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]"; } } } + } - //if ($enclosure != "") - // $item["body"] .= add_page_info($enclosure); - - if (isset($item["parent-uri"])) { - $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'", - intval($importer["uid"]), dbesc($item["parent-uri"])); - - // Only fetch missing stuff if it is a comment or reshare. - if (in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_SHARE)) && - !dbm::is_result($r) && ($related != "")) { - $reply_path = str_replace("/notice/", "/api/statuses/show/", $related).".atom"; + $self = ''; + $add_body = ''; - if ($reply_path != $related) { - logger("Fetching related items for user ".$importer["uid"]." from ".$reply_path, LOGGER_DEBUG); - $reply_xml = fetch_url($reply_path); + $links = $xpath->query('atom:link', $entry); + if ($links) { + $link_data = self::processLinks($links, $item); + $self = $link_data['self']; + $add_body = $link_data['add_body']; + } - $reply_contact = $contact; - self::import($reply_xml,$importer,$reply_contact, $reply_hub); + $repeat_of = ""; - // After the import try to fetch the parent item again - $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'", - intval($importer["uid"]), dbesc($item["parent-uri"])); - } + $notice_info = $xpath->query('statusnet:notice_info', $entry); + if ($notice_info && ($notice_info->length > 0)) { + foreach ($notice_info->item(0)->attributes AS $attributes) { + if ($attributes->name == "source") { + $item["app"] = strip_tags($attributes->textContent); } - if (dbm::is_result($r)) { - $item["type"] = 'remote-comment'; - $item["gravity"] = GRAVITY_COMMENT; + if ($attributes->name == "repeat_of") { + $repeat_of = $attributes->textContent; } - } else { - $item["parent-uri"] = $item["uri"]; } - $item_id = self::completion($conversation, $importer["uid"], $item, $self); - - if (!$item_id) { - // Store the conversation data. This is normally done in "item_store" - // but since something went wrong, we want to be sure to save the data. - store_conversation($item); - logger("Error storing item", LOGGER_DEBUG); - continue; + } + // Is it a repeated post? + if (($repeat_of != "") || ($item["verb"] == ACTIVITY_SHARE)) { + $link_data = self::processRepeatedItem($xpath, $entry, $item, $importer); + if (!empty($link_data['add_body'])) { + $add_body .= $link_data['add_body']; } - - logger("Item was stored with id ".$item_id, LOGGER_DEBUG); } - } - - /** - * @brief Create an url out of an uri - * - * @param string $href URI in the format "parameter1:parameter1:..." - * - * @return string URL in the format http(s)://.... - */ - public static function convert_href($href) { - $elements = explode(":",$href); - if ((count($elements) <= 2) || ($elements[0] != "tag")) - return $href; + $item["body"] .= $add_body; - $server = explode(",", $elements[1]); - $conversation = explode("=", $elements[2]); - - if ((count($elements) == 4) && ($elements[2] == "post")) - return "http://".$server[0]."/notice/".$elements[3]; - - if ((count($conversation) != 2) || ($conversation[1] =="")) { - return $href; - } - if ($elements[3] == "objectType=thread") { - return "http://".$server[0]."/conversation/".$conversation[1]; - } else { - return "http://".$server[0]."/notice/".$conversation[1]; + // Only add additional data when there is no picture in the post + if (!strstr($item["body"],'[/img]')) { + $item["body"] = add_page_info_to_body($item["body"]); } - return $href; - } - /** - * @brief Checks if there are entries in conversations that aren't present on our side - * - * @param bool $mentions Fetch conversations where we are mentioned - * @param bool $override Override the interval setting - */ - public static function check_conversations($mentions = false, $override = false) { - $last = get_config('system','ostatus_last_poll'); + // Mastodon Content Warning + if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) { + $clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; - $poll_interval = intval(get_config('system','ostatus_poll_interval')); - if (!$poll_interval) { - $poll_interval = self::OSTATUS_DEFAULT_POLL_INTERVAL; + $item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]'; } - // Don't poll if the interval is set negative - if (($poll_interval < 0) && !$override) { - return; + if (($self != '') && empty($item['protocol'])) { + self::fetchSelf($self, $item); } - if (!$mentions) { - $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe')); - if (!$poll_timeframe) { - $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME; - } - } else { - $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe')); - if (!$poll_timeframe) { - $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS; - } + if (!empty($item["conversation-href"])) { + self::fetchConversation($item['conversation-href'], $item['conversation-uri']); } - - if ($last && !$override) { - $next = $last + ($poll_interval * 60); - if ($next > time()) { - logger('poll interval not reached'); - return; + if (isset($item["parent-uri"]) && ($related != '')) { + if (!dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item['parent-uri']))) { + self::fetchRelated($related, $item["parent-uri"], $importer); + } else { + logger('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG); } - } - - logger('cron_start'); - - $start = date("Y-m-d H:i:s", time() - ($poll_timeframe * 60)); - if ($mentions) { - $conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term` - STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid` - WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention` - GROUP BY `term`.`url`, `term`.`uid`, `term`.`oid`, `term`.`term` ORDER BY `term`.`term` DESC", dbesc($start)); + $item["type"] = 'remote-comment'; + $item["gravity"] = GRAVITY_COMMENT; } else { - $conversations = q("SELECT `oid`, `url`, `uid` FROM `term` - WHERE `type` = 7 AND `term` > '%s' - GROUP BY `url`, `uid`, `oid`, `term` ORDER BY `term` DESC", dbesc($start)); + $item["parent-uri"] = $item["uri"]; } - foreach ($conversations AS $conversation) { - self::completion($conversation['url'], $conversation['uid']); + if (($item['author-link'] != '') && !empty($item['protocol'])) { + $item = store_conversation($item); } - logger('cron_end'); - - set_config('system','ostatus_last_poll', time()); + self::$itemlist[] = $item; } /** - * @brief Updates the gcontact table with actor data from the conversation + * @brief Fetch the conversation for posts * - * @param object $actor The actor object that contains the contact data + * @param string $conversation The link to the conversation + * @param string $conversation_uri The conversation in "uri" format */ - private static function conv_fetch_actor($actor) { - - // We set the generation to "3" since the data here is not as reliable as the data we get on other occasions - $contact = array("network" => NETWORK_OSTATUS, "generation" => 3); - - if (isset($actor->url)) - $contact["url"] = $actor->url; + private static function fetchConversation($conversation, $conversation_uri) { - if (isset($actor->displayName)) - $contact["name"] = $actor->displayName; - - if (isset($actor->portablecontacts_net->displayName)) - $contact["name"] = $actor->portablecontacts_net->displayName; - - if (isset($actor->portablecontacts_net->preferredUsername)) - $contact["nick"] = $actor->portablecontacts_net->preferredUsername; + // Ensure that we only store a conversation once in a process + if (isset(self::$conv_list[$conversation])) { + return; + } - if (isset($actor->id)) - $contact["alias"] = $actor->id; + self::$conv_list[$conversation] = true; - if (isset($actor->summary)) - $contact["about"] = $actor->summary; + $conversation_data = z_fetch_url($conversation, false, $redirects, array('accept_content' => 'application/atom+xml')); - if (isset($actor->portablecontacts_net->note)) - $contact["about"] = $actor->portablecontacts_net->note; + if (!$conversation_data['success']) { + return; + } - if (isset($actor->portablecontacts_net->addresses->formatted)) - $contact["location"] = $actor->portablecontacts_net->addresses->formatted; + $xml = ''; + if (stristr($conversation_data['header'], 'Content-Type: application/atom+xml')) { + $xml = $conversation_data['body']; + } - if (isset($actor->image->url)) - $contact["photo"] = $actor->image->url; + if ($xml == '') { + $doc = new DOMDocument(); + if (!@$doc->loadHTML($conversation_data['body'])) { + return; + } + $xpath = new DomXPath($doc); - if (isset($actor->image->width)) - $avatarwidth = $actor->image->width; + $links = $xpath->query('//link'); + if ($links) { + foreach ($links AS $link) { + $attribute = ostatus::read_attributes($link); + if (($attribute['rel'] == 'alternate') && ($attribute['type'] == 'application/atom+xml')) { + $file = $attribute['href']; + } + } + if ($file != '') { + $conversation_atom = z_fetch_url($attribute['href']); - if (is_array($actor->status_net->avatarLinks)) - foreach ($actor->status_net->avatarLinks AS $avatar) { - if ($avatarsize < $avatar->width) { - $contact["photo"] = $avatar->url; - $avatarsize = $avatar->width; + if ($conversation_atom['success']) { + $xml = $conversation_atom['body']; + } } } + } + + if ($xml == '') { + return; + } - $contact["hide"] = false; // OStatus contacts are never hidden - update_gcontact($contact); + self::storeConversation($xml, $conversation, $conversation_uri); } /** - * @brief Fetches the conversation url for a given item link or conversation id - * - * @param string $self The link to the posting - * @param string $conversation_id The conversation id + * @brief Store a feed in several conversation entries * - * @return string The conversation url + * @param string $xml The feed */ - private static function fetch_conversation($self, $conversation_id = "") { - - if ($conversation_id != "") { - $elements = explode(":", $conversation_id); - - if ((count($elements) <= 2) || ($elements[0] != "tag")) - return $conversation_id; - } - - if ($self == "") - return ""; - - $json = str_replace(".atom", ".json", $self); + private static function storeConversation($xml, $conversation = '', $conversation_uri = '') { + $doc = new DOMDocument(); + @$doc->loadXML($xml); - $raw = fetch_url($json); - if ($raw == "") - return ""; + $xpath = new DomXPath($doc); + $xpath->registerNamespace('atom', NAMESPACE_ATOM1); + $xpath->registerNamespace('thr', NAMESPACE_THREAD); + $xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS); - $data = json_decode($raw); - if (!is_object($data)) - return ""; + $entries = $xpath->query('/atom:feed/atom:entry'); - $conversation_id = $data->statusnet_conversation_id; + // Now store the entries + foreach ($entries AS $entry) { + $doc2 = new DOMDocument(); + $doc2->preserveWhiteSpace = false; + $doc2->formatOutput = true; - $pos = strpos($self, "/api/statuses/show/"); - $base_url = substr($self, 0, $pos); + $conv_data = array(); - return $base_url."/conversation/".$conversation_id; - } + $conv_data['protocol'] = PROTOCOL_SPLITTED_CONV; + $conv_data['network'] = NETWORK_OSTATUS; + $conv_data['uri'] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue; - /** - * @brief Fetches a shared object from a given conversation object - * - * Sometimes GNU Social seems to fail when returning shared objects. - * Then they don't contains all needed data. - * We then try to find this object in the conversation - * - * @param string $id Message id - * @param object $conversation Conversation object - * - * @return object The shared object - */ - private static function shared_object($id, $conversation) { - if (!is_array($conversation->items)) { - return false; - } - foreach ($conversation->items AS $single_conv) { - if ($single_conv->id == $id) { - return $single_conv; + $inreplyto = $xpath->query('thr:in-reply-to', $entry); + if (is_object($inreplyto->item(0))) { + foreach ($inreplyto->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $conv_data['reply-to-uri'] = $attributes->textContent; + } + } } - } - return false; - } - - /** - * @brief Fetches actor details of a given actor and user id - * - * @param string $actor The actor url - * @param int $uid The user id - * @param int $contact_id The default contact-id - * - * @return array Array with actor details - */ - private static function get_actor_details($actor, $uid, $contact_id) { - $details = array(); + $conv = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; + $conv_data['conversation-uri'] = $conv; - $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", - $uid, normalise_link($actor), NETWORK_STATUSNET); + $conv = $xpath->query('ostatus:conversation', $entry); + if (is_object($conv->item(0))) { + foreach ($conv->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $conv_data['conversation-uri'] = $attributes->textContent; + } + if ($attributes->name == "href") { + $conv_data['conversation-href'] = $attributes->textContent; + } + } + } - if (!$contact) - $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `alias` IN ('%s', '%s') AND `network` != '%s'", - $uid, $actor, normalise_link($actor), NETWORK_STATUSNET); + if ($conversation != '') { + $conv_data['conversation-uri'] = $conversation; + } - if ($contact) { - logger("Found contact for url ".$actor, LOGGER_DEBUG); - $details["contact_id"] = $contact[0]["id"]; - $details["network"] = $contact[0]["network"]; + if ($conversation_uri != '') { + $conv_data['conversation-uri'] = $conversation_uri; + } - $details["not_following"] = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND)); - } else { - logger("No contact found for user ".$uid." and url ".$actor, LOGGER_DEBUG); + $entry = $doc2->importNode($entry, true); - // Adding a global contact - /// @TODO Use this data for the post - $details["global_contact_id"] = get_contact($actor, 0); + $doc2->appendChild($entry); - logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG); + $conv_data['source'] = $doc2->saveXML(); - $details["contact_id"] = $contact_id; - $details["network"] = NETWORK_OSTATUS; + $condition = array('item-uri' => $conv_data['uri'],'protocol' => PROTOCOL_OSTATUS_FEED); + if (dba::exists('conversation', $condition)) { + logger('Delete deprecated entry for URI '.$conv_data['uri'], LOGGER_DEBUG); + dba::delete('conversation', array('item-uri' => $conv_data['uri'])); + } - $details["not_following"] = true; + logger('Store conversation data for uri '.$conv_data['uri'], LOGGER_DEBUG); + store_conversation($conv_data); } - - return $details; } /** - * @brief Stores an item and completes the thread + * @brief Fetch the own post so that it can be stored later + * @param array $item The item array * - * @param string $conversation_url The URI of the conversation - * @param integer $uid The user id - * @param array $item Data of the item that is to be posted + * We want to store the original data for later processing. + * This function is meant for cases where we process a feed with multiple entries. + * In that case we need to fetch the single posts here. * - * @return integer The item id of the posted item array + * @param string $self The link to the self item */ - private static function completion($conversation_url, $uid, $item = array(), $self = "") { - - /// @todo This function is totally ugly and has to be rewritten totally - - // Import all threads or only threads that were started by our followers? - $all_threads = !get_config('system','ostatus_full_threads'); - - $item_stored = -1; - - $conversation_url = self::fetch_conversation($self, $conversation_url); - - // If the thread shouldn't be completed then store the item and go away - // Don't do a completion on liked content - if (((intval(get_config('system','ostatus_poll_interval')) == -2) && (count($item) > 0)) || - ($item["verb"] == ACTIVITY_LIKE) || ($conversation_url == "")) { - $item_stored = item_store($item, $all_threads); - return $item_stored; - } - - // Get the parent - $parents = q("SELECT `item`.`id`, `item`.`parent`, `item`.`uri`, `item`.`contact-id`, `item`.`type`, - `item`.`verb`, `item`.`visible` FROM `term` - STRAIGHT_JOIN `item` AS `thritem` ON `thritem`.`parent` = `term`.`oid` - STRAIGHT_JOIN `item` ON `item`.`parent` = `thritem`.`parent` - WHERE `term`.`uid` = %d AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`url` = '%s'", - intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url)); - if ($parents) { - $parent = $parents[0]; - } elseif (count($item) > 0) { - $parent = $item; - $parent["type"] = "remote"; - $parent["verb"] = ACTIVITY_POST; - $parent["visible"] = 1; - } else { - // Preset the parent - $r = q("SELECT `id` FROM `contact` WHERE `self` AND `uid`=%d", $uid); - if (!dbm::is_result($r)) { - return -2; - } - $parent = array(); - $parent["id"] = 0; - $parent["parent"] = 0; - $parent["uri"] = ""; - $parent["contact-id"] = $r[0]["id"]; - $parent["type"] = "remote"; - $parent["verb"] = ACTIVITY_POST; - $parent["visible"] = 1; - } - - $conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as"; - $pageno = 1; - $items = array(); - - logger('fetching conversation url '.$conv.' (Self: '.$self.') for user '.$uid); - - do { - $conv_arr = z_fetch_url($conv."?page=".$pageno); - - // If it is a non-ssl site and there is an error, then try ssl or vice versa - if (!$conv_arr["success"] && (substr($conv, 0, 7) == "http://")) { - $conv = str_replace("http://", "https://", $conv); - $conv_as = fetch_url($conv."?page=".$pageno); - } elseif (!$conv_arr["success"] && (substr($conv, 0, 8) == "https://")) { - $conv = str_replace("https://", "http://", $conv); - $conv_as = fetch_url($conv."?page=".$pageno); - } else { - $conv_as = $conv_arr["body"]; - } - $conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as); - $conv_as = json_decode($conv_as); - - $no_of_items = sizeof($items); - - if (@is_array($conv_as->items)) - foreach ($conv_as->items AS $single_item) - $items[$single_item->id] = $single_item; - - if ($no_of_items == sizeof($items)) - break; - - $pageno++; - - } while (true); - - logger('fetching conversation done. Found '.count($items).' items'); - - if (!sizeof($items)) { - if (count($item) > 0) { - $item_stored = item_store($item, $all_threads); - - if ($item_stored) { - logger("Conversation ".$conversation_url." couldn't be fetched. Item uri ".$item["uri"]." stored: ".$item_stored, LOGGER_DEBUG); - self::store_conversation($item_id, $conversation_url); - } - - return $item_stored; - } else { - return -3; - } + private static function fetchSelf($self, &$item) { + $condition = array('`item-uri` = ? AND `protocol` IN (?, ?)', $self, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON); + if (dba::exists('conversation', $condition)) { + logger('Conversation '.$item['uri'].' is already stored.', LOGGER_DEBUG); + return; } - $items = array_reverse($items); - - $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self`", intval($uid)); - $importer = $r[0]; + $self_data = z_fetch_url($self); - $new_parent = true; - - foreach ($items as $single_conv) { - - // Update the gcontact table - self::conv_fetch_actor($single_conv->actor); - - // Test - remove before flight - //$tempfile = tempnam(get_temppath(), "conversation"); - //file_put_contents($tempfile, json_encode($single_conv)); - - $mention = false; - - if (isset($single_conv->object->id)) - $single_conv->id = $single_conv->object->id; - - $plink = self::convert_href($single_conv->id); - if (isset($single_conv->object->url)) - $plink = self::convert_href($single_conv->object->url); - - if (@!$single_conv->id) - continue; - - logger("Got id ".$single_conv->id, LOGGER_DEBUG); - - if ($first_id == "") { - $first_id = $single_conv->id; - - // The first post of the conversation isn't our first post. There are three options: - // 1. Our conversation hasn't the "real" thread starter - // 2. This first post is a post inside our thread - // 3. This first post is a post inside another thread - if (($first_id != $parent["uri"]) && ($parent["uri"] != "")) { + if (!$self_data['success']) { + return; + } - $new_parent = true; + // We reformat the XML to make it better readable + $doc = new DOMDocument(); + $doc->loadXML($self_data['body']); + $doc->preserveWhiteSpace = false; + $doc->formatOutput = true; + $xml = $doc->saveXML(); - $new_parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN - (SELECT `parent` FROM `item` - WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s')) LIMIT 1", - intval($uid), dbesc($first_id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN)); - if ($new_parents) { - if ($new_parents[0]["parent"] == $parent["parent"]) { - // Option 2: This post is already present inside our thread - but not as thread starter - logger("Option 2: uri present in our thread: ".$first_id, LOGGER_DEBUG); - $first_id = $parent["uri"]; - } else { - // Option 3: Not so good. We have mixed parents. We have to see how to clean this up. - // For now just take the new parent. - $parent = $new_parents[0]; - $first_id = $parent["uri"]; - logger("Option 3: mixed parents for uri ".$first_id, LOGGER_DEBUG); - } - } else { - // Option 1: We hadn't got the real thread starter - // We have to clean up our existing messages. - $parent["id"] = 0; - $parent["uri"] = $first_id; - logger("Option 1: we have a new parent: ".$first_id, LOGGER_DEBUG); - } - } elseif ($parent["uri"] == "") { - $parent["id"] = 0; - $parent["uri"] = $first_id; - } - } + $item["protocol"] = PROTOCOL_OSTATUS_SALMON; + $item["source"] = $xml; - $parent_uri = $parent["uri"]; + logger('Conversation '.$item['uri'].' is now fetched.', LOGGER_DEBUG); + } - // "context" only seems to exist on older servers - if (isset($single_conv->context->inReplyTo->id)) { - $parent_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1", - intval($uid), dbesc($single_conv->context->inReplyTo->id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN)); - if ($parent_exists) - $parent_uri = $single_conv->context->inReplyTo->id; + /** + * @brief Fetch related posts and processes them + * + * @param string $related The link to the related item + * @param string $related_uri The related item in "uri" format + * @param array $importer user record of the importing user + */ + private static function fetchRelated($related, $related_uri, $importer) { + $condition = array('`item-uri` = ? AND `protocol` IN (?, ?)', $related_uri, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON); + $conversation = dba::select('conversation', array('source', 'protocol'), $condition, array('limit' => 1)); + if (dbm::is_result($conversation)) { + $stored = true; + $xml = $conversation['source']; + if (self::process($xml, $importer, $contact, $hub, $stored, false)) { + logger('Got valid cached XML for URI '.$related_uri, LOGGER_DEBUG); + return; } - - // This is the current way - if (isset($single_conv->object->inReplyTo->id)) { - $parent_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1", - intval($uid), dbesc($single_conv->object->inReplyTo->id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN)); - if ($parent_exists) - $parent_uri = $single_conv->object->inReplyTo->id; + if ($conversation['protocol'] == PROTOCOL_OSTATUS_SALMON) { + logger('Delete invalid cached XML for URI '.$related_uri, LOGGER_DEBUG); + dba::delete('conversation', array('item-uri' => $related_uri)); } + } - $message_exists = q("SELECT `id`, `parent`, `uri` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1", - intval($uid), dbesc($single_conv->id), - dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN)); - if ($message_exists) { - logger("Message ".$single_conv->id." already existed on the system", LOGGER_DEBUG); - - if ($parent["id"] != 0) { - $existing_message = $message_exists[0]; + $stored = false; + $related_data = z_fetch_url($related, false, $redirects, array('accept_content' => 'application/atom+xml')); - // We improved the way we fetch OStatus messages, this shouldn't happen very often now - /// @TODO We have to change the shadow copies as well. This way here is really ugly. - if ($existing_message["parent"] != $parent["id"]) { - logger('updating id '.$existing_message["id"].' with parent '.$existing_message["parent"].' to parent '.$parent["id"].' uri '.$parent["uri"].' thread '.$parent_uri, LOGGER_DEBUG); + if (!$related_data['success']) { + return; + } - // Update the parent id of the selected item - $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `id` = %d", - intval($parent["id"]), dbesc($parent["uri"]), intval($existing_message["id"])); + $xml = ''; - // Update the parent uri in the thread - but only if it points to itself - $r = q("UPDATE `item` SET `thr-parent` = '%s' WHERE `id` = %d AND `uri` = `thr-parent`", - dbesc($parent_uri), intval($existing_message["id"])); + if (stristr($related_data['header'], 'Content-Type: application/atom+xml')) { + logger('Directly fetched XML for URI '.$related_uri, LOGGER_DEBUG); + $xml = $related_data['body']; + } - // try to change all items of the same parent - $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d", - intval($parent["id"]), dbesc($parent["uri"]), intval($existing_message["parent"])); + if ($xml == '') { + $doc = new DOMDocument(); + if (!@$doc->loadHTML($related_data['body'])) { + return; + } + $xpath = new DomXPath($doc); - // Update the parent uri in the thread - but only if it points to itself - $r = q("UPDATE `item` SET `thr-parent` = '%s' WHERE (`parent` = %d) AND (`uri` = `thr-parent`)", - dbesc($parent["uri"]), intval($existing_message["parent"])); + $atom_file = ''; - // Now delete the thread - delete_thread($existing_message["parent"]); + $links = $xpath->query('//link'); + if ($links) { + foreach ($links AS $link) { + $attribute = self::read_attributes($link); + if (($attribute['rel'] == 'alternate') && ($attribute['type'] == 'application/atom+xml')) { + $atom_file = $attribute['href']; } } + if ($atom_file != '') { + $related_atom = z_fetch_url($atom_file); - // The item we are having on the system is the one that we wanted to store via the item array - if (isset($item["uri"]) && ($item["uri"] == $existing_message["uri"])) { - $item = array(); - $item_stored = 0; + if ($related_atom['success']) { + logger('Fetched XML for URI '.$related_uri, LOGGER_DEBUG); + $xml = $related_atom['body']; + } } - - continue; } + } - if (is_array($single_conv->to)) - foreach ($single_conv->to AS $to) - if ($importer["nurl"] == normalise_link($to->id)) - $mention = true; - - $actor = $single_conv->actor->id; - if (isset($single_conv->actor->url)) - $actor = $single_conv->actor->url; - - $details = self::get_actor_details($actor, $uid, $parent["contact-id"]); + // Workaround for older GNU Social servers + if (($xml == '') && strstr($related, '/notice/')) { + $related_atom = z_fetch_url(str_replace('/notice/', '/api/statuses/show/', $related).'.atom'); - // Do we only want to import threads that were started by our contacts? - if ($details["not_following"] && $new_parent && get_config('system','ostatus_full_threads')) { - logger("Don't import uri ".$first_id." because user ".$uid." doesn't follow the person ".$actor, LOGGER_DEBUG); - continue; + if ($related_atom['success']) { + logger('GNU Social workaround to fetch XML for URI '.$related_uri, LOGGER_DEBUG); + $xml = $related_atom['body']; } + } - /// @TODO One statment is okay (until if () ) - $arr = array(); - $arr["network"] = $details["network"]; - $arr["uri"] = $single_conv->id; - $arr["plink"] = $plink; - $arr["uid"] = $uid; - $arr["contact-id"] = $details["contact_id"]; - $arr["parent-uri"] = $parent_uri; - $arr["created"] = $single_conv->published; - $arr["edited"] = $single_conv->published; - $arr["owner-name"] = $single_conv->actor->displayName; - if ($arr["owner-name"] == '') - $arr["owner-name"] = $single_conv->actor->contact->displayName; - if ($arr["owner-name"] == '') - $arr["owner-name"] = $single_conv->actor->portablecontacts_net->displayName; - - $arr["owner-link"] = $actor; - $arr["owner-avatar"] = Probe::fixAvatar($single_conv->actor->image->url, $arr["owner-link"]); - - $arr["author-name"] = $arr["owner-name"]; - $arr["author-link"] = $arr["owner-link"]; - $arr["author-avatar"] = $arr["owner-avatar"]; - $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->content)); - - if (isset($single_conv->status_net->conversation)) { - $arr['conversation-uri'] = $single_conv->status_net->conversation; - } + // Even more worse workaround for GNU Social ;-) + if ($xml == '') { + $related_guess = ostatus::convert_href($related_uri); + $related_atom = z_fetch_url(str_replace('/notice/', '/api/statuses/show/', $related_guess).'.atom'); - if (isset($single_conv->status_net->notice_info->source)) { - $arr["app"] = strip_tags($single_conv->status_net->notice_info->source); - } elseif (isset($single_conv->statusnet->notice_info->source)) { - $arr["app"] = strip_tags($single_conv->statusnet->notice_info->source); - } elseif (isset($single_conv->statusnet_notice_info->source)) { - $arr["app"] = strip_tags($single_conv->statusnet_notice_info->source); - } elseif (isset($single_conv->provider->displayName)) { - $arr["app"] = $single_conv->provider->displayName; - } else { - $arr["app"] = "OStatus"; + if ($related_atom['success']) { + logger('GNU Social workaround 2 to fetch XML for URI '.$related_uri, LOGGER_DEBUG); + $xml = $related_atom['body']; } + } - $arr["source"] = json_encode($single_conv); - $arr["protocol"] = PROTOCOL_GS_CONVERSATION; + // Finally we take the data that we fetched from "ostatus:conversation" + if ($xml == '') { + $condition = array('item-uri' => $related_uri, 'protocol' => PROTOCOL_SPLITTED_CONV); + $conversation = dba::select('conversation', array('source'), $condition, array('limit' => 1)); + if (dbm::is_result($conversation)) { + $stored = true; + logger('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG); + $xml = $conversation['source']; + } + } - $arr["verb"] = $parent["verb"]; - $arr["visible"] = $parent["visible"]; - $arr["location"] = $single_conv->location->displayName; - $arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon); + if ($xml != '') { + self::process($xml, $importer, $contact, $hub, $stored, false); + } else { + logger("XML couldn't be fetched for URI: ".$related_uri." - href: ".$related, LOGGER_DEBUG); + } + return; + } - // Is it a reshared item? - if (isset($single_conv->verb) && ($single_conv->verb == "share") && isset($single_conv->object)) { - if (is_array($single_conv->object)) - $single_conv->object = $single_conv->object[0]; + /** + * @brief Processes the XML for a repeated post + * + * @param object $xpath The xpath object + * @param object $entry The xml entry that is processed + * @param array $item The item array + * @param array $importer user record of the importing user + * + * @return array with data from links + */ + private static function processRepeatedItem($xpath, $entry, &$item, $importer) { + $activityobjects = $xpath->query('activity:object', $entry)->item(0); - // Sometimes GNU Social doesn't returns a complete object - if (!isset($single_conv->object->actor->url)) { - $object = self::shared_object($single_conv->object->id, $conversation); - if (is_object($object)) { - $single_conv->object = $object; - } - } + if (!is_object($activityobjects)) { + return array(); + } - if (isset($single_conv->object->actor->url)) { - logger("Found reshared item ".$single_conv->object->id); + $link_data = array(); - // $single_conv->object->context->conversation; + $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue; - if (isset($single_conv->object->object->id)) { - $arr["uri"] = $single_conv->object->object->id; - } else { - $arr["uri"] = $single_conv->object->id; - } - if (isset($single_conv->object->object->url)) { - $plink = self::convert_href($single_conv->object->object->url); - } else { - $plink = self::convert_href($single_conv->object->url); - } - if (isset($single_conv->object->object->content)) { - $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->object->content)); - } else { - $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->content)); - } - $arr["plink"] = $plink; + $links = $xpath->query("atom:link", $activityobjects); + if ($links) { + $link_data = self::processLinks($links, $item); + } - $arr["created"] = $single_conv->object->published; - $arr["edited"] = $single_conv->object->published; + $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue; + $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue; + $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue; - $arr["author-name"] = $single_conv->object->actor->displayName; - if ($arr["owner-name"] == '') { - $arr["author-name"] = $single_conv->object->actor->contact->displayName; - } - $arr["author-link"] = $single_conv->object->actor->url; - $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]); + $orig_contact = $contact; + $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false); - $arr["app"] = $single_conv->object->provider->displayName."#"; - //$arr["verb"] = $single_conv->object->verb; + $item["author-name"] = $orig_author["author-name"]; + $item["author-link"] = $orig_author["author-link"]; + $item["author-avatar"] = $orig_author["author-avatar"]; - $arr["location"] = $single_conv->object->location->displayName; - $arr["coord"] = trim($single_conv->object->location->lat." ".$single_conv->object->location->lon); - } - } + $item["body"] = html2bbcode($orig_body); + $item["created"] = $orig_created; + $item["edited"] = $orig_edited; - if ($arr["location"] == "") - unset($arr["location"]); + $item["uri"] = $orig_uri; - if ($arr["coord"] == "") - unset($arr["coord"]); + $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue; - // Copy fields from given item array - if (isset($item["uri"]) && (($item["uri"] == $arr["uri"]) || ($item["uri"] == $single_conv->id))) { - logger('Use stored item array for item with URI '.$item["uri"], LOGGER_DEBUG); - $newitem = item_store($item); - $item = array(); - $item_stored = $newitem; - } else { - $newitem = item_store($arr); - } + $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue; - if (!$newitem) { - logger("Item wasn't stored ".print_r($arr, true), LOGGER_DEBUG); - continue; - } - - logger('Stored new item '.$plink.' for parent '.$arr["parent-uri"].' under id '.$newitem, LOGGER_DEBUG); - - // Add the conversation entry (but don't fetch the whole conversation) - self::store_conversation($newitem, $conversation_url); - - // If the newly created item is the top item then change the parent settings of the thread - // This shouldn't happen anymore. This is supposed to be absolote. - if ($arr["uri"] == $first_id) { - logger('setting new parent to id '.$newitem); - $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1", - intval($uid), intval($newitem)); - if ($new_parents) - $parent = $new_parents[0]; + $inreplyto = $xpath->query('thr:in-reply-to', $activityobjects); + if (is_object($inreplyto->item(0))) { + foreach ($inreplyto->item(0)->attributes AS $attributes) { + if ($attributes->name == "ref") { + $item["parent-uri"] = $attributes->textContent; + } } } - if (($item_stored < 0) && (count($item) > 0)) { + return $link_data; + } - if (get_config('system','ostatus_full_threads')) { - $details = self::get_actor_details($item["owner-link"], $uid, $item["contact-id"]); - if ($details["not_following"]) { - logger("Don't import uri ".$item["uri"]." because user ".$uid." doesn't follow the person ".$item["owner-link"], LOGGER_DEBUG); - return false; + /** + * @brief Processes links in the XML + * + * @param object $links The xml data that contain links + * @param array $item The item array + * + * @return array with data from the links + */ + private static function processLinks($links, &$item) { + $link_data = array('add_body' => '', 'self' => ''); + + foreach ($links AS $link) { + $attribute = self::read_attributes($link); + + if (($attribute['rel'] != "") && ($attribute['href'] != "")) { + switch ($attribute['rel']) { + case "alternate": + $item["plink"] = $attribute['href']; + if (($item["object-type"] == ACTIVITY_OBJ_QUESTION) || + ($item["object-type"] == ACTIVITY_OBJ_EVENT)) { + $item["body"] .= add_page_info($attribute['href']); + } + break; + case "ostatus:conversation": + $link_data['conversation'] = $attribute['href']; + $item['conversation-href'] = $link_data['conversation']; + if (!isset($item['conversation-uri'])) { + $item['conversation-uri'] = $item['conversation-href']; + } + break; + case "enclosure": + $filetype = strtolower(substr($attribute['type'], 0, strpos($attribute['type'],'/'))); + if ($filetype == 'image') { + $link_data['add_body'] .= "\n[img]".$attribute['href'].'[/img]'; + } else { + if (strlen($item["attach"])) { + $item["attach"] .= ','; + } + if (!isset($attribute['length'])) { + $attribute['length'] = "0"; + } + $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]'; + } + break; + case "related": + if ($item["object-type"] != ACTIVITY_OBJ_BOOKMARK) { + if (!isset($item["parent-uri"])) { + $item["parent-uri"] = $attribute['href']; + } + $link_data['related'] = $attribute['href']; + } else { + $item["body"] .= add_page_info($attribute['href']); + } + break; + case "self": + if ($item["plink"] == '') { + $item["plink"] = $attribute['href']; + } + $link_data['self'] = $attribute['href']; + break; } } - - $item_stored = item_store($item, $all_threads); - if ($item_stored) { - logger("Uri ".$item["uri"]." wasn't found in conversation ".$conversation_url, LOGGER_DEBUG); - self::store_conversation($item_stored, $conversation_url); - } } - - return $item_stored; + return $link_data; } - /** - * @brief Stores conversation data into the database +/** + * @brief Create an url out of an uri * - * @param integer $itemid The id of the item - * @param string $conversation_url The uri of the conversation + * @param string $href URI in the format "parameter1:parameter1:..." + * + * @return string URL in the format http(s)://.... */ - private static function store_conversation($itemid, $conversation_url) { + public static function convert_href($href) { + $elements = explode(":",$href); - $conversation_url = self::convert_href($conversation_url); + if ((count($elements) <= 2) || ($elements[0] != "tag")) + return $href; - $messages = q("SELECT `uid`, `parent`, `created`, `received`, `guid` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); - if (!$messages) - return; - $message = $messages[0]; + $server = explode(",", $elements[1]); + $conversation = explode("=", $elements[2]); - // Store conversation url if not done before - $conversation = q("SELECT `url` FROM `term` WHERE `uid` = %d AND `oid` = %d AND `otype` = %d AND `type` = %d", - intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION)); + if ((count($elements) == 4) && ($elements[2] == "post")) + return "http://".$server[0]."/notice/".$elements[3]; - if (!$conversation) { - $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`, `created`, `received`, `guid`) VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s')", - intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), - dbesc($message["created"]), dbesc($conversation_url), dbesc($message["created"]), dbesc($message["received"]), dbesc($message["guid"])); - logger('Storing conversation url '.$conversation_url.' for id '.$itemid); + if ((count($conversation) != 2) || ($conversation[1] =="")) { + return $href; } + if ($elements[3] == "objectType=thread") { + return "http://".$server[0]."/conversation/".$conversation[1]; + } else { + return "http://".$server[0]."/notice/".$conversation[1]; + } + return $href; } /** diff --git a/include/photos.php b/include/photos.php index 6e0002bd47..49ba83fa3c 100644 --- a/include/photos.php +++ b/include/photos.php @@ -48,7 +48,7 @@ function photo_albums($uid, $update = false) { if (!Config::get('system', 'no_count', false)) { /// @todo This query needs to be renewed. It is really slow // At this time we just store the data in the cache - $albums = qu("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created` + $albums = q("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra GROUP BY `album` ORDER BY `created` DESC", @@ -58,7 +58,7 @@ function photo_albums($uid, $update = false) { ); } else { // This query doesn't do the count and is much faster - $albums = qu("SELECT DISTINCT(`album`), '' AS `total` + $albums = q("SELECT DISTINCT(`album`), '' AS `total` FROM `photo` USE INDEX (`uid_album_scale_created`) WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra", intval($uid), diff --git a/include/poller.php b/include/poller.php index 9758ab9464..d43257fc9f 100644 --- a/include/poller.php +++ b/include/poller.php @@ -303,6 +303,9 @@ function poller_exec_function($queue, $funcname, $argv) { $up_duration = number_format(microtime(true) - $poller_up_start, 3); + // Reset global data to avoid interferences + unset($_SESSION); + $funcname($argv, $argc); $a->process_id = $old_process_id; diff --git a/include/session.php b/include/session.php index 5194e7ef0e..af871b28a1 100644 --- a/include/session.php +++ b/include/session.php @@ -2,6 +2,8 @@ // Session management functions. These provide database storage of PHP // session info. +use Friendica\Core\Config; + require_once('include/cache.php'); $session_exists = 0; @@ -114,6 +116,10 @@ ini_set('session.gc_probability', $gc_probability); ini_set('session.use_only_cookies', 1); ini_set('session.cookie_httponly', 1); +if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) { + ini_set('session.cookie_secure', 1); +} + if (!get_config('system', 'disable_database_session')) { session_set_save_handler('ref_session_open', 'ref_session_close', 'ref_session_read', 'ref_session_write', diff --git a/include/socgraph.php b/include/socgraph.php index 621085b0ee..f0a855d70c 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -1158,8 +1158,9 @@ function poco_check_server($server_url, $network = "", $force = false) { $network = NETWORK_OSTATUS; } } - if (strstr($orig_version, 'Pleroma')) { + if (strstr($orig_version.$version, 'Pleroma')) { $platform = 'Pleroma'; + $version = trim(str_replace('Pleroma', '', $version)); } } @@ -2238,22 +2239,22 @@ function update_gcontact($contact) { if ($update) { logger("Update gcontact for ".$contact["url"], LOGGER_DEBUG); - - q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s', - `birthday` = '%s', `gender` = '%s', `keywords` = '%s', `hide` = %d, `nsfw` = %d, - `contact-type` = %d, `alias` = '%s', `notify` = '%s', `url` = '%s', - `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s', - `server_url` = '%s', `connect` = '%s' - WHERE `nurl` = '%s' AND (`generation` = 0 OR `generation` >= %d)", - dbesc($contact["photo"]), dbesc($contact["name"]), dbesc($contact["nick"]), - dbesc($contact["addr"]), dbesc($contact["network"]), dbesc($contact["birthday"]), - dbesc($contact["gender"]), dbesc($contact["keywords"]), intval($contact["hide"]), - intval($contact["nsfw"]), intval($contact["contact-type"]), dbesc($contact["alias"]), - dbesc($contact["notify"]), dbesc($contact["url"]), dbesc($contact["location"]), - dbesc($contact["about"]), intval($contact["generation"]), dbesc(dbm::date($contact["updated"])), - dbesc($contact["server_url"]), dbesc($contact["connect"]), - dbesc(normalise_link($contact["url"])), intval($contact["generation"])); - + $condition = array('`nurl` = ? AND (`generation` = 0 OR `generation` >= ?)', + normalise_link($contact["url"]), $contact["generation"]); + $contact["updated"] = dbm::date($contact["updated"]); + + $updated = array('photo' => $contact['photo'], 'name' => $contact['name'], + 'nick' => $contact['nick'], 'addr' => $contact['addr'], + 'network' => $contact['network'], 'birthday' => $contact['birthday'], + 'gender' => $contact['gender'], 'keywords' => $contact['keywords'], + 'hide' => $contact['hide'], 'nsfw' => $contact['nsfw'], + 'contact-type' => $contact['contact-type'], 'alias' => $contact['alias'], + 'notify' => $contact['notify'], 'url' => $contact['url'], + 'location' => $contact['location'], 'about' => $contact['about'], + 'generation' => $contact['generation'], 'updated' => $contact['updated'], + 'server_url' => $contact['server_url'], 'connect' => $contact['connect']); + + dba::update('gcontact', $updated, $condition, $fields); // Now update the contact entry with the user id "0" as well. // This is used for the shadow copies of public items. @@ -2261,20 +2262,25 @@ function update_gcontact($contact) { dbesc(normalise_link($contact["url"]))); if (dbm::is_result($r)) { - logger("Update shadow contact ".$r[0]["id"], LOGGER_DEBUG); + logger("Update public contact ".$r[0]["id"], LOGGER_DEBUG); update_contact_avatar($contact["photo"], 0, $r[0]["id"]); - q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s', - `network` = '%s', `bd` = '%s', `gender` = '%s', - `keywords` = '%s', `alias` = '%s', `contact-type` = %d, - `url` = '%s', `location` = '%s', `about` = '%s' - WHERE `id` = %d", - dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["addr"]), - dbesc($contact["network"]), dbesc($contact["birthday"]), dbesc($contact["gender"]), - dbesc($contact["keywords"]), dbesc($contact["alias"]), intval($contact["contact-type"]), - dbesc($contact["url"]), dbesc($contact["location"]), dbesc($contact["about"]), - intval($r[0]["id"])); + $fields = array('name', 'nick', 'addr', + 'network', 'bd', 'gender', + 'keywords', 'alias', 'contact-type', + 'url', 'location', 'about'); + $old_contact = dba::select('contact', $fields, array('id' => $r[0]["id"]), array('limit' => 1)); + + // Update it with the current values + $fields = array('name' => $contact['name'], 'nick' => $contact['nick'], + 'addr' => $contact['addr'], 'network' => $contact['network'], + 'bd' => $contact['birthday'], 'gender' => $contact['gender'], + 'keywords' => $contact['keywords'], 'alias' => $contact['alias'], + 'contact-type' => $contact['contact-type'], 'url' => $contact['url'], + 'location' => $contact['location'], 'about' => $contact['about']); + + dba::update('contact', $fields, array('id' => $r[0]["id"]), $old_contact); } } diff --git a/include/text.php b/include/text.php index 9b7b47a773..66d4f17ea6 100644 --- a/include/text.php +++ b/include/text.php @@ -748,7 +748,7 @@ function logger($msg, $level = 0) { $callers = debug_backtrace(); $logline = sprintf("%s@%s\t[%s]:%s:%s:%s\t%s\n", - datetime_convert(), + datetime_convert('UTC', 'UTC', 'now', 'Y-m-d\TH:i:s\Z'), $process_id, $LOGGER_LEVELS[$level], basename($callers[0]['file']), @@ -1424,15 +1424,8 @@ function prepare_body(&$item, $attach = false, $preview = false) { $title = ((strlen(trim($mtch[4]))) ? escape_tags(trim($mtch[4])) : escape_tags($mtch[1])); $title .= ' ' . $mtch[2] . ' ' . t('bytes'); - if (($filetype == 'image') AND ($item['network'] == NETWORK_OSTATUS)) { - /// @todo Respect the spoiler for mastodon - $icon = ''; - $s .= '
' . $icon . ''; - } else { - $icon = '
'; - $as .= '' . $icon . ''; - } - + $icon = '
'; + $as .= '' . $icon . ''; } } } diff --git a/include/threads.php b/include/threads.php index 4cb8815693..8e58a04b31 100644 --- a/include/threads.php +++ b/include/threads.php @@ -16,11 +16,7 @@ function add_thread($itemid, $onlyshadow = false) { $item['iid'] = $itemid; if (!$onlyshadow) { - $result = dbq("INSERT INTO `thread` (`" - .implode("`, `", array_keys($item)) - ."`) VALUES ('" - .implode("', '", array_values($item)) - ."')"); + $result = dba::insert('thread', $item); logger("Add thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG); } @@ -244,18 +240,19 @@ function delete_thread_uri($itemuri, $uid) { function delete_thread($itemid, $itemuri = "") { $item = q("SELECT `uid` FROM `thread` WHERE `iid` = %d", intval($itemid)); + // Using dba::delete at this time could delete the associated item entries $result = q("DELETE FROM `thread` WHERE `iid` = %d", intval($itemid)); logger("delete_thread: Deleted thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG); if ($itemuri != "") { - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND NOT (`uid` IN (%d, 0))", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND NOT `deleted` AND NOT (`uid` IN (%d, 0))", dbesc($itemuri), intval($item["uid"]) ); if (!dbm::is_result($r)) { dba::delete('item', array('uri' => $itemuri, 'uid' => 0)); - logger("delete_thread: Deleted shadow for item ".$itemuri." - ".print_r($result, true), LOGGER_DEBUG); + logger("delete_thread: Deleted shadow for item ".$itemuri, LOGGER_DEBUG); } } } diff --git a/include/user.php b/include/user.php index 4ed5e57f3d..a05bd831a8 100644 --- a/include/user.php +++ b/include/user.php @@ -404,7 +404,7 @@ function send_register_pending_eml($email, $sitename, $username) { $body = sprintf($body, $username, $sitename); return notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $email, 'subject'=> sprintf( t('Registration at %s'), $sitename), 'body' => $body)); @@ -450,7 +450,7 @@ function send_register_open_eml($email, $sitename, $siteurl, $username, $passwor $body = sprintf($body, $email, $sitename, $siteurl, $username, $password); return notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $email, 'subject'=> sprintf( t('Registration details for %s'), $sitename), 'preamble'=> $preamble, diff --git a/index.php b/index.php index 5b4cea756b..d3d2e42ae6 100644 --- a/index.php +++ b/index.php @@ -489,6 +489,19 @@ $profile = $a->profile; header("X-Friendica-Version: " . FRIENDICA_VERSION); header("Content-type: text/html; charset=utf-8"); +if (Config::get('system', 'hsts') && (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL)) { + header("Strict-Transport-Security: max-age=31536000"); +} + +// Some security stuff +header('X-Content-Type-Options: nosniff'); +header('X-XSS-Protection: 1; mode=block'); +header('X-Permitted-Cross-Domain-Policies: none'); +header('X-Frame-Options: sameorigin'); + +// Things like embedded OSM maps don't work, when this is enabled +// header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' https: data:; media-src 'self' https:; child-src 'self' https:; object-src 'none'"); + /* * We use $_GET["mode"] for special page templates. So we will check if we have * to load another page template than the default one. diff --git a/mod/admin.php b/mod/admin.php index c5043f2252..ee95a180a5 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -457,7 +457,7 @@ function admin_page_federation(App $a) { foreach ($platforms as $p) { // get a total count for the platform, the name and version of the // highest version and the protocol tpe - $c = qu('SELECT COUNT(*) AS `total`, ANY_VALUE(`platform`) AS `platform`, + $c = q('SELECT COUNT(*) AS `total`, ANY_VALUE(`platform`) AS `platform`, ANY_VALUE(`network`) AS `network`, MAX(`version`) AS `version` FROM `gserver` WHERE `platform` LIKE "%s" AND `last_contact` >= `last_failure` ORDER BY `version` ASC;', $p); @@ -465,7 +465,7 @@ function admin_page_federation(App $a) { // what versions for that platform do we know at all? // again only the active nodes - $v = qu('SELECT COUNT(*) AS `total`, `version` FROM `gserver` + $v = q('SELECT COUNT(*) AS `total`, `version` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `platform` LIKE "%s" GROUP BY `version` ORDER BY `version`;', $p); @@ -644,13 +644,13 @@ function admin_page_summary(App $a) { logger('accounts: '.print_r($accounts,true),LOGGER_DATA); - $r = qu("SELECT COUNT(`id`) AS `count` FROM `register`"); + $r = q("SELECT COUNT(`id`) AS `count` FROM `register`"); $pending = $r[0]['count']; - $r = qu("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1"); + $r = q("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1"); $queue = (($r) ? $r[0]['total'] : 0); - $r = qu("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE NOT `done`"); + $r = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE NOT `done`"); $workerqueue = (($r) ? $r[0]['total'] : 0); // We can do better, but this is a quick queue status @@ -1395,7 +1395,7 @@ function admin_page_users_post(App $a) { $body = sprintf($body, System::baseUrl(), $nu['email'], $result['password'], $a->config['sitename']); notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $nu['email'], 'subject'=> sprintf(t('Registration details for %s'), $a->config['sitename']), 'preamble'=> $preamble, @@ -1487,7 +1487,7 @@ function admin_page_users(App $a) { /* get users */ - $total = qu("SELECT COUNT(*) AS `total` FROM `user` WHERE 1"); + $total = q("SELECT COUNT(*) AS `total` FROM `user` WHERE 1"); if (count($total)) { $a->set_pager_total($total[0]['total']); $a->set_pager_itemspage(100); @@ -1522,7 +1522,7 @@ function admin_page_users(App $a) { $sql_order = "`".str_replace('.','`.`',$order)."`"; $sql_order_direction = ($order_direction === "+")?"ASC":"DESC"; - $users = qu("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date` + $users = q("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date` FROM `user` INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self` WHERE `user`.`verified` diff --git a/mod/contacts.php b/mod/contacts.php index bbbd088cd1..2539360552 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -574,9 +574,15 @@ function contacts_content(App $a) { if ($contact['network'] == NETWORK_DFRN) $profile_select = contact_profile_assign($contact['profile-id'],(($contact['network'] !== NETWORK_DFRN) ? true : false)); - if (in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS)) && - ($contact['rel'] == CONTACT_IS_FOLLOWER)) - $follow = System::baseUrl(true)."/follow?url=".urlencode($contact["url"]); + if (in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS))) { + if ($contact['rel'] == CONTACT_IS_FOLLOWER) { + $follow = System::baseUrl(true)."/follow?url=".urlencode($contact["url"]); + $follow_text = t("Connect/Follow"); + } elseif ($contact['rel'] == CONTACT_IS_FRIEND) { + $follow = System::baseUrl(true)."/unfollow?url=".urlencode($contact["url"]); + $follow_text = t("Disconnect/Unfollow"); + } + } // Load contactact related actions like hide, suggest, delete and others $contact_actions = contact_actions($contact); @@ -613,7 +619,7 @@ function contacts_content(App $a) { '$last_update' => $last_update, '$udnow' => t('Update now'), '$follow' => $follow, - '$follow_text' => t("Connect/Follow"), + '$follow_text' => $follow_text, '$profile_select' => $profile_select, '$contact_id' => $contact['id'], '$block_text' => (($contact['blocked']) ? t('Unblock') : t('Block') ), diff --git a/mod/delegate.php b/mod/delegate.php index 4d35d46c70..4bccf1142a 100644 --- a/mod/delegate.php +++ b/mod/delegate.php @@ -35,10 +35,7 @@ function delegate_content(App $a) { dbesc(normalise_link(System::baseUrl() . '/profile/' . $r[0]['nickname'])) ); if (dbm::is_result($r)) { - q("insert into manage ( uid, mid ) values ( %d , %d ) ", - intval($a->argv[2]), - intval(local_user()) - ); + dba::insert('manage', array('uid' => $a->argv[2], 'mid' => local_user())); } } goaway(System::baseUrl() . '/delegate'); diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 9c64c8c883..0e99b26c32 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -352,8 +352,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) { dbesc(NETWORK_DFRN), intval($contact_id) ); - } - else { + } else { // $network !== NETWORK_DFRN @@ -361,18 +360,16 @@ function dfrn_confirm_post(App $a, $handsfree = null) { $notify = (($contact['notify']) ? $contact['notify'] : ''); $poll = (($contact['poll']) ? $contact['poll'] : ''); - if((! $contact['notify']) || (! $contact['poll'])) { - $arr = Probe::lrdd($contact['url']); - if(count($arr)) { - foreach($arr as $link) { - if($link['@attributes']['rel'] === 'salmon') - $notify = $link['@attributes']['href']; - if($link['@attributes']['rel'] === NAMESPACE_FEED) - $poll = $link['@attributes']['href']; - } - } + $arr = Probe::uri($contact['url']); + if (empty($contact['notify'])) { + $notify = $arr['notify']; + } + if (empty($contact['poll'])) { + $poll = $arr['poll']; } + $addr = $arr['addr']; + $new_relation = $contact['rel']; $writable = $contact['writable']; @@ -394,6 +391,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) { $r = q("UPDATE `contact` SET `name-date` = '%s', `uri-date` = '%s', + `addr` = '%s', `notify` = '%s', `poll` = '%s', `blocked` = 0, @@ -406,6 +404,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) { ", dbesc(datetime_convert()), dbesc(datetime_convert()), + dbesc($addr), dbesc($notify), dbesc($poll), dbesc($network), diff --git a/mod/directory.php b/mod/directory.php index cb0b1f4cd1..9e004ab5d8 100644 --- a/mod/directory.php +++ b/mod/directory.php @@ -71,7 +71,7 @@ function directory_content(App $a) { $publish = ((get_config('system','publish_all')) ? '' : " AND `publish` = 1 " ); - $r = $db->q("SELECT COUNT(*) AS `total` FROM `profile` + $r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra "); if (dbm::is_result($r)) @@ -81,11 +81,11 @@ function directory_content(App $a) { $limit = intval($a->pager['start']).",".intval($a->pager['itemspage']); - $r = $db->q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, `contact`.`addr`, `contact`.`url` AS profile_url FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid` - WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `contact`.`self` $sql_extra $order LIMIT ".$limit); + WHERE `is-default` $publish AND `user`.`blocked` = 0 AND `contact`.`self` $sql_extra $order LIMIT ".$limit); if (dbm::is_result($r)) { if (in_array('small', $a->argv)) { diff --git a/mod/display.php b/mod/display.php index 56f7aa6442..37d3a123a8 100644 --- a/mod/display.php +++ b/mod/display.php @@ -17,13 +17,7 @@ function display_init(App $a) { if ($a->argc == 3) { if (substr($a->argv[2], -5) == '.atom') { $item_id = substr($a->argv[2], 0, -5); - $xml = dfrn::itemFeed($item_id); - if ($xml == '') { - http_status_exit(500); - } - header("Content-type: application/atom+xml"); - echo $xml; - killme(); + displayShowFeed($item_id); } } @@ -70,6 +64,12 @@ function display_init(App $a) { AND `item`.`guid` = ? LIMIT 1", $a->argv[1]); } if (dbm::is_result($r)) { + + if (strstr($_SERVER['HTTP_ACCEPT'], 'application/atom+xml')) { + logger('Directly serving XML for id '.$r["id"], LOGGER_DEBUG); + displayShowFeed($r["id"]); + } + if ($r["id"] != $r["parent"]) { $r = dba::fetch_first("SELECT `id`, `author-name`, `author-link`, `author-avatar`, `network`, `body`, `uid`, `owner-link` FROM `item` WHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated` @@ -293,7 +293,7 @@ function display_content(App $a, $update = 0) { } // We are displaying an "alternate" link if that post was public. See issue 2864 - $is_public = dba::exists('item', array('id' => $item_id, 'private' => false, 'wall' => true)); + $is_public = dba::exists('item', array('id' => $item_id, 'private' => false)); if ($is_public) { $alternate = System::baseUrl().'/display/'.$nick.'/'.$item_id.'.atom'; } else { @@ -499,3 +499,12 @@ function display_content(App $a, $update = 0) { return $o; } +function displayShowFeed($item_id) { + $xml = dfrn::itemFeed($item_id); + if ($xml == '') { + http_status_exit(500); + } + header("Content-type: application/atom+xml"); + echo $xml; + killme(); +} diff --git a/mod/follow.php b/mod/follow.php index 4f2b45e3bf..a76a0f188f 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -8,6 +8,47 @@ require_once 'include/follow.php'; require_once 'include/Contact.php'; require_once 'include/contact_selectors.php'; +function follow_post(App $a) { + + if (! local_user()) { + notice( t('Permission denied.') . EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + if ($_REQUEST['cancel']) { + goaway($_SESSION['return_url']); + } + + $uid = local_user(); + $url = notags(trim($_REQUEST['url'])); + $return_url = $_SESSION['return_url']; + + // Makes the connection request for friendica contacts easier + // This is just a precaution if maybe this page is called somewhere directly via POST + $_SESSION["fastlane"] = $url; + + $result = new_contact($uid,$url,true); + + if ($result['success'] == false) { + if ($result['message']) { + notice($result['message']); + } + goaway($return_url); + } elseif ($result['cid']) { + goaway(System::baseUrl().'/contacts/'.$result['cid']); + } + + info( t('Contact added').EOL); + + if (strstr($return_url,'contacts')) { + goaway(System::baseUrl().'/contacts/'.$contact_id); + } + + goaway($return_url); + // NOTREACHED +} + function follow_content(App $a) { if (! local_user()) { @@ -99,13 +140,6 @@ function follow_content(App $a) { $r[0]["about"] = ""; } - $header = $ret["name"]; - - if ($ret["addr"] != "") { - $header .= " <".$ret["addr"].">"; - } - - //$header .= " (".network_to_name($ret['network'], $ret['url']).")"; $header = t("Connect/Follow"); $o = replace_macros($tpl,array( @@ -154,44 +188,3 @@ function follow_content(App $a) { return $o; } - -function follow_post(App $a) { - - if (! local_user()) { - notice( t('Permission denied.') . EOL); - goaway($_SESSION['return_url']); - // NOTREACHED - } - - if ($_REQUEST['cancel']) { - goaway($_SESSION['return_url']); - } - - $uid = local_user(); - $url = notags(trim($_REQUEST['url'])); - $return_url = $_SESSION['return_url']; - - // Makes the connection request for friendica contacts easier - // This is just a precaution if maybe this page is called somewhere directly via POST - $_SESSION["fastlane"] = $url; - - $result = new_contact($uid,$url,true); - - if ($result['success'] == false) { - if ($result['message']) { - notice($result['message']); - } - goaway($return_url); - } elseif ($result['cid']) { - goaway(System::baseUrl().'/contacts/'.$result['cid']); - } - - info( t('Contact added').EOL); - - if (strstr($return_url,'contacts')) { - goaway(System::baseUrl().'/contacts/'.$contact_id); - } - - goaway($return_url); - // NOTREACHED -} diff --git a/mod/lostpass.php b/mod/lostpass.php index a2e69ffb09..e7e1a33bd0 100644 --- a/mod/lostpass.php +++ b/mod/lostpass.php @@ -69,7 +69,7 @@ function lostpass_post(App $a) { $body = sprintf($body, $resetlink, System::baseUrl(), $email); notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $email, 'subject'=> sprintf( t('Password reset requested at %s'),$sitename), 'preamble'=> $preamble, @@ -145,7 +145,7 @@ function lostpass_content(App $a) { $body = sprintf($body, System::baseUrl(), $email, $new_password); notification(array( - 'type' => "SYSTEM_EMAIL", + 'type' => SYSTEM_EMAIL, 'to_email' => $email, 'subject'=> sprintf( t('Your password has been changed at %s'),$sitename), 'preamble'=> $preamble, diff --git a/mod/network.php b/mod/network.php index 796d35b866..a78500174e 100644 --- a/mod/network.php +++ b/mod/network.php @@ -2,13 +2,38 @@ use Friendica\App; use Friendica\Core\System; +use Friendica\Core\Config; +use Friendica\Core\PConfig; + +require_once 'include/conversation.php'; +require_once 'include/group.php'; +require_once 'include/contact_widgets.php'; +require_once 'include/items.php'; +require_once 'include/ForumManager.php'; +require_once 'include/acl_selectors.php'; function network_init(App $a) { - if (! local_user()) { - notice( t('Permission denied.') . EOL); + if (!local_user()) { + notice(t('Permission denied.') . EOL); return; } + $search = (x($_GET, 'search') ? escape_tags($_GET['search']) : ''); + + if (($search != '') && !empty($_GET['submit'])) { + goaway('search?search='.urlencode($search)); + } + + if (x($_GET, 'save')) { + $exists = dba::exists('search', array('uid' => local_user(), 'term' => $search)); + if (!$exists) { + dba::insert('search', array('uid' => local_user(), 'term' => $search)); + } + } + if (x($_GET, 'remove')) { + dba::delete('search', array('uid' => local_user(), 'term' => $search)); + } + $is_a_date_query = false; if (x($_GET, 'cid') && intval($_GET['cid']) != 0) { $cid = $_GET['cid']; @@ -30,13 +55,13 @@ function network_init(App $a) { array_shift($query_array); // fetch last used network view and redirect if needed - if (! $is_a_date_query) { + if (!$is_a_date_query) { $sel_tabs = network_query_get_sel_tab($a); $sel_nets = network_query_get_sel_net(); $sel_groups = network_query_get_sel_group($a); - $last_sel_tabs = get_pconfig(local_user(), 'network.view','tab.selected'); - $last_sel_nets = get_pconfig(local_user(), 'network.view', 'net.selected'); - $last_sel_groups = get_pconfig(local_user(), 'network.view', 'group.selected'); + $last_sel_tabs = PConfig::get(local_user(), 'network.view','tab.selected'); + $last_sel_nets = PConfig::get(local_user(), 'network.view', 'net.selected'); + $last_sel_groups = PConfig::get(local_user(), 'network.view', 'group.selected'); $remember_tab = ($sel_tabs[0] === 'active' && is_array($last_sel_tabs) && $last_sel_tabs[0] !== 'active'); $remember_net = ($sel_nets === false && $last_sel_nets && $last_sel_nets !== 'all'); @@ -47,7 +72,7 @@ function network_init(App $a) { if ($remember_group) { $net_baseurl .= '/' . $last_sel_groups; // Note that the group number must come before the "/new" tab selection - } elseif($sel_groups !== false) { + } elseif ($sel_groups !== false) { $net_baseurl .= '/' . $sel_groups; } @@ -95,12 +120,11 @@ function network_init(App $a) { if ($remember_net) { $net_args['nets'] = $last_sel_nets; - } - else if($sel_nets!==false) { + } elseif ($sel_nets!==false) { $net_args['nets'] = $sel_nets; } - if($remember_tab || $remember_net || $remember_group) { + if ($remember_tab || $remember_net || $remember_group) { $net_args = array_merge($query_array, $net_args); $net_queries = build_querystring($net_args); @@ -117,57 +141,23 @@ function network_init(App $a) { $group_id = (($a->argc > 1 && is_numeric($a->argv[1])) ? intval($a->argv[1]) : 0); - set_pconfig(local_user(), 'network.view', 'group.selected', $group_id); + PConfig::set(local_user(), 'network.view', 'group.selected', $group_id); - require_once 'include/group.php'; - require_once 'include/contact_widgets.php'; - require_once 'include/items.php'; - require_once 'include/ForumManager.php'; - - if (! x($a->page, 'aside')) { + if (!x($a->page, 'aside')) { $a->page['aside'] = ''; } - $search = ((x($_GET, 'search')) ? escape_tags($_GET['search']) : ''); - - if (x($_GET, 'save')) { - $r = q("SELECT * FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1", - intval(local_user()), - dbesc($search) - ); - if (! dbm::is_result($r)) { - q("INSERT INTO `search` ( `uid`,`term` ) VALUES ( %d, '%s') ", - intval(local_user()), - dbesc($search) - ); - } - } - if (x($_GET, 'remove')) { - q("DELETE FROM `search` WHERE `uid` = %d AND `term` = '%s'", - intval(local_user()), - dbesc($search) - ); - } - - // search terms header - if (x($_GET, 'search')) { - $a->page['content'] .= replace_macros(get_markup_template("section_title.tpl"),array( - '$title' => sprintf( t('Results for: %s'), $search) - )); - } - $a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : ''); $a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? ForumManager::widget(local_user(),$cid) : ''); $a->page['aside'] .= posted_date_widget('network',local_user(),false); $a->page['aside'] .= networks_widget('network',(x($_GET, 'nets') ? $_GET['nets'] : '')); $a->page['aside'] .= saved_searches($search); $a->page['aside'] .= fileas_widget('network',(x($_GET, 'file') ? $_GET['file'] : '')); - } function saved_searches($search) { - if (! feature_enabled(local_user(),'savedsearch')) { + if (!feature_enabled(local_user(),'savedsearch')) { return ''; } @@ -186,25 +176,19 @@ function saved_searches($search) { $o = ''; - $r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d", - intval(local_user()) - ); - + $terms = dba::select('search', array('id', 'term'), array('uid' => local_user())); $saved = array(); - if (dbm::is_result($r)) { - foreach ($r as $rr) { - $saved[] = array( - 'id' => $rr['id'], - 'term' => $rr['term'], - 'encodedterm' => urlencode($rr['term']), - 'delete' => t('Remove term'), - 'selected' => ($search==$rr['term']), - ); - } + while ($rr = dba::fetch($terms)) { + $saved[] = array( + 'id' => $rr['id'], + 'term' => $rr['term'], + 'encodedterm' => urlencode($rr['term']), + 'delete' => t('Remove term'), + 'selected' => ($search==$rr['term']), + ); } - $tpl = get_markup_template("saved_searches_aside.tpl"); $o = replace_macros($tpl, array( '$title' => t('Saved Searches'), @@ -214,7 +198,6 @@ function saved_searches($search) { )); return $o; - } /** @@ -230,7 +213,7 @@ function saved_searches($search) { * '/network?f=&bmark=1', => $bookmarked_active = 'active' * '/network?f=&spam=1', => $spam_active = 'active' * - * @return Array ( $no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active ); + * @return Array ($no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); */ function network_query_get_sel_tab(App $a) { $no_active=''; @@ -238,33 +221,28 @@ function network_query_get_sel_tab(App $a) { $new_active = ''; $bookmarked_active = ''; $all_active = ''; - $search_active = ''; $conv_active = ''; $spam_active = ''; $postord_active = ''; - if(($a->argc > 1 && $a->argv[1] === 'new') + if (($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new')) { $new_active = 'active'; } - if(x($_GET,'search')) { - $search_active = 'active'; - } - - if(x($_GET,'star')) { + if (x($_GET,'star')) { $starred_active = 'active'; } - if(x($_GET,'bmark')) { + if (x($_GET,'bmark')) { $bookmarked_active = 'active'; } - if(x($_GET,'conv')) { + if (x($_GET,'conv')) { $conv_active = 'active'; } - if(x($_GET,'spam')) { + if (x($_GET,'spam')) { $spam_active = 'active'; } @@ -274,7 +252,6 @@ function network_query_get_sel_tab(App $a) { && ($starred_active == '') && ($bookmarked_active == '') && ($conv_active == '') - && ($search_active == '') && ($spam_active == '')) { $no_active = 'active'; } @@ -296,7 +273,7 @@ function network_query_get_sel_tab(App $a) { function network_query_get_sel_net() { $network = false; - if(x($_GET,'nets')) { + if (x($_GET,'nets')) { $network = $_GET['nets']; } @@ -306,23 +283,214 @@ function network_query_get_sel_net() { function network_query_get_sel_group(App $a) { $group = false; - if($a->argc >= 2 && is_numeric($a->argv[1])) { + if ($a->argc >= 2 && is_numeric($a->argv[1])) { $group = $a->argv[1]; } return $group; } +/** + * @brief Sets the pager data and returns SQL + * + * @param App $a The global App + * @param integer $update Used for the automatic reloading + * @return string SQL with the appropriate LIMIT clause + */ +function networkPager($a, $update) { + if ($update) { + // only setup pagination on initial page view + return ' LIMIT 100'; -function network_content(App $a, $update = 0) { + } + + // check if we serve a mobile device and get the user settings + // accordingly + if ($a->is_mobile) { + $itemspage_network = PConfig::get(local_user(),'system','itemspage_mobile_network'); + $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20); + } else { + $itemspage_network = PConfig::get(local_user(),'system','itemspage_network'); + $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40); + } + + // now that we have the user settings, see if the theme forces + // a maximum item number which is lower then the user choice + if (($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network)) { + $itemspage_network = $a->force_max_items; + } + + $a->set_pager_itemspage($itemspage_network); + + return sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); +} - require_once('include/conversation.php'); +/** + * @brief Sets items as seen + * + * @param array $condition The array with the SQL condition + */ +function networkSetSeen($condition) { + if (empty($condition)) { + return; + } + + $unseen = dba::exists('item', $condition); + + if ($unseen) { + $r = dba::update('item', array('unseen' => false), $condition); + } +} + +/** + * @brief Create the conversation HTML + * + * @param App $a The global App + * @param array $items Items of the conversation + * @param string $mode Display mode for the conversation + * @param integer $update Used for the automatic reloading + * @return string HTML of the conversation + */ +function networkConversation($a, $items, $mode, $update) { + // Set this so that the conversation function can find out contact info for our wall-wall items + $a->page_contact = $a->contact; - if (! local_user()) { + $o .= conversation($a, $items, $mode, $update); + + if (!$update) { + if (PConfig::get(local_user(), 'system', 'infinite_scroll')) { + $o .= scroll_loader(); + } else { + $o .= alt_pager($a, count($items)); + } + } + + return $o; +} + +function network_content(App $a, $update = 0) { + if (!local_user()) { $_SESSION['return_url'] = $a->query_string; return login(false); } + /// @TODO Is this really necessary? $a is already available to hooks + $arr = array('query' => $a->query_string); + call_hooks('network_content_init', $arr); + + $nouveau = false; + + if ($a->argc > 1) { + for ($x = 1; $x < $a->argc; $x ++) { + if ($a->argv[$x] === 'new') { + $nouveau = true; + } + } + } + + if (x($_GET,'file')) { + $nouveau = true; + } + + if ($nouveau) { + $o = networkFlatView($a, $update); + } else { + $o = networkThreadedView($a, $update); + } + + return $o; +} + +/** + * @brief Get the network content in flat view + * + * @param App $a The global App + * @param integer $update Used for the automatic reloading + * @return string HTML of the network content in flat view + */ +function networkFlatView(App $a, $update = 0) { + + // Rawmode is used for fetching new content at the end of the page + $rawmode = (isset($_GET["mode"]) AND ($_GET["mode"] == "raw")); + + if (isset($_GET["last_id"])) { + $last_id = intval($_GET["last_id"]); + } else { + $last_id = 0; + } + + $o = ''; + + $file = ((x($_GET,'file')) ? $_GET['file'] : ''); + + PConfig::set(local_user(), 'network.view', 'net.selected', 'all'); + + if (!$update && !$rawmode) { + $tabs = network_tabs($a); + $o .= $tabs; + + nav_set_selected('network'); + + $x = array( + 'is_owner' => true, + 'allow_location' => $a->user['allow_location'], + 'default_location' => $a->user['default-location'], + 'nickname' => $a->user['nickname'], + 'lockstate'=> (((is_array($a->user) && + ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || + (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'), + 'default_perms' => get_acl_permissions($a->user), + 'acl' => populate_acl($a->user, true), + 'bang' => '', + 'visitor' => 'block', + 'profile_uid' => local_user(), + 'acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector + 'content' => '', + ); + + $o .= status_editor($a,$x); + + if (!Config::get('theme','hide_eventlist')) { + $o .= get_birthdays(); + $o .= get_events(); + } + } + + if (strlen($file)) { + $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", + dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user())); + } else { + $sql_post_table = " INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`"; + } + + $pager_sql = networkPager($a, $update); + + // show all items unthreaded in reverse created date order + $items = q("SELECT %s FROM `item` $sql_post_table %s + WHERE %s AND `item`.`uid` = %d + ORDER BY `item`.`id` DESC $pager_sql ", + item_fieldlists(), item_joins(), item_condition(), + intval($_SESSION['uid']) + ); + + $condition = array('unseen' => true, 'uid' => local_user()); + networkSetSeen($condition); + + $mode = 'network-new'; + $o .= networkConversation($a, $items, $mode, $update); + + return $o; +} + +/** + * @brief Get the network content in threaded view + * + * @param App $a The global App + * @param integer $update Used for the automatic reloading + * @return string HTML of the network content in flat view + */ +function networkThreadedView(App $a, $update = 0) { + // Rawmode is used for fetching new content at the end of the page $rawmode = (isset($_GET["mode"]) AND ($_GET["mode"] == "raw")); @@ -338,31 +506,20 @@ function network_content(App $a, $update = 0) { $last_id = 0; } - /// @TODO Is this really necessary? $a is already available to hooks - $arr = array('query' => $a->query_string); - call_hooks('network_content_init', $arr); - - $datequery = $datequery2 = ''; $group = 0; - $nouveau = false; - - if($a->argc > 1) { - for($x = 1; $x < $a->argc; $x ++) { - if(is_a_date_arg($a->argv[$x])) { - if($datequery) + if ($a->argc > 1) { + for ($x = 1; $x < $a->argc; $x ++) { + if (is_a_date_arg($a->argv[$x])) { + if ($datequery) { $datequery2 = escape_tags($a->argv[$x]); - else { + } else { $datequery = escape_tags($a->argv[$x]); $_GET['order'] = 'post'; } - } - elseif($a->argv[$x] === 'new') { - $nouveau = true; - } - elseif(intval($a->argv[$x])) { + } elseif (intval($a->argv[$x])) { $group = intval($a->argv[$x]); $def_acl = array('allow_gid' => '<' . $group . '>'); } @@ -371,52 +528,36 @@ function network_content(App $a, $update = 0) { $o = ''; - - - $contact_id = $a->cid; - - require_once('include/acl_selectors.php'); - $cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0); $star = ((x($_GET,'star')) ? intval($_GET['star']) : 0); $bmark = ((x($_GET,'bmark')) ? intval($_GET['bmark']) : 0); $order = ((x($_GET,'order')) ? notags($_GET['order']) : 'comment'); - $liked = ((x($_GET,'liked')) ? intval($_GET['liked']) : 0); $conv = ((x($_GET,'conv')) ? intval($_GET['conv']) : 0); - $spam = ((x($_GET,'spam')) ? intval($_GET['spam']) : 0); $nets = ((x($_GET,'nets')) ? $_GET['nets'] : ''); - $cmin = ((x($_GET,'cmin')) ? intval($_GET['cmin']) : 0); - $cmax = ((x($_GET,'cmax')) ? intval($_GET['cmax']) : 99); - $file = ((x($_GET,'file')) ? $_GET['file'] : ''); - - - if(x($_GET,'search') || x($_GET,'file')) - $nouveau = true; - if($cid) + if ($cid) { $def_acl = array('allow_cid' => '<' . intval($cid) . '>'); + } - if($nets) { - $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND network = '%s' AND `self` = 0", - intval(local_user()), - dbesc($nets) - ); + if ($nets) { + $r = dba::select('contact', array('id'), array('uid' => local_user(), 'network' => $nets), array('self' => false)); $str = ''; - if (dbm::is_result($r)) - foreach($r as $rr) - $str .= '<' . $rr['id'] . '>'; - if(strlen($str)) + while ($rr = dba::fetch($r)) { + $str .= '<' . $rr['id'] . '>'; + } + if (strlen($str)) { $def_acl = array('allow_cid' => $str); + } } - set_pconfig(local_user(), 'network.view', 'net.selected', ($nets ? $nets : 'all')); + PConfig::set(local_user(), 'network.view', 'net.selected', ($nets ? $nets : 'all')); - if(!$update && !$rawmode) { + if (!$update && !$rawmode) { $tabs = network_tabs($a); $o .= $tabs; - if($group) { - if(($t = group_public_members($group)) && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { + if ($group) { + if (($t = group_public_members($group)) && !PConfig::get(local_user(),'system','nowarn_insecure')) { notice(sprintf(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.", "Warning: This group contains %s members from a network that doesn't allow non public messages.", $t), $t).EOL); @@ -430,12 +571,15 @@ function network_content(App $a, $update = 0) { if ($cid) { // If $cid belongs to a communitity forum or a privat goup,.add a mention to the status editor - $contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND (`forum` OR `prv`) ", - intval($cid), - intval(local_user()) - ); - if ($contact) - $content = "@".$contact[0]["nick"]."+".$cid; + $condition = array("`id` = ? AND (`forum` OR `prv`)", $cid); + $contact = dba::select('contact', array('addr', 'nick'), $condition, array('limit' => 1)); + if (dbm::is_result($contact)) { + if ($contact["addr"] != '') { + $content = "@".$contact["addr"]; + } else { + $content = "@".$contact["nick"]."+".$cid; + } + } } $x = array( @@ -472,7 +616,7 @@ function network_content(App $a, $update = 0) { $sql_table = "`thread`"; $sql_parent = "`iid`"; - if ($nouveau || strlen($file) || $update) { + if ($update) { $sql_table = "`item`"; $sql_parent = "`parent`"; $sql_post_table = " INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`"; @@ -480,34 +624,25 @@ function network_content(App $a, $update = 0) { $sql_nets = (($nets) ? sprintf(" and $sql_table.`network` = '%s' ", dbesc($nets)) : ''); - if($group) { - $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($group), - intval($_SESSION['uid']) - ); - if (! dbm::is_result($r)) { - if($update) + if ($group) { + $r = dba::select('group', array('name'), array('id' => $group, 'uid' => $_SESSION['uid']), array('limit' => 1)); + if (!dbm::is_result($r)) { + if ($update) killme(); - notice( t('No such group') . EOL ); + notice(t('No such group') . EOL); goaway('network/0'); // NOTREACHED } $contacts = expand_groups(array($group)); - $gcontacts = expand_groups(array($group), false, true); - if((is_array($contacts)) && count($contacts)) { + if ((is_array($contacts)) && count($contacts)) { $contact_str_self = ""; - $gcontact_str_self = ""; $contact_str = implode(',',$contacts); - $gcontact_str = implode(',',$gcontacts); - $self = q("SELECT `contact`.`id`, `gcontact`.`id` AS `gid` FROM `contact` - INNER JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl` - WHERE `uid` = %d AND `self`", intval($_SESSION['uid'])); - if (count($self)) { - $contact_str_self = $self[0]["id"]; - $gcontact_str_self = $self[0]["gid"]; + $self = dba::select('contact', array('id'), array('uid' => $_SESSION['uid'], 'self' => true), array('limit' => 1)); + if (dbm::is_result($self)) { + $contact_str_self = $self["id"]; } $sql_post_table .= " INNER JOIN `item` AS `temp1` ON `temp1`.`id` = ".$sql_table.".".$sql_parent; @@ -515,94 +650,63 @@ function network_content(App $a, $update = 0) { $sql_extra3 .= " OR (`thread`.`contact-id` = '$contact_str_self' AND `temp1`.`allow_gid` LIKE '".protect_sprintf('%<'.intval($group).'>%')."' AND `temp1`.`private`))"; } else { $sql_extra3 .= " AND false "; - info( t('Group is empty')); + info(t('Group is empty')); } $o = replace_macros(get_markup_template("section_title.tpl"),array( - '$title' => sprintf( t('Group: %s'), $r[0]['name']) + '$title' => sprintf(t('Group: %s'), $r['name']) )) . $o; - } - elseif($cid) { - - $r = q("SELECT `id`,`name`,`network`,`writable`,`nurl`, `forum`, `prv`, `contact-type`, `addr`, `thumb`, `location` FROM `contact` WHERE `id` = %d - AND (NOT `blocked` OR `pending`) LIMIT 1", - intval($cid) - ); + } elseif ($cid) { + $fields = array('id', 'name', 'network', 'writable', 'nurl', + 'forum', 'prv', 'contact-type', 'addr', 'thumb', 'location'); + $condition = array("`id` = ? AND (NOT `blocked` OR `pending`)", $cid); + $r = dba::select('contact', $fields, $condition, array('limit' => 1)); if (dbm::is_result($r)) { $sql_extra = " AND ".$sql_table.".`contact-id` = ".intval($cid); $entries[0] = array( 'id' => 'network', - 'name' => htmlentities($r[0]['name']), - 'itemurl' => (($r[0]['addr']) ? ($r[0]['addr']) : ($r[0]['nurl'])), - 'thumb' => proxy_url($r[0]['thumb'], false, PROXY_SIZE_THUMB), - 'details' => $r[0]['location'], + 'name' => htmlentities($r['name']), + 'itemurl' => (($r['addr']) ? ($r['addr']) : ($r['nurl'])), + 'thumb' => proxy_url($r['thumb'], false, PROXY_SIZE_THUMB), + 'details' => $r['location'], ); - $entries[0]["account_type"] = account_type($r[0]); + $entries[0]["account_type"] = account_type($r); $o = replace_macros(get_markup_template("viewcontact_template.tpl"),array( 'contacts' => $entries, 'id' => 'network', )) . $o; - if($r[0]['network'] === NETWORK_OSTATUS && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { - notice( t('Private messages to this person are at risk of public disclosure.') . EOL); + if ($r['network'] === NETWORK_OSTATUS && $r['writable'] && !PConfig::get(local_user(),'system','nowarn_insecure')) { + notice(t('Private messages to this person are at risk of public disclosure.') . EOL); } - } - else { - notice( t('Invalid contact.') . EOL); + } else { + notice(t('Invalid contact.') . EOL); goaway('network'); // NOTREACHED } } - if((! $group) && (! $cid) && (! $update) && (! get_config('theme','hide_eventlist'))) { + if (!$group && !$cid && !$update && !Config::get('theme','hide_eventlist')) { $o .= get_birthdays(); $o .= get_events(); } - if($datequery) { + if ($datequery) { $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); } - if($datequery2) { + if ($datequery2) { $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); } - //$sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` "); - $sql_extra2 = (($nouveau) ? '' : $sql_extra2); - $sql_extra3 = (($nouveau) ? '' : $sql_extra3); $sql_order = ""; $order_mode = "received"; - $tag = false; - - if(x($_GET,'search')) { - $search = escape_tags($_GET['search']); - - if(strpos($search,'#') === 0) { - $tag = true; - $search = substr($search,1); - } - - if (get_config('system','only_tag_search')) - $tag = true; - if($tag) { - $sql_extra = ""; - - $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", - dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG), intval(local_user())); - $sql_order = "`item`.`id`"; - $order_mode = "id"; - } else { - $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); - $sql_order = "`item`.`id`"; - $order_mode = "id"; - } - } - if(strlen($file)) { + if (strlen($file)) { $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user())); $sql_order = "`item`.`id`"; @@ -612,215 +716,154 @@ function network_content(App $a, $update = 0) { if ($conv) { $sql_extra3 .= " AND $sql_table.`mention`"; } - if ($update) { - // only setup pagination on initial page view - $pager_sql = ''; + + // Normal conversation view + if ($order === 'post') { + $ordering = "`created`"; + if ($sql_order == "") { + $order_mode = "created"; + } } else { - // check if we serve a mobile device and get the user settings - // accordingly - if ($a->is_mobile) { - $itemspage_network = get_pconfig(local_user(),'system','itemspage_mobile_network'); - $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20); - } else { - $itemspage_network = get_pconfig(local_user(),'system','itemspage_network'); - $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40); + $ordering = "`commented`"; + if ($sql_order == "") { + $order_mode = "commented"; } + } - // now that we have the user settings, see if the theme forces - // a maximum item number which is lower then the user choice - if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network)) - $itemspage_network = $a->force_max_items; + if ($sql_order == "") { + $sql_order = "$sql_table.$ordering"; + } - $a->set_pager_itemspage($itemspage_network); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + if (($_GET["offset"] != "")) { + $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"])); } - if ($nouveau) { - $simple_update = (($update) ? " AND `item`.`unseen` " : ''); - - if ($sql_order == "") - $sql_order = "`item`.`id`"; - - // "New Item View" - show all items unthreaded in reverse created date order - $items = q("SELECT %s FROM $sql_table $sql_post_table %s - WHERE %s AND `item`.`uid` = %d - $simple_update - $sql_extra $sql_nets - ORDER BY $sql_order DESC $pager_sql ", - item_fieldlists(), item_joins(), item_condition(), - intval($_SESSION['uid']) - ); + $pager_sql = networkPager($a, $update); - $update_unseen = ' WHERE uid = ' . intval($_SESSION['uid']) . " AND unseen = 1 $sql_extra $sql_nets"; - } else { + switch ($order_mode) { + case 'received': + if ($last_received != '') { + $sql_extra3 .= sprintf(" AND $sql_table.`received` < '%s'", dbesc($last_received)); + $a->set_pager_page(1); + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + } + break; + case 'commented': + if ($last_commented != '') { + $sql_extra3 .= sprintf(" AND $sql_table.`commented` < '%s'", dbesc($last_commented)); + $a->set_pager_page(1); + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + } + break; + case 'created': + if ($last_created != '') { + $sql_extra3 .= sprintf(" AND $sql_table.`created` < '%s'", dbesc($last_created)); + $a->set_pager_page(1); + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + } + break; + case 'id': + if (($last_id > 0) && ($sql_table == "`thread`")) { + $sql_extra3 .= sprintf(" AND $sql_table.`iid` < '%s'", dbesc($last_id)); + $a->set_pager_page(1); + $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); + } + break; + } - // Normal conversation view - if($order === 'post') { - $ordering = "`created`"; - if ($sql_order == "") - $order_mode = "created"; + // Fetch a page full of parent items for this page + if ($update) { + if (Config::get("system", "like_no_comment")) { + $sql_extra4 = " AND `item`.`verb` = '".ACTIVITY_POST."'"; } else { - $ordering = "`commented`"; - if ($sql_order == "") - $order_mode = "commented"; + $sql_extra4 = ""; } - if ($sql_order == "") - $sql_order = "$sql_table.$ordering"; + $r = q("SELECT `item`.`parent` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid` + FROM $sql_table $sql_post_table INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + AND (NOT `contact`.`blocked` OR `contact`.`pending`) + WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` $sql_extra4 + AND NOT `item`.`moderated` AND `item`.`unseen` + $sql_extra3 $sql_extra $sql_nets + ORDER BY `item_id` DESC LIMIT 100", + intval(local_user()) + ); + } else { + $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid` + FROM $sql_table $sql_post_table STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` + AND (NOT `contact`.`blocked` OR `contact`.`pending`) + WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted` + AND NOT `thread`.`moderated` + $sql_extra2 $sql_extra3 $sql_extra $sql_nets + ORDER BY $sql_order DESC $pager_sql", + intval(local_user()) + ); + } - if (($_GET["offset"] != "")) - $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"])); + // Then fetch all the children of the parents that are on this page - switch ($order_mode) { - case 'received': - if ($last_received != '') { - $sql_extra3 .= sprintf(" AND $sql_table.`received` < '%s'", dbesc($last_received)); - $a->set_pager_page(1); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - } - break; - case 'commented': - if ($last_commented != '') { - $sql_extra3 .= sprintf(" AND $sql_table.`commented` < '%s'", dbesc($last_commented)); - $a->set_pager_page(1); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - } - break; - case 'created': - if ($last_created != '') { - $sql_extra3 .= sprintf(" AND $sql_table.`created` < '%s'", dbesc($last_created)); - $a->set_pager_page(1); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - } - break; - case 'id': - if (($last_id > 0) && ($sql_table == "`thread`")) { - $sql_extra3 .= sprintf(" AND $sql_table.`iid` < '%s'", dbesc($last_id)); - $a->set_pager_page(1); - $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage'])); - } - break; + $parents_arr = array(); + $parents_str = ''; + $date_offset = ""; + + if (dbm::is_result($r)) { + foreach ($r as $rr) { + if (!in_array($rr['item_id'],$parents_arr)) { + $parents_arr[] = $rr['item_id']; + } } - // Fetch a page full of parent items for this page - if ($update) { - if (get_config("system", "like_no_comment")) - $sql_extra4 = " AND `item`.`verb` = '".ACTIVITY_POST."'"; - else - $sql_extra4 = ""; - - $r = q("SELECT `item`.`parent` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid` - FROM $sql_table $sql_post_table INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` - AND (NOT `contact`.`blocked` OR `contact`.`pending`) - WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` $sql_extra4 - AND NOT `item`.`moderated` AND `item`.`unseen` - $sql_extra3 $sql_extra $sql_nets - ORDER BY `item_id` DESC LIMIT 100", - intval(local_user()) - ); - } else { - $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid` - FROM $sql_table $sql_post_table STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id` - AND (NOT `contact`.`blocked` OR `contact`.`pending`) - WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted` - AND NOT `thread`.`moderated` - $sql_extra2 $sql_extra3 $sql_extra $sql_nets - ORDER BY $sql_order DESC $pager_sql ", - intval(local_user()) - ); + $parents_str = implode(", ", $parents_arr); + + // splitted into separate queries to avoid the problem with very long threads + // so always the last X comments are loaded + // This problem can occur expecially with imported facebook posts + $max_comments = Config::get("system", "max_comments"); + if ($max_comments == 0) { + $max_comments = 100; } - // Then fetch all the children of the parents that are on this page + $items = array(); - $parents_arr = array(); - $parents_str = ''; - $date_offset = ""; + foreach ($parents_arr AS $parents) { + $thread_items = dba::p(item_query()." AND `item`.`uid` = ? + AND `item`.`parent` = ? + ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1), + local_user(), + $parents + ); - if (dbm::is_result($r)) { - foreach($r as $rr) - if(! in_array($rr['item_id'],$parents_arr)) - $parents_arr[] = $rr['item_id']; - - $parents_str = implode(", ", $parents_arr); - - // splitted into separate queries to avoid the problem with very long threads - // so always the last X comments are loaded - // This problem can occur expecially with imported facebook posts - $max_comments = get_config("system", "max_comments"); - if ($max_comments == 0) - $max_comments = 100; - - $items = array(); - - foreach ($parents_arr AS $parents) { - $thread_items = dba::p(item_query()." AND `item`.`uid` = ? - AND `item`.`parent` = ? - ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1), - local_user(), - $parents - ); - - if (dbm::is_result($thread_items)) - $items = array_merge($items, dba::inArray($thread_items)); + if (dbm::is_result($thread_items)) { + $items = array_merge($items, dba::inArray($thread_items)); } - $items = conv_sort($items,$ordering); - } else { - $items = array(); } + $items = conv_sort($items,$ordering); + } else { + $items = array(); + } - if ($_GET["offset"] == "") - $date_offset = $items[0][$order_mode]; - else - $date_offset = $_GET["offset"]; - - $a->page_offset = $date_offset; - - if($parents_str) - $update_unseen = ' WHERE uid = ' . intval(local_user()) . ' AND unseen = 1 AND parent IN ( ' . dbesc($parents_str) . ' )'; + if ($_GET["offset"] == "") { + $date_offset = $items[0][$order_mode]; + } else { + $date_offset = $_GET["offset"]; } + $a->page_offset = $date_offset; + // We aren't going to try and figure out at the item, group, and page // level which items you've seen and which you haven't. If you're looking // at the top level network page just mark everything seen. - -// The $update_unseen is a bit unreliable if you have stuff coming into your stream from a new contact - -// and other feeds that bring in stuff from the past. One can't find it all. -// I'm reviving this block to mark everything seen on page 1 of the network as a temporary measure. -// The correct solution is to implement a network notifications box just like the system notifications popup -// with the ability in the popup to "mark all seen". -// Several people are complaining because there are unseen messages they can't find and as time goes -// on they just get buried deeper. It has happened to me a couple of times also. - - if (!$group && !$cid && !$star) { - $unseen = dba::exists('item', array('unseen' => true, 'uid' => local_user())); - - if ($unseen) { - $r = dba::update('item', array('unseen' => false), array('uid' => local_user(), 'unseen' => true)); - } - } elseif ($update_unseen) { - $unseen = q("SELECT `id` FROM `item` ".$update_unseen. " LIMIT 1"); - - if (dbm::is_result($unseen)) { - $r = q("UPDATE `item` SET `unseen` = 0 $update_unseen"); - } + $condition = array('unseen' => true, 'uid' => local_user()); + } elseif ($parents_str) { + $condition = array("`uid` = ? AND `unseen` AND `parent` IN (" . dbesc($parents_str) . ")", local_user()); } - // Set this so that the conversation function can find out contact info for our wall-wall items - $a->page_contact = $a->contact; - - $mode = (($nouveau) ? 'network-new' : 'network'); + networkSetSeen($condition); - $o .= conversation($a, $items, $mode, $update); - - if (!$update) { - if (get_pconfig(local_user(), 'system', 'infinite_scroll')) { - $o .= scroll_loader(); - } else { - $o .= alt_pager($a, count($items)); - } - } + $mode = 'network'; + $o .= networkConversation($a, $items, $mode, $update); return $o; } @@ -863,7 +906,7 @@ function network_tabs(App $a) { ), ); - if(feature_enabled(local_user(),'personal_tab')) { + if (feature_enabled(local_user(),'personal_tab')) { $tabs[] = array( 'label' => t('Personal'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1', @@ -885,7 +928,7 @@ function network_tabs(App $a) { ); } - if(feature_enabled(local_user(),'link_tab')) { + if (feature_enabled(local_user(),'link_tab')) { $tabs[] = array( 'label' => t('Shared Links'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1', @@ -896,7 +939,7 @@ function network_tabs(App $a) { ); } - if(feature_enabled(local_user(),'star_posts')) { + if (feature_enabled(local_user(),'star_posts')) { $tabs[] = array( 'label' => t('Starred'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1', @@ -907,9 +950,9 @@ function network_tabs(App $a) { ); } - // save selected tab, but only if not in search or file mode - if(!x($_GET,'search') && !x($_GET,'file')) { - set_pconfig( local_user(), 'network.view','tab.selected',array($all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) ); + // save selected tab, but only if not in file mode + if (!x($_GET,'file')) { + PConfig::set(local_user(), 'network.view','tab.selected',array($all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active)); } $arr = array('tabs' => $tabs); diff --git a/mod/nodeinfo.php b/mod/nodeinfo.php index 5cc2734c8e..e889d5a94e 100644 --- a/mod/nodeinfo.php +++ b/mod/nodeinfo.php @@ -188,7 +188,7 @@ function nodeinfo_cron() { } logger('cron_start'); - $users = qu("SELECT `user`.`uid`, `user`.`login_date`, `contact`.`last-item` + $users = q("SELECT `user`.`uid`, `user`.`login_date`, `contact`.`last-item` FROM `user` INNER JOIN `profile` ON `profile`.`uid` = `user`.`uid` AND `profile`.`is-default` INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self` @@ -220,7 +220,7 @@ function nodeinfo_cron() { Config::set('nodeinfo', 'active_users_monthly', $active_users_monthly); } - $posts = qu("SELECT COUNT(*) AS local_posts FROM `thread` WHERE `thread`.`wall` AND `thread`.`uid` != 0"); + $posts = q("SELECT COUNT(*) AS local_posts FROM `thread` WHERE `thread`.`wall` AND `thread`.`uid` != 0"); if (!is_array($posts)) { $local_posts = -1; @@ -231,7 +231,7 @@ function nodeinfo_cron() { logger('local_posts: '.$local_posts, LOGGER_DEBUG); - $posts = qu("SELECT COUNT(*) FROM `contact` + $posts = q("SELECT COUNT(*) FROM `contact` INNER JOIN `item` ON `item`.`contact-id` = `contact`.`id` AND `item`.`uid` = `contact`.`uid` AND `item`.`id` != `item`.`parent` AND `item`.`network` IN ('%s', '%s', '%s') WHERE `contact`.`self`", diff --git a/mod/photo.php b/mod/photo.php index 3c5fdd7be4..5896c90baa 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -74,7 +74,7 @@ function photo_init(App $a) { $uid = str_replace(array('.jpg','.png'),array('',''), $person); - $r = qu("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1", + $r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1", intval($resolution), intval($uid) ); @@ -104,7 +104,7 @@ function photo_init(App $a) { } // check if the photo exists and get the owner of the photo - $r = qu("SELECT `uid` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", + $r = q("SELECT `uid` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", dbesc($photo), intval($resolution) ); @@ -114,7 +114,7 @@ function photo_init(App $a) { // Now we'll see if we can access the photo - $r = qu("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` <= %d $sql_extra ORDER BY scale DESC LIMIT 1", + $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` <= %d $sql_extra ORDER BY scale DESC LIMIT 1", dbesc($photo), intval($resolution) ); diff --git a/mod/photos.php b/mod/photos.php index ac54e0e096..6c9f4bd662 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -29,7 +29,7 @@ function photos_init(App $a) { if ($a->argc > 1) { $nick = $a->argv[1]; - $user = qu("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", + $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", dbesc($nick) ); @@ -153,7 +153,7 @@ function photos_post(App $a) { } if ($contact_id) { - $r = qu("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1", + $r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1", intval($contact_id), intval($page_owner_uid) ); @@ -170,7 +170,7 @@ function photos_post(App $a) { killme(); } - $r = qu("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` + $r = q("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid` WHERE `user`.`uid` = %d AND `self` = 1 LIMIT 1", intval($page_owner_uid) ); @@ -192,7 +192,7 @@ function photos_post(App $a) { return; // NOTREACHED } - $r = qu("SELECT `album` FROM `photo` WHERE `album` = '%s' AND `uid` = %d", + $r = q("SELECT `album` FROM `photo` WHERE `album` = '%s' AND `uid` = %d", dbesc($album), intval($page_owner_uid) ); @@ -1378,7 +1378,7 @@ function photos_content(App $a) { else $order = 'DESC'; - $prvnxt = qu("SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0 + $prvnxt = q("SELECT `resource-id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0 $sql_extra ORDER BY `created` $order ", dbesc($ph[0]['album']), intval($owner_uid) @@ -1478,7 +1478,7 @@ function photos_content(App $a) { if (dbm::is_result($linked_items)) { $link_item = $linked_items[0]; - $r = qu("SELECT COUNT(*) AS `total` + $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `parent-uri` = '%s' AND `uri` != '%s' AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 @@ -1495,7 +1495,7 @@ function photos_content(App $a) { } - $r = qu("SELECT `item`.*, `item`.`id` AS `item_id`, + $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`, `contact`.`thumb`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` @@ -1835,7 +1835,7 @@ function photos_content(App $a) { // Default - show recent photos with upload link (if applicable) //$o = ''; - $r = qu("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' + $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra GROUP BY `resource-id`", intval($a->data['user']['uid']), dbesc('Contact Photos'), @@ -1846,7 +1846,7 @@ function photos_content(App $a) { $a->set_pager_itemspage(20); } - $r = qu("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, + $r = q("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`, ANY_VALUE(`album`) AS `album`, max(`scale`) AS `scale`, ANY_VALUE(`created`) AS `created` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' diff --git a/mod/ping.php b/mod/ping.php index 5a5bdcd589..59fa521214 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -118,7 +118,7 @@ function ping_init(App $a) $notifs = ping_get_notifications(local_user()); - $items_unseen = qu("SELECT `item`.`id`, `item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`, + $items_unseen = q("SELECT `item`.`id`, `item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`, `item`.`contact-id`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id` = `item`.`parent` @@ -167,13 +167,13 @@ function ping_init(App $a) } } - $intros1 = qu("SELECT `intro`.`id`, `intro`.`datetime`, + $intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`, `fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo` FROM `intro` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id` WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`fid` != 0", intval(local_user()) ); - $intros2 = qu("SELECT `intro`.`id`, `intro`.`datetime`, + $intros2 = q("SELECT `intro`.`id`, `intro`.`datetime`, `contact`.`name`, `contact`.`url`, `contact`.`photo` FROM `intro` LEFT JOIN `contact` ON `intro`.`contact-id` = `contact`.`id` WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`contact-id` != 0", @@ -184,7 +184,7 @@ function ping_init(App $a) $intros = $intros1 + $intros2; $myurl = System::baseUrl() . '/profile/' . $a->user['nickname'] ; - $mails = qu("SELECT `id`, `from-name`, `from-url`, `from-photo`, `created` FROM `mail` + $mails = q("SELECT `id`, `from-name`, `from-url`, `from-photo`, `created` FROM `mail` WHERE `uid` = %d AND `seen` = 0 AND `from-url` != '%s' ", intval(local_user()), dbesc($myurl) @@ -192,7 +192,7 @@ function ping_init(App $a) $mail_count = count($mails); if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){ - $regs = qu("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) AS `total` + $regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) AS `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid` = `contact`.`uid` WHERE `contact`.`self` = 1"); @@ -204,7 +204,7 @@ function ping_init(App $a) $cachekey = "ping_init:".local_user(); $ev = Cache::get($cachekey); if (is_null($ev)) { - $ev = qu("SELECT type, start, adjust FROM `event` + $ev = q("SELECT type, start, adjust FROM `event` WHERE `event`.`uid` = %d AND `start` < '%s' AND `finish` > '%s' and `ignore` = 0 ORDER BY `start` ASC ", intval(local_user()), @@ -424,7 +424,7 @@ function ping_get_notifications($uid) $a = get_app(); do { - $r = qu("SELECT `notify`.*, `item`.`visible`, `item`.`spam`, `item`.`deleted` + $r = q("SELECT `notify`.*, `item`.`visible`, `item`.`spam`, `item`.`deleted` FROM `notify` LEFT JOIN `item` ON `item`.`id` = `notify`.`iid` WHERE `notify`.`uid` = %d AND `notify`.`msg` != '' AND NOT (`notify`.`type` IN (%d, %d)) diff --git a/mod/profiles.php b/mod/profiles.php index 42f4587563..4a1d1ad934 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -108,13 +108,7 @@ function profiles_init(App $a) { $r1[0]['net-publish'] = 0; $r1[0]['profile-name'] = dbesc($name); - dbm::esc_array($r1[0], true); - - $r2 = dbq("INSERT INTO `profile` (`" - . implode("`, `", array_keys($r1[0])) - . "`) VALUES (" - . implode(", ", array_values($r1[0])) - . ")" ); + dba::insert('profile', $r1[0]); $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1", intval(local_user()), diff --git a/mod/proxy.php b/mod/proxy.php index 20d02af85a..d6f76da70b 100644 --- a/mod/proxy.php +++ b/mod/proxy.php @@ -142,10 +142,10 @@ function proxy_init(App $a) { $r = array(); if (!$direct_cache && ($cachefile == '')) { - $r = qu("SELECT * FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", $urlhash); + $r = dba::select('photo', array('data', 'desc'), array('resource-id' => $urlhash), array('limit' => 1)); if (dbm::is_result($r)) { - $img_str = $r[0]['data']; - $mime = $r[0]['desc']; + $img_str = $r['data']; + $mime = $r['desc']; if ($mime == '') { $mime = 'image/jpeg'; } @@ -181,23 +181,11 @@ function proxy_init(App $a) { die(); } - q("INSERT INTO `photo` - ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, `album`, `height`, `width`, `desc`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) - VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' )", - 0, 0, get_guid(), dbesc($urlhash), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(basename(dbesc($_REQUEST['url']))), - dbesc(''), - intval(imagesy($image)), - intval(imagesx($image)), - $mime, - dbesc($img_str), - 100, - intval(0), - dbesc(''), dbesc(''), dbesc(''), dbesc('') - ); - + $fields = array('uid' => 0, 'contact-id' => 0, 'guid' => get_guid(), 'resource-id' => $urlhash, 'created' => datetime_convert(), 'edited' => datetime_convert(), + 'filename' => basename($_REQUEST['url']), 'type' => '', 'album' => '', 'height' => imagesy($image), 'width' => imagesx($image), + 'datasize' => 0, 'data' => $img_str, 'scale' => 100, 'profile' => 0, + 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '', 'desc' => $mime); + dba::insert('photo', $fields); } else { $img = new Photo($img_str, $mime); if ($img->is_valid() && !$direct_cache && ($cachefile == '')) { diff --git a/mod/search.php b/mod/search.php index 1975a05bf6..ee652ee8aa 100644 --- a/mod/search.php +++ b/mod/search.php @@ -11,7 +11,7 @@ function search_saved_searches() { $o = ''; - if(! feature_enabled(local_user(),'savedsearch')) + if (! feature_enabled(local_user(),'savedsearch')) return $o; $r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d", @@ -50,30 +50,23 @@ function search_init(App $a) { $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); - if(local_user()) { - if(x($_GET,'save') && $search) { + if (local_user()) { + if (x($_GET,'save') && $search) { $r = q("SELECT * FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1", intval(local_user()), dbesc($search) ); - if (! dbm::is_result($r)) { - q("INSERT INTO `search` (`uid`,`term`) VALUES ( %d, '%s')", - intval(local_user()), - dbesc($search) - ); + if (!dbm::is_result($r)) { + dbm::insert('search', array('uid' => local_user(), 'term' => $search)); } } - if(x($_GET,'remove') && $search) { - q("DELETE FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1", - intval(local_user()), - dbesc($search) - ); + if (x($_GET,'remove') && $search) { + dbm::delete('search', array('uid' => local_user(), 'term' => $search)); } $a->page['aside'] .= search_saved_searches(); - } - else { + } else { unset($_SESSION['theme']); unset($_SESSION['mobile-theme']); } @@ -85,7 +78,7 @@ function search_init(App $a) { function search_post(App $a) { - if(x($_POST,'search')) + if (x($_POST,'search')) $a->data['search'] = $_POST['search']; } @@ -135,13 +128,13 @@ function search_content(App $a) { nav_set_selected('search'); - if(x($a->data,'search')) + if (x($a->data,'search')) $search = notags(trim($a->data['search'])); else $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); $tag = false; - if(x($_GET,'tag')) { + if (x($_GET,'tag')) { $tag = true; $search = ((x($_GET,'tag')) ? notags(trim(rawurldecode($_GET['tag']))) : ''); } @@ -154,18 +147,18 @@ function search_content(App $a) { '$content' => search($search,'search-box','search',((local_user()) ? true : false), false) )); - if(strpos($search,'#') === 0) { + if (strpos($search,'#') === 0) { $tag = true; $search = substr($search,1); } - if(strpos($search,'@') === 0) { + if (strpos($search,'@') === 0) { return dirfind_content($a); } - if(strpos($search,'!') === 0) { + if (strpos($search,'!') === 0) { return dirfind_content($a); } - if(x($_GET,'search-option')) + if (x($_GET,'search-option')) switch($_GET['search-option']) { case 'fulltext': break; @@ -180,7 +173,7 @@ function search_content(App $a) { break; } - if(! $search) + if (! $search) return $o; if (get_config('system','only_tag_search')) @@ -191,7 +184,7 @@ function search_content(App $a) { // OR your own posts if you are a logged in member // No items will be shown if the member has a blocked profile wall. - if($tag) { + if ($tag) { logger("Start tag search for '".$search."'", LOGGER_DEBUG); $r = q("SELECT %s @@ -224,7 +217,7 @@ function search_content(App $a) { } - if($tag) + if ($tag) $title = sprintf( t('Items tagged with: %s'), $search); else $title = sprintf( t('Results for: %s'), $search); diff --git a/mod/settings.php b/mod/settings.php index c98e1b99be..9970d32595 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -231,17 +231,12 @@ function settings_post(App $a) { intval(local_user()) ); if (! dbm::is_result($r)) { - q("INSERT INTO `mailacct` (`uid`) VALUES (%d)", - intval(local_user()) - ); + dba::insert('mailacct', array('uid' => local_user())); } if(strlen($mail_pass)) { $pass = ''; openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']); - q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d", - dbesc(bin2hex($pass)), - intval(local_user()) - ); + dba::update('mailacct', array('pass' => bin2hex($pass)), array('uid' => local_user())); } $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s', `action` = %d, `movetofolder` = '%s', diff --git a/mod/suggest.php b/mod/suggest.php index 19e89f05ba..e71c726952 100644 --- a/mod/suggest.php +++ b/mod/suggest.php @@ -39,10 +39,7 @@ function suggest_init(App $a) { } // Now check how the user responded to the confirmation query if (!$_REQUEST['canceled']) { - q("INSERT INTO `gcign` ( `uid`, `gcid` ) VALUES ( %d, %d ) ", - intval(local_user()), - intval($_GET['ignore']) - ); + dba::insert('gcign', array('uid' => local_user(), 'gcid' => $_GET['ignore'])); } } diff --git a/mod/unfollow.php b/mod/unfollow.php new file mode 100644 index 0000000000..d0baf87c44 --- /dev/null +++ b/mod/unfollow.php @@ -0,0 +1,140 @@ + 1)); + + if (!dbm::is_result($contact)) { + notice(t("Contact wasn't found or can't be unfollowed.")); + } else { + if (in_array($contact['network'], array(NETWORK_OSTATUS))) { + $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 (dbm::is_result($r)) { + $self = ""; // Unused parameter + terminate_friendship($r[0], $self, $contact); + } + } + dba::update('contact', array('rel' => CONTACT_IS_FOLLOWER), array('id' => $contact['id'])); + + info(t('Contact unfollowed').EOL); + goaway(System::baseUrl().'/contacts/'.$contact['id']); + } + goaway($return_url); + // NOTREACHED +} + +function unfollow_content(App $a) { + + if (! local_user()) { + notice(t('Permission denied.') . EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + $uid = local_user(); + $url = notags(trim($_REQUEST['url'])); + + $submit = t('Submit Request'); + + $condition = array("`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?", + local_user(), CONTACT_IS_FRIEND, normalise_link($url), + normalise_link($url), $url, NETWORK_STATUSNET); + $contact = dba::select('contact', array('url', 'network', 'addr', 'name'), $condition, array('limit' => 1)); + + if (!dbm::is_result($contact)) { + notice(t("You aren't a friend of this contact.").EOL); + $submit = ""; + // NOTREACHED + } + + if (!in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS))) { + notice(t("Unfollowing is currently not supported by your network.").EOL); + $submit = ""; + // NOTREACHED + } + + $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)); + + if (!$r) { + notice(t('Permission denied.') . EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + $myaddr = $r[0]["url"]; + + // Makes the connection request for friendica contacts easier + $_SESSION["fastlane"] = $contact["url"]; + + $header = t("Disconnect/Unfollow"); + + $o = replace_macros($tpl,array( + '$header' => htmlentities($header), + '$desc' => "", + '$pls_answer' => "", + '$does_know_you' => "", + '$add_note' => "", + '$page_desc' => "", + '$friendica' => "", + '$statusnet' => "", + '$diaspora' => "", + '$diasnote' => "", + '$your_address' => t('Your Identity Address:'), + '$invite_desc' => "", + '$emailnet' => "", + '$submit' => $submit, + '$cancel' => t('Cancel'), + '$nickname' => "", + '$name' => $contact["name"], + '$url' => $contact["url"], + '$zrl' => zrl($contact["url"]), + '$url_label' => t("Profile URL"), + '$myaddr' => $myaddr, + '$request' => $request, + '$keywords' => "", + '$keywords_label' => "" + )); + + $a->page['aside'] = ""; + profile_load($a, "", 0, get_contact_details_by_url($contact["url"])); + + $o .= replace_macros(get_markup_template('section_title.tpl'), + array('$title' => t('Status Messages and Posts') + )); + + // Show last public posts + $o .= posts_from_contact_url($a, $contact["url"]); + + return $o; +} diff --git a/mod/wall_attach.php b/mod/wall_attach.php index 8bf1fdbf19..9f455a19f3 100644 --- a/mod/wall_attach.php +++ b/mod/wall_attach.php @@ -138,21 +138,12 @@ function wall_attach_post(App $a) { $mimetype = z_mime_content_type($filename); $hash = get_guid(64); $created = datetime_convert(); - $r = q("INSERT INTO `attach` ( `uid`, `hash`, `filename`, `filetype`, `filesize`, `data`, `created`, `edited`, `allow_cid`, `allow_gid`,`deny_cid`, `deny_gid` ) - VALUES ( %d, '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", - intval($page_owner_uid), - dbesc($hash), - dbesc($filename), - dbesc($mimetype), - intval($filesize), - dbesc($filedata), - dbesc($created), - dbesc($created), - dbesc('<' . $page_owner_cid . '>'), - dbesc(''), - dbesc(''), - dbesc('') - ); + + $fields = array('uid' => $page_owner_uid, 'hash' => $hash, 'filename' => $filename, 'filetype' => $mimetype, + 'filesize' => $filesize, 'data' => $filedata, 'created' => $created, 'edited' => $created, + 'allow_cid' => '<' . $page_owner_cid . '>', 'allow_gid' => '','deny_cid' => '', 'deny_gid' => ''); + + $r = dba::insert('attach', $fields); @unlink($src); diff --git a/mods/sample-nginx.config b/mods/sample-nginx.config index 6bf75bd818..ac518cbd48 100644 --- a/mods/sample-nginx.config +++ b/mods/sample-nginx.config @@ -129,9 +129,8 @@ server { # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; - include fastcgi_params; + include fastcgi.conf; fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # deny access to all dot files diff --git a/object/Item.php b/object/Item.php index f81b8ea4e8..816406e4eb 100644 --- a/object/Item.php +++ b/object/Item.php @@ -68,6 +68,11 @@ class Item extends BaseObject { continue; } + // You can always comment on Diaspora items + if (($item['network'] == NETWORK_DIASPORA) && (local_user() == $item['uid'])) { + $item['writable'] = true; + } + $item['pagedrop'] = $data['pagedrop']; $child = new Item($item); $this->add_child($child); @@ -319,18 +324,6 @@ class Item extends BaseObject { unset($buttons["like"]); } - // Diaspora isn't able to do likes on comments - but Hubzilla does - /// @todo When Diaspora will pass this information we will remove these lines - if (($item["item_network"] == NETWORK_DIASPORA) && ($indent == 'comment') && - !Diaspora::is_redmatrix($item["owner-link"]) && isset($buttons["like"])) { - unset($buttons["like"]); - } - - // Facebook can like comments - but it isn't programmed in the connector yet. - if (($item["item_network"] == NETWORK_FACEBOOK) && ($indent == 'comment') && isset($buttons["like"])) { - unset($buttons["like"]); - } - $tmp_item = array( 'template' => $this->get_template(), 'type' => implode("",array_slice(explode("/",$item['verb']),-1)), diff --git a/util/messages.po b/util/messages.po index 2eedd7c1bb..675918eb2f 100644 --- a/util/messages.po +++ b/util/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-26 09:47+0200\n" +"POT-Creation-Date: 2017-09-15 10:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -105,7 +105,7 @@ msgstr "" msgid "Enable widget to display Network posts only from selected network" msgstr "" -#: include/features.php:86 mod/search.php:37 mod/network.php:209 +#: include/features.php:86 mod/search.php:37 mod/network.php:194 msgid "Saved Searches" msgstr "" @@ -177,7 +177,7 @@ msgstr "" msgid "Add categories to your posts" msgstr "" -#: include/features.php:104 include/contact_widgets.php:166 +#: include/features.php:104 include/contact_widgets.php:167 msgid "Saved Folders" msgstr "" @@ -217,15 +217,15 @@ msgstr "" msgid "Show visitors public community forums at the Advanced Profile Page" msgstr "" -#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:701 +#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:702 msgid "Miscellaneous" msgstr "" -#: include/datetime.php:196 include/identity.php:653 +#: include/datetime.php:196 include/identity.php:654 msgid "Birthday:" msgstr "" -#: include/datetime.php:198 mod/profiles.php:724 +#: include/datetime.php:198 mod/profiles.php:725 msgid "Age: " msgstr "" @@ -249,8 +249,8 @@ msgstr "" msgid "years" msgstr "" -#: include/datetime.php:380 include/event.php:453 mod/cal.php:281 -#: mod/events.php:387 +#: include/datetime.php:380 include/event.php:454 mod/cal.php:282 +#: mod/events.php:388 msgid "month" msgstr "" @@ -258,8 +258,8 @@ msgstr "" msgid "months" msgstr "" -#: include/datetime.php:381 include/event.php:454 mod/cal.php:282 -#: mod/events.php:388 +#: include/datetime.php:381 include/event.php:455 mod/cal.php:283 +#: mod/events.php:389 msgid "week" msgstr "" @@ -267,8 +267,8 @@ msgstr "" msgid "weeks" msgstr "" -#: include/datetime.php:382 include/event.php:455 mod/cal.php:283 -#: mod/events.php:389 +#: include/datetime.php:382 include/event.php:456 mod/cal.php:284 +#: mod/events.php:390 msgid "day" msgstr "" @@ -310,215 +310,11 @@ msgstr "" msgid "%s's birthday" msgstr "" -#: include/datetime.php:621 include/dfrn.php:1318 +#: include/datetime.php:621 include/dfrn.php:1332 #, php-format msgid "Happy Birthday %s" msgstr "" -#: include/like.php:30 include/conversation.php:154 include/diaspora.php:1653 -#, php-format -msgid "%1$s likes %2$s's %3$s" -msgstr "" - -#: include/like.php:34 include/like.php:39 include/conversation.php:157 -#, php-format -msgid "%1$s doesn't like %2$s's %3$s" -msgstr "" - -#: include/like.php:44 -#, php-format -msgid "%1$s is attending %2$s's %3$s" -msgstr "" - -#: include/like.php:49 -#, php-format -msgid "%1$s is not attending %2$s's %3$s" -msgstr "" - -#: include/like.php:54 -#, php-format -msgid "%1$s may attend %2$s's %3$s" -msgstr "" - -#: include/like.php:181 include/conversation.php:142 -#: include/conversation.php:294 include/text.php:1893 mod/subthread.php:89 -#: mod/tagger.php:63 -msgid "photo" -msgstr "" - -#: include/like.php:181 include/conversation.php:137 -#: include/conversation.php:147 include/conversation.php:289 -#: include/conversation.php:298 include/diaspora.php:1657 mod/subthread.php:89 -#: mod/tagger.php:63 -msgid "status" -msgstr "" - -#: include/like.php:183 include/conversation.php:134 -#: include/conversation.php:286 include/text.php:1891 -msgid "event" -msgstr "" - -#: include/user.php:39 mod/settings.php:377 -msgid "Passwords do not match. Password unchanged." -msgstr "" - -#: include/user.php:48 -msgid "An invitation is required." -msgstr "" - -#: include/user.php:53 -msgid "Invitation could not be verified." -msgstr "" - -#: include/user.php:61 -msgid "Invalid OpenID url" -msgstr "" - -#: include/user.php:75 include/auth.php:139 -msgid "" -"We encountered a problem while logging in with the OpenID you provided. " -"Please check the correct spelling of the ID." -msgstr "" - -#: include/user.php:75 include/auth.php:139 -msgid "The error message was:" -msgstr "" - -#: include/user.php:82 -msgid "Please enter the required information." -msgstr "" - -#: include/user.php:96 -msgid "Please use a shorter name." -msgstr "" - -#: include/user.php:98 -msgid "Name too short." -msgstr "" - -#: include/user.php:106 -msgid "That doesn't appear to be your full (First Last) name." -msgstr "" - -#: include/user.php:111 -msgid "Your email domain is not among those allowed on this site." -msgstr "" - -#: include/user.php:114 -msgid "Not a valid email address." -msgstr "" - -#: include/user.php:127 -msgid "Cannot use that email." -msgstr "" - -#: include/user.php:133 -msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." -msgstr "" - -#: include/user.php:140 include/user.php:228 -msgid "Nickname is already registered. Please choose another." -msgstr "" - -#: include/user.php:150 -msgid "" -"Nickname was once registered here and may not be re-used. Please choose " -"another." -msgstr "" - -#: include/user.php:166 -msgid "SERIOUS ERROR: Generation of security keys failed." -msgstr "" - -#: include/user.php:214 -msgid "An error occurred during registration. Please try again." -msgstr "" - -#: include/user.php:237 view/theme/duepuntozero/config.php:46 -msgid "default" -msgstr "" - -#: include/user.php:247 -msgid "An error occurred creating your default profile. Please try again." -msgstr "" - -#: include/user.php:260 include/user.php:264 include/profile_selectors.php:42 -msgid "Friends" -msgstr "" - -#: include/user.php:306 include/user.php:314 include/user.php:322 -#: include/api.php:3702 mod/photos.php:73 mod/photos.php:189 mod/photos.php:776 -#: mod/photos.php:1258 mod/photos.php:1279 mod/photos.php:1865 -#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90 -#: mod/profile_photo.php:214 mod/profile_photo.php:309 -#: mod/profile_photo.php:319 -msgid "Profile Photos" -msgstr "" - -#: include/user.php:397 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tThank you for registering at %2$s. Your account is pending for " -"approval by the administrator.\n" -"\t" -msgstr "" - -#: include/user.php:407 -#, php-format -msgid "Registration at %s" -msgstr "" - -#: include/user.php:417 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tThank you for registering at %2$s. Your account has been created.\n" -"\t" -msgstr "" - -#: include/user.php:421 -#, php-format -msgid "" -"\n" -"\t\tThe login details are as follows:\n" -"\t\t\tSite Location:\t%3$s\n" -"\t\t\tLogin Name:\t%1$s\n" -"\t\t\tPassword:\t%5$s\n" -"\n" -"\t\tYou may change your password from your account \"Settings\" page after " -"logging\n" -"\t\tin.\n" -"\n" -"\t\tPlease take a few moments to review the other account settings on that " -"page.\n" -"\n" -"\t\tYou may also wish to add some basic information to your default profile\n" -"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" -"\n" -"\t\tWe recommend setting your full name, adding a profile photo,\n" -"\t\tadding some profile \"keywords\" (very useful in making new friends) - " -"and\n" -"\t\tperhaps what country you live in; if you do not wish to be more " -"specific\n" -"\t\tthan that.\n" -"\n" -"\t\tWe fully respect your right to privacy, and none of these items are " -"necessary.\n" -"\t\tIf you are new and do not know anybody here, they may help\n" -"\t\tyou to make some new and interesting friends.\n" -"\n" -"\n" -"\t\tThank you and welcome to %2$s." -msgstr "" - -#: include/user.php:453 mod/admin.php:1398 -#, php-format -msgid "Registration details for %s" -msgstr "" - #: include/profile_selectors.php:6 msgid "Male" msgstr "" @@ -571,7 +367,7 @@ msgstr "" msgid "Other" msgstr "" -#: include/profile_selectors.php:6 include/conversation.php:1555 +#: include/profile_selectors.php:6 include/conversation.php:1556 msgid "Undecided" msgid_plural "Undecided" msgstr[0] "" @@ -665,6 +461,10 @@ msgstr "" msgid "Sex Addict" msgstr "" +#: include/profile_selectors.php:42 include/user.php:262 include/user.php:266 +msgid "Friends" +msgstr "" + #: include/profile_selectors.php:42 msgid "Friends/Benefits" msgstr "" @@ -749,1085 +549,1265 @@ msgstr "" msgid "Ask me" msgstr "" -#: include/NotificationsManager.php:155 -msgid "System" +#: include/dba_pdo.php:75 include/dba.php:61 +#, php-format +msgid "Cannot locate DNS info for database server '%s'" msgstr "" -#: include/NotificationsManager.php:162 include/nav.php:160 mod/admin.php:587 -#: view/theme/frio/theme.php:259 -msgid "Network" +#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:43 +#: mod/fbrowser.php:64 mod/photos.php:190 mod/photos.php:1126 +#: mod/photos.php:1259 mod/photos.php:1280 mod/photos.php:1842 +#: mod/photos.php:1856 +msgid "Contact Photos" msgstr "" -#: include/NotificationsManager.php:169 mod/profiles.php:699 -#: mod/network.php:867 -msgid "Personal" +#: include/acl_selectors.php:355 +msgid "Post to Email" msgstr "" -#: include/NotificationsManager.php:176 include/nav.php:107 include/nav.php:163 -msgid "Home" +#: include/acl_selectors.php:360 +#, php-format +msgid "Connectors disabled, since \"%s\" is enabled." msgstr "" -#: include/NotificationsManager.php:183 include/nav.php:168 -msgid "Introductions" +#: include/acl_selectors.php:361 mod/settings.php:1190 +msgid "Hide your profile details from unknown viewers?" msgstr "" -#: include/NotificationsManager.php:241 include/NotificationsManager.php:253 -#, php-format -msgid "%s commented on %s's post" +#: include/acl_selectors.php:367 +msgid "Visible to everybody" msgstr "" -#: include/NotificationsManager.php:252 -#, php-format -msgid "%s created a new post" +#: include/acl_selectors.php:368 view/theme/vier/config.php:110 +msgid "show" msgstr "" -#: include/NotificationsManager.php:267 -#, php-format -msgid "%s liked %s's post" +#: include/acl_selectors.php:369 view/theme/vier/config.php:110 +msgid "don't show" msgstr "" -#: include/NotificationsManager.php:280 -#, php-format -msgid "%s disliked %s's post" +#: include/acl_selectors.php:375 mod/editpost.php:126 +msgid "CC: email addresses" msgstr "" -#: include/NotificationsManager.php:293 -#, php-format -msgid "%s is attending %s's event" +#: include/acl_selectors.php:376 mod/editpost.php:133 +msgid "Example: bob@example.com, mary@example.com" msgstr "" -#: include/NotificationsManager.php:306 -#, php-format -msgid "%s is not attending %s's event" +#: include/acl_selectors.php:378 mod/events.php:512 mod/photos.php:1199 +#: mod/photos.php:1596 +msgid "Permissions" msgstr "" -#: include/NotificationsManager.php:319 -#, php-format -msgid "%s may attend %s's event" +#: include/acl_selectors.php:379 +msgid "Close" msgstr "" -#: include/NotificationsManager.php:336 -#, php-format -msgid "%s is now friends with %s" +#: include/contact_selectors.php:32 +msgid "Unknown | Not categorised" msgstr "" -#: include/NotificationsManager.php:774 -msgid "Friend Suggestion" +#: include/contact_selectors.php:33 +msgid "Block immediately" msgstr "" -#: include/NotificationsManager.php:803 -msgid "Friend/Connect Request" +#: include/contact_selectors.php:34 +msgid "Shady, spammer, self-marketer" msgstr "" -#: include/NotificationsManager.php:803 -msgid "New Follower" +#: include/contact_selectors.php:35 +msgid "Known to me, but no opinion" msgstr "" -#: include/Photo.php:1075 include/Photo.php:1091 include/Photo.php:1099 -#: include/Photo.php:1124 include/message.php:145 mod/wall_upload.php:249 -#: mod/item.php:468 -msgid "Wall Photos" +#: include/contact_selectors.php:36 +msgid "OK, probably harmless" msgstr "" -#: include/api.php:1102 -#, php-format -msgid "Daily posting limit of %d posts reached. The post was rejected." +#: include/contact_selectors.php:37 +msgid "Reputable, has my trust" msgstr "" -#: include/api.php:1123 -#, php-format -msgid "Weekly posting limit of %d posts reached. The post was rejected." +#: include/contact_selectors.php:56 mod/admin.php:1072 +msgid "Frequently" msgstr "" -#: include/api.php:1144 -#, php-format -msgid "Monthly posting limit of %d posts reached. The post was rejected." +#: include/contact_selectors.php:57 mod/admin.php:1073 +msgid "Hourly" msgstr "" -#: include/auth.php:52 -msgid "Logged out." +#: include/contact_selectors.php:58 mod/admin.php:1074 +msgid "Twice daily" msgstr "" -#: include/auth.php:123 include/auth.php:185 mod/openid.php:110 -msgid "Login failed." +#: include/contact_selectors.php:59 mod/admin.php:1075 +msgid "Daily" msgstr "" -#: include/dba_pdo.php:75 include/dba.php:59 -#, php-format -msgid "Cannot locate DNS info for database server '%s'" +#: include/contact_selectors.php:60 +msgid "Weekly" msgstr "" -#: include/delivery.php:428 -msgid "(no subject)" +#: include/contact_selectors.php:61 +msgid "Monthly" msgstr "" -#: include/delivery.php:440 include/enotify.php:46 -msgid "noreply" +#: include/contact_selectors.php:76 mod/dfrn_request.php:887 +msgid "Friendica" msgstr "" -#: include/event.php:19 include/bb2diaspora.php:233 mod/localtime.php:13 -msgid "l F d, Y \\@ g:i A" +#: include/contact_selectors.php:77 +msgid "OStatus" msgstr "" -#: include/event.php:36 include/event.php:56 include/event.php:459 -#: include/bb2diaspora.php:239 -msgid "Starts:" +#: include/contact_selectors.php:78 +msgid "RSS/Atom" msgstr "" -#: include/event.php:39 include/event.php:62 include/event.php:460 -#: include/bb2diaspora.php:247 -msgid "Finishes:" +#: include/contact_selectors.php:79 include/contact_selectors.php:86 +#: mod/admin.php:1582 mod/admin.php:1595 mod/admin.php:1608 mod/admin.php:1626 +msgid "Email" msgstr "" -#: include/event.php:43 include/event.php:69 include/event.php:461 -#: include/bb2diaspora.php:256 include/identity.php:338 mod/directory.php:135 -#: mod/notifications.php:246 mod/events.php:496 mod/contacts.php:641 -msgid "Location:" +#: include/contact_selectors.php:80 mod/dfrn_request.php:889 +#: mod/settings.php:850 +msgid "Diaspora" msgstr "" -#: include/event.php:408 -msgid "all-day" -msgstr "" - -#: include/event.php:410 -msgid "Sun" +#: include/contact_selectors.php:81 +msgid "Facebook" msgstr "" -#: include/event.php:411 -msgid "Mon" +#: include/contact_selectors.php:82 +msgid "Zot!" msgstr "" -#: include/event.php:412 -msgid "Tue" +#: include/contact_selectors.php:83 +msgid "LinkedIn" msgstr "" -#: include/event.php:413 -msgid "Wed" +#: include/contact_selectors.php:84 +msgid "XMPP/IM" msgstr "" -#: include/event.php:414 -msgid "Thu" +#: include/contact_selectors.php:85 +msgid "MySpace" msgstr "" -#: include/event.php:415 -msgid "Fri" +#: include/contact_selectors.php:87 +msgid "Google+" msgstr "" -#: include/event.php:416 -msgid "Sat" +#: include/contact_selectors.php:88 +msgid "pump.io" msgstr "" -#: include/event.php:418 include/text.php:1206 mod/settings.php:982 -msgid "Sunday" +#: include/contact_selectors.php:89 +msgid "Twitter" msgstr "" -#: include/event.php:419 include/text.php:1206 mod/settings.php:982 -msgid "Monday" +#: include/contact_selectors.php:90 +msgid "Diaspora Connector" msgstr "" -#: include/event.php:420 include/text.php:1206 -msgid "Tuesday" +#: include/contact_selectors.php:91 +msgid "GNU Social Connector" msgstr "" -#: include/event.php:421 include/text.php:1206 -msgid "Wednesday" +#: include/contact_selectors.php:92 +msgid "pnut" msgstr "" -#: include/event.php:422 include/text.php:1206 -msgid "Thursday" +#: include/contact_selectors.php:93 +msgid "App.net" msgstr "" -#: include/event.php:423 include/text.php:1206 -msgid "Friday" +#: include/group.php:25 +msgid "" +"A deleted group with this name was revived. Existing item permissions " +"may apply to this group and any future members. If this is " +"not what you intended, please create another group with a different name." msgstr "" -#: include/event.php:424 include/text.php:1206 -msgid "Saturday" +#: include/group.php:201 +msgid "Default privacy group for new contacts" msgstr "" -#: include/event.php:426 -msgid "Jan" +#: include/group.php:234 +msgid "Everybody" msgstr "" -#: include/event.php:427 -msgid "Feb" +#: include/group.php:257 +msgid "edit" msgstr "" -#: include/event.php:428 -msgid "Mar" +#: include/group.php:278 mod/newmember.php:39 +msgid "Groups" msgstr "" -#: include/event.php:429 -msgid "Apr" +#: include/group.php:280 +msgid "Edit groups" msgstr "" -#: include/event.php:430 include/event.php:443 include/text.php:1210 -msgid "May" +#: include/group.php:282 +msgid "Edit group" msgstr "" -#: include/event.php:431 -msgid "Jun" +#: include/group.php:283 +msgid "Create a new group" msgstr "" -#: include/event.php:432 -msgid "Jul" +#: include/group.php:284 mod/group.php:101 mod/group.php:198 +msgid "Group Name: " msgstr "" -#: include/event.php:433 -msgid "Aug" +#: include/group.php:286 +msgid "Contacts not in any group" msgstr "" -#: include/event.php:434 -msgid "Sept" +#: include/group.php:288 mod/network.php:195 +msgid "add" msgstr "" -#: include/event.php:435 -msgid "Oct" +#: include/Contact.php:381 include/Contact.php:394 include/Contact.php:439 +#: include/conversation.php:1013 include/conversation.php:1029 +#: mod/allfriends.php:71 mod/directory.php:153 mod/dirfind.php:212 +#: mod/match.php:77 mod/suggest.php:85 +msgid "View Profile" msgstr "" -#: include/event.php:436 -msgid "Nov" +#: include/Contact.php:395 include/contact_widgets.php:39 +#: include/conversation.php:1026 mod/allfriends.php:72 mod/contacts.php:580 +#: mod/dirfind.php:213 mod/follow.php:143 mod/match.php:78 mod/suggest.php:86 +msgid "Connect/Follow" msgstr "" -#: include/event.php:437 -msgid "Dec" +#: include/Contact.php:438 include/conversation.php:1012 +msgid "View Status" msgstr "" -#: include/event.php:439 include/text.php:1210 -msgid "January" +#: include/Contact.php:440 include/conversation.php:1014 +msgid "View Photos" msgstr "" -#: include/event.php:440 include/text.php:1210 -msgid "February" +#: include/Contact.php:441 include/conversation.php:1015 +msgid "Network Posts" msgstr "" -#: include/event.php:441 include/text.php:1210 -msgid "March" +#: include/Contact.php:442 include/conversation.php:1016 +msgid "View Contact" msgstr "" -#: include/event.php:442 include/text.php:1210 -msgid "April" +#: include/Contact.php:443 +msgid "Drop Contact" msgstr "" -#: include/event.php:444 include/text.php:1210 -msgid "June" +#: include/Contact.php:444 include/conversation.php:1017 +msgid "Send PM" msgstr "" -#: include/event.php:445 include/text.php:1210 -msgid "July" +#: include/Contact.php:445 include/conversation.php:1021 +msgid "Poke" msgstr "" -#: include/event.php:446 include/text.php:1210 -msgid "August" +#: include/Contact.php:814 +msgid "Organisation" msgstr "" -#: include/event.php:447 include/text.php:1210 -msgid "September" +#: include/Contact.php:817 +msgid "News" msgstr "" -#: include/event.php:448 include/text.php:1210 -msgid "October" +#: include/Contact.php:820 +msgid "Forum" msgstr "" -#: include/event.php:449 include/text.php:1210 -msgid "November" +#: include/ForumManager.php:119 include/nav.php:134 include/text.php:1104 +#: view/theme/vier/theme.php:249 +msgid "Forums" msgstr "" -#: include/event.php:450 include/text.php:1210 -msgid "December" +#: include/ForumManager.php:121 view/theme/vier/theme.php:251 +msgid "External link to forum" msgstr "" -#: include/event.php:452 mod/cal.php:280 mod/events.php:386 -msgid "today" +#: include/ForumManager.php:124 include/contact_widgets.php:272 +#: include/items.php:2398 mod/content.php:626 object/Item.php:412 +#: view/theme/vier/theme.php:254 src/App.php:524 +msgid "show more" msgstr "" -#: include/event.php:457 -msgid "No events to display" +#: include/NotificationsManager.php:157 +msgid "System" msgstr "" -#: include/event.php:570 -msgid "l, F j" +#: include/NotificationsManager.php:164 include/nav.php:161 mod/admin.php:589 +#: view/theme/frio/theme.php:260 +msgid "Network" msgstr "" -#: include/event.php:592 -msgid "Edit event" +#: include/NotificationsManager.php:171 mod/network.php:911 +#: mod/profiles.php:700 +msgid "Personal" msgstr "" -#: include/event.php:593 -msgid "Delete event" +#: include/NotificationsManager.php:178 include/nav.php:108 include/nav.php:164 +msgid "Home" msgstr "" -#: include/event.php:619 include/text.php:1615 include/text.php:1622 -msgid "link to source" +#: include/NotificationsManager.php:185 include/nav.php:169 +msgid "Introductions" msgstr "" -#: include/event.php:877 -msgid "Export" +#: include/NotificationsManager.php:243 include/NotificationsManager.php:255 +#, php-format +msgid "%s commented on %s's post" msgstr "" -#: include/event.php:878 -msgid "Export calendar as ical" +#: include/NotificationsManager.php:254 +#, php-format +msgid "%s created a new post" msgstr "" -#: include/event.php:879 -msgid "Export calendar as csv" +#: include/NotificationsManager.php:269 +#, php-format +msgid "%s liked %s's post" msgstr "" -#: include/follow.php:84 mod/dfrn_request.php:514 -msgid "Disallowed profile URL." +#: include/NotificationsManager.php:282 +#, php-format +msgid "%s disliked %s's post" msgstr "" -#: include/follow.php:89 mod/friendica.php:115 mod/dfrn_request.php:520 -#: mod/admin.php:288 mod/admin.php:306 -msgid "Blocked domain" +#: include/NotificationsManager.php:295 +#, php-format +msgid "%s is attending %s's event" msgstr "" -#: include/follow.php:94 -msgid "Connect URL missing." +#: include/NotificationsManager.php:308 +#, php-format +msgid "%s is not attending %s's event" msgstr "" -#: include/follow.php:122 -msgid "" -"This site is not configured to allow communications with other networks." +#: include/NotificationsManager.php:321 +#, php-format +msgid "%s may attend %s's event" msgstr "" -#: include/follow.php:123 include/follow.php:137 -msgid "No compatible communication protocols or feeds were discovered." +#: include/NotificationsManager.php:338 +#, php-format +msgid "%s is now friends with %s" msgstr "" -#: include/follow.php:135 -msgid "The profile address specified does not provide adequate information." +#: include/NotificationsManager.php:776 +msgid "Friend Suggestion" msgstr "" -#: include/follow.php:140 -msgid "An author or name was not found." +#: include/NotificationsManager.php:805 +msgid "Friend/Connect Request" msgstr "" -#: include/follow.php:143 -msgid "No browser URL could be matched to this address." +#: include/NotificationsManager.php:805 +msgid "New Follower" msgstr "" -#: include/follow.php:146 -msgid "" -"Unable to match @-style Identity Address with a known protocol or email " -"contact." +#: include/Photo.php:1076 include/Photo.php:1092 include/Photo.php:1100 +#: include/Photo.php:1125 include/message.php:146 mod/item.php:469 +#: mod/wall_upload.php:250 +msgid "Wall Photos" msgstr "" -#: include/follow.php:147 -msgid "Use mailto: in front of address to force email check." +#: include/api.php:1103 +#, php-format +msgid "Daily posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/follow.php:153 -msgid "" -"The profile address specified belongs to a network which has been disabled " -"on this site." +#: include/api.php:1124 +#, php-format +msgid "Weekly posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/follow.php:158 -msgid "" -"Limited profile. This person will be unable to receive direct/personal " -"notifications from you." +#: include/api.php:1145 +#, php-format +msgid "Monthly posting limit of %d posts reached. The post was rejected." msgstr "" -#: include/follow.php:259 -msgid "Unable to retrieve contact information." +#: include/api.php:3717 include/user.php:308 include/user.php:316 +#: include/user.php:324 mod/photos.php:74 mod/photos.php:190 mod/photos.php:777 +#: mod/photos.php:1259 mod/photos.php:1280 mod/photos.php:1866 +#: mod/profile_photo.php:75 mod/profile_photo.php:83 mod/profile_photo.php:91 +#: mod/profile_photo.php:215 mod/profile_photo.php:310 +#: mod/profile_photo.php:320 +msgid "Profile Photos" msgstr "" -#: include/message.php:14 include/message.php:168 -msgid "[no subject]" +#: include/auth.php:53 +msgid "Logged out." msgstr "" -#: include/nav.php:37 mod/navigation.php:21 -msgid "Nothing new here" +#: include/auth.php:124 include/auth.php:186 mod/openid.php:111 +msgid "Login failed." msgstr "" -#: include/nav.php:41 mod/navigation.php:25 -msgid "Clear notifications" +#: include/auth.php:140 include/user.php:77 +msgid "" +"We encountered a problem while logging in with the OpenID you provided. " +"Please check the correct spelling of the ID." msgstr "" -#: include/nav.php:42 include/text.php:1093 -msgid "@name, !forum, #tags, content" +#: include/auth.php:140 include/user.php:77 +msgid "The error message was:" msgstr "" -#: include/nav.php:80 view/theme/frio/theme.php:249 boot.php:871 -msgid "Logout" +#: include/bb2diaspora.php:234 include/event.php:20 mod/localtime.php:14 +msgid "l F d, Y \\@ g:i A" msgstr "" -#: include/nav.php:80 view/theme/frio/theme.php:249 -msgid "End this session" +#: include/bb2diaspora.php:240 include/event.php:37 include/event.php:57 +#: include/event.php:460 +msgid "Starts:" msgstr "" -#: include/nav.php:83 include/identity.php:783 mod/contacts.php:650 -#: mod/contacts.php:846 view/theme/frio/theme.php:252 -msgid "Status" +#: include/bb2diaspora.php:248 include/event.php:40 include/event.php:63 +#: include/event.php:461 +msgid "Finishes:" msgstr "" -#: include/nav.php:83 include/nav.php:163 view/theme/frio/theme.php:252 -msgid "Your posts and conversations" +#: include/bb2diaspora.php:257 include/event.php:44 include/event.php:70 +#: include/event.php:462 include/identity.php:339 mod/contacts.php:648 +#: mod/directory.php:135 mod/events.php:497 mod/notifications.php:247 +msgid "Location:" msgstr "" -#: include/nav.php:84 include/identity.php:629 include/identity.php:758 -#: include/identity.php:791 mod/newmember.php:20 mod/profperm.php:107 -#: mod/contacts.php:652 mod/contacts.php:854 view/theme/frio/theme.php:253 -msgid "Profile" +#: include/bbcode.php:429 include/bbcode.php:1192 include/bbcode.php:1193 +msgid "Image/photo" msgstr "" -#: include/nav.php:84 view/theme/frio/theme.php:253 -msgid "Your profile page" +#: include/bbcode.php:545 +#, php-format +msgid "%2$s %3$s" msgstr "" -#: include/nav.php:85 include/identity.php:799 mod/fbrowser.php:33 -#: view/theme/frio/theme.php:254 -msgid "Photos" +#: include/bbcode.php:1149 include/bbcode.php:1171 +msgid "$1 wrote:" msgstr "" -#: include/nav.php:85 view/theme/frio/theme.php:254 -msgid "Your photos" +#: include/bbcode.php:1201 include/bbcode.php:1202 +msgid "Encrypted content" msgstr "" -#: include/nav.php:86 include/identity.php:807 include/identity.php:810 -#: view/theme/frio/theme.php:255 -msgid "Videos" +#: include/bbcode.php:1321 +msgid "Invalid source protocol" msgstr "" -#: include/nav.php:86 view/theme/frio/theme.php:255 -msgid "Your videos" +#: include/bbcode.php:1332 +msgid "Invalid link protocol" msgstr "" -#: include/nav.php:87 include/nav.php:151 include/identity.php:819 -#: include/identity.php:830 mod/cal.php:272 mod/events.php:377 -#: view/theme/frio/theme.php:256 view/theme/frio/theme.php:260 -msgid "Events" +#: include/contact_widgets.php:12 +msgid "Add New Contact" msgstr "" -#: include/nav.php:87 view/theme/frio/theme.php:256 -msgid "Your events" +#: include/contact_widgets.php:13 +msgid "Enter address or web location" msgstr "" -#: include/nav.php:88 -msgid "Personal notes" +#: include/contact_widgets.php:14 +msgid "Example: bob@example.com, http://example.com/barbara" msgstr "" -#: include/nav.php:88 -msgid "Your personal notes" +#: include/contact_widgets.php:16 include/identity.php:229 +#: mod/allfriends.php:88 mod/dirfind.php:210 mod/match.php:93 +#: mod/suggest.php:104 +msgid "Connect" msgstr "" -#: include/nav.php:97 mod/bookmarklet.php:14 boot.php:872 -msgid "Login" +#: include/contact_widgets.php:31 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "" +msgstr[1] "" + +#: include/contact_widgets.php:37 +msgid "Find People" msgstr "" -#: include/nav.php:97 -msgid "Sign in" +#: include/contact_widgets.php:38 +msgid "Enter name or interest" msgstr "" -#: include/nav.php:107 -msgid "Home Page" +#: include/contact_widgets.php:40 +msgid "Examples: Robert Morgenstein, Fishing" msgstr "" -#: include/nav.php:111 mod/register.php:292 boot.php:848 -msgid "Register" +#: include/contact_widgets.php:41 mod/contacts.php:818 mod/directory.php:202 +msgid "Find" msgstr "" -#: include/nav.php:111 -msgid "Create an account" +#: include/contact_widgets.php:42 mod/suggest.php:117 +#: view/theme/vier/theme.php:196 +msgid "Friend Suggestions" msgstr "" -#: include/nav.php:117 mod/help.php:50 view/theme/vier/theme.php:291 -msgid "Help" +#: include/contact_widgets.php:43 view/theme/vier/theme.php:195 +msgid "Similar Interests" msgstr "" -#: include/nav.php:117 -msgid "Help and documentation" +#: include/contact_widgets.php:44 +msgid "Random Profile" msgstr "" -#: include/nav.php:121 -msgid "Apps" +#: include/contact_widgets.php:45 view/theme/vier/theme.php:197 +msgid "Invite Friends" msgstr "" -#: include/nav.php:121 -msgid "Addon applications, utilities, games" +#: include/contact_widgets.php:46 +msgid "View Global Directory" msgstr "" -#: include/nav.php:125 include/text.php:1090 mod/search.php:152 -msgid "Search" +#: include/contact_widgets.php:132 +msgid "Networks" msgstr "" -#: include/nav.php:125 -msgid "Search site content" +#: include/contact_widgets.php:135 +msgid "All Networks" msgstr "" -#: include/nav.php:128 include/text.php:1098 -msgid "Full Text" +#: include/contact_widgets.php:170 include/contact_widgets.php:205 +msgid "Everything" msgstr "" -#: include/nav.php:129 include/text.php:1099 -msgid "Tags" +#: include/contact_widgets.php:202 +msgid "Categories" msgstr "" -#: include/nav.php:130 include/nav.php:194 include/identity.php:852 -#: include/identity.php:855 include/text.php:1100 mod/viewcontacts.php:124 -#: mod/contacts.php:805 mod/contacts.php:866 view/theme/frio/theme.php:263 -msgid "Contacts" -msgstr "" +#: include/contact_widgets.php:267 +#, php-format +msgid "%d contact in common" +msgid_plural "%d contacts in common" +msgstr[0] "" +msgstr[1] "" -#: include/nav.php:133 include/ForumManager.php:118 include/text.php:1103 -#: view/theme/vier/theme.php:248 -msgid "Forums" +#: include/conversation.php:135 include/conversation.php:287 +#: include/like.php:184 include/text.php:1885 +msgid "event" msgstr "" -#: include/nav.php:145 include/nav.php:147 mod/community.php:31 -msgid "Community" +#: include/conversation.php:138 include/conversation.php:148 +#: include/conversation.php:290 include/conversation.php:299 +#: include/diaspora.php:1663 include/like.php:182 mod/subthread.php:90 +#: mod/tagger.php:64 +msgid "status" msgstr "" -#: include/nav.php:145 -msgid "Conversations on this site" +#: include/conversation.php:143 include/conversation.php:295 +#: include/like.php:182 include/text.php:1887 mod/subthread.php:90 +#: mod/tagger.php:64 +msgid "photo" msgstr "" -#: include/nav.php:147 -msgid "Conversations on the network" +#: include/conversation.php:155 include/diaspora.php:1659 include/like.php:31 +#, php-format +msgid "%1$s likes %2$s's %3$s" msgstr "" -#: include/nav.php:151 include/identity.php:822 include/identity.php:833 -#: view/theme/frio/theme.php:260 -msgid "Events and Calendar" +#: include/conversation.php:158 include/like.php:35 include/like.php:40 +#, php-format +msgid "%1$s doesn't like %2$s's %3$s" msgstr "" -#: include/nav.php:154 -msgid "Directory" +#: include/conversation.php:161 +#, php-format +msgid "%1$s attends %2$s's %3$s" msgstr "" -#: include/nav.php:154 -msgid "People directory" +#: include/conversation.php:164 +#, php-format +msgid "%1$s doesn't attend %2$s's %3$s" msgstr "" -#: include/nav.php:156 -msgid "Information" +#: include/conversation.php:167 +#, php-format +msgid "%1$s attends maybe %2$s's %3$s" msgstr "" -#: include/nav.php:156 -msgid "Information about this friendica instance" +#: include/conversation.php:200 mod/dfrn_confirm.php:480 +#, php-format +msgid "%1$s is now friends with %2$s" msgstr "" -#: include/nav.php:160 view/theme/frio/theme.php:259 -msgid "Conversations from your friends" +#: include/conversation.php:241 +#, php-format +msgid "%1$s poked %2$s" msgstr "" -#: include/nav.php:161 -msgid "Network Reset" +#: include/conversation.php:262 mod/mood.php:65 +#, php-format +msgid "%1$s is currently %2$s" msgstr "" -#: include/nav.php:161 -msgid "Load Network page with no filters" +#: include/conversation.php:309 mod/tagger.php:97 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "" -#: include/nav.php:168 -msgid "Friend Requests" +#: include/conversation.php:336 +msgid "post/item" msgstr "" -#: include/nav.php:171 mod/notifications.php:98 -msgid "Notifications" +#: include/conversation.php:337 +#, php-format +msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: include/nav.php:172 -msgid "See all notifications" +#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665 +#: mod/profiles.php:345 +msgid "Likes" msgstr "" -#: include/nav.php:173 mod/settings.php:907 -msgid "Mark as seen" +#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665 +#: mod/profiles.php:349 +msgid "Dislikes" msgstr "" -#: include/nav.php:173 -msgid "Mark all system notifications seen" +#: include/conversation.php:616 include/conversation.php:1550 +#: mod/content.php:375 mod/photos.php:1666 +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "" +msgstr[1] "" + +#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666 +msgid "Not attending" msgstr "" -#: include/nav.php:177 mod/message.php:181 view/theme/frio/theme.php:261 -msgid "Messages" +#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666 +msgid "Might attend" msgstr "" -#: include/nav.php:177 view/theme/frio/theme.php:261 -msgid "Private mail" +#: include/conversation.php:753 mod/content.php:455 mod/content.php:761 +#: mod/photos.php:1731 object/Item.php:142 +msgid "Select" msgstr "" -#: include/nav.php:178 -msgid "Inbox" +#: include/conversation.php:754 mod/admin.php:1600 mod/contacts.php:828 +#: mod/contacts.php:1027 mod/content.php:456 mod/content.php:762 +#: mod/photos.php:1732 mod/settings.php:746 object/Item.php:143 +msgid "Delete" msgstr "" -#: include/nav.php:179 -msgid "Outbox" +#: include/conversation.php:797 mod/content.php:489 mod/content.php:917 +#: mod/content.php:918 object/Item.php:345 object/Item.php:346 +#, php-format +msgid "View %s's profile @ %s" msgstr "" -#: include/nav.php:180 mod/message.php:18 -msgid "New Message" +#: include/conversation.php:809 object/Item.php:333 +msgid "Categories:" msgstr "" -#: include/nav.php:183 -msgid "Manage" +#: include/conversation.php:810 object/Item.php:334 +msgid "Filed under:" msgstr "" -#: include/nav.php:183 -msgid "Manage other pages" +#: include/conversation.php:817 mod/content.php:499 mod/content.php:930 +#: object/Item.php:359 +#, php-format +msgid "%s from %s" msgstr "" -#: include/nav.php:186 mod/settings.php:83 -msgid "Delegations" +#: include/conversation.php:833 mod/content.php:515 +msgid "View in context" msgstr "" -#: include/nav.php:186 mod/delegate.php:132 -msgid "Delegate Page Management" +#: include/conversation.php:835 include/conversation.php:1307 +#: mod/content.php:517 mod/content.php:955 mod/editpost.php:117 +#: mod/message.php:337 mod/message.php:522 mod/photos.php:1630 +#: mod/wallmessage.php:143 object/Item.php:384 +msgid "Please wait" msgstr "" -#: include/nav.php:188 mod/newmember.php:15 mod/settings.php:113 -#: mod/admin.php:1708 mod/admin.php:1984 view/theme/frio/theme.php:262 -msgid "Settings" +#: include/conversation.php:912 +msgid "remove" msgstr "" -#: include/nav.php:188 view/theme/frio/theme.php:262 -msgid "Account settings" +#: include/conversation.php:916 +msgid "Delete Selected Items" msgstr "" -#: include/nav.php:191 include/identity.php:292 -msgid "Profiles" +#: include/conversation.php:1011 view/theme/frio/theme.php:347 +msgid "Follow Thread" msgstr "" -#: include/nav.php:191 -msgid "Manage/Edit Profiles" +#: include/conversation.php:1148 +#, php-format +msgid "%s likes this." msgstr "" -#: include/nav.php:194 view/theme/frio/theme.php:263 -msgid "Manage/edit friends and contacts" +#: include/conversation.php:1151 +#, php-format +msgid "%s doesn't like this." msgstr "" -#: include/nav.php:199 mod/admin.php:202 -msgid "Admin" +#: include/conversation.php:1154 +#, php-format +msgid "%s attends." msgstr "" -#: include/nav.php:199 -msgid "Site setup and configuration" +#: include/conversation.php:1157 +#, php-format +msgid "%s doesn't attend." msgstr "" -#: include/nav.php:202 -msgid "Navigation" +#: include/conversation.php:1160 +#, php-format +msgid "%s attends maybe." msgstr "" -#: include/nav.php:202 -msgid "Site map" +#: include/conversation.php:1171 +msgid "and" msgstr "" -#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:42 -#: mod/fbrowser.php:63 mod/photos.php:189 mod/photos.php:1125 -#: mod/photos.php:1258 mod/photos.php:1279 mod/photos.php:1841 -#: mod/photos.php:1855 -msgid "Contact Photos" +#: include/conversation.php:1177 +#, php-format +msgid ", and %d other people" msgstr "" -#: include/acl_selectors.php:355 -msgid "Post to Email" +#: include/conversation.php:1186 +#, php-format +msgid "%2$d people like this" msgstr "" -#: include/acl_selectors.php:360 +#: include/conversation.php:1187 #, php-format -msgid "Connectors disabled, since \"%s\" is enabled." +msgid "%s like this." msgstr "" -#: include/acl_selectors.php:361 mod/settings.php:1189 -msgid "Hide your profile details from unknown viewers?" +#: include/conversation.php:1190 +#, php-format +msgid "%2$d people don't like this" msgstr "" -#: include/acl_selectors.php:367 -msgid "Visible to everybody" +#: include/conversation.php:1191 +#, php-format +msgid "%s don't like this." msgstr "" -#: include/acl_selectors.php:368 view/theme/vier/config.php:109 -msgid "show" +#: include/conversation.php:1194 +#, php-format +msgid "%2$d people attend" msgstr "" -#: include/acl_selectors.php:369 view/theme/vier/config.php:109 -msgid "don't show" +#: include/conversation.php:1195 +#, php-format +msgid "%s attend." msgstr "" -#: include/acl_selectors.php:375 mod/editpost.php:125 -msgid "CC: email addresses" +#: include/conversation.php:1198 +#, php-format +msgid "%2$d people don't attend" msgstr "" -#: include/acl_selectors.php:376 mod/editpost.php:132 -msgid "Example: bob@example.com, mary@example.com" +#: include/conversation.php:1199 +#, php-format +msgid "%s don't attend." msgstr "" -#: include/acl_selectors.php:378 mod/photos.php:1198 mod/photos.php:1595 -#: mod/events.php:511 -msgid "Permissions" +#: include/conversation.php:1202 +#, php-format +msgid "%2$d people attend maybe" msgstr "" -#: include/acl_selectors.php:379 -msgid "Close" +#: include/conversation.php:1203 +#, php-format +msgid "%s anttend maybe." msgstr "" -#: include/contact_selectors.php:32 -msgid "Unknown | Not categorised" +#: include/conversation.php:1232 include/conversation.php:1248 +msgid "Visible to everybody" msgstr "" -#: include/contact_selectors.php:33 -msgid "Block immediately" +#: include/conversation.php:1233 include/conversation.php:1249 +#: mod/message.php:271 mod/message.php:278 mod/message.php:418 +#: mod/message.php:425 mod/wallmessage.php:117 mod/wallmessage.php:124 +msgid "Please enter a link URL:" msgstr "" -#: include/contact_selectors.php:34 -msgid "Shady, spammer, self-marketer" +#: include/conversation.php:1234 include/conversation.php:1250 +msgid "Please enter a video link/URL:" msgstr "" -#: include/contact_selectors.php:35 -msgid "Known to me, but no opinion" +#: include/conversation.php:1235 include/conversation.php:1251 +msgid "Please enter an audio link/URL:" msgstr "" -#: include/contact_selectors.php:36 -msgid "OK, probably harmless" +#: include/conversation.php:1236 include/conversation.php:1252 +msgid "Tag term:" msgstr "" -#: include/contact_selectors.php:37 -msgid "Reputable, has my trust" +#: include/conversation.php:1237 include/conversation.php:1253 mod/filer.php:31 +msgid "Save to Folder:" msgstr "" -#: include/contact_selectors.php:56 mod/admin.php:1070 -msgid "Frequently" +#: include/conversation.php:1238 include/conversation.php:1254 +msgid "Where are you right now?" msgstr "" -#: include/contact_selectors.php:57 mod/admin.php:1071 -msgid "Hourly" +#: include/conversation.php:1239 +msgid "Delete item(s)?" msgstr "" -#: include/contact_selectors.php:58 mod/admin.php:1072 -msgid "Twice daily" +#: include/conversation.php:1288 +msgid "Share" msgstr "" -#: include/contact_selectors.php:59 mod/admin.php:1073 -msgid "Daily" +#: include/conversation.php:1289 mod/editpost.php:103 mod/message.php:335 +#: mod/message.php:519 mod/wallmessage.php:141 +msgid "Upload photo" msgstr "" -#: include/contact_selectors.php:60 -msgid "Weekly" +#: include/conversation.php:1290 mod/editpost.php:104 +msgid "upload photo" msgstr "" -#: include/contact_selectors.php:61 -msgid "Monthly" +#: include/conversation.php:1291 mod/editpost.php:105 +msgid "Attach file" msgstr "" -#: include/contact_selectors.php:76 mod/dfrn_request.php:886 -msgid "Friendica" +#: include/conversation.php:1292 mod/editpost.php:106 +msgid "attach file" msgstr "" -#: include/contact_selectors.php:77 -msgid "OStatus" +#: include/conversation.php:1293 mod/editpost.php:107 mod/message.php:336 +#: mod/message.php:520 mod/wallmessage.php:142 +msgid "Insert web link" msgstr "" -#: include/contact_selectors.php:78 -msgid "RSS/Atom" +#: include/conversation.php:1294 mod/editpost.php:108 +msgid "web link" msgstr "" -#: include/contact_selectors.php:79 include/contact_selectors.php:86 -#: mod/admin.php:1580 mod/admin.php:1593 mod/admin.php:1606 mod/admin.php:1624 -msgid "Email" +#: include/conversation.php:1295 mod/editpost.php:109 +msgid "Insert video link" msgstr "" -#: include/contact_selectors.php:80 mod/dfrn_request.php:888 -#: mod/settings.php:849 -msgid "Diaspora" +#: include/conversation.php:1296 mod/editpost.php:110 +msgid "video link" msgstr "" -#: include/contact_selectors.php:81 -msgid "Facebook" +#: include/conversation.php:1297 mod/editpost.php:111 +msgid "Insert audio link" msgstr "" -#: include/contact_selectors.php:82 -msgid "Zot!" +#: include/conversation.php:1298 mod/editpost.php:112 +msgid "audio link" msgstr "" -#: include/contact_selectors.php:83 -msgid "LinkedIn" +#: include/conversation.php:1299 mod/editpost.php:113 +msgid "Set your location" msgstr "" -#: include/contact_selectors.php:84 -msgid "XMPP/IM" +#: include/conversation.php:1300 mod/editpost.php:114 +msgid "set location" msgstr "" -#: include/contact_selectors.php:85 -msgid "MySpace" +#: include/conversation.php:1301 mod/editpost.php:115 +msgid "Clear browser location" msgstr "" -#: include/contact_selectors.php:87 -msgid "Google+" +#: include/conversation.php:1302 mod/editpost.php:116 +msgid "clear location" msgstr "" -#: include/contact_selectors.php:88 -msgid "pump.io" +#: include/conversation.php:1304 mod/editpost.php:130 +msgid "Set title" msgstr "" -#: include/contact_selectors.php:89 -msgid "Twitter" +#: include/conversation.php:1306 mod/editpost.php:132 +msgid "Categories (comma-separated list)" msgstr "" -#: include/contact_selectors.php:90 -msgid "Diaspora Connector" +#: include/conversation.php:1308 mod/editpost.php:118 +msgid "Permission settings" msgstr "" -#: include/contact_selectors.php:91 -msgid "GNU Social Connector" +#: include/conversation.php:1309 mod/editpost.php:147 +msgid "permissions" msgstr "" -#: include/contact_selectors.php:92 -msgid "pnut" +#: include/conversation.php:1317 mod/editpost.php:127 +msgid "Public post" msgstr "" -#: include/contact_selectors.php:93 -msgid "App.net" +#: include/conversation.php:1322 mod/content.php:739 mod/editpost.php:138 +#: mod/events.php:507 mod/photos.php:1650 mod/photos.php:1692 +#: mod/photos.php:1772 object/Item.php:706 +msgid "Preview" msgstr "" -#: include/enotify.php:27 -msgid "Friendica Notification" +#: include/conversation.php:1326 include/items.php:2139 mod/contacts.php:459 +#: mod/dfrn_request.php:895 mod/editpost.php:141 mod/fbrowser.php:103 +#: mod/fbrowser.php:138 mod/follow.php:161 mod/message.php:210 +#: mod/photos.php:248 mod/photos.php:340 mod/settings.php:684 +#: mod/settings.php:710 mod/suggest.php:35 mod/tagrm.php:14 mod/tagrm.php:99 +#: mod/unfollow.php:117 mod/videos.php:135 +msgid "Cancel" msgstr "" -#: include/enotify.php:30 -msgid "Thank You," +#: include/conversation.php:1332 +msgid "Post to Groups" msgstr "" -#: include/enotify.php:33 -#, php-format +#: include/conversation.php:1333 +msgid "Post to Contacts" +msgstr "" + +#: include/conversation.php:1334 +msgid "Private post" +msgstr "" + +#: include/conversation.php:1339 include/identity.php:267 mod/editpost.php:145 +msgid "Message" +msgstr "" + +#: include/conversation.php:1340 mod/editpost.php:146 +msgid "Browser" +msgstr "" + +#: include/conversation.php:1522 +msgid "View all" +msgstr "" + +#: include/conversation.php:1544 +msgid "Like" +msgid_plural "Likes" +msgstr[0] "" +msgstr[1] "" + +#: include/conversation.php:1547 +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "" +msgstr[1] "" + +#: include/conversation.php:1553 +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "" +msgstr[1] "" + +#: include/dbstructure.php:26 +msgid "There are no tables on MyISAM." +msgstr "" + +#: include/dbstructure.php:67 +#, php-format +msgid "" +"\n" +"\t\t\tThe friendica developers released update %s recently,\n" +"\t\t\tbut when I tried to install it, something went terribly wrong.\n" +"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" +"\t\t\tfriendica developer if you can not help me on your own. My database " +"might be invalid." +msgstr "" + +#: include/dbstructure.php:72 +#, php-format +msgid "" +"The error message is\n" +"[pre]%s[/pre]" +msgstr "" + +#: include/dbstructure.php:197 +#, php-format +msgid "" +"\n" +"Error %d occurred during database update:\n" +"%s\n" +msgstr "" + +#: include/dbstructure.php:200 +msgid "Errors encountered performing database changes: " +msgstr "" + +#: include/dbstructure.php:208 +msgid ": Database update" +msgstr "" + +#: include/dbstructure.php:440 +#, php-format +msgid "%s: updating %s table." +msgstr "" + +#: include/delivery.php:429 +msgid "(no subject)" +msgstr "" + +#: include/delivery.php:441 include/enotify.php:47 +msgid "noreply" +msgstr "" + +#: include/dfrn.php:1331 +#, php-format +msgid "%s\\'s birthday" +msgstr "" + +#: include/diaspora.php:2226 +msgid "Sharing notification from Diaspora network" +msgstr "" + +#: include/diaspora.php:3183 +msgid "Attachments:" +msgstr "" + +#: include/enotify.php:28 +msgid "Friendica Notification" +msgstr "" + +#: include/enotify.php:31 +msgid "Thank You," +msgstr "" + +#: include/enotify.php:34 +#, php-format msgid "%s Administrator" msgstr "" -#: include/enotify.php:35 +#: include/enotify.php:36 #, php-format msgid "%1$s, %2$s Administrator" msgstr "" -#: include/enotify.php:78 +#: include/enotify.php:81 #, php-format msgid "%s " msgstr "" -#: include/enotify.php:91 +#: include/enotify.php:94 #, php-format msgid "[Friendica:Notify] New mail received at %s" msgstr "" -#: include/enotify.php:93 +#: include/enotify.php:96 #, php-format msgid "%1$s sent you a new private message at %2$s." msgstr "" -#: include/enotify.php:94 +#: include/enotify.php:97 #, php-format msgid "%1$s sent you %2$s." msgstr "" -#: include/enotify.php:94 +#: include/enotify.php:97 msgid "a private message" msgstr "" -#: include/enotify.php:96 +#: include/enotify.php:99 #, php-format msgid "Please visit %s to view and/or reply to your private messages." msgstr "" -#: include/enotify.php:142 +#: include/enotify.php:145 #, php-format msgid "%1$s commented on [url=%2$s]a %3$s[/url]" msgstr "" -#: include/enotify.php:149 +#: include/enotify.php:152 #, php-format msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]" msgstr "" -#: include/enotify.php:157 +#: include/enotify.php:160 #, php-format msgid "%1$s commented on [url=%2$s]your %3$s[/url]" msgstr "" -#: include/enotify.php:167 +#: include/enotify.php:170 #, php-format msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s" msgstr "" -#: include/enotify.php:169 +#: include/enotify.php:172 #, php-format msgid "%s commented on an item/conversation you have been following." msgstr "" -#: include/enotify.php:172 include/enotify.php:186 include/enotify.php:200 -#: include/enotify.php:214 include/enotify.php:232 include/enotify.php:246 +#: include/enotify.php:175 include/enotify.php:189 include/enotify.php:203 +#: include/enotify.php:217 include/enotify.php:235 include/enotify.php:249 #, php-format msgid "Please visit %s to view and/or reply to the conversation." msgstr "" -#: include/enotify.php:179 +#: include/enotify.php:182 #, php-format msgid "[Friendica:Notify] %s posted to your profile wall" msgstr "" -#: include/enotify.php:181 +#: include/enotify.php:184 #, php-format msgid "%1$s posted to your profile wall at %2$s" msgstr "" -#: include/enotify.php:182 +#: include/enotify.php:185 #, php-format msgid "%1$s posted to [url=%2$s]your wall[/url]" msgstr "" -#: include/enotify.php:193 +#: include/enotify.php:196 #, php-format msgid "[Friendica:Notify] %s tagged you" msgstr "" -#: include/enotify.php:195 +#: include/enotify.php:198 #, php-format msgid "%1$s tagged you at %2$s" msgstr "" -#: include/enotify.php:196 +#: include/enotify.php:199 #, php-format msgid "%1$s [url=%2$s]tagged you[/url]." msgstr "" -#: include/enotify.php:207 +#: include/enotify.php:210 #, php-format msgid "[Friendica:Notify] %s shared a new post" msgstr "" -#: include/enotify.php:209 +#: include/enotify.php:212 #, php-format msgid "%1$s shared a new post at %2$s" msgstr "" -#: include/enotify.php:210 +#: include/enotify.php:213 #, php-format msgid "%1$s [url=%2$s]shared a post[/url]." msgstr "" -#: include/enotify.php:221 +#: include/enotify.php:224 #, php-format msgid "[Friendica:Notify] %1$s poked you" msgstr "" -#: include/enotify.php:223 +#: include/enotify.php:226 #, php-format msgid "%1$s poked you at %2$s" msgstr "" -#: include/enotify.php:224 +#: include/enotify.php:227 #, php-format msgid "%1$s [url=%2$s]poked you[/url]." msgstr "" -#: include/enotify.php:239 +#: include/enotify.php:242 #, php-format msgid "[Friendica:Notify] %s tagged your post" msgstr "" -#: include/enotify.php:241 +#: include/enotify.php:244 #, php-format msgid "%1$s tagged your post at %2$s" msgstr "" -#: include/enotify.php:242 +#: include/enotify.php:245 #, php-format msgid "%1$s tagged [url=%2$s]your post[/url]" msgstr "" -#: include/enotify.php:253 +#: include/enotify.php:256 msgid "[Friendica:Notify] Introduction received" msgstr "" -#: include/enotify.php:255 +#: include/enotify.php:258 #, php-format msgid "You've received an introduction from '%1$s' at %2$s" msgstr "" -#: include/enotify.php:256 +#: include/enotify.php:259 #, php-format msgid "You've received [url=%1$s]an introduction[/url] from %2$s." msgstr "" -#: include/enotify.php:260 include/enotify.php:303 +#: include/enotify.php:263 include/enotify.php:306 #, php-format msgid "You may visit their profile at %s" msgstr "" -#: include/enotify.php:262 +#: include/enotify.php:265 #, php-format msgid "Please visit %s to approve or reject the introduction." msgstr "" -#: include/enotify.php:270 +#: include/enotify.php:273 msgid "[Friendica:Notify] A new person is sharing with you" msgstr "" -#: include/enotify.php:272 include/enotify.php:273 +#: include/enotify.php:275 include/enotify.php:276 #, php-format msgid "%1$s is sharing with you at %2$s" msgstr "" -#: include/enotify.php:279 +#: include/enotify.php:282 msgid "[Friendica:Notify] You have a new follower" msgstr "" -#: include/enotify.php:281 include/enotify.php:282 +#: include/enotify.php:284 include/enotify.php:285 #, php-format msgid "You have a new follower at %2$s : %1$s" msgstr "" -#: include/enotify.php:293 +#: include/enotify.php:296 msgid "[Friendica:Notify] Friend suggestion received" msgstr "" -#: include/enotify.php:295 +#: include/enotify.php:298 #, php-format msgid "You've received a friend suggestion from '%1$s' at %2$s" msgstr "" -#: include/enotify.php:296 +#: include/enotify.php:299 #, php-format msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." msgstr "" -#: include/enotify.php:301 +#: include/enotify.php:304 msgid "Name:" msgstr "" -#: include/enotify.php:302 +#: include/enotify.php:305 msgid "Photo:" msgstr "" -#: include/enotify.php:305 +#: include/enotify.php:308 #, php-format msgid "Please visit %s to approve or reject the suggestion." msgstr "" -#: include/enotify.php:313 include/enotify.php:327 +#: include/enotify.php:316 include/enotify.php:330 msgid "[Friendica:Notify] Connection accepted" msgstr "" -#: include/enotify.php:315 include/enotify.php:329 +#: include/enotify.php:318 include/enotify.php:332 #, php-format msgid "'%1$s' has accepted your connection request at %2$s" msgstr "" -#: include/enotify.php:316 include/enotify.php:330 +#: include/enotify.php:319 include/enotify.php:333 #, php-format msgid "%2$s has accepted your [url=%1$s]connection request[/url]." msgstr "" -#: include/enotify.php:320 +#: include/enotify.php:323 msgid "" "You are now mutual friends and may exchange status updates, photos, and " "email without restriction." msgstr "" -#: include/enotify.php:322 +#: include/enotify.php:325 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." msgstr "" -#: include/enotify.php:334 +#: include/enotify.php:337 #, php-format msgid "" "'%1$s' has chosen to accept you a \"fan\", which restricts some forms of " @@ -1836,1206 +1816,1090 @@ msgid "" "automatically." msgstr "" -#: include/enotify.php:336 +#: include/enotify.php:339 #, php-format msgid "" "'%1$s' may choose to extend this into a two-way or more permissive " "relationship in the future." msgstr "" -#: include/enotify.php:338 +#: include/enotify.php:341 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." msgstr "" -#: include/enotify.php:348 +#: include/enotify.php:351 msgid "[Friendica System:Notify] registration request" msgstr "" -#: include/enotify.php:350 +#: include/enotify.php:353 #, php-format msgid "You've received a registration request from '%1$s' at %2$s" msgstr "" -#: include/enotify.php:351 +#: include/enotify.php:354 #, php-format msgid "You've received a [url=%1$s]registration request[/url] from %2$s." msgstr "" -#: include/enotify.php:355 +#: include/enotify.php:358 #, php-format msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)" msgstr "" -#: include/enotify.php:358 +#: include/enotify.php:361 #, php-format msgid "Please visit %s to approve or reject the request." msgstr "" -#: include/group.php:25 -msgid "" -"A deleted group with this name was revived. Existing item permissions " -"may apply to this group and any future members. If this is " -"not what you intended, please create another group with a different name." +#: include/event.php:409 +msgid "all-day" msgstr "" -#: include/group.php:201 -msgid "Default privacy group for new contacts" +#: include/event.php:411 +msgid "Sun" msgstr "" -#: include/group.php:234 -msgid "Everybody" +#: include/event.php:412 +msgid "Mon" msgstr "" -#: include/group.php:257 -msgid "edit" +#: include/event.php:413 +msgid "Tue" msgstr "" -#: include/group.php:278 mod/newmember.php:39 -msgid "Groups" +#: include/event.php:414 +msgid "Wed" msgstr "" -#: include/group.php:280 -msgid "Edit groups" +#: include/event.php:415 +msgid "Thu" msgstr "" -#: include/group.php:282 -msgid "Edit group" +#: include/event.php:416 +msgid "Fri" msgstr "" -#: include/group.php:283 -msgid "Create a new group" +#: include/event.php:417 +msgid "Sat" msgstr "" -#: include/group.php:284 mod/group.php:100 mod/group.php:197 -msgid "Group Name: " +#: include/event.php:419 include/text.php:1207 mod/settings.php:983 +msgid "Sunday" msgstr "" -#: include/group.php:286 -msgid "Contacts not in any group" +#: include/event.php:420 include/text.php:1207 mod/settings.php:983 +msgid "Monday" msgstr "" -#: include/group.php:288 mod/network.php:210 -msgid "add" +#: include/event.php:421 include/text.php:1207 +msgid "Tuesday" msgstr "" -#: include/oembed.php:253 -msgid "Embedded content" +#: include/event.php:422 include/text.php:1207 +msgid "Wednesday" msgstr "" -#: include/oembed.php:261 -msgid "Embedding disabled" +#: include/event.php:423 include/text.php:1207 +msgid "Thursday" msgstr "" -#: include/Contact.php:380 include/Contact.php:393 include/Contact.php:438 -#: include/conversation.php:1012 include/conversation.php:1028 -#: mod/allfriends.php:70 mod/directory.php:153 mod/match.php:76 -#: mod/suggest.php:84 mod/dirfind.php:211 -msgid "View Profile" +#: include/event.php:424 include/text.php:1207 +msgid "Friday" msgstr "" -#: include/Contact.php:394 include/contact_widgets.php:38 -#: include/conversation.php:1025 mod/allfriends.php:71 mod/match.php:77 -#: mod/suggest.php:85 mod/dirfind.php:212 mod/follow.php:108 -#: mod/contacts.php:615 -msgid "Connect/Follow" +#: include/event.php:425 include/text.php:1207 +msgid "Saturday" msgstr "" -#: include/Contact.php:437 include/conversation.php:1011 -msgid "View Status" +#: include/event.php:427 +msgid "Jan" msgstr "" -#: include/Contact.php:439 include/conversation.php:1013 -msgid "View Photos" +#: include/event.php:428 +msgid "Feb" msgstr "" -#: include/Contact.php:440 include/conversation.php:1014 -msgid "Network Posts" +#: include/event.php:429 +msgid "Mar" msgstr "" -#: include/Contact.php:441 include/conversation.php:1015 -msgid "View Contact" +#: include/event.php:430 +msgid "Apr" msgstr "" -#: include/Contact.php:442 -msgid "Drop Contact" +#: include/event.php:431 include/event.php:444 include/text.php:1211 +msgid "May" msgstr "" -#: include/Contact.php:443 include/conversation.php:1016 -msgid "Send PM" +#: include/event.php:432 +msgid "Jun" msgstr "" -#: include/Contact.php:444 include/conversation.php:1020 -msgid "Poke" +#: include/event.php:433 +msgid "Jul" msgstr "" -#: include/Contact.php:813 -msgid "Organisation" +#: include/event.php:434 +msgid "Aug" msgstr "" -#: include/Contact.php:816 -msgid "News" +#: include/event.php:435 +msgid "Sept" msgstr "" -#: include/Contact.php:819 -msgid "Forum" +#: include/event.php:436 +msgid "Oct" msgstr "" -#: include/ForumManager.php:120 view/theme/vier/theme.php:250 -msgid "External link to forum" +#: include/event.php:437 +msgid "Nov" msgstr "" -#: include/ForumManager.php:123 include/contact_widgets.php:271 -#: include/items.php:2385 mod/content.php:625 object/Item.php:419 -#: view/theme/vier/theme.php:253 src/App.php:528 -msgid "show more" +#: include/event.php:438 +msgid "Dec" msgstr "" -#: include/bbcode.php:428 include/bbcode.php:1186 include/bbcode.php:1187 -msgid "Image/photo" +#: include/event.php:440 include/text.php:1211 +msgid "January" msgstr "" -#: include/bbcode.php:544 -#, php-format -msgid "%2$s %3$s" +#: include/event.php:441 include/text.php:1211 +msgid "February" msgstr "" -#: include/bbcode.php:1143 include/bbcode.php:1165 -msgid "$1 wrote:" +#: include/event.php:442 include/text.php:1211 +msgid "March" msgstr "" -#: include/bbcode.php:1195 include/bbcode.php:1196 -msgid "Encrypted content" +#: include/event.php:443 include/text.php:1211 +msgid "April" msgstr "" -#: include/bbcode.php:1315 -msgid "Invalid source protocol" +#: include/event.php:445 include/text.php:1211 +msgid "June" msgstr "" -#: include/bbcode.php:1326 -msgid "Invalid link protocol" +#: include/event.php:446 include/text.php:1211 +msgid "July" msgstr "" -#: include/contact_widgets.php:11 -msgid "Add New Contact" +#: include/event.php:447 include/text.php:1211 +msgid "August" msgstr "" -#: include/contact_widgets.php:12 -msgid "Enter address or web location" +#: include/event.php:448 include/text.php:1211 +msgid "September" msgstr "" -#: include/contact_widgets.php:13 -msgid "Example: bob@example.com, http://example.com/barbara" +#: include/event.php:449 include/text.php:1211 +msgid "October" msgstr "" -#: include/contact_widgets.php:15 include/identity.php:228 -#: mod/allfriends.php:87 mod/match.php:92 mod/suggest.php:103 -#: mod/dirfind.php:209 -msgid "Connect" +#: include/event.php:450 include/text.php:1211 +msgid "November" msgstr "" -#: include/contact_widgets.php:30 -#, php-format -msgid "%d invitation available" -msgid_plural "%d invitations available" -msgstr[0] "" -msgstr[1] "" +#: include/event.php:451 include/text.php:1211 +msgid "December" +msgstr "" -#: include/contact_widgets.php:36 -msgid "Find People" +#: include/event.php:453 mod/cal.php:281 mod/events.php:387 +msgid "today" msgstr "" -#: include/contact_widgets.php:37 -msgid "Enter name or interest" +#: include/event.php:458 +msgid "No events to display" msgstr "" -#: include/contact_widgets.php:39 -msgid "Examples: Robert Morgenstein, Fishing" +#: include/event.php:571 +msgid "l, F j" msgstr "" -#: include/contact_widgets.php:40 mod/directory.php:202 mod/contacts.php:811 -msgid "Find" +#: include/event.php:593 +msgid "Edit event" msgstr "" -#: include/contact_widgets.php:41 mod/suggest.php:116 -#: view/theme/vier/theme.php:195 -msgid "Friend Suggestions" +#: include/event.php:594 +msgid "Delete event" msgstr "" -#: include/contact_widgets.php:42 view/theme/vier/theme.php:194 -msgid "Similar Interests" +#: include/event.php:620 include/text.php:1609 include/text.php:1616 +msgid "link to source" msgstr "" -#: include/contact_widgets.php:43 -msgid "Random Profile" +#: include/event.php:878 +msgid "Export" msgstr "" -#: include/contact_widgets.php:44 view/theme/vier/theme.php:196 -msgid "Invite Friends" +#: include/event.php:879 +msgid "Export calendar as ical" msgstr "" -#: include/contact_widgets.php:45 -msgid "View Global Directory" +#: include/event.php:880 +msgid "Export calendar as csv" msgstr "" -#: include/contact_widgets.php:131 -msgid "Networks" +#: include/follow.php:85 mod/dfrn_request.php:515 +msgid "Disallowed profile URL." msgstr "" -#: include/contact_widgets.php:134 -msgid "All Networks" +#: include/follow.php:90 mod/admin.php:289 mod/admin.php:307 +#: mod/dfrn_request.php:521 mod/friendica.php:116 +msgid "Blocked domain" msgstr "" -#: include/contact_widgets.php:169 include/contact_widgets.php:204 -msgid "Everything" +#: include/follow.php:95 +msgid "Connect URL missing." msgstr "" -#: include/contact_widgets.php:201 -msgid "Categories" +#: include/follow.php:123 +msgid "" +"This site is not configured to allow communications with other networks." msgstr "" -#: include/contact_widgets.php:266 -#, php-format -msgid "%d contact in common" -msgid_plural "%d contacts in common" -msgstr[0] "" -msgstr[1] "" - -#: include/conversation.php:160 -#, php-format -msgid "%1$s attends %2$s's %3$s" +#: include/follow.php:124 include/follow.php:138 +msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: include/conversation.php:163 -#, php-format -msgid "%1$s doesn't attend %2$s's %3$s" +#: include/follow.php:136 +msgid "The profile address specified does not provide adequate information." msgstr "" -#: include/conversation.php:166 -#, php-format -msgid "%1$s attends maybe %2$s's %3$s" +#: include/follow.php:141 +msgid "An author or name was not found." msgstr "" -#: include/conversation.php:199 mod/dfrn_confirm.php:480 -#, php-format -msgid "%1$s is now friends with %2$s" +#: include/follow.php:144 +msgid "No browser URL could be matched to this address." msgstr "" -#: include/conversation.php:240 -#, php-format -msgid "%1$s poked %2$s" +#: include/follow.php:147 +msgid "" +"Unable to match @-style Identity Address with a known protocol or email " +"contact." msgstr "" -#: include/conversation.php:261 mod/mood.php:64 -#, php-format -msgid "%1$s is currently %2$s" +#: include/follow.php:148 +msgid "Use mailto: in front of address to force email check." msgstr "" -#: include/conversation.php:308 mod/tagger.php:96 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" +#: include/follow.php:154 +msgid "" +"The profile address specified belongs to a network which has been disabled " +"on this site." msgstr "" -#: include/conversation.php:335 -msgid "post/item" +#: include/follow.php:159 +msgid "" +"Limited profile. This person will be unable to receive direct/personal " +"notifications from you." msgstr "" -#: include/conversation.php:336 -#, php-format -msgid "%1$s marked %2$s's %3$s as favorite" +#: include/follow.php:260 +msgid "Unable to retrieve contact information." msgstr "" -#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664 -#: mod/profiles.php:344 -msgid "Likes" +#: include/identity.php:46 +msgid "Requested account is not available." msgstr "" -#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664 -#: mod/profiles.php:348 -msgid "Dislikes" +#: include/identity.php:55 mod/profile.php:23 +msgid "Requested profile is not available." msgstr "" -#: include/conversation.php:615 include/conversation.php:1549 -#: mod/content.php:374 mod/photos.php:1665 -msgid "Attending" -msgid_plural "Attending" -msgstr[0] "" -msgstr[1] "" - -#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665 -msgid "Not attending" +#: include/identity.php:99 include/identity.php:322 include/identity.php:755 +msgid "Edit profile" msgstr "" -#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665 -msgid "Might attend" +#: include/identity.php:262 +msgid "Atom feed" msgstr "" -#: include/conversation.php:752 mod/content.php:454 mod/content.php:760 -#: mod/photos.php:1730 object/Item.php:137 -msgid "Select" +#: include/identity.php:293 include/nav.php:192 +msgid "Profiles" msgstr "" -#: include/conversation.php:753 mod/content.php:455 mod/content.php:761 -#: mod/photos.php:1731 mod/contacts.php:821 mod/contacts.php:1020 -#: mod/settings.php:745 mod/admin.php:1598 object/Item.php:138 -msgid "Delete" +#: include/identity.php:293 +msgid "Manage/edit profiles" msgstr "" -#: include/conversation.php:796 mod/content.php:488 mod/content.php:916 -#: mod/content.php:917 object/Item.php:352 object/Item.php:353 -#, php-format -msgid "View %s's profile @ %s" +#: include/identity.php:298 include/identity.php:324 mod/profiles.php:791 +msgid "Change profile photo" msgstr "" -#: include/conversation.php:808 object/Item.php:340 -msgid "Categories:" +#: include/identity.php:299 mod/profiles.php:792 +msgid "Create New Profile" msgstr "" -#: include/conversation.php:809 object/Item.php:341 -msgid "Filed under:" +#: include/identity.php:309 mod/profiles.php:781 +msgid "Profile Image" msgstr "" -#: include/conversation.php:816 mod/content.php:498 mod/content.php:929 -#: object/Item.php:366 -#, php-format -msgid "%s from %s" +#: include/identity.php:312 mod/profiles.php:783 +msgid "visible to everybody" msgstr "" -#: include/conversation.php:832 mod/content.php:514 -msgid "View in context" +#: include/identity.php:313 mod/profiles.php:688 mod/profiles.php:784 +msgid "Edit visibility" msgstr "" -#: include/conversation.php:834 include/conversation.php:1306 -#: mod/content.php:516 mod/content.php:954 mod/editpost.php:116 -#: mod/message.php:339 mod/message.php:524 mod/photos.php:1629 -#: mod/wallmessage.php:142 object/Item.php:391 -msgid "Please wait" +#: include/identity.php:341 include/identity.php:642 mod/directory.php:137 +#: mod/notifications.php:253 +msgid "Gender:" msgstr "" -#: include/conversation.php:911 -msgid "remove" +#: include/identity.php:344 include/identity.php:665 mod/directory.php:139 +msgid "Status:" msgstr "" -#: include/conversation.php:915 -msgid "Delete Selected Items" +#: include/identity.php:346 include/identity.php:682 mod/directory.php:141 +msgid "Homepage:" msgstr "" -#: include/conversation.php:1010 view/theme/frio/theme.php:346 -msgid "Follow Thread" +#: include/identity.php:348 include/identity.php:702 mod/contacts.php:652 +#: mod/directory.php:143 mod/notifications.php:249 +msgid "About:" msgstr "" -#: include/conversation.php:1147 -#, php-format -msgid "%s likes this." +#: include/identity.php:350 mod/contacts.php:650 +msgid "XMPP:" msgstr "" -#: include/conversation.php:1150 -#, php-format -msgid "%s doesn't like this." +#: include/identity.php:436 mod/contacts.php:59 mod/notifications.php:261 +msgid "Network:" msgstr "" -#: include/conversation.php:1153 -#, php-format -msgid "%s attends." +#: include/identity.php:465 include/identity.php:556 +msgid "g A l F d" msgstr "" -#: include/conversation.php:1156 -#, php-format -msgid "%s doesn't attend." +#: include/identity.php:466 include/identity.php:557 +msgid "F d" msgstr "" -#: include/conversation.php:1159 -#, php-format -msgid "%s attends maybe." +#: include/identity.php:518 include/identity.php:604 +msgid "[today]" msgstr "" -#: include/conversation.php:1170 -msgid "and" +#: include/identity.php:530 +msgid "Birthday Reminders" msgstr "" -#: include/conversation.php:1176 -#, php-format -msgid ", and %d other people" +#: include/identity.php:531 +msgid "Birthdays this week:" msgstr "" -#: include/conversation.php:1185 -#, php-format -msgid "%2$d people like this" +#: include/identity.php:591 +msgid "[No description]" msgstr "" -#: include/conversation.php:1186 -#, php-format -msgid "%s like this." +#: include/identity.php:618 +msgid "Event Reminders" msgstr "" -#: include/conversation.php:1189 -#, php-format -msgid "%2$d people don't like this" +#: include/identity.php:619 +msgid "Events this week:" msgstr "" -#: include/conversation.php:1190 -#, php-format -msgid "%s don't like this." +#: include/identity.php:630 include/identity.php:759 include/identity.php:792 +#: include/nav.php:85 mod/newmember.php:20 mod/profperm.php:107 +#: mod/contacts.php:659 mod/contacts.php:861 view/theme/frio/theme.php:254 +msgid "Profile" msgstr "" -#: include/conversation.php:1193 -#, php-format -msgid "%2$d people attend" +#: include/identity.php:639 mod/settings.php:1288 +msgid "Full Name:" msgstr "" -#: include/conversation.php:1194 -#, php-format -msgid "%s attend." +#: include/identity.php:646 +msgid "j F, Y" msgstr "" -#: include/conversation.php:1197 -#, php-format -msgid "%2$d people don't attend" +#: include/identity.php:647 +msgid "j F" msgstr "" -#: include/conversation.php:1198 -#, php-format -msgid "%s don't attend." +#: include/identity.php:661 +msgid "Age:" msgstr "" -#: include/conversation.php:1201 +#: include/identity.php:674 #, php-format -msgid "%2$d people attend maybe" +msgid "for %1$d %2$s" msgstr "" -#: include/conversation.php:1202 -#, php-format -msgid "%s anttend maybe." +#: include/identity.php:678 mod/profiles.php:707 +msgid "Sexual Preference:" msgstr "" -#: include/conversation.php:1231 include/conversation.php:1247 -msgid "Visible to everybody" +#: include/identity.php:686 mod/profiles.php:734 +msgid "Hometown:" msgstr "" -#: include/conversation.php:1232 include/conversation.php:1248 -#: mod/message.php:273 mod/message.php:280 mod/message.php:420 -#: mod/message.php:427 mod/wallmessage.php:116 mod/wallmessage.php:123 -msgid "Please enter a link URL:" +#: include/identity.php:690 mod/contacts.php:654 mod/follow.php:174 +#: mod/notifications.php:251 +msgid "Tags:" msgstr "" -#: include/conversation.php:1233 include/conversation.php:1249 -msgid "Please enter a video link/URL:" +#: include/identity.php:694 mod/profiles.php:735 +msgid "Political Views:" msgstr "" -#: include/conversation.php:1234 include/conversation.php:1250 -msgid "Please enter an audio link/URL:" +#: include/identity.php:698 +msgid "Religion:" msgstr "" -#: include/conversation.php:1235 include/conversation.php:1251 -msgid "Tag term:" +#: include/identity.php:706 +msgid "Hobbies/Interests:" msgstr "" -#: include/conversation.php:1236 include/conversation.php:1252 mod/filer.php:31 -msgid "Save to Folder:" +#: include/identity.php:710 mod/profiles.php:739 +msgid "Likes:" msgstr "" -#: include/conversation.php:1237 include/conversation.php:1253 -msgid "Where are you right now?" +#: include/identity.php:714 mod/profiles.php:740 +msgid "Dislikes:" msgstr "" -#: include/conversation.php:1238 -msgid "Delete item(s)?" +#: include/identity.php:718 +msgid "Contact information and Social Networks:" msgstr "" -#: include/conversation.php:1287 -msgid "Share" +#: include/identity.php:722 +msgid "Musical interests:" msgstr "" -#: include/conversation.php:1288 mod/editpost.php:102 mod/message.php:337 -#: mod/message.php:521 mod/wallmessage.php:140 -msgid "Upload photo" +#: include/identity.php:726 +msgid "Books, literature:" msgstr "" -#: include/conversation.php:1289 mod/editpost.php:103 -msgid "upload photo" +#: include/identity.php:730 +msgid "Television:" msgstr "" -#: include/conversation.php:1290 mod/editpost.php:104 -msgid "Attach file" +#: include/identity.php:734 +msgid "Film/dance/culture/entertainment:" msgstr "" -#: include/conversation.php:1291 mod/editpost.php:105 -msgid "attach file" +#: include/identity.php:738 +msgid "Love/Romance:" msgstr "" -#: include/conversation.php:1292 mod/editpost.php:106 mod/message.php:338 -#: mod/message.php:522 mod/wallmessage.php:141 -msgid "Insert web link" +#: include/identity.php:742 +msgid "Work/employment:" msgstr "" -#: include/conversation.php:1293 mod/editpost.php:107 -msgid "web link" +#: include/identity.php:746 +msgid "School/education:" msgstr "" -#: include/conversation.php:1294 mod/editpost.php:108 -msgid "Insert video link" +#: include/identity.php:751 +msgid "Forums:" msgstr "" -#: include/conversation.php:1295 mod/editpost.php:109 -msgid "video link" +#: include/identity.php:760 mod/events.php:510 +msgid "Basic" msgstr "" -#: include/conversation.php:1296 mod/editpost.php:110 -msgid "Insert audio link" +#: include/identity.php:761 mod/admin.php:1151 mod/contacts.php:890 +#: mod/events.php:511 +msgid "Advanced" msgstr "" -#: include/conversation.php:1297 mod/editpost.php:111 -msgid "audio link" +#: include/identity.php:784 include/nav.php:84 mod/contacts.php:657 +#: mod/contacts.php:853 view/theme/frio/theme.php:253 +msgid "Status" msgstr "" -#: include/conversation.php:1298 mod/editpost.php:112 -msgid "Set your location" +#: include/identity.php:787 mod/contacts.php:856 mod/follow.php:182 +#: mod/unfollow.php:133 +msgid "Status Messages and Posts" msgstr "" -#: include/conversation.php:1299 mod/editpost.php:113 -msgid "set location" +#: include/identity.php:795 mod/contacts.php:864 +msgid "Profile Details" msgstr "" -#: include/conversation.php:1300 mod/editpost.php:114 -msgid "Clear browser location" +#: include/identity.php:800 include/nav.php:86 mod/fbrowser.php:34 +#: view/theme/frio/theme.php:255 +msgid "Photos" msgstr "" -#: include/conversation.php:1301 mod/editpost.php:115 -msgid "clear location" +#: include/identity.php:803 mod/photos.php:96 +msgid "Photo Albums" msgstr "" -#: include/conversation.php:1303 mod/editpost.php:129 -msgid "Set title" +#: include/identity.php:808 include/identity.php:811 include/nav.php:87 +#: view/theme/frio/theme.php:256 +msgid "Videos" msgstr "" -#: include/conversation.php:1305 mod/editpost.php:131 -msgid "Categories (comma-separated list)" +#: include/identity.php:820 include/identity.php:831 include/nav.php:88 +#: include/nav.php:152 mod/cal.php:273 mod/events.php:378 +#: view/theme/frio/theme.php:257 view/theme/frio/theme.php:261 +msgid "Events" msgstr "" -#: include/conversation.php:1307 mod/editpost.php:117 -msgid "Permission settings" +#: include/identity.php:823 include/identity.php:834 include/nav.php:152 +#: view/theme/frio/theme.php:261 +msgid "Events and Calendar" msgstr "" -#: include/conversation.php:1308 mod/editpost.php:146 -msgid "permissions" +#: include/identity.php:842 mod/notes.php:49 +msgid "Personal Notes" msgstr "" -#: include/conversation.php:1316 mod/editpost.php:126 -msgid "Public post" +#: include/identity.php:845 +msgid "Only You Can See This" msgstr "" -#: include/conversation.php:1321 mod/content.php:738 mod/editpost.php:137 -#: mod/photos.php:1649 mod/photos.php:1691 mod/photos.php:1771 -#: mod/events.php:506 object/Item.php:713 -msgid "Preview" +#: include/identity.php:853 include/identity.php:856 include/nav.php:131 +#: include/nav.php:195 include/text.php:1101 mod/viewcontacts.php:124 +#: mod/contacts.php:812 mod/contacts.php:873 view/theme/frio/theme.php:264 +msgid "Contacts" msgstr "" -#: include/conversation.php:1325 include/items.php:2126 mod/editpost.php:140 -#: mod/fbrowser.php:102 mod/fbrowser.php:137 mod/message.php:211 -#: mod/photos.php:247 mod/photos.php:339 mod/suggest.php:34 mod/tagrm.php:13 -#: mod/tagrm.php:98 mod/videos.php:134 mod/dfrn_request.php:894 -#: mod/follow.php:126 mod/contacts.php:458 mod/settings.php:683 -#: mod/settings.php:709 -msgid "Cancel" +#: include/items.php:1715 mod/dfrn_confirm.php:738 mod/dfrn_request.php:760 +msgid "[Name Withheld]" msgstr "" -#: include/conversation.php:1331 -msgid "Post to Groups" +#: include/items.php:2091 mod/viewsrc.php:16 mod/admin.php:257 +#: mod/admin.php:1657 mod/admin.php:1908 mod/display.php:122 +#: mod/display.php:291 mod/display.php:496 mod/notice.php:18 +msgid "Item not found." msgstr "" -#: include/conversation.php:1332 -msgid "Post to Contacts" +#: include/items.php:2134 +msgid "Do you really want to delete this item?" msgstr "" -#: include/conversation.php:1333 -msgid "Private post" +#: include/items.php:2136 mod/api.php:107 mod/contacts.php:456 +#: mod/dfrn_request.php:881 mod/follow.php:150 mod/message.php:207 +#: mod/profiles.php:644 mod/profiles.php:647 mod/profiles.php:674 +#: mod/register.php:249 mod/settings.php:1173 mod/settings.php:1179 +#: mod/settings.php:1186 mod/settings.php:1190 mod/settings.php:1195 +#: mod/settings.php:1200 mod/settings.php:1205 mod/settings.php:1210 +#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238 +#: mod/settings.php:1239 mod/settings.php:1240 mod/suggest.php:32 +msgid "Yes" msgstr "" -#: include/conversation.php:1338 include/identity.php:266 mod/editpost.php:144 -msgid "Message" +#: include/items.php:2275 mod/api.php:28 mod/api.php:33 mod/attach.php:35 +#: mod/common.php:20 mod/crepair.php:105 mod/fsuggest.php:80 mod/nogroup.php:29 +#: mod/notes.php:25 mod/viewcontacts.php:49 mod/wall_attach.php:69 +#: mod/wall_attach.php:72 mod/uimport.php:26 mod/allfriends.php:15 +#: mod/cal.php:302 mod/contacts.php:364 mod/delegate.php:15 +#: mod/dfrn_confirm.php:64 mod/dirfind.php:16 mod/display.php:493 +#: mod/editpost.php:13 mod/events.php:189 mod/follow.php:14 mod/follow.php:55 +#: mod/follow.php:118 mod/group.php:21 mod/invite.php:18 mod/invite.php:106 +#: mod/item.php:198 mod/item.php:210 mod/manage.php:104 mod/message.php:49 +#: mod/message.php:172 mod/mood.php:117 mod/network.php:17 +#: mod/notifications.php:74 mod/ostatus_subscribe.php:12 mod/photos.php:169 +#: mod/photos.php:1112 mod/poke.php:156 mod/profile_photo.php:20 +#: mod/profile_photo.php:180 mod/profile_photo.php:191 +#: mod/profile_photo.php:204 mod/profiles.php:173 mod/profiles.php:611 +#: mod/register.php:46 mod/regmod.php:107 mod/repair_ostatus.php:12 +#: mod/settings.php:25 mod/settings.php:133 mod/settings.php:670 +#: mod/suggest.php:61 mod/unfollow.php:14 mod/unfollow.php:57 +#: mod/unfollow.php:90 mod/wall_upload.php:102 mod/wall_upload.php:105 +#: mod/wallmessage.php:12 mod/wallmessage.php:36 mod/wallmessage.php:76 +#: mod/wallmessage.php:100 index.php:411 +msgid "Permission denied." msgstr "" -#: include/conversation.php:1339 mod/editpost.php:145 -msgid "Browser" +#: include/items.php:2392 +msgid "Archives" msgstr "" -#: include/conversation.php:1521 -msgid "View all" +#: include/like.php:45 +#, php-format +msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: include/conversation.php:1543 -msgid "Like" -msgid_plural "Likes" -msgstr[0] "" -msgstr[1] "" +#: include/like.php:50 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "" -#: include/conversation.php:1546 -msgid "Dislike" -msgid_plural "Dislikes" -msgstr[0] "" -msgstr[1] "" +#: include/like.php:55 +#, php-format +msgid "%1$s may attend %2$s's %3$s" +msgstr "" -#: include/conversation.php:1552 -msgid "Not Attending" -msgid_plural "Not Attending" -msgstr[0] "" -msgstr[1] "" +#: include/message.php:15 include/message.php:169 +msgid "[no subject]" +msgstr "" -#: include/dbstructure.php:25 -msgid "There are no tables on MyISAM." +#: include/nav.php:38 mod/navigation.php:22 +msgid "Nothing new here" msgstr "" -#: include/dbstructure.php:66 -#, php-format -msgid "" -"\n" -"\t\t\tThe friendica developers released update %s recently,\n" -"\t\t\tbut when I tried to install it, something went terribly wrong.\n" -"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n" -"\t\t\tfriendica developer if you can not help me on your own. My database " -"might be invalid." -msgstr "" - -#: include/dbstructure.php:71 -#, php-format -msgid "" -"The error message is\n" -"[pre]%s[/pre]" -msgstr "" - -#: include/dbstructure.php:196 -#, php-format -msgid "" -"\n" -"Error %d occurred during database update:\n" -"%s\n" -msgstr "" - -#: include/dbstructure.php:199 -msgid "Errors encountered performing database changes: " -msgstr "" - -#: include/dbstructure.php:207 -msgid ": Database update" -msgstr "" - -#: include/dbstructure.php:439 -#, php-format -msgid "%s: updating %s table." -msgstr "" - -#: include/dfrn.php:1317 -#, php-format -msgid "%s\\'s birthday" -msgstr "" - -#: include/diaspora.php:2212 -msgid "Sharing notification from Diaspora network" -msgstr "" - -#: include/diaspora.php:3169 -msgid "Attachments:" -msgstr "" - -#: include/identity.php:45 -msgid "Requested account is not available." -msgstr "" - -#: include/identity.php:54 mod/profile.php:22 -msgid "Requested profile is not available." +#: include/nav.php:42 mod/navigation.php:26 +msgid "Clear notifications" msgstr "" -#: include/identity.php:98 include/identity.php:321 include/identity.php:754 -msgid "Edit profile" +#: include/nav.php:43 include/text.php:1094 +msgid "@name, !forum, #tags, content" msgstr "" -#: include/identity.php:261 -msgid "Atom feed" +#: include/nav.php:81 view/theme/frio/theme.php:250 boot.php:860 +msgid "Logout" msgstr "" -#: include/identity.php:292 -msgid "Manage/edit profiles" +#: include/nav.php:81 view/theme/frio/theme.php:250 +msgid "End this session" msgstr "" -#: include/identity.php:297 include/identity.php:323 mod/profiles.php:790 -msgid "Change profile photo" +#: include/nav.php:84 include/nav.php:164 view/theme/frio/theme.php:253 +msgid "Your posts and conversations" msgstr "" -#: include/identity.php:298 mod/profiles.php:791 -msgid "Create New Profile" +#: include/nav.php:85 view/theme/frio/theme.php:254 +msgid "Your profile page" msgstr "" -#: include/identity.php:308 mod/profiles.php:780 -msgid "Profile Image" +#: include/nav.php:86 view/theme/frio/theme.php:255 +msgid "Your photos" msgstr "" -#: include/identity.php:311 mod/profiles.php:782 -msgid "visible to everybody" +#: include/nav.php:87 view/theme/frio/theme.php:256 +msgid "Your videos" msgstr "" -#: include/identity.php:312 mod/profiles.php:687 mod/profiles.php:783 -msgid "Edit visibility" +#: include/nav.php:88 view/theme/frio/theme.php:257 +msgid "Your events" msgstr "" -#: include/identity.php:340 include/identity.php:641 mod/directory.php:137 -#: mod/notifications.php:252 -msgid "Gender:" +#: include/nav.php:89 +msgid "Personal notes" msgstr "" -#: include/identity.php:343 include/identity.php:664 mod/directory.php:139 -msgid "Status:" +#: include/nav.php:89 +msgid "Your personal notes" msgstr "" -#: include/identity.php:345 include/identity.php:681 mod/directory.php:141 -msgid "Homepage:" +#: include/nav.php:98 mod/bookmarklet.php:15 boot.php:861 +msgid "Login" msgstr "" -#: include/identity.php:347 include/identity.php:701 mod/directory.php:143 -#: mod/notifications.php:248 mod/contacts.php:645 -msgid "About:" +#: include/nav.php:98 +msgid "Sign in" msgstr "" -#: include/identity.php:349 mod/contacts.php:643 -msgid "XMPP:" +#: include/nav.php:108 +msgid "Home Page" msgstr "" -#: include/identity.php:435 mod/notifications.php:260 mod/contacts.php:58 -msgid "Network:" +#: include/nav.php:112 mod/register.php:293 boot.php:837 +msgid "Register" msgstr "" -#: include/identity.php:464 include/identity.php:555 -msgid "g A l F d" +#: include/nav.php:112 +msgid "Create an account" msgstr "" -#: include/identity.php:465 include/identity.php:556 -msgid "F d" +#: include/nav.php:118 mod/help.php:51 view/theme/vier/theme.php:292 +msgid "Help" msgstr "" -#: include/identity.php:517 include/identity.php:603 -msgid "[today]" +#: include/nav.php:118 +msgid "Help and documentation" msgstr "" -#: include/identity.php:529 -msgid "Birthday Reminders" +#: include/nav.php:122 +msgid "Apps" msgstr "" -#: include/identity.php:530 -msgid "Birthdays this week:" +#: include/nav.php:122 +msgid "Addon applications, utilities, games" msgstr "" -#: include/identity.php:590 -msgid "[No description]" +#: include/nav.php:126 include/text.php:1091 mod/search.php:152 +msgid "Search" msgstr "" -#: include/identity.php:617 -msgid "Event Reminders" +#: include/nav.php:126 +msgid "Search site content" msgstr "" -#: include/identity.php:618 -msgid "Events this week:" +#: include/nav.php:129 include/text.php:1099 +msgid "Full Text" msgstr "" -#: include/identity.php:638 mod/settings.php:1287 -msgid "Full Name:" +#: include/nav.php:130 include/text.php:1100 +msgid "Tags" msgstr "" -#: include/identity.php:645 -msgid "j F, Y" +#: include/nav.php:146 include/nav.php:148 mod/community.php:31 +msgid "Community" msgstr "" -#: include/identity.php:646 -msgid "j F" +#: include/nav.php:146 +msgid "Conversations on this site" msgstr "" -#: include/identity.php:660 -msgid "Age:" +#: include/nav.php:148 +msgid "Conversations on the network" msgstr "" -#: include/identity.php:673 -#, php-format -msgid "for %1$d %2$s" +#: include/nav.php:155 +msgid "Directory" msgstr "" -#: include/identity.php:677 mod/profiles.php:706 -msgid "Sexual Preference:" +#: include/nav.php:155 +msgid "People directory" msgstr "" -#: include/identity.php:685 mod/profiles.php:733 -msgid "Hometown:" +#: include/nav.php:157 +msgid "Information" msgstr "" -#: include/identity.php:689 mod/notifications.php:250 mod/follow.php:139 -#: mod/contacts.php:647 -msgid "Tags:" +#: include/nav.php:157 +msgid "Information about this friendica instance" msgstr "" -#: include/identity.php:693 mod/profiles.php:734 -msgid "Political Views:" +#: include/nav.php:161 view/theme/frio/theme.php:260 +msgid "Conversations from your friends" msgstr "" -#: include/identity.php:697 -msgid "Religion:" +#: include/nav.php:162 +msgid "Network Reset" msgstr "" -#: include/identity.php:705 -msgid "Hobbies/Interests:" +#: include/nav.php:162 +msgid "Load Network page with no filters" msgstr "" -#: include/identity.php:709 mod/profiles.php:738 -msgid "Likes:" +#: include/nav.php:169 +msgid "Friend Requests" msgstr "" -#: include/identity.php:713 mod/profiles.php:739 -msgid "Dislikes:" +#: include/nav.php:172 mod/notifications.php:99 +msgid "Notifications" msgstr "" -#: include/identity.php:717 -msgid "Contact information and Social Networks:" +#: include/nav.php:173 +msgid "See all notifications" msgstr "" -#: include/identity.php:721 -msgid "Musical interests:" +#: include/nav.php:174 mod/settings.php:908 +msgid "Mark as seen" msgstr "" -#: include/identity.php:725 -msgid "Books, literature:" +#: include/nav.php:174 +msgid "Mark all system notifications seen" msgstr "" -#: include/identity.php:729 -msgid "Television:" +#: include/nav.php:178 mod/message.php:180 view/theme/frio/theme.php:262 +msgid "Messages" msgstr "" -#: include/identity.php:733 -msgid "Film/dance/culture/entertainment:" +#: include/nav.php:178 view/theme/frio/theme.php:262 +msgid "Private mail" msgstr "" -#: include/identity.php:737 -msgid "Love/Romance:" +#: include/nav.php:179 +msgid "Inbox" msgstr "" -#: include/identity.php:741 -msgid "Work/employment:" +#: include/nav.php:180 +msgid "Outbox" msgstr "" -#: include/identity.php:745 -msgid "School/education:" +#: include/nav.php:181 mod/message.php:19 +msgid "New Message" msgstr "" -#: include/identity.php:750 -msgid "Forums:" +#: include/nav.php:184 +msgid "Manage" msgstr "" -#: include/identity.php:759 mod/events.php:509 -msgid "Basic" +#: include/nav.php:184 +msgid "Manage other pages" msgstr "" -#: include/identity.php:760 mod/events.php:510 mod/contacts.php:883 -#: mod/admin.php:1149 -msgid "Advanced" +#: include/nav.php:187 mod/settings.php:84 +msgid "Delegations" msgstr "" -#: include/identity.php:786 mod/follow.php:147 mod/contacts.php:849 -msgid "Status Messages and Posts" +#: include/nav.php:187 mod/delegate.php:133 +msgid "Delegate Page Management" msgstr "" -#: include/identity.php:794 mod/contacts.php:857 -msgid "Profile Details" +#: include/nav.php:189 mod/newmember.php:15 mod/admin.php:1710 +#: mod/admin.php:1986 mod/settings.php:114 view/theme/frio/theme.php:263 +msgid "Settings" msgstr "" -#: include/identity.php:802 mod/photos.php:95 -msgid "Photo Albums" +#: include/nav.php:189 view/theme/frio/theme.php:263 +msgid "Account settings" msgstr "" -#: include/identity.php:841 mod/notes.php:49 -msgid "Personal Notes" +#: include/nav.php:192 +msgid "Manage/Edit Profiles" msgstr "" -#: include/identity.php:844 -msgid "Only You Can See This" +#: include/nav.php:195 view/theme/frio/theme.php:264 +msgid "Manage/edit friends and contacts" msgstr "" -#: include/items.php:1702 mod/dfrn_confirm.php:738 mod/dfrn_request.php:759 -msgid "[Name Withheld]" +#: include/nav.php:200 mod/admin.php:203 +msgid "Admin" msgstr "" -#: include/items.php:2078 mod/notice.php:17 mod/viewsrc.php:16 -#: mod/admin.php:256 mod/admin.php:1655 mod/admin.php:1906 mod/display.php:121 -#: mod/display.php:290 mod/display.php:498 -msgid "Item not found." +#: include/nav.php:200 +msgid "Site setup and configuration" msgstr "" -#: include/items.php:2121 -msgid "Do you really want to delete this item?" +#: include/nav.php:203 +msgid "Navigation" msgstr "" -#: include/items.php:2123 mod/api.php:107 mod/message.php:208 -#: mod/suggest.php:31 mod/dfrn_request.php:880 mod/follow.php:115 -#: mod/profiles.php:643 mod/profiles.php:646 mod/profiles.php:673 -#: mod/register.php:248 mod/contacts.php:455 mod/settings.php:1172 -#: mod/settings.php:1178 mod/settings.php:1185 mod/settings.php:1189 -#: mod/settings.php:1194 mod/settings.php:1199 mod/settings.php:1204 -#: mod/settings.php:1209 mod/settings.php:1235 mod/settings.php:1236 -#: mod/settings.php:1237 mod/settings.php:1238 mod/settings.php:1239 -msgid "Yes" +#: include/nav.php:203 +msgid "Site map" msgstr "" -#: include/items.php:2262 mod/allfriends.php:14 mod/api.php:28 mod/api.php:33 -#: mod/attach.php:35 mod/cal.php:301 mod/common.php:20 mod/crepair.php:105 -#: mod/delegate.php:14 mod/dfrn_confirm.php:63 mod/editpost.php:12 -#: mod/fsuggest.php:80 mod/group.php:20 mod/manage.php:103 mod/message.php:48 -#: mod/message.php:173 mod/mood.php:116 mod/nogroup.php:29 mod/notes.php:25 -#: mod/notifications.php:73 mod/ostatus_subscribe.php:11 mod/photos.php:168 -#: mod/photos.php:1111 mod/poke.php:155 mod/repair_ostatus.php:11 -#: mod/suggest.php:60 mod/viewcontacts.php:49 mod/wall_attach.php:69 -#: mod/wall_attach.php:72 mod/wall_upload.php:101 mod/wall_upload.php:104 -#: mod/wallmessage.php:11 mod/wallmessage.php:35 mod/wallmessage.php:75 -#: mod/wallmessage.php:99 mod/regmod.php:106 mod/uimport.php:26 -#: mod/dirfind.php:15 mod/events.php:188 mod/follow.php:13 mod/follow.php:76 -#: mod/follow.php:160 mod/profile_photo.php:19 mod/profile_photo.php:179 -#: mod/profile_photo.php:190 mod/profile_photo.php:203 mod/profiles.php:172 -#: mod/profiles.php:610 mod/register.php:45 mod/contacts.php:363 -#: mod/invite.php:17 mod/invite.php:105 mod/settings.php:24 -#: mod/settings.php:132 mod/settings.php:669 mod/display.php:495 -#: mod/item.php:197 mod/item.php:209 mod/network.php:7 index.php:410 -msgid "Permission denied." +#: include/network.php:701 +msgid "view full size" msgstr "" -#: include/items.php:2379 -msgid "Archives" +#: include/oembed.php:254 +msgid "Embedded content" msgstr "" -#: include/network.php:700 -msgid "view full size" +#: include/oembed.php:262 +msgid "Embedding disabled" msgstr "" -#: include/ostatus.php:1950 +#: include/ostatus.php:1643 #, php-format msgid "%s is now following %s." msgstr "" -#: include/ostatus.php:1951 +#: include/ostatus.php:1644 msgid "following" msgstr "" -#: include/ostatus.php:1954 +#: include/ostatus.php:1647 #, php-format msgid "%s stopped following %s." msgstr "" -#: include/ostatus.php:1955 +#: include/ostatus.php:1648 msgid "stopped following" msgstr "" -#: include/plugin.php:518 include/plugin.php:520 +#: include/plugin.php:519 include/plugin.php:521 msgid "Click here to upgrade." msgstr "" -#: include/plugin.php:527 +#: include/plugin.php:528 msgid "This action exceeds the limits set by your subscription plan." msgstr "" -#: include/plugin.php:532 +#: include/plugin.php:533 msgid "This action is not available under your subscription plan." msgstr "" -#: include/security.php:63 +#: include/security.php:64 msgid "Welcome " msgstr "" -#: include/security.php:64 +#: include/security.php:65 msgid "Please upload a profile photo." msgstr "" -#: include/security.php:66 +#: include/security.php:67 msgid "Welcome back " msgstr "" -#: include/security.php:423 +#: include/security.php:424 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." msgstr "" -#: include/text.php:314 +#: include/text.php:315 msgid "newer" msgstr "" -#: include/text.php:315 +#: include/text.php:316 msgid "older" msgstr "" -#: include/text.php:320 +#: include/text.php:321 msgid "first" msgstr "" -#: include/text.php:321 +#: include/text.php:322 msgid "prev" msgstr "" -#: include/text.php:355 +#: include/text.php:356 msgid "next" msgstr "" -#: include/text.php:356 +#: include/text.php:357 msgid "last" msgstr "" -#: include/text.php:410 +#: include/text.php:411 msgid "Loading more entries..." msgstr "" -#: include/text.php:411 +#: include/text.php:412 msgid "The end" msgstr "" -#: include/text.php:964 +#: include/text.php:965 msgid "No contacts" msgstr "" -#: include/text.php:988 +#: include/text.php:989 #, php-format msgid "%d Contact" msgid_plural "%d Contacts" msgstr[0] "" msgstr[1] "" -#: include/text.php:1001 +#: include/text.php:1002 msgid "View Contacts" msgstr "" -#: include/text.php:1091 mod/editpost.php:101 mod/filer.php:32 mod/notes.php:64 +#: include/text.php:1092 mod/filer.php:32 mod/notes.php:64 mod/editpost.php:102 msgid "Save" msgstr "" -#: include/text.php:1152 +#: include/text.php:1153 msgid "poke" msgstr "" -#: include/text.php:1152 +#: include/text.php:1153 msgid "poked" msgstr "" -#: include/text.php:1153 +#: include/text.php:1154 msgid "ping" msgstr "" -#: include/text.php:1153 +#: include/text.php:1154 msgid "pinged" msgstr "" -#: include/text.php:1154 +#: include/text.php:1155 msgid "prod" msgstr "" -#: include/text.php:1154 +#: include/text.php:1155 msgid "prodded" msgstr "" -#: include/text.php:1155 +#: include/text.php:1156 msgid "slap" msgstr "" -#: include/text.php:1155 +#: include/text.php:1156 msgid "slapped" msgstr "" -#: include/text.php:1156 +#: include/text.php:1157 msgid "finger" msgstr "" -#: include/text.php:1156 +#: include/text.php:1157 msgid "fingered" msgstr "" -#: include/text.php:1157 +#: include/text.php:1158 msgid "rebuff" msgstr "" -#: include/text.php:1157 +#: include/text.php:1158 msgid "rebuffed" msgstr "" -#: include/text.php:1171 +#: include/text.php:1172 msgid "happy" msgstr "" -#: include/text.php:1172 +#: include/text.php:1173 msgid "sad" msgstr "" -#: include/text.php:1173 +#: include/text.php:1174 msgid "mellow" msgstr "" -#: include/text.php:1174 +#: include/text.php:1175 msgid "tired" msgstr "" -#: include/text.php:1175 +#: include/text.php:1176 msgid "perky" msgstr "" -#: include/text.php:1176 +#: include/text.php:1177 msgid "angry" msgstr "" -#: include/text.php:1177 +#: include/text.php:1178 msgid "stupified" msgstr "" -#: include/text.php:1178 +#: include/text.php:1179 msgid "puzzled" msgstr "" -#: include/text.php:1179 +#: include/text.php:1180 msgid "interested" msgstr "" -#: include/text.php:1180 +#: include/text.php:1181 msgid "bitter" msgstr "" -#: include/text.php:1181 +#: include/text.php:1182 msgid "cheerful" msgstr "" -#: include/text.php:1182 +#: include/text.php:1183 msgid "alive" msgstr "" -#: include/text.php:1183 +#: include/text.php:1184 msgid "annoyed" msgstr "" -#: include/text.php:1184 +#: include/text.php:1185 msgid "anxious" msgstr "" -#: include/text.php:1185 +#: include/text.php:1186 msgid "cranky" msgstr "" -#: include/text.php:1186 +#: include/text.php:1187 msgid "disturbed" msgstr "" -#: include/text.php:1187 +#: include/text.php:1188 msgid "frustrated" msgstr "" -#: include/text.php:1188 +#: include/text.php:1189 msgid "motivated" msgstr "" -#: include/text.php:1189 +#: include/text.php:1190 msgid "relaxed" msgstr "" -#: include/text.php:1190 +#: include/text.php:1191 msgid "surprised" msgstr "" -#: include/text.php:1408 mod/videos.php:388 +#: include/text.php:1408 mod/videos.php:389 msgid "View Video" msgstr "" @@ -3043,106 +2907,240 @@ msgstr "" msgid "bytes" msgstr "" -#: include/text.php:1466 include/text.php:1477 +#: include/text.php:1460 include/text.php:1471 msgid "Click to open/close" msgstr "" -#: include/text.php:1609 +#: include/text.php:1603 msgid "View on separate page" msgstr "" -#: include/text.php:1610 +#: include/text.php:1604 msgid "view on separate page" msgstr "" -#: include/text.php:1895 +#: include/text.php:1889 msgid "activity" msgstr "" -#: include/text.php:1897 mod/content.php:624 object/Item.php:418 -#: object/Item.php:430 +#: include/text.php:1891 mod/content.php:625 object/Item.php:411 +#: object/Item.php:423 msgid "comment" msgid_plural "comments" msgstr[0] "" msgstr[1] "" -#: include/text.php:1900 +#: include/text.php:1894 msgid "post" msgstr "" -#: include/text.php:2066 +#: include/text.php:2060 msgid "Item filed" msgstr "" -#: include/uimport.php:83 +#: include/uimport.php:84 msgid "Error decoding account file" msgstr "" -#: include/uimport.php:89 +#: include/uimport.php:90 msgid "Error! No version data in file! This is not a Friendica account file?" msgstr "" -#: include/uimport.php:106 include/uimport.php:117 +#: include/uimport.php:107 include/uimport.php:118 msgid "Error! Cannot check nickname" msgstr "" -#: include/uimport.php:110 include/uimport.php:121 +#: include/uimport.php:111 include/uimport.php:122 #, php-format msgid "User '%s' already exists on this server!" msgstr "" -#: include/uimport.php:143 +#: include/uimport.php:144 msgid "User creation error" msgstr "" -#: include/uimport.php:164 +#: include/uimport.php:165 msgid "User profile creation error" msgstr "" -#: include/uimport.php:213 +#: include/uimport.php:214 #, php-format msgid "%d contact not imported" msgid_plural "%d contacts not imported" msgstr[0] "" msgstr[1] "" -#: include/uimport.php:279 +#: include/uimport.php:280 msgid "Done. You can now login with your username and password" msgstr "" -#: mod/allfriends.php:48 -msgid "No friends to display." +#: include/user.php:41 mod/settings.php:378 +msgid "Passwords do not match. Password unchanged." msgstr "" -#: mod/api.php:78 mod/api.php:104 -msgid "Authorize application connection" +#: include/user.php:50 +msgid "An invitation is required." msgstr "" -#: mod/api.php:79 -msgid "Return to your app and insert this Securty Code:" +#: include/user.php:55 +msgid "Invitation could not be verified." msgstr "" -#: mod/api.php:91 -msgid "Please login to continue." +#: include/user.php:63 +msgid "Invalid OpenID url" msgstr "" -#: mod/api.php:106 +#: include/user.php:84 +msgid "Please enter the required information." +msgstr "" + +#: include/user.php:98 +msgid "Please use a shorter name." +msgstr "" + +#: include/user.php:100 +msgid "Name too short." +msgstr "" + +#: include/user.php:108 +msgid "That doesn't appear to be your full (First Last) name." +msgstr "" + +#: include/user.php:113 +msgid "Your email domain is not among those allowed on this site." +msgstr "" + +#: include/user.php:116 +msgid "Not a valid email address." +msgstr "" + +#: include/user.php:129 +msgid "Cannot use that email." +msgstr "" + +#: include/user.php:135 +msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"." +msgstr "" + +#: include/user.php:142 include/user.php:230 +msgid "Nickname is already registered. Please choose another." +msgstr "" + +#: include/user.php:152 +msgid "" +"Nickname was once registered here and may not be re-used. Please choose " +"another." +msgstr "" + +#: include/user.php:168 +msgid "SERIOUS ERROR: Generation of security keys failed." +msgstr "" + +#: include/user.php:216 +msgid "An error occurred during registration. Please try again." +msgstr "" + +#: include/user.php:239 view/theme/duepuntozero/config.php:47 +msgid "default" +msgstr "" + +#: include/user.php:249 +msgid "An error occurred creating your default profile. Please try again." +msgstr "" + +#: include/user.php:399 +#, php-format +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tThank you for registering at %2$s. Your account is pending for " +"approval by the administrator.\n" +"\t" +msgstr "" + +#: include/user.php:409 +#, php-format +msgid "Registration at %s" +msgstr "" + +#: include/user.php:419 +#, php-format +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tThank you for registering at %2$s. Your account has been created.\n" +"\t" +msgstr "" + +#: include/user.php:423 +#, php-format +msgid "" +"\n" +"\t\tThe login details are as follows:\n" +"\t\t\tSite Location:\t%3$s\n" +"\t\t\tLogin Name:\t%1$s\n" +"\t\t\tPassword:\t%5$s\n" +"\n" +"\t\tYou may change your password from your account \"Settings\" page after " +"logging\n" +"\t\tin.\n" +"\n" +"\t\tPlease take a few moments to review the other account settings on that " +"page.\n" +"\n" +"\t\tYou may also wish to add some basic information to your default profile\n" +"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n" +"\n" +"\t\tWe recommend setting your full name, adding a profile photo,\n" +"\t\tadding some profile \"keywords\" (very useful in making new friends) - " +"and\n" +"\t\tperhaps what country you live in; if you do not wish to be more " +"specific\n" +"\t\tthan that.\n" +"\n" +"\t\tWe fully respect your right to privacy, and none of these items are " +"necessary.\n" +"\t\tIf you are new and do not know anybody here, they may help\n" +"\t\tyou to make some new and interesting friends.\n" +"\n" +"\n" +"\t\tThank you and welcome to %2$s." +msgstr "" + +#: include/user.php:455 mod/admin.php:1400 +#, php-format +msgid "Registration details for %s" +msgstr "" + +#: mod/api.php:78 mod/api.php:104 +msgid "Authorize application connection" +msgstr "" + +#: mod/api.php:79 +msgid "Return to your app and insert this Securty Code:" +msgstr "" + +#: mod/api.php:91 +msgid "Please login to continue." +msgstr "" + +#: mod/api.php:106 msgid "" "Do you want to authorize this application to access your posts and contacts, " "and/or create new posts for you?" msgstr "" -#: mod/api.php:108 mod/dfrn_request.php:880 mod/follow.php:115 -#: mod/profiles.php:643 mod/profiles.php:647 mod/profiles.php:673 -#: mod/register.php:249 mod/settings.php:1172 mod/settings.php:1178 -#: mod/settings.php:1185 mod/settings.php:1189 mod/settings.php:1194 -#: mod/settings.php:1199 mod/settings.php:1204 mod/settings.php:1209 -#: mod/settings.php:1235 mod/settings.php:1236 mod/settings.php:1237 -#: mod/settings.php:1238 mod/settings.php:1239 +#: mod/api.php:108 mod/dfrn_request.php:881 mod/follow.php:150 +#: mod/profiles.php:644 mod/profiles.php:648 mod/profiles.php:674 +#: mod/register.php:250 mod/settings.php:1173 mod/settings.php:1179 +#: mod/settings.php:1186 mod/settings.php:1190 mod/settings.php:1195 +#: mod/settings.php:1200 mod/settings.php:1205 mod/settings.php:1210 +#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238 +#: mod/settings.php:1239 mod/settings.php:1240 msgid "No" msgstr "" -#: mod/apps.php:9 index.php:257 +#: mod/apps.php:9 index.php:258 msgid "You must be logged in to use addons. " msgstr "" @@ -3210,3240 +3208,3409 @@ msgstr "" msgid "diaspora2bb: " msgstr "" -#: mod/bookmarklet.php:43 -msgid "The post was created" -msgstr "" - -#: mod/cal.php:145 mod/display.php:347 mod/profile.php:156 -msgid "Access to this profile has been restricted." +#: mod/common.php:93 +msgid "No contacts in common." msgstr "" -#: mod/cal.php:273 mod/events.php:378 -msgid "View" +#: mod/common.php:143 mod/contacts.php:883 +msgid "Common Friends" msgstr "" -#: mod/cal.php:274 mod/events.php:380 -msgid "Previous" +#: mod/credits.php:19 +msgid "Credits" msgstr "" -#: mod/cal.php:275 mod/install.php:203 mod/events.php:381 -msgid "Next" +#: mod/credits.php:20 +msgid "" +"Friendica is a community project, that would not be possible without the " +"help of many people. Here is a list of those who have contributed to the " +"code or the translation of Friendica. Thank you all!" msgstr "" -#: mod/cal.php:284 mod/events.php:390 -msgid "list" +#: mod/crepair.php:92 +msgid "Contact settings applied." msgstr "" -#: mod/cal.php:294 -msgid "User not found" +#: mod/crepair.php:94 +msgid "Contact update failed." msgstr "" -#: mod/cal.php:310 -msgid "This calendar format is not supported" +#: mod/crepair.php:119 mod/fsuggest.php:22 mod/fsuggest.php:94 +#: mod/dfrn_confirm.php:129 +msgid "Contact not found." msgstr "" -#: mod/cal.php:312 -msgid "No exportable data found" +#: mod/crepair.php:125 +msgid "" +"WARNING: This is highly advanced and if you enter incorrect " +"information your communications with this contact may stop working." msgstr "" -#: mod/cal.php:327 -msgid "calendar" +#: mod/crepair.php:126 +msgid "" +"Please use your browser 'Back' button now if you are " +"uncertain what to do on this page." msgstr "" -#: mod/common.php:93 -msgid "No contacts in common." +#: mod/crepair.php:139 mod/crepair.php:141 +msgid "No mirroring" msgstr "" -#: mod/common.php:143 mod/contacts.php:876 -msgid "Common Friends" +#: mod/crepair.php:139 +msgid "Mirror as forwarded posting" msgstr "" -#: mod/content.php:120 mod/network.php:490 -msgid "No such group" +#: mod/crepair.php:139 mod/crepair.php:141 +msgid "Mirror as my own posting" msgstr "" -#: mod/content.php:131 mod/group.php:214 mod/network.php:517 -msgid "Group is empty" +#: mod/crepair.php:155 +msgid "Return to contact editor" msgstr "" -#: mod/content.php:136 mod/network.php:521 -#, php-format -msgid "Group: %s" +#: mod/crepair.php:157 +msgid "Refetch contact data" msgstr "" -#: mod/content.php:326 object/Item.php:96 -msgid "This entry was edited" +#: mod/crepair.php:159 mod/fsuggest.php:109 mod/contacts.php:595 +#: mod/content.php:730 mod/events.php:509 mod/install.php:245 +#: mod/install.php:285 mod/invite.php:150 mod/localtime.php:47 +#: mod/manage.php:157 mod/message.php:338 mod/message.php:521 mod/mood.php:140 +#: mod/photos.php:1144 mod/photos.php:1274 mod/photos.php:1600 +#: mod/photos.php:1649 mod/photos.php:1691 mod/photos.php:1771 mod/poke.php:205 +#: mod/profiles.php:685 object/Item.php:697 +#: view/theme/duepuntozero/config.php:65 view/theme/frio/config.php:68 +#: view/theme/quattro/config.php:71 view/theme/vier/config.php:114 +msgid "Submit" msgstr "" -#: mod/content.php:622 object/Item.php:416 -#, php-format -msgid "%d comment" -msgid_plural "%d comments" -msgstr[0] "" -msgstr[1] "" - -#: mod/content.php:639 mod/photos.php:1431 object/Item.php:117 -msgid "Private Message" +#: mod/crepair.php:161 +msgid "Remote Self" msgstr "" -#: mod/content.php:703 mod/photos.php:1627 object/Item.php:270 -msgid "I like this (toggle)" +#: mod/crepair.php:164 +msgid "Mirror postings from this contact" msgstr "" -#: mod/content.php:703 object/Item.php:270 -msgid "like" +#: mod/crepair.php:166 +msgid "" +"Mark this contact as remote_self, this will cause friendica to repost new " +"entries from this contact." msgstr "" -#: mod/content.php:704 mod/photos.php:1628 object/Item.php:271 -msgid "I don't like this (toggle)" +#: mod/crepair.php:170 mod/admin.php:1582 mod/admin.php:1595 mod/admin.php:1608 +#: mod/admin.php:1624 mod/settings.php:685 mod/settings.php:711 +msgid "Name" msgstr "" -#: mod/content.php:704 object/Item.php:271 -msgid "dislike" +#: mod/crepair.php:171 +msgid "Account Nickname" msgstr "" -#: mod/content.php:706 object/Item.php:274 -msgid "Share this" +#: mod/crepair.php:172 +msgid "@Tagname - overrides Name/Nickname" msgstr "" -#: mod/content.php:706 object/Item.php:274 -msgid "share" +#: mod/crepair.php:173 +msgid "Account URL" msgstr "" -#: mod/content.php:726 mod/photos.php:1645 mod/photos.php:1687 -#: mod/photos.php:1767 object/Item.php:701 -msgid "This is you" +#: mod/crepair.php:174 +msgid "Friend Request URL" msgstr "" -#: mod/content.php:728 mod/content.php:951 mod/photos.php:1647 -#: mod/photos.php:1689 mod/photos.php:1769 object/Item.php:388 -#: object/Item.php:703 -msgid "Comment" +#: mod/crepair.php:175 +msgid "Friend Confirm URL" msgstr "" -#: mod/content.php:729 mod/crepair.php:159 mod/fsuggest.php:109 -#: mod/install.php:244 mod/install.php:284 mod/localtime.php:46 -#: mod/manage.php:156 mod/message.php:340 mod/message.php:523 mod/mood.php:139 -#: mod/photos.php:1143 mod/photos.php:1273 mod/photos.php:1599 -#: mod/photos.php:1648 mod/photos.php:1690 mod/photos.php:1770 mod/poke.php:204 -#: mod/events.php:508 mod/profiles.php:684 mod/contacts.php:588 -#: mod/invite.php:149 object/Item.php:704 view/theme/duepuntozero/config.php:64 -#: view/theme/frio/config.php:67 view/theme/quattro/config.php:70 -#: view/theme/vier/config.php:113 -msgid "Submit" +#: mod/crepair.php:176 +msgid "Notification Endpoint URL" msgstr "" -#: mod/content.php:730 object/Item.php:705 -msgid "Bold" +#: mod/crepair.php:177 +msgid "Poll/Feed URL" msgstr "" -#: mod/content.php:731 object/Item.php:706 -msgid "Italic" +#: mod/crepair.php:178 +msgid "New photo from this URL" msgstr "" -#: mod/content.php:732 object/Item.php:707 -msgid "Underline" +#: mod/filer.php:31 +msgid "- select -" msgstr "" -#: mod/content.php:733 object/Item.php:708 -msgid "Quote" +#: mod/fsuggest.php:65 +msgid "Friend suggestion sent." msgstr "" -#: mod/content.php:734 object/Item.php:709 -msgid "Code" +#: mod/fsuggest.php:99 +msgid "Suggest Friends" msgstr "" -#: mod/content.php:735 object/Item.php:710 -msgid "Image" +#: mod/fsuggest.php:101 +#, php-format +msgid "Suggest a friend for %s" msgstr "" -#: mod/content.php:736 object/Item.php:711 -msgid "Link" +#: mod/lockview.php:33 mod/lockview.php:41 +msgid "Remote privacy information not available." msgstr "" -#: mod/content.php:737 object/Item.php:712 -msgid "Video" +#: mod/lockview.php:50 +msgid "Visible to:" msgstr "" -#: mod/content.php:747 mod/settings.php:744 object/Item.php:122 -#: object/Item.php:124 -msgid "Edit" +#: mod/maintenance.php:21 +msgid "System down for maintenance" msgstr "" -#: mod/content.php:773 object/Item.php:237 -msgid "add star" +#: mod/newmember.php:7 +msgid "Welcome to Friendica" msgstr "" -#: mod/content.php:774 object/Item.php:238 -msgid "remove star" +#: mod/newmember.php:8 +msgid "New Member Checklist" msgstr "" -#: mod/content.php:775 object/Item.php:239 -msgid "toggle star status" +#: mod/newmember.php:10 +msgid "" +"We would like to offer some tips and links to help make your experience " +"enjoyable. Click any item to visit the relevant page. A link to this page " +"will be visible from your home page for two weeks after your initial " +"registration and then will quietly disappear." msgstr "" -#: mod/content.php:778 object/Item.php:242 -msgid "starred" +#: mod/newmember.php:11 +msgid "Getting Started" msgstr "" -#: mod/content.php:779 mod/content.php:801 object/Item.php:259 -msgid "add tag" +#: mod/newmember.php:13 +msgid "Friendica Walk-Through" msgstr "" -#: mod/content.php:790 object/Item.php:247 -msgid "ignore thread" +#: mod/newmember.php:13 +msgid "" +"On your Quick Start page - find a brief introduction to your " +"profile and network tabs, make some new connections, and find some groups to " +"join." msgstr "" -#: mod/content.php:791 object/Item.php:248 -msgid "unignore thread" +#: mod/newmember.php:17 +msgid "Go to Your Settings" msgstr "" -#: mod/content.php:792 object/Item.php:249 -msgid "toggle ignore status" +#: mod/newmember.php:17 +msgid "" +"On your Settings 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." msgstr "" -#: mod/content.php:795 mod/ostatus_subscribe.php:75 object/Item.php:252 -msgid "ignored" +#: mod/newmember.php:18 +msgid "" +"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." msgstr "" -#: mod/content.php:806 object/Item.php:141 -msgid "save to folder" +#: mod/newmember.php:22 mod/profile_photo.php:256 mod/profiles.php:704 +msgid "Upload Profile Photo" msgstr "" -#: mod/content.php:854 object/Item.php:211 -msgid "I will attend" +#: mod/newmember.php:22 +msgid "" +"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." msgstr "" -#: mod/content.php:854 object/Item.php:211 -msgid "I will not attend" +#: mod/newmember.php:23 +msgid "Edit Your Profile" msgstr "" -#: mod/content.php:854 object/Item.php:211 -msgid "I might attend" +#: mod/newmember.php:23 +msgid "" +"Edit your default profile to your liking. Review the " +"settings for hiding your list of friends and hiding the profile from unknown " +"visitors." msgstr "" -#: mod/content.php:918 object/Item.php:354 -msgid "to" +#: mod/newmember.php:24 +msgid "Profile Keywords" msgstr "" -#: mod/content.php:919 object/Item.php:356 -msgid "Wall-to-Wall" +#: mod/newmember.php:24 +msgid "" +"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." msgstr "" -#: mod/content.php:920 object/Item.php:357 -msgid "via Wall-To-Wall:" +#: mod/newmember.php:26 +msgid "Connecting" msgstr "" -#: mod/credits.php:19 -msgid "Credits" +#: mod/newmember.php:32 +msgid "Importing Emails" msgstr "" -#: mod/credits.php:20 +#: mod/newmember.php:32 msgid "" -"Friendica is a community project, that would not be possible without the " -"help of many people. Here is a list of those who have contributed to the " -"code or the translation of Friendica. Thank you all!" +"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" msgstr "" -#: mod/crepair.php:92 -msgid "Contact settings applied." +#: mod/newmember.php:35 +msgid "Go to Your Contacts Page" msgstr "" -#: mod/crepair.php:94 -msgid "Contact update failed." +#: mod/newmember.php:35 +msgid "" +"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 Add New Contact dialog." msgstr "" -#: mod/crepair.php:119 mod/dfrn_confirm.php:128 mod/fsuggest.php:22 -#: mod/fsuggest.php:94 -msgid "Contact not found." +#: mod/newmember.php:36 +msgid "Go to Your Site's Directory" msgstr "" -#: mod/crepair.php:125 +#: mod/newmember.php:36 msgid "" -"WARNING: This is highly advanced and if you enter incorrect " -"information your communications with this contact may stop working." +"The Directory page lets you find other people in this network or other " +"federated sites. Look for a Connect or Follow link on " +"their profile page. Provide your own Identity Address if requested." msgstr "" -#: mod/crepair.php:126 -msgid "" -"Please use your browser 'Back' button now if you are " -"uncertain what to do on this page." +#: mod/newmember.php:37 +msgid "Finding New People" msgstr "" -#: mod/crepair.php:139 mod/crepair.php:141 -msgid "No mirroring" +#: mod/newmember.php:37 +msgid "" +"On the side panel of the Contacts page are several tools to find new " +"friends. We can match people by interest, look up people by name or " +"interest, and provide suggestions based on network relationships. On a brand " +"new site, friend suggestions will usually begin to be populated within 24 " +"hours." msgstr "" -#: mod/crepair.php:139 -msgid "Mirror as forwarded posting" +#: mod/newmember.php:41 +msgid "Group Your Contacts" msgstr "" -#: mod/crepair.php:139 mod/crepair.php:141 -msgid "Mirror as my own posting" +#: mod/newmember.php:41 +msgid "" +"Once you have made some friends, organize them into private conversation " +"groups from the sidebar of your Contacts page and then you can interact with " +"each group privately on your Network page." msgstr "" -#: mod/crepair.php:155 -msgid "Return to contact editor" +#: mod/newmember.php:44 +msgid "Why Aren't My Posts Public?" msgstr "" -#: mod/crepair.php:157 -msgid "Refetch contact data" +#: mod/newmember.php:44 +msgid "" +"Friendica respects your privacy. By default, your posts will only show up to " +"people you've added as friends. For more information, see the help section " +"from the link above." msgstr "" -#: mod/crepair.php:161 -msgid "Remote Self" +#: mod/newmember.php:48 +msgid "Getting Help" msgstr "" -#: mod/crepair.php:164 -msgid "Mirror postings from this contact" +#: mod/newmember.php:50 +msgid "Go to the Help Section" msgstr "" -#: mod/crepair.php:166 +#: mod/newmember.php:50 msgid "" -"Mark this contact as remote_self, this will cause friendica to repost new " -"entries from this contact." +"Our help pages may be consulted for detail on other program " +"features and resources." msgstr "" -#: mod/crepair.php:170 mod/settings.php:684 mod/settings.php:710 -#: mod/admin.php:1580 mod/admin.php:1593 mod/admin.php:1606 mod/admin.php:1622 -msgid "Name" +#: mod/nogroup.php:45 mod/viewcontacts.php:105 mod/contacts.php:606 +#: mod/contacts.php:950 +#, php-format +msgid "Visit %s's profile [%s]" msgstr "" -#: mod/crepair.php:171 -msgid "Account Nickname" +#: mod/nogroup.php:46 mod/contacts.php:951 +msgid "Edit contact" msgstr "" -#: mod/crepair.php:172 -msgid "@Tagname - overrides Name/Nickname" +#: mod/nogroup.php:67 +msgid "Contacts who are not members of a group" msgstr "" -#: mod/crepair.php:173 -msgid "Account URL" +#: mod/profperm.php:22 mod/group.php:78 index.php:410 +msgid "Permission denied" msgstr "" -#: mod/crepair.php:174 -msgid "Friend Request URL" +#: mod/profperm.php:28 mod/profperm.php:59 +msgid "Invalid profile identifier." msgstr "" -#: mod/crepair.php:175 -msgid "Friend Confirm URL" +#: mod/profperm.php:105 +msgid "Profile Visibility Editor" msgstr "" -#: mod/crepair.php:176 -msgid "Notification Endpoint URL" +#: mod/profperm.php:109 mod/group.php:264 +msgid "Click on a contact to add or remove." msgstr "" -#: mod/crepair.php:177 -msgid "Poll/Feed URL" +#: mod/profperm.php:118 +msgid "Visible To" msgstr "" -#: mod/crepair.php:178 -msgid "New photo from this URL" +#: mod/profperm.php:134 +msgid "All Contacts (with secure profile access)" msgstr "" -#: mod/delegate.php:103 -msgid "No potential page delegates located." +#: mod/update_community.php:21 mod/update_display.php:25 +#: mod/update_notes.php:38 mod/update_profile.php:37 mod/update_network.php:29 +msgid "[Embedded content - reload page to view]" msgstr "" -#: mod/delegate.php:134 -msgid "" -"Delegates are able to manage all aspects of this account/page except for " -"basic account settings. Please do not delegate your personal account to " -"anybody that you do not trust completely." +#: mod/viewcontacts.php:39 mod/webfinger.php:10 mod/probe.php:9 +#: mod/search.php:96 mod/search.php:102 mod/community.php:17 +#: mod/dfrn_request.php:805 mod/directory.php:33 mod/display.php:218 +#: mod/photos.php:982 mod/videos.php:201 +msgid "Public access denied." msgstr "" -#: mod/delegate.php:135 -msgid "Existing Page Managers" +#: mod/viewcontacts.php:78 +msgid "No contacts." msgstr "" -#: mod/delegate.php:137 -msgid "Existing Page Delegates" +#: mod/viewsrc.php:8 +msgid "Access denied." msgstr "" -#: mod/delegate.php:139 -msgid "Potential Delegates" +#: mod/wall_attach.php:19 mod/wall_attach.php:27 mod/wall_attach.php:78 +#: mod/wall_upload.php:37 mod/wall_upload.php:53 mod/wall_upload.php:111 +#: mod/wall_upload.php:151 mod/wall_upload.php:154 +msgid "Invalid request." msgstr "" -#: mod/delegate.php:141 mod/tagrm.php:97 -msgid "Remove" +#: mod/wall_attach.php:96 +msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" msgstr "" -#: mod/delegate.php:142 -msgid "Add" +#: mod/wall_attach.php:96 +msgid "Or - did you try to upload an empty file?" msgstr "" -#: mod/delegate.php:143 -msgid "No entries." +#: mod/wall_attach.php:107 +#, php-format +msgid "File exceeds size limit of %s" msgstr "" -#: mod/dfrn_confirm.php:72 mod/profiles.php:23 mod/profiles.php:139 -#: mod/profiles.php:186 mod/profiles.php:622 -msgid "Profile not found." +#: mod/wall_attach.php:160 mod/wall_attach.php:176 +msgid "File upload failed." msgstr "" -#: mod/dfrn_confirm.php:129 -msgid "" -"This may occasionally happen if contact was requested by both persons and it " -"has already been approved." +#: mod/webfinger.php:11 mod/probe.php:10 +msgid "Only logged in users are permitted to perform a probing." msgstr "" -#: mod/dfrn_confirm.php:246 -msgid "Response from remote site was not understood." +#: mod/uimport.php:53 mod/register.php:202 +msgid "" +"This site has exceeded the number of allowed daily account registrations. " +"Please try again tomorrow." msgstr "" -#: mod/dfrn_confirm.php:255 mod/dfrn_confirm.php:260 -msgid "Unexpected response from remote site: " +#: mod/uimport.php:68 mod/register.php:299 +msgid "Import" msgstr "" -#: mod/dfrn_confirm.php:269 -msgid "Confirmation completed successfully." +#: mod/uimport.php:70 +msgid "Move account" msgstr "" -#: mod/dfrn_confirm.php:271 mod/dfrn_confirm.php:285 mod/dfrn_confirm.php:292 -msgid "Remote site reported: " +#: mod/uimport.php:71 +msgid "You can import an account from another Friendica server." msgstr "" -#: mod/dfrn_confirm.php:283 -msgid "Temporary failure. Please wait and try again." +#: mod/uimport.php:72 +msgid "" +"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." msgstr "" -#: mod/dfrn_confirm.php:290 -msgid "Introduction failed or was revoked." +#: mod/uimport.php:73 +msgid "" +"This feature is experimental. We can't import contacts from the OStatus " +"network (GNU Social/Statusnet) or from Diaspora" msgstr "" -#: mod/dfrn_confirm.php:420 -msgid "Unable to set contact photo." +#: mod/uimport.php:74 +msgid "Account file" msgstr "" -#: mod/dfrn_confirm.php:561 -#, php-format -msgid "No user record found for '%s' " +#: mod/uimport.php:74 +msgid "" +"To export your account, go to \"Settings->Export your personal data\" and " +"select \"Export account\"" msgstr "" -#: mod/dfrn_confirm.php:571 -msgid "Our site encryption key is apparently messed up." +#: mod/search.php:28 mod/network.php:187 +msgid "Remove term" msgstr "" -#: mod/dfrn_confirm.php:582 -msgid "Empty site URL was provided or URL could not be decrypted by us." +#: mod/search.php:103 +msgid "Only logged in users are permitted to perform a search." msgstr "" -#: mod/dfrn_confirm.php:604 -msgid "Contact record was not found for you on our site." +#: mod/search.php:127 +msgid "Too Many Requests" msgstr "" -#: mod/dfrn_confirm.php:618 -#, php-format -msgid "Site public key not available in contact record for URL %s." +#: mod/search.php:128 +msgid "Only one search per minute is permitted for not logged in users." msgstr "" -#: mod/dfrn_confirm.php:638 -msgid "" -"The ID provided by your system is a duplicate on our system. It should work " -"if you try again." +#: mod/search.php:222 mod/community.php:49 +msgid "No results." msgstr "" -#: mod/dfrn_confirm.php:649 -msgid "Unable to set your contact credentials on our system." +#: mod/search.php:228 +#, php-format +msgid "Items tagged with: %s" msgstr "" -#: mod/dfrn_confirm.php:711 -msgid "Unable to update your contact profile details on our system" +#: mod/search.php:230 mod/contacts.php:817 +#, php-format +msgid "Results for: %s" msgstr "" -#: mod/dfrn_confirm.php:783 -#, php-format -msgid "%1$s has joined %2$s" +#: mod/community.php:22 +msgid "Not available." msgstr "" -#: mod/directory.php:33 mod/photos.php:981 mod/videos.php:200 -#: mod/viewcontacts.php:39 mod/webfinger.php:10 mod/dfrn_request.php:804 -#: mod/probe.php:9 mod/search.php:96 mod/search.php:102 mod/community.php:17 -#: mod/display.php:217 -msgid "Public access denied." +#: mod/admin.php:99 +msgid "Theme settings updated." msgstr "" -#: mod/directory.php:195 view/theme/vier/theme.php:193 -msgid "Global Directory" +#: mod/admin.php:171 mod/admin.php:1146 +msgid "Site" msgstr "" -#: mod/directory.php:197 -msgid "Find on this site" +#: mod/admin.php:172 mod/admin.php:1080 mod/admin.php:1590 mod/admin.php:1606 +msgid "Users" msgstr "" -#: mod/directory.php:199 -msgid "Results for:" +#: mod/admin.php:173 mod/admin.php:1708 mod/admin.php:1771 mod/settings.php:77 +msgid "Plugins" msgstr "" -#: mod/directory.php:201 -msgid "Site Directory" +#: mod/admin.php:174 mod/admin.php:1984 mod/admin.php:2034 +msgid "Themes" msgstr "" -#: mod/directory.php:208 -msgid "No entries (some entries may be hidden)." +#: mod/admin.php:175 mod/settings.php:55 +msgid "Additional features" msgstr "" -#: mod/editpost.php:19 mod/editpost.php:29 -msgid "Item not found" +#: mod/admin.php:176 +msgid "DB updates" msgstr "" -#: mod/editpost.php:34 -msgid "Edit post" +#: mod/admin.php:177 mod/admin.php:584 +msgid "Inspect Queue" msgstr "" -#: mod/fbrowser.php:134 -msgid "Files" +#: mod/admin.php:178 mod/admin.php:298 +msgid "Server Blocklist" msgstr "" -#: mod/filer.php:31 -msgid "- select -" +#: mod/admin.php:179 mod/admin.php:550 +msgid "Federation Statistics" msgstr "" -#: mod/friendica.php:69 -msgid "This is Friendica, version" +#: mod/admin.php:180 mod/admin.php:375 +msgid "Delete Item" msgstr "" -#: mod/friendica.php:70 -msgid "running at web location" +#: mod/admin.php:194 mod/admin.php:205 mod/admin.php:2108 +msgid "Logs" msgstr "" -#: mod/friendica.php:74 -msgid "" -"Please visit Friendica.com to learn " -"more about the Friendica project." +#: mod/admin.php:195 mod/admin.php:2176 +msgid "View Logs" msgstr "" -#: mod/friendica.php:78 -msgid "Bug reports and issues: please visit" +#: mod/admin.php:196 +msgid "probe address" msgstr "" -#: mod/friendica.php:78 -msgid "the bugtracker at github" +#: mod/admin.php:197 +msgid "check webfinger" msgstr "" -#: mod/friendica.php:81 -msgid "" -"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " -"dot com" +#: mod/admin.php:204 +msgid "Plugin Features" msgstr "" -#: mod/friendica.php:95 -msgid "Installed plugins/addons/apps:" +#: mod/admin.php:206 +msgid "diagnostics" msgstr "" -#: mod/friendica.php:109 -msgid "No installed plugins/addons/apps" +#: mod/admin.php:207 +msgid "User registrations waiting for confirmation" msgstr "" -#: mod/friendica.php:114 -msgid "On this server the following remote servers are blocked." +#: mod/admin.php:289 +msgid "The blocked domain" msgstr "" -#: mod/friendica.php:115 mod/admin.php:289 mod/admin.php:307 +#: mod/admin.php:290 mod/admin.php:308 mod/friendica.php:116 msgid "Reason for the block" msgstr "" -#: mod/fsuggest.php:65 -msgid "Friend suggestion sent." +#: mod/admin.php:290 mod/admin.php:303 +msgid "The reason why you blocked this domain." msgstr "" -#: mod/fsuggest.php:99 -msgid "Suggest Friends" +#: mod/admin.php:291 +msgid "Delete domain" msgstr "" -#: mod/fsuggest.php:101 -#, php-format -msgid "Suggest a friend for %s" +#: mod/admin.php:291 +msgid "Check to delete this entry from the blocklist" msgstr "" -#: mod/group.php:30 -msgid "Group created." +#: mod/admin.php:297 mod/admin.php:374 mod/admin.php:549 mod/admin.php:583 +#: mod/admin.php:663 mod/admin.php:1145 mod/admin.php:1589 mod/admin.php:1707 +#: mod/admin.php:1770 mod/admin.php:1983 mod/admin.php:2033 mod/admin.php:2107 +#: mod/admin.php:2175 +msgid "Administration" msgstr "" -#: mod/group.php:36 -msgid "Could not create group." +#: mod/admin.php:299 +msgid "" +"This page can be used to define a black list of servers from the federated " +"network that are not allowed to interact with your node. For all entered " +"domains you should also give a reason why you have blocked the remote server." msgstr "" -#: mod/group.php:50 mod/group.php:155 -msgid "Group not found." +#: mod/admin.php:300 +msgid "" +"The list of blocked servers will be made publically available on the /" +"friendica page so that your users and people investigating communication " +"problems can find the reason easily." msgstr "" -#: mod/group.php:64 -msgid "Group name changed." +#: mod/admin.php:301 +msgid "Add new entry to block list" msgstr "" -#: mod/group.php:77 mod/profperm.php:22 index.php:409 -msgid "Permission denied" +#: mod/admin.php:302 +msgid "Server Domain" msgstr "" -#: mod/group.php:94 -msgid "Save Group" +#: mod/admin.php:302 +msgid "" +"The domain of the new server to add to the block list. Do not include the " +"protocol." msgstr "" -#: mod/group.php:99 -msgid "Create a group of contacts/friends." +#: mod/admin.php:303 +msgid "Block reason" msgstr "" -#: mod/group.php:124 -msgid "Group removed." +#: mod/admin.php:304 +msgid "Add Entry" msgstr "" -#: mod/group.php:126 -msgid "Unable to remove group." +#: mod/admin.php:305 +msgid "Save changes to the blocklist" msgstr "" -#: mod/group.php:190 -msgid "Delete Group" +#: mod/admin.php:306 +msgid "Current Entries in the Blocklist" msgstr "" -#: mod/group.php:196 -msgid "Group Editor" +#: mod/admin.php:309 +msgid "Delete entry from blocklist" msgstr "" -#: mod/group.php:201 -msgid "Edit Group Name" +#: mod/admin.php:312 +msgid "Delete entry from blocklist?" msgstr "" -#: mod/group.php:211 -msgid "Members" +#: mod/admin.php:337 +msgid "Server added to blocklist." msgstr "" -#: mod/group.php:213 mod/contacts.php:705 -msgid "All Contacts" +#: mod/admin.php:353 +msgid "Site blocklist updated." msgstr "" -#: mod/group.php:227 -msgid "Remove Contact" +#: mod/admin.php:376 +msgid "Delete this Item" msgstr "" -#: mod/group.php:251 -msgid "Add Contact" +#: mod/admin.php:377 +msgid "" +"On this page you can delete an item from your node. If the item is a top " +"level posting, the entire thread will be deleted." msgstr "" -#: mod/group.php:263 mod/profperm.php:109 -msgid "Click on a contact to add or remove." +#: mod/admin.php:378 +msgid "" +"You need to know the GUID of the item. You can find it e.g. by looking at " +"the display URL. The last part of http://example.com/display/123456 is the " +"GUID, here 123456." msgstr "" -#: mod/hcard.php:13 -msgid "No profile" +#: mod/admin.php:379 +msgid "GUID" msgstr "" -#: mod/home.php:41 -#, php-format -msgid "Welcome to %s" +#: mod/admin.php:379 +msgid "The GUID of the item you want to delete." msgstr "" -#: mod/install.php:108 -msgid "Friendica Communications Server - Setup" +#: mod/admin.php:416 +msgid "Item marked for deletion." msgstr "" -#: mod/install.php:114 -msgid "Could not connect to database." +#: mod/admin.php:480 +msgid "unknown" msgstr "" -#: mod/install.php:118 -msgid "Could not create table." +#: mod/admin.php:543 +msgid "" +"This page offers you some numbers to the known part of the federated social " +"network your Friendica node is part of. These numbers are not complete but " +"only reflect the part of the network your node is aware of." msgstr "" -#: mod/install.php:124 -msgid "Your Friendica site database has been installed." +#: mod/admin.php:544 +msgid "" +"The Auto Discovered Contact Directory feature is not enabled, it " +"will improve the data displayed here." msgstr "" -#: mod/install.php:129 -msgid "" -"You may need to import the file \"database.sql\" manually using phpmyadmin " -"or mysql." +#: mod/admin.php:556 +#, php-format +msgid "Currently this node is aware of %d nodes from the following platforms:" msgstr "" -#: mod/install.php:130 mod/install.php:202 mod/install.php:549 -msgid "Please see the file \"INSTALL.txt\"." +#: mod/admin.php:586 +msgid "ID" msgstr "" -#: mod/install.php:142 -msgid "Database already in use." +#: mod/admin.php:587 +msgid "Recipient Name" msgstr "" -#: mod/install.php:199 -msgid "System check" +#: mod/admin.php:588 +msgid "Recipient Profile" msgstr "" -#: mod/install.php:204 -msgid "Check again" +#: mod/admin.php:590 +msgid "Created" msgstr "" -#: mod/install.php:223 -msgid "Database connection" +#: mod/admin.php:591 +msgid "Last Tried" msgstr "" -#: mod/install.php:224 +#: mod/admin.php:592 msgid "" -"In order to install Friendica we need to know how to connect to your " -"database." +"This page lists the content of the queue for outgoing postings. These are " +"postings the initial delivery failed for. They will be resend later and " +"eventually deleted if the delivery fails permanently." msgstr "" -#: mod/install.php:225 +#: mod/admin.php:617 +#, php-format msgid "" -"Please contact your hosting provider or site administrator if you have " -"questions about these settings." +"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 here for a guide that may be helpful " +"converting the table engines. You may also use the command php include/" +"dbstructure.php toinnodb of your Friendica installation for an " +"automatic conversion.
" msgstr "" -#: mod/install.php:226 +#: mod/admin.php:626 msgid "" -"The database you specify below should already exist. If it does not, please " -"create it before continuing." +"The database update failed. Please run \"php include/dbstructure.php update" +"\" from the command line and have a look at the errors that might appear." msgstr "" -#: mod/install.php:230 -msgid "Database Server Name" +#: mod/admin.php:631 mod/admin.php:1539 +msgid "Normal Account" msgstr "" -#: mod/install.php:231 -msgid "Database Login Name" +#: mod/admin.php:632 mod/admin.php:1540 +msgid "Automatic Follower Account" msgstr "" -#: mod/install.php:232 -msgid "Database Login Password" +#: mod/admin.php:633 mod/admin.php:1541 +msgid "Public Forum Account" msgstr "" -#: mod/install.php:232 -msgid "For security reasons the password must not be empty" +#: mod/admin.php:634 mod/admin.php:1542 +msgid "Automatic Friend Account" msgstr "" -#: mod/install.php:233 -msgid "Database Name" +#: mod/admin.php:635 +msgid "Blog Account" msgstr "" -#: mod/install.php:234 mod/install.php:275 -msgid "Site administrator email address" +#: mod/admin.php:636 +msgid "Private Forum Account" msgstr "" -#: mod/install.php:234 mod/install.php:275 -msgid "" -"Your account email address must match this in order to use the web admin " -"panel." +#: mod/admin.php:658 +msgid "Message queues" msgstr "" -#: mod/install.php:238 mod/install.php:278 -msgid "Please select a default timezone for your website" +#: mod/admin.php:664 +msgid "Summary" msgstr "" -#: mod/install.php:265 -msgid "Site settings" +#: mod/admin.php:666 +msgid "Registered users" msgstr "" -#: mod/install.php:279 -msgid "System Language:" +#: mod/admin.php:668 +msgid "Pending registrations" msgstr "" -#: mod/install.php:279 -msgid "" -"Set the default language for your Friendica installation interface and to " -"send emails." +#: mod/admin.php:669 +msgid "Version" msgstr "" -#: mod/install.php:319 -msgid "Could not find a command line version of PHP in the web server PATH." +#: mod/admin.php:674 +msgid "Active plugins" msgstr "" -#: mod/install.php:320 -msgid "" -"If you don't have a command line version of PHP installed on server, you " -"will not be able to run the background processing. See 'Setup the poller'" +#: mod/admin.php:699 +msgid "Can not parse base url. Must have at least ://" msgstr "" -#: mod/install.php:324 -msgid "PHP executable path" +#: mod/admin.php:1006 +msgid "Site settings updated." msgstr "" -#: mod/install.php:324 -msgid "" -"Enter full path to php executable. You can leave this blank to continue the " -"installation." +#: mod/admin.php:1034 mod/settings.php:945 +msgid "No special theme for mobile devices" msgstr "" -#: mod/install.php:329 -msgid "Command line PHP" +#: mod/admin.php:1063 +msgid "No community page" msgstr "" -#: mod/install.php:338 -msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" +#: mod/admin.php:1064 +msgid "Public postings from users of this site" msgstr "" -#: mod/install.php:339 -msgid "Found PHP version: " +#: mod/admin.php:1065 +msgid "Global community page" msgstr "" -#: mod/install.php:341 -msgid "PHP cli binary" +#: mod/admin.php:1070 mod/contacts.php:542 +msgid "Never" msgstr "" -#: mod/install.php:352 -msgid "" -"The command line version of PHP on your system does not have " -"\"register_argc_argv\" enabled." +#: mod/admin.php:1071 +msgid "At post arrival" msgstr "" -#: mod/install.php:353 -msgid "This is required for message delivery to work." +#: mod/admin.php:1079 mod/contacts.php:569 +msgid "Disabled" msgstr "" -#: mod/install.php:355 -msgid "PHP register_argc_argv" +#: mod/admin.php:1081 +msgid "Users, Global Contacts" msgstr "" -#: mod/install.php:378 -msgid "" -"Error: the \"openssl_pkey_new\" function on this system is not able to " -"generate encryption keys" +#: mod/admin.php:1082 +msgid "Users, Global Contacts/fallback" msgstr "" -#: mod/install.php:379 -msgid "" -"If running under Windows, please see \"http://www.php.net/manual/en/openssl." -"installation.php\"." +#: mod/admin.php:1086 +msgid "One month" msgstr "" -#: mod/install.php:381 -msgid "Generate encryption keys" +#: mod/admin.php:1087 +msgid "Three months" msgstr "" -#: mod/install.php:388 -msgid "libCurl PHP module" +#: mod/admin.php:1088 +msgid "Half a year" msgstr "" -#: mod/install.php:389 -msgid "GD graphics PHP module" +#: mod/admin.php:1089 +msgid "One year" msgstr "" -#: mod/install.php:390 -msgid "OpenSSL PHP module" +#: mod/admin.php:1094 +msgid "Multi user instance" msgstr "" -#: mod/install.php:391 -msgid "PDO or MySQLi PHP module" +#: mod/admin.php:1117 +msgid "Closed" msgstr "" -#: mod/install.php:392 -msgid "mb_string PHP module" +#: mod/admin.php:1118 +msgid "Requires approval" msgstr "" -#: mod/install.php:393 -msgid "XML PHP module" +#: mod/admin.php:1119 +msgid "Open" msgstr "" -#: mod/install.php:394 -msgid "iconv module" +#: mod/admin.php:1123 +msgid "No SSL policy, links will track page SSL state" msgstr "" -#: mod/install.php:398 mod/install.php:400 -msgid "Apache mod_rewrite module" +#: mod/admin.php:1124 +msgid "Force all links to use SSL" msgstr "" -#: mod/install.php:398 -msgid "" -"Error: Apache webserver mod-rewrite module is required but not installed." +#: mod/admin.php:1125 +msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgstr "" -#: mod/install.php:406 -msgid "Error: libCURL PHP module required but not installed." +#: mod/admin.php:1147 mod/admin.php:1772 mod/admin.php:2035 mod/admin.php:2109 +#: mod/admin.php:2262 mod/settings.php:683 mod/settings.php:794 +#: mod/settings.php:843 mod/settings.php:910 mod/settings.php:1007 +#: mod/settings.php:1273 +msgid "Save Settings" msgstr "" -#: mod/install.php:410 -msgid "" -"Error: GD graphics PHP module with JPEG support required but not installed." +#: mod/admin.php:1148 mod/register.php:276 +msgid "Registration" msgstr "" -#: mod/install.php:414 -msgid "Error: openssl PHP module required but not installed." +#: mod/admin.php:1149 +msgid "File upload" msgstr "" -#: mod/install.php:418 -msgid "Error: PDO or MySQLi PHP module required but not installed." +#: mod/admin.php:1150 +msgid "Policies" msgstr "" -#: mod/install.php:422 -msgid "Error: The MySQL driver for PDO is not installed." +#: mod/admin.php:1152 +msgid "Auto Discovered Contact Directory" msgstr "" -#: mod/install.php:426 -msgid "Error: mb_string PHP module required but not installed." +#: mod/admin.php:1153 +msgid "Performance" msgstr "" -#: mod/install.php:430 -msgid "Error: iconv PHP module required but not installed." +#: mod/admin.php:1154 +msgid "Worker" msgstr "" -#: mod/install.php:440 -msgid "Error, XML PHP module required but not installed." +#: mod/admin.php:1155 +msgid "" +"Relocate - WARNING: advanced function. Could make this server unreachable." msgstr "" -#: mod/install.php:452 -msgid "" -"The web installer needs to be able to create a file called \".htconfig.php\" " -"in the top folder of your web server and it is unable to do so." +#: mod/admin.php:1158 +msgid "Site name" msgstr "" -#: mod/install.php:453 -msgid "" -"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." +#: mod/admin.php:1159 +msgid "Host name" msgstr "" -#: mod/install.php:454 -msgid "" -"At the end of this procedure, we will give you a text to save in a file " -"named .htconfig.php in your Friendica top folder." +#: mod/admin.php:1160 +msgid "Sender Email" msgstr "" -#: mod/install.php:455 +#: mod/admin.php:1160 msgid "" -"You can alternatively skip this procedure and perform a manual installation. " -"Please see the file \"INSTALL.txt\" for instructions." +"The email address your server shall use to send notification emails from." msgstr "" -#: mod/install.php:458 -msgid ".htconfig.php is writable" +#: mod/admin.php:1161 +msgid "Banner/Logo" msgstr "" -#: mod/install.php:468 -msgid "" -"Friendica uses the Smarty3 template engine to render its web views. Smarty3 " -"compiles templates to PHP to speed up rendering." +#: mod/admin.php:1162 +msgid "Shortcut icon" msgstr "" -#: mod/install.php:469 -msgid "" -"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." +#: mod/admin.php:1162 +msgid "Link to an icon that will be used for browsers." msgstr "" -#: mod/install.php:470 -msgid "" -"Please ensure that the user that your web server runs as (e.g. www-data) has " -"write access to this folder." +#: mod/admin.php:1163 +msgid "Touch icon" msgstr "" -#: mod/install.php:471 -msgid "" -"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." +#: mod/admin.php:1163 +msgid "Link to an icon that will be used for tablets and mobiles." msgstr "" -#: mod/install.php:474 -msgid "view/smarty3 is writable" +#: mod/admin.php:1164 +msgid "Additional Info" msgstr "" -#: mod/install.php:490 +#: mod/admin.php:1164 +#, php-format msgid "" -"Url rewrite in .htaccess is not working. Check your server configuration." +"For public servers: you can add additional information here that will be " +"listed at %s/siteinfo." msgstr "" -#: mod/install.php:492 -msgid "Url rewrite is working" +#: mod/admin.php:1165 +msgid "System language" msgstr "" -#: mod/install.php:511 -msgid "ImageMagick PHP extension is not installed" +#: mod/admin.php:1166 +msgid "System theme" msgstr "" -#: mod/install.php:513 -msgid "ImageMagick PHP extension is installed" +#: mod/admin.php:1166 +msgid "" +"Default system theme - may be over-ridden by user profiles - change theme settings" msgstr "" -#: mod/install.php:515 -msgid "ImageMagick supports GIF" +#: mod/admin.php:1167 +msgid "Mobile system theme" msgstr "" -#: mod/install.php:522 -msgid "" -"The database configuration file \".htconfig.php\" could not be written. " -"Please use the enclosed text to create a configuration file in your web " -"server root." +#: mod/admin.php:1167 +msgid "Theme for mobile devices" msgstr "" -#: mod/install.php:547 -msgid "

What next

" +#: mod/admin.php:1168 +msgid "SSL link policy" msgstr "" -#: mod/install.php:548 -msgid "" -"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." +#: mod/admin.php:1168 +msgid "Determines whether generated links should be forced to use SSL" msgstr "" -#: mod/localtime.php:25 -msgid "Time Conversion" +#: mod/admin.php:1169 +msgid "Force SSL" msgstr "" -#: mod/localtime.php:27 +#: mod/admin.php:1169 msgid "" -"Friendica provides this service for sharing events with other networks and " -"friends in unknown timezones." +"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " +"to endless loops." msgstr "" -#: mod/localtime.php:31 -#, php-format -msgid "UTC time: %s" +#: mod/admin.php:1170 +msgid "Hide help entry from navigation menu" msgstr "" -#: mod/localtime.php:34 -#, php-format -msgid "Current timezone: %s" +#: mod/admin.php:1170 +msgid "" +"Hides the menu entry for the Help pages from the navigation menu. You can " +"still access it calling /help directly." msgstr "" -#: mod/localtime.php:37 -#, php-format -msgid "Converted localtime: %s" +#: mod/admin.php:1171 +msgid "Single user instance" msgstr "" -#: mod/localtime.php:42 -msgid "Please select your timezone:" +#: mod/admin.php:1171 +msgid "Make this instance multi-user or single-user for the named user" msgstr "" -#: mod/lockview.php:33 mod/lockview.php:41 -msgid "Remote privacy information not available." +#: mod/admin.php:1172 +msgid "Maximum image size" msgstr "" -#: mod/lockview.php:50 -msgid "Visible to:" +#: mod/admin.php:1172 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." msgstr "" -#: mod/lostpass.php:21 -msgid "No valid account found." +#: mod/admin.php:1173 +msgid "Maximum image length" msgstr "" -#: mod/lostpass.php:37 -msgid "Password reset request issued. Check your email." +#: mod/admin.php:1173 +msgid "" +"Maximum length in pixels of the longest side of uploaded images. Default is " +"-1, which means no limits." msgstr "" -#: mod/lostpass.php:43 -#, php-format -msgid "" -"\n" -"\t\tDear %1$s,\n" -"\t\t\tA request was recently received at \"%2$s\" to reset your account\n" -"\t\tpassword. In order to confirm this request, please select the " -"verification link\n" -"\t\tbelow or paste it into your web browser address bar.\n" -"\n" -"\t\tIf you did NOT request this change, please DO NOT follow the link\n" -"\t\tprovided and ignore and/or delete this email.\n" -"\n" -"\t\tYour password will not be changed unless we can verify that you\n" -"\t\tissued this request." +#: mod/admin.php:1174 +msgid "JPEG image quality" msgstr "" -#: mod/lostpass.php:54 -#, php-format +#: mod/admin.php:1174 msgid "" -"\n" -"\t\tFollow this link to verify your identity:\n" -"\n" -"\t\t%1$s\n" -"\n" -"\t\tYou will then receive a follow-up message containing the new password.\n" -"\t\tYou may change that password from your account settings page after " -"logging in.\n" -"\n" -"\t\tThe login details are as follows:\n" -"\n" -"\t\tSite Location:\t%2$s\n" -"\t\tLogin Name:\t%3$s" +"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " +"100, which is full quality." msgstr "" -#: mod/lostpass.php:73 -#, php-format -msgid "Password reset requested at %s" +#: mod/admin.php:1176 +msgid "Register policy" msgstr "" -#: mod/lostpass.php:93 -msgid "" -"Request could not be verified. (You may have previously submitted it.) " -"Password reset failed." +#: mod/admin.php:1177 +msgid "Maximum Daily Registrations" msgstr "" -#: mod/lostpass.php:112 boot.php:886 -msgid "Password Reset" +#: mod/admin.php:1177 +msgid "" +"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." msgstr "" -#: mod/lostpass.php:113 -msgid "Your password has been reset as requested." +#: mod/admin.php:1178 +msgid "Register text" msgstr "" -#: mod/lostpass.php:114 -msgid "Your new password is" +#: mod/admin.php:1178 +msgid "Will be displayed prominently on the registration page." msgstr "" -#: mod/lostpass.php:115 -msgid "Save or copy your new password - and then" +#: mod/admin.php:1179 +msgid "Accounts abandoned after x days" msgstr "" -#: mod/lostpass.php:116 -msgid "click here to login" -msgstr "" - -#: mod/lostpass.php:117 +#: mod/admin.php:1179 msgid "" -"Your password may be changed from the Settings page after " -"successful login." +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." msgstr "" -#: mod/lostpass.php:127 -#, php-format -msgid "" -"\n" -"\t\t\t\tDear %1$s,\n" -"\t\t\t\t\tYour password has been changed as requested. Please retain this\n" -"\t\t\t\tinformation for your records (or change your password immediately " -"to\n" -"\t\t\t\tsomething that you will remember).\n" -"\t\t\t" +#: mod/admin.php:1180 +msgid "Allowed friend domains" msgstr "" -#: mod/lostpass.php:133 -#, php-format +#: mod/admin.php:1180 msgid "" -"\n" -"\t\t\t\tYour login details are as follows:\n" -"\n" -"\t\t\t\tSite Location:\t%1$s\n" -"\t\t\t\tLogin Name:\t%2$s\n" -"\t\t\t\tPassword:\t%3$s\n" -"\n" -"\t\t\t\tYou may change that password from your account settings page after " -"logging in.\n" -"\t\t\t" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: mod/lostpass.php:149 -#, php-format -msgid "Your password has been changed at %s" +#: mod/admin.php:1181 +msgid "Allowed email domains" msgstr "" -#: mod/lostpass.php:161 -msgid "Forgot your Password?" +#: mod/admin.php:1181 +msgid "" +"Comma separated list of domains which are allowed in email addresses for " +"registrations to this site. Wildcards are accepted. Empty to allow any " +"domains" msgstr "" -#: mod/lostpass.php:162 -msgid "" -"Enter your email address and submit to have your password reset. Then check " -"your email for further instructions." +#: mod/admin.php:1182 +msgid "Block public" msgstr "" -#: mod/lostpass.php:163 boot.php:874 -msgid "Nickname or Email: " +#: mod/admin.php:1182 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently logged in." msgstr "" -#: mod/lostpass.php:164 -msgid "Reset" +#: mod/admin.php:1183 +msgid "Force publish" msgstr "" -#: mod/maintenance.php:21 -msgid "System down for maintenance" +#: mod/admin.php:1183 +msgid "" +"Check to force all profiles on this site to be listed in the site directory." msgstr "" -#: mod/manage.php:152 -msgid "Manage Identities and/or Pages" +#: mod/admin.php:1184 +msgid "Global directory URL" msgstr "" -#: mod/manage.php:153 +#: mod/admin.php:1184 msgid "" -"Toggle between different identities or community/group pages which share " -"your account details or which you have been granted \"manage\" permissions" +"URL to the global directory. If this is not set, the global directory is " +"completely unavailable to the application." msgstr "" -#: mod/manage.php:154 -msgid "Select an identity to manage: " +#: mod/admin.php:1185 +msgid "Allow threaded items" msgstr "" -#: mod/match.php:38 -msgid "No keywords to match. Please add keywords to your default profile." +#: mod/admin.php:1185 +msgid "Allow infinite level threading for items on this site." msgstr "" -#: mod/match.php:91 -msgid "is interested in:" +#: mod/admin.php:1186 +msgid "Private posts by default for new users" msgstr "" -#: mod/match.php:105 -msgid "Profile Match" +#: mod/admin.php:1186 +msgid "" +"Set default post permissions for all new members to the default privacy " +"group rather than public." msgstr "" -#: mod/match.php:112 mod/dirfind.php:247 -msgid "No matches" +#: mod/admin.php:1187 +msgid "Don't include post content in email notifications" msgstr "" -#: mod/message.php:62 mod/wallmessage.php:52 -msgid "No recipient selected." +#: mod/admin.php:1187 +msgid "" +"Don't include the content of a post/comment/private message/etc. in the " +"email notifications that are sent out from this site, as a privacy measure." msgstr "" -#: mod/message.php:66 -msgid "Unable to locate contact information." +#: mod/admin.php:1188 +msgid "Disallow public access to addons listed in the apps menu." msgstr "" -#: mod/message.php:69 mod/wallmessage.php:58 -msgid "Message could not be sent." +#: mod/admin.php:1188 +msgid "" +"Checking this box will restrict addons listed in the apps menu to members " +"only." msgstr "" -#: mod/message.php:72 mod/wallmessage.php:61 -msgid "Message collection failure." +#: mod/admin.php:1189 +msgid "Don't embed private images in posts" msgstr "" -#: mod/message.php:75 mod/wallmessage.php:64 -msgid "Message sent." +#: mod/admin.php:1189 +msgid "" +"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." msgstr "" -#: mod/message.php:206 -msgid "Do you really want to delete this message?" +#: mod/admin.php:1190 +msgid "Allow Users to set remote_self" msgstr "" -#: mod/message.php:226 -msgid "Message deleted." +#: mod/admin.php:1190 +msgid "" +"With checking this, every user is allowed to mark every contact as a " +"remote_self in the repair contact dialog. Setting this flag on a contact " +"causes mirroring every posting of that contact in the users stream." msgstr "" -#: mod/message.php:257 -msgid "Conversation removed." +#: mod/admin.php:1191 +msgid "Block multiple registrations" msgstr "" -#: mod/message.php:324 mod/wallmessage.php:128 -msgid "Send Private Message" +#: mod/admin.php:1191 +msgid "Disallow users to register additional accounts for use as pages." msgstr "" -#: mod/message.php:325 mod/message.php:512 mod/wallmessage.php:130 -msgid "To:" +#: mod/admin.php:1192 +msgid "OpenID support" msgstr "" -#: mod/message.php:330 mod/message.php:514 mod/wallmessage.php:131 -msgid "Subject:" +#: mod/admin.php:1192 +msgid "OpenID support for registration and logins." msgstr "" -#: mod/message.php:334 mod/message.php:517 mod/wallmessage.php:137 -#: mod/invite.php:143 -msgid "Your message:" +#: mod/admin.php:1193 +msgid "Fullname check" msgstr "" -#: mod/message.php:366 -msgid "No messages." +#: mod/admin.php:1193 +msgid "" +"Force users to register with a space between firstname and lastname in Full " +"name, as an antispam measure" msgstr "" -#: mod/message.php:405 -msgid "Message not available." +#: mod/admin.php:1194 +msgid "Community Page Style" msgstr "" -#: mod/message.php:479 -msgid "Delete message" +#: mod/admin.php:1194 +msgid "" +"Type of community page to show. 'Global community' shows every public " +"posting from an open distributed network that arrived on this server." msgstr "" -#: mod/message.php:505 mod/message.php:593 -msgid "Delete conversation" +#: mod/admin.php:1195 +msgid "Posts per user on community page" msgstr "" -#: mod/message.php:507 +#: mod/admin.php:1195 msgid "" -"No secure communications available. You may be able to " -"respond from the sender's profile page." +"The maximum number of posts per user on the community page. (Not valid for " +"'Global Community')" msgstr "" -#: mod/message.php:511 -msgid "Send Reply" +#: mod/admin.php:1196 +msgid "Enable OStatus support" msgstr "" -#: mod/message.php:563 -#, php-format -msgid "Unknown sender - %s" +#: mod/admin.php:1196 +msgid "" +"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " +"communications in OStatus are public, so privacy warnings will be " +"occasionally displayed." msgstr "" -#: mod/message.php:565 -#, php-format -msgid "You and %s" +#: mod/admin.php:1197 +msgid "OStatus conversation completion interval" msgstr "" -#: mod/message.php:567 -#, php-format -msgid "%s and You" +#: mod/admin.php:1197 +msgid "" +"How often shall the poller check for new entries in OStatus conversations? " +"This can be a very ressource task." msgstr "" -#: mod/message.php:596 -msgid "D, d M Y - g:i A" +#: mod/admin.php:1198 +msgid "Only import OStatus threads from our contacts" msgstr "" -#: mod/message.php:599 -#, php-format -msgid "%d message" -msgid_plural "%d messages" -msgstr[0] "" -msgstr[1] "" +#: mod/admin.php:1198 +msgid "" +"Normally we import every content from our OStatus contacts. With this option " +"we only store threads that are started by a contact that is known on our " +"system." +msgstr "" -#: mod/mood.php:135 -msgid "Mood" +#: mod/admin.php:1199 +msgid "OStatus support can only be enabled if threading is enabled." msgstr "" -#: mod/mood.php:136 -msgid "Set your current mood and tell your friends" +#: mod/admin.php:1201 +msgid "" +"Diaspora support can't be enabled because Friendica was installed into a sub " +"directory." msgstr "" -#: mod/newmember.php:7 -msgid "Welcome to Friendica" +#: mod/admin.php:1202 +msgid "Enable Diaspora support" msgstr "" -#: mod/newmember.php:8 -msgid "New Member Checklist" +#: mod/admin.php:1202 +msgid "Provide built-in Diaspora network compatibility." msgstr "" -#: mod/newmember.php:10 -msgid "" -"We would like to offer some tips and links to help make your experience " -"enjoyable. Click any item to visit the relevant page. A link to this page " -"will be visible from your home page for two weeks after your initial " -"registration and then will quietly disappear." +#: mod/admin.php:1203 +msgid "Only allow Friendica contacts" msgstr "" -#: mod/newmember.php:11 -msgid "Getting Started" +#: mod/admin.php:1203 +msgid "" +"All contacts must use Friendica protocols. All other built-in communication " +"protocols disabled." msgstr "" -#: mod/newmember.php:13 -msgid "Friendica Walk-Through" +#: mod/admin.php:1204 +msgid "Verify SSL" msgstr "" -#: mod/newmember.php:13 +#: mod/admin.php:1204 msgid "" -"On your Quick Start page - find a brief introduction to your " -"profile and network tabs, make some new connections, and find some groups to " -"join." +"If you wish, you can turn on strict certificate checking. This will mean you " +"cannot connect (at all) to self-signed SSL sites." msgstr "" -#: mod/newmember.php:17 -msgid "Go to Your Settings" +#: mod/admin.php:1205 +msgid "Proxy user" msgstr "" -#: mod/newmember.php:17 -msgid "" -"On your Settings 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." +#: mod/admin.php:1206 +msgid "Proxy URL" msgstr "" -#: mod/newmember.php:18 -msgid "" -"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." +#: mod/admin.php:1207 +msgid "Network timeout" msgstr "" -#: mod/newmember.php:22 mod/profile_photo.php:255 mod/profiles.php:703 -msgid "Upload Profile Photo" +#: mod/admin.php:1207 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: mod/newmember.php:22 +#: mod/admin.php:1208 +msgid "Maximum Load Average" +msgstr "" + +#: mod/admin.php:1208 msgid "" -"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." +"Maximum system load before delivery and poll processes are deferred - " +"default 50." msgstr "" -#: mod/newmember.php:23 -msgid "Edit Your Profile" +#: mod/admin.php:1209 +msgid "Maximum Load Average (Frontend)" msgstr "" -#: mod/newmember.php:23 +#: mod/admin.php:1209 +msgid "Maximum system load before the frontend quits service - default 50." +msgstr "" + +#: mod/admin.php:1210 +msgid "Minimal Memory" +msgstr "" + +#: mod/admin.php:1210 msgid "" -"Edit your default profile to your liking. Review the " -"settings for hiding your list of friends and hiding the profile from unknown " -"visitors." +"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - " +"default 0 (deactivated)." msgstr "" -#: mod/newmember.php:24 -msgid "Profile Keywords" +#: mod/admin.php:1211 +msgid "Maximum table size for optimization" msgstr "" -#: mod/newmember.php:24 +#: mod/admin.php:1211 msgid "" -"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." +"Maximum table size (in MB) for the automatic optimization - default 100 MB. " +"Enter -1 to disable it." msgstr "" -#: mod/newmember.php:26 -msgid "Connecting" +#: mod/admin.php:1212 +msgid "Minimum level of fragmentation" msgstr "" -#: mod/newmember.php:32 -msgid "Importing Emails" +#: mod/admin.php:1212 +msgid "" +"Minimum fragmenation level to start the automatic optimization - default " +"value is 30%." msgstr "" -#: mod/newmember.php:32 +#: mod/admin.php:1214 +msgid "Periodical check of global contacts" +msgstr "" + +#: mod/admin.php:1214 msgid "" -"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" +"If enabled, the global contacts are checked periodically for missing or " +"outdated data and the vitality of the contacts and servers." msgstr "" -#: mod/newmember.php:35 -msgid "Go to Your Contacts Page" +#: mod/admin.php:1215 +msgid "Days between requery" msgstr "" -#: mod/newmember.php:35 +#: mod/admin.php:1215 +msgid "Number of days after which a server is requeried for his contacts." +msgstr "" + +#: mod/admin.php:1216 +msgid "Discover contacts from other servers" +msgstr "" + +#: mod/admin.php:1216 msgid "" -"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 Add New Contact dialog." +"Periodically query other servers for contacts. You can choose between " +"'users': the users on the remote system, 'Global Contacts': active contacts " +"that are known on the system. The fallback is meant for Redmatrix servers " +"and older friendica servers, where global contacts weren't available. The " +"fallback increases the server load, so the recommened setting is 'Users, " +"Global Contacts'." msgstr "" -#: mod/newmember.php:36 -msgid "Go to Your Site's Directory" +#: mod/admin.php:1217 +msgid "Timeframe for fetching global contacts" msgstr "" -#: mod/newmember.php:36 +#: mod/admin.php:1217 msgid "" -"The Directory page lets you find other people in this network or other " -"federated sites. Look for a Connect or Follow link on " -"their profile page. Provide your own Identity Address if requested." +"When the discovery is activated, this value defines the timeframe for the " +"activity of the global contacts that are fetched from other servers." msgstr "" -#: mod/newmember.php:37 -msgid "Finding New People" +#: mod/admin.php:1218 +msgid "Search the local directory" msgstr "" -#: mod/newmember.php:37 +#: mod/admin.php:1218 msgid "" -"On the side panel of the Contacts page are several tools to find new " -"friends. We can match people by interest, look up people by name or " -"interest, and provide suggestions based on network relationships. On a brand " -"new site, friend suggestions will usually begin to be populated within 24 " -"hours." +"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." msgstr "" -#: mod/newmember.php:41 -msgid "Group Your Contacts" +#: mod/admin.php:1220 +msgid "Publish server information" msgstr "" -#: mod/newmember.php:41 +#: mod/admin.php:1220 msgid "" -"Once you have made some friends, organize them into private conversation " -"groups from the sidebar of your Contacts page and then you can interact with " -"each group privately on your Network page." +"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 the-federation.info for details." msgstr "" -#: mod/newmember.php:44 -msgid "Why Aren't My Posts Public?" +#: mod/admin.php:1222 +msgid "Suppress Tags" msgstr "" -#: mod/newmember.php:44 +#: mod/admin.php:1222 +msgid "Suppress showing a list of hashtags at the end of the posting." +msgstr "" + +#: mod/admin.php:1223 +msgid "Path to item cache" +msgstr "" + +#: mod/admin.php:1223 +msgid "The item caches buffers generated bbcode and external images." +msgstr "" + +#: mod/admin.php:1224 +msgid "Cache duration in seconds" +msgstr "" + +#: mod/admin.php:1224 msgid "" -"Friendica respects your privacy. By default, your posts will only show up to " -"people you've added as friends. For more information, see the help section " -"from the link above." +"How long should the cache files be hold? Default value is 86400 seconds (One " +"day). To disable the item cache, set the value to -1." msgstr "" -#: mod/newmember.php:48 -msgid "Getting Help" +#: mod/admin.php:1225 +msgid "Maximum numbers of comments per post" msgstr "" -#: mod/newmember.php:50 -msgid "Go to the Help Section" +#: mod/admin.php:1225 +msgid "How much comments should be shown for each post? Default value is 100." msgstr "" -#: mod/newmember.php:50 +#: mod/admin.php:1226 +msgid "Temp path" +msgstr "" + +#: mod/admin.php:1226 msgid "" -"Our help pages may be consulted for detail on other program " -"features and resources." +"If you have a restricted system where the webserver can't access the system " +"temp path, enter another path here." msgstr "" -#: mod/nogroup.php:45 mod/viewcontacts.php:105 mod/contacts.php:599 -#: mod/contacts.php:943 -#, php-format -msgid "Visit %s's profile [%s]" +#: mod/admin.php:1227 +msgid "Base path to installation" msgstr "" -#: mod/nogroup.php:46 mod/contacts.php:944 -msgid "Edit contact" +#: mod/admin.php:1227 +msgid "" +"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." msgstr "" -#: mod/nogroup.php:67 -msgid "Contacts who are not members of a group" +#: mod/admin.php:1228 +msgid "Disable picture proxy" msgstr "" -#: mod/notifications.php:37 -msgid "Invalid request identifier." +#: mod/admin.php:1228 +msgid "" +"The picture proxy increases performance and privacy. It shouldn't be used on " +"systems with very low bandwith." msgstr "" -#: mod/notifications.php:46 mod/notifications.php:182 mod/notifications.php:229 -msgid "Discard" +#: mod/admin.php:1229 +msgid "Only search in tags" msgstr "" -#: mod/notifications.php:62 mod/notifications.php:181 mod/notifications.php:265 -#: mod/contacts.php:619 mod/contacts.php:819 mod/contacts.php:1004 -msgid "Ignore" +#: mod/admin.php:1229 +msgid "On large systems the text search can slow down the system extremely." msgstr "" -#: mod/notifications.php:107 -msgid "Network Notifications" +#: mod/admin.php:1231 +msgid "New base url" msgstr "" -#: mod/notifications.php:113 mod/notify.php:72 -msgid "System Notifications" +#: mod/admin.php:1231 +msgid "" +"Change base url for this server. Sends relocate message to all DFRN contacts " +"of all users." msgstr "" -#: mod/notifications.php:119 -msgid "Personal Notifications" +#: mod/admin.php:1233 +msgid "RINO Encryption" msgstr "" -#: mod/notifications.php:125 -msgid "Home Notifications" +#: mod/admin.php:1233 +msgid "Encryption layer between nodes." msgstr "" -#: mod/notifications.php:154 -msgid "Show Ignored Requests" +#: mod/admin.php:1235 +msgid "Maximum number of parallel workers" msgstr "" -#: mod/notifications.php:154 -msgid "Hide Ignored Requests" +#: mod/admin.php:1235 +msgid "" +"On shared hosters set this to 2. On larger systems, values of 10 are great. " +"Default value is 4." msgstr "" -#: mod/notifications.php:166 mod/notifications.php:236 -msgid "Notification type: " +#: mod/admin.php:1236 +msgid "Don't use 'proc_open' with the worker" msgstr "" -#: mod/notifications.php:169 +#: mod/admin.php:1236 +msgid "" +"Enable this if your system doesn't allow the use of 'proc_open'. This can " +"happen on shared hosters. If this is enabled you should increase the " +"frequency of poller calls in your crontab." +msgstr "" + +#: mod/admin.php:1237 +msgid "Enable fastlane" +msgstr "" + +#: mod/admin.php:1237 +msgid "" +"When enabed, the fastlane mechanism starts an additional worker if processes " +"with higher priority are blocked by processes of lower priority." +msgstr "" + +#: mod/admin.php:1238 +msgid "Enable frontend worker" +msgstr "" + +#: mod/admin.php:1238 #, php-format -msgid "suggested by %s" +msgid "" +"When enabled the Worker process is triggered when backend access is " +"performed (e.g. messages being delivered). On smaller sites you might want " +"to call %s/worker on a regular basis via an external cron job. You should " +"only enable this option if you cannot utilize cron/scheduled jobs on your " +"server." msgstr "" -#: mod/notifications.php:174 mod/notifications.php:253 mod/contacts.php:626 -msgid "Hide this contact from others" +#: mod/admin.php:1268 +msgid "Update has been marked successful" msgstr "" -#: mod/notifications.php:175 mod/notifications.php:254 -msgid "Post a new friend activity" +#: mod/admin.php:1276 +#, php-format +msgid "Database structure update %s was successfully applied." msgstr "" -#: mod/notifications.php:175 mod/notifications.php:254 -msgid "if applicable" +#: mod/admin.php:1279 +#, php-format +msgid "Executing of database structure update %s failed with error: %s" msgstr "" -#: mod/notifications.php:178 mod/notifications.php:263 mod/admin.php:1596 -msgid "Approve" +#: mod/admin.php:1293 +#, php-format +msgid "Executing %s failed with error: %s" msgstr "" -#: mod/notifications.php:197 -msgid "Claims to be known to you: " +#: mod/admin.php:1296 +#, php-format +msgid "Update %s was successfully applied." msgstr "" -#: mod/notifications.php:198 -msgid "yes" +#: mod/admin.php:1299 +#, php-format +msgid "Update %s did not return a status. Unknown if it succeeded." msgstr "" -#: mod/notifications.php:198 -msgid "no" +#: mod/admin.php:1302 +#, php-format +msgid "There was no additional update function %s that needed to be called." msgstr "" -#: mod/notifications.php:199 mod/notifications.php:204 -msgid "Shall your connection be bidirectional or not?" +#: mod/admin.php:1322 +msgid "No failed updates." +msgstr "" + +#: mod/admin.php:1323 +msgid "Check database structure" +msgstr "" + +#: mod/admin.php:1328 +msgid "Failed Updates" +msgstr "" + +#: mod/admin.php:1329 +msgid "" +"This does not include updates prior to 1139, which did not return a status." +msgstr "" + +#: mod/admin.php:1330 +msgid "Mark success (if update was manually applied)" +msgstr "" + +#: mod/admin.php:1331 +msgid "Attempt to execute this update step automatically" +msgstr "" + +#: mod/admin.php:1365 +#, php-format +msgid "" +"\n" +"\t\t\tDear %1$s,\n" +"\t\t\t\tthe administrator of %2$s has set up an account for you." +msgstr "" + +#: mod/admin.php:1368 +#, php-format +msgid "" +"\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\tThank you and welcome to %4$s." msgstr "" -#: mod/notifications.php:200 mod/notifications.php:205 +#: mod/admin.php:1412 #, php-format -msgid "" -"Accepting %s as a friend allows %s to subscribe to your posts, and you will " -"also receive updates from them in your news feed." -msgstr "" +msgid "%s user blocked/unblocked" +msgid_plural "%s users blocked/unblocked" +msgstr[0] "" +msgstr[1] "" -#: mod/notifications.php:201 +#: mod/admin.php:1419 #, php-format -msgid "" -"Accepting %s as a subscriber allows them to subscribe to your posts, but you " -"will not receive updates from them in your news feed." -msgstr "" +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "" +msgstr[1] "" -#: mod/notifications.php:206 +#: mod/admin.php:1466 #, php-format -msgid "" -"Accepting %s as a sharer allows them to subscribe to your posts, but you " -"will not receive updates from them in your news feed." -msgstr "" - -#: mod/notifications.php:217 -msgid "Friend" -msgstr "" - -#: mod/notifications.php:218 -msgid "Sharer" -msgstr "" - -#: mod/notifications.php:218 -msgid "Subscriber" -msgstr "" - -#: mod/notifications.php:257 mod/follow.php:131 mod/contacts.php:637 -msgid "Profile URL" +msgid "User '%s' deleted" msgstr "" -#: mod/notifications.php:274 -msgid "No introductions." +#: mod/admin.php:1474 +#, php-format +msgid "User '%s' unblocked" msgstr "" -#: mod/notifications.php:315 -msgid "Show unread" +#: mod/admin.php:1474 +#, php-format +msgid "User '%s' blocked" msgstr "" -#: mod/notifications.php:315 -msgid "Show all" +#: mod/admin.php:1582 mod/admin.php:1608 +msgid "Register date" msgstr "" -#: mod/notifications.php:321 -#, php-format -msgid "No more %s notifications." +#: mod/admin.php:1582 mod/admin.php:1608 +msgid "Last login" msgstr "" -#: mod/notify.php:68 -msgid "No more system notifications." +#: mod/admin.php:1582 mod/admin.php:1608 +msgid "Last item" msgstr "" -#: mod/oexchange.php:24 -msgid "Post successful." +#: mod/admin.php:1582 mod/settings.php:46 +msgid "Account" msgstr "" -#: mod/openid.php:24 -msgid "OpenID protocol error. No ID returned." +#: mod/admin.php:1591 +msgid "Add User" msgstr "" -#: mod/openid.php:60 -msgid "" -"Account not found and OpenID registration is not permitted on this site." +#: mod/admin.php:1592 +msgid "select all" msgstr "" -#: mod/ostatus_subscribe.php:16 -msgid "Subscribing to OStatus contacts" +#: mod/admin.php:1593 +msgid "User registrations waiting for confirm" msgstr "" -#: mod/ostatus_subscribe.php:27 -msgid "No contact provided." +#: mod/admin.php:1594 +msgid "User waiting for permanent deletion" msgstr "" -#: mod/ostatus_subscribe.php:33 -msgid "Couldn't fetch information for contact." +#: mod/admin.php:1595 +msgid "Request date" msgstr "" -#: mod/ostatus_subscribe.php:42 -msgid "Couldn't fetch friends for contact." +#: mod/admin.php:1596 +msgid "No registrations." msgstr "" -#: mod/ostatus_subscribe.php:56 mod/repair_ostatus.php:46 -msgid "Done" +#: mod/admin.php:1597 +msgid "Note from the user" msgstr "" -#: mod/ostatus_subscribe.php:70 -msgid "success" +#: mod/admin.php:1598 mod/notifications.php:179 mod/notifications.php:264 +msgid "Approve" msgstr "" -#: mod/ostatus_subscribe.php:72 -msgid "failed" +#: mod/admin.php:1599 +msgid "Deny" msgstr "" -#: mod/ostatus_subscribe.php:80 mod/repair_ostatus.php:52 -msgid "Keep this window open until done." +#: mod/admin.php:1601 mod/contacts.php:625 mod/contacts.php:825 +#: mod/contacts.php:1003 +msgid "Block" msgstr "" -#: mod/p.php:12 -msgid "Not Extended" +#: mod/admin.php:1602 mod/contacts.php:625 mod/contacts.php:825 +#: mod/contacts.php:1003 +msgid "Unblock" msgstr "" -#: mod/p.php:19 mod/p.php:46 mod/p.php:55 mod/fetch.php:15 mod/fetch.php:42 -#: mod/fetch.php:51 mod/help.php:56 index.php:301 -msgid "Not Found" +#: mod/admin.php:1603 +msgid "Site admin" msgstr "" -#: mod/photos.php:96 mod/photos.php:1902 -msgid "Recent Photos" +#: mod/admin.php:1604 +msgid "Account expired" msgstr "" -#: mod/photos.php:99 mod/photos.php:1330 mod/photos.php:1904 -msgid "Upload New Photos" +#: mod/admin.php:1607 +msgid "New User" msgstr "" -#: mod/photos.php:114 mod/settings.php:38 -msgid "everybody" +#: mod/admin.php:1608 +msgid "Deleted since" msgstr "" -#: mod/photos.php:178 -msgid "Contact information unavailable" +#: mod/admin.php:1613 +msgid "" +"Selected users will be deleted!\\n\\nEverything these users had posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: mod/photos.php:199 -msgid "Album not found." +#: mod/admin.php:1614 +msgid "" +"The user {0} will be deleted!\\n\\nEverything this user has posted on this " +"site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: mod/photos.php:232 mod/photos.php:244 mod/photos.php:1274 -msgid "Delete Album" +#: mod/admin.php:1624 +msgid "Name of the new user." msgstr "" -#: mod/photos.php:242 -msgid "Do you really want to delete this photo album and all its photos?" +#: mod/admin.php:1625 +msgid "Nickname" msgstr "" -#: mod/photos.php:325 mod/photos.php:336 mod/photos.php:1600 -msgid "Delete Photo" +#: mod/admin.php:1625 +msgid "Nickname of the new user." msgstr "" -#: mod/photos.php:334 -msgid "Do you really want to delete this photo?" +#: mod/admin.php:1626 +msgid "Email address of the new user." msgstr "" -#: mod/photos.php:715 +#: mod/admin.php:1669 #, php-format -msgid "%1$s was tagged in %2$s by %3$s" -msgstr "" - -#: mod/photos.php:715 -msgid "a photo" +msgid "Plugin %s disabled." msgstr "" -#: mod/photos.php:815 mod/wall_upload.php:181 mod/profile_photo.php:155 +#: mod/admin.php:1673 #, php-format -msgid "Image exceeds size limit of %s" +msgid "Plugin %s enabled." msgstr "" -#: mod/photos.php:823 -msgid "Image file is empty." +#: mod/admin.php:1684 mod/admin.php:1936 +msgid "Disable" msgstr "" -#: mod/photos.php:856 mod/wall_upload.php:218 mod/profile_photo.php:164 -msgid "Unable to process image." +#: mod/admin.php:1686 mod/admin.php:1938 +msgid "Enable" msgstr "" -#: mod/photos.php:885 mod/wall_upload.php:257 mod/profile_photo.php:314 -msgid "Image upload failed." +#: mod/admin.php:1709 mod/admin.php:1985 +msgid "Toggle" msgstr "" -#: mod/photos.php:990 -msgid "No photos selected" +#: mod/admin.php:1717 mod/admin.php:1994 +msgid "Author: " msgstr "" -#: mod/photos.php:1093 mod/videos.php:311 -msgid "Access to this item is restricted." +#: mod/admin.php:1718 mod/admin.php:1995 +msgid "Maintainer: " msgstr "" -#: mod/photos.php:1153 -#, php-format -msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." +#: mod/admin.php:1773 +msgid "Reload active plugins" msgstr "" -#: mod/photos.php:1190 -msgid "Upload Photos" +#: mod/admin.php:1778 +#, php-format +msgid "" +"There are currently no plugins available on your node. You can find the " +"official plugin repository at %1$s and might find other interesting plugins " +"in the open plugin registry at %2$s" msgstr "" -#: mod/photos.php:1194 mod/photos.php:1269 -msgid "New album name: " +#: mod/admin.php:1897 +msgid "No themes found." msgstr "" -#: mod/photos.php:1195 -msgid "or existing album name: " +#: mod/admin.php:1976 +msgid "Screenshot" msgstr "" -#: mod/photos.php:1196 -msgid "Do not show a status post for this upload" +#: mod/admin.php:2036 +msgid "Reload active themes" msgstr "" -#: mod/photos.php:1207 mod/photos.php:1604 mod/settings.php:1308 -msgid "Show to Groups" +#: mod/admin.php:2041 +#, php-format +msgid "No themes found on the system. They should be paced in %1$s" msgstr "" -#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309 -msgid "Show to Contacts" +#: mod/admin.php:2042 +msgid "[Experimental]" msgstr "" -#: mod/photos.php:1209 -msgid "Private Photo" +#: mod/admin.php:2043 +msgid "[Unsupported]" msgstr "" -#: mod/photos.php:1210 -msgid "Public Photo" +#: mod/admin.php:2067 +msgid "Log settings updated." msgstr "" -#: mod/photos.php:1280 -msgid "Edit Album" +#: mod/admin.php:2099 +msgid "PHP log currently enabled." msgstr "" -#: mod/photos.php:1285 -msgid "Show Newest First" +#: mod/admin.php:2101 +msgid "PHP log currently disabled." msgstr "" -#: mod/photos.php:1287 -msgid "Show Oldest First" +#: mod/admin.php:2110 +msgid "Clear" msgstr "" -#: mod/photos.php:1316 mod/photos.php:1887 -msgid "View Photo" +#: mod/admin.php:2115 +msgid "Enable Debugging" msgstr "" -#: mod/photos.php:1361 -msgid "Permission denied. Access to this item may be restricted." +#: mod/admin.php:2116 +msgid "Log file" msgstr "" -#: mod/photos.php:1363 -msgid "Photo not available" +#: mod/admin.php:2116 +msgid "" +"Must be writable by web server. Relative to your Friendica top-level " +"directory." msgstr "" -#: mod/photos.php:1424 -msgid "View photo" +#: mod/admin.php:2117 +msgid "Log level" msgstr "" -#: mod/photos.php:1424 -msgid "Edit photo" +#: mod/admin.php:2120 +msgid "PHP logging" msgstr "" -#: mod/photos.php:1425 -msgid "Use as profile photo" +#: mod/admin.php:2121 +msgid "" +"To enable logging of PHP errors and warnings you can add the following to " +"the .htconfig.php file of your installation. The filename set in the " +"'error_log' line is relative to the friendica top-level directory and must " +"be writeable by the web server. The option '1' for 'log_errors' and " +"'display_errors' is to enable these options, set to '0' to disable them." msgstr "" -#: mod/photos.php:1450 -msgid "View Full Size" +#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784 +msgid "Off" msgstr "" -#: mod/photos.php:1540 -msgid "Tags: " +#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784 +msgid "On" msgstr "" -#: mod/photos.php:1543 -msgid "[Remove any tag]" +#: mod/admin.php:2252 +#, php-format +msgid "Lock feature %s" msgstr "" -#: mod/photos.php:1586 -msgid "New album name" +#: mod/admin.php:2260 +msgid "Manage Additional Features" msgstr "" -#: mod/photos.php:1587 -msgid "Caption" +#: mod/allfriends.php:49 +msgid "No friends to display." msgstr "" -#: mod/photos.php:1588 -msgid "Add a Tag" +#: mod/bookmarklet.php:44 +msgid "The post was created" msgstr "" -#: mod/photos.php:1588 -msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" +#: mod/cal.php:146 mod/display.php:348 mod/profile.php:157 +msgid "Access to this profile has been restricted." msgstr "" -#: mod/photos.php:1589 -msgid "Do not rotate" +#: mod/cal.php:274 mod/events.php:379 +msgid "View" msgstr "" -#: mod/photos.php:1590 -msgid "Rotate CW (right)" +#: mod/cal.php:275 mod/events.php:381 +msgid "Previous" msgstr "" -#: mod/photos.php:1591 -msgid "Rotate CCW (left)" +#: mod/cal.php:276 mod/events.php:382 mod/install.php:204 +msgid "Next" msgstr "" -#: mod/photos.php:1606 -msgid "Private photo" +#: mod/cal.php:285 mod/events.php:391 +msgid "list" msgstr "" -#: mod/photos.php:1607 -msgid "Public photo" +#: mod/cal.php:295 +msgid "User not found" msgstr "" -#: mod/photos.php:1816 -msgid "Map" +#: mod/cal.php:311 +msgid "This calendar format is not supported" msgstr "" -#: mod/photos.php:1893 mod/videos.php:395 -msgid "View Album" +#: mod/cal.php:313 +msgid "No exportable data found" msgstr "" -#: mod/poke.php:197 -msgid "Poke/Prod" +#: mod/cal.php:328 +msgid "calendar" msgstr "" -#: mod/poke.php:198 -msgid "poke, prod or do other things to somebody" -msgstr "" +#: mod/contacts.php:138 +#, php-format +msgid "%d contact edited." +msgid_plural "%d contacts edited." +msgstr[0] "" +msgstr[1] "" -#: mod/poke.php:199 -msgid "Recipient" +#: mod/contacts.php:173 mod/contacts.php:382 +msgid "Could not access contact record." msgstr "" -#: mod/poke.php:200 -msgid "Choose what you wish to do to recipient" +#: mod/contacts.php:187 +msgid "Could not locate selected profile." msgstr "" -#: mod/poke.php:203 -msgid "Make this post private" +#: mod/contacts.php:220 +msgid "Contact updated." msgstr "" -#: mod/profperm.php:28 mod/profperm.php:59 -msgid "Invalid profile identifier." +#: mod/contacts.php:222 mod/dfrn_request.php:594 +msgid "Failed to update contact record." msgstr "" -#: mod/profperm.php:105 -msgid "Profile Visibility Editor" +#: mod/contacts.php:403 +msgid "Contact has been blocked" msgstr "" -#: mod/profperm.php:118 -msgid "Visible To" +#: mod/contacts.php:403 +msgid "Contact has been unblocked" msgstr "" -#: mod/profperm.php:134 -msgid "All Contacts (with secure profile access)" +#: mod/contacts.php:414 +msgid "Contact has been ignored" msgstr "" -#: mod/removeme.php:54 mod/removeme.php:57 -msgid "Remove My Account" +#: mod/contacts.php:414 +msgid "Contact has been unignored" msgstr "" -#: mod/removeme.php:55 -msgid "" -"This will completely remove your account. Once this has been done it is not " -"recoverable." +#: mod/contacts.php:426 +msgid "Contact has been archived" msgstr "" -#: mod/removeme.php:56 -msgid "Please enter your password for verification:" +#: mod/contacts.php:426 +msgid "Contact has been unarchived" msgstr "" -#: mod/repair_ostatus.php:16 -msgid "Resubscribing to OStatus contacts" +#: mod/contacts.php:451 +msgid "Drop contact" msgstr "" -#: mod/repair_ostatus.php:32 -msgid "Error" +#: mod/contacts.php:454 mod/contacts.php:821 +msgid "Do you really want to delete this contact?" msgstr "" -#: mod/subthread.php:105 -#, php-format -msgid "%1$s is following %2$s's %3$s" +#: mod/contacts.php:473 +msgid "Contact has been removed." msgstr "" -#: mod/suggest.php:29 -msgid "Do you really want to delete this suggestion?" +#: mod/contacts.php:510 +#, php-format +msgid "You are mutual friends with %s" msgstr "" -#: mod/suggest.php:73 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." +#: mod/contacts.php:514 +#, php-format +msgid "You are sharing with %s" msgstr "" -#: mod/suggest.php:86 mod/suggest.php:106 -msgid "Ignore/Hide" +#: mod/contacts.php:519 +#, php-format +msgid "%s is sharing with you" msgstr "" -#: mod/tagrm.php:45 -msgid "Tag removed" +#: mod/contacts.php:539 +msgid "Private communications are not available for this contact." msgstr "" -#: mod/tagrm.php:84 -msgid "Remove Item Tag" +#: mod/contacts.php:546 +msgid "(Update was successful)" msgstr "" -#: mod/tagrm.php:86 -msgid "Select a tag to remove: " +#: mod/contacts.php:546 +msgid "(Update was not successful)" msgstr "" -#: mod/uexport.php:38 -msgid "Export account" +#: mod/contacts.php:548 mod/contacts.php:984 +msgid "Suggest friends" msgstr "" -#: mod/uexport.php:38 -msgid "" -"Export your account info and contacts. Use this to make a backup of your " -"account and/or to move it to another server." +#: mod/contacts.php:552 +#, php-format +msgid "Network type: %s" msgstr "" -#: mod/uexport.php:39 -msgid "Export all" +#: mod/contacts.php:565 +msgid "Communications lost with this contact!" msgstr "" -#: mod/uexport.php:39 -msgid "" -"Export your accout info, contacts and all your items as json. Could be a " -"very big file, and could take a lot of time. Use this to make a full backup " -"of your account (photos are not exported)" +#: mod/contacts.php:568 +msgid "Fetch further information for feeds" msgstr "" -#: mod/uexport.php:46 mod/settings.php:97 -msgid "Export personal data" +#: mod/contacts.php:569 +msgid "Fetch information" msgstr "" -#: mod/update_community.php:21 mod/update_display.php:25 -#: mod/update_notes.php:38 mod/update_profile.php:37 mod/update_network.php:29 -msgid "[Embedded content - reload page to view]" +#: mod/contacts.php:569 +msgid "Fetch information and keywords" msgstr "" -#: mod/videos.php:126 -msgid "Do you really want to delete this video?" +#: mod/contacts.php:583 mod/unfollow.php:100 +msgid "Disconnect/Unfollow" msgstr "" -#: mod/videos.php:131 -msgid "Delete Video" +#: mod/contacts.php:593 +msgid "Contact" msgstr "" -#: mod/videos.php:210 -msgid "No videos selected" +#: mod/contacts.php:596 +msgid "Profile Visibility" msgstr "" -#: mod/videos.php:404 -msgid "Recent Videos" +#: mod/contacts.php:597 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." msgstr "" -#: mod/videos.php:406 -msgid "Upload New Videos" +#: mod/contacts.php:598 +msgid "Contact Information / Notes" msgstr "" -#: mod/viewcontacts.php:78 -msgid "No contacts." +#: mod/contacts.php:599 +msgid "Their personal note" msgstr "" -#: mod/viewsrc.php:8 -msgid "Access denied." +#: mod/contacts.php:601 +msgid "Edit contact notes" msgstr "" -#: mod/wall_attach.php:19 mod/wall_attach.php:27 mod/wall_attach.php:78 -#: mod/wall_upload.php:36 mod/wall_upload.php:52 mod/wall_upload.php:110 -#: mod/wall_upload.php:150 mod/wall_upload.php:153 -msgid "Invalid request." +#: mod/contacts.php:607 +msgid "Block/Unblock contact" msgstr "" -#: mod/wall_attach.php:96 -msgid "Sorry, maybe your upload is bigger than the PHP configuration allows" +#: mod/contacts.php:608 +msgid "Ignore contact" msgstr "" -#: mod/wall_attach.php:96 -msgid "Or - did you try to upload an empty file?" +#: mod/contacts.php:609 +msgid "Repair URL settings" msgstr "" -#: mod/wall_attach.php:107 -#, php-format -msgid "File exceeds size limit of %s" +#: mod/contacts.php:610 +msgid "View conversations" msgstr "" -#: mod/wall_attach.php:160 mod/wall_attach.php:176 -msgid "File upload failed." +#: mod/contacts.php:616 +msgid "Last update:" msgstr "" -#: mod/wallmessage.php:44 mod/wallmessage.php:108 -#, php-format -msgid "Number of daily wall messages for %s exceeded. Message failed." +#: mod/contacts.php:618 +msgid "Update public posts" msgstr "" -#: mod/wallmessage.php:55 -msgid "Unable to check your home location." +#: mod/contacts.php:620 mod/contacts.php:994 +msgid "Update now" msgstr "" -#: mod/wallmessage.php:82 mod/wallmessage.php:91 -msgid "No recipient." +#: mod/contacts.php:626 mod/contacts.php:826 mod/contacts.php:1011 +msgid "Unignore" msgstr "" -#: mod/wallmessage.php:129 -#, php-format -msgid "" -"If you wish for %s to respond, please check that the privacy settings on " -"your site allow private mail from unknown senders." +#: mod/contacts.php:626 mod/contacts.php:826 mod/contacts.php:1011 +#: mod/notifications.php:63 mod/notifications.php:182 mod/notifications.php:266 +msgid "Ignore" msgstr "" -#: mod/webfinger.php:11 mod/probe.php:10 -msgid "Only logged in users are permitted to perform a probing." +#: mod/contacts.php:630 +msgid "Currently blocked" msgstr "" -#: mod/regmod.php:60 -msgid "Account approved." +#: mod/contacts.php:631 +msgid "Currently ignored" msgstr "" -#: mod/regmod.php:88 -#, php-format -msgid "Registration revoked for %s" +#: mod/contacts.php:632 +msgid "Currently archived" msgstr "" -#: mod/regmod.php:100 -msgid "Please login." +#: mod/contacts.php:633 mod/notifications.php:175 mod/notifications.php:254 +msgid "Hide this contact from others" msgstr "" -#: mod/uimport.php:53 mod/register.php:201 +#: mod/contacts.php:633 msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." +"Replies/likes to your public posts may still be visible" msgstr "" -#: mod/uimport.php:68 mod/register.php:298 -msgid "Import" +#: mod/contacts.php:634 +msgid "Notification for new posts" msgstr "" -#: mod/uimport.php:70 -msgid "Move account" +#: mod/contacts.php:634 +msgid "Send a notification of every new post of this contact" msgstr "" -#: mod/uimport.php:71 -msgid "You can import an account from another Friendica server." +#: mod/contacts.php:637 +msgid "Blacklisted keywords" msgstr "" -#: mod/uimport.php:72 +#: mod/contacts.php:637 msgid "" -"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." +"Comma separated list of keywords that should not be converted to hashtags, " +"when \"Fetch information and keywords\" is selected" msgstr "" -#: mod/uimport.php:73 -msgid "" -"This feature is experimental. We can't import contacts from the OStatus " -"network (GNU Social/Statusnet) or from Diaspora" +#: mod/contacts.php:644 mod/follow.php:166 mod/notifications.php:258 +#: mod/unfollow.php:122 +msgid "Profile URL" msgstr "" -#: mod/uimport.php:74 -msgid "Account file" +#: mod/contacts.php:655 +msgid "Actions" msgstr "" -#: mod/uimport.php:74 -msgid "" -"To export your account, go to \"Settings->Export your personal data\" and " -"select \"Export account\"" +#: mod/contacts.php:658 +msgid "Contact Settings" msgstr "" -#: mod/dfrn_request.php:103 -msgid "This introduction has already been accepted." +#: mod/contacts.php:704 +msgid "Suggestions" msgstr "" -#: mod/dfrn_request.php:126 mod/dfrn_request.php:528 -msgid "Profile location is not valid or does not contain profile information." +#: mod/contacts.php:707 +msgid "Suggest potential friends" msgstr "" -#: mod/dfrn_request.php:131 mod/dfrn_request.php:533 -msgid "Warning: profile location has no identifiable owner name." +#: mod/contacts.php:712 mod/group.php:214 +msgid "All Contacts" msgstr "" -#: mod/dfrn_request.php:134 mod/dfrn_request.php:536 -msgid "Warning: profile location has no profile photo." +#: mod/contacts.php:715 +msgid "Show all contacts" msgstr "" -#: mod/dfrn_request.php:138 mod/dfrn_request.php:540 -#, php-format -msgid "%d required parameter was not found at the given location" -msgid_plural "%d required parameters were not found at the given location" -msgstr[0] "" -msgstr[1] "" +#: mod/contacts.php:720 +msgid "Unblocked" +msgstr "" -#: mod/dfrn_request.php:182 -msgid "Introduction complete." +#: mod/contacts.php:723 +msgid "Only show unblocked contacts" msgstr "" -#: mod/dfrn_request.php:227 -msgid "Unrecoverable protocol error." +#: mod/contacts.php:729 +msgid "Blocked" msgstr "" -#: mod/dfrn_request.php:255 -msgid "Profile unavailable." +#: mod/contacts.php:732 +msgid "Only show blocked contacts" msgstr "" -#: mod/dfrn_request.php:282 -#, php-format -msgid "%s has received too many connection requests today." +#: mod/contacts.php:738 +msgid "Ignored" msgstr "" -#: mod/dfrn_request.php:283 -msgid "Spam protection measures have been invoked." +#: mod/contacts.php:741 +msgid "Only show ignored contacts" msgstr "" -#: mod/dfrn_request.php:284 -msgid "Friends are advised to please try again in 24 hours." +#: mod/contacts.php:747 +msgid "Archived" msgstr "" -#: mod/dfrn_request.php:346 -msgid "Invalid locator" +#: mod/contacts.php:750 +msgid "Only show archived contacts" msgstr "" -#: mod/dfrn_request.php:355 -msgid "Invalid email address." +#: mod/contacts.php:756 +msgid "Hidden" msgstr "" -#: mod/dfrn_request.php:380 -msgid "This account has not been configured for email. Request failed." +#: mod/contacts.php:759 +msgid "Only show hidden contacts" msgstr "" -#: mod/dfrn_request.php:483 -msgid "You have already introduced yourself here." +#: mod/contacts.php:816 +msgid "Search your contacts" msgstr "" -#: mod/dfrn_request.php:487 -#, php-format -msgid "Apparently you are already friends with %s." +#: mod/contacts.php:824 mod/settings.php:163 mod/settings.php:709 +msgid "Update" msgstr "" -#: mod/dfrn_request.php:508 -msgid "Invalid profile URL." +#: mod/contacts.php:827 mod/contacts.php:1019 +msgid "Archive" msgstr "" -#: mod/dfrn_request.php:593 mod/contacts.php:221 -msgid "Failed to update contact record." +#: mod/contacts.php:827 mod/contacts.php:1019 +msgid "Unarchive" msgstr "" -#: mod/dfrn_request.php:614 -msgid "Your introduction has been sent." +#: mod/contacts.php:830 +msgid "Batch Actions" msgstr "" -#: mod/dfrn_request.php:656 -msgid "" -"Remote subscription can't be done for your network. Please subscribe " -"directly on your system." +#: mod/contacts.php:876 +msgid "View all contacts" msgstr "" -#: mod/dfrn_request.php:677 -msgid "Please login to confirm introduction." +#: mod/contacts.php:886 +msgid "View all common friends" msgstr "" -#: mod/dfrn_request.php:687 -msgid "" -"Incorrect identity currently logged in. Please login to this profile." +#: mod/contacts.php:893 +msgid "Advanced Contact Settings" msgstr "" -#: mod/dfrn_request.php:701 mod/dfrn_request.php:718 -msgid "Confirm" +#: mod/contacts.php:927 +msgid "Mutual Friendship" msgstr "" -#: mod/dfrn_request.php:713 -msgid "Hide this contact" +#: mod/contacts.php:931 +msgid "is a fan of yours" msgstr "" -#: mod/dfrn_request.php:716 -#, php-format -msgid "Welcome home %s." +#: mod/contacts.php:935 +msgid "you are a fan of" msgstr "" -#: mod/dfrn_request.php:717 -#, php-format -msgid "Please confirm your introduction/connection request to %s." +#: mod/contacts.php:1005 +msgid "Toggle Blocked status" msgstr "" -#: mod/dfrn_request.php:848 -msgid "" -"Please enter your 'Identity Address' from one of the following supported " -"communications networks:" +#: mod/contacts.php:1013 +msgid "Toggle Ignored status" msgstr "" -#: mod/dfrn_request.php:872 -#, php-format -msgid "" -"If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today." +#: mod/contacts.php:1021 +msgid "Toggle Archive status" msgstr "" -#: mod/dfrn_request.php:877 -msgid "Friend/Connection Request" +#: mod/contacts.php:1029 +msgid "Delete contact" msgstr "" -#: mod/dfrn_request.php:878 -msgid "" -"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " -"testuser@identi.ca" +#: mod/content.php:121 mod/network.php:632 +msgid "No such group" msgstr "" -#: mod/dfrn_request.php:879 mod/follow.php:114 -msgid "Please answer the following:" +#: mod/content.php:132 mod/group.php:215 mod/network.php:653 +msgid "Group is empty" msgstr "" -#: mod/dfrn_request.php:880 mod/follow.php:115 +#: mod/content.php:137 mod/network.php:657 #, php-format -msgid "Does %s know you?" +msgid "Group: %s" msgstr "" -#: mod/dfrn_request.php:884 mod/follow.php:116 -msgid "Add a personal note:" +#: mod/content.php:327 object/Item.php:101 +msgid "This entry was edited" msgstr "" -#: mod/dfrn_request.php:887 -msgid "StatusNet/Federated Social Web" +#: mod/content.php:623 object/Item.php:409 +#, php-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "" +msgstr[1] "" + +#: mod/content.php:640 mod/photos.php:1432 object/Item.php:122 +msgid "Private Message" msgstr "" -#: mod/dfrn_request.php:889 -#, php-format -msgid "" -" - please do not use this form. Instead, enter %s into your Diaspora search " -"bar." +#: mod/content.php:704 mod/photos.php:1628 object/Item.php:275 +msgid "I like this (toggle)" msgstr "" -#: mod/dfrn_request.php:890 mod/follow.php:122 -msgid "Your Identity Address:" +#: mod/content.php:704 object/Item.php:275 +msgid "like" msgstr "" -#: mod/dfrn_request.php:893 mod/follow.php:21 -msgid "Submit Request" +#: mod/content.php:705 mod/photos.php:1629 object/Item.php:276 +msgid "I don't like this (toggle)" +msgstr "" + +#: mod/content.php:705 object/Item.php:276 +msgid "dislike" msgstr "" -#: mod/dirfind.php:39 -#, php-format -msgid "People Search - %s" +#: mod/content.php:707 object/Item.php:279 +msgid "Share this" msgstr "" -#: mod/dirfind.php:50 -#, php-format -msgid "Forum Search - %s" +#: mod/content.php:707 object/Item.php:279 +msgid "share" msgstr "" -#: mod/events.php:96 mod/events.php:98 -msgid "Event can not end before it has started." +#: mod/content.php:727 mod/photos.php:1646 mod/photos.php:1688 +#: mod/photos.php:1768 object/Item.php:694 +msgid "This is you" msgstr "" -#: mod/events.php:105 mod/events.php:107 -msgid "Event title and start time are required." +#: mod/content.php:729 mod/content.php:952 mod/photos.php:1648 +#: mod/photos.php:1690 mod/photos.php:1770 object/Item.php:381 +#: object/Item.php:696 +msgid "Comment" msgstr "" -#: mod/events.php:379 -msgid "Create New Event" +#: mod/content.php:731 object/Item.php:698 +msgid "Bold" msgstr "" -#: mod/events.php:484 -msgid "Event details" +#: mod/content.php:732 object/Item.php:699 +msgid "Italic" msgstr "" -#: mod/events.php:485 -msgid "Starting date and Title are required." +#: mod/content.php:733 object/Item.php:700 +msgid "Underline" msgstr "" -#: mod/events.php:486 mod/events.php:487 -msgid "Event Starts:" +#: mod/content.php:734 object/Item.php:701 +msgid "Quote" msgstr "" -#: mod/events.php:486 mod/events.php:498 mod/profiles.php:712 -msgid "Required" +#: mod/content.php:735 object/Item.php:702 +msgid "Code" msgstr "" -#: mod/events.php:488 mod/events.php:504 -msgid "Finish date/time is not known or not relevant" +#: mod/content.php:736 object/Item.php:703 +msgid "Image" msgstr "" -#: mod/events.php:490 mod/events.php:491 -msgid "Event Finishes:" +#: mod/content.php:737 object/Item.php:704 +msgid "Link" msgstr "" -#: mod/events.php:492 mod/events.php:505 -msgid "Adjust for viewer timezone" +#: mod/content.php:738 object/Item.php:705 +msgid "Video" msgstr "" -#: mod/events.php:494 -msgid "Description:" +#: mod/content.php:748 mod/settings.php:745 object/Item.php:127 +#: object/Item.php:129 +msgid "Edit" msgstr "" -#: mod/events.php:498 mod/events.php:500 -msgid "Title:" +#: mod/content.php:774 object/Item.php:242 +msgid "add star" msgstr "" -#: mod/events.php:501 mod/events.php:502 -msgid "Share this event" +#: mod/content.php:775 object/Item.php:243 +msgid "remove star" msgstr "" -#: mod/events.php:531 -msgid "Failed to remove event" +#: mod/content.php:776 object/Item.php:244 +msgid "toggle star status" msgstr "" -#: mod/events.php:533 -msgid "Event removed" +#: mod/content.php:779 object/Item.php:247 +msgid "starred" msgstr "" -#: mod/follow.php:32 -msgid "You already added this contact." +#: mod/content.php:780 mod/content.php:802 object/Item.php:264 +msgid "add tag" msgstr "" -#: mod/follow.php:41 -msgid "Diaspora support isn't enabled. Contact can't be added." +#: mod/content.php:791 object/Item.php:252 +msgid "ignore thread" msgstr "" -#: mod/follow.php:48 -msgid "OStatus support is disabled. Contact can't be added." +#: mod/content.php:792 object/Item.php:253 +msgid "unignore thread" msgstr "" -#: mod/follow.php:55 -msgid "The network type couldn't be detected. Contact can't be added." +#: mod/content.php:793 object/Item.php:254 +msgid "toggle ignore status" msgstr "" -#: mod/follow.php:188 -msgid "Contact added" +#: mod/content.php:796 mod/ostatus_subscribe.php:76 object/Item.php:257 +msgid "ignored" msgstr "" -#: mod/ping.php:274 -msgid "{0} wants to be your friend" +#: mod/content.php:807 object/Item.php:146 +msgid "save to folder" msgstr "" -#: mod/ping.php:289 -msgid "{0} sent you a message" +#: mod/content.php:855 object/Item.php:216 +msgid "I will attend" msgstr "" -#: mod/ping.php:304 -msgid "{0} requested registration" +#: mod/content.php:855 object/Item.php:216 +msgid "I will not attend" msgstr "" -#: mod/profile_photo.php:44 -msgid "Image uploaded but image cropping failed." +#: mod/content.php:855 object/Item.php:216 +msgid "I might attend" msgstr "" -#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93 -#: mod/profile_photo.php:322 -#, php-format -msgid "Image size reduction [%s] failed." +#: mod/content.php:919 object/Item.php:347 +msgid "to" msgstr "" -#: mod/profile_photo.php:127 -msgid "" -"Shift-reload the page or clear browser cache if the new photo does not " -"display immediately." +#: mod/content.php:920 object/Item.php:349 +msgid "Wall-to-Wall" msgstr "" -#: mod/profile_photo.php:136 -msgid "Unable to process image" +#: mod/content.php:921 object/Item.php:350 +msgid "via Wall-To-Wall:" msgstr "" -#: mod/profile_photo.php:253 -msgid "Upload File:" +#: mod/delegate.php:104 +msgid "No potential page delegates located." msgstr "" -#: mod/profile_photo.php:254 -msgid "Select a profile:" +#: mod/delegate.php:135 +msgid "" +"Delegates are able to manage all aspects of this account/page except for " +"basic account settings. Please do not delegate your personal account to " +"anybody that you do not trust completely." msgstr "" -#: mod/profile_photo.php:256 -msgid "Upload" +#: mod/delegate.php:136 +msgid "Existing Page Managers" msgstr "" -#: mod/profile_photo.php:259 -msgid "or" +#: mod/delegate.php:138 +msgid "Existing Page Delegates" msgstr "" -#: mod/profile_photo.php:259 -msgid "skip this step" +#: mod/delegate.php:140 +msgid "Potential Delegates" msgstr "" -#: mod/profile_photo.php:259 -msgid "select a photo from your photo albums" +#: mod/delegate.php:142 mod/tagrm.php:98 +msgid "Remove" msgstr "" -#: mod/profile_photo.php:273 -msgid "Crop Image" +#: mod/delegate.php:143 +msgid "Add" msgstr "" -#: mod/profile_photo.php:274 -msgid "Please adjust the image cropping for optimum viewing." +#: mod/delegate.php:144 +msgid "No entries." msgstr "" -#: mod/profile_photo.php:276 -msgid "Done Editing" +#: mod/dfrn_confirm.php:73 mod/profiles.php:24 mod/profiles.php:140 +#: mod/profiles.php:187 mod/profiles.php:623 +msgid "Profile not found." msgstr "" -#: mod/profile_photo.php:312 -msgid "Image uploaded successfully." +#: mod/dfrn_confirm.php:130 +msgid "" +"This may occasionally happen if contact was requested by both persons and it " +"has already been approved." msgstr "" -#: mod/profiles.php:42 -msgid "Profile deleted." +#: mod/dfrn_confirm.php:247 +msgid "Response from remote site was not understood." msgstr "" -#: mod/profiles.php:58 mod/profiles.php:94 -msgid "Profile-" +#: mod/dfrn_confirm.php:256 mod/dfrn_confirm.php:261 +msgid "Unexpected response from remote site: " msgstr "" -#: mod/profiles.php:77 mod/profiles.php:122 -msgid "New profile created." +#: mod/dfrn_confirm.php:270 +msgid "Confirmation completed successfully." msgstr "" -#: mod/profiles.php:100 -msgid "Profile unavailable to clone." +#: mod/dfrn_confirm.php:272 mod/dfrn_confirm.php:286 mod/dfrn_confirm.php:293 +msgid "Remote site reported: " msgstr "" -#: mod/profiles.php:196 -msgid "Profile Name is required." +#: mod/dfrn_confirm.php:284 +msgid "Temporary failure. Please wait and try again." msgstr "" -#: mod/profiles.php:336 -msgid "Marital Status" +#: mod/dfrn_confirm.php:291 +msgid "Introduction failed or was revoked." msgstr "" -#: mod/profiles.php:340 -msgid "Romantic Partner" +#: mod/dfrn_confirm.php:420 +msgid "Unable to set contact photo." msgstr "" -#: mod/profiles.php:352 -msgid "Work/Employment" +#: mod/dfrn_confirm.php:561 +#, php-format +msgid "No user record found for '%s' " msgstr "" -#: mod/profiles.php:355 -msgid "Religion" +#: mod/dfrn_confirm.php:571 +msgid "Our site encryption key is apparently messed up." msgstr "" -#: mod/profiles.php:359 -msgid "Political Views" +#: mod/dfrn_confirm.php:582 +msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "" -#: mod/profiles.php:363 -msgid "Gender" +#: mod/dfrn_confirm.php:604 +msgid "Contact record was not found for you on our site." msgstr "" -#: mod/profiles.php:367 -msgid "Sexual Preference" +#: mod/dfrn_confirm.php:618 +#, php-format +msgid "Site public key not available in contact record for URL %s." msgstr "" -#: mod/profiles.php:371 -msgid "XMPP" +#: mod/dfrn_confirm.php:638 +msgid "" +"The ID provided by your system is a duplicate on our system. It should work " +"if you try again." msgstr "" -#: mod/profiles.php:375 -msgid "Homepage" +#: mod/dfrn_confirm.php:649 +msgid "Unable to set your contact credentials on our system." msgstr "" -#: mod/profiles.php:379 mod/profiles.php:698 -msgid "Interests" +#: mod/dfrn_confirm.php:711 +msgid "Unable to update your contact profile details on our system" msgstr "" -#: mod/profiles.php:383 -msgid "Address" +#: mod/dfrn_confirm.php:783 +#, php-format +msgid "%1$s has joined %2$s" msgstr "" -#: mod/profiles.php:390 mod/profiles.php:694 -msgid "Location" +#: mod/dfrn_poll.php:114 mod/dfrn_poll.php:550 +#, php-format +msgid "%1$s welcomes %2$s" msgstr "" -#: mod/profiles.php:475 -msgid "Profile updated." +#: mod/dfrn_request.php:104 +msgid "This introduction has already been accepted." msgstr "" -#: mod/profiles.php:567 -msgid " and " +#: mod/dfrn_request.php:127 mod/dfrn_request.php:529 +msgid "Profile location is not valid or does not contain profile information." msgstr "" -#: mod/profiles.php:576 -msgid "public profile" +#: mod/dfrn_request.php:132 mod/dfrn_request.php:534 +msgid "Warning: profile location has no identifiable owner name." msgstr "" -#: mod/profiles.php:579 -#, php-format -msgid "%1$s changed %2$s to “%3$s”" +#: mod/dfrn_request.php:135 mod/dfrn_request.php:537 +msgid "Warning: profile location has no profile photo." msgstr "" -#: mod/profiles.php:580 +#: mod/dfrn_request.php:139 mod/dfrn_request.php:541 #, php-format -msgid " - Visit %1$s's %2$s" -msgstr "" +msgid "%d required parameter was not found at the given location" +msgid_plural "%d required parameters were not found at the given location" +msgstr[0] "" +msgstr[1] "" -#: mod/profiles.php:582 -#, php-format -msgid "%1$s has an updated %2$s, changing %3$s." +#: mod/dfrn_request.php:183 +msgid "Introduction complete." msgstr "" -#: mod/profiles.php:640 -msgid "Hide contacts and friends:" +#: mod/dfrn_request.php:228 +msgid "Unrecoverable protocol error." msgstr "" -#: mod/profiles.php:645 -msgid "Hide your contact/friend list from viewers of this profile?" +#: mod/dfrn_request.php:256 +msgid "Profile unavailable." msgstr "" -#: mod/profiles.php:670 -msgid "Show more profile fields:" +#: mod/dfrn_request.php:283 +#, php-format +msgid "%s has received too many connection requests today." msgstr "" -#: mod/profiles.php:682 -msgid "Profile Actions" +#: mod/dfrn_request.php:284 +msgid "Spam protection measures have been invoked." msgstr "" -#: mod/profiles.php:683 -msgid "Edit Profile Details" +#: mod/dfrn_request.php:285 +msgid "Friends are advised to please try again in 24 hours." msgstr "" -#: mod/profiles.php:685 -msgid "Change Profile Photo" +#: mod/dfrn_request.php:347 +msgid "Invalid locator" msgstr "" -#: mod/profiles.php:686 -msgid "View this profile" +#: mod/dfrn_request.php:356 +msgid "Invalid email address." msgstr "" -#: mod/profiles.php:688 -msgid "Create a new profile using these settings" +#: mod/dfrn_request.php:381 +msgid "This account has not been configured for email. Request failed." msgstr "" -#: mod/profiles.php:689 -msgid "Clone this profile" +#: mod/dfrn_request.php:484 +msgid "You have already introduced yourself here." msgstr "" -#: mod/profiles.php:690 -msgid "Delete this profile" +#: mod/dfrn_request.php:488 +#, php-format +msgid "Apparently you are already friends with %s." msgstr "" -#: mod/profiles.php:692 -msgid "Basic information" +#: mod/dfrn_request.php:509 +msgid "Invalid profile URL." msgstr "" -#: mod/profiles.php:693 -msgid "Profile picture" +#: mod/dfrn_request.php:615 +msgid "Your introduction has been sent." msgstr "" -#: mod/profiles.php:695 -msgid "Preferences" +#: mod/dfrn_request.php:657 +msgid "" +"Remote subscription can't be done for your network. Please subscribe " +"directly on your system." msgstr "" -#: mod/profiles.php:696 -msgid "Status information" +#: mod/dfrn_request.php:678 +msgid "Please login to confirm introduction." msgstr "" -#: mod/profiles.php:697 -msgid "Additional information" +#: mod/dfrn_request.php:688 +msgid "" +"Incorrect identity currently logged in. Please login to this profile." msgstr "" -#: mod/profiles.php:700 -msgid "Relation" +#: mod/dfrn_request.php:702 mod/dfrn_request.php:719 +msgid "Confirm" msgstr "" -#: mod/profiles.php:704 -msgid "Your Gender:" +#: mod/dfrn_request.php:714 +msgid "Hide this contact" msgstr "" -#: mod/profiles.php:705 -msgid " Marital Status:" +#: mod/dfrn_request.php:717 +#, php-format +msgid "Welcome home %s." msgstr "" -#: mod/profiles.php:707 -msgid "Example: fishing photography software" +#: mod/dfrn_request.php:718 +#, php-format +msgid "Please confirm your introduction/connection request to %s." msgstr "" -#: mod/profiles.php:712 -msgid "Profile Name:" +#: mod/dfrn_request.php:849 +msgid "" +"Please enter your 'Identity Address' from one of the following supported " +"communications networks:" msgstr "" -#: mod/profiles.php:714 +#: mod/dfrn_request.php:873 +#, php-format msgid "" -"This is your public profile.
It may " -"be visible to anybody using the internet." +"If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today." msgstr "" -#: mod/profiles.php:715 -msgid "Your Full Name:" +#: mod/dfrn_request.php:878 +msgid "Friend/Connection Request" msgstr "" -#: mod/profiles.php:716 -msgid "Title/Description:" +#: mod/dfrn_request.php:879 +msgid "" +"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, " +"testuser@identi.ca" msgstr "" -#: mod/profiles.php:719 -msgid "Street Address:" +#: mod/dfrn_request.php:880 mod/follow.php:149 +msgid "Please answer the following:" msgstr "" -#: mod/profiles.php:720 -msgid "Locality/City:" +#: mod/dfrn_request.php:881 mod/follow.php:150 +#, php-format +msgid "Does %s know you?" msgstr "" -#: mod/profiles.php:721 -msgid "Region/State:" +#: mod/dfrn_request.php:885 mod/follow.php:151 +msgid "Add a personal note:" msgstr "" -#: mod/profiles.php:722 -msgid "Postal/Zip Code:" +#: mod/dfrn_request.php:888 +msgid "StatusNet/Federated Social Web" +msgstr "" + +#: mod/dfrn_request.php:890 +#, php-format +msgid "" +" - please do not use this form. Instead, enter %s into your Diaspora search " +"bar." msgstr "" -#: mod/profiles.php:723 -msgid "Country:" +#: mod/dfrn_request.php:891 mod/follow.php:157 mod/unfollow.php:113 +msgid "Your Identity Address:" msgstr "" -#: mod/profiles.php:727 -msgid "Who: (if applicable)" +#: mod/dfrn_request.php:894 mod/follow.php:63 mod/unfollow.php:65 +msgid "Submit Request" msgstr "" -#: mod/profiles.php:727 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +#: mod/directory.php:195 view/theme/vier/theme.php:194 +msgid "Global Directory" msgstr "" -#: mod/profiles.php:728 -msgid "Since [date]:" +#: mod/directory.php:197 +msgid "Find on this site" msgstr "" -#: mod/profiles.php:730 -msgid "Tell us about yourself..." +#: mod/directory.php:199 +msgid "Results for:" msgstr "" -#: mod/profiles.php:731 -msgid "XMPP (Jabber) address:" +#: mod/directory.php:201 +msgid "Site Directory" msgstr "" -#: mod/profiles.php:731 -msgid "" -"The XMPP address will be propagated to your contacts so that they can follow " -"you." +#: mod/directory.php:208 +msgid "No entries (some entries may be hidden)." msgstr "" -#: mod/profiles.php:732 -msgid "Homepage URL:" +#: mod/dirfind.php:40 +#, php-format +msgid "People Search - %s" msgstr "" -#: mod/profiles.php:735 -msgid "Religious Views:" +#: mod/dirfind.php:51 +#, php-format +msgid "Forum Search - %s" msgstr "" -#: mod/profiles.php:736 -msgid "Public Keywords:" +#: mod/dirfind.php:248 mod/match.php:113 +msgid "No matches" msgstr "" -#: mod/profiles.php:736 -msgid "(Used for suggesting potential friends, can be seen by others)" +#: mod/display.php:491 +msgid "Item has been removed." msgstr "" -#: mod/profiles.php:737 -msgid "Private Keywords:" +#: mod/editpost.php:20 mod/editpost.php:30 +msgid "Item not found" msgstr "" -#: mod/profiles.php:737 -msgid "(Used for searching profiles, never shown to others)" +#: mod/editpost.php:35 +msgid "Edit post" msgstr "" -#: mod/profiles.php:740 -msgid "Musical interests" +#: mod/events.php:97 mod/events.php:99 +msgid "Event can not end before it has started." msgstr "" -#: mod/profiles.php:741 -msgid "Books, literature" +#: mod/events.php:106 mod/events.php:108 +msgid "Event title and start time are required." msgstr "" -#: mod/profiles.php:742 -msgid "Television" +#: mod/events.php:380 +msgid "Create New Event" msgstr "" -#: mod/profiles.php:743 -msgid "Film/dance/culture/entertainment" +#: mod/events.php:485 +msgid "Event details" msgstr "" -#: mod/profiles.php:744 -msgid "Hobbies/Interests" +#: mod/events.php:486 +msgid "Starting date and Title are required." msgstr "" -#: mod/profiles.php:745 -msgid "Love/romance" +#: mod/events.php:487 mod/events.php:488 +msgid "Event Starts:" msgstr "" -#: mod/profiles.php:746 -msgid "Work/employment" +#: mod/events.php:487 mod/events.php:499 mod/profiles.php:713 +msgid "Required" msgstr "" -#: mod/profiles.php:747 -msgid "School/education" +#: mod/events.php:489 mod/events.php:505 +msgid "Finish date/time is not known or not relevant" msgstr "" -#: mod/profiles.php:748 -msgid "Contact information and Social Networks" +#: mod/events.php:491 mod/events.php:492 +msgid "Event Finishes:" msgstr "" -#: mod/profiles.php:789 -msgid "Edit/Manage Profiles" +#: mod/events.php:493 mod/events.php:506 +msgid "Adjust for viewer timezone" msgstr "" -#: mod/register.php:96 -msgid "" -"Registration successful. Please check your email for further instructions." +#: mod/events.php:495 +msgid "Description:" msgstr "" -#: mod/register.php:101 -#, php-format -msgid "" -"Failed to send email message. Here your accout details:
login: %s
" -"password: %s

You can change your password after login." +#: mod/events.php:499 mod/events.php:501 +msgid "Title:" msgstr "" -#: mod/register.php:108 -msgid "Registration successful." +#: mod/events.php:502 mod/events.php:503 +msgid "Share this event" msgstr "" -#: mod/register.php:114 -msgid "Your registration can not be processed." +#: mod/events.php:532 +msgid "Failed to remove event" msgstr "" -#: mod/register.php:163 -msgid "Your registration is pending approval by the site owner." +#: mod/events.php:534 +msgid "Event removed" msgstr "" -#: mod/register.php:229 -msgid "" -"You may (optionally) fill in this form via OpenID by supplying your OpenID " -"and clicking 'Register'." +#: mod/fbrowser.php:135 +msgid "Files" msgstr "" -#: mod/register.php:230 -msgid "" -"If you are not familiar with OpenID, please leave that field blank and fill " -"in the rest of the items." +#: mod/fetch.php:16 mod/fetch.php:43 mod/fetch.php:52 mod/help.php:57 +#: mod/p.php:20 mod/p.php:47 mod/p.php:56 index.php:302 +msgid "Not Found" msgstr "" -#: mod/register.php:231 -msgid "Your OpenID (optional): " +#: mod/follow.php:42 +msgid "Contact added" msgstr "" -#: mod/register.php:245 -msgid "Include your profile in member directory?" +#: mod/follow.php:74 +msgid "You already added this contact." msgstr "" -#: mod/register.php:270 -msgid "Note for the admin" +#: mod/follow.php:83 +msgid "Diaspora support isn't enabled. Contact can't be added." msgstr "" -#: mod/register.php:270 -msgid "Leave a message for the admin, why you want to join this node" +#: mod/follow.php:90 +msgid "OStatus support is disabled. Contact can't be added." msgstr "" -#: mod/register.php:271 -msgid "Membership on this site is by invitation only." +#: mod/follow.php:97 +msgid "The network type couldn't be detected. Contact can't be added." msgstr "" -#: mod/register.php:272 -msgid "Your invitation ID: " +#: mod/friendica.php:70 +msgid "This is Friendica, version" msgstr "" -#: mod/register.php:275 mod/admin.php:1146 -msgid "Registration" +#: mod/friendica.php:71 +msgid "running at web location" msgstr "" -#: mod/register.php:283 -msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " +#: mod/friendica.php:75 +msgid "" +"Please visit Friendica.com to learn " +"more about the Friendica project." msgstr "" -#: mod/register.php:284 -msgid "Your Email Address: " +#: mod/friendica.php:79 +msgid "Bug reports and issues: please visit" msgstr "" -#: mod/register.php:286 mod/settings.php:1279 -msgid "New Password:" +#: mod/friendica.php:79 +msgid "the bugtracker at github" msgstr "" -#: mod/register.php:286 -msgid "Leave empty for an auto generated password." +#: mod/friendica.php:82 +msgid "" +"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - " +"dot com" msgstr "" -#: mod/register.php:287 mod/settings.php:1280 -msgid "Confirm:" +#: mod/friendica.php:96 +msgid "Installed plugins/addons/apps:" msgstr "" -#: mod/register.php:288 -msgid "" -"Choose a profile nickname. This must begin with a text character. Your " -"profile address on this site will then be 'nickname@$sitename'." +#: mod/friendica.php:110 +msgid "No installed plugins/addons/apps" msgstr "" -#: mod/register.php:289 -msgid "Choose a nickname: " +#: mod/friendica.php:115 +msgid "On this server the following remote servers are blocked." msgstr "" -#: mod/register.php:299 -msgid "Import your profile to this friendica instance" +#: mod/group.php:31 +msgid "Group created." msgstr "" -#: mod/search.php:28 mod/network.php:200 -msgid "Remove term" +#: mod/group.php:37 +msgid "Could not create group." msgstr "" -#: mod/search.php:103 -msgid "Only logged in users are permitted to perform a search." +#: mod/group.php:51 mod/group.php:156 +msgid "Group not found." msgstr "" -#: mod/search.php:127 -msgid "Too Many Requests" +#: mod/group.php:65 +msgid "Group name changed." msgstr "" -#: mod/search.php:128 -msgid "Only one search per minute is permitted for not logged in users." +#: mod/group.php:95 +msgid "Save Group" msgstr "" -#: mod/search.php:222 mod/community.php:49 -msgid "No results." +#: mod/group.php:100 +msgid "Create a group of contacts/friends." msgstr "" -#: mod/search.php:228 -#, php-format -msgid "Items tagged with: %s" +#: mod/group.php:125 +msgid "Group removed." msgstr "" -#: mod/search.php:230 mod/contacts.php:810 mod/network.php:154 -#, php-format -msgid "Results for: %s" +#: mod/group.php:127 +msgid "Unable to remove group." msgstr "" -#: mod/contacts.php:137 -#, php-format -msgid "%d contact edited." -msgid_plural "%d contacts edited." -msgstr[0] "" -msgstr[1] "" +#: mod/group.php:191 +msgid "Delete Group" +msgstr "" -#: mod/contacts.php:172 mod/contacts.php:381 -msgid "Could not access contact record." +#: mod/group.php:197 +msgid "Group Editor" msgstr "" -#: mod/contacts.php:186 -msgid "Could not locate selected profile." +#: mod/group.php:202 +msgid "Edit Group Name" msgstr "" -#: mod/contacts.php:219 -msgid "Contact updated." +#: mod/group.php:212 +msgid "Members" msgstr "" -#: mod/contacts.php:402 -msgid "Contact has been blocked" +#: mod/group.php:228 +msgid "Remove Contact" msgstr "" -#: mod/contacts.php:402 -msgid "Contact has been unblocked" +#: mod/group.php:252 +msgid "Add Contact" msgstr "" -#: mod/contacts.php:413 -msgid "Contact has been ignored" +#: mod/hcard.php:14 +msgid "No profile" msgstr "" -#: mod/contacts.php:413 -msgid "Contact has been unignored" +#: mod/help.php:45 +msgid "Help:" msgstr "" -#: mod/contacts.php:425 -msgid "Contact has been archived" +#: mod/help.php:60 index.php:305 +msgid "Page not found." msgstr "" -#: mod/contacts.php:425 -msgid "Contact has been unarchived" +#: mod/home.php:42 +#, php-format +msgid "Welcome to %s" msgstr "" -#: mod/contacts.php:450 -msgid "Drop contact" +#: mod/install.php:109 +msgid "Friendica Communications Server - Setup" msgstr "" -#: mod/contacts.php:453 mod/contacts.php:814 -msgid "Do you really want to delete this contact?" +#: mod/install.php:115 +msgid "Could not connect to database." msgstr "" -#: mod/contacts.php:472 -msgid "Contact has been removed." +#: mod/install.php:119 +msgid "Could not create table." msgstr "" -#: mod/contacts.php:509 -#, php-format -msgid "You are mutual friends with %s" +#: mod/install.php:125 +msgid "Your Friendica site database has been installed." msgstr "" -#: mod/contacts.php:513 -#, php-format -msgid "You are sharing with %s" +#: mod/install.php:130 +msgid "" +"You may need to import the file \"database.sql\" manually using phpmyadmin " +"or mysql." msgstr "" -#: mod/contacts.php:518 -#, php-format -msgid "%s is sharing with you" +#: mod/install.php:131 mod/install.php:203 mod/install.php:550 +msgid "Please see the file \"INSTALL.txt\"." msgstr "" -#: mod/contacts.php:538 -msgid "Private communications are not available for this contact." +#: mod/install.php:143 +msgid "Database already in use." msgstr "" -#: mod/contacts.php:541 mod/admin.php:1068 -msgid "Never" +#: mod/install.php:200 +msgid "System check" msgstr "" -#: mod/contacts.php:545 -msgid "(Update was successful)" +#: mod/install.php:205 +msgid "Check again" msgstr "" -#: mod/contacts.php:545 -msgid "(Update was not successful)" +#: mod/install.php:224 +msgid "Database connection" msgstr "" -#: mod/contacts.php:547 mod/contacts.php:977 -msgid "Suggest friends" +#: mod/install.php:225 +msgid "" +"In order to install Friendica we need to know how to connect to your " +"database." msgstr "" -#: mod/contacts.php:551 -#, php-format -msgid "Network type: %s" +#: mod/install.php:226 +msgid "" +"Please contact your hosting provider or site administrator if you have " +"questions about these settings." msgstr "" -#: mod/contacts.php:564 -msgid "Communications lost with this contact!" +#: mod/install.php:227 +msgid "" +"The database you specify below should already exist. If it does not, please " +"create it before continuing." msgstr "" -#: mod/contacts.php:567 -msgid "Fetch further information for feeds" +#: mod/install.php:231 +msgid "Database Server Name" msgstr "" -#: mod/contacts.php:568 mod/admin.php:1077 -msgid "Disabled" +#: mod/install.php:232 +msgid "Database Login Name" msgstr "" -#: mod/contacts.php:568 -msgid "Fetch information" +#: mod/install.php:233 +msgid "Database Login Password" msgstr "" -#: mod/contacts.php:568 -msgid "Fetch information and keywords" +#: mod/install.php:233 +msgid "For security reasons the password must not be empty" msgstr "" -#: mod/contacts.php:586 -msgid "Contact" +#: mod/install.php:234 +msgid "Database Name" msgstr "" -#: mod/contacts.php:589 -msgid "Profile Visibility" +#: mod/install.php:235 mod/install.php:276 +msgid "Site administrator email address" msgstr "" -#: mod/contacts.php:590 -#, php-format +#: mod/install.php:235 mod/install.php:276 msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." +"Your account email address must match this in order to use the web admin " +"panel." msgstr "" -#: mod/contacts.php:591 -msgid "Contact Information / Notes" +#: mod/install.php:239 mod/install.php:279 +msgid "Please select a default timezone for your website" msgstr "" -#: mod/contacts.php:592 -msgid "Their personal note" +#: mod/install.php:266 +msgid "Site settings" msgstr "" -#: mod/contacts.php:594 -msgid "Edit contact notes" +#: mod/install.php:280 +msgid "System Language:" msgstr "" -#: mod/contacts.php:600 -msgid "Block/Unblock contact" +#: mod/install.php:280 +msgid "" +"Set the default language for your Friendica installation interface and to " +"send emails." msgstr "" -#: mod/contacts.php:601 -msgid "Ignore contact" +#: mod/install.php:320 +msgid "Could not find a command line version of PHP in the web server PATH." msgstr "" -#: mod/contacts.php:602 -msgid "Repair URL settings" +#: mod/install.php:321 +msgid "" +"If you don't have a command line version of PHP installed on server, you " +"will not be able to run the background processing. See 'Setup the poller'" msgstr "" -#: mod/contacts.php:603 -msgid "View conversations" +#: mod/install.php:325 +msgid "PHP executable path" msgstr "" -#: mod/contacts.php:609 -msgid "Last update:" +#: mod/install.php:325 +msgid "" +"Enter full path to php executable. You can leave this blank to continue the " +"installation." msgstr "" -#: mod/contacts.php:611 -msgid "Update public posts" +#: mod/install.php:330 +msgid "Command line PHP" msgstr "" -#: mod/contacts.php:613 mod/contacts.php:987 -msgid "Update now" +#: mod/install.php:339 +msgid "PHP executable is not the php cli binary (could be cgi-fgci version)" msgstr "" -#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996 -#: mod/admin.php:1600 -msgid "Unblock" +#: mod/install.php:340 +msgid "Found PHP version: " msgstr "" -#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996 -#: mod/admin.php:1599 -msgid "Block" +#: mod/install.php:342 +msgid "PHP cli binary" msgstr "" -#: mod/contacts.php:619 mod/contacts.php:819 mod/contacts.php:1004 -msgid "Unignore" +#: mod/install.php:353 +msgid "" +"The command line version of PHP on your system does not have " +"\"register_argc_argv\" enabled." msgstr "" -#: mod/contacts.php:623 -msgid "Currently blocked" +#: mod/install.php:354 +msgid "This is required for message delivery to work." msgstr "" -#: mod/contacts.php:624 -msgid "Currently ignored" +#: mod/install.php:356 +msgid "PHP register_argc_argv" msgstr "" -#: mod/contacts.php:625 -msgid "Currently archived" +#: mod/install.php:379 +msgid "" +"Error: the \"openssl_pkey_new\" function on this system is not able to " +"generate encryption keys" msgstr "" -#: mod/contacts.php:626 +#: mod/install.php:380 msgid "" -"Replies/likes to your public posts may still be visible" +"If running under Windows, please see \"http://www.php.net/manual/en/openssl." +"installation.php\"." msgstr "" -#: mod/contacts.php:627 -msgid "Notification for new posts" +#: mod/install.php:382 +msgid "Generate encryption keys" msgstr "" -#: mod/contacts.php:627 -msgid "Send a notification of every new post of this contact" +#: mod/install.php:389 +msgid "libCurl PHP module" msgstr "" -#: mod/contacts.php:630 -msgid "Blacklisted keywords" +#: mod/install.php:390 +msgid "GD graphics PHP module" msgstr "" -#: mod/contacts.php:630 -msgid "" -"Comma separated list of keywords that should not be converted to hashtags, " -"when \"Fetch information and keywords\" is selected" +#: mod/install.php:391 +msgid "OpenSSL PHP module" msgstr "" -#: mod/contacts.php:648 -msgid "Actions" +#: mod/install.php:392 +msgid "PDO or MySQLi PHP module" msgstr "" -#: mod/contacts.php:651 -msgid "Contact Settings" +#: mod/install.php:393 +msgid "mb_string PHP module" msgstr "" -#: mod/contacts.php:697 -msgid "Suggestions" +#: mod/install.php:394 +msgid "XML PHP module" msgstr "" -#: mod/contacts.php:700 -msgid "Suggest potential friends" +#: mod/install.php:395 +msgid "iconv module" msgstr "" -#: mod/contacts.php:708 -msgid "Show all contacts" +#: mod/install.php:399 mod/install.php:401 +msgid "Apache mod_rewrite module" msgstr "" -#: mod/contacts.php:713 -msgid "Unblocked" +#: mod/install.php:399 +msgid "" +"Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" -#: mod/contacts.php:716 -msgid "Only show unblocked contacts" +#: mod/install.php:407 +msgid "Error: libCURL PHP module required but not installed." msgstr "" -#: mod/contacts.php:722 -msgid "Blocked" +#: mod/install.php:411 +msgid "" +"Error: GD graphics PHP module with JPEG support required but not installed." msgstr "" -#: mod/contacts.php:725 -msgid "Only show blocked contacts" +#: mod/install.php:415 +msgid "Error: openssl PHP module required but not installed." msgstr "" -#: mod/contacts.php:731 -msgid "Ignored" +#: mod/install.php:419 +msgid "Error: PDO or MySQLi PHP module required but not installed." msgstr "" -#: mod/contacts.php:734 -msgid "Only show ignored contacts" +#: mod/install.php:423 +msgid "Error: The MySQL driver for PDO is not installed." msgstr "" -#: mod/contacts.php:740 -msgid "Archived" +#: mod/install.php:427 +msgid "Error: mb_string PHP module required but not installed." msgstr "" -#: mod/contacts.php:743 -msgid "Only show archived contacts" +#: mod/install.php:431 +msgid "Error: iconv PHP module required but not installed." msgstr "" -#: mod/contacts.php:749 -msgid "Hidden" +#: mod/install.php:441 +msgid "Error, XML PHP module required but not installed." msgstr "" -#: mod/contacts.php:752 -msgid "Only show hidden contacts" +#: mod/install.php:453 +msgid "" +"The web installer needs to be able to create a file called \".htconfig.php\" " +"in the top folder of your web server and it is unable to do so." msgstr "" -#: mod/contacts.php:809 -msgid "Search your contacts" +#: mod/install.php:454 +msgid "" +"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." msgstr "" -#: mod/contacts.php:817 mod/settings.php:162 mod/settings.php:708 -msgid "Update" +#: mod/install.php:455 +msgid "" +"At the end of this procedure, we will give you a text to save in a file " +"named .htconfig.php in your Friendica top folder." msgstr "" -#: mod/contacts.php:820 mod/contacts.php:1012 -msgid "Archive" +#: mod/install.php:456 +msgid "" +"You can alternatively skip this procedure and perform a manual installation. " +"Please see the file \"INSTALL.txt\" for instructions." msgstr "" -#: mod/contacts.php:820 mod/contacts.php:1012 -msgid "Unarchive" +#: mod/install.php:459 +msgid ".htconfig.php is writable" msgstr "" -#: mod/contacts.php:823 -msgid "Batch Actions" +#: mod/install.php:469 +msgid "" +"Friendica uses the Smarty3 template engine to render its web views. Smarty3 " +"compiles templates to PHP to speed up rendering." msgstr "" -#: mod/contacts.php:869 -msgid "View all contacts" +#: mod/install.php:470 +msgid "" +"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." msgstr "" -#: mod/contacts.php:879 -msgid "View all common friends" +#: mod/install.php:471 +msgid "" +"Please ensure that the user that your web server runs as (e.g. www-data) has " +"write access to this folder." msgstr "" -#: mod/contacts.php:886 -msgid "Advanced Contact Settings" +#: mod/install.php:472 +msgid "" +"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." msgstr "" -#: mod/contacts.php:920 -msgid "Mutual Friendship" +#: mod/install.php:475 +msgid "view/smarty3 is writable" msgstr "" -#: mod/contacts.php:924 -msgid "is a fan of yours" +#: mod/install.php:491 +msgid "" +"Url rewrite in .htaccess is not working. Check your server configuration." msgstr "" -#: mod/contacts.php:928 -msgid "you are a fan of" +#: mod/install.php:493 +msgid "Url rewrite is working" msgstr "" -#: mod/contacts.php:998 -msgid "Toggle Blocked status" +#: mod/install.php:512 +msgid "ImageMagick PHP extension is not installed" msgstr "" -#: mod/contacts.php:1006 -msgid "Toggle Ignored status" +#: mod/install.php:514 +msgid "ImageMagick PHP extension is installed" msgstr "" -#: mod/contacts.php:1014 -msgid "Toggle Archive status" +#: mod/install.php:516 +msgid "ImageMagick supports GIF" msgstr "" -#: mod/contacts.php:1022 -msgid "Delete contact" +#: mod/install.php:523 +msgid "" +"The database configuration file \".htconfig.php\" could not be written. " +"Please use the enclosed text to create a configuration file in your web " +"server root." msgstr "" -#: mod/help.php:44 -msgid "Help:" +#: mod/install.php:548 +msgid "

What next

" msgstr "" -#: mod/help.php:59 index.php:304 -msgid "Page not found." +#: mod/install.php:549 +msgid "" +"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." msgstr "" -#: mod/invite.php:30 +#: mod/invite.php:31 msgid "Total invitation limit exceeded." msgstr "" -#: mod/invite.php:53 +#: mod/invite.php:54 #, php-format msgid "%s : Not a valid email address." msgstr "" -#: mod/invite.php:78 +#: mod/invite.php:79 msgid "Please join us on Friendica" msgstr "" -#: mod/invite.php:89 +#: mod/invite.php:90 msgid "Invitation limit exceeded. Please contact your site administrator." msgstr "" -#: mod/invite.php:93 +#: mod/invite.php:94 #, php-format msgid "%s : Message delivery failed." msgstr "" -#: mod/invite.php:97 +#: mod/invite.php:98 #, php-format msgid "%d message sent." msgid_plural "%d messages sent." msgstr[0] "" msgstr[1] "" -#: mod/invite.php:116 +#: mod/invite.php:117 msgid "You have no more invitations available" msgstr "" -#: mod/invite.php:124 +#: mod/invite.php:125 #, php-format msgid "" "Visit %s for a list of public sites that you can join. Friendica members on " @@ -6451,14 +6618,14 @@ msgid "" "other social networks." msgstr "" -#: mod/invite.php:126 +#: mod/invite.php:127 #, php-format msgid "" "To accept this invitation, please visit and register at %s or any other " "public Friendica website." msgstr "" -#: mod/invite.php:127 +#: mod/invite.php:128 #, php-format msgid "" "Friendica sites all inter-connect to create a huge privacy-enhanced social " @@ -6467,2354 +6634,2210 @@ msgid "" "sites you can join." msgstr "" -#: mod/invite.php:131 +#: mod/invite.php:132 msgid "" "Our apologies. This system is not currently configured to connect with other " "public sites or invite members." msgstr "" -#: mod/invite.php:134 +#: mod/invite.php:135 #, php-format msgid "To accept this invitation, please visit and register at %s." msgstr "" -#: mod/invite.php:135 +#: mod/invite.php:136 msgid "" "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." msgstr "" -#: mod/invite.php:141 +#: mod/invite.php:142 msgid "Send invitations" msgstr "" -#: mod/invite.php:142 +#: mod/invite.php:143 msgid "Enter email addresses, one per line:" msgstr "" -#: mod/invite.php:144 +#: mod/invite.php:144 mod/message.php:332 mod/message.php:515 +#: mod/wallmessage.php:138 +msgid "Your message:" +msgstr "" + +#: mod/invite.php:145 msgid "" "You are cordially invited to join me and other close friends on Friendica - " "and help us to create a better social web." msgstr "" -#: mod/invite.php:146 +#: mod/invite.php:147 msgid "You will need to supply this invitation code: $invite_code" msgstr "" -#: mod/invite.php:146 +#: mod/invite.php:147 msgid "" "Once you have registered, please connect with me via my profile page at:" msgstr "" -#: mod/invite.php:148 +#: mod/invite.php:149 msgid "" "For more information about the Friendica project and why we feel it is " "important, please visit http://friendi.ca" msgstr "" -#: mod/settings.php:45 mod/admin.php:1580 -msgid "Account" -msgstr "" - -#: mod/settings.php:54 mod/admin.php:174 -msgid "Additional features" -msgstr "" - -#: mod/settings.php:62 -msgid "Display" -msgstr "" - -#: mod/settings.php:69 mod/settings.php:891 -msgid "Social Networks" -msgstr "" - -#: mod/settings.php:76 mod/admin.php:172 mod/admin.php:1706 mod/admin.php:1769 -msgid "Plugins" -msgstr "" - -#: mod/settings.php:90 -msgid "Connected apps" -msgstr "" - -#: mod/settings.php:104 -msgid "Remove account" -msgstr "" - -#: mod/settings.php:159 -msgid "Missing some important data!" -msgstr "" - -#: mod/settings.php:273 -msgid "Failed to connect with email account using the settings provided." -msgstr "" - -#: mod/settings.php:278 -msgid "Email settings updated." -msgstr "" - -#: mod/settings.php:293 -msgid "Features updated" -msgstr "" - -#: mod/settings.php:363 -msgid "Relocate message has been send to your contacts" -msgstr "" - -#: mod/settings.php:382 -msgid "Empty passwords are not allowed. Password unchanged." -msgstr "" - -#: mod/settings.php:390 -msgid "Wrong password." -msgstr "" - -#: mod/settings.php:401 -msgid "Password changed." -msgstr "" - -#: mod/settings.php:403 -msgid "Password update failed. Please try again." -msgstr "" - -#: mod/settings.php:483 -msgid " Please use a shorter name." -msgstr "" - -#: mod/settings.php:485 -msgid " Name too short." -msgstr "" - -#: mod/settings.php:494 -msgid "Wrong Password" +#: mod/item.php:119 +msgid "Unable to locate original post." msgstr "" -#: mod/settings.php:499 -msgid " Not valid email." +#: mod/item.php:346 +msgid "Empty post discarded." msgstr "" -#: mod/settings.php:505 -msgid " Cannot change to that email." +#: mod/item.php:903 +msgid "System error. Post not saved." msgstr "" -#: mod/settings.php:561 -msgid "Private forum has no privacy permissions. Using default privacy group." +#: mod/item.php:994 +#, php-format +msgid "" +"This message was sent to you by %s, a member of the Friendica social network." msgstr "" -#: mod/settings.php:565 -msgid "Private forum has no privacy permissions and no default privacy group." +#: mod/item.php:996 +#, php-format +msgid "You may visit them online at %s" msgstr "" -#: mod/settings.php:605 -msgid "Settings updated." +#: mod/item.php:997 +msgid "" +"Please contact the sender by replying to this post if you do not wish to " +"receive these messages." msgstr "" -#: mod/settings.php:681 mod/settings.php:707 mod/settings.php:743 -msgid "Add application" +#: mod/item.php:1001 +#, php-format +msgid "%s posted an update." msgstr "" -#: mod/settings.php:682 mod/settings.php:793 mod/settings.php:842 -#: mod/settings.php:909 mod/settings.php:1006 mod/settings.php:1272 -#: mod/admin.php:1145 mod/admin.php:1770 mod/admin.php:2033 mod/admin.php:2107 -#: mod/admin.php:2260 -msgid "Save Settings" +#: mod/localtime.php:26 +msgid "Time Conversion" msgstr "" -#: mod/settings.php:685 mod/settings.php:711 -msgid "Consumer Key" +#: mod/localtime.php:28 +msgid "" +"Friendica provides this service for sharing events with other networks and " +"friends in unknown timezones." msgstr "" -#: mod/settings.php:686 mod/settings.php:712 -msgid "Consumer Secret" +#: mod/localtime.php:32 +#, php-format +msgid "UTC time: %s" msgstr "" -#: mod/settings.php:687 mod/settings.php:713 -msgid "Redirect" +#: mod/localtime.php:35 +#, php-format +msgid "Current timezone: %s" msgstr "" -#: mod/settings.php:688 mod/settings.php:714 -msgid "Icon url" +#: mod/localtime.php:38 +#, php-format +msgid "Converted localtime: %s" msgstr "" -#: mod/settings.php:699 -msgid "You can't edit this application." +#: mod/localtime.php:43 +msgid "Please select your timezone:" msgstr "" -#: mod/settings.php:742 -msgid "Connected Apps" +#: mod/lostpass.php:22 +msgid "No valid account found." msgstr "" -#: mod/settings.php:746 -msgid "Client key starts with" +#: mod/lostpass.php:38 +msgid "Password reset request issued. Check your email." msgstr "" -#: mod/settings.php:747 -msgid "No name" +#: mod/lostpass.php:44 +#, php-format +msgid "" +"\n" +"\t\tDear %1$s,\n" +"\t\t\tA request was recently received at \"%2$s\" to reset your account\n" +"\t\tpassword. In order to confirm this request, please select the " +"verification link\n" +"\t\tbelow or paste it into your web browser address bar.\n" +"\n" +"\t\tIf you did NOT request this change, please DO NOT follow the link\n" +"\t\tprovided and ignore and/or delete this email.\n" +"\n" +"\t\tYour password will not be changed unless we can verify that you\n" +"\t\tissued this request." msgstr "" -#: mod/settings.php:748 -msgid "Remove authorization" +#: mod/lostpass.php:55 +#, php-format +msgid "" +"\n" +"\t\tFollow this link to verify your identity:\n" +"\n" +"\t\t%1$s\n" +"\n" +"\t\tYou will then receive a follow-up message containing the new password.\n" +"\t\tYou may change that password from your account settings page after " +"logging in.\n" +"\n" +"\t\tThe login details are as follows:\n" +"\n" +"\t\tSite Location:\t%2$s\n" +"\t\tLogin Name:\t%3$s" msgstr "" -#: mod/settings.php:760 -msgid "No Plugin settings configured" +#: mod/lostpass.php:74 +#, php-format +msgid "Password reset requested at %s" msgstr "" -#: mod/settings.php:769 -msgid "Plugin Settings" +#: mod/lostpass.php:94 +msgid "" +"Request could not be verified. (You may have previously submitted it.) " +"Password reset failed." msgstr "" -#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250 -msgid "Off" +#: mod/lostpass.php:113 boot.php:875 +msgid "Password Reset" msgstr "" -#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250 -msgid "On" +#: mod/lostpass.php:114 +msgid "Your password has been reset as requested." msgstr "" -#: mod/settings.php:791 -msgid "Additional Features" +#: mod/lostpass.php:115 +msgid "Your new password is" msgstr "" -#: mod/settings.php:801 mod/settings.php:805 -msgid "General Social Media Settings" +#: mod/lostpass.php:116 +msgid "Save or copy your new password - and then" msgstr "" -#: mod/settings.php:811 -msgid "Disable intelligent shortening" +#: mod/lostpass.php:117 +msgid "click here to login" msgstr "" -#: mod/settings.php:813 +#: mod/lostpass.php:118 msgid "" -"Normally the system tries to find the best link to add to shortened posts. " -"If this option is enabled then every shortened post will always point to the " -"original friendica post." +"Your password may be changed from the Settings page after " +"successful login." msgstr "" -#: mod/settings.php:819 -msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" +#: mod/lostpass.php:128 +#, php-format +msgid "" +"\n" +"\t\t\t\tDear %1$s,\n" +"\t\t\t\t\tYour password has been changed as requested. Please retain this\n" +"\t\t\t\tinformation for your records (or change your password immediately " +"to\n" +"\t\t\t\tsomething that you will remember).\n" +"\t\t\t" msgstr "" -#: mod/settings.php:821 +#: mod/lostpass.php:134 +#, php-format msgid "" -"If you receive a message from an unknown OStatus user, this option decides " -"what to do. If it is checked, a new contact will be created for every " -"unknown user." +"\n" +"\t\t\t\tYour login details are as follows:\n" +"\n" +"\t\t\t\tSite Location:\t%1$s\n" +"\t\t\t\tLogin Name:\t%2$s\n" +"\t\t\t\tPassword:\t%3$s\n" +"\n" +"\t\t\t\tYou may change that password from your account settings page after " +"logging in.\n" +"\t\t\t" msgstr "" -#: mod/settings.php:827 -msgid "Default group for OStatus contacts" +#: mod/lostpass.php:150 +#, php-format +msgid "Your password has been changed at %s" msgstr "" -#: mod/settings.php:835 -msgid "Your legacy GNU Social account" +#: mod/lostpass.php:162 +msgid "Forgot your Password?" msgstr "" -#: mod/settings.php:837 +#: mod/lostpass.php:163 msgid "" -"If you enter your old GNU Social/Statusnet account name here (in the format " -"user@domain.tld), your contacts will be added automatically. The field will " -"be emptied when done." +"Enter your email address and submit to have your password reset. Then check " +"your email for further instructions." msgstr "" -#: mod/settings.php:840 -msgid "Repair OStatus subscriptions" +#: mod/lostpass.php:164 boot.php:863 +msgid "Nickname or Email: " msgstr "" -#: mod/settings.php:849 mod/settings.php:850 -#, php-format -msgid "Built-in support for %s connectivity is %s" +#: mod/lostpass.php:165 +msgid "Reset" msgstr "" -#: mod/settings.php:849 mod/settings.php:850 -msgid "enabled" +#: mod/manage.php:153 +msgid "Manage Identities and/or Pages" msgstr "" -#: mod/settings.php:849 mod/settings.php:850 -msgid "disabled" +#: mod/manage.php:154 +msgid "" +"Toggle between different identities or community/group pages which share " +"your account details or which you have been granted \"manage\" permissions" msgstr "" -#: mod/settings.php:850 -msgid "GNU Social (OStatus)" +#: mod/manage.php:155 +msgid "Select an identity to manage: " msgstr "" -#: mod/settings.php:884 -msgid "Email access is disabled on this site." +#: mod/match.php:39 +msgid "No keywords to match. Please add keywords to your default profile." msgstr "" -#: mod/settings.php:896 -msgid "Email/Mailbox Setup" +#: mod/match.php:92 +msgid "is interested in:" msgstr "" -#: mod/settings.php:897 -msgid "" -"If you wish to communicate with email contacts using this service " -"(optional), please specify how to connect to your mailbox." +#: mod/match.php:106 +msgid "Profile Match" msgstr "" -#: mod/settings.php:898 -msgid "Last successful email check:" +#: mod/message.php:63 mod/wallmessage.php:53 +msgid "No recipient selected." msgstr "" -#: mod/settings.php:900 -msgid "IMAP server name:" +#: mod/message.php:67 +msgid "Unable to locate contact information." msgstr "" -#: mod/settings.php:901 -msgid "IMAP port:" +#: mod/message.php:70 mod/wallmessage.php:59 +msgid "Message could not be sent." msgstr "" -#: mod/settings.php:902 -msgid "Security:" +#: mod/message.php:73 mod/wallmessage.php:62 +msgid "Message collection failure." msgstr "" -#: mod/settings.php:902 mod/settings.php:907 -msgid "None" +#: mod/message.php:76 mod/wallmessage.php:65 +msgid "Message sent." msgstr "" -#: mod/settings.php:903 -msgid "Email login name:" +#: mod/message.php:205 +msgid "Do you really want to delete this message?" msgstr "" -#: mod/settings.php:904 -msgid "Email password:" +#: mod/message.php:225 +msgid "Message deleted." msgstr "" -#: mod/settings.php:905 -msgid "Reply-to address:" +#: mod/message.php:255 +msgid "Conversation removed." msgstr "" -#: mod/settings.php:906 -msgid "Send public posts to all email contacts:" +#: mod/message.php:322 mod/wallmessage.php:129 +msgid "Send Private Message" msgstr "" -#: mod/settings.php:907 -msgid "Action after import:" +#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:131 +msgid "To:" msgstr "" -#: mod/settings.php:907 -msgid "Move to folder" +#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:132 +msgid "Subject:" msgstr "" -#: mod/settings.php:908 -msgid "Move to folder:" +#: mod/message.php:364 +msgid "No messages." msgstr "" -#: mod/settings.php:944 mod/admin.php:1032 -msgid "No special theme for mobile devices" +#: mod/message.php:403 +msgid "Message not available." msgstr "" -#: mod/settings.php:1004 -msgid "Display Settings" +#: mod/message.php:478 +msgid "Delete message" msgstr "" -#: mod/settings.php:1010 mod/settings.php:1033 -msgid "Display Theme:" +#: mod/message.php:503 mod/message.php:591 +msgid "Delete conversation" msgstr "" -#: mod/settings.php:1011 -msgid "Mobile Theme:" +#: mod/message.php:505 +msgid "" +"No secure communications available. You may be able to " +"respond from the sender's profile page." msgstr "" -#: mod/settings.php:1012 -msgid "Suppress warning of insecure networks" +#: mod/message.php:509 +msgid "Send Reply" msgstr "" -#: mod/settings.php:1012 -msgid "" -"Should the system suppress the warning that the current group contains " -"members of networks that can't receive non public postings." +#: mod/message.php:561 +#, php-format +msgid "Unknown sender - %s" msgstr "" -#: mod/settings.php:1013 -msgid "Update browser every xx seconds" +#: mod/message.php:563 +#, php-format +msgid "You and %s" msgstr "" -#: mod/settings.php:1013 -msgid "Minimum of 10 seconds. Enter -1 to disable it." +#: mod/message.php:565 +#, php-format +msgid "%s and You" msgstr "" -#: mod/settings.php:1014 -msgid "Number of items to display per page:" +#: mod/message.php:594 +msgid "D, d M Y - g:i A" msgstr "" -#: mod/settings.php:1014 mod/settings.php:1015 -msgid "Maximum of 100 items" -msgstr "" +#: mod/message.php:597 +#, php-format +msgid "%d message" +msgid_plural "%d messages" +msgstr[0] "" +msgstr[1] "" -#: mod/settings.php:1015 -msgid "Number of items to display per page when viewed from mobile device:" +#: mod/mood.php:136 +msgid "Mood" msgstr "" -#: mod/settings.php:1016 -msgid "Don't show emoticons" +#: mod/mood.php:137 +msgid "Set your current mood and tell your friends" msgstr "" -#: mod/settings.php:1017 -msgid "Calendar" -msgstr "" +#: mod/network.php:561 +#, php-format +msgid "" +"Warning: This group contains %s member from a network that doesn't allow non " +"public messages." +msgid_plural "" +"Warning: This group contains %s members from a network that doesn't allow " +"non public messages." +msgstr[0] "" +msgstr[1] "" -#: mod/settings.php:1018 -msgid "Beginning of week:" +#: mod/network.php:564 +msgid "Messages in this group won't be send to these receivers." msgstr "" -#: mod/settings.php:1019 -msgid "Don't show notices" +#: mod/network.php:684 +msgid "Private messages to this person are at risk of public disclosure." msgstr "" -#: mod/settings.php:1020 -msgid "Infinite scroll" +#: mod/network.php:688 +msgid "Invalid contact." msgstr "" -#: mod/settings.php:1021 -msgid "Automatic updates only at the top of the network page" +#: mod/network.php:892 +msgid "Commented Order" msgstr "" -#: mod/settings.php:1021 -msgid "" -"When disabled, the network page is updated all the time, which could be " -"confusing while reading." +#: mod/network.php:895 +msgid "Sort by Comment Date" msgstr "" -#: mod/settings.php:1022 -msgid "Bandwith Saver Mode" +#: mod/network.php:900 +msgid "Posted Order" msgstr "" -#: mod/settings.php:1022 -msgid "" -"When enabled, embedded content is not displayed on automatic updates, they " -"only show on page reload." +#: mod/network.php:903 +msgid "Sort by Post Date" +msgstr "" + +#: mod/network.php:914 +msgid "Posts that mention or involve you" msgstr "" -#: mod/settings.php:1024 -msgid "General Theme Settings" +#: mod/network.php:922 +msgid "New" msgstr "" -#: mod/settings.php:1025 -msgid "Custom Theme Settings" +#: mod/network.php:925 +msgid "Activity Stream - by date" msgstr "" -#: mod/settings.php:1026 -msgid "Content Settings" +#: mod/network.php:933 +msgid "Shared Links" msgstr "" -#: mod/settings.php:1027 view/theme/duepuntozero/config.php:66 -#: view/theme/frio/config.php:69 view/theme/quattro/config.php:72 -#: view/theme/vier/config.php:115 -msgid "Theme settings" +#: mod/network.php:936 +msgid "Interesting Links" msgstr "" -#: mod/settings.php:1111 -msgid "Account Types" +#: mod/network.php:944 +msgid "Starred" msgstr "" -#: mod/settings.php:1112 -msgid "Personal Page Subtypes" +#: mod/network.php:947 +msgid "Favourite Posts" msgstr "" -#: mod/settings.php:1113 -msgid "Community Forum Subtypes" +#: mod/notifications.php:38 +msgid "Invalid request identifier." msgstr "" -#: mod/settings.php:1120 -msgid "Personal Page" +#: mod/notifications.php:47 mod/notifications.php:183 mod/notifications.php:230 +msgid "Discard" msgstr "" -#: mod/settings.php:1121 -msgid "Account for a personal profile." +#: mod/notifications.php:108 +msgid "Network Notifications" msgstr "" -#: mod/settings.php:1124 -msgid "Organisation Page" +#: mod/notifications.php:114 mod/notify.php:73 +msgid "System Notifications" msgstr "" -#: mod/settings.php:1125 -msgid "" -"Account for an organisation that automatically approves contact requests as " -"\"Followers\"." +#: mod/notifications.php:120 +msgid "Personal Notifications" msgstr "" -#: mod/settings.php:1128 -msgid "News Page" +#: mod/notifications.php:126 +msgid "Home Notifications" msgstr "" -#: mod/settings.php:1129 -msgid "" -"Account for a news reflector that automatically approves contact requests as " -"\"Followers\"." +#: mod/notifications.php:155 +msgid "Show Ignored Requests" msgstr "" -#: mod/settings.php:1132 -msgid "Community Forum" +#: mod/notifications.php:155 +msgid "Hide Ignored Requests" msgstr "" -#: mod/settings.php:1133 -msgid "Account for community discussions." +#: mod/notifications.php:167 mod/notifications.php:237 +msgid "Notification type: " msgstr "" -#: mod/settings.php:1136 -msgid "Normal Account Page" +#: mod/notifications.php:170 +#, php-format +msgid "suggested by %s" msgstr "" -#: mod/settings.php:1137 -msgid "" -"Account for a regular personal profile that requires manual approval of " -"\"Friends\" and \"Followers\"." +#: mod/notifications.php:176 mod/notifications.php:255 +msgid "Post a new friend activity" msgstr "" -#: mod/settings.php:1140 -msgid "Soapbox Page" +#: mod/notifications.php:176 mod/notifications.php:255 +msgid "if applicable" msgstr "" -#: mod/settings.php:1141 -msgid "" -"Account for a public profile that automatically approves contact requests as " -"\"Followers\"." +#: mod/notifications.php:198 +msgid "Claims to be known to you: " msgstr "" -#: mod/settings.php:1144 -msgid "Public Forum" +#: mod/notifications.php:199 +msgid "yes" msgstr "" -#: mod/settings.php:1145 -msgid "Automatically approves all contact requests." +#: mod/notifications.php:199 +msgid "no" msgstr "" -#: mod/settings.php:1148 -msgid "Automatic Friend Page" +#: mod/notifications.php:200 mod/notifications.php:205 +msgid "Shall your connection be bidirectional or not?" msgstr "" -#: mod/settings.php:1149 +#: mod/notifications.php:201 mod/notifications.php:206 +#, php-format msgid "" -"Account for a popular profile that automatically approves contact requests " -"as \"Friends\"." +"Accepting %s as a friend allows %s to subscribe to your posts, and you will " +"also receive updates from them in your news feed." msgstr "" -#: mod/settings.php:1152 -msgid "Private Forum [Experimental]" +#: mod/notifications.php:202 +#, php-format +msgid "" +"Accepting %s as a subscriber allows them to subscribe to your posts, but you " +"will not receive updates from them in your news feed." msgstr "" -#: mod/settings.php:1153 -msgid "Requires manual approval of contact requests." +#: mod/notifications.php:207 +#, php-format +msgid "" +"Accepting %s as a sharer allows them to subscribe to your posts, but you " +"will not receive updates from them in your news feed." msgstr "" -#: mod/settings.php:1164 -msgid "OpenID:" +#: mod/notifications.php:218 +msgid "Friend" msgstr "" -#: mod/settings.php:1164 -msgid "(Optional) Allow this OpenID to login to this account." +#: mod/notifications.php:219 +msgid "Sharer" msgstr "" -#: mod/settings.php:1172 -msgid "Publish your default profile in your local site directory?" +#: mod/notifications.php:219 +msgid "Subscriber" msgstr "" -#: mod/settings.php:1172 -msgid "Your profile may be visible in public." +#: mod/notifications.php:275 +msgid "No introductions." msgstr "" -#: mod/settings.php:1178 -msgid "Publish your default profile in the global social directory?" +#: mod/notifications.php:316 +msgid "Show unread" msgstr "" -#: mod/settings.php:1185 -msgid "Hide your contact/friend list from viewers of your default profile?" +#: mod/notifications.php:316 +msgid "Show all" msgstr "" -#: mod/settings.php:1189 -msgid "" -"If enabled, posting public messages to Diaspora and other networks isn't " -"possible." +#: mod/notifications.php:322 +#, php-format +msgid "No more %s notifications." msgstr "" -#: mod/settings.php:1194 -msgid "Allow friends to post to your profile page?" +#: mod/notify.php:69 +msgid "No more system notifications." msgstr "" -#: mod/settings.php:1199 -msgid "Allow friends to tag your posts?" +#: mod/oexchange.php:25 +msgid "Post successful." msgstr "" -#: mod/settings.php:1204 -msgid "Allow us to suggest you as a potential friend to new members?" +#: mod/openid.php:25 +msgid "OpenID protocol error. No ID returned." msgstr "" -#: mod/settings.php:1209 -msgid "Permit unknown people to send you private mail?" +#: mod/openid.php:61 +msgid "" +"Account not found and OpenID registration is not permitted on this site." msgstr "" -#: mod/settings.php:1217 -msgid "Profile is not published." +#: mod/ostatus_subscribe.php:17 +msgid "Subscribing to OStatus contacts" msgstr "" -#: mod/settings.php:1225 -#, php-format -msgid "Your Identity Address is '%s' or '%s'." +#: mod/ostatus_subscribe.php:28 +msgid "No contact provided." msgstr "" -#: mod/settings.php:1232 -msgid "Automatically expire posts after this many days:" +#: mod/ostatus_subscribe.php:34 +msgid "Couldn't fetch information for contact." msgstr "" -#: mod/settings.php:1232 -msgid "If empty, posts will not expire. Expired posts will be deleted" +#: mod/ostatus_subscribe.php:43 +msgid "Couldn't fetch friends for contact." msgstr "" -#: mod/settings.php:1233 -msgid "Advanced expiration settings" +#: mod/ostatus_subscribe.php:57 mod/repair_ostatus.php:47 +msgid "Done" msgstr "" -#: mod/settings.php:1234 -msgid "Advanced Expiration" +#: mod/ostatus_subscribe.php:71 +msgid "success" msgstr "" -#: mod/settings.php:1235 -msgid "Expire posts:" +#: mod/ostatus_subscribe.php:73 +msgid "failed" msgstr "" -#: mod/settings.php:1236 -msgid "Expire personal notes:" +#: mod/ostatus_subscribe.php:81 mod/repair_ostatus.php:53 +msgid "Keep this window open until done." msgstr "" -#: mod/settings.php:1237 -msgid "Expire starred posts:" +#: mod/p.php:13 +msgid "Not Extended" msgstr "" -#: mod/settings.php:1238 -msgid "Expire photos:" +#: mod/photos.php:97 mod/photos.php:1903 +msgid "Recent Photos" msgstr "" -#: mod/settings.php:1239 -msgid "Only expire posts by others:" +#: mod/photos.php:100 mod/photos.php:1331 mod/photos.php:1905 +msgid "Upload New Photos" msgstr "" -#: mod/settings.php:1270 -msgid "Account Settings" +#: mod/photos.php:115 mod/settings.php:39 +msgid "everybody" msgstr "" -#: mod/settings.php:1278 -msgid "Password Settings" +#: mod/photos.php:179 +msgid "Contact information unavailable" msgstr "" -#: mod/settings.php:1280 -msgid "Leave password fields blank unless changing" +#: mod/photos.php:200 +msgid "Album not found." msgstr "" -#: mod/settings.php:1281 -msgid "Current Password:" +#: mod/photos.php:233 mod/photos.php:245 mod/photos.php:1275 +msgid "Delete Album" msgstr "" -#: mod/settings.php:1281 mod/settings.php:1282 -msgid "Your current password to confirm the changes" +#: mod/photos.php:243 +msgid "Do you really want to delete this photo album and all its photos?" msgstr "" -#: mod/settings.php:1282 -msgid "Password:" +#: mod/photos.php:326 mod/photos.php:337 mod/photos.php:1601 +msgid "Delete Photo" msgstr "" -#: mod/settings.php:1286 -msgid "Basic Settings" +#: mod/photos.php:335 +msgid "Do you really want to delete this photo?" msgstr "" -#: mod/settings.php:1288 -msgid "Email Address:" +#: mod/photos.php:716 +#, php-format +msgid "%1$s was tagged in %2$s by %3$s" msgstr "" -#: mod/settings.php:1289 -msgid "Your Timezone:" +#: mod/photos.php:716 +msgid "a photo" msgstr "" -#: mod/settings.php:1290 -msgid "Your Language:" +#: mod/photos.php:816 mod/profile_photo.php:156 mod/wall_upload.php:182 +#, php-format +msgid "Image exceeds size limit of %s" msgstr "" -#: mod/settings.php:1290 -msgid "" -"Set the language we use to show you friendica interface and to send you " -"emails" +#: mod/photos.php:824 +msgid "Image file is empty." msgstr "" -#: mod/settings.php:1291 -msgid "Default Post Location:" +#: mod/photos.php:857 mod/profile_photo.php:165 mod/wall_upload.php:219 +msgid "Unable to process image." msgstr "" -#: mod/settings.php:1292 -msgid "Use Browser Location:" +#: mod/photos.php:886 mod/profile_photo.php:315 mod/wall_upload.php:258 +msgid "Image upload failed." msgstr "" -#: mod/settings.php:1295 -msgid "Security and Privacy Settings" +#: mod/photos.php:991 +msgid "No photos selected" msgstr "" -#: mod/settings.php:1297 -msgid "Maximum Friend Requests/Day:" +#: mod/photos.php:1094 mod/videos.php:312 +msgid "Access to this item is restricted." msgstr "" -#: mod/settings.php:1297 mod/settings.php:1327 -msgid "(to prevent spam abuse)" +#: mod/photos.php:1154 +#, php-format +msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage." msgstr "" -#: mod/settings.php:1298 -msgid "Default Post Permissions" +#: mod/photos.php:1191 +msgid "Upload Photos" msgstr "" -#: mod/settings.php:1299 -msgid "(click to open/close)" +#: mod/photos.php:1195 mod/photos.php:1270 +msgid "New album name: " msgstr "" -#: mod/settings.php:1310 -msgid "Default Private Post" +#: mod/photos.php:1196 +msgid "or existing album name: " msgstr "" -#: mod/settings.php:1311 -msgid "Default Public Post" +#: mod/photos.php:1197 +msgid "Do not show a status post for this upload" msgstr "" -#: mod/settings.php:1315 -msgid "Default Permissions for New Posts" +#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309 +msgid "Show to Groups" msgstr "" -#: mod/settings.php:1327 -msgid "Maximum private messages per day from unknown people:" +#: mod/photos.php:1209 mod/photos.php:1606 mod/settings.php:1310 +msgid "Show to Contacts" msgstr "" -#: mod/settings.php:1330 -msgid "Notification Settings" +#: mod/photos.php:1210 +msgid "Private Photo" msgstr "" -#: mod/settings.php:1331 -msgid "By default post a status message when:" +#: mod/photos.php:1211 +msgid "Public Photo" msgstr "" -#: mod/settings.php:1332 -msgid "accepting a friend request" +#: mod/photos.php:1281 +msgid "Edit Album" msgstr "" -#: mod/settings.php:1333 -msgid "joining a forum/community" +#: mod/photos.php:1286 +msgid "Show Newest First" msgstr "" -#: mod/settings.php:1334 -msgid "making an interesting profile change" +#: mod/photos.php:1288 +msgid "Show Oldest First" msgstr "" -#: mod/settings.php:1335 -msgid "Send a notification email when:" +#: mod/photos.php:1317 mod/photos.php:1888 +msgid "View Photo" msgstr "" -#: mod/settings.php:1336 -msgid "You receive an introduction" +#: mod/photos.php:1362 +msgid "Permission denied. Access to this item may be restricted." msgstr "" -#: mod/settings.php:1337 -msgid "Your introductions are confirmed" +#: mod/photos.php:1364 +msgid "Photo not available" msgstr "" -#: mod/settings.php:1338 -msgid "Someone writes on your profile wall" +#: mod/photos.php:1425 +msgid "View photo" msgstr "" -#: mod/settings.php:1339 -msgid "Someone writes a followup comment" +#: mod/photos.php:1425 +msgid "Edit photo" msgstr "" -#: mod/settings.php:1340 -msgid "You receive a private message" +#: mod/photos.php:1426 +msgid "Use as profile photo" msgstr "" -#: mod/settings.php:1341 -msgid "You receive a friend suggestion" +#: mod/photos.php:1451 +msgid "View Full Size" msgstr "" -#: mod/settings.php:1342 -msgid "You are tagged in a post" +#: mod/photos.php:1541 +msgid "Tags: " msgstr "" -#: mod/settings.php:1343 -msgid "You are poked/prodded/etc. in a post" +#: mod/photos.php:1544 +msgid "[Remove any tag]" msgstr "" -#: mod/settings.php:1345 -msgid "Activate desktop notifications" +#: mod/photos.php:1587 +msgid "New album name" msgstr "" -#: mod/settings.php:1345 -msgid "Show desktop popup on new notifications" +#: mod/photos.php:1588 +msgid "Caption" msgstr "" -#: mod/settings.php:1347 -msgid "Text-only notification emails" +#: mod/photos.php:1589 +msgid "Add a Tag" msgstr "" -#: mod/settings.php:1349 -msgid "Send text only notification emails, without the html part" +#: mod/photos.php:1589 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: mod/settings.php:1351 -msgid "Advanced Account/Page Type Settings" +#: mod/photos.php:1590 +msgid "Do not rotate" msgstr "" -#: mod/settings.php:1352 -msgid "Change the behaviour of this account for special situations" +#: mod/photos.php:1591 +msgid "Rotate CW (right)" msgstr "" -#: mod/settings.php:1355 -msgid "Relocate" +#: mod/photos.php:1592 +msgid "Rotate CCW (left)" msgstr "" -#: mod/settings.php:1356 -msgid "" -"If you have moved this profile from another server, and some of your " -"contacts don't receive your updates, try pushing this button." +#: mod/photos.php:1607 +msgid "Private photo" msgstr "" -#: mod/settings.php:1357 -msgid "Resend relocate message to contacts" +#: mod/photos.php:1608 +msgid "Public photo" msgstr "" -#: mod/admin.php:98 -msgid "Theme settings updated." +#: mod/photos.php:1817 +msgid "Map" msgstr "" -#: mod/admin.php:170 mod/admin.php:1144 -msgid "Site" +#: mod/photos.php:1894 mod/videos.php:396 +msgid "View Album" msgstr "" -#: mod/admin.php:171 mod/admin.php:1078 mod/admin.php:1588 mod/admin.php:1604 -msgid "Users" +#: mod/ping.php:275 +msgid "{0} wants to be your friend" msgstr "" -#: mod/admin.php:173 mod/admin.php:1982 mod/admin.php:2032 -msgid "Themes" +#: mod/ping.php:290 +msgid "{0} sent you a message" msgstr "" -#: mod/admin.php:175 -msgid "DB updates" +#: mod/ping.php:305 +msgid "{0} requested registration" msgstr "" -#: mod/admin.php:176 mod/admin.php:582 -msgid "Inspect Queue" +#: mod/poke.php:198 +msgid "Poke/Prod" msgstr "" -#: mod/admin.php:177 mod/admin.php:297 -msgid "Server Blocklist" +#: mod/poke.php:199 +msgid "poke, prod or do other things to somebody" msgstr "" -#: mod/admin.php:178 mod/admin.php:548 -msgid "Federation Statistics" +#: mod/poke.php:200 +msgid "Recipient" msgstr "" -#: mod/admin.php:179 mod/admin.php:374 -msgid "Delete Item" +#: mod/poke.php:201 +msgid "Choose what you wish to do to recipient" msgstr "" -#: mod/admin.php:193 mod/admin.php:204 mod/admin.php:2106 -msgid "Logs" +#: mod/poke.php:204 +msgid "Make this post private" msgstr "" -#: mod/admin.php:194 mod/admin.php:2174 -msgid "View Logs" +#: mod/profile.php:177 +msgid "Tips for New Members" msgstr "" -#: mod/admin.php:195 -msgid "probe address" +#: mod/profile_photo.php:45 +msgid "Image uploaded but image cropping failed." msgstr "" -#: mod/admin.php:196 -msgid "check webfinger" +#: mod/profile_photo.php:78 mod/profile_photo.php:86 mod/profile_photo.php:94 +#: mod/profile_photo.php:323 +#, php-format +msgid "Image size reduction [%s] failed." msgstr "" -#: mod/admin.php:203 -msgid "Plugin Features" +#: mod/profile_photo.php:128 +msgid "" +"Shift-reload the page or clear browser cache if the new photo does not " +"display immediately." msgstr "" -#: mod/admin.php:205 -msgid "diagnostics" +#: mod/profile_photo.php:137 +msgid "Unable to process image" msgstr "" -#: mod/admin.php:206 -msgid "User registrations waiting for confirmation" +#: mod/profile_photo.php:254 +msgid "Upload File:" msgstr "" -#: mod/admin.php:288 -msgid "The blocked domain" +#: mod/profile_photo.php:255 +msgid "Select a profile:" msgstr "" -#: mod/admin.php:289 mod/admin.php:302 -msgid "The reason why you blocked this domain." +#: mod/profile_photo.php:257 +msgid "Upload" msgstr "" -#: mod/admin.php:290 -msgid "Delete domain" +#: mod/profile_photo.php:260 +msgid "or" msgstr "" -#: mod/admin.php:290 -msgid "Check to delete this entry from the blocklist" +#: mod/profile_photo.php:260 +msgid "skip this step" msgstr "" -#: mod/admin.php:296 mod/admin.php:373 mod/admin.php:547 mod/admin.php:581 -#: mod/admin.php:661 mod/admin.php:1143 mod/admin.php:1587 mod/admin.php:1705 -#: mod/admin.php:1768 mod/admin.php:1981 mod/admin.php:2031 mod/admin.php:2105 -#: mod/admin.php:2173 -msgid "Administration" +#: mod/profile_photo.php:260 +msgid "select a photo from your photo albums" msgstr "" -#: mod/admin.php:298 -msgid "" -"This page can be used to define a black list of servers from the federated " -"network that are not allowed to interact with your node. For all entered " -"domains you should also give a reason why you have blocked the remote server." +#: mod/profile_photo.php:274 +msgid "Crop Image" msgstr "" -#: mod/admin.php:299 -msgid "" -"The list of blocked servers will be made publically available on the /" -"friendica page so that your users and people investigating communication " -"problems can find the reason easily." +#: mod/profile_photo.php:275 +msgid "Please adjust the image cropping for optimum viewing." msgstr "" -#: mod/admin.php:300 -msgid "Add new entry to block list" +#: mod/profile_photo.php:277 +msgid "Done Editing" msgstr "" -#: mod/admin.php:301 -msgid "Server Domain" +#: mod/profile_photo.php:313 +msgid "Image uploaded successfully." msgstr "" -#: mod/admin.php:301 -msgid "" -"The domain of the new server to add to the block list. Do not include the " -"protocol." +#: mod/profiles.php:43 +msgid "Profile deleted." msgstr "" -#: mod/admin.php:302 -msgid "Block reason" +#: mod/profiles.php:59 mod/profiles.php:95 +msgid "Profile-" msgstr "" -#: mod/admin.php:303 -msgid "Add Entry" +#: mod/profiles.php:78 mod/profiles.php:123 +msgid "New profile created." msgstr "" -#: mod/admin.php:304 -msgid "Save changes to the blocklist" +#: mod/profiles.php:101 +msgid "Profile unavailable to clone." msgstr "" -#: mod/admin.php:305 -msgid "Current Entries in the Blocklist" +#: mod/profiles.php:197 +msgid "Profile Name is required." msgstr "" -#: mod/admin.php:308 -msgid "Delete entry from blocklist" +#: mod/profiles.php:337 +msgid "Marital Status" msgstr "" -#: mod/admin.php:311 -msgid "Delete entry from blocklist?" +#: mod/profiles.php:341 +msgid "Romantic Partner" msgstr "" -#: mod/admin.php:336 -msgid "Server added to blocklist." +#: mod/profiles.php:353 +msgid "Work/Employment" msgstr "" -#: mod/admin.php:352 -msgid "Site blocklist updated." +#: mod/profiles.php:356 +msgid "Religion" msgstr "" -#: mod/admin.php:375 -msgid "Delete this Item" +#: mod/profiles.php:360 +msgid "Political Views" msgstr "" -#: mod/admin.php:376 -msgid "" -"On this page you can delete an item from your node. If the item is a top " -"level posting, the entire thread will be deleted." +#: mod/profiles.php:364 +msgid "Gender" msgstr "" -#: mod/admin.php:377 -msgid "" -"You need to know the GUID of the item. You can find it e.g. by looking at " -"the display URL. The last part of http://example.com/display/123456 is the " -"GUID, here 123456." +#: mod/profiles.php:368 +msgid "Sexual Preference" msgstr "" -#: mod/admin.php:378 -msgid "GUID" +#: mod/profiles.php:372 +msgid "XMPP" msgstr "" -#: mod/admin.php:378 -msgid "The GUID of the item you want to delete." +#: mod/profiles.php:376 +msgid "Homepage" msgstr "" -#: mod/admin.php:415 -msgid "Item marked for deletion." +#: mod/profiles.php:380 mod/profiles.php:699 +msgid "Interests" msgstr "" -#: mod/admin.php:478 -msgid "unknown" +#: mod/profiles.php:384 +msgid "Address" msgstr "" -#: mod/admin.php:541 -msgid "" -"This page offers you some numbers to the known part of the federated social " -"network your Friendica node is part of. These numbers are not complete but " -"only reflect the part of the network your node is aware of." +#: mod/profiles.php:391 mod/profiles.php:695 +msgid "Location" msgstr "" -#: mod/admin.php:542 -msgid "" -"The Auto Discovered Contact Directory feature is not enabled, it " -"will improve the data displayed here." +#: mod/profiles.php:476 +msgid "Profile updated." msgstr "" -#: mod/admin.php:554 -#, php-format -msgid "Currently this node is aware of %d nodes from the following platforms:" +#: mod/profiles.php:568 +msgid " and " msgstr "" -#: mod/admin.php:584 -msgid "ID" +#: mod/profiles.php:577 +msgid "public profile" msgstr "" -#: mod/admin.php:585 -msgid "Recipient Name" +#: mod/profiles.php:580 +#, php-format +msgid "%1$s changed %2$s to “%3$s”" msgstr "" -#: mod/admin.php:586 -msgid "Recipient Profile" +#: mod/profiles.php:581 +#, php-format +msgid " - Visit %1$s's %2$s" msgstr "" -#: mod/admin.php:588 -msgid "Created" +#: mod/profiles.php:583 +#, php-format +msgid "%1$s has an updated %2$s, changing %3$s." msgstr "" -#: mod/admin.php:589 -msgid "Last Tried" +#: mod/profiles.php:641 +msgid "Hide contacts and friends:" msgstr "" -#: mod/admin.php:590 -msgid "" -"This page lists the content of the queue for outgoing postings. These are " -"postings the initial delivery failed for. They will be resend later and " -"eventually deleted if the delivery fails permanently." +#: mod/profiles.php:646 +msgid "Hide your contact/friend list from viewers of this profile?" msgstr "" -#: mod/admin.php:615 -#, php-format -msgid "" -"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 here for a guide that may be helpful " -"converting the table engines. You may also use the command php include/" -"dbstructure.php toinnodb of your Friendica installation for an " -"automatic conversion.
" +#: mod/profiles.php:671 +msgid "Show more profile fields:" msgstr "" -#: mod/admin.php:624 -msgid "" -"The database update failed. Please run \"php include/dbstructure.php update" -"\" from the command line and have a look at the errors that might appear." +#: mod/profiles.php:683 +msgid "Profile Actions" msgstr "" -#: mod/admin.php:629 mod/admin.php:1537 -msgid "Normal Account" +#: mod/profiles.php:684 +msgid "Edit Profile Details" msgstr "" -#: mod/admin.php:630 mod/admin.php:1538 -msgid "Automatic Follower Account" +#: mod/profiles.php:686 +msgid "Change Profile Photo" msgstr "" -#: mod/admin.php:631 mod/admin.php:1539 -msgid "Public Forum Account" +#: mod/profiles.php:687 +msgid "View this profile" msgstr "" -#: mod/admin.php:632 mod/admin.php:1540 -msgid "Automatic Friend Account" +#: mod/profiles.php:689 +msgid "Create a new profile using these settings" msgstr "" -#: mod/admin.php:633 -msgid "Blog Account" +#: mod/profiles.php:690 +msgid "Clone this profile" msgstr "" -#: mod/admin.php:634 -msgid "Private Forum Account" +#: mod/profiles.php:691 +msgid "Delete this profile" msgstr "" -#: mod/admin.php:656 -msgid "Message queues" +#: mod/profiles.php:693 +msgid "Basic information" msgstr "" -#: mod/admin.php:662 -msgid "Summary" +#: mod/profiles.php:694 +msgid "Profile picture" msgstr "" -#: mod/admin.php:664 -msgid "Registered users" +#: mod/profiles.php:696 +msgid "Preferences" msgstr "" -#: mod/admin.php:666 -msgid "Pending registrations" +#: mod/profiles.php:697 +msgid "Status information" msgstr "" -#: mod/admin.php:667 -msgid "Version" +#: mod/profiles.php:698 +msgid "Additional information" msgstr "" -#: mod/admin.php:672 -msgid "Active plugins" +#: mod/profiles.php:701 +msgid "Relation" msgstr "" -#: mod/admin.php:697 -msgid "Can not parse base url. Must have at least ://" +#: mod/profiles.php:705 +msgid "Your Gender:" msgstr "" -#: mod/admin.php:1004 -msgid "Site settings updated." +#: mod/profiles.php:706 +msgid " Marital Status:" msgstr "" -#: mod/admin.php:1061 -msgid "No community page" +#: mod/profiles.php:708 +msgid "Example: fishing photography software" msgstr "" -#: mod/admin.php:1062 -msgid "Public postings from users of this site" +#: mod/profiles.php:713 +msgid "Profile Name:" msgstr "" -#: mod/admin.php:1063 -msgid "Global community page" +#: mod/profiles.php:715 +msgid "" +"This is your public profile.
It may " +"be visible to anybody using the internet." msgstr "" -#: mod/admin.php:1069 -msgid "At post arrival" +#: mod/profiles.php:716 +msgid "Your Full Name:" msgstr "" -#: mod/admin.php:1079 -msgid "Users, Global Contacts" +#: mod/profiles.php:717 +msgid "Title/Description:" msgstr "" -#: mod/admin.php:1080 -msgid "Users, Global Contacts/fallback" +#: mod/profiles.php:720 +msgid "Street Address:" msgstr "" -#: mod/admin.php:1084 -msgid "One month" +#: mod/profiles.php:721 +msgid "Locality/City:" msgstr "" -#: mod/admin.php:1085 -msgid "Three months" +#: mod/profiles.php:722 +msgid "Region/State:" msgstr "" -#: mod/admin.php:1086 -msgid "Half a year" +#: mod/profiles.php:723 +msgid "Postal/Zip Code:" msgstr "" - -#: mod/admin.php:1087 -msgid "One year" + +#: mod/profiles.php:724 +msgid "Country:" msgstr "" -#: mod/admin.php:1092 -msgid "Multi user instance" +#: mod/profiles.php:728 +msgid "Who: (if applicable)" msgstr "" -#: mod/admin.php:1115 -msgid "Closed" +#: mod/profiles.php:728 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "" -#: mod/admin.php:1116 -msgid "Requires approval" +#: mod/profiles.php:729 +msgid "Since [date]:" msgstr "" -#: mod/admin.php:1117 -msgid "Open" +#: mod/profiles.php:731 +msgid "Tell us about yourself..." msgstr "" -#: mod/admin.php:1121 -msgid "No SSL policy, links will track page SSL state" +#: mod/profiles.php:732 +msgid "XMPP (Jabber) address:" msgstr "" -#: mod/admin.php:1122 -msgid "Force all links to use SSL" +#: mod/profiles.php:732 +msgid "" +"The XMPP address will be propagated to your contacts so that they can follow " +"you." msgstr "" -#: mod/admin.php:1123 -msgid "Self-signed certificate, use SSL for local links only (discouraged)" +#: mod/profiles.php:733 +msgid "Homepage URL:" msgstr "" -#: mod/admin.php:1147 -msgid "File upload" +#: mod/profiles.php:736 +msgid "Religious Views:" msgstr "" -#: mod/admin.php:1148 -msgid "Policies" +#: mod/profiles.php:737 +msgid "Public Keywords:" msgstr "" -#: mod/admin.php:1150 -msgid "Auto Discovered Contact Directory" +#: mod/profiles.php:737 +msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" -#: mod/admin.php:1151 -msgid "Performance" +#: mod/profiles.php:738 +msgid "Private Keywords:" msgstr "" -#: mod/admin.php:1152 -msgid "Worker" +#: mod/profiles.php:738 +msgid "(Used for searching profiles, never shown to others)" msgstr "" -#: mod/admin.php:1153 -msgid "" -"Relocate - WARNING: advanced function. Could make this server unreachable." +#: mod/profiles.php:741 +msgid "Musical interests" msgstr "" -#: mod/admin.php:1156 -msgid "Site name" +#: mod/profiles.php:742 +msgid "Books, literature" msgstr "" -#: mod/admin.php:1157 -msgid "Host name" +#: mod/profiles.php:743 +msgid "Television" msgstr "" -#: mod/admin.php:1158 -msgid "Sender Email" +#: mod/profiles.php:744 +msgid "Film/dance/culture/entertainment" msgstr "" -#: mod/admin.php:1158 -msgid "" -"The email address your server shall use to send notification emails from." +#: mod/profiles.php:745 +msgid "Hobbies/Interests" msgstr "" -#: mod/admin.php:1159 -msgid "Banner/Logo" +#: mod/profiles.php:746 +msgid "Love/romance" msgstr "" -#: mod/admin.php:1160 -msgid "Shortcut icon" +#: mod/profiles.php:747 +msgid "Work/employment" msgstr "" -#: mod/admin.php:1160 -msgid "Link to an icon that will be used for browsers." +#: mod/profiles.php:748 +msgid "School/education" msgstr "" -#: mod/admin.php:1161 -msgid "Touch icon" +#: mod/profiles.php:749 +msgid "Contact information and Social Networks" msgstr "" -#: mod/admin.php:1161 -msgid "Link to an icon that will be used for tablets and mobiles." +#: mod/profiles.php:790 +msgid "Edit/Manage Profiles" msgstr "" -#: mod/admin.php:1162 -msgid "Additional Info" +#: mod/register.php:97 +msgid "" +"Registration successful. Please check your email for further instructions." msgstr "" -#: mod/admin.php:1162 +#: mod/register.php:102 #, php-format msgid "" -"For public servers: you can add additional information here that will be " -"listed at %s/siteinfo." +"Failed to send email message. Here your accout details:
login: %s
" +"password: %s

You can change your password after login." msgstr "" -#: mod/admin.php:1163 -msgid "System language" +#: mod/register.php:109 +msgid "Registration successful." msgstr "" -#: mod/admin.php:1164 -msgid "System theme" +#: mod/register.php:115 +msgid "Your registration can not be processed." msgstr "" -#: mod/admin.php:1164 +#: mod/register.php:164 +msgid "Your registration is pending approval by the site owner." +msgstr "" + +#: mod/register.php:230 msgid "" -"Default system theme - may be over-ridden by user profiles - change theme settings" +"You may (optionally) fill in this form via OpenID by supplying your OpenID " +"and clicking 'Register'." msgstr "" -#: mod/admin.php:1165 -msgid "Mobile system theme" +#: mod/register.php:231 +msgid "" +"If you are not familiar with OpenID, please leave that field blank and fill " +"in the rest of the items." msgstr "" -#: mod/admin.php:1165 -msgid "Theme for mobile devices" +#: mod/register.php:232 +msgid "Your OpenID (optional): " msgstr "" -#: mod/admin.php:1166 -msgid "SSL link policy" +#: mod/register.php:246 +msgid "Include your profile in member directory?" msgstr "" -#: mod/admin.php:1166 -msgid "Determines whether generated links should be forced to use SSL" +#: mod/register.php:271 +msgid "Note for the admin" msgstr "" -#: mod/admin.php:1167 -msgid "Force SSL" +#: mod/register.php:271 +msgid "Leave a message for the admin, why you want to join this node" msgstr "" -#: mod/admin.php:1167 -msgid "" -"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " -"to endless loops." +#: mod/register.php:272 +msgid "Membership on this site is by invitation only." msgstr "" -#: mod/admin.php:1168 -msgid "Hide help entry from navigation menu" +#: mod/register.php:273 +msgid "Your invitation ID: " msgstr "" -#: mod/admin.php:1168 -msgid "" -"Hides the menu entry for the Help pages from the navigation menu. You can " -"still access it calling /help directly." +#: mod/register.php:284 +msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " msgstr "" -#: mod/admin.php:1169 -msgid "Single user instance" +#: mod/register.php:285 +msgid "Your Email Address: " msgstr "" -#: mod/admin.php:1169 -msgid "Make this instance multi-user or single-user for the named user" +#: mod/register.php:287 mod/settings.php:1280 +msgid "New Password:" msgstr "" -#: mod/admin.php:1170 -msgid "Maximum image size" +#: mod/register.php:287 +msgid "Leave empty for an auto generated password." msgstr "" -#: mod/admin.php:1170 +#: mod/register.php:288 mod/settings.php:1281 +msgid "Confirm:" +msgstr "" + +#: mod/register.php:289 msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." +"Choose a profile nickname. This must begin with a text character. Your " +"profile address on this site will then be 'nickname@$sitename'." msgstr "" -#: mod/admin.php:1171 -msgid "Maximum image length" +#: mod/register.php:290 +msgid "Choose a nickname: " msgstr "" -#: mod/admin.php:1171 -msgid "" -"Maximum length in pixels of the longest side of uploaded images. Default is " -"-1, which means no limits." +#: mod/register.php:300 +msgid "Import your profile to this friendica instance" msgstr "" -#: mod/admin.php:1172 -msgid "JPEG image quality" +#: mod/regmod.php:61 +msgid "Account approved." msgstr "" -#: mod/admin.php:1172 -msgid "" -"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " -"100, which is full quality." +#: mod/regmod.php:89 +#, php-format +msgid "Registration revoked for %s" msgstr "" -#: mod/admin.php:1174 -msgid "Register policy" +#: mod/regmod.php:101 +msgid "Please login." msgstr "" -#: mod/admin.php:1175 -msgid "Maximum Daily Registrations" +#: mod/removeme.php:55 mod/removeme.php:58 +msgid "Remove My Account" msgstr "" -#: mod/admin.php:1175 +#: mod/removeme.php:56 msgid "" -"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." +"This will completely remove your account. Once this has been done it is not " +"recoverable." msgstr "" -#: mod/admin.php:1176 -msgid "Register text" +#: mod/removeme.php:57 +msgid "Please enter your password for verification:" msgstr "" -#: mod/admin.php:1176 -msgid "Will be displayed prominently on the registration page." +#: mod/repair_ostatus.php:17 +msgid "Resubscribing to OStatus contacts" msgstr "" -#: mod/admin.php:1177 -msgid "Accounts abandoned after x days" +#: mod/repair_ostatus.php:33 +msgid "Error" msgstr "" -#: mod/admin.php:1177 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." +#: mod/settings.php:63 +msgid "Display" msgstr "" -#: mod/admin.php:1178 -msgid "Allowed friend domains" +#: mod/settings.php:70 mod/settings.php:892 +msgid "Social Networks" msgstr "" -#: mod/admin.php:1178 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" +#: mod/settings.php:91 +msgid "Connected apps" msgstr "" -#: mod/admin.php:1179 -msgid "Allowed email domains" +#: mod/settings.php:98 mod/uexport.php:47 +msgid "Export personal data" msgstr "" -#: mod/admin.php:1179 -msgid "" -"Comma separated list of domains which are allowed in email addresses for " -"registrations to this site. Wildcards are accepted. Empty to allow any " -"domains" +#: mod/settings.php:105 +msgid "Remove account" msgstr "" -#: mod/admin.php:1180 -msgid "Block public" +#: mod/settings.php:160 +msgid "Missing some important data!" msgstr "" -#: mod/admin.php:1180 -msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently logged in." +#: mod/settings.php:274 +msgid "Failed to connect with email account using the settings provided." msgstr "" -#: mod/admin.php:1181 -msgid "Force publish" +#: mod/settings.php:279 +msgid "Email settings updated." msgstr "" -#: mod/admin.php:1181 -msgid "" -"Check to force all profiles on this site to be listed in the site directory." +#: mod/settings.php:294 +msgid "Features updated" msgstr "" -#: mod/admin.php:1182 -msgid "Global directory URL" +#: mod/settings.php:364 +msgid "Relocate message has been send to your contacts" msgstr "" -#: mod/admin.php:1182 -msgid "" -"URL to the global directory. If this is not set, the global directory is " -"completely unavailable to the application." +#: mod/settings.php:383 +msgid "Empty passwords are not allowed. Password unchanged." msgstr "" -#: mod/admin.php:1183 -msgid "Allow threaded items" +#: mod/settings.php:391 +msgid "Wrong password." msgstr "" -#: mod/admin.php:1183 -msgid "Allow infinite level threading for items on this site." +#: mod/settings.php:402 +msgid "Password changed." msgstr "" -#: mod/admin.php:1184 -msgid "Private posts by default for new users" +#: mod/settings.php:404 +msgid "Password update failed. Please try again." msgstr "" -#: mod/admin.php:1184 -msgid "" -"Set default post permissions for all new members to the default privacy " -"group rather than public." +#: mod/settings.php:484 +msgid " Please use a shorter name." +msgstr "" + +#: mod/settings.php:486 +msgid " Name too short." msgstr "" -#: mod/admin.php:1185 -msgid "Don't include post content in email notifications" +#: mod/settings.php:495 +msgid "Wrong Password" msgstr "" -#: mod/admin.php:1185 -msgid "" -"Don't include the content of a post/comment/private message/etc. in the " -"email notifications that are sent out from this site, as a privacy measure." +#: mod/settings.php:500 +msgid " Not valid email." msgstr "" -#: mod/admin.php:1186 -msgid "Disallow public access to addons listed in the apps menu." +#: mod/settings.php:506 +msgid " Cannot change to that email." msgstr "" -#: mod/admin.php:1186 -msgid "" -"Checking this box will restrict addons listed in the apps menu to members " -"only." +#: mod/settings.php:562 +msgid "Private forum has no privacy permissions. Using default privacy group." msgstr "" -#: mod/admin.php:1187 -msgid "Don't embed private images in posts" +#: mod/settings.php:566 +msgid "Private forum has no privacy permissions and no default privacy group." msgstr "" -#: mod/admin.php:1187 -msgid "" -"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." +#: mod/settings.php:606 +msgid "Settings updated." msgstr "" -#: mod/admin.php:1188 -msgid "Allow Users to set remote_self" +#: mod/settings.php:682 mod/settings.php:708 mod/settings.php:744 +msgid "Add application" msgstr "" -#: mod/admin.php:1188 -msgid "" -"With checking this, every user is allowed to mark every contact as a " -"remote_self in the repair contact dialog. Setting this flag on a contact " -"causes mirroring every posting of that contact in the users stream." +#: mod/settings.php:686 mod/settings.php:712 +msgid "Consumer Key" msgstr "" -#: mod/admin.php:1189 -msgid "Block multiple registrations" +#: mod/settings.php:687 mod/settings.php:713 +msgid "Consumer Secret" msgstr "" -#: mod/admin.php:1189 -msgid "Disallow users to register additional accounts for use as pages." +#: mod/settings.php:688 mod/settings.php:714 +msgid "Redirect" msgstr "" -#: mod/admin.php:1190 -msgid "OpenID support" +#: mod/settings.php:689 mod/settings.php:715 +msgid "Icon url" msgstr "" -#: mod/admin.php:1190 -msgid "OpenID support for registration and logins." +#: mod/settings.php:700 +msgid "You can't edit this application." msgstr "" -#: mod/admin.php:1191 -msgid "Fullname check" +#: mod/settings.php:743 +msgid "Connected Apps" msgstr "" -#: mod/admin.php:1191 -msgid "" -"Force users to register with a space between firstname and lastname in Full " -"name, as an antispam measure" +#: mod/settings.php:747 +msgid "Client key starts with" msgstr "" -#: mod/admin.php:1192 -msgid "Community Page Style" +#: mod/settings.php:748 +msgid "No name" msgstr "" -#: mod/admin.php:1192 -msgid "" -"Type of community page to show. 'Global community' shows every public " -"posting from an open distributed network that arrived on this server." +#: mod/settings.php:749 +msgid "Remove authorization" msgstr "" -#: mod/admin.php:1193 -msgid "Posts per user on community page" +#: mod/settings.php:761 +msgid "No Plugin settings configured" msgstr "" -#: mod/admin.php:1193 -msgid "" -"The maximum number of posts per user on the community page. (Not valid for " -"'Global Community')" +#: mod/settings.php:770 +msgid "Plugin Settings" msgstr "" -#: mod/admin.php:1194 -msgid "Enable OStatus support" +#: mod/settings.php:792 +msgid "Additional Features" msgstr "" -#: mod/admin.php:1194 -msgid "" -"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " -"communications in OStatus are public, so privacy warnings will be " -"occasionally displayed." +#: mod/settings.php:802 mod/settings.php:806 +msgid "General Social Media Settings" msgstr "" -#: mod/admin.php:1195 -msgid "OStatus conversation completion interval" +#: mod/settings.php:812 +msgid "Disable intelligent shortening" msgstr "" -#: mod/admin.php:1195 +#: mod/settings.php:814 msgid "" -"How often shall the poller check for new entries in OStatus conversations? " -"This can be a very ressource task." +"Normally the system tries to find the best link to add to shortened posts. " +"If this option is enabled then every shortened post will always point to the " +"original friendica post." msgstr "" -#: mod/admin.php:1196 -msgid "Only import OStatus threads from our contacts" +#: mod/settings.php:820 +msgid "Automatically follow any GNU Social (OStatus) followers/mentioners" msgstr "" -#: mod/admin.php:1196 +#: mod/settings.php:822 msgid "" -"Normally we import every content from our OStatus contacts. With this option " -"we only store threads that are started by a contact that is known on our " -"system." +"If you receive a message from an unknown OStatus user, this option decides " +"what to do. If it is checked, a new contact will be created for every " +"unknown user." msgstr "" -#: mod/admin.php:1197 -msgid "OStatus support can only be enabled if threading is enabled." +#: mod/settings.php:828 +msgid "Default group for OStatus contacts" msgstr "" -#: mod/admin.php:1199 -msgid "" -"Diaspora support can't be enabled because Friendica was installed into a sub " -"directory." +#: mod/settings.php:836 +msgid "Your legacy GNU Social account" msgstr "" -#: mod/admin.php:1200 -msgid "Enable Diaspora support" +#: mod/settings.php:838 +msgid "" +"If you enter your old GNU Social/Statusnet account name here (in the format " +"user@domain.tld), your contacts will be added automatically. The field will " +"be emptied when done." msgstr "" -#: mod/admin.php:1200 -msgid "Provide built-in Diaspora network compatibility." +#: mod/settings.php:841 +msgid "Repair OStatus subscriptions" msgstr "" -#: mod/admin.php:1201 -msgid "Only allow Friendica contacts" +#: mod/settings.php:850 mod/settings.php:851 +#, php-format +msgid "Built-in support for %s connectivity is %s" msgstr "" -#: mod/admin.php:1201 -msgid "" -"All contacts must use Friendica protocols. All other built-in communication " -"protocols disabled." +#: mod/settings.php:850 mod/settings.php:851 +msgid "enabled" msgstr "" -#: mod/admin.php:1202 -msgid "Verify SSL" +#: mod/settings.php:850 mod/settings.php:851 +msgid "disabled" msgstr "" -#: mod/admin.php:1202 -msgid "" -"If you wish, you can turn on strict certificate checking. This will mean you " -"cannot connect (at all) to self-signed SSL sites." +#: mod/settings.php:851 +msgid "GNU Social (OStatus)" msgstr "" -#: mod/admin.php:1203 -msgid "Proxy user" +#: mod/settings.php:885 +msgid "Email access is disabled on this site." msgstr "" -#: mod/admin.php:1204 -msgid "Proxy URL" +#: mod/settings.php:897 +msgid "Email/Mailbox Setup" msgstr "" -#: mod/admin.php:1205 -msgid "Network timeout" +#: mod/settings.php:898 +msgid "" +"If you wish to communicate with email contacts using this service " +"(optional), please specify how to connect to your mailbox." msgstr "" -#: mod/admin.php:1205 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +#: mod/settings.php:899 +msgid "Last successful email check:" msgstr "" -#: mod/admin.php:1206 -msgid "Maximum Load Average" +#: mod/settings.php:901 +msgid "IMAP server name:" msgstr "" -#: mod/admin.php:1206 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." +#: mod/settings.php:902 +msgid "IMAP port:" msgstr "" -#: mod/admin.php:1207 -msgid "Maximum Load Average (Frontend)" +#: mod/settings.php:903 +msgid "Security:" msgstr "" -#: mod/admin.php:1207 -msgid "Maximum system load before the frontend quits service - default 50." +#: mod/settings.php:903 mod/settings.php:908 +msgid "None" msgstr "" -#: mod/admin.php:1208 -msgid "Minimal Memory" +#: mod/settings.php:904 +msgid "Email login name:" msgstr "" -#: mod/admin.php:1208 -msgid "" -"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - " -"default 0 (deactivated)." +#: mod/settings.php:905 +msgid "Email password:" msgstr "" -#: mod/admin.php:1209 -msgid "Maximum table size for optimization" +#: mod/settings.php:906 +msgid "Reply-to address:" msgstr "" -#: mod/admin.php:1209 -msgid "" -"Maximum table size (in MB) for the automatic optimization - default 100 MB. " -"Enter -1 to disable it." +#: mod/settings.php:907 +msgid "Send public posts to all email contacts:" msgstr "" -#: mod/admin.php:1210 -msgid "Minimum level of fragmentation" +#: mod/settings.php:908 +msgid "Action after import:" msgstr "" -#: mod/admin.php:1210 -msgid "" -"Minimum fragmenation level to start the automatic optimization - default " -"value is 30%." +#: mod/settings.php:908 +msgid "Move to folder" msgstr "" -#: mod/admin.php:1212 -msgid "Periodical check of global contacts" +#: mod/settings.php:909 +msgid "Move to folder:" msgstr "" -#: mod/admin.php:1212 -msgid "" -"If enabled, the global contacts are checked periodically for missing or " -"outdated data and the vitality of the contacts and servers." +#: mod/settings.php:1005 +msgid "Display Settings" msgstr "" -#: mod/admin.php:1213 -msgid "Days between requery" +#: mod/settings.php:1011 mod/settings.php:1034 +msgid "Display Theme:" msgstr "" -#: mod/admin.php:1213 -msgid "Number of days after which a server is requeried for his contacts." +#: mod/settings.php:1012 +msgid "Mobile Theme:" msgstr "" -#: mod/admin.php:1214 -msgid "Discover contacts from other servers" +#: mod/settings.php:1013 +msgid "Suppress warning of insecure networks" msgstr "" -#: mod/admin.php:1214 +#: mod/settings.php:1013 msgid "" -"Periodically query other servers for contacts. You can choose between " -"'users': the users on the remote system, 'Global Contacts': active contacts " -"that are known on the system. The fallback is meant for Redmatrix servers " -"and older friendica servers, where global contacts weren't available. The " -"fallback increases the server load, so the recommened setting is 'Users, " -"Global Contacts'." +"Should the system suppress the warning that the current group contains " +"members of networks that can't receive non public postings." msgstr "" -#: mod/admin.php:1215 -msgid "Timeframe for fetching global contacts" +#: mod/settings.php:1014 +msgid "Update browser every xx seconds" msgstr "" -#: mod/admin.php:1215 -msgid "" -"When the discovery is activated, this value defines the timeframe for the " -"activity of the global contacts that are fetched from other servers." +#: mod/settings.php:1014 +msgid "Minimum of 10 seconds. Enter -1 to disable it." msgstr "" -#: mod/admin.php:1216 -msgid "Search the local directory" +#: mod/settings.php:1015 +msgid "Number of items to display per page:" msgstr "" -#: mod/admin.php:1216 -msgid "" -"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." +#: mod/settings.php:1015 mod/settings.php:1016 +msgid "Maximum of 100 items" msgstr "" -#: mod/admin.php:1218 -msgid "Publish server information" +#: mod/settings.php:1016 +msgid "Number of items to display per page when viewed from mobile device:" +msgstr "" + +#: mod/settings.php:1017 +msgid "Don't show emoticons" +msgstr "" + +#: mod/settings.php:1018 +msgid "Calendar" msgstr "" -#: mod/admin.php:1218 -msgid "" -"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 the-federation.info for details." +#: mod/settings.php:1019 +msgid "Beginning of week:" msgstr "" -#: mod/admin.php:1220 -msgid "Suppress Tags" +#: mod/settings.php:1020 +msgid "Don't show notices" msgstr "" -#: mod/admin.php:1220 -msgid "Suppress showing a list of hashtags at the end of the posting." +#: mod/settings.php:1021 +msgid "Infinite scroll" msgstr "" -#: mod/admin.php:1221 -msgid "Path to item cache" +#: mod/settings.php:1022 +msgid "Automatic updates only at the top of the network page" msgstr "" -#: mod/admin.php:1221 -msgid "The item caches buffers generated bbcode and external images." +#: mod/settings.php:1022 +msgid "" +"When disabled, the network page is updated all the time, which could be " +"confusing while reading." msgstr "" -#: mod/admin.php:1222 -msgid "Cache duration in seconds" +#: mod/settings.php:1023 +msgid "Bandwith Saver Mode" msgstr "" -#: mod/admin.php:1222 +#: mod/settings.php:1023 msgid "" -"How long should the cache files be hold? Default value is 86400 seconds (One " -"day). To disable the item cache, set the value to -1." +"When enabled, embedded content is not displayed on automatic updates, they " +"only show on page reload." msgstr "" -#: mod/admin.php:1223 -msgid "Maximum numbers of comments per post" +#: mod/settings.php:1025 +msgid "General Theme Settings" msgstr "" -#: mod/admin.php:1223 -msgid "How much comments should be shown for each post? Default value is 100." +#: mod/settings.php:1026 +msgid "Custom Theme Settings" msgstr "" -#: mod/admin.php:1224 -msgid "Temp path" +#: mod/settings.php:1027 +msgid "Content Settings" msgstr "" -#: mod/admin.php:1224 -msgid "" -"If you have a restricted system where the webserver can't access the system " -"temp path, enter another path here." +#: mod/settings.php:1028 view/theme/duepuntozero/config.php:67 +#: view/theme/frio/config.php:70 view/theme/quattro/config.php:73 +#: view/theme/vier/config.php:116 +msgid "Theme settings" msgstr "" -#: mod/admin.php:1225 -msgid "Base path to installation" +#: mod/settings.php:1112 +msgid "Account Types" msgstr "" -#: mod/admin.php:1225 -msgid "" -"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." +#: mod/settings.php:1113 +msgid "Personal Page Subtypes" msgstr "" -#: mod/admin.php:1226 -msgid "Disable picture proxy" +#: mod/settings.php:1114 +msgid "Community Forum Subtypes" msgstr "" -#: mod/admin.php:1226 -msgid "" -"The picture proxy increases performance and privacy. It shouldn't be used on " -"systems with very low bandwith." +#: mod/settings.php:1121 +msgid "Personal Page" msgstr "" -#: mod/admin.php:1227 -msgid "Only search in tags" +#: mod/settings.php:1122 +msgid "Account for a personal profile." msgstr "" -#: mod/admin.php:1227 -msgid "On large systems the text search can slow down the system extremely." +#: mod/settings.php:1125 +msgid "Organisation Page" msgstr "" -#: mod/admin.php:1229 -msgid "New base url" +#: mod/settings.php:1126 +msgid "" +"Account for an organisation that automatically approves contact requests as " +"\"Followers\"." msgstr "" -#: mod/admin.php:1229 +#: mod/settings.php:1129 +msgid "News Page" +msgstr "" + +#: mod/settings.php:1130 msgid "" -"Change base url for this server. Sends relocate message to all DFRN contacts " -"of all users." +"Account for a news reflector that automatically approves contact requests as " +"\"Followers\"." msgstr "" -#: mod/admin.php:1231 -msgid "RINO Encryption" +#: mod/settings.php:1133 +msgid "Community Forum" msgstr "" -#: mod/admin.php:1231 -msgid "Encryption layer between nodes." +#: mod/settings.php:1134 +msgid "Account for community discussions." msgstr "" -#: mod/admin.php:1233 -msgid "Maximum number of parallel workers" +#: mod/settings.php:1137 +msgid "Normal Account Page" msgstr "" -#: mod/admin.php:1233 +#: mod/settings.php:1138 msgid "" -"On shared hosters set this to 2. On larger systems, values of 10 are great. " -"Default value is 4." +"Account for a regular personal profile that requires manual approval of " +"\"Friends\" and \"Followers\"." msgstr "" -#: mod/admin.php:1234 -msgid "Don't use 'proc_open' with the worker" +#: mod/settings.php:1141 +msgid "Soapbox Page" msgstr "" -#: mod/admin.php:1234 +#: mod/settings.php:1142 msgid "" -"Enable this if your system doesn't allow the use of 'proc_open'. This can " -"happen on shared hosters. If this is enabled you should increase the " -"frequency of poller calls in your crontab." +"Account for a public profile that automatically approves contact requests as " +"\"Followers\"." msgstr "" -#: mod/admin.php:1235 -msgid "Enable fastlane" +#: mod/settings.php:1145 +msgid "Public Forum" msgstr "" -#: mod/admin.php:1235 -msgid "" -"When enabed, the fastlane mechanism starts an additional worker if processes " -"with higher priority are blocked by processes of lower priority." +#: mod/settings.php:1146 +msgid "Automatically approves all contact requests." msgstr "" -#: mod/admin.php:1236 -msgid "Enable frontend worker" +#: mod/settings.php:1149 +msgid "Automatic Friend Page" msgstr "" -#: mod/admin.php:1236 -#, php-format +#: mod/settings.php:1150 msgid "" -"When enabled the Worker process is triggered when backend access is " -"performed (e.g. messages being delivered). On smaller sites you might want " -"to call %s/worker on a regular basis via an external cron job. You should " -"only enable this option if you cannot utilize cron/scheduled jobs on your " -"server." +"Account for a popular profile that automatically approves contact requests " +"as \"Friends\"." msgstr "" -#: mod/admin.php:1266 -msgid "Update has been marked successful" +#: mod/settings.php:1153 +msgid "Private Forum [Experimental]" msgstr "" -#: mod/admin.php:1274 -#, php-format -msgid "Database structure update %s was successfully applied." +#: mod/settings.php:1154 +msgid "Requires manual approval of contact requests." msgstr "" -#: mod/admin.php:1277 -#, php-format -msgid "Executing of database structure update %s failed with error: %s" +#: mod/settings.php:1165 +msgid "OpenID:" msgstr "" -#: mod/admin.php:1291 -#, php-format -msgid "Executing %s failed with error: %s" +#: mod/settings.php:1165 +msgid "(Optional) Allow this OpenID to login to this account." msgstr "" -#: mod/admin.php:1294 -#, php-format -msgid "Update %s was successfully applied." +#: mod/settings.php:1173 +msgid "Publish your default profile in your local site directory?" msgstr "" -#: mod/admin.php:1297 -#, php-format -msgid "Update %s did not return a status. Unknown if it succeeded." +#: mod/settings.php:1173 +msgid "Your profile may be visible in public." msgstr "" -#: mod/admin.php:1300 -#, php-format -msgid "There was no additional update function %s that needed to be called." +#: mod/settings.php:1179 +msgid "Publish your default profile in the global social directory?" msgstr "" -#: mod/admin.php:1320 -msgid "No failed updates." +#: mod/settings.php:1186 +msgid "Hide your contact/friend list from viewers of your default profile?" msgstr "" -#: mod/admin.php:1321 -msgid "Check database structure" +#: mod/settings.php:1190 +msgid "" +"If enabled, posting public messages to Diaspora and other networks isn't " +"possible." msgstr "" -#: mod/admin.php:1326 -msgid "Failed Updates" +#: mod/settings.php:1195 +msgid "Allow friends to post to your profile page?" msgstr "" -#: mod/admin.php:1327 -msgid "" -"This does not include updates prior to 1139, which did not return a status." +#: mod/settings.php:1200 +msgid "Allow friends to tag your posts?" msgstr "" -#: mod/admin.php:1328 -msgid "Mark success (if update was manually applied)" +#: mod/settings.php:1205 +msgid "Allow us to suggest you as a potential friend to new members?" msgstr "" -#: mod/admin.php:1329 -msgid "Attempt to execute this update step automatically" +#: mod/settings.php:1210 +msgid "Permit unknown people to send you private mail?" msgstr "" -#: mod/admin.php:1363 -#, php-format -msgid "" -"\n" -"\t\t\tDear %1$s,\n" -"\t\t\t\tthe administrator of %2$s has set up an account for you." +#: mod/settings.php:1218 +msgid "Profile is not published." msgstr "" -#: mod/admin.php:1366 +#: mod/settings.php:1226 #, php-format -msgid "" -"\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\tThank you and welcome to %4$s." +msgid "Your Identity Address is '%s' or '%s'." msgstr "" -#: mod/admin.php:1410 -#, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" -msgstr[0] "" -msgstr[1] "" - -#: mod/admin.php:1417 -#, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" -msgstr[0] "" -msgstr[1] "" +#: mod/settings.php:1233 +msgid "Automatically expire posts after this many days:" +msgstr "" -#: mod/admin.php:1464 -#, php-format -msgid "User '%s' deleted" +#: mod/settings.php:1233 +msgid "If empty, posts will not expire. Expired posts will be deleted" msgstr "" -#: mod/admin.php:1472 -#, php-format -msgid "User '%s' unblocked" +#: mod/settings.php:1234 +msgid "Advanced expiration settings" msgstr "" -#: mod/admin.php:1472 -#, php-format -msgid "User '%s' blocked" +#: mod/settings.php:1235 +msgid "Advanced Expiration" msgstr "" -#: mod/admin.php:1580 mod/admin.php:1606 -msgid "Register date" +#: mod/settings.php:1236 +msgid "Expire posts:" msgstr "" -#: mod/admin.php:1580 mod/admin.php:1606 -msgid "Last login" +#: mod/settings.php:1237 +msgid "Expire personal notes:" msgstr "" -#: mod/admin.php:1580 mod/admin.php:1606 -msgid "Last item" +#: mod/settings.php:1238 +msgid "Expire starred posts:" msgstr "" -#: mod/admin.php:1589 -msgid "Add User" +#: mod/settings.php:1239 +msgid "Expire photos:" msgstr "" -#: mod/admin.php:1590 -msgid "select all" +#: mod/settings.php:1240 +msgid "Only expire posts by others:" msgstr "" -#: mod/admin.php:1591 -msgid "User registrations waiting for confirm" +#: mod/settings.php:1271 +msgid "Account Settings" msgstr "" -#: mod/admin.php:1592 -msgid "User waiting for permanent deletion" +#: mod/settings.php:1279 +msgid "Password Settings" msgstr "" -#: mod/admin.php:1593 -msgid "Request date" +#: mod/settings.php:1281 +msgid "Leave password fields blank unless changing" msgstr "" -#: mod/admin.php:1594 -msgid "No registrations." +#: mod/settings.php:1282 +msgid "Current Password:" msgstr "" -#: mod/admin.php:1595 -msgid "Note from the user" +#: mod/settings.php:1282 mod/settings.php:1283 +msgid "Your current password to confirm the changes" msgstr "" -#: mod/admin.php:1597 -msgid "Deny" +#: mod/settings.php:1283 +msgid "Password:" msgstr "" -#: mod/admin.php:1601 -msgid "Site admin" +#: mod/settings.php:1287 +msgid "Basic Settings" msgstr "" -#: mod/admin.php:1602 -msgid "Account expired" +#: mod/settings.php:1289 +msgid "Email Address:" msgstr "" -#: mod/admin.php:1605 -msgid "New User" +#: mod/settings.php:1290 +msgid "Your Timezone:" msgstr "" -#: mod/admin.php:1606 -msgid "Deleted since" +#: mod/settings.php:1291 +msgid "Your Language:" msgstr "" -#: mod/admin.php:1611 +#: mod/settings.php:1291 msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" +"Set the language we use to show you friendica interface and to send you " +"emails" msgstr "" -#: mod/admin.php:1612 -msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" +#: mod/settings.php:1292 +msgid "Default Post Location:" msgstr "" -#: mod/admin.php:1622 -msgid "Name of the new user." +#: mod/settings.php:1293 +msgid "Use Browser Location:" msgstr "" -#: mod/admin.php:1623 -msgid "Nickname" +#: mod/settings.php:1296 +msgid "Security and Privacy Settings" msgstr "" -#: mod/admin.php:1623 -msgid "Nickname of the new user." +#: mod/settings.php:1298 +msgid "Maximum Friend Requests/Day:" msgstr "" -#: mod/admin.php:1624 -msgid "Email address of the new user." +#: mod/settings.php:1298 mod/settings.php:1328 +msgid "(to prevent spam abuse)" msgstr "" -#: mod/admin.php:1667 -#, php-format -msgid "Plugin %s disabled." +#: mod/settings.php:1299 +msgid "Default Post Permissions" msgstr "" -#: mod/admin.php:1671 -#, php-format -msgid "Plugin %s enabled." +#: mod/settings.php:1300 +msgid "(click to open/close)" msgstr "" -#: mod/admin.php:1682 mod/admin.php:1934 -msgid "Disable" +#: mod/settings.php:1311 +msgid "Default Private Post" msgstr "" -#: mod/admin.php:1684 mod/admin.php:1936 -msgid "Enable" +#: mod/settings.php:1312 +msgid "Default Public Post" msgstr "" -#: mod/admin.php:1707 mod/admin.php:1983 -msgid "Toggle" +#: mod/settings.php:1316 +msgid "Default Permissions for New Posts" msgstr "" -#: mod/admin.php:1715 mod/admin.php:1992 -msgid "Author: " +#: mod/settings.php:1328 +msgid "Maximum private messages per day from unknown people:" msgstr "" -#: mod/admin.php:1716 mod/admin.php:1993 -msgid "Maintainer: " +#: mod/settings.php:1331 +msgid "Notification Settings" msgstr "" -#: mod/admin.php:1771 -msgid "Reload active plugins" +#: mod/settings.php:1332 +msgid "By default post a status message when:" msgstr "" -#: mod/admin.php:1776 -#, php-format -msgid "" -"There are currently no plugins available on your node. You can find the " -"official plugin repository at %1$s and might find other interesting plugins " -"in the open plugin registry at %2$s" +#: mod/settings.php:1333 +msgid "accepting a friend request" msgstr "" -#: mod/admin.php:1895 -msgid "No themes found." +#: mod/settings.php:1334 +msgid "joining a forum/community" msgstr "" -#: mod/admin.php:1974 -msgid "Screenshot" +#: mod/settings.php:1335 +msgid "making an interesting profile change" msgstr "" -#: mod/admin.php:2034 -msgid "Reload active themes" +#: mod/settings.php:1336 +msgid "Send a notification email when:" msgstr "" -#: mod/admin.php:2039 -#, php-format -msgid "No themes found on the system. They should be paced in %1$s" +#: mod/settings.php:1337 +msgid "You receive an introduction" msgstr "" -#: mod/admin.php:2040 -msgid "[Experimental]" +#: mod/settings.php:1338 +msgid "Your introductions are confirmed" msgstr "" -#: mod/admin.php:2041 -msgid "[Unsupported]" +#: mod/settings.php:1339 +msgid "Someone writes on your profile wall" msgstr "" -#: mod/admin.php:2065 -msgid "Log settings updated." +#: mod/settings.php:1340 +msgid "Someone writes a followup comment" msgstr "" -#: mod/admin.php:2097 -msgid "PHP log currently enabled." +#: mod/settings.php:1341 +msgid "You receive a private message" msgstr "" -#: mod/admin.php:2099 -msgid "PHP log currently disabled." +#: mod/settings.php:1342 +msgid "You receive a friend suggestion" msgstr "" -#: mod/admin.php:2108 -msgid "Clear" +#: mod/settings.php:1343 +msgid "You are tagged in a post" msgstr "" -#: mod/admin.php:2113 -msgid "Enable Debugging" +#: mod/settings.php:1344 +msgid "You are poked/prodded/etc. in a post" msgstr "" -#: mod/admin.php:2114 -msgid "Log file" +#: mod/settings.php:1346 +msgid "Activate desktop notifications" msgstr "" -#: mod/admin.php:2114 -msgid "" -"Must be writable by web server. Relative to your Friendica top-level " -"directory." +#: mod/settings.php:1346 +msgid "Show desktop popup on new notifications" msgstr "" -#: mod/admin.php:2115 -msgid "Log level" +#: mod/settings.php:1348 +msgid "Text-only notification emails" msgstr "" -#: mod/admin.php:2118 -msgid "PHP logging" +#: mod/settings.php:1350 +msgid "Send text only notification emails, without the html part" msgstr "" -#: mod/admin.php:2119 -msgid "" -"To enable logging of PHP errors and warnings you can add the following to " -"the .htconfig.php file of your installation. The filename set in the " -"'error_log' line is relative to the friendica top-level directory and must " -"be writeable by the web server. The option '1' for 'log_errors' and " -"'display_errors' is to enable these options, set to '0' to disable them." +#: mod/settings.php:1352 +msgid "Advanced Account/Page Type Settings" msgstr "" -#: mod/admin.php:2250 -#, php-format -msgid "Lock feature %s" +#: mod/settings.php:1353 +msgid "Change the behaviour of this account for special situations" msgstr "" -#: mod/admin.php:2258 -msgid "Manage Additional Features" +#: mod/settings.php:1356 +msgid "Relocate" msgstr "" -#: mod/community.php:22 -msgid "Not available." +#: mod/settings.php:1357 +msgid "" +"If you have moved this profile from another server, and some of your " +"contacts don't receive your updates, try pushing this button." msgstr "" -#: mod/dfrn_poll.php:113 mod/dfrn_poll.php:549 -#, php-format -msgid "%1$s welcomes %2$s" +#: mod/settings.php:1358 +msgid "Resend relocate message to contacts" msgstr "" -#: mod/display.php:493 -msgid "Item has been removed." +#: mod/subthread.php:106 +#, php-format +msgid "%1$s is following %2$s's %3$s" msgstr "" -#: mod/item.php:118 -msgid "Unable to locate original post." +#: mod/suggest.php:30 +msgid "Do you really want to delete this suggestion?" msgstr "" -#: mod/item.php:345 -msgid "Empty post discarded." +#: mod/suggest.php:74 +msgid "" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." msgstr "" -#: mod/item.php:899 -msgid "System error. Post not saved." +#: mod/suggest.php:87 mod/suggest.php:107 +msgid "Ignore/Hide" msgstr "" -#: mod/item.php:990 -#, php-format -msgid "" -"This message was sent to you by %s, a member of the Friendica social network." +#: mod/tagrm.php:46 +msgid "Tag removed" msgstr "" -#: mod/item.php:992 -#, php-format -msgid "You may visit them online at %s" +#: mod/tagrm.php:85 +msgid "Remove Item Tag" msgstr "" -#: mod/item.php:993 -msgid "" -"Please contact the sender by replying to this post if you do not wish to " -"receive these messages." +#: mod/tagrm.php:87 +msgid "Select a tag to remove: " msgstr "" -#: mod/item.php:997 -#, php-format -msgid "%s posted an update." +#: mod/uexport.php:39 +msgid "Export account" msgstr "" -#: mod/network.php:419 -#, php-format +#: mod/uexport.php:39 msgid "" -"Warning: This group contains %s member from a network that doesn't allow non " -"public messages." -msgid_plural "" -"Warning: This group contains %s members from a network that doesn't allow " -"non public messages." -msgstr[0] "" -msgstr[1] "" +"Export your account info and contacts. Use this to make a backup of your " +"account and/or to move it to another server." +msgstr "" -#: mod/network.php:422 -msgid "Messages in this group won't be send to these receivers." +#: mod/uexport.php:40 +msgid "Export all" msgstr "" -#: mod/network.php:550 -msgid "Private messages to this person are at risk of public disclosure." +#: mod/uexport.php:40 +msgid "" +"Export your accout info, contacts and all your items as json. Could be a " +"very big file, and could take a lot of time. Use this to make a full backup " +"of your account (photos are not exported)" msgstr "" -#: mod/network.php:555 -msgid "Invalid contact." +#: mod/unfollow.php:33 +msgid "Contact wasn't found or can't be unfollowed." msgstr "" -#: mod/network.php:848 -msgid "Commented Order" +#: mod/unfollow.php:47 +msgid "Contact unfollowed" msgstr "" -#: mod/network.php:851 -msgid "Sort by Comment Date" +#: mod/unfollow.php:73 +msgid "You aren't a friend of this contact." msgstr "" -#: mod/network.php:856 -msgid "Posted Order" +#: mod/unfollow.php:79 +msgid "Unfollowing is currently not supported by your network." msgstr "" -#: mod/network.php:859 -msgid "Sort by Post Date" +#: mod/videos.php:127 +msgid "Do you really want to delete this video?" msgstr "" -#: mod/network.php:870 -msgid "Posts that mention or involve you" +#: mod/videos.php:132 +msgid "Delete Video" msgstr "" -#: mod/network.php:878 -msgid "New" +#: mod/videos.php:211 +msgid "No videos selected" msgstr "" -#: mod/network.php:881 -msgid "Activity Stream - by date" +#: mod/videos.php:405 +msgid "Recent Videos" msgstr "" -#: mod/network.php:889 -msgid "Shared Links" +#: mod/videos.php:407 +msgid "Upload New Videos" msgstr "" -#: mod/network.php:892 -msgid "Interesting Links" +#: mod/wallmessage.php:45 mod/wallmessage.php:109 +#, php-format +msgid "Number of daily wall messages for %s exceeded. Message failed." msgstr "" -#: mod/network.php:900 -msgid "Starred" +#: mod/wallmessage.php:56 +msgid "Unable to check your home location." msgstr "" -#: mod/network.php:903 -msgid "Favourite Posts" +#: mod/wallmessage.php:83 mod/wallmessage.php:92 +msgid "No recipient." msgstr "" -#: mod/profile.php:176 -msgid "Tips for New Members" +#: mod/wallmessage.php:130 +#, php-format +msgid "" +"If you wish for %s to respond, please check that the privacy settings on " +"your site allow private mail from unknown senders." msgstr "" -#: object/Item.php:355 +#: object/Item.php:348 msgid "via" msgstr "" -#: view/theme/duepuntozero/config.php:47 +#: view/theme/duepuntozero/config.php:48 msgid "greenzero" msgstr "" -#: view/theme/duepuntozero/config.php:48 +#: view/theme/duepuntozero/config.php:49 msgid "purplezero" msgstr "" -#: view/theme/duepuntozero/config.php:49 +#: view/theme/duepuntozero/config.php:50 msgid "easterbunny" msgstr "" -#: view/theme/duepuntozero/config.php:50 +#: view/theme/duepuntozero/config.php:51 msgid "darkzero" msgstr "" -#: view/theme/duepuntozero/config.php:51 +#: view/theme/duepuntozero/config.php:52 msgid "comix" msgstr "" -#: view/theme/duepuntozero/config.php:52 +#: view/theme/duepuntozero/config.php:53 msgid "slackr" msgstr "" -#: view/theme/duepuntozero/config.php:67 +#: view/theme/duepuntozero/config.php:68 msgid "Variations" msgstr "" @@ -8850,167 +8873,167 @@ msgstr "" msgid "Resize to best fit and retain aspect ratio." msgstr "" -#: view/theme/frio/config.php:50 +#: view/theme/frio/config.php:51 msgid "Default" msgstr "" -#: view/theme/frio/config.php:62 +#: view/theme/frio/config.php:63 msgid "Note: " msgstr "" -#: view/theme/frio/config.php:62 +#: view/theme/frio/config.php:63 msgid "Check image permissions if all users are allowed to visit the image" msgstr "" -#: view/theme/frio/config.php:70 +#: view/theme/frio/config.php:71 msgid "Select scheme" msgstr "" -#: view/theme/frio/config.php:71 +#: view/theme/frio/config.php:72 msgid "Navigation bar background color" msgstr "" -#: view/theme/frio/config.php:72 +#: view/theme/frio/config.php:73 msgid "Navigation bar icon color " msgstr "" -#: view/theme/frio/config.php:73 +#: view/theme/frio/config.php:74 msgid "Link color" msgstr "" -#: view/theme/frio/config.php:74 +#: view/theme/frio/config.php:75 msgid "Set the background color" msgstr "" -#: view/theme/frio/config.php:75 +#: view/theme/frio/config.php:76 msgid "Content background transparency" msgstr "" -#: view/theme/frio/config.php:76 +#: view/theme/frio/config.php:77 msgid "Set the background image" msgstr "" -#: view/theme/frio/theme.php:230 +#: view/theme/frio/theme.php:231 msgid "Guest" msgstr "" -#: view/theme/frio/theme.php:236 +#: view/theme/frio/theme.php:237 msgid "Visitor" msgstr "" -#: view/theme/quattro/config.php:73 +#: view/theme/quattro/config.php:74 msgid "Alignment" msgstr "" -#: view/theme/quattro/config.php:73 +#: view/theme/quattro/config.php:74 msgid "Left" msgstr "" -#: view/theme/quattro/config.php:73 +#: view/theme/quattro/config.php:74 msgid "Center" msgstr "" -#: view/theme/quattro/config.php:74 +#: view/theme/quattro/config.php:75 msgid "Color scheme" msgstr "" -#: view/theme/quattro/config.php:75 +#: view/theme/quattro/config.php:76 msgid "Posts font size" msgstr "" -#: view/theme/quattro/config.php:76 +#: view/theme/quattro/config.php:77 msgid "Textareas font size" msgstr "" -#: view/theme/vier/config.php:70 +#: view/theme/vier/config.php:71 msgid "Comma separated list of helper forums" msgstr "" -#: view/theme/vier/config.php:116 +#: view/theme/vier/config.php:117 msgid "Set style" msgstr "" -#: view/theme/vier/config.php:117 +#: view/theme/vier/config.php:118 msgid "Community Pages" msgstr "" -#: view/theme/vier/config.php:118 view/theme/vier/theme.php:143 +#: view/theme/vier/config.php:119 view/theme/vier/theme.php:144 msgid "Community Profiles" msgstr "" -#: view/theme/vier/config.php:119 +#: view/theme/vier/config.php:120 msgid "Help or @NewHere ?" msgstr "" -#: view/theme/vier/config.php:120 view/theme/vier/theme.php:384 +#: view/theme/vier/config.php:121 view/theme/vier/theme.php:385 msgid "Connect Services" msgstr "" -#: view/theme/vier/config.php:121 view/theme/vier/theme.php:191 +#: view/theme/vier/config.php:122 view/theme/vier/theme.php:192 msgid "Find Friends" msgstr "" -#: view/theme/vier/config.php:122 view/theme/vier/theme.php:173 +#: view/theme/vier/config.php:123 view/theme/vier/theme.php:174 msgid "Last users" msgstr "" -#: view/theme/vier/theme.php:192 +#: view/theme/vier/theme.php:193 msgid "Local Directory" msgstr "" -#: view/theme/vier/theme.php:284 +#: view/theme/vier/theme.php:285 msgid "Quick Start" msgstr "" -#: src/App.php:527 +#: src/App.php:523 msgid "Delete this item?" msgstr "" -#: src/App.php:529 +#: src/App.php:525 msgid "show fewer" msgstr "" -#: boot.php:735 +#: boot.php:724 #, php-format msgid "Update %s failed. See error logs." msgstr "" -#: boot.php:847 +#: boot.php:836 msgid "Create a New Account" msgstr "" -#: boot.php:875 +#: boot.php:864 msgid "Password: " msgstr "" -#: boot.php:876 +#: boot.php:865 msgid "Remember me" msgstr "" -#: boot.php:879 +#: boot.php:868 msgid "Or login using OpenID: " msgstr "" -#: boot.php:885 +#: boot.php:874 msgid "Forgot your password?" msgstr "" -#: boot.php:888 +#: boot.php:877 msgid "Website Terms of Service" msgstr "" -#: boot.php:889 +#: boot.php:878 msgid "terms of service" msgstr "" -#: boot.php:891 +#: boot.php:880 msgid "Website Privacy Policy" msgstr "" -#: boot.php:892 +#: boot.php:881 msgid "privacy policy" msgstr "" -#: index.php:436 +#: index.php:437 msgid "toggle mobile" msgstr "" diff --git a/view/templates/saved_searches_aside.tpl b/view/templates/saved_searches_aside.tpl index e4aba94aa3..28a7ed58aa 100644 --- a/view/templates/saved_searches_aside.tpl +++ b/view/templates/saved_searches_aside.tpl @@ -7,7 +7,7 @@ {{foreach $saved as $search}} {{/foreach}} diff --git a/view/theme/frio/templates/saved_searches_aside.tpl b/view/theme/frio/templates/saved_searches_aside.tpl index da4cd1541a..fea9794ad5 100644 --- a/view/theme/frio/templates/saved_searches_aside.tpl +++ b/view/theme/frio/templates/saved_searches_aside.tpl @@ -7,7 +7,7 @@ {{foreach $saved as $search}} {{/foreach}} diff --git a/view/theme/quattro/templates/saved_searches_aside.tpl b/view/theme/quattro/templates/saved_searches_aside.tpl index 007d1d956e..c310d98ca7 100644 --- a/view/theme/quattro/templates/saved_searches_aside.tpl +++ b/view/theme/quattro/templates/saved_searches_aside.tpl @@ -4,7 +4,7 @@