diff --git a/INSTALL.txt b/INSTALL.txt
index 592d3f555..4a88ac841 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 c3ad39cd5..32fee4f50 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 06ae77352..cda58fa6f 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 344117c56..538641f1b 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 aeb0c9202..dd7ab8047 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 7d480ab02..a4477c8cb 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 f02ee130a..78d448fbc 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)
- );
- 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",
+ $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1));
- 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'])
- );
+ $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 = 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 e7c320e62..45c9ed255 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 be4667a29..a14e3ee8e 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 ccac49b63..8b0fab77a 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 53316e464..437fedd53 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 c94522829..bc3802935 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();
+ /**
+ * @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 (!$this->db || !$this->connected) {
- return false;
+ if (is_bool($ret)) {
+ return $ret;
}
- $this->error = '';
+ $columns = self::columnCount($ret);
- $connstr = ($this->connected() ? "Connected" : "Disonnected");
+ $data = self::inArray($ret);
- $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.
- */
-
- 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($result)) {
- return $result;
- }
- if ($onlyquery) {
- $this->result = $result;
+ if ((count($data) == 0) && ($columns == 0)) {
return true;
}
- $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;
- }
-
- // 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)) {
- 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);
-function dbesc_array(&$arr) {
- if (is_array($arr) && count($arr)) {
- array_walk($arr,'dbesc_array_cb');
+ $data = dba::inArray($ret);
+
+ if ((count($data) == 0) && ($columns == 0)) {
+ return true;
}
+
+ return $data;
}
function dba_timer() {
diff --git a/include/dbstructure.php b/include/dbstructure.php
index a2599fc39..4d615a2f1 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 4c8f828af..9a821a9d9 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 1907c0d5a..63958f30b 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 62328c01f..10723fb41 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 eb9f44c3e..4b6164162 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 6800663b5..d6b160111 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)
- );
+ $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);
- $r = q("SELECT * FROM `conv` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($conv_guid),
- intval($recipient['uid'])
- );
-
-
- 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 809a48cd0..19392b917 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` != ?",
- $importer["uid"], $addr, NETWORK_STATUSNET);
+ }
- if (dbm::is_result($contact)) {
- $author["contact-id"] = $contact["id"];
- $author["author-link"] = $contact["url"];
+ 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($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) {
- /// @todo this function is too long. It has to be split in many parts
+ 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?
+ */
+ 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');
- $header["protocol"] = PROTOCOL_OSTATUS_SALMON;
}
- $conversation = "";
- $conversationlist = array();
- $item_id = 0;
+
+ 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;
+ }
+
+ // 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;
-
// 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]';
- }
-
- 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["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));
+ // Delete a message
+ if (in_array($item["verb"], array('qvitter-delete-notice', ACTIVITY_DELETE, 'delete'))) {
+ self::deleteNotice($item);
continue;
}
+ 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;
+ }
+
+ // 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,264 +434,634 @@ 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));
+ logger("Unhandled verb ".$item["verb"]." ".print_r($item, true), LOGGER_DEBUG);
}
- $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;
+ self::processPost($xpath, $entry, $item, $importer);
+
+ 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');
}
- if ($attributes->name == "href") {
- $item['conversation-href'] = $attributes->textContent;
+ 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;
+ }
+ }
+ }
+ } else {
+ // But we will only import complete threads
+ $valid = dba::exists('item', array('uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri']));
+ }
+
+ 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'];
+ }
+ }
+ 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;
+ }
+
+ private static function deleteNotice($item) {
+
+ $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;
+ }
+
+ // 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"]));
+
+ delete_thread($deleted["id"], $deleted["parent-uri"]);
+
+ logger('Deleted item with uri '.$item['uri'].' for user '.$item['uid']);
+ }
+
+ /**
+ * @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;
+ }
+ }
+ }
+
+ $related = "";
+
+ $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;
+ }
+ }
+ }
+
+ $georsspoint = $xpath->query('georss:point', $entry);
+ if (!empty($georsspoint) && ($georsspoint->length > 0)) {
+ $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"] .= ',';
+ }
+ $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
}
}
}
+ }
- $related = "";
+ $self = '';
+ $add_body = '';
+
+ $links = $xpath->query('atom:link', $entry);
+ if ($links) {
+ $link_data = self::processLinks($links, $item);
+ $self = $link_data['self'];
+ $add_body = $link_data['add_body'];
+ }
+
+ $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 == "repeat_of") {
+ $repeat_of = $attributes->textContent;
+ }
+ }
+ }
+ // 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'];
+ }
+ }
+
+ $item["body"] .= $add_body;
+
+ // 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"]);
+ }
+
+ // 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]';
+ }
+
+ if (($self != '') && empty($item['protocol'])) {
+ self::fetchSelf($self, $item);
+ }
+
+ if (!empty($item["conversation-href"])) {
+ self::fetchConversation($item['conversation-href'], $item['conversation-uri']);
+ }
+
+ 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);
+ }
+
+ $item["type"] = 'remote-comment';
+ $item["gravity"] = GRAVITY_COMMENT;
+ } else {
+ $item["parent-uri"] = $item["uri"];
+ }
+
+ if (($item['author-link'] != '') && !empty($item['protocol'])) {
+ $item = store_conversation($item);
+ }
+
+ self::$itemlist[] = $item;
+ }
+
+ /**
+ * @brief Fetch the conversation for posts
+ *
+ * @param string $conversation The link to the conversation
+ * @param string $conversation_uri The conversation in "uri" format
+ */
+ private static function fetchConversation($conversation, $conversation_uri) {
+
+ // Ensure that we only store a conversation once in a process
+ if (isset(self::$conv_list[$conversation])) {
+ return;
+ }
+
+ self::$conv_list[$conversation] = true;
+
+ $conversation_data = z_fetch_url($conversation, false, $redirects, array('accept_content' => 'application/atom+xml'));
+
+ if (!$conversation_data['success']) {
+ return;
+ }
+
+ $xml = '';
+
+ if (stristr($conversation_data['header'], 'Content-Type: application/atom+xml')) {
+ $xml = $conversation_data['body'];
+ }
+
+ if ($xml == '') {
+ $doc = new DOMDocument();
+ if (!@$doc->loadHTML($conversation_data['body'])) {
+ return;
+ }
+ $xpath = new DomXPath($doc);
+
+ $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 ($conversation_atom['success']) {
+ $xml = $conversation_atom['body'];
+ }
+ }
+ }
+ }
+
+ if ($xml == '') {
+ return;
+ }
+
+ self::storeConversation($xml, $conversation, $conversation_uri);
+ }
+
+ /**
+ * @brief Store a feed in several conversation entries
+ *
+ * @param string $xml The feed
+ */
+ private static function storeConversation($xml, $conversation = '', $conversation_uri = '') {
+ $doc = new DOMDocument();
+ @$doc->loadXML($xml);
+
+ $xpath = new DomXPath($doc);
+ $xpath->registerNamespace('atom', NAMESPACE_ATOM1);
+ $xpath->registerNamespace('thr', NAMESPACE_THREAD);
+ $xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS);
+
+ $entries = $xpath->query('/atom:feed/atom:entry');
+
+ // Now store the entries
+ foreach ($entries AS $entry) {
+ $doc2 = new DOMDocument();
+ $doc2->preserveWhiteSpace = false;
+ $doc2->formatOutput = true;
+
+ $conv_data = array();
+
+ $conv_data['protocol'] = PROTOCOL_SPLITTED_CONV;
+ $conv_data['network'] = NETWORK_OSTATUS;
+ $conv_data['uri'] = $xpath->query('atom:id/text()', $entry)->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;
+ $conv_data['reply-to-uri'] = $attributes->textContent;
+ }
+ }
+ }
+
+ $conv = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+ $conv_data['conversation-uri'] = $conv;
+
+ $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") {
- $related = $attributes->textContent;
+ $conv_data['conversation-href'] = $attributes->textContent;
}
}
}
- $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"] .= ',';
- }
- $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
- }
- }
- }
+ if ($conversation != '') {
+ $conv_data['conversation-uri'] = $conversation;
}
- $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 ($conversation_uri != '') {
+ $conv_data['conversation-uri'] = $conversation_uri;
}
- $local_id = "";
- $repeat_of = "";
+ $entry = $doc2->importNode($entry, true);
- $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;
- }
- }
+ $doc2->appendChild($entry);
+
+ $conv_data['source'] = $doc2->saveXML();
+
+ $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']));
}
- // Is it a repeated post?
- if (($repeat_of != "") || ($item["verb"] == ACTIVITY_SHARE)) {
- $activityobjects = $xpath->query('activity:object', $entry)->item(0);
-
- if (is_object($activityobjects)) {
-
- $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;
-
- $orig_contact = $contact;
- $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false);
-
- $item["author-name"] = $orig_author["author-name"];
- $item["author-link"] = $orig_author["author-link"];
- $item["author-avatar"] = $orig_author["author-avatar"];
-
- $item["body"] = add_page_info_to_body(html2bbcode($orig_body));
- $item["created"] = $orig_created;
- $item["edited"] = $orig_edited;
-
- $item["uri"] = $orig_uri;
-
- if (!isset($item["plink"])) {
- $item["plink"] = $orig_link;
- }
-
- $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue;
-
- $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;
- }
-
- $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]';
- }
- }
- }
- }
- }
-
- //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";
-
- if ($reply_path != $related) {
- logger("Fetching related items for user ".$importer["uid"]." from ".$reply_path, LOGGER_DEBUG);
- $reply_xml = fetch_url($reply_path);
-
- $reply_contact = $contact;
- self::import($reply_xml,$importer,$reply_contact, $reply_hub);
-
- // 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"]));
- }
- }
- if (dbm::is_result($r)) {
- $item["type"] = 'remote-comment';
- $item["gravity"] = GRAVITY_COMMENT;
- }
- } 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;
- }
-
- logger("Item was stored with id ".$item_id, LOGGER_DEBUG);
+ logger('Store conversation data for uri '.$conv_data['uri'], LOGGER_DEBUG);
+ store_conversation($conv_data);
}
}
/**
+ * @brief Fetch the own post so that it can be stored later
+ * @param array $item The item array
+ *
+ * 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.
+ *
+ * @param string $self The link to the self item
+ */
+ 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;
+ }
+
+ $self_data = z_fetch_url($self);
+
+ if (!$self_data['success']) {
+ return;
+ }
+
+ // 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();
+
+ $item["protocol"] = PROTOCOL_OSTATUS_SALMON;
+ $item["source"] = $xml;
+
+ logger('Conversation '.$item['uri'].' is now fetched.', LOGGER_DEBUG);
+ }
+
+ /**
+ * @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;
+ }
+ 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));
+ }
+ }
+
+ $stored = false;
+ $related_data = z_fetch_url($related, false, $redirects, array('accept_content' => 'application/atom+xml'));
+
+ if (!$related_data['success']) {
+ return;
+ }
+
+ $xml = '';
+
+ if (stristr($related_data['header'], 'Content-Type: application/atom+xml')) {
+ logger('Directly fetched XML for URI '.$related_uri, LOGGER_DEBUG);
+ $xml = $related_data['body'];
+ }
+
+ if ($xml == '') {
+ $doc = new DOMDocument();
+ if (!@$doc->loadHTML($related_data['body'])) {
+ return;
+ }
+ $xpath = new DomXPath($doc);
+
+ $atom_file = '';
+
+ $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);
+
+ if ($related_atom['success']) {
+ logger('Fetched XML for URI '.$related_uri, LOGGER_DEBUG);
+ $xml = $related_atom['body'];
+ }
+ }
+ }
+ }
+
+ // Workaround for older GNU Social servers
+ if (($xml == '') && strstr($related, '/notice/')) {
+ $related_atom = z_fetch_url(str_replace('/notice/', '/api/statuses/show/', $related).'.atom');
+
+ if ($related_atom['success']) {
+ logger('GNU Social workaround to fetch XML for URI '.$related_uri, LOGGER_DEBUG);
+ $xml = $related_atom['body'];
+ }
+ }
+
+ // 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 ($related_atom['success']) {
+ logger('GNU Social workaround 2 to fetch XML for URI '.$related_uri, LOGGER_DEBUG);
+ $xml = $related_atom['body'];
+ }
+ }
+
+ // 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'];
+ }
+ }
+
+ 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;
+ }
+
+ /**
+ * @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);
+
+ if (!is_object($activityobjects)) {
+ return array();
+ }
+
+ $link_data = array();
+
+ $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue;
+
+ $links = $xpath->query("atom:link", $activityobjects);
+ if ($links) {
+ $link_data = self::processLinks($links, $item);
+ }
+
+ $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;
+
+ $orig_contact = $contact;
+ $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false);
+
+ $item["author-name"] = $orig_author["author-name"];
+ $item["author-link"] = $orig_author["author-link"];
+ $item["author-avatar"] = $orig_author["author-avatar"];
+
+ $item["body"] = html2bbcode($orig_body);
+ $item["created"] = $orig_created;
+ $item["edited"] = $orig_edited;
+
+ $item["uri"] = $orig_uri;
+
+ $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue;
+
+ $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue;
+
+ $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;
+ }
+ }
+ }
+
+ return $link_data;
+ }
+
+ /**
+ * @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;
+ }
+ }
+ }
+ return $link_data;
+ }
+
+/**
* @brief Create an url out of an uri
*
* @param string $href URI in the format "parameter1:parameter1:..."
@@ -690,673 +1091,6 @@ class ostatus {
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');
-
- $poll_interval = intval(get_config('system','ostatus_poll_interval'));
- if (!$poll_interval) {
- $poll_interval = self::OSTATUS_DEFAULT_POLL_INTERVAL;
- }
-
- // Don't poll if the interval is set negative
- if (($poll_interval < 0) && !$override) {
- return;
- }
-
- 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 ($last && !$override) {
- $next = $last + ($poll_interval * 60);
- if ($next > time()) {
- logger('poll interval not reached');
- return;
- }
- }
-
- 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));
- } 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));
- }
-
- foreach ($conversations AS $conversation) {
- self::completion($conversation['url'], $conversation['uid']);
- }
-
- logger('cron_end');
-
- set_config('system','ostatus_last_poll', time());
- }
-
- /**
- * @brief Updates the gcontact table with actor data from the conversation
- *
- * @param object $actor The actor object that contains the contact data
- */
- 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;
-
- 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;
-
- if (isset($actor->id))
- $contact["alias"] = $actor->id;
-
- if (isset($actor->summary))
- $contact["about"] = $actor->summary;
-
- if (isset($actor->portablecontacts_net->note))
- $contact["about"] = $actor->portablecontacts_net->note;
-
- if (isset($actor->portablecontacts_net->addresses->formatted))
- $contact["location"] = $actor->portablecontacts_net->addresses->formatted;
-
-
- if (isset($actor->image->url))
- $contact["photo"] = $actor->image->url;
-
- if (isset($actor->image->width))
- $avatarwidth = $actor->image->width;
-
- 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;
- }
- }
-
- $contact["hide"] = false; // OStatus contacts are never hidden
- update_gcontact($contact);
- }
-
- /**
- * @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
- *
- * @return string The conversation url
- */
- 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);
-
- $raw = fetch_url($json);
- if ($raw == "")
- return "";
-
- $data = json_decode($raw);
- if (!is_object($data))
- return "";
-
- $conversation_id = $data->statusnet_conversation_id;
-
- $pos = strpos($self, "/api/statuses/show/");
- $base_url = substr($self, 0, $pos);
-
- return $base_url."/conversation/".$conversation_id;
- }
-
- /**
- * @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;
- }
- }
- 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();
-
- $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
- $uid, normalise_link($actor), NETWORK_STATUSNET);
-
- 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 ($contact) {
- logger("Found contact for url ".$actor, LOGGER_DEBUG);
- $details["contact_id"] = $contact[0]["id"];
- $details["network"] = $contact[0]["network"];
-
- $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);
-
- // Adding a global contact
- /// @TODO Use this data for the post
- $details["global_contact_id"] = get_contact($actor, 0);
-
- logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG);
-
- $details["contact_id"] = $contact_id;
- $details["network"] = NETWORK_OSTATUS;
-
- $details["not_following"] = true;
- }
-
- return $details;
- }
-
- /**
- * @brief Stores an item and completes the thread
- *
- * @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
- *
- * @return integer The item id of the posted item array
- */
- 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;
- }
- }
-
- $items = array_reverse($items);
-
- $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self`", intval($uid));
- $importer = $r[0];
-
- $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"] != "")) {
-
- $new_parent = true;
-
- $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;
- }
- }
-
- $parent_uri = $parent["uri"];
-
- // "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;
- }
-
- // 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;
- }
-
- $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];
-
- // 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);
-
- // 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"]));
-
- // 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"]));
-
- // 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"]));
-
- // 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"]));
-
- // Now delete the thread
- delete_thread($existing_message["parent"]);
- }
- }
-
- // 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;
- }
-
- 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"]);
-
- // 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;
- }
-
- /// @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;
- }
-
- 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";
- }
-
- $arr["source"] = json_encode($single_conv);
- $arr["protocol"] = PROTOCOL_GS_CONVERSATION;
-
- $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);
-
- // 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];
-
- // 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 (isset($single_conv->object->actor->url)) {
- logger("Found reshared item ".$single_conv->object->id);
-
- // $single_conv->object->context->conversation;
-
- 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;
-
- $arr["created"] = $single_conv->object->published;
- $arr["edited"] = $single_conv->object->published;
-
- $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"]);
-
- $arr["app"] = $single_conv->object->provider->displayName."#";
- //$arr["verb"] = $single_conv->object->verb;
-
- $arr["location"] = $single_conv->object->location->displayName;
- $arr["coord"] = trim($single_conv->object->location->lat." ".$single_conv->object->location->lon);
- }
- }
-
- if ($arr["location"] == "")
- unset($arr["location"]);
-
- if ($arr["coord"] == "")
- unset($arr["coord"]);
-
- // 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);
- }
-
- 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];
- }
- }
-
- if (($item_stored < 0) && (count($item) > 0)) {
-
- 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;
- }
- }
-
- $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;
- }
-
- /**
- * @brief Stores conversation data into the database
- *
- * @param integer $itemid The id of the item
- * @param string $conversation_url The uri of the conversation
- */
- private static function store_conversation($itemid, $conversation_url) {
-
- $conversation_url = self::convert_href($conversation_url);
-
- $messages = q("SELECT `uid`, `parent`, `created`, `received`, `guid` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
- if (!$messages)
- return;
- $message = $messages[0];
-
- // 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 (!$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);
- }
- }
-
/**
* @brief Checks if the current post is a reshare
*
diff --git a/include/photos.php b/include/photos.php
index 6e0002bd4..49ba83fa3 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 9758ab946..d43257fc9 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 5194e7ef0..af871b28a 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 621085b0e..f0a855d70 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);
+ $condition = array('`nurl` = ? AND (`generation` = 0 OR `generation` >= ?)',
+ normalise_link($contact["url"]), $contact["generation"]);
+ $contact["updated"] = dbm::date($contact["updated"]);
- 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"]));
+ $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 9b7b47a77..66d4f17ea 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 4cb881569..8e58a04b3 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 4ed5e57f3..a05bd831a 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 5b4cea756..d3d2e42ae 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 c5043f225..ee95a180a 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 bbbd088cd..253936055 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 4d35d46c7..4bccf1142 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 9c64c8c88..0e99b26c3 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,17 +360,15 @@ 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 cb0b1f4cd..9e004ab5d 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 56f7aa644..37d3a123a 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 4f2b45e3b..a76a0f188 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 a2e69ffb0..e7e1a33bd 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 796d35b86..a78500174 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';
+
+ }
+
+ // 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']));
+}
+
+/**
+ * @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;
+
+ $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) {
-
- require_once('include/conversation.php');
-
- if (! local_user()) {
+ 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 = '';
- } 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);
+
+ // Normal conversation view
+ if ($order === 'post') {
+ $ordering = "`created`";
+ if ($sql_order == "") {
+ $order_mode = "created";
+ }
+ } else {
+ $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;
-
- $a->set_pager_itemspage($itemspage_network);
- $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
}
- if ($nouveau) {
- $simple_update = (($update) ? " AND `item`.`unseen` " : '');
+ if ($sql_order == "") {
+ $sql_order = "$sql_table.$ordering";
+ }
- if ($sql_order == "")
- $sql_order = "`item`.`id`";
+ if (($_GET["offset"] != "")) {
+ $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
+ }
- // "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 {
-
- // Normal conversation view
- if($order === 'post') {
- $ordering = "`created`";
- if ($sql_order == "")
- $order_mode = "created";
- } else {
- $ordering = "`commented`";
- if ($sql_order == "")
- $order_mode = "commented";
- }
-
- if ($sql_order == "")
- $sql_order = "$sql_table.$ordering";
-
- if (($_GET["offset"] != ""))
- $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
-
- 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;
- }
-
- // 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())
- );
- }
-
- // Then fetch all the children of the parents that are on this page
-
- $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'];
-
- $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));
+ 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']));
}
- $items = conv_sort($items,$ordering);
+ 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;
+ }
+
+ // 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 {
- $items = array();
+ $sql_extra4 = "";
}
- 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) . ' )';
+ $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())
+ );
}
+ // Then fetch all the children of the parents that are on this page
+
+ $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'];
+ }
+ }
+
+ $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;
+ }
+
+ $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));
+ }
+ }
+ $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;
+
// 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;
+ networkSetSeen($condition);
- $mode = (($nouveau) ? 'network-new' : 'network');
-
- $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 5cc2734c8..e889d5a94 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 3c5fdd7be..5896c90ba 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 ac54e0e09..6c9f4bd66 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 5a5bdcd58..59fa52121 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 42f458756..4a1d1ad93 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 20d02af85..d6f76da70 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 1975a05bf..ee652ee8a 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 c98e1b99b..9970d3259 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 19e89f05b..e71c72695 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 000000000..d0baf87c4
--- /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 8bf1fdbf1..9f455a19f 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 6bf75bd81..ac518cbd4 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 f81b8ea4e..816406e4e 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 2eedd7c1b..675918eb2 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,674 +549,15 @@ msgstr ""
msgid "Ask me"
msgstr ""
-#: include/NotificationsManager.php:155
-msgid "System"
-msgstr ""
-
-#: include/NotificationsManager.php:162 include/nav.php:160 mod/admin.php:587
-#: view/theme/frio/theme.php:259
-msgid "Network"
-msgstr ""
-
-#: include/NotificationsManager.php:169 mod/profiles.php:699
-#: mod/network.php:867
-msgid "Personal"
-msgstr ""
-
-#: include/NotificationsManager.php:176 include/nav.php:107 include/nav.php:163
-msgid "Home"
-msgstr ""
-
-#: include/NotificationsManager.php:183 include/nav.php:168
-msgid "Introductions"
-msgstr ""
-
-#: include/NotificationsManager.php:241 include/NotificationsManager.php:253
-#, php-format
-msgid "%s commented on %s's post"
-msgstr ""
-
-#: include/NotificationsManager.php:252
-#, php-format
-msgid "%s created a new post"
-msgstr ""
-
-#: include/NotificationsManager.php:267
-#, php-format
-msgid "%s liked %s's post"
-msgstr ""
-
-#: include/NotificationsManager.php:280
-#, php-format
-msgid "%s disliked %s's post"
-msgstr ""
-
-#: include/NotificationsManager.php:293
-#, php-format
-msgid "%s is attending %s's event"
-msgstr ""
-
-#: include/NotificationsManager.php:306
-#, php-format
-msgid "%s is not attending %s's event"
-msgstr ""
-
-#: include/NotificationsManager.php:319
-#, php-format
-msgid "%s may attend %s's event"
-msgstr ""
-
-#: include/NotificationsManager.php:336
-#, php-format
-msgid "%s is now friends with %s"
-msgstr ""
-
-#: include/NotificationsManager.php:774
-msgid "Friend Suggestion"
-msgstr ""
-
-#: include/NotificationsManager.php:803
-msgid "Friend/Connect Request"
-msgstr ""
-
-#: include/NotificationsManager.php:803
-msgid "New Follower"
-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"
-msgstr ""
-
-#: include/api.php:1102
-#, php-format
-msgid "Daily posting limit of %d posts reached. The post was rejected."
-msgstr ""
-
-#: include/api.php:1123
-#, php-format
-msgid "Weekly posting limit of %d posts reached. The post was rejected."
-msgstr ""
-
-#: include/api.php:1144
-#, php-format
-msgid "Monthly posting limit of %d posts reached. The post was rejected."
-msgstr ""
-
-#: include/auth.php:52
-msgid "Logged out."
-msgstr ""
-
-#: include/auth.php:123 include/auth.php:185 mod/openid.php:110
-msgid "Login failed."
-msgstr ""
-
-#: include/dba_pdo.php:75 include/dba.php:59
+#: include/dba_pdo.php:75 include/dba.php:61
#, php-format
msgid "Cannot locate DNS info for database server '%s'"
msgstr ""
-#: include/delivery.php:428
-msgid "(no subject)"
-msgstr ""
-
-#: include/delivery.php:440 include/enotify.php:46
-msgid "noreply"
-msgstr ""
-
-#: include/event.php:19 include/bb2diaspora.php:233 mod/localtime.php:13
-msgid "l F d, Y \\@ g:i A"
-msgstr ""
-
-#: include/event.php:36 include/event.php:56 include/event.php:459
-#: include/bb2diaspora.php:239
-msgid "Starts:"
-msgstr ""
-
-#: include/event.php:39 include/event.php:62 include/event.php:460
-#: include/bb2diaspora.php:247
-msgid "Finishes:"
-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:"
-msgstr ""
-
-#: include/event.php:408
-msgid "all-day"
-msgstr ""
-
-#: include/event.php:410
-msgid "Sun"
-msgstr ""
-
-#: include/event.php:411
-msgid "Mon"
-msgstr ""
-
-#: include/event.php:412
-msgid "Tue"
-msgstr ""
-
-#: include/event.php:413
-msgid "Wed"
-msgstr ""
-
-#: include/event.php:414
-msgid "Thu"
-msgstr ""
-
-#: include/event.php:415
-msgid "Fri"
-msgstr ""
-
-#: include/event.php:416
-msgid "Sat"
-msgstr ""
-
-#: include/event.php:418 include/text.php:1206 mod/settings.php:982
-msgid "Sunday"
-msgstr ""
-
-#: include/event.php:419 include/text.php:1206 mod/settings.php:982
-msgid "Monday"
-msgstr ""
-
-#: include/event.php:420 include/text.php:1206
-msgid "Tuesday"
-msgstr ""
-
-#: include/event.php:421 include/text.php:1206
-msgid "Wednesday"
-msgstr ""
-
-#: include/event.php:422 include/text.php:1206
-msgid "Thursday"
-msgstr ""
-
-#: include/event.php:423 include/text.php:1206
-msgid "Friday"
-msgstr ""
-
-#: include/event.php:424 include/text.php:1206
-msgid "Saturday"
-msgstr ""
-
-#: include/event.php:426
-msgid "Jan"
-msgstr ""
-
-#: include/event.php:427
-msgid "Feb"
-msgstr ""
-
-#: include/event.php:428
-msgid "Mar"
-msgstr ""
-
-#: include/event.php:429
-msgid "Apr"
-msgstr ""
-
-#: include/event.php:430 include/event.php:443 include/text.php:1210
-msgid "May"
-msgstr ""
-
-#: include/event.php:431
-msgid "Jun"
-msgstr ""
-
-#: include/event.php:432
-msgid "Jul"
-msgstr ""
-
-#: include/event.php:433
-msgid "Aug"
-msgstr ""
-
-#: include/event.php:434
-msgid "Sept"
-msgstr ""
-
-#: include/event.php:435
-msgid "Oct"
-msgstr ""
-
-#: include/event.php:436
-msgid "Nov"
-msgstr ""
-
-#: include/event.php:437
-msgid "Dec"
-msgstr ""
-
-#: include/event.php:439 include/text.php:1210
-msgid "January"
-msgstr ""
-
-#: include/event.php:440 include/text.php:1210
-msgid "February"
-msgstr ""
-
-#: include/event.php:441 include/text.php:1210
-msgid "March"
-msgstr ""
-
-#: include/event.php:442 include/text.php:1210
-msgid "April"
-msgstr ""
-
-#: include/event.php:444 include/text.php:1210
-msgid "June"
-msgstr ""
-
-#: include/event.php:445 include/text.php:1210
-msgid "July"
-msgstr ""
-
-#: include/event.php:446 include/text.php:1210
-msgid "August"
-msgstr ""
-
-#: include/event.php:447 include/text.php:1210
-msgid "September"
-msgstr ""
-
-#: include/event.php:448 include/text.php:1210
-msgid "October"
-msgstr ""
-
-#: include/event.php:449 include/text.php:1210
-msgid "November"
-msgstr ""
-
-#: include/event.php:450 include/text.php:1210
-msgid "December"
-msgstr ""
-
-#: include/event.php:452 mod/cal.php:280 mod/events.php:386
-msgid "today"
-msgstr ""
-
-#: include/event.php:457
-msgid "No events to display"
-msgstr ""
-
-#: include/event.php:570
-msgid "l, F j"
-msgstr ""
-
-#: include/event.php:592
-msgid "Edit event"
-msgstr ""
-
-#: include/event.php:593
-msgid "Delete event"
-msgstr ""
-
-#: include/event.php:619 include/text.php:1615 include/text.php:1622
-msgid "link to source"
-msgstr ""
-
-#: include/event.php:877
-msgid "Export"
-msgstr ""
-
-#: include/event.php:878
-msgid "Export calendar as ical"
-msgstr ""
-
-#: include/event.php:879
-msgid "Export calendar as csv"
-msgstr ""
-
-#: include/follow.php:84 mod/dfrn_request.php:514
-msgid "Disallowed profile URL."
-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"
-msgstr ""
-
-#: include/follow.php:94
-msgid "Connect URL missing."
-msgstr ""
-
-#: include/follow.php:122
-msgid ""
-"This site is not configured to allow communications with other networks."
-msgstr ""
-
-#: include/follow.php:123 include/follow.php:137
-msgid "No compatible communication protocols or feeds were discovered."
-msgstr ""
-
-#: include/follow.php:135
-msgid "The profile address specified does not provide adequate information."
-msgstr ""
-
-#: include/follow.php:140
-msgid "An author or name was not found."
-msgstr ""
-
-#: include/follow.php:143
-msgid "No browser URL could be matched to this address."
-msgstr ""
-
-#: include/follow.php:146
-msgid ""
-"Unable to match @-style Identity Address with a known protocol or email "
-"contact."
-msgstr ""
-
-#: include/follow.php:147
-msgid "Use mailto: in front of address to force email check."
-msgstr ""
-
-#: include/follow.php:153
-msgid ""
-"The profile address specified belongs to a network which has been disabled "
-"on this site."
-msgstr ""
-
-#: include/follow.php:158
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
-msgstr ""
-
-#: include/follow.php:259
-msgid "Unable to retrieve contact information."
-msgstr ""
-
-#: include/message.php:14 include/message.php:168
-msgid "[no subject]"
-msgstr ""
-
-#: include/nav.php:37 mod/navigation.php:21
-msgid "Nothing new here"
-msgstr ""
-
-#: include/nav.php:41 mod/navigation.php:25
-msgid "Clear notifications"
-msgstr ""
-
-#: include/nav.php:42 include/text.php:1093
-msgid "@name, !forum, #tags, content"
-msgstr ""
-
-#: include/nav.php:80 view/theme/frio/theme.php:249 boot.php:871
-msgid "Logout"
-msgstr ""
-
-#: include/nav.php:80 view/theme/frio/theme.php:249
-msgid "End this session"
-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"
-msgstr ""
-
-#: include/nav.php:83 include/nav.php:163 view/theme/frio/theme.php:252
-msgid "Your posts and conversations"
-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"
-msgstr ""
-
-#: include/nav.php:84 view/theme/frio/theme.php:253
-msgid "Your profile page"
-msgstr ""
-
-#: include/nav.php:85 include/identity.php:799 mod/fbrowser.php:33
-#: view/theme/frio/theme.php:254
-msgid "Photos"
-msgstr ""
-
-#: include/nav.php:85 view/theme/frio/theme.php:254
-msgid "Your photos"
-msgstr ""
-
-#: include/nav.php:86 include/identity.php:807 include/identity.php:810
-#: view/theme/frio/theme.php:255
-msgid "Videos"
-msgstr ""
-
-#: include/nav.php:86 view/theme/frio/theme.php:255
-msgid "Your videos"
-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"
-msgstr ""
-
-#: include/nav.php:87 view/theme/frio/theme.php:256
-msgid "Your events"
-msgstr ""
-
-#: include/nav.php:88
-msgid "Personal notes"
-msgstr ""
-
-#: include/nav.php:88
-msgid "Your personal notes"
-msgstr ""
-
-#: include/nav.php:97 mod/bookmarklet.php:14 boot.php:872
-msgid "Login"
-msgstr ""
-
-#: include/nav.php:97
-msgid "Sign in"
-msgstr ""
-
-#: include/nav.php:107
-msgid "Home Page"
-msgstr ""
-
-#: include/nav.php:111 mod/register.php:292 boot.php:848
-msgid "Register"
-msgstr ""
-
-#: include/nav.php:111
-msgid "Create an account"
-msgstr ""
-
-#: include/nav.php:117 mod/help.php:50 view/theme/vier/theme.php:291
-msgid "Help"
-msgstr ""
-
-#: include/nav.php:117
-msgid "Help and documentation"
-msgstr ""
-
-#: include/nav.php:121
-msgid "Apps"
-msgstr ""
-
-#: include/nav.php:121
-msgid "Addon applications, utilities, games"
-msgstr ""
-
-#: include/nav.php:125 include/text.php:1090 mod/search.php:152
-msgid "Search"
-msgstr ""
-
-#: include/nav.php:125
-msgid "Search site content"
-msgstr ""
-
-#: include/nav.php:128 include/text.php:1098
-msgid "Full Text"
-msgstr ""
-
-#: include/nav.php:129 include/text.php:1099
-msgid "Tags"
-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/nav.php:133 include/ForumManager.php:118 include/text.php:1103
-#: view/theme/vier/theme.php:248
-msgid "Forums"
-msgstr ""
-
-#: include/nav.php:145 include/nav.php:147 mod/community.php:31
-msgid "Community"
-msgstr ""
-
-#: include/nav.php:145
-msgid "Conversations on this site"
-msgstr ""
-
-#: include/nav.php:147
-msgid "Conversations on the network"
-msgstr ""
-
-#: include/nav.php:151 include/identity.php:822 include/identity.php:833
-#: view/theme/frio/theme.php:260
-msgid "Events and Calendar"
-msgstr ""
-
-#: include/nav.php:154
-msgid "Directory"
-msgstr ""
-
-#: include/nav.php:154
-msgid "People directory"
-msgstr ""
-
-#: include/nav.php:156
-msgid "Information"
-msgstr ""
-
-#: include/nav.php:156
-msgid "Information about this friendica instance"
-msgstr ""
-
-#: include/nav.php:160 view/theme/frio/theme.php:259
-msgid "Conversations from your friends"
-msgstr ""
-
-#: include/nav.php:161
-msgid "Network Reset"
-msgstr ""
-
-#: include/nav.php:161
-msgid "Load Network page with no filters"
-msgstr ""
-
-#: include/nav.php:168
-msgid "Friend Requests"
-msgstr ""
-
-#: include/nav.php:171 mod/notifications.php:98
-msgid "Notifications"
-msgstr ""
-
-#: include/nav.php:172
-msgid "See all notifications"
-msgstr ""
-
-#: include/nav.php:173 mod/settings.php:907
-msgid "Mark as seen"
-msgstr ""
-
-#: include/nav.php:173
-msgid "Mark all system notifications seen"
-msgstr ""
-
-#: include/nav.php:177 mod/message.php:181 view/theme/frio/theme.php:261
-msgid "Messages"
-msgstr ""
-
-#: include/nav.php:177 view/theme/frio/theme.php:261
-msgid "Private mail"
-msgstr ""
-
-#: include/nav.php:178
-msgid "Inbox"
-msgstr ""
-
-#: include/nav.php:179
-msgid "Outbox"
-msgstr ""
-
-#: include/nav.php:180 mod/message.php:18
-msgid "New Message"
-msgstr ""
-
-#: include/nav.php:183
-msgid "Manage"
-msgstr ""
-
-#: include/nav.php:183
-msgid "Manage other pages"
-msgstr ""
-
-#: include/nav.php:186 mod/settings.php:83
-msgid "Delegations"
-msgstr ""
-
-#: include/nav.php:186 mod/delegate.php:132
-msgid "Delegate Page Management"
-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"
-msgstr ""
-
-#: include/nav.php:188 view/theme/frio/theme.php:262
-msgid "Account settings"
-msgstr ""
-
-#: include/nav.php:191 include/identity.php:292
-msgid "Profiles"
-msgstr ""
-
-#: include/nav.php:191
-msgid "Manage/Edit Profiles"
-msgstr ""
-
-#: include/nav.php:194 view/theme/frio/theme.php:263
-msgid "Manage/edit friends and contacts"
-msgstr ""
-
-#: include/nav.php:199 mod/admin.php:202
-msgid "Admin"
-msgstr ""
-
-#: include/nav.php:199
-msgid "Site setup and configuration"
-msgstr ""
-
-#: include/nav.php:202
-msgid "Navigation"
-msgstr ""
-
-#: include/nav.php:202
-msgid "Site map"
-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
+#: 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 ""
@@ -1429,7 +570,7 @@ msgstr ""
msgid "Connectors disabled, since \"%s\" is enabled."
msgstr ""
-#: include/acl_selectors.php:361 mod/settings.php:1189
+#: include/acl_selectors.php:361 mod/settings.php:1190
msgid "Hide your profile details from unknown viewers?"
msgstr ""
@@ -1437,24 +578,24 @@ msgstr ""
msgid "Visible to everybody"
msgstr ""
-#: include/acl_selectors.php:368 view/theme/vier/config.php:109
+#: include/acl_selectors.php:368 view/theme/vier/config.php:110
msgid "show"
msgstr ""
-#: include/acl_selectors.php:369 view/theme/vier/config.php:109
+#: include/acl_selectors.php:369 view/theme/vier/config.php:110
msgid "don't show"
msgstr ""
-#: include/acl_selectors.php:375 mod/editpost.php:125
+#: include/acl_selectors.php:375 mod/editpost.php:126
msgid "CC: email addresses"
msgstr ""
-#: include/acl_selectors.php:376 mod/editpost.php:132
+#: include/acl_selectors.php:376 mod/editpost.php:133
msgid "Example: bob@example.com, mary@example.com"
msgstr ""
-#: include/acl_selectors.php:378 mod/photos.php:1198 mod/photos.php:1595
-#: mod/events.php:511
+#: include/acl_selectors.php:378 mod/events.php:512 mod/photos.php:1199
+#: mod/photos.php:1596
msgid "Permissions"
msgstr ""
@@ -1486,19 +627,19 @@ msgstr ""
msgid "Reputable, has my trust"
msgstr ""
-#: include/contact_selectors.php:56 mod/admin.php:1070
+#: include/contact_selectors.php:56 mod/admin.php:1072
msgid "Frequently"
msgstr ""
-#: include/contact_selectors.php:57 mod/admin.php:1071
+#: include/contact_selectors.php:57 mod/admin.php:1073
msgid "Hourly"
msgstr ""
-#: include/contact_selectors.php:58 mod/admin.php:1072
+#: include/contact_selectors.php:58 mod/admin.php:1074
msgid "Twice daily"
msgstr ""
-#: include/contact_selectors.php:59 mod/admin.php:1073
+#: include/contact_selectors.php:59 mod/admin.php:1075
msgid "Daily"
msgstr ""
@@ -1510,7 +651,7 @@ msgstr ""
msgid "Monthly"
msgstr ""
-#: include/contact_selectors.php:76 mod/dfrn_request.php:886
+#: include/contact_selectors.php:76 mod/dfrn_request.php:887
msgid "Friendica"
msgstr ""
@@ -1523,12 +664,12 @@ msgid "RSS/Atom"
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
+#: mod/admin.php:1582 mod/admin.php:1595 mod/admin.php:1608 mod/admin.php:1626
msgid "Email"
msgstr ""
-#: include/contact_selectors.php:80 mod/dfrn_request.php:888
-#: mod/settings.php:849
+#: include/contact_selectors.php:80 mod/dfrn_request.php:889
+#: mod/settings.php:850
msgid "Diaspora"
msgstr ""
@@ -1580,298 +721,6 @@ msgstr ""
msgid "App.net"
msgstr ""
-#: include/enotify.php:27
-msgid "Friendica Notification"
-msgstr ""
-
-#: include/enotify.php:30
-msgid "Thank You,"
-msgstr ""
-
-#: include/enotify.php:33
-#, php-format
-msgid "%s Administrator"
-msgstr ""
-
-#: include/enotify.php:35
-#, php-format
-msgid "%1$s, %2$s Administrator"
-msgstr ""
-
-#: include/enotify.php:78
-#, php-format
-msgid "%s "
-msgstr ""
-
-#: include/enotify.php:91
-#, php-format
-msgid "[Friendica:Notify] New mail received at %s"
-msgstr ""
-
-#: include/enotify.php:93
-#, php-format
-msgid "%1$s sent you a new private message at %2$s."
-msgstr ""
-
-#: include/enotify.php:94
-#, php-format
-msgid "%1$s sent you %2$s."
-msgstr ""
-
-#: include/enotify.php:94
-msgid "a private message"
-msgstr ""
-
-#: include/enotify.php:96
-#, php-format
-msgid "Please visit %s to view and/or reply to your private messages."
-msgstr ""
-
-#: include/enotify.php:142
-#, php-format
-msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
-msgstr ""
-
-#: include/enotify.php:149
-#, php-format
-msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
-msgstr ""
-
-#: include/enotify.php:157
-#, php-format
-msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
-msgstr ""
-
-#: include/enotify.php:167
-#, php-format
-msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
-msgstr ""
-
-#: include/enotify.php:169
-#, 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
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
-msgstr ""
-
-#: include/enotify.php:179
-#, php-format
-msgid "[Friendica:Notify] %s posted to your profile wall"
-msgstr ""
-
-#: include/enotify.php:181
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
-msgstr ""
-
-#: include/enotify.php:182
-#, php-format
-msgid "%1$s posted to [url=%2$s]your wall[/url]"
-msgstr ""
-
-#: include/enotify.php:193
-#, php-format
-msgid "[Friendica:Notify] %s tagged you"
-msgstr ""
-
-#: include/enotify.php:195
-#, php-format
-msgid "%1$s tagged you at %2$s"
-msgstr ""
-
-#: include/enotify.php:196
-#, php-format
-msgid "%1$s [url=%2$s]tagged you[/url]."
-msgstr ""
-
-#: include/enotify.php:207
-#, php-format
-msgid "[Friendica:Notify] %s shared a new post"
-msgstr ""
-
-#: include/enotify.php:209
-#, php-format
-msgid "%1$s shared a new post at %2$s"
-msgstr ""
-
-#: include/enotify.php:210
-#, php-format
-msgid "%1$s [url=%2$s]shared a post[/url]."
-msgstr ""
-
-#: include/enotify.php:221
-#, php-format
-msgid "[Friendica:Notify] %1$s poked you"
-msgstr ""
-
-#: include/enotify.php:223
-#, php-format
-msgid "%1$s poked you at %2$s"
-msgstr ""
-
-#: include/enotify.php:224
-#, php-format
-msgid "%1$s [url=%2$s]poked you[/url]."
-msgstr ""
-
-#: include/enotify.php:239
-#, php-format
-msgid "[Friendica:Notify] %s tagged your post"
-msgstr ""
-
-#: include/enotify.php:241
-#, php-format
-msgid "%1$s tagged your post at %2$s"
-msgstr ""
-
-#: include/enotify.php:242
-#, php-format
-msgid "%1$s tagged [url=%2$s]your post[/url]"
-msgstr ""
-
-#: include/enotify.php:253
-msgid "[Friendica:Notify] Introduction received"
-msgstr ""
-
-#: include/enotify.php:255
-#, php-format
-msgid "You've received an introduction from '%1$s' at %2$s"
-msgstr ""
-
-#: include/enotify.php:256
-#, php-format
-msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
-msgstr ""
-
-#: include/enotify.php:260 include/enotify.php:303
-#, php-format
-msgid "You may visit their profile at %s"
-msgstr ""
-
-#: include/enotify.php:262
-#, php-format
-msgid "Please visit %s to approve or reject the introduction."
-msgstr ""
-
-#: include/enotify.php:270
-msgid "[Friendica:Notify] A new person is sharing with you"
-msgstr ""
-
-#: include/enotify.php:272 include/enotify.php:273
-#, php-format
-msgid "%1$s is sharing with you at %2$s"
-msgstr ""
-
-#: include/enotify.php:279
-msgid "[Friendica:Notify] You have a new follower"
-msgstr ""
-
-#: include/enotify.php:281 include/enotify.php:282
-#, php-format
-msgid "You have a new follower at %2$s : %1$s"
-msgstr ""
-
-#: include/enotify.php:293
-msgid "[Friendica:Notify] Friend suggestion received"
-msgstr ""
-
-#: include/enotify.php:295
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
-msgstr ""
-
-#: include/enotify.php:296
-#, php-format
-msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
-msgstr ""
-
-#: include/enotify.php:301
-msgid "Name:"
-msgstr ""
-
-#: include/enotify.php:302
-msgid "Photo:"
-msgstr ""
-
-#: include/enotify.php:305
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
-msgstr ""
-
-#: include/enotify.php:313 include/enotify.php:327
-msgid "[Friendica:Notify] Connection accepted"
-msgstr ""
-
-#: include/enotify.php:315 include/enotify.php:329
-#, php-format
-msgid "'%1$s' has accepted your connection request at %2$s"
-msgstr ""
-
-#: include/enotify.php:316 include/enotify.php:330
-#, php-format
-msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
-msgstr ""
-
-#: include/enotify.php:320
-msgid ""
-"You are now mutual friends and may exchange status updates, photos, and "
-"email without restriction."
-msgstr ""
-
-#: include/enotify.php:322
-#, php-format
-msgid "Please visit %s if you wish to make any changes to this relationship."
-msgstr ""
-
-#: include/enotify.php:334
-#, php-format
-msgid ""
-"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
-"communication - such as private messaging and some profile interactions. If "
-"this is a celebrity or community page, these settings were applied "
-"automatically."
-msgstr ""
-
-#: include/enotify.php:336
-#, 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
-#, php-format
-msgid "Please visit %s if you wish to make any changes to this relationship."
-msgstr ""
-
-#: include/enotify.php:348
-msgid "[Friendica System:Notify] registration request"
-msgstr ""
-
-#: include/enotify.php:350
-#, php-format
-msgid "You've received a registration request from '%1$s' at %2$s"
-msgstr ""
-
-#: include/enotify.php:351
-#, php-format
-msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
-msgstr ""
-
-#: include/enotify.php:355
-#, 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
-#, 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 "
@@ -1907,7 +756,7 @@ msgstr ""
msgid "Create a new group"
msgstr ""
-#: include/group.php:284 mod/group.php:100 mod/group.php:197
+#: include/group.php:284 mod/group.php:101 mod/group.php:198
msgid "Group Name: "
msgstr ""
@@ -1915,577 +764,743 @@ msgstr ""
msgid "Contacts not in any group"
msgstr ""
-#: include/group.php:288 mod/network.php:210
+#: include/group.php:288 mod/network.php:195
msgid "add"
msgstr ""
-#: include/oembed.php:253
-msgid "Embedded content"
-msgstr ""
-
-#: include/oembed.php:261
-msgid "Embedding disabled"
-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
+#: 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/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
+#: 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/Contact.php:437 include/conversation.php:1011
+#: include/Contact.php:438 include/conversation.php:1012
msgid "View Status"
msgstr ""
-#: include/Contact.php:439 include/conversation.php:1013
+#: include/Contact.php:440 include/conversation.php:1014
msgid "View Photos"
msgstr ""
-#: include/Contact.php:440 include/conversation.php:1014
+#: include/Contact.php:441 include/conversation.php:1015
msgid "Network Posts"
msgstr ""
-#: include/Contact.php:441 include/conversation.php:1015
+#: include/Contact.php:442 include/conversation.php:1016
msgid "View Contact"
msgstr ""
-#: include/Contact.php:442
+#: include/Contact.php:443
msgid "Drop Contact"
msgstr ""
-#: include/Contact.php:443 include/conversation.php:1016
+#: include/Contact.php:444 include/conversation.php:1017
msgid "Send PM"
msgstr ""
-#: include/Contact.php:444 include/conversation.php:1020
+#: include/Contact.php:445 include/conversation.php:1021
msgid "Poke"
msgstr ""
-#: include/Contact.php:813
+#: include/Contact.php:814
msgid "Organisation"
msgstr ""
-#: include/Contact.php:816
+#: include/Contact.php:817
msgid "News"
msgstr ""
-#: include/Contact.php:819
+#: include/Contact.php:820
msgid "Forum"
msgstr ""
-#: include/ForumManager.php:120 view/theme/vier/theme.php:250
+#: include/ForumManager.php:119 include/nav.php:134 include/text.php:1104
+#: view/theme/vier/theme.php:249
+msgid "Forums"
+msgstr ""
+
+#: include/ForumManager.php:121 view/theme/vier/theme.php:251
msgid "External link to forum"
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
+#: 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/bbcode.php:428 include/bbcode.php:1186 include/bbcode.php:1187
+#: include/NotificationsManager.php:157
+msgid "System"
+msgstr ""
+
+#: include/NotificationsManager.php:164 include/nav.php:161 mod/admin.php:589
+#: view/theme/frio/theme.php:260
+msgid "Network"
+msgstr ""
+
+#: include/NotificationsManager.php:171 mod/network.php:911
+#: mod/profiles.php:700
+msgid "Personal"
+msgstr ""
+
+#: include/NotificationsManager.php:178 include/nav.php:108 include/nav.php:164
+msgid "Home"
+msgstr ""
+
+#: include/NotificationsManager.php:185 include/nav.php:169
+msgid "Introductions"
+msgstr ""
+
+#: include/NotificationsManager.php:243 include/NotificationsManager.php:255
+#, php-format
+msgid "%s commented on %s's post"
+msgstr ""
+
+#: include/NotificationsManager.php:254
+#, php-format
+msgid "%s created a new post"
+msgstr ""
+
+#: include/NotificationsManager.php:269
+#, php-format
+msgid "%s liked %s's post"
+msgstr ""
+
+#: include/NotificationsManager.php:282
+#, php-format
+msgid "%s disliked %s's post"
+msgstr ""
+
+#: include/NotificationsManager.php:295
+#, php-format
+msgid "%s is attending %s's event"
+msgstr ""
+
+#: include/NotificationsManager.php:308
+#, php-format
+msgid "%s is not attending %s's event"
+msgstr ""
+
+#: include/NotificationsManager.php:321
+#, php-format
+msgid "%s may attend %s's event"
+msgstr ""
+
+#: include/NotificationsManager.php:338
+#, php-format
+msgid "%s is now friends with %s"
+msgstr ""
+
+#: include/NotificationsManager.php:776
+msgid "Friend Suggestion"
+msgstr ""
+
+#: include/NotificationsManager.php:805
+msgid "Friend/Connect Request"
+msgstr ""
+
+#: include/NotificationsManager.php:805
+msgid "New Follower"
+msgstr ""
+
+#: 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/api.php:1103
+#, php-format
+msgid "Daily posting limit of %d posts reached. The post was rejected."
+msgstr ""
+
+#: include/api.php:1124
+#, php-format
+msgid "Weekly posting limit of %d posts reached. The post was rejected."
+msgstr ""
+
+#: include/api.php:1145
+#, php-format
+msgid "Monthly posting limit of %d posts reached. The post was rejected."
+msgstr ""
+
+#: 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/auth.php:53
+msgid "Logged out."
+msgstr ""
+
+#: include/auth.php:124 include/auth.php:186 mod/openid.php:111
+msgid "Login failed."
+msgstr ""
+
+#: 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/auth.php:140 include/user.php:77
+msgid "The error message was:"
+msgstr ""
+
+#: include/bb2diaspora.php:234 include/event.php:20 mod/localtime.php:14
+msgid "l F d, Y \\@ g:i A"
+msgstr ""
+
+#: include/bb2diaspora.php:240 include/event.php:37 include/event.php:57
+#: include/event.php:460
+msgid "Starts:"
+msgstr ""
+
+#: include/bb2diaspora.php:248 include/event.php:40 include/event.php:63
+#: include/event.php:461
+msgid "Finishes:"
+msgstr ""
+
+#: 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/bbcode.php:429 include/bbcode.php:1192 include/bbcode.php:1193
msgid "Image/photo"
msgstr ""
-#: include/bbcode.php:544
+#: include/bbcode.php:545
#, php-format
msgid "%2$s %3$s"
msgstr ""
-#: include/bbcode.php:1143 include/bbcode.php:1165
+#: include/bbcode.php:1149 include/bbcode.php:1171
msgid "$1 wrote:"
msgstr ""
-#: include/bbcode.php:1195 include/bbcode.php:1196
+#: include/bbcode.php:1201 include/bbcode.php:1202
msgid "Encrypted content"
msgstr ""
-#: include/bbcode.php:1315
+#: include/bbcode.php:1321
msgid "Invalid source protocol"
msgstr ""
-#: include/bbcode.php:1326
+#: include/bbcode.php:1332
msgid "Invalid link protocol"
msgstr ""
-#: include/contact_widgets.php:11
+#: include/contact_widgets.php:12
msgid "Add New Contact"
msgstr ""
-#: include/contact_widgets.php:12
+#: include/contact_widgets.php:13
msgid "Enter address or web location"
msgstr ""
-#: include/contact_widgets.php:13
+#: include/contact_widgets.php:14
msgid "Example: bob@example.com, http://example.com/barbara"
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
+#: 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/contact_widgets.php:30
+#: include/contact_widgets.php:31
#, php-format
msgid "%d invitation available"
msgid_plural "%d invitations available"
msgstr[0] ""
msgstr[1] ""
-#: include/contact_widgets.php:36
+#: include/contact_widgets.php:37
msgid "Find People"
msgstr ""
-#: include/contact_widgets.php:37
+#: include/contact_widgets.php:38
msgid "Enter name or interest"
msgstr ""
-#: include/contact_widgets.php:39
+#: include/contact_widgets.php:40
msgid "Examples: Robert Morgenstein, Fishing"
msgstr ""
-#: include/contact_widgets.php:40 mod/directory.php:202 mod/contacts.php:811
+#: include/contact_widgets.php:41 mod/contacts.php:818 mod/directory.php:202
msgid "Find"
msgstr ""
-#: include/contact_widgets.php:41 mod/suggest.php:116
-#: view/theme/vier/theme.php:195
+#: include/contact_widgets.php:42 mod/suggest.php:117
+#: view/theme/vier/theme.php:196
msgid "Friend Suggestions"
msgstr ""
-#: include/contact_widgets.php:42 view/theme/vier/theme.php:194
+#: include/contact_widgets.php:43 view/theme/vier/theme.php:195
msgid "Similar Interests"
msgstr ""
-#: include/contact_widgets.php:43
+#: include/contact_widgets.php:44
msgid "Random Profile"
msgstr ""
-#: include/contact_widgets.php:44 view/theme/vier/theme.php:196
+#: include/contact_widgets.php:45 view/theme/vier/theme.php:197
msgid "Invite Friends"
msgstr ""
-#: include/contact_widgets.php:45
+#: include/contact_widgets.php:46
msgid "View Global Directory"
msgstr ""
-#: include/contact_widgets.php:131
+#: include/contact_widgets.php:132
msgid "Networks"
msgstr ""
-#: include/contact_widgets.php:134
+#: include/contact_widgets.php:135
msgid "All Networks"
msgstr ""
-#: include/contact_widgets.php:169 include/contact_widgets.php:204
+#: include/contact_widgets.php:170 include/contact_widgets.php:205
msgid "Everything"
msgstr ""
-#: include/contact_widgets.php:201
+#: include/contact_widgets.php:202
msgid "Categories"
msgstr ""
-#: include/contact_widgets.php:266
+#: include/contact_widgets.php:267
#, php-format
msgid "%d contact in common"
msgid_plural "%d contacts in common"
msgstr[0] ""
msgstr[1] ""
-#: include/conversation.php:160
+#: include/conversation.php:135 include/conversation.php:287
+#: include/like.php:184 include/text.php:1885
+msgid "event"
+msgstr ""
+
+#: 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/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/conversation.php:155 include/diaspora.php:1659 include/like.php:31
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
+msgstr ""
+
+#: 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/conversation.php:161
#, php-format
msgid "%1$s attends %2$s's %3$s"
msgstr ""
-#: include/conversation.php:163
+#: include/conversation.php:164
#, php-format
msgid "%1$s doesn't attend %2$s's %3$s"
msgstr ""
-#: include/conversation.php:166
+#: include/conversation.php:167
#, php-format
msgid "%1$s attends maybe %2$s's %3$s"
msgstr ""
-#: include/conversation.php:199 mod/dfrn_confirm.php:480
+#: include/conversation.php:200 mod/dfrn_confirm.php:480
#, php-format
msgid "%1$s is now friends with %2$s"
msgstr ""
-#: include/conversation.php:240
+#: include/conversation.php:241
#, php-format
msgid "%1$s poked %2$s"
msgstr ""
-#: include/conversation.php:261 mod/mood.php:64
+#: include/conversation.php:262 mod/mood.php:65
#, php-format
msgid "%1$s is currently %2$s"
msgstr ""
-#: include/conversation.php:308 mod/tagger.php:96
+#: include/conversation.php:309 mod/tagger.php:97
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
-#: include/conversation.php:335
+#: include/conversation.php:336
msgid "post/item"
msgstr ""
-#: include/conversation.php:336
+#: include/conversation.php:337
#, php-format
msgid "%1$s marked %2$s's %3$s as favorite"
msgstr ""
-#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664
-#: mod/profiles.php:344
+#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
+#: mod/profiles.php:345
msgid "Likes"
msgstr ""
-#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664
-#: mod/profiles.php:348
+#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
+#: mod/profiles.php:349
msgid "Dislikes"
msgstr ""
-#: include/conversation.php:615 include/conversation.php:1549
-#: mod/content.php:374 mod/photos.php:1665
+#: 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:615 mod/content.php:374 mod/photos.php:1665
+#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666
msgid "Not attending"
msgstr ""
-#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
+#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666
msgid "Might attend"
msgstr ""
-#: include/conversation.php:752 mod/content.php:454 mod/content.php:760
-#: mod/photos.php:1730 object/Item.php:137
+#: include/conversation.php:753 mod/content.php:455 mod/content.php:761
+#: mod/photos.php:1731 object/Item.php:142
msgid "Select"
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
+#: 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/conversation.php:796 mod/content.php:488 mod/content.php:916
-#: mod/content.php:917 object/Item.php:352 object/Item.php:353
+#: 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/conversation.php:808 object/Item.php:340
+#: include/conversation.php:809 object/Item.php:333
msgid "Categories:"
msgstr ""
-#: include/conversation.php:809 object/Item.php:341
+#: include/conversation.php:810 object/Item.php:334
msgid "Filed under:"
msgstr ""
-#: include/conversation.php:816 mod/content.php:498 mod/content.php:929
-#: object/Item.php:366
+#: include/conversation.php:817 mod/content.php:499 mod/content.php:930
+#: object/Item.php:359
#, php-format
msgid "%s from %s"
msgstr ""
-#: include/conversation.php:832 mod/content.php:514
+#: include/conversation.php:833 mod/content.php:515
msgid "View in context"
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
+#: 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/conversation.php:911
+#: include/conversation.php:912
msgid "remove"
msgstr ""
-#: include/conversation.php:915
+#: include/conversation.php:916
msgid "Delete Selected Items"
msgstr ""
-#: include/conversation.php:1010 view/theme/frio/theme.php:346
+#: include/conversation.php:1011 view/theme/frio/theme.php:347
msgid "Follow Thread"
msgstr ""
-#: include/conversation.php:1147
+#: include/conversation.php:1148
#, php-format
msgid "%s likes this."
msgstr ""
-#: include/conversation.php:1150
+#: include/conversation.php:1151
#, php-format
msgid "%s doesn't like this."
msgstr ""
-#: include/conversation.php:1153
+#: include/conversation.php:1154
#, php-format
msgid "%s attends."
msgstr ""
-#: include/conversation.php:1156
+#: include/conversation.php:1157
#, php-format
msgid "%s doesn't attend."
msgstr ""
-#: include/conversation.php:1159
+#: include/conversation.php:1160
#, php-format
msgid "%s attends maybe."
msgstr ""
-#: include/conversation.php:1170
+#: include/conversation.php:1171
msgid "and"
msgstr ""
-#: include/conversation.php:1176
+#: include/conversation.php:1177
#, php-format
msgid ", and %d other people"
msgstr ""
-#: include/conversation.php:1185
+#: include/conversation.php:1186
#, php-format
msgid "%2$d people like this"
msgstr ""
-#: include/conversation.php:1186
+#: include/conversation.php:1187
#, php-format
msgid "%s like this."
msgstr ""
-#: include/conversation.php:1189
+#: include/conversation.php:1190
#, php-format
msgid "%2$d people don't like this"
msgstr ""
-#: include/conversation.php:1190
+#: include/conversation.php:1191
#, php-format
msgid "%s don't like this."
msgstr ""
-#: include/conversation.php:1193
+#: include/conversation.php:1194
#, php-format
msgid "%2$d people attend"
msgstr ""
-#: include/conversation.php:1194
+#: include/conversation.php:1195
#, php-format
msgid "%s attend."
msgstr ""
-#: include/conversation.php:1197
+#: include/conversation.php:1198
#, php-format
msgid "%2$d people don't attend"
msgstr ""
-#: include/conversation.php:1198
+#: include/conversation.php:1199
#, php-format
msgid "%s don't attend."
msgstr ""
-#: include/conversation.php:1201
+#: include/conversation.php:1202
#, php-format
msgid "%2$d people attend maybe"
msgstr ""
-#: include/conversation.php:1202
+#: include/conversation.php:1203
#, php-format
msgid "%s anttend maybe."
msgstr ""
-#: include/conversation.php:1231 include/conversation.php:1247
+#: include/conversation.php:1232 include/conversation.php:1248
msgid "Visible to everybody"
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
+#: 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/conversation.php:1233 include/conversation.php:1249
+#: include/conversation.php:1234 include/conversation.php:1250
msgid "Please enter a video link/URL:"
msgstr ""
-#: include/conversation.php:1234 include/conversation.php:1250
+#: include/conversation.php:1235 include/conversation.php:1251
msgid "Please enter an audio link/URL:"
msgstr ""
-#: include/conversation.php:1235 include/conversation.php:1251
+#: include/conversation.php:1236 include/conversation.php:1252
msgid "Tag term:"
msgstr ""
-#: include/conversation.php:1236 include/conversation.php:1252 mod/filer.php:31
+#: include/conversation.php:1237 include/conversation.php:1253 mod/filer.php:31
msgid "Save to Folder:"
msgstr ""
-#: include/conversation.php:1237 include/conversation.php:1253
+#: include/conversation.php:1238 include/conversation.php:1254
msgid "Where are you right now?"
msgstr ""
-#: include/conversation.php:1238
+#: include/conversation.php:1239
msgid "Delete item(s)?"
msgstr ""
-#: include/conversation.php:1287
+#: include/conversation.php:1288
msgid "Share"
msgstr ""
-#: include/conversation.php:1288 mod/editpost.php:102 mod/message.php:337
-#: mod/message.php:521 mod/wallmessage.php:140
+#: 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/conversation.php:1289 mod/editpost.php:103
+#: include/conversation.php:1290 mod/editpost.php:104
msgid "upload photo"
msgstr ""
-#: include/conversation.php:1290 mod/editpost.php:104
+#: include/conversation.php:1291 mod/editpost.php:105
msgid "Attach file"
msgstr ""
-#: include/conversation.php:1291 mod/editpost.php:105
+#: include/conversation.php:1292 mod/editpost.php:106
msgid "attach file"
msgstr ""
-#: include/conversation.php:1292 mod/editpost.php:106 mod/message.php:338
-#: mod/message.php:522 mod/wallmessage.php:141
+#: 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/conversation.php:1293 mod/editpost.php:107
+#: include/conversation.php:1294 mod/editpost.php:108
msgid "web link"
msgstr ""
-#: include/conversation.php:1294 mod/editpost.php:108
+#: include/conversation.php:1295 mod/editpost.php:109
msgid "Insert video link"
msgstr ""
-#: include/conversation.php:1295 mod/editpost.php:109
+#: include/conversation.php:1296 mod/editpost.php:110
msgid "video link"
msgstr ""
-#: include/conversation.php:1296 mod/editpost.php:110
+#: include/conversation.php:1297 mod/editpost.php:111
msgid "Insert audio link"
msgstr ""
-#: include/conversation.php:1297 mod/editpost.php:111
+#: include/conversation.php:1298 mod/editpost.php:112
msgid "audio link"
msgstr ""
-#: include/conversation.php:1298 mod/editpost.php:112
+#: include/conversation.php:1299 mod/editpost.php:113
msgid "Set your location"
msgstr ""
-#: include/conversation.php:1299 mod/editpost.php:113
+#: include/conversation.php:1300 mod/editpost.php:114
msgid "set location"
msgstr ""
-#: include/conversation.php:1300 mod/editpost.php:114
+#: include/conversation.php:1301 mod/editpost.php:115
msgid "Clear browser location"
msgstr ""
-#: include/conversation.php:1301 mod/editpost.php:115
+#: include/conversation.php:1302 mod/editpost.php:116
msgid "clear location"
msgstr ""
-#: include/conversation.php:1303 mod/editpost.php:129
+#: include/conversation.php:1304 mod/editpost.php:130
msgid "Set title"
msgstr ""
-#: include/conversation.php:1305 mod/editpost.php:131
+#: include/conversation.php:1306 mod/editpost.php:132
msgid "Categories (comma-separated list)"
msgstr ""
-#: include/conversation.php:1307 mod/editpost.php:117
+#: include/conversation.php:1308 mod/editpost.php:118
msgid "Permission settings"
msgstr ""
-#: include/conversation.php:1308 mod/editpost.php:146
+#: include/conversation.php:1309 mod/editpost.php:147
msgid "permissions"
msgstr ""
-#: include/conversation.php:1316 mod/editpost.php:126
+#: include/conversation.php:1317 mod/editpost.php:127
msgid "Public post"
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
+#: 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/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
+#: 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/conversation.php:1331
+#: include/conversation.php:1332
msgid "Post to Groups"
msgstr ""
-#: include/conversation.php:1332
+#: include/conversation.php:1333
msgid "Post to Contacts"
msgstr ""
-#: include/conversation.php:1333
+#: include/conversation.php:1334
msgid "Private post"
msgstr ""
-#: include/conversation.php:1338 include/identity.php:266 mod/editpost.php:144
+#: include/conversation.php:1339 include/identity.php:267 mod/editpost.php:145
msgid "Message"
msgstr ""
-#: include/conversation.php:1339 mod/editpost.php:145
+#: include/conversation.php:1340 mod/editpost.php:146
msgid "Browser"
msgstr ""
-#: include/conversation.php:1521
+#: include/conversation.php:1522
msgid "View all"
msgstr ""
-#: include/conversation.php:1543
+#: include/conversation.php:1544
msgid "Like"
msgid_plural "Likes"
msgstr[0] ""
msgstr[1] ""
-#: include/conversation.php:1546
+#: include/conversation.php:1547
msgid "Dislike"
msgid_plural "Dislikes"
msgstr[0] ""
msgstr[1] ""
-#: include/conversation.php:1552
+#: include/conversation.php:1553
msgid "Not Attending"
msgid_plural "Not Attending"
msgstr[0] ""
msgstr[1] ""
-#: include/dbstructure.php:25
+#: include/dbstructure.php:26
msgid "There are no tables on MyISAM."
msgstr ""
-#: include/dbstructure.php:66
+#: include/dbstructure.php:67
#, php-format
msgid ""
"\n"
@@ -2496,14 +1511,14 @@ msgid ""
"might be invalid."
msgstr ""
-#: include/dbstructure.php:71
+#: include/dbstructure.php:72
#, php-format
msgid ""
"The error message is\n"
"[pre]%s[/pre]"
msgstr ""
-#: include/dbstructure.php:196
+#: include/dbstructure.php:197
#, php-format
msgid ""
"\n"
@@ -2511,531 +1526,1380 @@ msgid ""
"%s\n"
msgstr ""
-#: include/dbstructure.php:199
+#: include/dbstructure.php:200
msgid "Errors encountered performing database changes: "
msgstr ""
-#: include/dbstructure.php:207
+#: include/dbstructure.php:208
msgid ": Database update"
msgstr ""
-#: include/dbstructure.php:439
+#: include/dbstructure.php:440
#, php-format
msgid "%s: updating %s table."
msgstr ""
-#: include/dfrn.php:1317
+#: 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:2212
+#: include/diaspora.php:2226
msgid "Sharing notification from Diaspora network"
msgstr ""
-#: include/diaspora.php:3169
+#: include/diaspora.php:3183
msgid "Attachments:"
msgstr ""
-#: include/identity.php:45
+#: 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:36
+#, php-format
+msgid "%1$s, %2$s Administrator"
+msgstr ""
+
+#: include/enotify.php:81
+#, php-format
+msgid "%s "
+msgstr ""
+
+#: include/enotify.php:94
+#, php-format
+msgid "[Friendica:Notify] New mail received at %s"
+msgstr ""
+
+#: include/enotify.php:96
+#, php-format
+msgid "%1$s sent you a new private message at %2$s."
+msgstr ""
+
+#: include/enotify.php:97
+#, php-format
+msgid "%1$s sent you %2$s."
+msgstr ""
+
+#: include/enotify.php:97
+msgid "a private message"
+msgstr ""
+
+#: include/enotify.php:99
+#, php-format
+msgid "Please visit %s to view and/or reply to your private messages."
+msgstr ""
+
+#: include/enotify.php:145
+#, php-format
+msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
+msgstr ""
+
+#: include/enotify.php:152
+#, php-format
+msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
+msgstr ""
+
+#: include/enotify.php:160
+#, php-format
+msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
+msgstr ""
+
+#: include/enotify.php:170
+#, php-format
+msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
+msgstr ""
+
+#: include/enotify.php:172
+#, php-format
+msgid "%s commented on an item/conversation you have been following."
+msgstr ""
+
+#: 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:182
+#, php-format
+msgid "[Friendica:Notify] %s posted to your profile wall"
+msgstr ""
+
+#: include/enotify.php:184
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
+msgstr ""
+
+#: include/enotify.php:185
+#, php-format
+msgid "%1$s posted to [url=%2$s]your wall[/url]"
+msgstr ""
+
+#: include/enotify.php:196
+#, php-format
+msgid "[Friendica:Notify] %s tagged you"
+msgstr ""
+
+#: include/enotify.php:198
+#, php-format
+msgid "%1$s tagged you at %2$s"
+msgstr ""
+
+#: include/enotify.php:199
+#, php-format
+msgid "%1$s [url=%2$s]tagged you[/url]."
+msgstr ""
+
+#: include/enotify.php:210
+#, php-format
+msgid "[Friendica:Notify] %s shared a new post"
+msgstr ""
+
+#: include/enotify.php:212
+#, php-format
+msgid "%1$s shared a new post at %2$s"
+msgstr ""
+
+#: include/enotify.php:213
+#, php-format
+msgid "%1$s [url=%2$s]shared a post[/url]."
+msgstr ""
+
+#: include/enotify.php:224
+#, php-format
+msgid "[Friendica:Notify] %1$s poked you"
+msgstr ""
+
+#: include/enotify.php:226
+#, php-format
+msgid "%1$s poked you at %2$s"
+msgstr ""
+
+#: include/enotify.php:227
+#, php-format
+msgid "%1$s [url=%2$s]poked you[/url]."
+msgstr ""
+
+#: include/enotify.php:242
+#, php-format
+msgid "[Friendica:Notify] %s tagged your post"
+msgstr ""
+
+#: include/enotify.php:244
+#, php-format
+msgid "%1$s tagged your post at %2$s"
+msgstr ""
+
+#: include/enotify.php:245
+#, php-format
+msgid "%1$s tagged [url=%2$s]your post[/url]"
+msgstr ""
+
+#: include/enotify.php:256
+msgid "[Friendica:Notify] Introduction received"
+msgstr ""
+
+#: include/enotify.php:258
+#, php-format
+msgid "You've received an introduction from '%1$s' at %2$s"
+msgstr ""
+
+#: include/enotify.php:259
+#, php-format
+msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
+msgstr ""
+
+#: include/enotify.php:263 include/enotify.php:306
+#, php-format
+msgid "You may visit their profile at %s"
+msgstr ""
+
+#: include/enotify.php:265
+#, php-format
+msgid "Please visit %s to approve or reject the introduction."
+msgstr ""
+
+#: include/enotify.php:273
+msgid "[Friendica:Notify] A new person is sharing with you"
+msgstr ""
+
+#: include/enotify.php:275 include/enotify.php:276
+#, php-format
+msgid "%1$s is sharing with you at %2$s"
+msgstr ""
+
+#: include/enotify.php:282
+msgid "[Friendica:Notify] You have a new follower"
+msgstr ""
+
+#: 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:296
+msgid "[Friendica:Notify] Friend suggestion received"
+msgstr ""
+
+#: include/enotify.php:298
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
+msgstr ""
+
+#: 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:304
+msgid "Name:"
+msgstr ""
+
+#: include/enotify.php:305
+msgid "Photo:"
+msgstr ""
+
+#: include/enotify.php:308
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
+msgstr ""
+
+#: include/enotify.php:316 include/enotify.php:330
+msgid "[Friendica:Notify] Connection accepted"
+msgstr ""
+
+#: 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:319 include/enotify.php:333
+#, php-format
+msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
+msgstr ""
+
+#: include/enotify.php:323
+msgid ""
+"You are now mutual friends and may exchange status updates, photos, and "
+"email without restriction."
+msgstr ""
+
+#: include/enotify.php:325
+#, php-format
+msgid "Please visit %s if you wish to make any changes to this relationship."
+msgstr ""
+
+#: include/enotify.php:337
+#, php-format
+msgid ""
+"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
+"communication - such as private messaging and some profile interactions. If "
+"this is a celebrity or community page, these settings were applied "
+"automatically."
+msgstr ""
+
+#: 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:341
+#, php-format
+msgid "Please visit %s if you wish to make any changes to this relationship."
+msgstr ""
+
+#: include/enotify.php:351
+msgid "[Friendica System:Notify] registration request"
+msgstr ""
+
+#: include/enotify.php:353
+#, php-format
+msgid "You've received a registration request from '%1$s' at %2$s"
+msgstr ""
+
+#: include/enotify.php:354
+#, php-format
+msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
+msgstr ""
+
+#: 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:361
+#, php-format
+msgid "Please visit %s to approve or reject the request."
+msgstr ""
+
+#: include/event.php:409
+msgid "all-day"
+msgstr ""
+
+#: include/event.php:411
+msgid "Sun"
+msgstr ""
+
+#: include/event.php:412
+msgid "Mon"
+msgstr ""
+
+#: include/event.php:413
+msgid "Tue"
+msgstr ""
+
+#: include/event.php:414
+msgid "Wed"
+msgstr ""
+
+#: include/event.php:415
+msgid "Thu"
+msgstr ""
+
+#: include/event.php:416
+msgid "Fri"
+msgstr ""
+
+#: include/event.php:417
+msgid "Sat"
+msgstr ""
+
+#: include/event.php:419 include/text.php:1207 mod/settings.php:983
+msgid "Sunday"
+msgstr ""
+
+#: include/event.php:420 include/text.php:1207 mod/settings.php:983
+msgid "Monday"
+msgstr ""
+
+#: include/event.php:421 include/text.php:1207
+msgid "Tuesday"
+msgstr ""
+
+#: include/event.php:422 include/text.php:1207
+msgid "Wednesday"
+msgstr ""
+
+#: include/event.php:423 include/text.php:1207
+msgid "Thursday"
+msgstr ""
+
+#: include/event.php:424 include/text.php:1207
+msgid "Friday"
+msgstr ""
+
+#: include/event.php:425 include/text.php:1207
+msgid "Saturday"
+msgstr ""
+
+#: include/event.php:427
+msgid "Jan"
+msgstr ""
+
+#: include/event.php:428
+msgid "Feb"
+msgstr ""
+
+#: include/event.php:429
+msgid "Mar"
+msgstr ""
+
+#: include/event.php:430
+msgid "Apr"
+msgstr ""
+
+#: include/event.php:431 include/event.php:444 include/text.php:1211
+msgid "May"
+msgstr ""
+
+#: include/event.php:432
+msgid "Jun"
+msgstr ""
+
+#: include/event.php:433
+msgid "Jul"
+msgstr ""
+
+#: include/event.php:434
+msgid "Aug"
+msgstr ""
+
+#: include/event.php:435
+msgid "Sept"
+msgstr ""
+
+#: include/event.php:436
+msgid "Oct"
+msgstr ""
+
+#: include/event.php:437
+msgid "Nov"
+msgstr ""
+
+#: include/event.php:438
+msgid "Dec"
+msgstr ""
+
+#: include/event.php:440 include/text.php:1211
+msgid "January"
+msgstr ""
+
+#: include/event.php:441 include/text.php:1211
+msgid "February"
+msgstr ""
+
+#: include/event.php:442 include/text.php:1211
+msgid "March"
+msgstr ""
+
+#: include/event.php:443 include/text.php:1211
+msgid "April"
+msgstr ""
+
+#: include/event.php:445 include/text.php:1211
+msgid "June"
+msgstr ""
+
+#: include/event.php:446 include/text.php:1211
+msgid "July"
+msgstr ""
+
+#: include/event.php:447 include/text.php:1211
+msgid "August"
+msgstr ""
+
+#: include/event.php:448 include/text.php:1211
+msgid "September"
+msgstr ""
+
+#: include/event.php:449 include/text.php:1211
+msgid "October"
+msgstr ""
+
+#: include/event.php:450 include/text.php:1211
+msgid "November"
+msgstr ""
+
+#: include/event.php:451 include/text.php:1211
+msgid "December"
+msgstr ""
+
+#: include/event.php:453 mod/cal.php:281 mod/events.php:387
+msgid "today"
+msgstr ""
+
+#: include/event.php:458
+msgid "No events to display"
+msgstr ""
+
+#: include/event.php:571
+msgid "l, F j"
+msgstr ""
+
+#: include/event.php:593
+msgid "Edit event"
+msgstr ""
+
+#: include/event.php:594
+msgid "Delete event"
+msgstr ""
+
+#: include/event.php:620 include/text.php:1609 include/text.php:1616
+msgid "link to source"
+msgstr ""
+
+#: include/event.php:878
+msgid "Export"
+msgstr ""
+
+#: include/event.php:879
+msgid "Export calendar as ical"
+msgstr ""
+
+#: include/event.php:880
+msgid "Export calendar as csv"
+msgstr ""
+
+#: include/follow.php:85 mod/dfrn_request.php:515
+msgid "Disallowed profile URL."
+msgstr ""
+
+#: 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/follow.php:95
+msgid "Connect URL missing."
+msgstr ""
+
+#: include/follow.php:123
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr ""
+
+#: include/follow.php:124 include/follow.php:138
+msgid "No compatible communication protocols or feeds were discovered."
+msgstr ""
+
+#: include/follow.php:136
+msgid "The profile address specified does not provide adequate information."
+msgstr ""
+
+#: include/follow.php:141
+msgid "An author or name was not found."
+msgstr ""
+
+#: include/follow.php:144
+msgid "No browser URL could be matched to this address."
+msgstr ""
+
+#: include/follow.php:147
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
+msgstr ""
+
+#: include/follow.php:148
+msgid "Use mailto: in front of address to force email check."
+msgstr ""
+
+#: include/follow.php:154
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr ""
+
+#: include/follow.php:159
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
+msgstr ""
+
+#: include/follow.php:260
+msgid "Unable to retrieve contact information."
+msgstr ""
+
+#: include/identity.php:46
msgid "Requested account is not available."
msgstr ""
-#: include/identity.php:54 mod/profile.php:22
+#: include/identity.php:55 mod/profile.php:23
msgid "Requested profile is not available."
msgstr ""
-#: include/identity.php:98 include/identity.php:321 include/identity.php:754
+#: include/identity.php:99 include/identity.php:322 include/identity.php:755
msgid "Edit profile"
msgstr ""
-#: include/identity.php:261
+#: include/identity.php:262
msgid "Atom feed"
msgstr ""
-#: include/identity.php:292
+#: include/identity.php:293 include/nav.php:192
+msgid "Profiles"
+msgstr ""
+
+#: include/identity.php:293
msgid "Manage/edit profiles"
msgstr ""
-#: include/identity.php:297 include/identity.php:323 mod/profiles.php:790
+#: include/identity.php:298 include/identity.php:324 mod/profiles.php:791
msgid "Change profile photo"
msgstr ""
-#: include/identity.php:298 mod/profiles.php:791
+#: include/identity.php:299 mod/profiles.php:792
msgid "Create New Profile"
msgstr ""
-#: include/identity.php:308 mod/profiles.php:780
+#: include/identity.php:309 mod/profiles.php:781
msgid "Profile Image"
msgstr ""
-#: include/identity.php:311 mod/profiles.php:782
+#: include/identity.php:312 mod/profiles.php:783
msgid "visible to everybody"
msgstr ""
-#: include/identity.php:312 mod/profiles.php:687 mod/profiles.php:783
+#: include/identity.php:313 mod/profiles.php:688 mod/profiles.php:784
msgid "Edit visibility"
msgstr ""
-#: include/identity.php:340 include/identity.php:641 mod/directory.php:137
-#: mod/notifications.php:252
+#: include/identity.php:341 include/identity.php:642 mod/directory.php:137
+#: mod/notifications.php:253
msgid "Gender:"
msgstr ""
-#: include/identity.php:343 include/identity.php:664 mod/directory.php:139
+#: include/identity.php:344 include/identity.php:665 mod/directory.php:139
msgid "Status:"
msgstr ""
-#: include/identity.php:345 include/identity.php:681 mod/directory.php:141
+#: include/identity.php:346 include/identity.php:682 mod/directory.php:141
msgid "Homepage:"
msgstr ""
-#: include/identity.php:347 include/identity.php:701 mod/directory.php:143
-#: mod/notifications.php:248 mod/contacts.php:645
+#: include/identity.php:348 include/identity.php:702 mod/contacts.php:652
+#: mod/directory.php:143 mod/notifications.php:249
msgid "About:"
msgstr ""
-#: include/identity.php:349 mod/contacts.php:643
+#: include/identity.php:350 mod/contacts.php:650
msgid "XMPP:"
msgstr ""
-#: include/identity.php:435 mod/notifications.php:260 mod/contacts.php:58
+#: include/identity.php:436 mod/contacts.php:59 mod/notifications.php:261
msgid "Network:"
msgstr ""
-#: include/identity.php:464 include/identity.php:555
+#: include/identity.php:465 include/identity.php:556
msgid "g A l F d"
msgstr ""
-#: include/identity.php:465 include/identity.php:556
+#: include/identity.php:466 include/identity.php:557
msgid "F d"
msgstr ""
-#: include/identity.php:517 include/identity.php:603
+#: include/identity.php:518 include/identity.php:604
msgid "[today]"
msgstr ""
-#: include/identity.php:529
+#: include/identity.php:530
msgid "Birthday Reminders"
msgstr ""
-#: include/identity.php:530
+#: include/identity.php:531
msgid "Birthdays this week:"
msgstr ""
-#: include/identity.php:590
+#: include/identity.php:591
msgid "[No description]"
msgstr ""
-#: include/identity.php:617
+#: include/identity.php:618
msgid "Event Reminders"
msgstr ""
-#: include/identity.php:618
+#: include/identity.php:619
msgid "Events this week:"
msgstr ""
-#: include/identity.php:638 mod/settings.php:1287
+#: 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/identity.php:639 mod/settings.php:1288
msgid "Full Name:"
msgstr ""
-#: include/identity.php:645
+#: include/identity.php:646
msgid "j F, Y"
msgstr ""
-#: include/identity.php:646
+#: include/identity.php:647
msgid "j F"
msgstr ""
-#: include/identity.php:660
+#: include/identity.php:661
msgid "Age:"
msgstr ""
-#: include/identity.php:673
+#: include/identity.php:674
#, php-format
msgid "for %1$d %2$s"
msgstr ""
-#: include/identity.php:677 mod/profiles.php:706
+#: include/identity.php:678 mod/profiles.php:707
msgid "Sexual Preference:"
msgstr ""
-#: include/identity.php:685 mod/profiles.php:733
+#: include/identity.php:686 mod/profiles.php:734
msgid "Hometown:"
msgstr ""
-#: include/identity.php:689 mod/notifications.php:250 mod/follow.php:139
-#: mod/contacts.php:647
+#: include/identity.php:690 mod/contacts.php:654 mod/follow.php:174
+#: mod/notifications.php:251
msgid "Tags:"
msgstr ""
-#: include/identity.php:693 mod/profiles.php:734
+#: include/identity.php:694 mod/profiles.php:735
msgid "Political Views:"
msgstr ""
-#: include/identity.php:697
+#: include/identity.php:698
msgid "Religion:"
msgstr ""
-#: include/identity.php:705
+#: include/identity.php:706
msgid "Hobbies/Interests:"
msgstr ""
-#: include/identity.php:709 mod/profiles.php:738
+#: include/identity.php:710 mod/profiles.php:739
msgid "Likes:"
msgstr ""
-#: include/identity.php:713 mod/profiles.php:739
+#: include/identity.php:714 mod/profiles.php:740
msgid "Dislikes:"
msgstr ""
-#: include/identity.php:717
+#: include/identity.php:718
msgid "Contact information and Social Networks:"
msgstr ""
-#: include/identity.php:721
+#: include/identity.php:722
msgid "Musical interests:"
msgstr ""
-#: include/identity.php:725
+#: include/identity.php:726
msgid "Books, literature:"
msgstr ""
-#: include/identity.php:729
+#: include/identity.php:730
msgid "Television:"
msgstr ""
-#: include/identity.php:733
+#: include/identity.php:734
msgid "Film/dance/culture/entertainment:"
msgstr ""
-#: include/identity.php:737
+#: include/identity.php:738
msgid "Love/Romance:"
msgstr ""
-#: include/identity.php:741
+#: include/identity.php:742
msgid "Work/employment:"
msgstr ""
-#: include/identity.php:745
+#: include/identity.php:746
msgid "School/education:"
msgstr ""
-#: include/identity.php:750
+#: include/identity.php:751
msgid "Forums:"
msgstr ""
-#: include/identity.php:759 mod/events.php:509
+#: include/identity.php:760 mod/events.php:510
msgid "Basic"
msgstr ""
-#: include/identity.php:760 mod/events.php:510 mod/contacts.php:883
-#: mod/admin.php:1149
+#: include/identity.php:761 mod/admin.php:1151 mod/contacts.php:890
+#: mod/events.php:511
msgid "Advanced"
msgstr ""
-#: include/identity.php:786 mod/follow.php:147 mod/contacts.php:849
+#: 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/identity.php:787 mod/contacts.php:856 mod/follow.php:182
+#: mod/unfollow.php:133
msgid "Status Messages and Posts"
msgstr ""
-#: include/identity.php:794 mod/contacts.php:857
+#: include/identity.php:795 mod/contacts.php:864
msgid "Profile Details"
msgstr ""
-#: include/identity.php:802 mod/photos.php:95
+#: include/identity.php:800 include/nav.php:86 mod/fbrowser.php:34
+#: view/theme/frio/theme.php:255
+msgid "Photos"
+msgstr ""
+
+#: include/identity.php:803 mod/photos.php:96
msgid "Photo Albums"
msgstr ""
-#: include/identity.php:841 mod/notes.php:49
+#: include/identity.php:808 include/identity.php:811 include/nav.php:87
+#: view/theme/frio/theme.php:256
+msgid "Videos"
+msgstr ""
+
+#: 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/identity.php:823 include/identity.php:834 include/nav.php:152
+#: view/theme/frio/theme.php:261
+msgid "Events and Calendar"
+msgstr ""
+
+#: include/identity.php:842 mod/notes.php:49
msgid "Personal Notes"
msgstr ""
-#: include/identity.php:844
+#: include/identity.php:845
msgid "Only You Can See This"
msgstr ""
-#: include/items.php:1702 mod/dfrn_confirm.php:738 mod/dfrn_request.php:759
+#: 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/items.php:1715 mod/dfrn_confirm.php:738 mod/dfrn_request.php:760
msgid "[Name Withheld]"
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
+#: 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/items.php:2121
+#: include/items.php:2134
msgid "Do you really want to delete this item?"
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
+#: 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/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
+#: 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/items.php:2379
+#: include/items.php:2392
msgid "Archives"
msgstr ""
-#: include/network.php:700
+#: include/like.php:45
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
+msgstr ""
+
+#: include/like.php:50
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
+msgstr ""
+
+#: include/like.php:55
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
+msgstr ""
+
+#: include/message.php:15 include/message.php:169
+msgid "[no subject]"
+msgstr ""
+
+#: include/nav.php:38 mod/navigation.php:22
+msgid "Nothing new here"
+msgstr ""
+
+#: include/nav.php:42 mod/navigation.php:26
+msgid "Clear notifications"
+msgstr ""
+
+#: include/nav.php:43 include/text.php:1094
+msgid "@name, !forum, #tags, content"
+msgstr ""
+
+#: include/nav.php:81 view/theme/frio/theme.php:250 boot.php:860
+msgid "Logout"
+msgstr ""
+
+#: include/nav.php:81 view/theme/frio/theme.php:250
+msgid "End this session"
+msgstr ""
+
+#: include/nav.php:84 include/nav.php:164 view/theme/frio/theme.php:253
+msgid "Your posts and conversations"
+msgstr ""
+
+#: include/nav.php:85 view/theme/frio/theme.php:254
+msgid "Your profile page"
+msgstr ""
+
+#: include/nav.php:86 view/theme/frio/theme.php:255
+msgid "Your photos"
+msgstr ""
+
+#: include/nav.php:87 view/theme/frio/theme.php:256
+msgid "Your videos"
+msgstr ""
+
+#: include/nav.php:88 view/theme/frio/theme.php:257
+msgid "Your events"
+msgstr ""
+
+#: include/nav.php:89
+msgid "Personal notes"
+msgstr ""
+
+#: include/nav.php:89
+msgid "Your personal notes"
+msgstr ""
+
+#: include/nav.php:98 mod/bookmarklet.php:15 boot.php:861
+msgid "Login"
+msgstr ""
+
+#: include/nav.php:98
+msgid "Sign in"
+msgstr ""
+
+#: include/nav.php:108
+msgid "Home Page"
+msgstr ""
+
+#: include/nav.php:112 mod/register.php:293 boot.php:837
+msgid "Register"
+msgstr ""
+
+#: include/nav.php:112
+msgid "Create an account"
+msgstr ""
+
+#: include/nav.php:118 mod/help.php:51 view/theme/vier/theme.php:292
+msgid "Help"
+msgstr ""
+
+#: include/nav.php:118
+msgid "Help and documentation"
+msgstr ""
+
+#: include/nav.php:122
+msgid "Apps"
+msgstr ""
+
+#: include/nav.php:122
+msgid "Addon applications, utilities, games"
+msgstr ""
+
+#: include/nav.php:126 include/text.php:1091 mod/search.php:152
+msgid "Search"
+msgstr ""
+
+#: include/nav.php:126
+msgid "Search site content"
+msgstr ""
+
+#: include/nav.php:129 include/text.php:1099
+msgid "Full Text"
+msgstr ""
+
+#: include/nav.php:130 include/text.php:1100
+msgid "Tags"
+msgstr ""
+
+#: include/nav.php:146 include/nav.php:148 mod/community.php:31
+msgid "Community"
+msgstr ""
+
+#: include/nav.php:146
+msgid "Conversations on this site"
+msgstr ""
+
+#: include/nav.php:148
+msgid "Conversations on the network"
+msgstr ""
+
+#: include/nav.php:155
+msgid "Directory"
+msgstr ""
+
+#: include/nav.php:155
+msgid "People directory"
+msgstr ""
+
+#: include/nav.php:157
+msgid "Information"
+msgstr ""
+
+#: include/nav.php:157
+msgid "Information about this friendica instance"
+msgstr ""
+
+#: include/nav.php:161 view/theme/frio/theme.php:260
+msgid "Conversations from your friends"
+msgstr ""
+
+#: include/nav.php:162
+msgid "Network Reset"
+msgstr ""
+
+#: include/nav.php:162
+msgid "Load Network page with no filters"
+msgstr ""
+
+#: include/nav.php:169
+msgid "Friend Requests"
+msgstr ""
+
+#: include/nav.php:172 mod/notifications.php:99
+msgid "Notifications"
+msgstr ""
+
+#: include/nav.php:173
+msgid "See all notifications"
+msgstr ""
+
+#: include/nav.php:174 mod/settings.php:908
+msgid "Mark as seen"
+msgstr ""
+
+#: include/nav.php:174
+msgid "Mark all system notifications seen"
+msgstr ""
+
+#: include/nav.php:178 mod/message.php:180 view/theme/frio/theme.php:262
+msgid "Messages"
+msgstr ""
+
+#: include/nav.php:178 view/theme/frio/theme.php:262
+msgid "Private mail"
+msgstr ""
+
+#: include/nav.php:179
+msgid "Inbox"
+msgstr ""
+
+#: include/nav.php:180
+msgid "Outbox"
+msgstr ""
+
+#: include/nav.php:181 mod/message.php:19
+msgid "New Message"
+msgstr ""
+
+#: include/nav.php:184
+msgid "Manage"
+msgstr ""
+
+#: include/nav.php:184
+msgid "Manage other pages"
+msgstr ""
+
+#: include/nav.php:187 mod/settings.php:84
+msgid "Delegations"
+msgstr ""
+
+#: include/nav.php:187 mod/delegate.php:133
+msgid "Delegate Page Management"
+msgstr ""
+
+#: 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/nav.php:189 view/theme/frio/theme.php:263
+msgid "Account settings"
+msgstr ""
+
+#: include/nav.php:192
+msgid "Manage/Edit Profiles"
+msgstr ""
+
+#: include/nav.php:195 view/theme/frio/theme.php:264
+msgid "Manage/edit friends and contacts"
+msgstr ""
+
+#: include/nav.php:200 mod/admin.php:203
+msgid "Admin"
+msgstr ""
+
+#: include/nav.php:200
+msgid "Site setup and configuration"
+msgstr ""
+
+#: include/nav.php:203
+msgid "Navigation"
+msgstr ""
+
+#: include/nav.php:203
+msgid "Site map"
+msgstr ""
+
+#: include/network.php:701
msgid "view full size"
msgstr ""
-#: include/ostatus.php:1950
+#: include/oembed.php:254
+msgid "Embedded content"
+msgstr ""
+
+#: include/oembed.php:262
+msgid "Embedding disabled"
+msgstr ""
+
+#: 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,75 +2907,209 @@ 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 ""
+
+#: include/user.php:50
+msgid "An invitation is required."
+msgstr ""
+
+#: include/user.php:55
+msgid "Invitation could not be verified."
+msgstr ""
+
+#: include/user.php:63
+msgid "Invalid OpenID url"
+msgstr ""
+
+#: 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
@@ -3132,17 +3130,17 @@ msgid ""
"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,230 +3208,14 @@ 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."
-msgstr ""
-
-#: mod/cal.php:273 mod/events.php:378
-msgid "View"
-msgstr ""
-
-#: mod/cal.php:274 mod/events.php:380
-msgid "Previous"
-msgstr ""
-
-#: mod/cal.php:275 mod/install.php:203 mod/events.php:381
-msgid "Next"
-msgstr ""
-
-#: mod/cal.php:284 mod/events.php:390
-msgid "list"
-msgstr ""
-
-#: mod/cal.php:294
-msgid "User not found"
-msgstr ""
-
-#: mod/cal.php:310
-msgid "This calendar format is not supported"
-msgstr ""
-
-#: mod/cal.php:312
-msgid "No exportable data found"
-msgstr ""
-
-#: mod/cal.php:327
-msgid "calendar"
-msgstr ""
-
#: mod/common.php:93
msgid "No contacts in common."
msgstr ""
-#: mod/common.php:143 mod/contacts.php:876
+#: mod/common.php:143 mod/contacts.php:883
msgid "Common Friends"
msgstr ""
-#: mod/content.php:120 mod/network.php:490
-msgid "No such group"
-msgstr ""
-
-#: mod/content.php:131 mod/group.php:214 mod/network.php:517
-msgid "Group is empty"
-msgstr ""
-
-#: mod/content.php:136 mod/network.php:521
-#, php-format
-msgid "Group: %s"
-msgstr ""
-
-#: mod/content.php:326 object/Item.php:96
-msgid "This entry was edited"
-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"
-msgstr ""
-
-#: mod/content.php:703 mod/photos.php:1627 object/Item.php:270
-msgid "I like this (toggle)"
-msgstr ""
-
-#: mod/content.php:703 object/Item.php:270
-msgid "like"
-msgstr ""
-
-#: mod/content.php:704 mod/photos.php:1628 object/Item.php:271
-msgid "I don't like this (toggle)"
-msgstr ""
-
-#: mod/content.php:704 object/Item.php:271
-msgid "dislike"
-msgstr ""
-
-#: mod/content.php:706 object/Item.php:274
-msgid "Share this"
-msgstr ""
-
-#: mod/content.php:706 object/Item.php:274
-msgid "share"
-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"
-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"
-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"
-msgstr ""
-
-#: mod/content.php:730 object/Item.php:705
-msgid "Bold"
-msgstr ""
-
-#: mod/content.php:731 object/Item.php:706
-msgid "Italic"
-msgstr ""
-
-#: mod/content.php:732 object/Item.php:707
-msgid "Underline"
-msgstr ""
-
-#: mod/content.php:733 object/Item.php:708
-msgid "Quote"
-msgstr ""
-
-#: mod/content.php:734 object/Item.php:709
-msgid "Code"
-msgstr ""
-
-#: mod/content.php:735 object/Item.php:710
-msgid "Image"
-msgstr ""
-
-#: mod/content.php:736 object/Item.php:711
-msgid "Link"
-msgstr ""
-
-#: mod/content.php:737 object/Item.php:712
-msgid "Video"
-msgstr ""
-
-#: mod/content.php:747 mod/settings.php:744 object/Item.php:122
-#: object/Item.php:124
-msgid "Edit"
-msgstr ""
-
-#: mod/content.php:773 object/Item.php:237
-msgid "add star"
-msgstr ""
-
-#: mod/content.php:774 object/Item.php:238
-msgid "remove star"
-msgstr ""
-
-#: mod/content.php:775 object/Item.php:239
-msgid "toggle star status"
-msgstr ""
-
-#: mod/content.php:778 object/Item.php:242
-msgid "starred"
-msgstr ""
-
-#: mod/content.php:779 mod/content.php:801 object/Item.php:259
-msgid "add tag"
-msgstr ""
-
-#: mod/content.php:790 object/Item.php:247
-msgid "ignore thread"
-msgstr ""
-
-#: mod/content.php:791 object/Item.php:248
-msgid "unignore thread"
-msgstr ""
-
-#: mod/content.php:792 object/Item.php:249
-msgid "toggle ignore status"
-msgstr ""
-
-#: mod/content.php:795 mod/ostatus_subscribe.php:75 object/Item.php:252
-msgid "ignored"
-msgstr ""
-
-#: mod/content.php:806 object/Item.php:141
-msgid "save to folder"
-msgstr ""
-
-#: mod/content.php:854 object/Item.php:211
-msgid "I will attend"
-msgstr ""
-
-#: mod/content.php:854 object/Item.php:211
-msgid "I will not attend"
-msgstr ""
-
-#: mod/content.php:854 object/Item.php:211
-msgid "I might attend"
-msgstr ""
-
-#: mod/content.php:918 object/Item.php:354
-msgid "to"
-msgstr ""
-
-#: mod/content.php:919 object/Item.php:356
-msgid "Wall-to-Wall"
-msgstr ""
-
-#: mod/content.php:920 object/Item.php:357
-msgid "via Wall-To-Wall:"
-msgstr ""
-
#: mod/credits.php:19
msgid "Credits"
msgstr ""
@@ -3453,8 +3235,8 @@ msgstr ""
msgid "Contact update failed."
msgstr ""
-#: mod/crepair.php:119 mod/dfrn_confirm.php:128 mod/fsuggest.php:22
-#: mod/fsuggest.php:94
+#: mod/crepair.php:119 mod/fsuggest.php:22 mod/fsuggest.php:94
+#: mod/dfrn_confirm.php:129
msgid "Contact not found."
msgstr ""
@@ -3490,6 +3272,18 @@ msgstr ""
msgid "Refetch contact data"
msgstr ""
+#: 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/crepair.php:161
msgid "Remote Self"
msgstr ""
@@ -3504,8 +3298,8 @@ msgid ""
"entries from this contact."
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
+#: 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 ""
@@ -3541,208 +3335,10 @@ msgstr ""
msgid "New photo from this URL"
msgstr ""
-#: mod/delegate.php:103
-msgid "No potential page delegates located."
-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."
-msgstr ""
-
-#: mod/delegate.php:135
-msgid "Existing Page Managers"
-msgstr ""
-
-#: mod/delegate.php:137
-msgid "Existing Page Delegates"
-msgstr ""
-
-#: mod/delegate.php:139
-msgid "Potential Delegates"
-msgstr ""
-
-#: mod/delegate.php:141 mod/tagrm.php:97
-msgid "Remove"
-msgstr ""
-
-#: mod/delegate.php:142
-msgid "Add"
-msgstr ""
-
-#: mod/delegate.php:143
-msgid "No entries."
-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."
-msgstr ""
-
-#: mod/dfrn_confirm.php:129
-msgid ""
-"This may occasionally happen if contact was requested by both persons and it "
-"has already been approved."
-msgstr ""
-
-#: mod/dfrn_confirm.php:246
-msgid "Response from remote site was not understood."
-msgstr ""
-
-#: mod/dfrn_confirm.php:255 mod/dfrn_confirm.php:260
-msgid "Unexpected response from remote site: "
-msgstr ""
-
-#: mod/dfrn_confirm.php:269
-msgid "Confirmation completed successfully."
-msgstr ""
-
-#: mod/dfrn_confirm.php:271 mod/dfrn_confirm.php:285 mod/dfrn_confirm.php:292
-msgid "Remote site reported: "
-msgstr ""
-
-#: mod/dfrn_confirm.php:283
-msgid "Temporary failure. Please wait and try again."
-msgstr ""
-
-#: mod/dfrn_confirm.php:290
-msgid "Introduction failed or was revoked."
-msgstr ""
-
-#: mod/dfrn_confirm.php:420
-msgid "Unable to set contact photo."
-msgstr ""
-
-#: mod/dfrn_confirm.php:561
-#, php-format
-msgid "No user record found for '%s' "
-msgstr ""
-
-#: mod/dfrn_confirm.php:571
-msgid "Our site encryption key is apparently messed up."
-msgstr ""
-
-#: mod/dfrn_confirm.php:582
-msgid "Empty site URL was provided or URL could not be decrypted by us."
-msgstr ""
-
-#: mod/dfrn_confirm.php:604
-msgid "Contact record was not found for you on our site."
-msgstr ""
-
-#: mod/dfrn_confirm.php:618
-#, php-format
-msgid "Site public key not available in contact record for URL %s."
-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."
-msgstr ""
-
-#: mod/dfrn_confirm.php:649
-msgid "Unable to set your contact credentials on our system."
-msgstr ""
-
-#: mod/dfrn_confirm.php:711
-msgid "Unable to update your contact profile details on our system"
-msgstr ""
-
-#: mod/dfrn_confirm.php:783
-#, php-format
-msgid "%1$s has joined %2$s"
-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."
-msgstr ""
-
-#: mod/directory.php:195 view/theme/vier/theme.php:193
-msgid "Global Directory"
-msgstr ""
-
-#: mod/directory.php:197
-msgid "Find on this site"
-msgstr ""
-
-#: mod/directory.php:199
-msgid "Results for:"
-msgstr ""
-
-#: mod/directory.php:201
-msgid "Site Directory"
-msgstr ""
-
-#: mod/directory.php:208
-msgid "No entries (some entries may be hidden)."
-msgstr ""
-
-#: mod/editpost.php:19 mod/editpost.php:29
-msgid "Item not found"
-msgstr ""
-
-#: mod/editpost.php:34
-msgid "Edit post"
-msgstr ""
-
-#: mod/fbrowser.php:134
-msgid "Files"
-msgstr ""
-
#: mod/filer.php:31
msgid "- select -"
msgstr ""
-#: mod/friendica.php:69
-msgid "This is Friendica, version"
-msgstr ""
-
-#: mod/friendica.php:70
-msgid "running at web location"
-msgstr ""
-
-#: mod/friendica.php:74
-msgid ""
-"Please visit Friendica.com to learn "
-"more about the Friendica project."
-msgstr ""
-
-#: mod/friendica.php:78
-msgid "Bug reports and issues: please visit"
-msgstr ""
-
-#: mod/friendica.php:78
-msgid "the bugtracker at github"
-msgstr ""
-
-#: mod/friendica.php:81
-msgid ""
-"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
-"dot com"
-msgstr ""
-
-#: mod/friendica.php:95
-msgid "Installed plugins/addons/apps:"
-msgstr ""
-
-#: mod/friendica.php:109
-msgid "No installed plugins/addons/apps"
-msgstr ""
-
-#: mod/friendica.php:114
-msgid "On this server the following remote servers are blocked."
-msgstr ""
-
-#: mod/friendica.php:115 mod/admin.php:289 mod/admin.php:307
-msgid "Reason for the block"
-msgstr ""
-
#: mod/fsuggest.php:65
msgid "Friend suggestion sent."
msgstr ""
@@ -3756,452 +3352,6 @@ msgstr ""
msgid "Suggest a friend for %s"
msgstr ""
-#: mod/group.php:30
-msgid "Group created."
-msgstr ""
-
-#: mod/group.php:36
-msgid "Could not create group."
-msgstr ""
-
-#: mod/group.php:50 mod/group.php:155
-msgid "Group not found."
-msgstr ""
-
-#: mod/group.php:64
-msgid "Group name changed."
-msgstr ""
-
-#: mod/group.php:77 mod/profperm.php:22 index.php:409
-msgid "Permission denied"
-msgstr ""
-
-#: mod/group.php:94
-msgid "Save Group"
-msgstr ""
-
-#: mod/group.php:99
-msgid "Create a group of contacts/friends."
-msgstr ""
-
-#: mod/group.php:124
-msgid "Group removed."
-msgstr ""
-
-#: mod/group.php:126
-msgid "Unable to remove group."
-msgstr ""
-
-#: mod/group.php:190
-msgid "Delete Group"
-msgstr ""
-
-#: mod/group.php:196
-msgid "Group Editor"
-msgstr ""
-
-#: mod/group.php:201
-msgid "Edit Group Name"
-msgstr ""
-
-#: mod/group.php:211
-msgid "Members"
-msgstr ""
-
-#: mod/group.php:213 mod/contacts.php:705
-msgid "All Contacts"
-msgstr ""
-
-#: mod/group.php:227
-msgid "Remove Contact"
-msgstr ""
-
-#: mod/group.php:251
-msgid "Add Contact"
-msgstr ""
-
-#: mod/group.php:263 mod/profperm.php:109
-msgid "Click on a contact to add or remove."
-msgstr ""
-
-#: mod/hcard.php:13
-msgid "No profile"
-msgstr ""
-
-#: mod/home.php:41
-#, php-format
-msgid "Welcome to %s"
-msgstr ""
-
-#: mod/install.php:108
-msgid "Friendica Communications Server - Setup"
-msgstr ""
-
-#: mod/install.php:114
-msgid "Could not connect to database."
-msgstr ""
-
-#: mod/install.php:118
-msgid "Could not create table."
-msgstr ""
-
-#: mod/install.php:124
-msgid "Your Friendica site database has been installed."
-msgstr ""
-
-#: mod/install.php:129
-msgid ""
-"You may need to import the file \"database.sql\" manually using phpmyadmin "
-"or mysql."
-msgstr ""
-
-#: mod/install.php:130 mod/install.php:202 mod/install.php:549
-msgid "Please see the file \"INSTALL.txt\"."
-msgstr ""
-
-#: mod/install.php:142
-msgid "Database already in use."
-msgstr ""
-
-#: mod/install.php:199
-msgid "System check"
-msgstr ""
-
-#: mod/install.php:204
-msgid "Check again"
-msgstr ""
-
-#: mod/install.php:223
-msgid "Database connection"
-msgstr ""
-
-#: mod/install.php:224
-msgid ""
-"In order to install Friendica we need to know how to connect to your "
-"database."
-msgstr ""
-
-#: mod/install.php:225
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
-msgstr ""
-
-#: mod/install.php:226
-msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
-msgstr ""
-
-#: mod/install.php:230
-msgid "Database Server Name"
-msgstr ""
-
-#: mod/install.php:231
-msgid "Database Login Name"
-msgstr ""
-
-#: mod/install.php:232
-msgid "Database Login Password"
-msgstr ""
-
-#: mod/install.php:232
-msgid "For security reasons the password must not be empty"
-msgstr ""
-
-#: mod/install.php:233
-msgid "Database Name"
-msgstr ""
-
-#: mod/install.php:234 mod/install.php:275
-msgid "Site administrator email address"
-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."
-msgstr ""
-
-#: mod/install.php:238 mod/install.php:278
-msgid "Please select a default timezone for your website"
-msgstr ""
-
-#: mod/install.php:265
-msgid "Site settings"
-msgstr ""
-
-#: mod/install.php:279
-msgid "System Language:"
-msgstr ""
-
-#: mod/install.php:279
-msgid ""
-"Set the default language for your Friendica installation interface and to "
-"send emails."
-msgstr ""
-
-#: mod/install.php:319
-msgid "Could not find a command line version of PHP in the web server PATH."
-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'"
-msgstr ""
-
-#: mod/install.php:324
-msgid "PHP executable path"
-msgstr ""
-
-#: mod/install.php:324
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
-msgstr ""
-
-#: mod/install.php:329
-msgid "Command line PHP"
-msgstr ""
-
-#: mod/install.php:338
-msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
-msgstr ""
-
-#: mod/install.php:339
-msgid "Found PHP version: "
-msgstr ""
-
-#: mod/install.php:341
-msgid "PHP cli binary"
-msgstr ""
-
-#: mod/install.php:352
-msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
-msgstr ""
-
-#: mod/install.php:353
-msgid "This is required for message delivery to work."
-msgstr ""
-
-#: mod/install.php:355
-msgid "PHP register_argc_argv"
-msgstr ""
-
-#: mod/install.php:378
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
-msgstr ""
-
-#: mod/install.php:379
-msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
-msgstr ""
-
-#: mod/install.php:381
-msgid "Generate encryption keys"
-msgstr ""
-
-#: mod/install.php:388
-msgid "libCurl PHP module"
-msgstr ""
-
-#: mod/install.php:389
-msgid "GD graphics PHP module"
-msgstr ""
-
-#: mod/install.php:390
-msgid "OpenSSL PHP module"
-msgstr ""
-
-#: mod/install.php:391
-msgid "PDO or MySQLi PHP module"
-msgstr ""
-
-#: mod/install.php:392
-msgid "mb_string PHP module"
-msgstr ""
-
-#: mod/install.php:393
-msgid "XML PHP module"
-msgstr ""
-
-#: mod/install.php:394
-msgid "iconv module"
-msgstr ""
-
-#: mod/install.php:398 mod/install.php:400
-msgid "Apache mod_rewrite module"
-msgstr ""
-
-#: mod/install.php:398
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
-msgstr ""
-
-#: mod/install.php:406
-msgid "Error: libCURL PHP module required but not installed."
-msgstr ""
-
-#: mod/install.php:410
-msgid ""
-"Error: GD graphics PHP module with JPEG support required but not installed."
-msgstr ""
-
-#: mod/install.php:414
-msgid "Error: openssl PHP module required but not installed."
-msgstr ""
-
-#: mod/install.php:418
-msgid "Error: PDO or MySQLi PHP module required but not installed."
-msgstr ""
-
-#: mod/install.php:422
-msgid "Error: The MySQL driver for PDO is not installed."
-msgstr ""
-
-#: mod/install.php:426
-msgid "Error: mb_string PHP module required but not installed."
-msgstr ""
-
-#: mod/install.php:430
-msgid "Error: iconv PHP module required but not installed."
-msgstr ""
-
-#: mod/install.php:440
-msgid "Error, XML PHP module required but not installed."
-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."
-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."
-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."
-msgstr ""
-
-#: mod/install.php:455
-msgid ""
-"You can alternatively skip this procedure and perform a manual installation. "
-"Please see the file \"INSTALL.txt\" for instructions."
-msgstr ""
-
-#: mod/install.php:458
-msgid ".htconfig.php is writable"
-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."
-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."
-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."
-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."
-msgstr ""
-
-#: mod/install.php:474
-msgid "view/smarty3 is writable"
-msgstr ""
-
-#: mod/install.php:490
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
-msgstr ""
-
-#: mod/install.php:492
-msgid "Url rewrite is working"
-msgstr ""
-
-#: mod/install.php:511
-msgid "ImageMagick PHP extension is not installed"
-msgstr ""
-
-#: mod/install.php:513
-msgid "ImageMagick PHP extension is installed"
-msgstr ""
-
-#: mod/install.php:515
-msgid "ImageMagick supports GIF"
-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."
-msgstr ""
-
-#: mod/install.php:547
-msgid "What next
"
-msgstr ""
-
-#: mod/install.php:548
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
-msgstr ""
-
-#: mod/localtime.php:25
-msgid "Time Conversion"
-msgstr ""
-
-#: mod/localtime.php:27
-msgid ""
-"Friendica provides this service for sharing events with other networks and "
-"friends in unknown timezones."
-msgstr ""
-
-#: mod/localtime.php:31
-#, php-format
-msgid "UTC time: %s"
-msgstr ""
-
-#: mod/localtime.php:34
-#, php-format
-msgid "Current timezone: %s"
-msgstr ""
-
-#: mod/localtime.php:37
-#, php-format
-msgid "Converted localtime: %s"
-msgstr ""
-
-#: mod/localtime.php:42
-msgid "Please select your timezone:"
-msgstr ""
-
#: mod/lockview.php:33 mod/lockview.php:41
msgid "Remote privacy information not available."
msgstr ""
@@ -4210,279 +3360,10 @@ msgstr ""
msgid "Visible to:"
msgstr ""
-#: mod/lostpass.php:21
-msgid "No valid account found."
-msgstr ""
-
-#: mod/lostpass.php:37
-msgid "Password reset request issued. Check your email."
-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."
-msgstr ""
-
-#: mod/lostpass.php:54
-#, 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/lostpass.php:73
-#, php-format
-msgid "Password reset requested at %s"
-msgstr ""
-
-#: mod/lostpass.php:93
-msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
-msgstr ""
-
-#: mod/lostpass.php:112 boot.php:886
-msgid "Password Reset"
-msgstr ""
-
-#: mod/lostpass.php:113
-msgid "Your password has been reset as requested."
-msgstr ""
-
-#: mod/lostpass.php:114
-msgid "Your new password is"
-msgstr ""
-
-#: mod/lostpass.php:115
-msgid "Save or copy your new password - and then"
-msgstr ""
-
-#: mod/lostpass.php:116
-msgid "click here to login"
-msgstr ""
-
-#: mod/lostpass.php:117
-msgid ""
-"Your password may be changed from the Settings page after "
-"successful login."
-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"
-msgstr ""
-
-#: mod/lostpass.php:133
-#, php-format
-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"
-msgstr ""
-
-#: mod/lostpass.php:149
-#, php-format
-msgid "Your password has been changed at %s"
-msgstr ""
-
-#: mod/lostpass.php:161
-msgid "Forgot your Password?"
-msgstr ""
-
-#: mod/lostpass.php:162
-msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
-msgstr ""
-
-#: mod/lostpass.php:163 boot.php:874
-msgid "Nickname or Email: "
-msgstr ""
-
-#: mod/lostpass.php:164
-msgid "Reset"
-msgstr ""
-
#: mod/maintenance.php:21
msgid "System down for maintenance"
msgstr ""
-#: mod/manage.php:152
-msgid "Manage Identities and/or Pages"
-msgstr ""
-
-#: mod/manage.php:153
-msgid ""
-"Toggle between different identities or community/group pages which share "
-"your account details or which you have been granted \"manage\" permissions"
-msgstr ""
-
-#: mod/manage.php:154
-msgid "Select an identity to manage: "
-msgstr ""
-
-#: mod/match.php:38
-msgid "No keywords to match. Please add keywords to your default profile."
-msgstr ""
-
-#: mod/match.php:91
-msgid "is interested in:"
-msgstr ""
-
-#: mod/match.php:105
-msgid "Profile Match"
-msgstr ""
-
-#: mod/match.php:112 mod/dirfind.php:247
-msgid "No matches"
-msgstr ""
-
-#: mod/message.php:62 mod/wallmessage.php:52
-msgid "No recipient selected."
-msgstr ""
-
-#: mod/message.php:66
-msgid "Unable to locate contact information."
-msgstr ""
-
-#: mod/message.php:69 mod/wallmessage.php:58
-msgid "Message could not be sent."
-msgstr ""
-
-#: mod/message.php:72 mod/wallmessage.php:61
-msgid "Message collection failure."
-msgstr ""
-
-#: mod/message.php:75 mod/wallmessage.php:64
-msgid "Message sent."
-msgstr ""
-
-#: mod/message.php:206
-msgid "Do you really want to delete this message?"
-msgstr ""
-
-#: mod/message.php:226
-msgid "Message deleted."
-msgstr ""
-
-#: mod/message.php:257
-msgid "Conversation removed."
-msgstr ""
-
-#: mod/message.php:324 mod/wallmessage.php:128
-msgid "Send Private Message"
-msgstr ""
-
-#: mod/message.php:325 mod/message.php:512 mod/wallmessage.php:130
-msgid "To:"
-msgstr ""
-
-#: mod/message.php:330 mod/message.php:514 mod/wallmessage.php:131
-msgid "Subject:"
-msgstr ""
-
-#: mod/message.php:334 mod/message.php:517 mod/wallmessage.php:137
-#: mod/invite.php:143
-msgid "Your message:"
-msgstr ""
-
-#: mod/message.php:366
-msgid "No messages."
-msgstr ""
-
-#: mod/message.php:405
-msgid "Message not available."
-msgstr ""
-
-#: mod/message.php:479
-msgid "Delete message"
-msgstr ""
-
-#: mod/message.php:505 mod/message.php:593
-msgid "Delete conversation"
-msgstr ""
-
-#: mod/message.php:507
-msgid ""
-"No secure communications available. You may be able to "
-"respond from the sender's profile page."
-msgstr ""
-
-#: mod/message.php:511
-msgid "Send Reply"
-msgstr ""
-
-#: mod/message.php:563
-#, php-format
-msgid "Unknown sender - %s"
-msgstr ""
-
-#: mod/message.php:565
-#, php-format
-msgid "You and %s"
-msgstr ""
-
-#: mod/message.php:567
-#, php-format
-msgid "%s and You"
-msgstr ""
-
-#: mod/message.php:596
-msgid "D, d M Y - g:i A"
-msgstr ""
-
-#: mod/message.php:599
-#, php-format
-msgid "%d message"
-msgid_plural "%d messages"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/mood.php:135
-msgid "Mood"
-msgstr ""
-
-#: mod/mood.php:136
-msgid "Set your current mood and tell your friends"
-msgstr ""
-
#: mod/newmember.php:7
msgid "Welcome to Friendica"
msgstr ""
@@ -4533,7 +3414,7 @@ msgid ""
"potential friends know exactly how to find you."
msgstr ""
-#: mod/newmember.php:22 mod/profile_photo.php:255 mod/profiles.php:703
+#: mod/newmember.php:22 mod/profile_photo.php:256 mod/profiles.php:704
msgid "Upload Profile Photo"
msgstr ""
@@ -4652,13 +3533,13 @@ msgid ""
"features and resources."
msgstr ""
-#: mod/nogroup.php:45 mod/viewcontacts.php:105 mod/contacts.php:599
-#: mod/contacts.php:943
+#: 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/nogroup.php:46 mod/contacts.php:944
+#: mod/nogroup.php:46 mod/contacts.php:951
msgid "Edit contact"
msgstr ""
@@ -4666,413 +3547,8 @@ msgstr ""
msgid "Contacts who are not members of a group"
msgstr ""
-#: mod/notifications.php:37
-msgid "Invalid request identifier."
-msgstr ""
-
-#: mod/notifications.php:46 mod/notifications.php:182 mod/notifications.php:229
-msgid "Discard"
-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"
-msgstr ""
-
-#: mod/notifications.php:107
-msgid "Network Notifications"
-msgstr ""
-
-#: mod/notifications.php:113 mod/notify.php:72
-msgid "System Notifications"
-msgstr ""
-
-#: mod/notifications.php:119
-msgid "Personal Notifications"
-msgstr ""
-
-#: mod/notifications.php:125
-msgid "Home Notifications"
-msgstr ""
-
-#: mod/notifications.php:154
-msgid "Show Ignored Requests"
-msgstr ""
-
-#: mod/notifications.php:154
-msgid "Hide Ignored Requests"
-msgstr ""
-
-#: mod/notifications.php:166 mod/notifications.php:236
-msgid "Notification type: "
-msgstr ""
-
-#: mod/notifications.php:169
-#, php-format
-msgid "suggested by %s"
-msgstr ""
-
-#: mod/notifications.php:174 mod/notifications.php:253 mod/contacts.php:626
-msgid "Hide this contact from others"
-msgstr ""
-
-#: mod/notifications.php:175 mod/notifications.php:254
-msgid "Post a new friend activity"
-msgstr ""
-
-#: mod/notifications.php:175 mod/notifications.php:254
-msgid "if applicable"
-msgstr ""
-
-#: mod/notifications.php:178 mod/notifications.php:263 mod/admin.php:1596
-msgid "Approve"
-msgstr ""
-
-#: mod/notifications.php:197
-msgid "Claims to be known to you: "
-msgstr ""
-
-#: mod/notifications.php:198
-msgid "yes"
-msgstr ""
-
-#: mod/notifications.php:198
-msgid "no"
-msgstr ""
-
-#: mod/notifications.php:199 mod/notifications.php:204
-msgid "Shall your connection be bidirectional or not?"
-msgstr ""
-
-#: mod/notifications.php:200 mod/notifications.php:205
-#, 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 ""
-
-#: mod/notifications.php:201
-#, 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/notifications.php:206
-#, 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"
-msgstr ""
-
-#: mod/notifications.php:274
-msgid "No introductions."
-msgstr ""
-
-#: mod/notifications.php:315
-msgid "Show unread"
-msgstr ""
-
-#: mod/notifications.php:315
-msgid "Show all"
-msgstr ""
-
-#: mod/notifications.php:321
-#, php-format
-msgid "No more %s notifications."
-msgstr ""
-
-#: mod/notify.php:68
-msgid "No more system notifications."
-msgstr ""
-
-#: mod/oexchange.php:24
-msgid "Post successful."
-msgstr ""
-
-#: mod/openid.php:24
-msgid "OpenID protocol error. No ID returned."
-msgstr ""
-
-#: mod/openid.php:60
-msgid ""
-"Account not found and OpenID registration is not permitted on this site."
-msgstr ""
-
-#: mod/ostatus_subscribe.php:16
-msgid "Subscribing to OStatus contacts"
-msgstr ""
-
-#: mod/ostatus_subscribe.php:27
-msgid "No contact provided."
-msgstr ""
-
-#: mod/ostatus_subscribe.php:33
-msgid "Couldn't fetch information for contact."
-msgstr ""
-
-#: mod/ostatus_subscribe.php:42
-msgid "Couldn't fetch friends for contact."
-msgstr ""
-
-#: mod/ostatus_subscribe.php:56 mod/repair_ostatus.php:46
-msgid "Done"
-msgstr ""
-
-#: mod/ostatus_subscribe.php:70
-msgid "success"
-msgstr ""
-
-#: mod/ostatus_subscribe.php:72
-msgid "failed"
-msgstr ""
-
-#: mod/ostatus_subscribe.php:80 mod/repair_ostatus.php:52
-msgid "Keep this window open until done."
-msgstr ""
-
-#: mod/p.php:12
-msgid "Not Extended"
-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"
-msgstr ""
-
-#: mod/photos.php:96 mod/photos.php:1902
-msgid "Recent Photos"
-msgstr ""
-
-#: mod/photos.php:99 mod/photos.php:1330 mod/photos.php:1904
-msgid "Upload New Photos"
-msgstr ""
-
-#: mod/photos.php:114 mod/settings.php:38
-msgid "everybody"
-msgstr ""
-
-#: mod/photos.php:178
-msgid "Contact information unavailable"
-msgstr ""
-
-#: mod/photos.php:199
-msgid "Album not found."
-msgstr ""
-
-#: mod/photos.php:232 mod/photos.php:244 mod/photos.php:1274
-msgid "Delete Album"
-msgstr ""
-
-#: mod/photos.php:242
-msgid "Do you really want to delete this photo album and all its photos?"
-msgstr ""
-
-#: mod/photos.php:325 mod/photos.php:336 mod/photos.php:1600
-msgid "Delete Photo"
-msgstr ""
-
-#: mod/photos.php:334
-msgid "Do you really want to delete this photo?"
-msgstr ""
-
-#: mod/photos.php:715
-#, php-format
-msgid "%1$s was tagged in %2$s by %3$s"
-msgstr ""
-
-#: mod/photos.php:715
-msgid "a photo"
-msgstr ""
-
-#: mod/photos.php:815 mod/wall_upload.php:181 mod/profile_photo.php:155
-#, php-format
-msgid "Image exceeds size limit of %s"
-msgstr ""
-
-#: mod/photos.php:823
-msgid "Image file is empty."
-msgstr ""
-
-#: mod/photos.php:856 mod/wall_upload.php:218 mod/profile_photo.php:164
-msgid "Unable to process image."
-msgstr ""
-
-#: mod/photos.php:885 mod/wall_upload.php:257 mod/profile_photo.php:314
-msgid "Image upload failed."
-msgstr ""
-
-#: mod/photos.php:990
-msgid "No photos selected"
-msgstr ""
-
-#: mod/photos.php:1093 mod/videos.php:311
-msgid "Access to this item is restricted."
-msgstr ""
-
-#: mod/photos.php:1153
-#, php-format
-msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
-msgstr ""
-
-#: mod/photos.php:1190
-msgid "Upload Photos"
-msgstr ""
-
-#: mod/photos.php:1194 mod/photos.php:1269
-msgid "New album name: "
-msgstr ""
-
-#: mod/photos.php:1195
-msgid "or existing album name: "
-msgstr ""
-
-#: mod/photos.php:1196
-msgid "Do not show a status post for this upload"
-msgstr ""
-
-#: mod/photos.php:1207 mod/photos.php:1604 mod/settings.php:1308
-msgid "Show to Groups"
-msgstr ""
-
-#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309
-msgid "Show to Contacts"
-msgstr ""
-
-#: mod/photos.php:1209
-msgid "Private Photo"
-msgstr ""
-
-#: mod/photos.php:1210
-msgid "Public Photo"
-msgstr ""
-
-#: mod/photos.php:1280
-msgid "Edit Album"
-msgstr ""
-
-#: mod/photos.php:1285
-msgid "Show Newest First"
-msgstr ""
-
-#: mod/photos.php:1287
-msgid "Show Oldest First"
-msgstr ""
-
-#: mod/photos.php:1316 mod/photos.php:1887
-msgid "View Photo"
-msgstr ""
-
-#: mod/photos.php:1361
-msgid "Permission denied. Access to this item may be restricted."
-msgstr ""
-
-#: mod/photos.php:1363
-msgid "Photo not available"
-msgstr ""
-
-#: mod/photos.php:1424
-msgid "View photo"
-msgstr ""
-
-#: mod/photos.php:1424
-msgid "Edit photo"
-msgstr ""
-
-#: mod/photos.php:1425
-msgid "Use as profile photo"
-msgstr ""
-
-#: mod/photos.php:1450
-msgid "View Full Size"
-msgstr ""
-
-#: mod/photos.php:1540
-msgid "Tags: "
-msgstr ""
-
-#: mod/photos.php:1543
-msgid "[Remove any tag]"
-msgstr ""
-
-#: mod/photos.php:1586
-msgid "New album name"
-msgstr ""
-
-#: mod/photos.php:1587
-msgid "Caption"
-msgstr ""
-
-#: mod/photos.php:1588
-msgid "Add a Tag"
-msgstr ""
-
-#: mod/photos.php:1588
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
-msgstr ""
-
-#: mod/photos.php:1589
-msgid "Do not rotate"
-msgstr ""
-
-#: mod/photos.php:1590
-msgid "Rotate CW (right)"
-msgstr ""
-
-#: mod/photos.php:1591
-msgid "Rotate CCW (left)"
-msgstr ""
-
-#: mod/photos.php:1606
-msgid "Private photo"
-msgstr ""
-
-#: mod/photos.php:1607
-msgid "Public photo"
-msgstr ""
-
-#: mod/photos.php:1816
-msgid "Map"
-msgstr ""
-
-#: mod/photos.php:1893 mod/videos.php:395
-msgid "View Album"
-msgstr ""
-
-#: mod/poke.php:197
-msgid "Poke/Prod"
-msgstr ""
-
-#: mod/poke.php:198
-msgid "poke, prod or do other things to somebody"
-msgstr ""
-
-#: mod/poke.php:199
-msgid "Recipient"
-msgstr ""
-
-#: mod/poke.php:200
-msgid "Choose what you wish to do to recipient"
-msgstr ""
-
-#: mod/poke.php:203
-msgid "Make this post private"
+#: mod/profperm.php:22 mod/group.php:78 index.php:410
+msgid "Permission denied"
msgstr ""
#: mod/profperm.php:28 mod/profperm.php:59
@@ -5083,6 +3559,10 @@ msgstr ""
msgid "Profile Visibility Editor"
msgstr ""
+#: mod/profperm.php:109 mod/group.php:264
+msgid "Click on a contact to add or remove."
+msgstr ""
+
#: mod/profperm.php:118
msgid "Visible To"
msgstr ""
@@ -5091,107 +3571,16 @@ msgstr ""
msgid "All Contacts (with secure profile access)"
msgstr ""
-#: mod/removeme.php:54 mod/removeme.php:57
-msgid "Remove My Account"
-msgstr ""
-
-#: mod/removeme.php:55
-msgid ""
-"This will completely remove your account. Once this has been done it is not "
-"recoverable."
-msgstr ""
-
-#: mod/removeme.php:56
-msgid "Please enter your password for verification:"
-msgstr ""
-
-#: mod/repair_ostatus.php:16
-msgid "Resubscribing to OStatus contacts"
-msgstr ""
-
-#: mod/repair_ostatus.php:32
-msgid "Error"
-msgstr ""
-
-#: mod/subthread.php:105
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
-msgstr ""
-
-#: mod/suggest.php:29
-msgid "Do you really want to delete this suggestion?"
-msgstr ""
-
-#: mod/suggest.php:73
-msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
-msgstr ""
-
-#: mod/suggest.php:86 mod/suggest.php:106
-msgid "Ignore/Hide"
-msgstr ""
-
-#: mod/tagrm.php:45
-msgid "Tag removed"
-msgstr ""
-
-#: mod/tagrm.php:84
-msgid "Remove Item Tag"
-msgstr ""
-
-#: mod/tagrm.php:86
-msgid "Select a tag to remove: "
-msgstr ""
-
-#: mod/uexport.php:38
-msgid "Export account"
-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."
-msgstr ""
-
-#: mod/uexport.php:39
-msgid "Export all"
-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)"
-msgstr ""
-
-#: mod/uexport.php:46 mod/settings.php:97
-msgid "Export personal data"
-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]"
msgstr ""
-#: mod/videos.php:126
-msgid "Do you really want to delete this video?"
-msgstr ""
-
-#: mod/videos.php:131
-msgid "Delete Video"
-msgstr ""
-
-#: mod/videos.php:210
-msgid "No videos selected"
-msgstr ""
-
-#: mod/videos.php:404
-msgid "Recent Videos"
-msgstr ""
-
-#: mod/videos.php:406
-msgid "Upload New Videos"
+#: 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/viewcontacts.php:78
@@ -5203,8 +3592,8 @@ msgid "Access denied."
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
+#: 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 ""
@@ -5225,50 +3614,17 @@ msgstr ""
msgid "File upload failed."
msgstr ""
-#: mod/wallmessage.php:44 mod/wallmessage.php:108
-#, php-format
-msgid "Number of daily wall messages for %s exceeded. Message failed."
-msgstr ""
-
-#: mod/wallmessage.php:55
-msgid "Unable to check your home location."
-msgstr ""
-
-#: mod/wallmessage.php:82 mod/wallmessage.php:91
-msgid "No recipient."
-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."
-msgstr ""
-
#: mod/webfinger.php:11 mod/probe.php:10
msgid "Only logged in users are permitted to perform a probing."
msgstr ""
-#: mod/regmod.php:60
-msgid "Account approved."
-msgstr ""
-
-#: mod/regmod.php:88
-#, php-format
-msgid "Registration revoked for %s"
-msgstr ""
-
-#: mod/regmod.php:100
-msgid "Please login."
-msgstr ""
-
-#: mod/uimport.php:53 mod/register.php:201
+#: 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/uimport.php:68 mod/register.php:298
+#: mod/uimport.php:68 mod/register.php:299
msgid "Import"
msgstr ""
@@ -5303,737 +3659,7 @@ msgid ""
"select \"Export account\""
msgstr ""
-#: mod/dfrn_request.php:103
-msgid "This introduction has already been accepted."
-msgstr ""
-
-#: mod/dfrn_request.php:126 mod/dfrn_request.php:528
-msgid "Profile location is not valid or does not contain profile information."
-msgstr ""
-
-#: mod/dfrn_request.php:131 mod/dfrn_request.php:533
-msgid "Warning: profile location has no identifiable owner name."
-msgstr ""
-
-#: mod/dfrn_request.php:134 mod/dfrn_request.php:536
-msgid "Warning: profile location has no profile photo."
-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/dfrn_request.php:182
-msgid "Introduction complete."
-msgstr ""
-
-#: mod/dfrn_request.php:227
-msgid "Unrecoverable protocol error."
-msgstr ""
-
-#: mod/dfrn_request.php:255
-msgid "Profile unavailable."
-msgstr ""
-
-#: mod/dfrn_request.php:282
-#, php-format
-msgid "%s has received too many connection requests today."
-msgstr ""
-
-#: mod/dfrn_request.php:283
-msgid "Spam protection measures have been invoked."
-msgstr ""
-
-#: mod/dfrn_request.php:284
-msgid "Friends are advised to please try again in 24 hours."
-msgstr ""
-
-#: mod/dfrn_request.php:346
-msgid "Invalid locator"
-msgstr ""
-
-#: mod/dfrn_request.php:355
-msgid "Invalid email address."
-msgstr ""
-
-#: mod/dfrn_request.php:380
-msgid "This account has not been configured for email. Request failed."
-msgstr ""
-
-#: mod/dfrn_request.php:483
-msgid "You have already introduced yourself here."
-msgstr ""
-
-#: mod/dfrn_request.php:487
-#, php-format
-msgid "Apparently you are already friends with %s."
-msgstr ""
-
-#: mod/dfrn_request.php:508
-msgid "Invalid profile URL."
-msgstr ""
-
-#: mod/dfrn_request.php:593 mod/contacts.php:221
-msgid "Failed to update contact record."
-msgstr ""
-
-#: mod/dfrn_request.php:614
-msgid "Your introduction has been sent."
-msgstr ""
-
-#: mod/dfrn_request.php:656
-msgid ""
-"Remote subscription can't be done for your network. Please subscribe "
-"directly on your system."
-msgstr ""
-
-#: mod/dfrn_request.php:677
-msgid "Please login to confirm introduction."
-msgstr ""
-
-#: mod/dfrn_request.php:687
-msgid ""
-"Incorrect identity currently logged in. Please login to this"
-"strong> profile."
-msgstr ""
-
-#: mod/dfrn_request.php:701 mod/dfrn_request.php:718
-msgid "Confirm"
-msgstr ""
-
-#: mod/dfrn_request.php:713
-msgid "Hide this contact"
-msgstr ""
-
-#: mod/dfrn_request.php:716
-#, php-format
-msgid "Welcome home %s."
-msgstr ""
-
-#: mod/dfrn_request.php:717
-#, php-format
-msgid "Please confirm your introduction/connection request to %s."
-msgstr ""
-
-#: mod/dfrn_request.php:848
-msgid ""
-"Please enter your 'Identity Address' from one of the following supported "
-"communications networks:"
-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."
-msgstr ""
-
-#: mod/dfrn_request.php:877
-msgid "Friend/Connection Request"
-msgstr ""
-
-#: mod/dfrn_request.php:878
-msgid ""
-"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
-"testuser@identi.ca"
-msgstr ""
-
-#: mod/dfrn_request.php:879 mod/follow.php:114
-msgid "Please answer the following:"
-msgstr ""
-
-#: mod/dfrn_request.php:880 mod/follow.php:115
-#, php-format
-msgid "Does %s know you?"
-msgstr ""
-
-#: mod/dfrn_request.php:884 mod/follow.php:116
-msgid "Add a personal note:"
-msgstr ""
-
-#: mod/dfrn_request.php:887
-msgid "StatusNet/Federated Social Web"
-msgstr ""
-
-#: mod/dfrn_request.php:889
-#, php-format
-msgid ""
-" - please do not use this form. Instead, enter %s into your Diaspora search "
-"bar."
-msgstr ""
-
-#: mod/dfrn_request.php:890 mod/follow.php:122
-msgid "Your Identity Address:"
-msgstr ""
-
-#: mod/dfrn_request.php:893 mod/follow.php:21
-msgid "Submit Request"
-msgstr ""
-
-#: mod/dirfind.php:39
-#, php-format
-msgid "People Search - %s"
-msgstr ""
-
-#: mod/dirfind.php:50
-#, php-format
-msgid "Forum Search - %s"
-msgstr ""
-
-#: mod/events.php:96 mod/events.php:98
-msgid "Event can not end before it has started."
-msgstr ""
-
-#: mod/events.php:105 mod/events.php:107
-msgid "Event title and start time are required."
-msgstr ""
-
-#: mod/events.php:379
-msgid "Create New Event"
-msgstr ""
-
-#: mod/events.php:484
-msgid "Event details"
-msgstr ""
-
-#: mod/events.php:485
-msgid "Starting date and Title are required."
-msgstr ""
-
-#: mod/events.php:486 mod/events.php:487
-msgid "Event Starts:"
-msgstr ""
-
-#: mod/events.php:486 mod/events.php:498 mod/profiles.php:712
-msgid "Required"
-msgstr ""
-
-#: mod/events.php:488 mod/events.php:504
-msgid "Finish date/time is not known or not relevant"
-msgstr ""
-
-#: mod/events.php:490 mod/events.php:491
-msgid "Event Finishes:"
-msgstr ""
-
-#: mod/events.php:492 mod/events.php:505
-msgid "Adjust for viewer timezone"
-msgstr ""
-
-#: mod/events.php:494
-msgid "Description:"
-msgstr ""
-
-#: mod/events.php:498 mod/events.php:500
-msgid "Title:"
-msgstr ""
-
-#: mod/events.php:501 mod/events.php:502
-msgid "Share this event"
-msgstr ""
-
-#: mod/events.php:531
-msgid "Failed to remove event"
-msgstr ""
-
-#: mod/events.php:533
-msgid "Event removed"
-msgstr ""
-
-#: mod/follow.php:32
-msgid "You already added this contact."
-msgstr ""
-
-#: mod/follow.php:41
-msgid "Diaspora support isn't enabled. Contact can't be added."
-msgstr ""
-
-#: mod/follow.php:48
-msgid "OStatus support is disabled. Contact can't be added."
-msgstr ""
-
-#: mod/follow.php:55
-msgid "The network type couldn't be detected. Contact can't be added."
-msgstr ""
-
-#: mod/follow.php:188
-msgid "Contact added"
-msgstr ""
-
-#: mod/ping.php:274
-msgid "{0} wants to be your friend"
-msgstr ""
-
-#: mod/ping.php:289
-msgid "{0} sent you a message"
-msgstr ""
-
-#: mod/ping.php:304
-msgid "{0} requested registration"
-msgstr ""
-
-#: mod/profile_photo.php:44
-msgid "Image uploaded but image cropping failed."
-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."
-msgstr ""
-
-#: mod/profile_photo.php:127
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
-msgstr ""
-
-#: mod/profile_photo.php:136
-msgid "Unable to process image"
-msgstr ""
-
-#: mod/profile_photo.php:253
-msgid "Upload File:"
-msgstr ""
-
-#: mod/profile_photo.php:254
-msgid "Select a profile:"
-msgstr ""
-
-#: mod/profile_photo.php:256
-msgid "Upload"
-msgstr ""
-
-#: mod/profile_photo.php:259
-msgid "or"
-msgstr ""
-
-#: mod/profile_photo.php:259
-msgid "skip this step"
-msgstr ""
-
-#: mod/profile_photo.php:259
-msgid "select a photo from your photo albums"
-msgstr ""
-
-#: mod/profile_photo.php:273
-msgid "Crop Image"
-msgstr ""
-
-#: mod/profile_photo.php:274
-msgid "Please adjust the image cropping for optimum viewing."
-msgstr ""
-
-#: mod/profile_photo.php:276
-msgid "Done Editing"
-msgstr ""
-
-#: mod/profile_photo.php:312
-msgid "Image uploaded successfully."
-msgstr ""
-
-#: mod/profiles.php:42
-msgid "Profile deleted."
-msgstr ""
-
-#: mod/profiles.php:58 mod/profiles.php:94
-msgid "Profile-"
-msgstr ""
-
-#: mod/profiles.php:77 mod/profiles.php:122
-msgid "New profile created."
-msgstr ""
-
-#: mod/profiles.php:100
-msgid "Profile unavailable to clone."
-msgstr ""
-
-#: mod/profiles.php:196
-msgid "Profile Name is required."
-msgstr ""
-
-#: mod/profiles.php:336
-msgid "Marital Status"
-msgstr ""
-
-#: mod/profiles.php:340
-msgid "Romantic Partner"
-msgstr ""
-
-#: mod/profiles.php:352
-msgid "Work/Employment"
-msgstr ""
-
-#: mod/profiles.php:355
-msgid "Religion"
-msgstr ""
-
-#: mod/profiles.php:359
-msgid "Political Views"
-msgstr ""
-
-#: mod/profiles.php:363
-msgid "Gender"
-msgstr ""
-
-#: mod/profiles.php:367
-msgid "Sexual Preference"
-msgstr ""
-
-#: mod/profiles.php:371
-msgid "XMPP"
-msgstr ""
-
-#: mod/profiles.php:375
-msgid "Homepage"
-msgstr ""
-
-#: mod/profiles.php:379 mod/profiles.php:698
-msgid "Interests"
-msgstr ""
-
-#: mod/profiles.php:383
-msgid "Address"
-msgstr ""
-
-#: mod/profiles.php:390 mod/profiles.php:694
-msgid "Location"
-msgstr ""
-
-#: mod/profiles.php:475
-msgid "Profile updated."
-msgstr ""
-
-#: mod/profiles.php:567
-msgid " and "
-msgstr ""
-
-#: mod/profiles.php:576
-msgid "public profile"
-msgstr ""
-
-#: mod/profiles.php:579
-#, php-format
-msgid "%1$s changed %2$s to “%3$s”"
-msgstr ""
-
-#: mod/profiles.php:580
-#, php-format
-msgid " - Visit %1$s's %2$s"
-msgstr ""
-
-#: mod/profiles.php:582
-#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
-msgstr ""
-
-#: mod/profiles.php:640
-msgid "Hide contacts and friends:"
-msgstr ""
-
-#: mod/profiles.php:645
-msgid "Hide your contact/friend list from viewers of this profile?"
-msgstr ""
-
-#: mod/profiles.php:670
-msgid "Show more profile fields:"
-msgstr ""
-
-#: mod/profiles.php:682
-msgid "Profile Actions"
-msgstr ""
-
-#: mod/profiles.php:683
-msgid "Edit Profile Details"
-msgstr ""
-
-#: mod/profiles.php:685
-msgid "Change Profile Photo"
-msgstr ""
-
-#: mod/profiles.php:686
-msgid "View this profile"
-msgstr ""
-
-#: mod/profiles.php:688
-msgid "Create a new profile using these settings"
-msgstr ""
-
-#: mod/profiles.php:689
-msgid "Clone this profile"
-msgstr ""
-
-#: mod/profiles.php:690
-msgid "Delete this profile"
-msgstr ""
-
-#: mod/profiles.php:692
-msgid "Basic information"
-msgstr ""
-
-#: mod/profiles.php:693
-msgid "Profile picture"
-msgstr ""
-
-#: mod/profiles.php:695
-msgid "Preferences"
-msgstr ""
-
-#: mod/profiles.php:696
-msgid "Status information"
-msgstr ""
-
-#: mod/profiles.php:697
-msgid "Additional information"
-msgstr ""
-
-#: mod/profiles.php:700
-msgid "Relation"
-msgstr ""
-
-#: mod/profiles.php:704
-msgid "Your Gender:"
-msgstr ""
-
-#: mod/profiles.php:705
-msgid "♥ Marital Status:"
-msgstr ""
-
-#: mod/profiles.php:707
-msgid "Example: fishing photography software"
-msgstr ""
-
-#: mod/profiles.php:712
-msgid "Profile Name:"
-msgstr ""
-
-#: mod/profiles.php:714
-msgid ""
-"This is your public profile.
It may "
-"be visible to anybody using the internet."
-msgstr ""
-
-#: mod/profiles.php:715
-msgid "Your Full Name:"
-msgstr ""
-
-#: mod/profiles.php:716
-msgid "Title/Description:"
-msgstr ""
-
-#: mod/profiles.php:719
-msgid "Street Address:"
-msgstr ""
-
-#: mod/profiles.php:720
-msgid "Locality/City:"
-msgstr ""
-
-#: mod/profiles.php:721
-msgid "Region/State:"
-msgstr ""
-
-#: mod/profiles.php:722
-msgid "Postal/Zip Code:"
-msgstr ""
-
-#: mod/profiles.php:723
-msgid "Country:"
-msgstr ""
-
-#: mod/profiles.php:727
-msgid "Who: (if applicable)"
-msgstr ""
-
-#: mod/profiles.php:727
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
-msgstr ""
-
-#: mod/profiles.php:728
-msgid "Since [date]:"
-msgstr ""
-
-#: mod/profiles.php:730
-msgid "Tell us about yourself..."
-msgstr ""
-
-#: mod/profiles.php:731
-msgid "XMPP (Jabber) address:"
-msgstr ""
-
-#: mod/profiles.php:731
-msgid ""
-"The XMPP address will be propagated to your contacts so that they can follow "
-"you."
-msgstr ""
-
-#: mod/profiles.php:732
-msgid "Homepage URL:"
-msgstr ""
-
-#: mod/profiles.php:735
-msgid "Religious Views:"
-msgstr ""
-
-#: mod/profiles.php:736
-msgid "Public Keywords:"
-msgstr ""
-
-#: mod/profiles.php:736
-msgid "(Used for suggesting potential friends, can be seen by others)"
-msgstr ""
-
-#: mod/profiles.php:737
-msgid "Private Keywords:"
-msgstr ""
-
-#: mod/profiles.php:737
-msgid "(Used for searching profiles, never shown to others)"
-msgstr ""
-
-#: mod/profiles.php:740
-msgid "Musical interests"
-msgstr ""
-
-#: mod/profiles.php:741
-msgid "Books, literature"
-msgstr ""
-
-#: mod/profiles.php:742
-msgid "Television"
-msgstr ""
-
-#: mod/profiles.php:743
-msgid "Film/dance/culture/entertainment"
-msgstr ""
-
-#: mod/profiles.php:744
-msgid "Hobbies/Interests"
-msgstr ""
-
-#: mod/profiles.php:745
-msgid "Love/romance"
-msgstr ""
-
-#: mod/profiles.php:746
-msgid "Work/employment"
-msgstr ""
-
-#: mod/profiles.php:747
-msgid "School/education"
-msgstr ""
-
-#: mod/profiles.php:748
-msgid "Contact information and Social Networks"
-msgstr ""
-
-#: mod/profiles.php:789
-msgid "Edit/Manage Profiles"
-msgstr ""
-
-#: mod/register.php:96
-msgid ""
-"Registration successful. Please check your email for further instructions."
-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."
-msgstr ""
-
-#: mod/register.php:108
-msgid "Registration successful."
-msgstr ""
-
-#: mod/register.php:114
-msgid "Your registration can not be processed."
-msgstr ""
-
-#: mod/register.php:163
-msgid "Your registration is pending approval by the site owner."
-msgstr ""
-
-#: mod/register.php:229
-msgid ""
-"You may (optionally) fill in this form via OpenID by supplying your OpenID "
-"and clicking 'Register'."
-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."
-msgstr ""
-
-#: mod/register.php:231
-msgid "Your OpenID (optional): "
-msgstr ""
-
-#: mod/register.php:245
-msgid "Include your profile in member directory?"
-msgstr ""
-
-#: mod/register.php:270
-msgid "Note for the admin"
-msgstr ""
-
-#: mod/register.php:270
-msgid "Leave a message for the admin, why you want to join this node"
-msgstr ""
-
-#: mod/register.php:271
-msgid "Membership on this site is by invitation only."
-msgstr ""
-
-#: mod/register.php:272
-msgid "Your invitation ID: "
-msgstr ""
-
-#: mod/register.php:275 mod/admin.php:1146
-msgid "Registration"
-msgstr ""
-
-#: mod/register.php:283
-msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
-msgstr ""
-
-#: mod/register.php:284
-msgid "Your Email Address: "
-msgstr ""
-
-#: mod/register.php:286 mod/settings.php:1279
-msgid "New Password:"
-msgstr ""
-
-#: mod/register.php:286
-msgid "Leave empty for an auto generated password."
-msgstr ""
-
-#: mod/register.php:287 mod/settings.php:1280
-msgid "Confirm:"
-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"
-"strong>'."
-msgstr ""
-
-#: mod/register.php:289
-msgid "Choose a nickname: "
-msgstr ""
-
-#: mod/register.php:299
-msgid "Import your profile to this friendica instance"
-msgstr ""
-
-#: mod/search.php:28 mod/network.php:200
+#: mod/search.php:28 mod/network.php:187
msgid "Remove term"
msgstr ""
@@ -6058,1448 +3684,253 @@ msgstr ""
msgid "Items tagged with: %s"
msgstr ""
-#: mod/search.php:230 mod/contacts.php:810 mod/network.php:154
+#: mod/search.php:230 mod/contacts.php:817
#, php-format
msgid "Results for: %s"
msgstr ""
-#: mod/contacts.php:137
-#, php-format
-msgid "%d contact edited."
-msgid_plural "%d contacts edited."
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/contacts.php:172 mod/contacts.php:381
-msgid "Could not access contact record."
-msgstr ""
-
-#: mod/contacts.php:186
-msgid "Could not locate selected profile."
-msgstr ""
-
-#: mod/contacts.php:219
-msgid "Contact updated."
-msgstr ""
-
-#: mod/contacts.php:402
-msgid "Contact has been blocked"
-msgstr ""
-
-#: mod/contacts.php:402
-msgid "Contact has been unblocked"
-msgstr ""
-
-#: mod/contacts.php:413
-msgid "Contact has been ignored"
-msgstr ""
-
-#: mod/contacts.php:413
-msgid "Contact has been unignored"
-msgstr ""
-
-#: mod/contacts.php:425
-msgid "Contact has been archived"
-msgstr ""
-
-#: mod/contacts.php:425
-msgid "Contact has been unarchived"
-msgstr ""
-
-#: mod/contacts.php:450
-msgid "Drop contact"
-msgstr ""
-
-#: mod/contacts.php:453 mod/contacts.php:814
-msgid "Do you really want to delete this contact?"
-msgstr ""
-
-#: mod/contacts.php:472
-msgid "Contact has been removed."
-msgstr ""
-
-#: mod/contacts.php:509
-#, php-format
-msgid "You are mutual friends with %s"
-msgstr ""
-
-#: mod/contacts.php:513
-#, php-format
-msgid "You are sharing with %s"
-msgstr ""
-
-#: mod/contacts.php:518
-#, php-format
-msgid "%s is sharing with you"
-msgstr ""
-
-#: mod/contacts.php:538
-msgid "Private communications are not available for this contact."
-msgstr ""
-
-#: mod/contacts.php:541 mod/admin.php:1068
-msgid "Never"
-msgstr ""
-
-#: mod/contacts.php:545
-msgid "(Update was successful)"
-msgstr ""
-
-#: mod/contacts.php:545
-msgid "(Update was not successful)"
-msgstr ""
-
-#: mod/contacts.php:547 mod/contacts.php:977
-msgid "Suggest friends"
-msgstr ""
-
-#: mod/contacts.php:551
-#, php-format
-msgid "Network type: %s"
-msgstr ""
-
-#: mod/contacts.php:564
-msgid "Communications lost with this contact!"
-msgstr ""
-
-#: mod/contacts.php:567
-msgid "Fetch further information for feeds"
-msgstr ""
-
-#: mod/contacts.php:568 mod/admin.php:1077
-msgid "Disabled"
-msgstr ""
-
-#: mod/contacts.php:568
-msgid "Fetch information"
-msgstr ""
-
-#: mod/contacts.php:568
-msgid "Fetch information and keywords"
-msgstr ""
-
-#: mod/contacts.php:586
-msgid "Contact"
-msgstr ""
-
-#: mod/contacts.php:589
-msgid "Profile Visibility"
-msgstr ""
-
-#: mod/contacts.php:590
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
-msgstr ""
-
-#: mod/contacts.php:591
-msgid "Contact Information / Notes"
-msgstr ""
-
-#: mod/contacts.php:592
-msgid "Their personal note"
-msgstr ""
-
-#: mod/contacts.php:594
-msgid "Edit contact notes"
-msgstr ""
-
-#: mod/contacts.php:600
-msgid "Block/Unblock contact"
-msgstr ""
-
-#: mod/contacts.php:601
-msgid "Ignore contact"
-msgstr ""
-
-#: mod/contacts.php:602
-msgid "Repair URL settings"
-msgstr ""
-
-#: mod/contacts.php:603
-msgid "View conversations"
-msgstr ""
-
-#: mod/contacts.php:609
-msgid "Last update:"
-msgstr ""
-
-#: mod/contacts.php:611
-msgid "Update public posts"
-msgstr ""
-
-#: mod/contacts.php:613 mod/contacts.php:987
-msgid "Update now"
-msgstr ""
-
-#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996
-#: mod/admin.php:1600
-msgid "Unblock"
-msgstr ""
-
-#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996
-#: mod/admin.php:1599
-msgid "Block"
-msgstr ""
-
-#: mod/contacts.php:619 mod/contacts.php:819 mod/contacts.php:1004
-msgid "Unignore"
-msgstr ""
-
-#: mod/contacts.php:623
-msgid "Currently blocked"
-msgstr ""
-
-#: mod/contacts.php:624
-msgid "Currently ignored"
-msgstr ""
-
-#: mod/contacts.php:625
-msgid "Currently archived"
-msgstr ""
-
-#: mod/contacts.php:626
-msgid ""
-"Replies/likes to your public posts may still be visible"
-msgstr ""
-
-#: mod/contacts.php:627
-msgid "Notification for new posts"
-msgstr ""
-
-#: mod/contacts.php:627
-msgid "Send a notification of every new post of this contact"
-msgstr ""
-
-#: mod/contacts.php:630
-msgid "Blacklisted keywords"
-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"
-msgstr ""
-
-#: mod/contacts.php:648
-msgid "Actions"
-msgstr ""
-
-#: mod/contacts.php:651
-msgid "Contact Settings"
-msgstr ""
-
-#: mod/contacts.php:697
-msgid "Suggestions"
-msgstr ""
-
-#: mod/contacts.php:700
-msgid "Suggest potential friends"
-msgstr ""
-
-#: mod/contacts.php:708
-msgid "Show all contacts"
-msgstr ""
-
-#: mod/contacts.php:713
-msgid "Unblocked"
-msgstr ""
-
-#: mod/contacts.php:716
-msgid "Only show unblocked contacts"
-msgstr ""
-
-#: mod/contacts.php:722
-msgid "Blocked"
-msgstr ""
-
-#: mod/contacts.php:725
-msgid "Only show blocked contacts"
-msgstr ""
-
-#: mod/contacts.php:731
-msgid "Ignored"
-msgstr ""
-
-#: mod/contacts.php:734
-msgid "Only show ignored contacts"
-msgstr ""
-
-#: mod/contacts.php:740
-msgid "Archived"
-msgstr ""
-
-#: mod/contacts.php:743
-msgid "Only show archived contacts"
-msgstr ""
-
-#: mod/contacts.php:749
-msgid "Hidden"
-msgstr ""
-
-#: mod/contacts.php:752
-msgid "Only show hidden contacts"
-msgstr ""
-
-#: mod/contacts.php:809
-msgid "Search your contacts"
-msgstr ""
-
-#: mod/contacts.php:817 mod/settings.php:162 mod/settings.php:708
-msgid "Update"
-msgstr ""
-
-#: mod/contacts.php:820 mod/contacts.php:1012
-msgid "Archive"
-msgstr ""
-
-#: mod/contacts.php:820 mod/contacts.php:1012
-msgid "Unarchive"
-msgstr ""
-
-#: mod/contacts.php:823
-msgid "Batch Actions"
-msgstr ""
-
-#: mod/contacts.php:869
-msgid "View all contacts"
-msgstr ""
-
-#: mod/contacts.php:879
-msgid "View all common friends"
-msgstr ""
-
-#: mod/contacts.php:886
-msgid "Advanced Contact Settings"
-msgstr ""
-
-#: mod/contacts.php:920
-msgid "Mutual Friendship"
-msgstr ""
-
-#: mod/contacts.php:924
-msgid "is a fan of yours"
-msgstr ""
-
-#: mod/contacts.php:928
-msgid "you are a fan of"
-msgstr ""
-
-#: mod/contacts.php:998
-msgid "Toggle Blocked status"
-msgstr ""
-
-#: mod/contacts.php:1006
-msgid "Toggle Ignored status"
-msgstr ""
-
-#: mod/contacts.php:1014
-msgid "Toggle Archive status"
-msgstr ""
-
-#: mod/contacts.php:1022
-msgid "Delete contact"
-msgstr ""
-
-#: mod/help.php:44
-msgid "Help:"
-msgstr ""
-
-#: mod/help.php:59 index.php:304
-msgid "Page not found."
-msgstr ""
-
-#: mod/invite.php:30
-msgid "Total invitation limit exceeded."
-msgstr ""
-
-#: mod/invite.php:53
-#, php-format
-msgid "%s : Not a valid email address."
-msgstr ""
-
-#: mod/invite.php:78
-msgid "Please join us on Friendica"
-msgstr ""
-
-#: mod/invite.php:89
-msgid "Invitation limit exceeded. Please contact your site administrator."
-msgstr ""
-
-#: mod/invite.php:93
-#, php-format
-msgid "%s : Message delivery failed."
-msgstr ""
-
-#: mod/invite.php:97
-#, php-format
-msgid "%d message sent."
-msgid_plural "%d messages sent."
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/invite.php:116
-msgid "You have no more invitations available"
-msgstr ""
-
-#: mod/invite.php:124
-#, php-format
-msgid ""
-"Visit %s for a list of public sites that you can join. Friendica members on "
-"other sites can all connect with each other, as well as with members of many "
-"other social networks."
-msgstr ""
-
-#: mod/invite.php:126
-#, php-format
-msgid ""
-"To accept this invitation, please visit and register at %s or any other "
-"public Friendica website."
-msgstr ""
-
-#: mod/invite.php:127
-#, php-format
-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. See %s for a list of alternate Friendica "
-"sites you can join."
-msgstr ""
-
-#: mod/invite.php:131
-msgid ""
-"Our apologies. This system is not currently configured to connect with other "
-"public sites or invite members."
-msgstr ""
-
-#: mod/invite.php:134
-#, php-format
-msgid "To accept this invitation, please visit and register at %s."
-msgstr ""
-
-#: mod/invite.php:135
-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
-msgid "Send invitations"
-msgstr ""
-
-#: mod/invite.php:142
-msgid "Enter email addresses, one per line:"
-msgstr ""
-
-#: mod/invite.php:144
-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
-msgid "You will need to supply this invitation code: $invite_code"
-msgstr ""
-
-#: mod/invite.php:146
-msgid ""
-"Once you have registered, please connect with me via my profile page at:"
-msgstr ""
-
-#: mod/invite.php:148
-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"
-msgstr ""
-
-#: mod/settings.php:499
-msgid " Not valid email."
-msgstr ""
-
-#: mod/settings.php:505
-msgid " Cannot change to that email."
-msgstr ""
-
-#: mod/settings.php:561
-msgid "Private forum has no privacy permissions. Using default privacy group."
-msgstr ""
-
-#: mod/settings.php:565
-msgid "Private forum has no privacy permissions and no default privacy group."
-msgstr ""
-
-#: mod/settings.php:605
-msgid "Settings updated."
-msgstr ""
-
-#: mod/settings.php:681 mod/settings.php:707 mod/settings.php:743
-msgid "Add application"
-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"
-msgstr ""
-
-#: mod/settings.php:685 mod/settings.php:711
-msgid "Consumer Key"
-msgstr ""
-
-#: mod/settings.php:686 mod/settings.php:712
-msgid "Consumer Secret"
-msgstr ""
-
-#: mod/settings.php:687 mod/settings.php:713
-msgid "Redirect"
-msgstr ""
-
-#: mod/settings.php:688 mod/settings.php:714
-msgid "Icon url"
-msgstr ""
-
-#: mod/settings.php:699
-msgid "You can't edit this application."
-msgstr ""
-
-#: mod/settings.php:742
-msgid "Connected Apps"
-msgstr ""
-
-#: mod/settings.php:746
-msgid "Client key starts with"
-msgstr ""
-
-#: mod/settings.php:747
-msgid "No name"
-msgstr ""
-
-#: mod/settings.php:748
-msgid "Remove authorization"
-msgstr ""
-
-#: mod/settings.php:760
-msgid "No Plugin settings configured"
-msgstr ""
-
-#: mod/settings.php:769
-msgid "Plugin Settings"
-msgstr ""
-
-#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250
-msgid "Off"
-msgstr ""
-
-#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250
-msgid "On"
-msgstr ""
-
-#: mod/settings.php:791
-msgid "Additional Features"
-msgstr ""
-
-#: mod/settings.php:801 mod/settings.php:805
-msgid "General Social Media Settings"
-msgstr ""
-
-#: mod/settings.php:811
-msgid "Disable intelligent shortening"
-msgstr ""
-
-#: mod/settings.php:813
-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."
-msgstr ""
-
-#: mod/settings.php:819
-msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
-msgstr ""
-
-#: mod/settings.php:821
-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."
-msgstr ""
-
-#: mod/settings.php:827
-msgid "Default group for OStatus contacts"
-msgstr ""
-
-#: mod/settings.php:835
-msgid "Your legacy GNU Social account"
-msgstr ""
-
-#: mod/settings.php:837
-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/settings.php:840
-msgid "Repair OStatus subscriptions"
-msgstr ""
-
-#: mod/settings.php:849 mod/settings.php:850
-#, php-format
-msgid "Built-in support for %s connectivity is %s"
-msgstr ""
-
-#: mod/settings.php:849 mod/settings.php:850
-msgid "enabled"
-msgstr ""
-
-#: mod/settings.php:849 mod/settings.php:850
-msgid "disabled"
-msgstr ""
-
-#: mod/settings.php:850
-msgid "GNU Social (OStatus)"
-msgstr ""
-
-#: mod/settings.php:884
-msgid "Email access is disabled on this site."
-msgstr ""
-
-#: mod/settings.php:896
-msgid "Email/Mailbox Setup"
-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."
-msgstr ""
-
-#: mod/settings.php:898
-msgid "Last successful email check:"
-msgstr ""
-
-#: mod/settings.php:900
-msgid "IMAP server name:"
-msgstr ""
-
-#: mod/settings.php:901
-msgid "IMAP port:"
-msgstr ""
-
-#: mod/settings.php:902
-msgid "Security:"
-msgstr ""
-
-#: mod/settings.php:902 mod/settings.php:907
-msgid "None"
-msgstr ""
-
-#: mod/settings.php:903
-msgid "Email login name:"
-msgstr ""
-
-#: mod/settings.php:904
-msgid "Email password:"
-msgstr ""
-
-#: mod/settings.php:905
-msgid "Reply-to address:"
-msgstr ""
-
-#: mod/settings.php:906
-msgid "Send public posts to all email contacts:"
-msgstr ""
-
-#: mod/settings.php:907
-msgid "Action after import:"
-msgstr ""
-
-#: mod/settings.php:907
-msgid "Move to folder"
-msgstr ""
-
-#: mod/settings.php:908
-msgid "Move to folder:"
-msgstr ""
-
-#: mod/settings.php:944 mod/admin.php:1032
-msgid "No special theme for mobile devices"
-msgstr ""
-
-#: mod/settings.php:1004
-msgid "Display Settings"
-msgstr ""
-
-#: mod/settings.php:1010 mod/settings.php:1033
-msgid "Display Theme:"
-msgstr ""
-
-#: mod/settings.php:1011
-msgid "Mobile Theme:"
-msgstr ""
-
-#: mod/settings.php:1012
-msgid "Suppress warning of insecure networks"
-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."
-msgstr ""
-
-#: mod/settings.php:1013
-msgid "Update browser every xx seconds"
-msgstr ""
-
-#: mod/settings.php:1013
-msgid "Minimum of 10 seconds. Enter -1 to disable it."
-msgstr ""
-
-#: mod/settings.php:1014
-msgid "Number of items to display per page:"
-msgstr ""
-
-#: mod/settings.php:1014 mod/settings.php:1015
-msgid "Maximum of 100 items"
-msgstr ""
-
-#: mod/settings.php:1015
-msgid "Number of items to display per page when viewed from mobile device:"
-msgstr ""
-
-#: mod/settings.php:1016
-msgid "Don't show emoticons"
-msgstr ""
-
-#: mod/settings.php:1017
-msgid "Calendar"
-msgstr ""
-
-#: mod/settings.php:1018
-msgid "Beginning of week:"
-msgstr ""
-
-#: mod/settings.php:1019
-msgid "Don't show notices"
-msgstr ""
-
-#: mod/settings.php:1020
-msgid "Infinite scroll"
-msgstr ""
-
-#: mod/settings.php:1021
-msgid "Automatic updates only at the top of the network page"
-msgstr ""
-
-#: mod/settings.php:1021
-msgid ""
-"When disabled, the network page is updated all the time, which could be "
-"confusing while reading."
-msgstr ""
-
-#: mod/settings.php:1022
-msgid "Bandwith Saver Mode"
-msgstr ""
-
-#: mod/settings.php:1022
-msgid ""
-"When enabled, embedded content is not displayed on automatic updates, they "
-"only show on page reload."
-msgstr ""
-
-#: mod/settings.php:1024
-msgid "General Theme Settings"
-msgstr ""
-
-#: mod/settings.php:1025
-msgid "Custom Theme Settings"
-msgstr ""
-
-#: mod/settings.php:1026
-msgid "Content Settings"
-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"
-msgstr ""
-
-#: mod/settings.php:1111
-msgid "Account Types"
-msgstr ""
-
-#: mod/settings.php:1112
-msgid "Personal Page Subtypes"
-msgstr ""
-
-#: mod/settings.php:1113
-msgid "Community Forum Subtypes"
-msgstr ""
-
-#: mod/settings.php:1120
-msgid "Personal Page"
-msgstr ""
-
-#: mod/settings.php:1121
-msgid "Account for a personal profile."
-msgstr ""
-
-#: mod/settings.php:1124
-msgid "Organisation Page"
-msgstr ""
-
-#: mod/settings.php:1125
-msgid ""
-"Account for an organisation that automatically approves contact requests as "
-"\"Followers\"."
-msgstr ""
-
-#: mod/settings.php:1128
-msgid "News Page"
-msgstr ""
-
-#: mod/settings.php:1129
-msgid ""
-"Account for a news reflector that automatically approves contact requests as "
-"\"Followers\"."
-msgstr ""
-
-#: mod/settings.php:1132
-msgid "Community Forum"
-msgstr ""
-
-#: mod/settings.php:1133
-msgid "Account for community discussions."
-msgstr ""
-
-#: mod/settings.php:1136
-msgid "Normal Account Page"
-msgstr ""
-
-#: mod/settings.php:1137
-msgid ""
-"Account for a regular personal profile that requires manual approval of "
-"\"Friends\" and \"Followers\"."
-msgstr ""
-
-#: mod/settings.php:1140
-msgid "Soapbox Page"
-msgstr ""
-
-#: mod/settings.php:1141
-msgid ""
-"Account for a public profile that automatically approves contact requests as "
-"\"Followers\"."
-msgstr ""
-
-#: mod/settings.php:1144
-msgid "Public Forum"
-msgstr ""
-
-#: mod/settings.php:1145
-msgid "Automatically approves all contact requests."
-msgstr ""
-
-#: mod/settings.php:1148
-msgid "Automatic Friend Page"
-msgstr ""
-
-#: mod/settings.php:1149
-msgid ""
-"Account for a popular profile that automatically approves contact requests "
-"as \"Friends\"."
-msgstr ""
-
-#: mod/settings.php:1152
-msgid "Private Forum [Experimental]"
-msgstr ""
-
-#: mod/settings.php:1153
-msgid "Requires manual approval of contact requests."
-msgstr ""
-
-#: mod/settings.php:1164
-msgid "OpenID:"
-msgstr ""
-
-#: mod/settings.php:1164
-msgid "(Optional) Allow this OpenID to login to this account."
-msgstr ""
-
-#: mod/settings.php:1172
-msgid "Publish your default profile in your local site directory?"
-msgstr ""
-
-#: mod/settings.php:1172
-msgid "Your profile may be visible in public."
-msgstr ""
-
-#: mod/settings.php:1178
-msgid "Publish your default profile in the global social directory?"
-msgstr ""
-
-#: mod/settings.php:1185
-msgid "Hide your contact/friend list from viewers of your default profile?"
-msgstr ""
-
-#: mod/settings.php:1189
-msgid ""
-"If enabled, posting public messages to Diaspora and other networks isn't "
-"possible."
-msgstr ""
-
-#: mod/settings.php:1194
-msgid "Allow friends to post to your profile page?"
-msgstr ""
-
-#: mod/settings.php:1199
-msgid "Allow friends to tag your posts?"
-msgstr ""
-
-#: mod/settings.php:1204
-msgid "Allow us to suggest you as a potential friend to new members?"
-msgstr ""
-
-#: mod/settings.php:1209
-msgid "Permit unknown people to send you private mail?"
-msgstr ""
-
-#: mod/settings.php:1217
-msgid "Profile is not published."
-msgstr ""
-
-#: mod/settings.php:1225
-#, php-format
-msgid "Your Identity Address is '%s' or '%s'."
-msgstr ""
-
-#: mod/settings.php:1232
-msgid "Automatically expire posts after this many days:"
-msgstr ""
-
-#: mod/settings.php:1232
-msgid "If empty, posts will not expire. Expired posts will be deleted"
-msgstr ""
-
-#: mod/settings.php:1233
-msgid "Advanced expiration settings"
-msgstr ""
-
-#: mod/settings.php:1234
-msgid "Advanced Expiration"
-msgstr ""
-
-#: mod/settings.php:1235
-msgid "Expire posts:"
-msgstr ""
-
-#: mod/settings.php:1236
-msgid "Expire personal notes:"
-msgstr ""
-
-#: mod/settings.php:1237
-msgid "Expire starred posts:"
-msgstr ""
-
-#: mod/settings.php:1238
-msgid "Expire photos:"
-msgstr ""
-
-#: mod/settings.php:1239
-msgid "Only expire posts by others:"
-msgstr ""
-
-#: mod/settings.php:1270
-msgid "Account Settings"
-msgstr ""
-
-#: mod/settings.php:1278
-msgid "Password Settings"
-msgstr ""
-
-#: mod/settings.php:1280
-msgid "Leave password fields blank unless changing"
-msgstr ""
-
-#: mod/settings.php:1281
-msgid "Current Password:"
-msgstr ""
-
-#: mod/settings.php:1281 mod/settings.php:1282
-msgid "Your current password to confirm the changes"
-msgstr ""
-
-#: mod/settings.php:1282
-msgid "Password:"
-msgstr ""
-
-#: mod/settings.php:1286
-msgid "Basic Settings"
-msgstr ""
-
-#: mod/settings.php:1288
-msgid "Email Address:"
-msgstr ""
-
-#: mod/settings.php:1289
-msgid "Your Timezone:"
-msgstr ""
-
-#: mod/settings.php:1290
-msgid "Your Language:"
-msgstr ""
-
-#: mod/settings.php:1290
-msgid ""
-"Set the language we use to show you friendica interface and to send you "
-"emails"
-msgstr ""
-
-#: mod/settings.php:1291
-msgid "Default Post Location:"
-msgstr ""
-
-#: mod/settings.php:1292
-msgid "Use Browser Location:"
-msgstr ""
-
-#: mod/settings.php:1295
-msgid "Security and Privacy Settings"
-msgstr ""
-
-#: mod/settings.php:1297
-msgid "Maximum Friend Requests/Day:"
-msgstr ""
-
-#: mod/settings.php:1297 mod/settings.php:1327
-msgid "(to prevent spam abuse)"
-msgstr ""
-
-#: mod/settings.php:1298
-msgid "Default Post Permissions"
-msgstr ""
-
-#: mod/settings.php:1299
-msgid "(click to open/close)"
-msgstr ""
-
-#: mod/settings.php:1310
-msgid "Default Private Post"
-msgstr ""
-
-#: mod/settings.php:1311
-msgid "Default Public Post"
-msgstr ""
-
-#: mod/settings.php:1315
-msgid "Default Permissions for New Posts"
-msgstr ""
-
-#: mod/settings.php:1327
-msgid "Maximum private messages per day from unknown people:"
-msgstr ""
-
-#: mod/settings.php:1330
-msgid "Notification Settings"
-msgstr ""
-
-#: mod/settings.php:1331
-msgid "By default post a status message when:"
-msgstr ""
-
-#: mod/settings.php:1332
-msgid "accepting a friend request"
-msgstr ""
-
-#: mod/settings.php:1333
-msgid "joining a forum/community"
-msgstr ""
-
-#: mod/settings.php:1334
-msgid "making an interesting profile change"
-msgstr ""
-
-#: mod/settings.php:1335
-msgid "Send a notification email when:"
-msgstr ""
-
-#: mod/settings.php:1336
-msgid "You receive an introduction"
-msgstr ""
-
-#: mod/settings.php:1337
-msgid "Your introductions are confirmed"
-msgstr ""
-
-#: mod/settings.php:1338
-msgid "Someone writes on your profile wall"
-msgstr ""
-
-#: mod/settings.php:1339
-msgid "Someone writes a followup comment"
-msgstr ""
-
-#: mod/settings.php:1340
-msgid "You receive a private message"
-msgstr ""
-
-#: mod/settings.php:1341
-msgid "You receive a friend suggestion"
-msgstr ""
-
-#: mod/settings.php:1342
-msgid "You are tagged in a post"
-msgstr ""
-
-#: mod/settings.php:1343
-msgid "You are poked/prodded/etc. in a post"
-msgstr ""
-
-#: mod/settings.php:1345
-msgid "Activate desktop notifications"
-msgstr ""
-
-#: mod/settings.php:1345
-msgid "Show desktop popup on new notifications"
-msgstr ""
-
-#: mod/settings.php:1347
-msgid "Text-only notification emails"
-msgstr ""
-
-#: mod/settings.php:1349
-msgid "Send text only notification emails, without the html part"
-msgstr ""
-
-#: mod/settings.php:1351
-msgid "Advanced Account/Page Type Settings"
-msgstr ""
-
-#: mod/settings.php:1352
-msgid "Change the behaviour of this account for special situations"
-msgstr ""
-
-#: mod/settings.php:1355
-msgid "Relocate"
-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."
-msgstr ""
-
-#: mod/settings.php:1357
-msgid "Resend relocate message to contacts"
+#: mod/community.php:22
+msgid "Not available."
msgstr ""
-#: mod/admin.php:98
+#: mod/admin.php:99
msgid "Theme settings updated."
msgstr ""
-#: mod/admin.php:170 mod/admin.php:1144
+#: mod/admin.php:171 mod/admin.php:1146
msgid "Site"
msgstr ""
-#: mod/admin.php:171 mod/admin.php:1078 mod/admin.php:1588 mod/admin.php:1604
+#: mod/admin.php:172 mod/admin.php:1080 mod/admin.php:1590 mod/admin.php:1606
msgid "Users"
msgstr ""
-#: mod/admin.php:173 mod/admin.php:1982 mod/admin.php:2032
+#: mod/admin.php:173 mod/admin.php:1708 mod/admin.php:1771 mod/settings.php:77
+msgid "Plugins"
+msgstr ""
+
+#: mod/admin.php:174 mod/admin.php:1984 mod/admin.php:2034
msgid "Themes"
msgstr ""
-#: mod/admin.php:175
+#: mod/admin.php:175 mod/settings.php:55
+msgid "Additional features"
+msgstr ""
+
+#: mod/admin.php:176
msgid "DB updates"
msgstr ""
-#: mod/admin.php:176 mod/admin.php:582
+#: mod/admin.php:177 mod/admin.php:584
msgid "Inspect Queue"
msgstr ""
-#: mod/admin.php:177 mod/admin.php:297
+#: mod/admin.php:178 mod/admin.php:298
msgid "Server Blocklist"
msgstr ""
-#: mod/admin.php:178 mod/admin.php:548
+#: mod/admin.php:179 mod/admin.php:550
msgid "Federation Statistics"
msgstr ""
-#: mod/admin.php:179 mod/admin.php:374
+#: mod/admin.php:180 mod/admin.php:375
msgid "Delete Item"
msgstr ""
-#: mod/admin.php:193 mod/admin.php:204 mod/admin.php:2106
+#: mod/admin.php:194 mod/admin.php:205 mod/admin.php:2108
msgid "Logs"
msgstr ""
-#: mod/admin.php:194 mod/admin.php:2174
+#: mod/admin.php:195 mod/admin.php:2176
msgid "View Logs"
msgstr ""
-#: mod/admin.php:195
+#: mod/admin.php:196
msgid "probe address"
msgstr ""
-#: mod/admin.php:196
+#: mod/admin.php:197
msgid "check webfinger"
msgstr ""
-#: mod/admin.php:203
+#: mod/admin.php:204
msgid "Plugin Features"
msgstr ""
-#: mod/admin.php:205
+#: mod/admin.php:206
msgid "diagnostics"
msgstr ""
-#: mod/admin.php:206
+#: mod/admin.php:207
msgid "User registrations waiting for confirmation"
msgstr ""
-#: mod/admin.php:288
+#: mod/admin.php:289
msgid "The blocked domain"
msgstr ""
-#: mod/admin.php:289 mod/admin.php:302
+#: mod/admin.php:290 mod/admin.php:308 mod/friendica.php:116
+msgid "Reason for the block"
+msgstr ""
+
+#: mod/admin.php:290 mod/admin.php:303
msgid "The reason why you blocked this domain."
msgstr ""
-#: mod/admin.php:290
+#: mod/admin.php:291
msgid "Delete domain"
msgstr ""
-#: mod/admin.php:290
+#: mod/admin.php:291
msgid "Check to delete this entry from the blocklist"
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
+#: 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/admin.php:298
+#: 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/admin.php:299
+#: 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/admin.php:300
+#: mod/admin.php:301
msgid "Add new entry to block list"
msgstr ""
-#: mod/admin.php:301
+#: mod/admin.php:302
msgid "Server Domain"
msgstr ""
-#: mod/admin.php:301
+#: mod/admin.php:302
msgid ""
"The domain of the new server to add to the block list. Do not include the "
"protocol."
msgstr ""
-#: mod/admin.php:302
+#: mod/admin.php:303
msgid "Block reason"
msgstr ""
-#: mod/admin.php:303
+#: mod/admin.php:304
msgid "Add Entry"
msgstr ""
-#: mod/admin.php:304
+#: mod/admin.php:305
msgid "Save changes to the blocklist"
msgstr ""
-#: mod/admin.php:305
+#: mod/admin.php:306
msgid "Current Entries in the Blocklist"
msgstr ""
-#: mod/admin.php:308
+#: mod/admin.php:309
msgid "Delete entry from blocklist"
msgstr ""
-#: mod/admin.php:311
+#: mod/admin.php:312
msgid "Delete entry from blocklist?"
msgstr ""
-#: mod/admin.php:336
+#: mod/admin.php:337
msgid "Server added to blocklist."
msgstr ""
-#: mod/admin.php:352
+#: mod/admin.php:353
msgid "Site blocklist updated."
msgstr ""
-#: mod/admin.php:375
+#: mod/admin.php:376
msgid "Delete this Item"
msgstr ""
-#: mod/admin.php:376
+#: 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/admin.php:377
+#: 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/admin.php:378
+#: mod/admin.php:379
msgid "GUID"
msgstr ""
-#: mod/admin.php:378
+#: mod/admin.php:379
msgid "The GUID of the item you want to delete."
msgstr ""
-#: mod/admin.php:415
+#: mod/admin.php:416
msgid "Item marked for deletion."
msgstr ""
-#: mod/admin.php:478
+#: mod/admin.php:480
msgid "unknown"
msgstr ""
-#: mod/admin.php:541
+#: 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/admin.php:542
+#: mod/admin.php:544
msgid ""
"The Auto Discovered Contact Directory feature is not enabled, it "
"will improve the data displayed here."
msgstr ""
-#: mod/admin.php:554
+#: mod/admin.php:556
#, php-format
msgid "Currently this node is aware of %d nodes from the following platforms:"
msgstr ""
-#: mod/admin.php:584
+#: mod/admin.php:586
msgid "ID"
msgstr ""
-#: mod/admin.php:585
+#: mod/admin.php:587
msgid "Recipient Name"
msgstr ""
-#: mod/admin.php:586
+#: mod/admin.php:588
msgid "Recipient Profile"
msgstr ""
-#: mod/admin.php:588
+#: mod/admin.php:590
msgid "Created"
msgstr ""
-#: mod/admin.php:589
+#: mod/admin.php:591
msgid "Last Tried"
msgstr ""
-#: mod/admin.php:590
+#: mod/admin.php:592
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."
msgstr ""
-#: mod/admin.php:615
+#: mod/admin.php:617
#, php-format
msgid ""
"Your DB still runs with MyISAM tables. You should change the engine type to "
@@ -7510,643 +3941,666 @@ msgid ""
"automatic conversion.
"
msgstr ""
-#: mod/admin.php:624
+#: mod/admin.php:626
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."
msgstr ""
-#: mod/admin.php:629 mod/admin.php:1537
+#: mod/admin.php:631 mod/admin.php:1539
msgid "Normal Account"
msgstr ""
-#: mod/admin.php:630 mod/admin.php:1538
+#: mod/admin.php:632 mod/admin.php:1540
msgid "Automatic Follower Account"
msgstr ""
-#: mod/admin.php:631 mod/admin.php:1539
+#: mod/admin.php:633 mod/admin.php:1541
msgid "Public Forum Account"
msgstr ""
-#: mod/admin.php:632 mod/admin.php:1540
+#: mod/admin.php:634 mod/admin.php:1542
msgid "Automatic Friend Account"
msgstr ""
-#: mod/admin.php:633
+#: mod/admin.php:635
msgid "Blog Account"
msgstr ""
-#: mod/admin.php:634
+#: mod/admin.php:636
msgid "Private Forum Account"
msgstr ""
-#: mod/admin.php:656
+#: mod/admin.php:658
msgid "Message queues"
msgstr ""
-#: mod/admin.php:662
+#: mod/admin.php:664
msgid "Summary"
msgstr ""
-#: mod/admin.php:664
+#: mod/admin.php:666
msgid "Registered users"
msgstr ""
-#: mod/admin.php:666
+#: mod/admin.php:668
msgid "Pending registrations"
msgstr ""
-#: mod/admin.php:667
+#: mod/admin.php:669
msgid "Version"
msgstr ""
-#: mod/admin.php:672
+#: mod/admin.php:674
msgid "Active plugins"
msgstr ""
-#: mod/admin.php:697
+#: mod/admin.php:699
msgid "Can not parse base url. Must have at least ://"
msgstr ""
-#: mod/admin.php:1004
+#: mod/admin.php:1006
msgid "Site settings updated."
msgstr ""
-#: mod/admin.php:1061
-msgid "No community page"
-msgstr ""
-
-#: mod/admin.php:1062
-msgid "Public postings from users of this site"
+#: mod/admin.php:1034 mod/settings.php:945
+msgid "No special theme for mobile devices"
msgstr ""
#: mod/admin.php:1063
+msgid "No community page"
+msgstr ""
+
+#: mod/admin.php:1064
+msgid "Public postings from users of this site"
+msgstr ""
+
+#: mod/admin.php:1065
msgid "Global community page"
msgstr ""
-#: mod/admin.php:1069
+#: mod/admin.php:1070 mod/contacts.php:542
+msgid "Never"
+msgstr ""
+
+#: mod/admin.php:1071
msgid "At post arrival"
msgstr ""
-#: mod/admin.php:1079
+#: mod/admin.php:1079 mod/contacts.php:569
+msgid "Disabled"
+msgstr ""
+
+#: mod/admin.php:1081
msgid "Users, Global Contacts"
msgstr ""
-#: mod/admin.php:1080
+#: mod/admin.php:1082
msgid "Users, Global Contacts/fallback"
msgstr ""
-#: mod/admin.php:1084
+#: mod/admin.php:1086
msgid "One month"
msgstr ""
-#: mod/admin.php:1085
+#: mod/admin.php:1087
msgid "Three months"
msgstr ""
-#: mod/admin.php:1086
+#: mod/admin.php:1088
msgid "Half a year"
msgstr ""
-#: mod/admin.php:1087
+#: mod/admin.php:1089
msgid "One year"
msgstr ""
-#: mod/admin.php:1092
+#: mod/admin.php:1094
msgid "Multi user instance"
msgstr ""
-#: mod/admin.php:1115
+#: mod/admin.php:1117
msgid "Closed"
msgstr ""
-#: mod/admin.php:1116
+#: mod/admin.php:1118
msgid "Requires approval"
msgstr ""
-#: mod/admin.php:1117
+#: mod/admin.php:1119
msgid "Open"
msgstr ""
-#: mod/admin.php:1121
+#: mod/admin.php:1123
msgid "No SSL policy, links will track page SSL state"
msgstr ""
-#: mod/admin.php:1122
+#: mod/admin.php:1124
msgid "Force all links to use SSL"
msgstr ""
-#: mod/admin.php:1123
+#: mod/admin.php:1125
msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr ""
-#: mod/admin.php:1147
+#: 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/admin.php:1148 mod/register.php:276
+msgid "Registration"
+msgstr ""
+
+#: mod/admin.php:1149
msgid "File upload"
msgstr ""
-#: mod/admin.php:1148
+#: mod/admin.php:1150
msgid "Policies"
msgstr ""
-#: mod/admin.php:1150
+#: mod/admin.php:1152
msgid "Auto Discovered Contact Directory"
msgstr ""
-#: mod/admin.php:1151
+#: mod/admin.php:1153
msgid "Performance"
msgstr ""
-#: mod/admin.php:1152
+#: mod/admin.php:1154
msgid "Worker"
msgstr ""
-#: mod/admin.php:1153
+#: mod/admin.php:1155
msgid ""
"Relocate - WARNING: advanced function. Could make this server unreachable."
msgstr ""
-#: mod/admin.php:1156
+#: mod/admin.php:1158
msgid "Site name"
msgstr ""
-#: mod/admin.php:1157
+#: mod/admin.php:1159
msgid "Host name"
msgstr ""
-#: mod/admin.php:1158
+#: mod/admin.php:1160
msgid "Sender Email"
msgstr ""
-#: mod/admin.php:1158
+#: mod/admin.php:1160
msgid ""
"The email address your server shall use to send notification emails from."
msgstr ""
-#: mod/admin.php:1159
+#: mod/admin.php:1161
msgid "Banner/Logo"
msgstr ""
-#: mod/admin.php:1160
+#: mod/admin.php:1162
msgid "Shortcut icon"
msgstr ""
-#: mod/admin.php:1160
+#: mod/admin.php:1162
msgid "Link to an icon that will be used for browsers."
msgstr ""
-#: mod/admin.php:1161
+#: mod/admin.php:1163
msgid "Touch icon"
msgstr ""
-#: mod/admin.php:1161
+#: mod/admin.php:1163
msgid "Link to an icon that will be used for tablets and mobiles."
msgstr ""
-#: mod/admin.php:1162
+#: mod/admin.php:1164
msgid "Additional Info"
msgstr ""
-#: mod/admin.php:1162
+#: mod/admin.php:1164
#, php-format
msgid ""
"For public servers: you can add additional information here that will be "
"listed at %s/siteinfo."
msgstr ""
-#: mod/admin.php:1163
+#: mod/admin.php:1165
msgid "System language"
msgstr ""
-#: mod/admin.php:1164
+#: mod/admin.php:1166
msgid "System theme"
msgstr ""
-#: mod/admin.php:1164
+#: mod/admin.php:1166
msgid ""
"Default system theme - may be over-ridden by user profiles - change theme settings"
msgstr ""
-#: mod/admin.php:1165
+#: mod/admin.php:1167
msgid "Mobile system theme"
msgstr ""
-#: mod/admin.php:1165
+#: mod/admin.php:1167
msgid "Theme for mobile devices"
msgstr ""
-#: mod/admin.php:1166
+#: mod/admin.php:1168
msgid "SSL link policy"
msgstr ""
-#: mod/admin.php:1166
+#: mod/admin.php:1168
msgid "Determines whether generated links should be forced to use SSL"
msgstr ""
-#: mod/admin.php:1167
+#: mod/admin.php:1169
msgid "Force SSL"
msgstr ""
-#: mod/admin.php:1167
+#: mod/admin.php:1169
msgid ""
"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
"to endless loops."
msgstr ""
-#: mod/admin.php:1168
+#: mod/admin.php:1170
msgid "Hide help entry from navigation menu"
msgstr ""
-#: mod/admin.php:1168
+#: 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/admin.php:1169
+#: mod/admin.php:1171
msgid "Single user instance"
msgstr ""
-#: mod/admin.php:1169
+#: mod/admin.php:1171
msgid "Make this instance multi-user or single-user for the named user"
msgstr ""
-#: mod/admin.php:1170
+#: mod/admin.php:1172
msgid "Maximum image size"
msgstr ""
-#: mod/admin.php:1170
+#: mod/admin.php:1172
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr ""
-#: mod/admin.php:1171
+#: mod/admin.php:1173
msgid "Maximum image length"
msgstr ""
-#: mod/admin.php:1171
+#: 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/admin.php:1172
+#: mod/admin.php:1174
msgid "JPEG image quality"
msgstr ""
-#: mod/admin.php:1172
+#: mod/admin.php:1174
msgid ""
"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
"100, which is full quality."
msgstr ""
-#: mod/admin.php:1174
+#: mod/admin.php:1176
msgid "Register policy"
msgstr ""
-#: mod/admin.php:1175
+#: mod/admin.php:1177
msgid "Maximum Daily Registrations"
msgstr ""
-#: mod/admin.php:1175
+#: 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/admin.php:1176
+#: mod/admin.php:1178
msgid "Register text"
msgstr ""
-#: mod/admin.php:1176
+#: mod/admin.php:1178
msgid "Will be displayed prominently on the registration page."
msgstr ""
-#: mod/admin.php:1177
+#: mod/admin.php:1179
msgid "Accounts abandoned after x days"
msgstr ""
-#: mod/admin.php:1177
+#: mod/admin.php:1179
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr ""
-#: mod/admin.php:1178
+#: mod/admin.php:1180
msgid "Allowed friend domains"
msgstr ""
-#: mod/admin.php:1178
+#: mod/admin.php:1180
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr ""
-#: mod/admin.php:1179
+#: mod/admin.php:1181
msgid "Allowed email domains"
msgstr ""
-#: mod/admin.php:1179
+#: 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/admin.php:1180
+#: mod/admin.php:1182
msgid "Block public"
msgstr ""
-#: mod/admin.php:1180
+#: 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/admin.php:1181
+#: mod/admin.php:1183
msgid "Force publish"
msgstr ""
-#: mod/admin.php:1181
+#: mod/admin.php:1183
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr ""
-#: mod/admin.php:1182
+#: mod/admin.php:1184
msgid "Global directory URL"
msgstr ""
-#: mod/admin.php:1182
+#: mod/admin.php:1184
msgid ""
"URL to the global directory. If this is not set, the global directory is "
"completely unavailable to the application."
msgstr ""
-#: mod/admin.php:1183
+#: mod/admin.php:1185
msgid "Allow threaded items"
msgstr ""
-#: mod/admin.php:1183
+#: mod/admin.php:1185
msgid "Allow infinite level threading for items on this site."
msgstr ""
-#: mod/admin.php:1184
+#: mod/admin.php:1186
msgid "Private posts by default for new users"
msgstr ""
-#: mod/admin.php:1184
+#: mod/admin.php:1186
msgid ""
"Set default post permissions for all new members to the default privacy "
"group rather than public."
msgstr ""
-#: mod/admin.php:1185
+#: mod/admin.php:1187
msgid "Don't include post content in email notifications"
msgstr ""
-#: mod/admin.php:1185
+#: 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/admin.php:1186
+#: mod/admin.php:1188
msgid "Disallow public access to addons listed in the apps menu."
msgstr ""
-#: mod/admin.php:1186
+#: mod/admin.php:1188
msgid ""
"Checking this box will restrict addons listed in the apps menu to members "
"only."
msgstr ""
-#: mod/admin.php:1187
+#: mod/admin.php:1189
msgid "Don't embed private images in posts"
msgstr ""
-#: mod/admin.php:1187
+#: 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/admin.php:1188
+#: mod/admin.php:1190
msgid "Allow Users to set remote_self"
msgstr ""
-#: mod/admin.php:1188
+#: 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/admin.php:1189
+#: mod/admin.php:1191
msgid "Block multiple registrations"
msgstr ""
-#: mod/admin.php:1189
+#: mod/admin.php:1191
msgid "Disallow users to register additional accounts for use as pages."
msgstr ""
-#: mod/admin.php:1190
+#: mod/admin.php:1192
msgid "OpenID support"
msgstr ""
-#: mod/admin.php:1190
+#: mod/admin.php:1192
msgid "OpenID support for registration and logins."
msgstr ""
-#: mod/admin.php:1191
+#: mod/admin.php:1193
msgid "Fullname check"
msgstr ""
-#: mod/admin.php:1191
+#: 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/admin.php:1192
+#: mod/admin.php:1194
msgid "Community Page Style"
msgstr ""
-#: mod/admin.php:1192
+#: 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/admin.php:1193
+#: mod/admin.php:1195
msgid "Posts per user on community page"
msgstr ""
-#: mod/admin.php:1193
+#: mod/admin.php:1195
msgid ""
"The maximum number of posts per user on the community page. (Not valid for "
"'Global Community')"
msgstr ""
-#: mod/admin.php:1194
+#: mod/admin.php:1196
msgid "Enable OStatus support"
msgstr ""
-#: mod/admin.php:1194
+#: 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/admin.php:1195
+#: mod/admin.php:1197
msgid "OStatus conversation completion interval"
msgstr ""
-#: mod/admin.php:1195
+#: 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/admin.php:1196
+#: mod/admin.php:1198
msgid "Only import OStatus threads from our contacts"
msgstr ""
-#: mod/admin.php:1196
+#: 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/admin.php:1197
+#: mod/admin.php:1199
msgid "OStatus support can only be enabled if threading is enabled."
msgstr ""
-#: mod/admin.php:1199
+#: mod/admin.php:1201
msgid ""
"Diaspora support can't be enabled because Friendica was installed into a sub "
"directory."
msgstr ""
-#: mod/admin.php:1200
+#: mod/admin.php:1202
msgid "Enable Diaspora support"
msgstr ""
-#: mod/admin.php:1200
+#: mod/admin.php:1202
msgid "Provide built-in Diaspora network compatibility."
msgstr ""
-#: mod/admin.php:1201
+#: mod/admin.php:1203
msgid "Only allow Friendica contacts"
msgstr ""
-#: mod/admin.php:1201
+#: mod/admin.php:1203
msgid ""
"All contacts must use Friendica protocols. All other built-in communication "
"protocols disabled."
msgstr ""
-#: mod/admin.php:1202
+#: mod/admin.php:1204
msgid "Verify SSL"
msgstr ""
-#: mod/admin.php:1202
+#: mod/admin.php:1204
msgid ""
"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/admin.php:1203
+#: mod/admin.php:1205
msgid "Proxy user"
msgstr ""
-#: mod/admin.php:1204
+#: mod/admin.php:1206
msgid "Proxy URL"
msgstr ""
-#: mod/admin.php:1205
+#: mod/admin.php:1207
msgid "Network timeout"
msgstr ""
-#: mod/admin.php:1205
+#: mod/admin.php:1207
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr ""
-#: mod/admin.php:1206
+#: mod/admin.php:1208
msgid "Maximum Load Average"
msgstr ""
-#: mod/admin.php:1206
+#: mod/admin.php:1208
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
msgstr ""
-#: mod/admin.php:1207
+#: mod/admin.php:1209
msgid "Maximum Load Average (Frontend)"
msgstr ""
-#: mod/admin.php:1207
+#: mod/admin.php:1209
msgid "Maximum system load before the frontend quits service - default 50."
msgstr ""
-#: mod/admin.php:1208
+#: mod/admin.php:1210
msgid "Minimal Memory"
msgstr ""
-#: mod/admin.php:1208
+#: mod/admin.php:1210
msgid ""
"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - "
"default 0 (deactivated)."
msgstr ""
-#: mod/admin.php:1209
+#: mod/admin.php:1211
msgid "Maximum table size for optimization"
msgstr ""
-#: mod/admin.php:1209
+#: mod/admin.php:1211
msgid ""
"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
"Enter -1 to disable it."
msgstr ""
-#: mod/admin.php:1210
+#: mod/admin.php:1212
msgid "Minimum level of fragmentation"
msgstr ""
-#: mod/admin.php:1210
+#: mod/admin.php:1212
msgid ""
"Minimum fragmenation level to start the automatic optimization - default "
"value is 30%."
msgstr ""
-#: mod/admin.php:1212
+#: mod/admin.php:1214
msgid "Periodical check of global contacts"
msgstr ""
-#: mod/admin.php:1212
+#: mod/admin.php:1214
msgid ""
"If enabled, the global contacts are checked periodically for missing or "
"outdated data and the vitality of the contacts and servers."
msgstr ""
-#: mod/admin.php:1213
+#: mod/admin.php:1215
msgid "Days between requery"
msgstr ""
-#: mod/admin.php:1213
+#: mod/admin.php:1215
msgid "Number of days after which a server is requeried for his contacts."
msgstr ""
-#: mod/admin.php:1214
+#: mod/admin.php:1216
msgid "Discover contacts from other servers"
msgstr ""
-#: mod/admin.php:1214
+#: mod/admin.php:1216
msgid ""
"Periodically query other servers for contacts. You can choose between "
"'users': the users on the remote system, 'Global Contacts': active contacts "
@@ -8156,32 +4610,32 @@ msgid ""
"Global Contacts'."
msgstr ""
-#: mod/admin.php:1215
+#: mod/admin.php:1217
msgid "Timeframe for fetching global contacts"
msgstr ""
-#: mod/admin.php:1215
+#: mod/admin.php:1217
msgid ""
"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/admin.php:1216
+#: mod/admin.php:1218
msgid "Search the local directory"
msgstr ""
-#: mod/admin.php:1216
+#: mod/admin.php:1218
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."
msgstr ""
-#: mod/admin.php:1218
+#: mod/admin.php:1220
msgid "Publish server information"
msgstr ""
-#: mod/admin.php:1218
+#: mod/admin.php:1220
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 "
@@ -8189,133 +4643,133 @@ msgid ""
"href='http://the-federation.info/'>the-federation.info for details."
msgstr ""
-#: mod/admin.php:1220
+#: mod/admin.php:1222
msgid "Suppress Tags"
msgstr ""
-#: mod/admin.php:1220
+#: mod/admin.php:1222
msgid "Suppress showing a list of hashtags at the end of the posting."
msgstr ""
-#: mod/admin.php:1221
+#: mod/admin.php:1223
msgid "Path to item cache"
msgstr ""
-#: mod/admin.php:1221
+#: mod/admin.php:1223
msgid "The item caches buffers generated bbcode and external images."
msgstr ""
-#: mod/admin.php:1222
+#: mod/admin.php:1224
msgid "Cache duration in seconds"
msgstr ""
-#: mod/admin.php:1222
+#: mod/admin.php:1224
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."
msgstr ""
-#: mod/admin.php:1223
+#: mod/admin.php:1225
msgid "Maximum numbers of comments per post"
msgstr ""
-#: mod/admin.php:1223
+#: mod/admin.php:1225
msgid "How much comments should be shown for each post? Default value is 100."
msgstr ""
-#: mod/admin.php:1224
+#: mod/admin.php:1226
msgid "Temp path"
msgstr ""
-#: mod/admin.php:1224
+#: mod/admin.php:1226
msgid ""
"If you have a restricted system where the webserver can't access the system "
"temp path, enter another path here."
msgstr ""
-#: mod/admin.php:1225
+#: mod/admin.php:1227
msgid "Base path to installation"
msgstr ""
-#: mod/admin.php:1225
+#: 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/admin.php:1226
+#: mod/admin.php:1228
msgid "Disable picture proxy"
msgstr ""
-#: mod/admin.php:1226
+#: 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/admin.php:1227
+#: mod/admin.php:1229
msgid "Only search in tags"
msgstr ""
-#: mod/admin.php:1227
+#: mod/admin.php:1229
msgid "On large systems the text search can slow down the system extremely."
msgstr ""
-#: mod/admin.php:1229
+#: mod/admin.php:1231
msgid "New base url"
msgstr ""
-#: mod/admin.php:1229
+#: mod/admin.php:1231
msgid ""
"Change base url for this server. Sends relocate message to all DFRN contacts "
"of all users."
msgstr ""
-#: mod/admin.php:1231
+#: mod/admin.php:1233
msgid "RINO Encryption"
msgstr ""
-#: mod/admin.php:1231
+#: mod/admin.php:1233
msgid "Encryption layer between nodes."
msgstr ""
-#: mod/admin.php:1233
+#: mod/admin.php:1235
msgid "Maximum number of parallel workers"
msgstr ""
-#: mod/admin.php:1233
+#: 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/admin.php:1234
+#: mod/admin.php:1236
msgid "Don't use 'proc_open' with the worker"
msgstr ""
-#: mod/admin.php:1234
+#: 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:1235
+#: mod/admin.php:1237
msgid "Enable fastlane"
msgstr ""
-#: mod/admin.php:1235
+#: 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:1236
+#: mod/admin.php:1238
msgid "Enable frontend worker"
msgstr ""
-#: mod/admin.php:1236
+#: mod/admin.php:1238
#, php-format
msgid ""
"When enabled the Worker process is triggered when backend access is "
@@ -8325,66 +4779,66 @@ msgid ""
"server."
msgstr ""
-#: mod/admin.php:1266
+#: mod/admin.php:1268
msgid "Update has been marked successful"
msgstr ""
-#: mod/admin.php:1274
+#: mod/admin.php:1276
#, php-format
msgid "Database structure update %s was successfully applied."
msgstr ""
-#: mod/admin.php:1277
+#: mod/admin.php:1279
#, php-format
msgid "Executing of database structure update %s failed with error: %s"
msgstr ""
-#: mod/admin.php:1291
+#: mod/admin.php:1293
#, php-format
msgid "Executing %s failed with error: %s"
msgstr ""
-#: mod/admin.php:1294
+#: mod/admin.php:1296
#, php-format
msgid "Update %s was successfully applied."
msgstr ""
-#: mod/admin.php:1297
+#: mod/admin.php:1299
#, php-format
msgid "Update %s did not return a status. Unknown if it succeeded."
msgstr ""
-#: mod/admin.php:1300
+#: mod/admin.php:1302
#, php-format
msgid "There was no additional update function %s that needed to be called."
msgstr ""
-#: mod/admin.php:1320
+#: mod/admin.php:1322
msgid "No failed updates."
msgstr ""
-#: mod/admin.php:1321
+#: mod/admin.php:1323
msgid "Check database structure"
msgstr ""
-#: mod/admin.php:1326
+#: mod/admin.php:1328
msgid "Failed Updates"
msgstr ""
-#: mod/admin.php:1327
+#: mod/admin.php:1329
msgid ""
"This does not include updates prior to 1139, which did not return a status."
msgstr ""
-#: mod/admin.php:1328
+#: mod/admin.php:1330
msgid "Mark success (if update was manually applied)"
msgstr ""
-#: mod/admin.php:1329
+#: mod/admin.php:1331
msgid "Attempt to execute this update step automatically"
msgstr ""
-#: mod/admin.php:1363
+#: mod/admin.php:1365
#, php-format
msgid ""
"\n"
@@ -8392,7 +4846,7 @@ msgid ""
"\t\t\t\tthe administrator of %2$s has set up an account for you."
msgstr ""
-#: mod/admin.php:1366
+#: mod/admin.php:1368
#, php-format
msgid ""
"\n"
@@ -8428,158 +4882,176 @@ msgid ""
"\t\t\tThank you and welcome to %4$s."
msgstr ""
-#: mod/admin.php:1410
+#: mod/admin.php:1412
#, php-format
msgid "%s user blocked/unblocked"
msgid_plural "%s users blocked/unblocked"
msgstr[0] ""
msgstr[1] ""
-#: mod/admin.php:1417
+#: mod/admin.php:1419
#, php-format
msgid "%s user deleted"
msgid_plural "%s users deleted"
msgstr[0] ""
msgstr[1] ""
-#: mod/admin.php:1464
+#: mod/admin.php:1466
#, php-format
msgid "User '%s' deleted"
msgstr ""
-#: mod/admin.php:1472
+#: mod/admin.php:1474
#, php-format
msgid "User '%s' unblocked"
msgstr ""
-#: mod/admin.php:1472
+#: mod/admin.php:1474
#, php-format
msgid "User '%s' blocked"
msgstr ""
-#: mod/admin.php:1580 mod/admin.php:1606
+#: mod/admin.php:1582 mod/admin.php:1608
msgid "Register date"
msgstr ""
-#: mod/admin.php:1580 mod/admin.php:1606
+#: mod/admin.php:1582 mod/admin.php:1608
msgid "Last login"
msgstr ""
-#: mod/admin.php:1580 mod/admin.php:1606
+#: mod/admin.php:1582 mod/admin.php:1608
msgid "Last item"
msgstr ""
-#: mod/admin.php:1589
-msgid "Add User"
-msgstr ""
-
-#: mod/admin.php:1590
-msgid "select all"
+#: mod/admin.php:1582 mod/settings.php:46
+msgid "Account"
msgstr ""
#: mod/admin.php:1591
-msgid "User registrations waiting for confirm"
+msgid "Add User"
msgstr ""
#: mod/admin.php:1592
-msgid "User waiting for permanent deletion"
+msgid "select all"
msgstr ""
#: mod/admin.php:1593
-msgid "Request date"
+msgid "User registrations waiting for confirm"
msgstr ""
#: mod/admin.php:1594
-msgid "No registrations."
+msgid "User waiting for permanent deletion"
msgstr ""
#: mod/admin.php:1595
-msgid "Note from the user"
+msgid "Request date"
+msgstr ""
+
+#: mod/admin.php:1596
+msgid "No registrations."
msgstr ""
#: mod/admin.php:1597
+msgid "Note from the user"
+msgstr ""
+
+#: mod/admin.php:1598 mod/notifications.php:179 mod/notifications.php:264
+msgid "Approve"
+msgstr ""
+
+#: mod/admin.php:1599
msgid "Deny"
msgstr ""
-#: mod/admin.php:1601
+#: mod/admin.php:1601 mod/contacts.php:625 mod/contacts.php:825
+#: mod/contacts.php:1003
+msgid "Block"
+msgstr ""
+
+#: mod/admin.php:1602 mod/contacts.php:625 mod/contacts.php:825
+#: mod/contacts.php:1003
+msgid "Unblock"
+msgstr ""
+
+#: mod/admin.php:1603
msgid "Site admin"
msgstr ""
-#: mod/admin.php:1602
+#: mod/admin.php:1604
msgid "Account expired"
msgstr ""
-#: mod/admin.php:1605
+#: mod/admin.php:1607
msgid "New User"
msgstr ""
-#: mod/admin.php:1606
+#: mod/admin.php:1608
msgid "Deleted since"
msgstr ""
-#: mod/admin.php:1611
+#: 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/admin.php:1612
+#: 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/admin.php:1622
+#: mod/admin.php:1624
msgid "Name of the new user."
msgstr ""
-#: mod/admin.php:1623
+#: mod/admin.php:1625
msgid "Nickname"
msgstr ""
-#: mod/admin.php:1623
+#: mod/admin.php:1625
msgid "Nickname of the new user."
msgstr ""
-#: mod/admin.php:1624
+#: mod/admin.php:1626
msgid "Email address of the new user."
msgstr ""
-#: mod/admin.php:1667
+#: mod/admin.php:1669
#, php-format
msgid "Plugin %s disabled."
msgstr ""
-#: mod/admin.php:1671
+#: mod/admin.php:1673
#, php-format
msgid "Plugin %s enabled."
msgstr ""
-#: mod/admin.php:1682 mod/admin.php:1934
+#: mod/admin.php:1684 mod/admin.php:1936
msgid "Disable"
msgstr ""
-#: mod/admin.php:1684 mod/admin.php:1936
+#: mod/admin.php:1686 mod/admin.php:1938
msgid "Enable"
msgstr ""
-#: mod/admin.php:1707 mod/admin.php:1983
+#: mod/admin.php:1709 mod/admin.php:1985
msgid "Toggle"
msgstr ""
-#: mod/admin.php:1715 mod/admin.php:1992
+#: mod/admin.php:1717 mod/admin.php:1994
msgid "Author: "
msgstr ""
-#: mod/admin.php:1716 mod/admin.php:1993
+#: mod/admin.php:1718 mod/admin.php:1995
msgid "Maintainer: "
msgstr ""
-#: mod/admin.php:1771
+#: mod/admin.php:1773
msgid "Reload active plugins"
msgstr ""
-#: mod/admin.php:1776
+#: mod/admin.php:1778
#, php-format
msgid ""
"There are currently no plugins available on your node. You can find the "
@@ -8587,70 +5059,70 @@ msgid ""
"in the open plugin registry at %2$s"
msgstr ""
-#: mod/admin.php:1895
+#: mod/admin.php:1897
msgid "No themes found."
msgstr ""
-#: mod/admin.php:1974
+#: mod/admin.php:1976
msgid "Screenshot"
msgstr ""
-#: mod/admin.php:2034
+#: mod/admin.php:2036
msgid "Reload active themes"
msgstr ""
-#: mod/admin.php:2039
+#: mod/admin.php:2041
#, php-format
msgid "No themes found on the system. They should be paced in %1$s"
msgstr ""
-#: mod/admin.php:2040
+#: mod/admin.php:2042
msgid "[Experimental]"
msgstr ""
-#: mod/admin.php:2041
+#: mod/admin.php:2043
msgid "[Unsupported]"
msgstr ""
-#: mod/admin.php:2065
+#: mod/admin.php:2067
msgid "Log settings updated."
msgstr ""
-#: mod/admin.php:2097
+#: mod/admin.php:2099
msgid "PHP log currently enabled."
msgstr ""
-#: mod/admin.php:2099
+#: mod/admin.php:2101
msgid "PHP log currently disabled."
msgstr ""
-#: mod/admin.php:2108
+#: mod/admin.php:2110
msgid "Clear"
msgstr ""
-#: mod/admin.php:2113
+#: mod/admin.php:2115
msgid "Enable Debugging"
msgstr ""
-#: mod/admin.php:2114
+#: mod/admin.php:2116
msgid "Log file"
msgstr ""
-#: mod/admin.php:2114
+#: mod/admin.php:2116
msgid ""
"Must be writable by web server. Relative to your Friendica top-level "
"directory."
msgstr ""
-#: mod/admin.php:2115
+#: mod/admin.php:2117
msgid "Log level"
msgstr ""
-#: mod/admin.php:2118
+#: mod/admin.php:2120
msgid "PHP logging"
msgstr ""
-#: mod/admin.php:2119
+#: 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 "
@@ -8659,63 +5131,1885 @@ msgid ""
"'display_errors' is to enable these options, set to '0' to disable them."
msgstr ""
-#: mod/admin.php:2250
+#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784
+msgid "Off"
+msgstr ""
+
+#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784
+msgid "On"
+msgstr ""
+
+#: mod/admin.php:2252
#, php-format
msgid "Lock feature %s"
msgstr ""
-#: mod/admin.php:2258
+#: mod/admin.php:2260
msgid "Manage Additional Features"
msgstr ""
-#: mod/community.php:22
-msgid "Not available."
+#: mod/allfriends.php:49
+msgid "No friends to display."
msgstr ""
-#: mod/dfrn_poll.php:113 mod/dfrn_poll.php:549
+#: mod/bookmarklet.php:44
+msgid "The post was created"
+msgstr ""
+
+#: mod/cal.php:146 mod/display.php:348 mod/profile.php:157
+msgid "Access to this profile has been restricted."
+msgstr ""
+
+#: mod/cal.php:274 mod/events.php:379
+msgid "View"
+msgstr ""
+
+#: mod/cal.php:275 mod/events.php:381
+msgid "Previous"
+msgstr ""
+
+#: mod/cal.php:276 mod/events.php:382 mod/install.php:204
+msgid "Next"
+msgstr ""
+
+#: mod/cal.php:285 mod/events.php:391
+msgid "list"
+msgstr ""
+
+#: mod/cal.php:295
+msgid "User not found"
+msgstr ""
+
+#: mod/cal.php:311
+msgid "This calendar format is not supported"
+msgstr ""
+
+#: mod/cal.php:313
+msgid "No exportable data found"
+msgstr ""
+
+#: mod/cal.php:328
+msgid "calendar"
+msgstr ""
+
+#: mod/contacts.php:138
+#, php-format
+msgid "%d contact edited."
+msgid_plural "%d contacts edited."
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/contacts.php:173 mod/contacts.php:382
+msgid "Could not access contact record."
+msgstr ""
+
+#: mod/contacts.php:187
+msgid "Could not locate selected profile."
+msgstr ""
+
+#: mod/contacts.php:220
+msgid "Contact updated."
+msgstr ""
+
+#: mod/contacts.php:222 mod/dfrn_request.php:594
+msgid "Failed to update contact record."
+msgstr ""
+
+#: mod/contacts.php:403
+msgid "Contact has been blocked"
+msgstr ""
+
+#: mod/contacts.php:403
+msgid "Contact has been unblocked"
+msgstr ""
+
+#: mod/contacts.php:414
+msgid "Contact has been ignored"
+msgstr ""
+
+#: mod/contacts.php:414
+msgid "Contact has been unignored"
+msgstr ""
+
+#: mod/contacts.php:426
+msgid "Contact has been archived"
+msgstr ""
+
+#: mod/contacts.php:426
+msgid "Contact has been unarchived"
+msgstr ""
+
+#: mod/contacts.php:451
+msgid "Drop contact"
+msgstr ""
+
+#: mod/contacts.php:454 mod/contacts.php:821
+msgid "Do you really want to delete this contact?"
+msgstr ""
+
+#: mod/contacts.php:473
+msgid "Contact has been removed."
+msgstr ""
+
+#: mod/contacts.php:510
+#, php-format
+msgid "You are mutual friends with %s"
+msgstr ""
+
+#: mod/contacts.php:514
+#, php-format
+msgid "You are sharing with %s"
+msgstr ""
+
+#: mod/contacts.php:519
+#, php-format
+msgid "%s is sharing with you"
+msgstr ""
+
+#: mod/contacts.php:539
+msgid "Private communications are not available for this contact."
+msgstr ""
+
+#: mod/contacts.php:546
+msgid "(Update was successful)"
+msgstr ""
+
+#: mod/contacts.php:546
+msgid "(Update was not successful)"
+msgstr ""
+
+#: mod/contacts.php:548 mod/contacts.php:984
+msgid "Suggest friends"
+msgstr ""
+
+#: mod/contacts.php:552
+#, php-format
+msgid "Network type: %s"
+msgstr ""
+
+#: mod/contacts.php:565
+msgid "Communications lost with this contact!"
+msgstr ""
+
+#: mod/contacts.php:568
+msgid "Fetch further information for feeds"
+msgstr ""
+
+#: mod/contacts.php:569
+msgid "Fetch information"
+msgstr ""
+
+#: mod/contacts.php:569
+msgid "Fetch information and keywords"
+msgstr ""
+
+#: mod/contacts.php:583 mod/unfollow.php:100
+msgid "Disconnect/Unfollow"
+msgstr ""
+
+#: mod/contacts.php:593
+msgid "Contact"
+msgstr ""
+
+#: mod/contacts.php:596
+msgid "Profile Visibility"
+msgstr ""
+
+#: 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/contacts.php:598
+msgid "Contact Information / Notes"
+msgstr ""
+
+#: mod/contacts.php:599
+msgid "Their personal note"
+msgstr ""
+
+#: mod/contacts.php:601
+msgid "Edit contact notes"
+msgstr ""
+
+#: mod/contacts.php:607
+msgid "Block/Unblock contact"
+msgstr ""
+
+#: mod/contacts.php:608
+msgid "Ignore contact"
+msgstr ""
+
+#: mod/contacts.php:609
+msgid "Repair URL settings"
+msgstr ""
+
+#: mod/contacts.php:610
+msgid "View conversations"
+msgstr ""
+
+#: mod/contacts.php:616
+msgid "Last update:"
+msgstr ""
+
+#: mod/contacts.php:618
+msgid "Update public posts"
+msgstr ""
+
+#: mod/contacts.php:620 mod/contacts.php:994
+msgid "Update now"
+msgstr ""
+
+#: mod/contacts.php:626 mod/contacts.php:826 mod/contacts.php:1011
+msgid "Unignore"
+msgstr ""
+
+#: 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/contacts.php:630
+msgid "Currently blocked"
+msgstr ""
+
+#: mod/contacts.php:631
+msgid "Currently ignored"
+msgstr ""
+
+#: mod/contacts.php:632
+msgid "Currently archived"
+msgstr ""
+
+#: mod/contacts.php:633 mod/notifications.php:175 mod/notifications.php:254
+msgid "Hide this contact from others"
+msgstr ""
+
+#: mod/contacts.php:633
+msgid ""
+"Replies/likes to your public posts may still be visible"
+msgstr ""
+
+#: mod/contacts.php:634
+msgid "Notification for new posts"
+msgstr ""
+
+#: mod/contacts.php:634
+msgid "Send a notification of every new post of this contact"
+msgstr ""
+
+#: mod/contacts.php:637
+msgid "Blacklisted keywords"
+msgstr ""
+
+#: mod/contacts.php:637
+msgid ""
+"Comma separated list of keywords that should not be converted to hashtags, "
+"when \"Fetch information and keywords\" is selected"
+msgstr ""
+
+#: mod/contacts.php:644 mod/follow.php:166 mod/notifications.php:258
+#: mod/unfollow.php:122
+msgid "Profile URL"
+msgstr ""
+
+#: mod/contacts.php:655
+msgid "Actions"
+msgstr ""
+
+#: mod/contacts.php:658
+msgid "Contact Settings"
+msgstr ""
+
+#: mod/contacts.php:704
+msgid "Suggestions"
+msgstr ""
+
+#: mod/contacts.php:707
+msgid "Suggest potential friends"
+msgstr ""
+
+#: mod/contacts.php:712 mod/group.php:214
+msgid "All Contacts"
+msgstr ""
+
+#: mod/contacts.php:715
+msgid "Show all contacts"
+msgstr ""
+
+#: mod/contacts.php:720
+msgid "Unblocked"
+msgstr ""
+
+#: mod/contacts.php:723
+msgid "Only show unblocked contacts"
+msgstr ""
+
+#: mod/contacts.php:729
+msgid "Blocked"
+msgstr ""
+
+#: mod/contacts.php:732
+msgid "Only show blocked contacts"
+msgstr ""
+
+#: mod/contacts.php:738
+msgid "Ignored"
+msgstr ""
+
+#: mod/contacts.php:741
+msgid "Only show ignored contacts"
+msgstr ""
+
+#: mod/contacts.php:747
+msgid "Archived"
+msgstr ""
+
+#: mod/contacts.php:750
+msgid "Only show archived contacts"
+msgstr ""
+
+#: mod/contacts.php:756
+msgid "Hidden"
+msgstr ""
+
+#: mod/contacts.php:759
+msgid "Only show hidden contacts"
+msgstr ""
+
+#: mod/contacts.php:816
+msgid "Search your contacts"
+msgstr ""
+
+#: mod/contacts.php:824 mod/settings.php:163 mod/settings.php:709
+msgid "Update"
+msgstr ""
+
+#: mod/contacts.php:827 mod/contacts.php:1019
+msgid "Archive"
+msgstr ""
+
+#: mod/contacts.php:827 mod/contacts.php:1019
+msgid "Unarchive"
+msgstr ""
+
+#: mod/contacts.php:830
+msgid "Batch Actions"
+msgstr ""
+
+#: mod/contacts.php:876
+msgid "View all contacts"
+msgstr ""
+
+#: mod/contacts.php:886
+msgid "View all common friends"
+msgstr ""
+
+#: mod/contacts.php:893
+msgid "Advanced Contact Settings"
+msgstr ""
+
+#: mod/contacts.php:927
+msgid "Mutual Friendship"
+msgstr ""
+
+#: mod/contacts.php:931
+msgid "is a fan of yours"
+msgstr ""
+
+#: mod/contacts.php:935
+msgid "you are a fan of"
+msgstr ""
+
+#: mod/contacts.php:1005
+msgid "Toggle Blocked status"
+msgstr ""
+
+#: mod/contacts.php:1013
+msgid "Toggle Ignored status"
+msgstr ""
+
+#: mod/contacts.php:1021
+msgid "Toggle Archive status"
+msgstr ""
+
+#: mod/contacts.php:1029
+msgid "Delete contact"
+msgstr ""
+
+#: mod/content.php:121 mod/network.php:632
+msgid "No such group"
+msgstr ""
+
+#: mod/content.php:132 mod/group.php:215 mod/network.php:653
+msgid "Group is empty"
+msgstr ""
+
+#: mod/content.php:137 mod/network.php:657
+#, php-format
+msgid "Group: %s"
+msgstr ""
+
+#: mod/content.php:327 object/Item.php:101
+msgid "This entry was edited"
+msgstr ""
+
+#: 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/content.php:704 mod/photos.php:1628 object/Item.php:275
+msgid "I like this (toggle)"
+msgstr ""
+
+#: mod/content.php:704 object/Item.php:275
+msgid "like"
+msgstr ""
+
+#: 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/content.php:707 object/Item.php:279
+msgid "Share this"
+msgstr ""
+
+#: mod/content.php:707 object/Item.php:279
+msgid "share"
+msgstr ""
+
+#: 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/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/content.php:731 object/Item.php:698
+msgid "Bold"
+msgstr ""
+
+#: mod/content.php:732 object/Item.php:699
+msgid "Italic"
+msgstr ""
+
+#: mod/content.php:733 object/Item.php:700
+msgid "Underline"
+msgstr ""
+
+#: mod/content.php:734 object/Item.php:701
+msgid "Quote"
+msgstr ""
+
+#: mod/content.php:735 object/Item.php:702
+msgid "Code"
+msgstr ""
+
+#: mod/content.php:736 object/Item.php:703
+msgid "Image"
+msgstr ""
+
+#: mod/content.php:737 object/Item.php:704
+msgid "Link"
+msgstr ""
+
+#: mod/content.php:738 object/Item.php:705
+msgid "Video"
+msgstr ""
+
+#: mod/content.php:748 mod/settings.php:745 object/Item.php:127
+#: object/Item.php:129
+msgid "Edit"
+msgstr ""
+
+#: mod/content.php:774 object/Item.php:242
+msgid "add star"
+msgstr ""
+
+#: mod/content.php:775 object/Item.php:243
+msgid "remove star"
+msgstr ""
+
+#: mod/content.php:776 object/Item.php:244
+msgid "toggle star status"
+msgstr ""
+
+#: mod/content.php:779 object/Item.php:247
+msgid "starred"
+msgstr ""
+
+#: mod/content.php:780 mod/content.php:802 object/Item.php:264
+msgid "add tag"
+msgstr ""
+
+#: mod/content.php:791 object/Item.php:252
+msgid "ignore thread"
+msgstr ""
+
+#: mod/content.php:792 object/Item.php:253
+msgid "unignore thread"
+msgstr ""
+
+#: mod/content.php:793 object/Item.php:254
+msgid "toggle ignore status"
+msgstr ""
+
+#: mod/content.php:796 mod/ostatus_subscribe.php:76 object/Item.php:257
+msgid "ignored"
+msgstr ""
+
+#: mod/content.php:807 object/Item.php:146
+msgid "save to folder"
+msgstr ""
+
+#: mod/content.php:855 object/Item.php:216
+msgid "I will attend"
+msgstr ""
+
+#: mod/content.php:855 object/Item.php:216
+msgid "I will not attend"
+msgstr ""
+
+#: mod/content.php:855 object/Item.php:216
+msgid "I might attend"
+msgstr ""
+
+#: mod/content.php:919 object/Item.php:347
+msgid "to"
+msgstr ""
+
+#: mod/content.php:920 object/Item.php:349
+msgid "Wall-to-Wall"
+msgstr ""
+
+#: mod/content.php:921 object/Item.php:350
+msgid "via Wall-To-Wall:"
+msgstr ""
+
+#: mod/delegate.php:104
+msgid "No potential page delegates located."
+msgstr ""
+
+#: 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/delegate.php:136
+msgid "Existing Page Managers"
+msgstr ""
+
+#: mod/delegate.php:138
+msgid "Existing Page Delegates"
+msgstr ""
+
+#: mod/delegate.php:140
+msgid "Potential Delegates"
+msgstr ""
+
+#: mod/delegate.php:142 mod/tagrm.php:98
+msgid "Remove"
+msgstr ""
+
+#: mod/delegate.php:143
+msgid "Add"
+msgstr ""
+
+#: mod/delegate.php:144
+msgid "No entries."
+msgstr ""
+
+#: 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/dfrn_confirm.php:130
+msgid ""
+"This may occasionally happen if contact was requested by both persons and it "
+"has already been approved."
+msgstr ""
+
+#: mod/dfrn_confirm.php:247
+msgid "Response from remote site was not understood."
+msgstr ""
+
+#: mod/dfrn_confirm.php:256 mod/dfrn_confirm.php:261
+msgid "Unexpected response from remote site: "
+msgstr ""
+
+#: mod/dfrn_confirm.php:270
+msgid "Confirmation completed successfully."
+msgstr ""
+
+#: mod/dfrn_confirm.php:272 mod/dfrn_confirm.php:286 mod/dfrn_confirm.php:293
+msgid "Remote site reported: "
+msgstr ""
+
+#: mod/dfrn_confirm.php:284
+msgid "Temporary failure. Please wait and try again."
+msgstr ""
+
+#: mod/dfrn_confirm.php:291
+msgid "Introduction failed or was revoked."
+msgstr ""
+
+#: mod/dfrn_confirm.php:420
+msgid "Unable to set contact photo."
+msgstr ""
+
+#: mod/dfrn_confirm.php:561
+#, php-format
+msgid "No user record found for '%s' "
+msgstr ""
+
+#: mod/dfrn_confirm.php:571
+msgid "Our site encryption key is apparently messed up."
+msgstr ""
+
+#: mod/dfrn_confirm.php:582
+msgid "Empty site URL was provided or URL could not be decrypted by us."
+msgstr ""
+
+#: mod/dfrn_confirm.php:604
+msgid "Contact record was not found for you on our site."
+msgstr ""
+
+#: mod/dfrn_confirm.php:618
+#, php-format
+msgid "Site public key not available in contact record for URL %s."
+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."
+msgstr ""
+
+#: mod/dfrn_confirm.php:649
+msgid "Unable to set your contact credentials on our system."
+msgstr ""
+
+#: mod/dfrn_confirm.php:711
+msgid "Unable to update your contact profile details on our system"
+msgstr ""
+
+#: mod/dfrn_confirm.php:783
+#, php-format
+msgid "%1$s has joined %2$s"
+msgstr ""
+
+#: mod/dfrn_poll.php:114 mod/dfrn_poll.php:550
#, php-format
msgid "%1$s welcomes %2$s"
msgstr ""
-#: mod/display.php:493
+#: mod/dfrn_request.php:104
+msgid "This introduction has already been accepted."
+msgstr ""
+
+#: mod/dfrn_request.php:127 mod/dfrn_request.php:529
+msgid "Profile location is not valid or does not contain profile information."
+msgstr ""
+
+#: mod/dfrn_request.php:132 mod/dfrn_request.php:534
+msgid "Warning: profile location has no identifiable owner name."
+msgstr ""
+
+#: mod/dfrn_request.php:135 mod/dfrn_request.php:537
+msgid "Warning: profile location has no profile photo."
+msgstr ""
+
+#: mod/dfrn_request.php:139 mod/dfrn_request.php:541
+#, 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/dfrn_request.php:183
+msgid "Introduction complete."
+msgstr ""
+
+#: mod/dfrn_request.php:228
+msgid "Unrecoverable protocol error."
+msgstr ""
+
+#: mod/dfrn_request.php:256
+msgid "Profile unavailable."
+msgstr ""
+
+#: mod/dfrn_request.php:283
+#, php-format
+msgid "%s has received too many connection requests today."
+msgstr ""
+
+#: mod/dfrn_request.php:284
+msgid "Spam protection measures have been invoked."
+msgstr ""
+
+#: mod/dfrn_request.php:285
+msgid "Friends are advised to please try again in 24 hours."
+msgstr ""
+
+#: mod/dfrn_request.php:347
+msgid "Invalid locator"
+msgstr ""
+
+#: mod/dfrn_request.php:356
+msgid "Invalid email address."
+msgstr ""
+
+#: mod/dfrn_request.php:381
+msgid "This account has not been configured for email. Request failed."
+msgstr ""
+
+#: mod/dfrn_request.php:484
+msgid "You have already introduced yourself here."
+msgstr ""
+
+#: mod/dfrn_request.php:488
+#, php-format
+msgid "Apparently you are already friends with %s."
+msgstr ""
+
+#: mod/dfrn_request.php:509
+msgid "Invalid profile URL."
+msgstr ""
+
+#: mod/dfrn_request.php:615
+msgid "Your introduction has been sent."
+msgstr ""
+
+#: mod/dfrn_request.php:657
+msgid ""
+"Remote subscription can't be done for your network. Please subscribe "
+"directly on your system."
+msgstr ""
+
+#: mod/dfrn_request.php:678
+msgid "Please login to confirm introduction."
+msgstr ""
+
+#: mod/dfrn_request.php:688
+msgid ""
+"Incorrect identity currently logged in. Please login to this"
+"strong> profile."
+msgstr ""
+
+#: mod/dfrn_request.php:702 mod/dfrn_request.php:719
+msgid "Confirm"
+msgstr ""
+
+#: mod/dfrn_request.php:714
+msgid "Hide this contact"
+msgstr ""
+
+#: mod/dfrn_request.php:717
+#, php-format
+msgid "Welcome home %s."
+msgstr ""
+
+#: mod/dfrn_request.php:718
+#, php-format
+msgid "Please confirm your introduction/connection request to %s."
+msgstr ""
+
+#: mod/dfrn_request.php:849
+msgid ""
+"Please enter your 'Identity Address' from one of the following supported "
+"communications networks:"
+msgstr ""
+
+#: mod/dfrn_request.php:873
+#, 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."
+msgstr ""
+
+#: mod/dfrn_request.php:878
+msgid "Friend/Connection Request"
+msgstr ""
+
+#: mod/dfrn_request.php:879
+msgid ""
+"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
+"testuser@identi.ca"
+msgstr ""
+
+#: mod/dfrn_request.php:880 mod/follow.php:149
+msgid "Please answer the following:"
+msgstr ""
+
+#: mod/dfrn_request.php:881 mod/follow.php:150
+#, php-format
+msgid "Does %s know you?"
+msgstr ""
+
+#: mod/dfrn_request.php:885 mod/follow.php:151
+msgid "Add a personal note:"
+msgstr ""
+
+#: 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/dfrn_request.php:891 mod/follow.php:157 mod/unfollow.php:113
+msgid "Your Identity Address:"
+msgstr ""
+
+#: mod/dfrn_request.php:894 mod/follow.php:63 mod/unfollow.php:65
+msgid "Submit Request"
+msgstr ""
+
+#: mod/directory.php:195 view/theme/vier/theme.php:194
+msgid "Global Directory"
+msgstr ""
+
+#: mod/directory.php:197
+msgid "Find on this site"
+msgstr ""
+
+#: mod/directory.php:199
+msgid "Results for:"
+msgstr ""
+
+#: mod/directory.php:201
+msgid "Site Directory"
+msgstr ""
+
+#: mod/directory.php:208
+msgid "No entries (some entries may be hidden)."
+msgstr ""
+
+#: mod/dirfind.php:40
+#, php-format
+msgid "People Search - %s"
+msgstr ""
+
+#: mod/dirfind.php:51
+#, php-format
+msgid "Forum Search - %s"
+msgstr ""
+
+#: mod/dirfind.php:248 mod/match.php:113
+msgid "No matches"
+msgstr ""
+
+#: mod/display.php:491
msgid "Item has been removed."
msgstr ""
-#: mod/item.php:118
+#: mod/editpost.php:20 mod/editpost.php:30
+msgid "Item not found"
+msgstr ""
+
+#: mod/editpost.php:35
+msgid "Edit post"
+msgstr ""
+
+#: mod/events.php:97 mod/events.php:99
+msgid "Event can not end before it has started."
+msgstr ""
+
+#: mod/events.php:106 mod/events.php:108
+msgid "Event title and start time are required."
+msgstr ""
+
+#: mod/events.php:380
+msgid "Create New Event"
+msgstr ""
+
+#: mod/events.php:485
+msgid "Event details"
+msgstr ""
+
+#: mod/events.php:486
+msgid "Starting date and Title are required."
+msgstr ""
+
+#: mod/events.php:487 mod/events.php:488
+msgid "Event Starts:"
+msgstr ""
+
+#: mod/events.php:487 mod/events.php:499 mod/profiles.php:713
+msgid "Required"
+msgstr ""
+
+#: mod/events.php:489 mod/events.php:505
+msgid "Finish date/time is not known or not relevant"
+msgstr ""
+
+#: mod/events.php:491 mod/events.php:492
+msgid "Event Finishes:"
+msgstr ""
+
+#: mod/events.php:493 mod/events.php:506
+msgid "Adjust for viewer timezone"
+msgstr ""
+
+#: mod/events.php:495
+msgid "Description:"
+msgstr ""
+
+#: mod/events.php:499 mod/events.php:501
+msgid "Title:"
+msgstr ""
+
+#: mod/events.php:502 mod/events.php:503
+msgid "Share this event"
+msgstr ""
+
+#: mod/events.php:532
+msgid "Failed to remove event"
+msgstr ""
+
+#: mod/events.php:534
+msgid "Event removed"
+msgstr ""
+
+#: mod/fbrowser.php:135
+msgid "Files"
+msgstr ""
+
+#: 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/follow.php:42
+msgid "Contact added"
+msgstr ""
+
+#: mod/follow.php:74
+msgid "You already added this contact."
+msgstr ""
+
+#: mod/follow.php:83
+msgid "Diaspora support isn't enabled. Contact can't be added."
+msgstr ""
+
+#: mod/follow.php:90
+msgid "OStatus support is disabled. Contact can't be added."
+msgstr ""
+
+#: mod/follow.php:97
+msgid "The network type couldn't be detected. Contact can't be added."
+msgstr ""
+
+#: mod/friendica.php:70
+msgid "This is Friendica, version"
+msgstr ""
+
+#: mod/friendica.php:71
+msgid "running at web location"
+msgstr ""
+
+#: mod/friendica.php:75
+msgid ""
+"Please visit Friendica.com to learn "
+"more about the Friendica project."
+msgstr ""
+
+#: mod/friendica.php:79
+msgid "Bug reports and issues: please visit"
+msgstr ""
+
+#: mod/friendica.php:79
+msgid "the bugtracker at github"
+msgstr ""
+
+#: mod/friendica.php:82
+msgid ""
+"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
+"dot com"
+msgstr ""
+
+#: mod/friendica.php:96
+msgid "Installed plugins/addons/apps:"
+msgstr ""
+
+#: mod/friendica.php:110
+msgid "No installed plugins/addons/apps"
+msgstr ""
+
+#: mod/friendica.php:115
+msgid "On this server the following remote servers are blocked."
+msgstr ""
+
+#: mod/group.php:31
+msgid "Group created."
+msgstr ""
+
+#: mod/group.php:37
+msgid "Could not create group."
+msgstr ""
+
+#: mod/group.php:51 mod/group.php:156
+msgid "Group not found."
+msgstr ""
+
+#: mod/group.php:65
+msgid "Group name changed."
+msgstr ""
+
+#: mod/group.php:95
+msgid "Save Group"
+msgstr ""
+
+#: mod/group.php:100
+msgid "Create a group of contacts/friends."
+msgstr ""
+
+#: mod/group.php:125
+msgid "Group removed."
+msgstr ""
+
+#: mod/group.php:127
+msgid "Unable to remove group."
+msgstr ""
+
+#: mod/group.php:191
+msgid "Delete Group"
+msgstr ""
+
+#: mod/group.php:197
+msgid "Group Editor"
+msgstr ""
+
+#: mod/group.php:202
+msgid "Edit Group Name"
+msgstr ""
+
+#: mod/group.php:212
+msgid "Members"
+msgstr ""
+
+#: mod/group.php:228
+msgid "Remove Contact"
+msgstr ""
+
+#: mod/group.php:252
+msgid "Add Contact"
+msgstr ""
+
+#: mod/hcard.php:14
+msgid "No profile"
+msgstr ""
+
+#: mod/help.php:45
+msgid "Help:"
+msgstr ""
+
+#: mod/help.php:60 index.php:305
+msgid "Page not found."
+msgstr ""
+
+#: mod/home.php:42
+#, php-format
+msgid "Welcome to %s"
+msgstr ""
+
+#: mod/install.php:109
+msgid "Friendica Communications Server - Setup"
+msgstr ""
+
+#: mod/install.php:115
+msgid "Could not connect to database."
+msgstr ""
+
+#: mod/install.php:119
+msgid "Could not create table."
+msgstr ""
+
+#: mod/install.php:125
+msgid "Your Friendica site database has been installed."
+msgstr ""
+
+#: mod/install.php:130
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
+msgstr ""
+
+#: mod/install.php:131 mod/install.php:203 mod/install.php:550
+msgid "Please see the file \"INSTALL.txt\"."
+msgstr ""
+
+#: mod/install.php:143
+msgid "Database already in use."
+msgstr ""
+
+#: mod/install.php:200
+msgid "System check"
+msgstr ""
+
+#: mod/install.php:205
+msgid "Check again"
+msgstr ""
+
+#: mod/install.php:224
+msgid "Database connection"
+msgstr ""
+
+#: mod/install.php:225
+msgid ""
+"In order to install Friendica we need to know how to connect to your "
+"database."
+msgstr ""
+
+#: mod/install.php:226
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr ""
+
+#: mod/install.php:227
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
+msgstr ""
+
+#: mod/install.php:231
+msgid "Database Server Name"
+msgstr ""
+
+#: mod/install.php:232
+msgid "Database Login Name"
+msgstr ""
+
+#: mod/install.php:233
+msgid "Database Login Password"
+msgstr ""
+
+#: mod/install.php:233
+msgid "For security reasons the password must not be empty"
+msgstr ""
+
+#: mod/install.php:234
+msgid "Database Name"
+msgstr ""
+
+#: mod/install.php:235 mod/install.php:276
+msgid "Site administrator email address"
+msgstr ""
+
+#: mod/install.php:235 mod/install.php:276
+msgid ""
+"Your account email address must match this in order to use the web admin "
+"panel."
+msgstr ""
+
+#: mod/install.php:239 mod/install.php:279
+msgid "Please select a default timezone for your website"
+msgstr ""
+
+#: mod/install.php:266
+msgid "Site settings"
+msgstr ""
+
+#: mod/install.php:280
+msgid "System Language:"
+msgstr ""
+
+#: mod/install.php:280
+msgid ""
+"Set the default language for your Friendica installation interface and to "
+"send emails."
+msgstr ""
+
+#: mod/install.php:320
+msgid "Could not find a command line version of PHP in the web server PATH."
+msgstr ""
+
+#: 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/install.php:325
+msgid "PHP executable path"
+msgstr ""
+
+#: mod/install.php:325
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
+msgstr ""
+
+#: mod/install.php:330
+msgid "Command line PHP"
+msgstr ""
+
+#: mod/install.php:339
+msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
+msgstr ""
+
+#: mod/install.php:340
+msgid "Found PHP version: "
+msgstr ""
+
+#: mod/install.php:342
+msgid "PHP cli binary"
+msgstr ""
+
+#: mod/install.php:353
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
+msgstr ""
+
+#: mod/install.php:354
+msgid "This is required for message delivery to work."
+msgstr ""
+
+#: mod/install.php:356
+msgid "PHP register_argc_argv"
+msgstr ""
+
+#: mod/install.php:379
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
+msgstr ""
+
+#: mod/install.php:380
+msgid ""
+"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
+"installation.php\"."
+msgstr ""
+
+#: mod/install.php:382
+msgid "Generate encryption keys"
+msgstr ""
+
+#: mod/install.php:389
+msgid "libCurl PHP module"
+msgstr ""
+
+#: mod/install.php:390
+msgid "GD graphics PHP module"
+msgstr ""
+
+#: mod/install.php:391
+msgid "OpenSSL PHP module"
+msgstr ""
+
+#: mod/install.php:392
+msgid "PDO or MySQLi PHP module"
+msgstr ""
+
+#: mod/install.php:393
+msgid "mb_string PHP module"
+msgstr ""
+
+#: mod/install.php:394
+msgid "XML PHP module"
+msgstr ""
+
+#: mod/install.php:395
+msgid "iconv module"
+msgstr ""
+
+#: mod/install.php:399 mod/install.php:401
+msgid "Apache mod_rewrite module"
+msgstr ""
+
+#: mod/install.php:399
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
+msgstr ""
+
+#: mod/install.php:407
+msgid "Error: libCURL PHP module required but not installed."
+msgstr ""
+
+#: mod/install.php:411
+msgid ""
+"Error: GD graphics PHP module with JPEG support required but not installed."
+msgstr ""
+
+#: mod/install.php:415
+msgid "Error: openssl PHP module required but not installed."
+msgstr ""
+
+#: mod/install.php:419
+msgid "Error: PDO or MySQLi PHP module required but not installed."
+msgstr ""
+
+#: mod/install.php:423
+msgid "Error: The MySQL driver for PDO is not installed."
+msgstr ""
+
+#: mod/install.php:427
+msgid "Error: mb_string PHP module required but not installed."
+msgstr ""
+
+#: mod/install.php:431
+msgid "Error: iconv PHP module required but not installed."
+msgstr ""
+
+#: mod/install.php:441
+msgid "Error, XML PHP module required but not installed."
+msgstr ""
+
+#: 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/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/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/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/install.php:459
+msgid ".htconfig.php is writable"
+msgstr ""
+
+#: 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/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/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/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/install.php:475
+msgid "view/smarty3 is writable"
+msgstr ""
+
+#: mod/install.php:491
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
+msgstr ""
+
+#: mod/install.php:493
+msgid "Url rewrite is working"
+msgstr ""
+
+#: mod/install.php:512
+msgid "ImageMagick PHP extension is not installed"
+msgstr ""
+
+#: mod/install.php:514
+msgid "ImageMagick PHP extension is installed"
+msgstr ""
+
+#: mod/install.php:516
+msgid "ImageMagick supports GIF"
+msgstr ""
+
+#: 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/install.php:548
+msgid "What next
"
+msgstr ""
+
+#: mod/install.php:549
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+msgstr ""
+
+#: mod/invite.php:31
+msgid "Total invitation limit exceeded."
+msgstr ""
+
+#: mod/invite.php:54
+#, php-format
+msgid "%s : Not a valid email address."
+msgstr ""
+
+#: mod/invite.php:79
+msgid "Please join us on Friendica"
+msgstr ""
+
+#: mod/invite.php:90
+msgid "Invitation limit exceeded. Please contact your site administrator."
+msgstr ""
+
+#: mod/invite.php:94
+#, php-format
+msgid "%s : Message delivery failed."
+msgstr ""
+
+#: mod/invite.php:98
+#, php-format
+msgid "%d message sent."
+msgid_plural "%d messages sent."
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/invite.php:117
+msgid "You have no more invitations available"
+msgstr ""
+
+#: mod/invite.php:125
+#, php-format
+msgid ""
+"Visit %s for a list of public sites that you can join. Friendica members on "
+"other sites can all connect with each other, as well as with members of many "
+"other social networks."
+msgstr ""
+
+#: 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:128
+#, php-format
+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. See %s for a list of alternate Friendica "
+"sites you can join."
+msgstr ""
+
+#: 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:135
+#, php-format
+msgid "To accept this invitation, please visit and register at %s."
+msgstr ""
+
+#: 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:142
+msgid "Send invitations"
+msgstr ""
+
+#: mod/invite.php:143
+msgid "Enter email addresses, one per line:"
+msgstr ""
+
+#: 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:147
+msgid "You will need to supply this invitation code: $invite_code"
+msgstr ""
+
+#: mod/invite.php:147
+msgid ""
+"Once you have registered, please connect with me via my profile page at:"
+msgstr ""
+
+#: 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/item.php:119
msgid "Unable to locate original post."
msgstr ""
-#: mod/item.php:345
+#: mod/item.php:346
msgid "Empty post discarded."
msgstr ""
-#: mod/item.php:899
+#: mod/item.php:903
msgid "System error. Post not saved."
msgstr ""
-#: mod/item.php:990
+#: mod/item.php:994
#, php-format
msgid ""
"This message was sent to you by %s, a member of the Friendica social network."
msgstr ""
-#: mod/item.php:992
+#: mod/item.php:996
#, php-format
msgid "You may visit them online at %s"
msgstr ""
-#: mod/item.php:993
+#: 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/item.php:997
+#: mod/item.php:1001
#, php-format
msgid "%s posted an update."
msgstr ""
-#: mod/network.php:419
+#: mod/localtime.php:26
+msgid "Time Conversion"
+msgstr ""
+
+#: mod/localtime.php:28
+msgid ""
+"Friendica provides this service for sharing events with other networks and "
+"friends in unknown timezones."
+msgstr ""
+
+#: mod/localtime.php:32
+#, php-format
+msgid "UTC time: %s"
+msgstr ""
+
+#: mod/localtime.php:35
+#, php-format
+msgid "Current timezone: %s"
+msgstr ""
+
+#: mod/localtime.php:38
+#, php-format
+msgid "Converted localtime: %s"
+msgstr ""
+
+#: mod/localtime.php:43
+msgid "Please select your timezone:"
+msgstr ""
+
+#: mod/lostpass.php:22
+msgid "No valid account found."
+msgstr ""
+
+#: mod/lostpass.php:38
+msgid "Password reset request issued. Check your email."
+msgstr ""
+
+#: 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/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/lostpass.php:74
+#, php-format
+msgid "Password reset requested at %s"
+msgstr ""
+
+#: mod/lostpass.php:94
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
+msgstr ""
+
+#: mod/lostpass.php:113 boot.php:875
+msgid "Password Reset"
+msgstr ""
+
+#: mod/lostpass.php:114
+msgid "Your password has been reset as requested."
+msgstr ""
+
+#: mod/lostpass.php:115
+msgid "Your new password is"
+msgstr ""
+
+#: mod/lostpass.php:116
+msgid "Save or copy your new password - and then"
+msgstr ""
+
+#: mod/lostpass.php:117
+msgid "click here to login"
+msgstr ""
+
+#: mod/lostpass.php:118
+msgid ""
+"Your password may be changed from the Settings page after "
+"successful login."
+msgstr ""
+
+#: 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/lostpass.php:134
+#, php-format
+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"
+msgstr ""
+
+#: mod/lostpass.php:150
+#, php-format
+msgid "Your password has been changed at %s"
+msgstr ""
+
+#: mod/lostpass.php:162
+msgid "Forgot your Password?"
+msgstr ""
+
+#: mod/lostpass.php:163
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr ""
+
+#: mod/lostpass.php:164 boot.php:863
+msgid "Nickname or Email: "
+msgstr ""
+
+#: mod/lostpass.php:165
+msgid "Reset"
+msgstr ""
+
+#: mod/manage.php:153
+msgid "Manage Identities and/or Pages"
+msgstr ""
+
+#: 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/manage.php:155
+msgid "Select an identity to manage: "
+msgstr ""
+
+#: mod/match.php:39
+msgid "No keywords to match. Please add keywords to your default profile."
+msgstr ""
+
+#: mod/match.php:92
+msgid "is interested in:"
+msgstr ""
+
+#: mod/match.php:106
+msgid "Profile Match"
+msgstr ""
+
+#: mod/message.php:63 mod/wallmessage.php:53
+msgid "No recipient selected."
+msgstr ""
+
+#: mod/message.php:67
+msgid "Unable to locate contact information."
+msgstr ""
+
+#: mod/message.php:70 mod/wallmessage.php:59
+msgid "Message could not be sent."
+msgstr ""
+
+#: mod/message.php:73 mod/wallmessage.php:62
+msgid "Message collection failure."
+msgstr ""
+
+#: mod/message.php:76 mod/wallmessage.php:65
+msgid "Message sent."
+msgstr ""
+
+#: mod/message.php:205
+msgid "Do you really want to delete this message?"
+msgstr ""
+
+#: mod/message.php:225
+msgid "Message deleted."
+msgstr ""
+
+#: mod/message.php:255
+msgid "Conversation removed."
+msgstr ""
+
+#: mod/message.php:322 mod/wallmessage.php:129
+msgid "Send Private Message"
+msgstr ""
+
+#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:131
+msgid "To:"
+msgstr ""
+
+#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:132
+msgid "Subject:"
+msgstr ""
+
+#: mod/message.php:364
+msgid "No messages."
+msgstr ""
+
+#: mod/message.php:403
+msgid "Message not available."
+msgstr ""
+
+#: mod/message.php:478
+msgid "Delete message"
+msgstr ""
+
+#: mod/message.php:503 mod/message.php:591
+msgid "Delete conversation"
+msgstr ""
+
+#: mod/message.php:505
+msgid ""
+"No secure communications available. You may be able to "
+"respond from the sender's profile page."
+msgstr ""
+
+#: mod/message.php:509
+msgid "Send Reply"
+msgstr ""
+
+#: mod/message.php:561
+#, php-format
+msgid "Unknown sender - %s"
+msgstr ""
+
+#: mod/message.php:563
+#, php-format
+msgid "You and %s"
+msgstr ""
+
+#: mod/message.php:565
+#, php-format
+msgid "%s and You"
+msgstr ""
+
+#: mod/message.php:594
+msgid "D, d M Y - g:i A"
+msgstr ""
+
+#: mod/message.php:597
+#, php-format
+msgid "%d message"
+msgid_plural "%d messages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/mood.php:136
+msgid "Mood"
+msgstr ""
+
+#: mod/mood.php:137
+msgid "Set your current mood and tell your friends"
+msgstr ""
+
+#: mod/network.php:561
#, php-format
msgid ""
"Warning: This group contains %s member from a network that doesn't allow non "
@@ -8726,95 +7020,1824 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: mod/network.php:422
+#: mod/network.php:564
msgid "Messages in this group won't be send to these receivers."
msgstr ""
-#: mod/network.php:550
+#: mod/network.php:684
msgid "Private messages to this person are at risk of public disclosure."
msgstr ""
-#: mod/network.php:555
+#: mod/network.php:688
msgid "Invalid contact."
msgstr ""
-#: mod/network.php:848
+#: mod/network.php:892
msgid "Commented Order"
msgstr ""
-#: mod/network.php:851
+#: mod/network.php:895
msgid "Sort by Comment Date"
msgstr ""
-#: mod/network.php:856
+#: mod/network.php:900
msgid "Posted Order"
msgstr ""
-#: mod/network.php:859
+#: mod/network.php:903
msgid "Sort by Post Date"
msgstr ""
-#: mod/network.php:870
+#: mod/network.php:914
msgid "Posts that mention or involve you"
msgstr ""
-#: mod/network.php:878
+#: mod/network.php:922
msgid "New"
msgstr ""
-#: mod/network.php:881
+#: mod/network.php:925
msgid "Activity Stream - by date"
msgstr ""
-#: mod/network.php:889
+#: mod/network.php:933
msgid "Shared Links"
msgstr ""
-#: mod/network.php:892
+#: mod/network.php:936
msgid "Interesting Links"
msgstr ""
-#: mod/network.php:900
+#: mod/network.php:944
msgid "Starred"
msgstr ""
-#: mod/network.php:903
+#: mod/network.php:947
msgid "Favourite Posts"
msgstr ""
-#: mod/profile.php:176
+#: mod/notifications.php:38
+msgid "Invalid request identifier."
+msgstr ""
+
+#: mod/notifications.php:47 mod/notifications.php:183 mod/notifications.php:230
+msgid "Discard"
+msgstr ""
+
+#: mod/notifications.php:108
+msgid "Network Notifications"
+msgstr ""
+
+#: mod/notifications.php:114 mod/notify.php:73
+msgid "System Notifications"
+msgstr ""
+
+#: mod/notifications.php:120
+msgid "Personal Notifications"
+msgstr ""
+
+#: mod/notifications.php:126
+msgid "Home Notifications"
+msgstr ""
+
+#: mod/notifications.php:155
+msgid "Show Ignored Requests"
+msgstr ""
+
+#: mod/notifications.php:155
+msgid "Hide Ignored Requests"
+msgstr ""
+
+#: mod/notifications.php:167 mod/notifications.php:237
+msgid "Notification type: "
+msgstr ""
+
+#: mod/notifications.php:170
+#, php-format
+msgid "suggested by %s"
+msgstr ""
+
+#: mod/notifications.php:176 mod/notifications.php:255
+msgid "Post a new friend activity"
+msgstr ""
+
+#: mod/notifications.php:176 mod/notifications.php:255
+msgid "if applicable"
+msgstr ""
+
+#: mod/notifications.php:198
+msgid "Claims to be known to you: "
+msgstr ""
+
+#: mod/notifications.php:199
+msgid "yes"
+msgstr ""
+
+#: mod/notifications.php:199
+msgid "no"
+msgstr ""
+
+#: mod/notifications.php:200 mod/notifications.php:205
+msgid "Shall your connection be bidirectional or not?"
+msgstr ""
+
+#: mod/notifications.php:201 mod/notifications.php:206
+#, 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 ""
+
+#: 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/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/notifications.php:218
+msgid "Friend"
+msgstr ""
+
+#: mod/notifications.php:219
+msgid "Sharer"
+msgstr ""
+
+#: mod/notifications.php:219
+msgid "Subscriber"
+msgstr ""
+
+#: mod/notifications.php:275
+msgid "No introductions."
+msgstr ""
+
+#: mod/notifications.php:316
+msgid "Show unread"
+msgstr ""
+
+#: mod/notifications.php:316
+msgid "Show all"
+msgstr ""
+
+#: mod/notifications.php:322
+#, php-format
+msgid "No more %s notifications."
+msgstr ""
+
+#: mod/notify.php:69
+msgid "No more system notifications."
+msgstr ""
+
+#: mod/oexchange.php:25
+msgid "Post successful."
+msgstr ""
+
+#: mod/openid.php:25
+msgid "OpenID protocol error. No ID returned."
+msgstr ""
+
+#: mod/openid.php:61
+msgid ""
+"Account not found and OpenID registration is not permitted on this site."
+msgstr ""
+
+#: mod/ostatus_subscribe.php:17
+msgid "Subscribing to OStatus contacts"
+msgstr ""
+
+#: mod/ostatus_subscribe.php:28
+msgid "No contact provided."
+msgstr ""
+
+#: mod/ostatus_subscribe.php:34
+msgid "Couldn't fetch information for contact."
+msgstr ""
+
+#: mod/ostatus_subscribe.php:43
+msgid "Couldn't fetch friends for contact."
+msgstr ""
+
+#: mod/ostatus_subscribe.php:57 mod/repair_ostatus.php:47
+msgid "Done"
+msgstr ""
+
+#: mod/ostatus_subscribe.php:71
+msgid "success"
+msgstr ""
+
+#: mod/ostatus_subscribe.php:73
+msgid "failed"
+msgstr ""
+
+#: mod/ostatus_subscribe.php:81 mod/repair_ostatus.php:53
+msgid "Keep this window open until done."
+msgstr ""
+
+#: mod/p.php:13
+msgid "Not Extended"
+msgstr ""
+
+#: mod/photos.php:97 mod/photos.php:1903
+msgid "Recent Photos"
+msgstr ""
+
+#: mod/photos.php:100 mod/photos.php:1331 mod/photos.php:1905
+msgid "Upload New Photos"
+msgstr ""
+
+#: mod/photos.php:115 mod/settings.php:39
+msgid "everybody"
+msgstr ""
+
+#: mod/photos.php:179
+msgid "Contact information unavailable"
+msgstr ""
+
+#: mod/photos.php:200
+msgid "Album not found."
+msgstr ""
+
+#: mod/photos.php:233 mod/photos.php:245 mod/photos.php:1275
+msgid "Delete Album"
+msgstr ""
+
+#: mod/photos.php:243
+msgid "Do you really want to delete this photo album and all its photos?"
+msgstr ""
+
+#: mod/photos.php:326 mod/photos.php:337 mod/photos.php:1601
+msgid "Delete Photo"
+msgstr ""
+
+#: mod/photos.php:335
+msgid "Do you really want to delete this photo?"
+msgstr ""
+
+#: mod/photos.php:716
+#, php-format
+msgid "%1$s was tagged in %2$s by %3$s"
+msgstr ""
+
+#: mod/photos.php:716
+msgid "a photo"
+msgstr ""
+
+#: 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/photos.php:824
+msgid "Image file is empty."
+msgstr ""
+
+#: mod/photos.php:857 mod/profile_photo.php:165 mod/wall_upload.php:219
+msgid "Unable to process image."
+msgstr ""
+
+#: mod/photos.php:886 mod/profile_photo.php:315 mod/wall_upload.php:258
+msgid "Image upload failed."
+msgstr ""
+
+#: mod/photos.php:991
+msgid "No photos selected"
+msgstr ""
+
+#: mod/photos.php:1094 mod/videos.php:312
+msgid "Access to this item is restricted."
+msgstr ""
+
+#: mod/photos.php:1154
+#, php-format
+msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
+msgstr ""
+
+#: mod/photos.php:1191
+msgid "Upload Photos"
+msgstr ""
+
+#: mod/photos.php:1195 mod/photos.php:1270
+msgid "New album name: "
+msgstr ""
+
+#: mod/photos.php:1196
+msgid "or existing album name: "
+msgstr ""
+
+#: mod/photos.php:1197
+msgid "Do not show a status post for this upload"
+msgstr ""
+
+#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309
+msgid "Show to Groups"
+msgstr ""
+
+#: mod/photos.php:1209 mod/photos.php:1606 mod/settings.php:1310
+msgid "Show to Contacts"
+msgstr ""
+
+#: mod/photos.php:1210
+msgid "Private Photo"
+msgstr ""
+
+#: mod/photos.php:1211
+msgid "Public Photo"
+msgstr ""
+
+#: mod/photos.php:1281
+msgid "Edit Album"
+msgstr ""
+
+#: mod/photos.php:1286
+msgid "Show Newest First"
+msgstr ""
+
+#: mod/photos.php:1288
+msgid "Show Oldest First"
+msgstr ""
+
+#: mod/photos.php:1317 mod/photos.php:1888
+msgid "View Photo"
+msgstr ""
+
+#: mod/photos.php:1362
+msgid "Permission denied. Access to this item may be restricted."
+msgstr ""
+
+#: mod/photos.php:1364
+msgid "Photo not available"
+msgstr ""
+
+#: mod/photos.php:1425
+msgid "View photo"
+msgstr ""
+
+#: mod/photos.php:1425
+msgid "Edit photo"
+msgstr ""
+
+#: mod/photos.php:1426
+msgid "Use as profile photo"
+msgstr ""
+
+#: mod/photos.php:1451
+msgid "View Full Size"
+msgstr ""
+
+#: mod/photos.php:1541
+msgid "Tags: "
+msgstr ""
+
+#: mod/photos.php:1544
+msgid "[Remove any tag]"
+msgstr ""
+
+#: mod/photos.php:1587
+msgid "New album name"
+msgstr ""
+
+#: mod/photos.php:1588
+msgid "Caption"
+msgstr ""
+
+#: mod/photos.php:1589
+msgid "Add a Tag"
+msgstr ""
+
+#: mod/photos.php:1589
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+msgstr ""
+
+#: mod/photos.php:1590
+msgid "Do not rotate"
+msgstr ""
+
+#: mod/photos.php:1591
+msgid "Rotate CW (right)"
+msgstr ""
+
+#: mod/photos.php:1592
+msgid "Rotate CCW (left)"
+msgstr ""
+
+#: mod/photos.php:1607
+msgid "Private photo"
+msgstr ""
+
+#: mod/photos.php:1608
+msgid "Public photo"
+msgstr ""
+
+#: mod/photos.php:1817
+msgid "Map"
+msgstr ""
+
+#: mod/photos.php:1894 mod/videos.php:396
+msgid "View Album"
+msgstr ""
+
+#: mod/ping.php:275
+msgid "{0} wants to be your friend"
+msgstr ""
+
+#: mod/ping.php:290
+msgid "{0} sent you a message"
+msgstr ""
+
+#: mod/ping.php:305
+msgid "{0} requested registration"
+msgstr ""
+
+#: mod/poke.php:198
+msgid "Poke/Prod"
+msgstr ""
+
+#: mod/poke.php:199
+msgid "poke, prod or do other things to somebody"
+msgstr ""
+
+#: mod/poke.php:200
+msgid "Recipient"
+msgstr ""
+
+#: mod/poke.php:201
+msgid "Choose what you wish to do to recipient"
+msgstr ""
+
+#: mod/poke.php:204
+msgid "Make this post private"
+msgstr ""
+
+#: mod/profile.php:177
msgid "Tips for New Members"
msgstr ""
-#: object/Item.php:355
+#: mod/profile_photo.php:45
+msgid "Image uploaded but image cropping failed."
+msgstr ""
+
+#: 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/profile_photo.php:128
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
+msgstr ""
+
+#: mod/profile_photo.php:137
+msgid "Unable to process image"
+msgstr ""
+
+#: mod/profile_photo.php:254
+msgid "Upload File:"
+msgstr ""
+
+#: mod/profile_photo.php:255
+msgid "Select a profile:"
+msgstr ""
+
+#: mod/profile_photo.php:257
+msgid "Upload"
+msgstr ""
+
+#: mod/profile_photo.php:260
+msgid "or"
+msgstr ""
+
+#: mod/profile_photo.php:260
+msgid "skip this step"
+msgstr ""
+
+#: mod/profile_photo.php:260
+msgid "select a photo from your photo albums"
+msgstr ""
+
+#: mod/profile_photo.php:274
+msgid "Crop Image"
+msgstr ""
+
+#: mod/profile_photo.php:275
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr ""
+
+#: mod/profile_photo.php:277
+msgid "Done Editing"
+msgstr ""
+
+#: mod/profile_photo.php:313
+msgid "Image uploaded successfully."
+msgstr ""
+
+#: mod/profiles.php:43
+msgid "Profile deleted."
+msgstr ""
+
+#: mod/profiles.php:59 mod/profiles.php:95
+msgid "Profile-"
+msgstr ""
+
+#: mod/profiles.php:78 mod/profiles.php:123
+msgid "New profile created."
+msgstr ""
+
+#: mod/profiles.php:101
+msgid "Profile unavailable to clone."
+msgstr ""
+
+#: mod/profiles.php:197
+msgid "Profile Name is required."
+msgstr ""
+
+#: mod/profiles.php:337
+msgid "Marital Status"
+msgstr ""
+
+#: mod/profiles.php:341
+msgid "Romantic Partner"
+msgstr ""
+
+#: mod/profiles.php:353
+msgid "Work/Employment"
+msgstr ""
+
+#: mod/profiles.php:356
+msgid "Religion"
+msgstr ""
+
+#: mod/profiles.php:360
+msgid "Political Views"
+msgstr ""
+
+#: mod/profiles.php:364
+msgid "Gender"
+msgstr ""
+
+#: mod/profiles.php:368
+msgid "Sexual Preference"
+msgstr ""
+
+#: mod/profiles.php:372
+msgid "XMPP"
+msgstr ""
+
+#: mod/profiles.php:376
+msgid "Homepage"
+msgstr ""
+
+#: mod/profiles.php:380 mod/profiles.php:699
+msgid "Interests"
+msgstr ""
+
+#: mod/profiles.php:384
+msgid "Address"
+msgstr ""
+
+#: mod/profiles.php:391 mod/profiles.php:695
+msgid "Location"
+msgstr ""
+
+#: mod/profiles.php:476
+msgid "Profile updated."
+msgstr ""
+
+#: mod/profiles.php:568
+msgid " and "
+msgstr ""
+
+#: mod/profiles.php:577
+msgid "public profile"
+msgstr ""
+
+#: mod/profiles.php:580
+#, php-format
+msgid "%1$s changed %2$s to “%3$s”"
+msgstr ""
+
+#: mod/profiles.php:581
+#, php-format
+msgid " - Visit %1$s's %2$s"
+msgstr ""
+
+#: mod/profiles.php:583
+#, php-format
+msgid "%1$s has an updated %2$s, changing %3$s."
+msgstr ""
+
+#: mod/profiles.php:641
+msgid "Hide contacts and friends:"
+msgstr ""
+
+#: mod/profiles.php:646
+msgid "Hide your contact/friend list from viewers of this profile?"
+msgstr ""
+
+#: mod/profiles.php:671
+msgid "Show more profile fields:"
+msgstr ""
+
+#: mod/profiles.php:683
+msgid "Profile Actions"
+msgstr ""
+
+#: mod/profiles.php:684
+msgid "Edit Profile Details"
+msgstr ""
+
+#: mod/profiles.php:686
+msgid "Change Profile Photo"
+msgstr ""
+
+#: mod/profiles.php:687
+msgid "View this profile"
+msgstr ""
+
+#: mod/profiles.php:689
+msgid "Create a new profile using these settings"
+msgstr ""
+
+#: mod/profiles.php:690
+msgid "Clone this profile"
+msgstr ""
+
+#: mod/profiles.php:691
+msgid "Delete this profile"
+msgstr ""
+
+#: mod/profiles.php:693
+msgid "Basic information"
+msgstr ""
+
+#: mod/profiles.php:694
+msgid "Profile picture"
+msgstr ""
+
+#: mod/profiles.php:696
+msgid "Preferences"
+msgstr ""
+
+#: mod/profiles.php:697
+msgid "Status information"
+msgstr ""
+
+#: mod/profiles.php:698
+msgid "Additional information"
+msgstr ""
+
+#: mod/profiles.php:701
+msgid "Relation"
+msgstr ""
+
+#: mod/profiles.php:705
+msgid "Your Gender:"
+msgstr ""
+
+#: mod/profiles.php:706
+msgid "♥ Marital Status:"
+msgstr ""
+
+#: mod/profiles.php:708
+msgid "Example: fishing photography software"
+msgstr ""
+
+#: mod/profiles.php:713
+msgid "Profile Name:"
+msgstr ""
+
+#: mod/profiles.php:715
+msgid ""
+"This is your public profile.
It may "
+"be visible to anybody using the internet."
+msgstr ""
+
+#: mod/profiles.php:716
+msgid "Your Full Name:"
+msgstr ""
+
+#: mod/profiles.php:717
+msgid "Title/Description:"
+msgstr ""
+
+#: mod/profiles.php:720
+msgid "Street Address:"
+msgstr ""
+
+#: mod/profiles.php:721
+msgid "Locality/City:"
+msgstr ""
+
+#: mod/profiles.php:722
+msgid "Region/State:"
+msgstr ""
+
+#: mod/profiles.php:723
+msgid "Postal/Zip Code:"
+msgstr ""
+
+#: mod/profiles.php:724
+msgid "Country:"
+msgstr ""
+
+#: mod/profiles.php:728
+msgid "Who: (if applicable)"
+msgstr ""
+
+#: mod/profiles.php:728
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr ""
+
+#: mod/profiles.php:729
+msgid "Since [date]:"
+msgstr ""
+
+#: mod/profiles.php:731
+msgid "Tell us about yourself..."
+msgstr ""
+
+#: mod/profiles.php:732
+msgid "XMPP (Jabber) address:"
+msgstr ""
+
+#: mod/profiles.php:732
+msgid ""
+"The XMPP address will be propagated to your contacts so that they can follow "
+"you."
+msgstr ""
+
+#: mod/profiles.php:733
+msgid "Homepage URL:"
+msgstr ""
+
+#: mod/profiles.php:736
+msgid "Religious Views:"
+msgstr ""
+
+#: mod/profiles.php:737
+msgid "Public Keywords:"
+msgstr ""
+
+#: mod/profiles.php:737
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr ""
+
+#: mod/profiles.php:738
+msgid "Private Keywords:"
+msgstr ""
+
+#: mod/profiles.php:738
+msgid "(Used for searching profiles, never shown to others)"
+msgstr ""
+
+#: mod/profiles.php:741
+msgid "Musical interests"
+msgstr ""
+
+#: mod/profiles.php:742
+msgid "Books, literature"
+msgstr ""
+
+#: mod/profiles.php:743
+msgid "Television"
+msgstr ""
+
+#: mod/profiles.php:744
+msgid "Film/dance/culture/entertainment"
+msgstr ""
+
+#: mod/profiles.php:745
+msgid "Hobbies/Interests"
+msgstr ""
+
+#: mod/profiles.php:746
+msgid "Love/romance"
+msgstr ""
+
+#: mod/profiles.php:747
+msgid "Work/employment"
+msgstr ""
+
+#: mod/profiles.php:748
+msgid "School/education"
+msgstr ""
+
+#: mod/profiles.php:749
+msgid "Contact information and Social Networks"
+msgstr ""
+
+#: mod/profiles.php:790
+msgid "Edit/Manage Profiles"
+msgstr ""
+
+#: mod/register.php:97
+msgid ""
+"Registration successful. Please check your email for further instructions."
+msgstr ""
+
+#: mod/register.php:102
+#, php-format
+msgid ""
+"Failed to send email message. Here your accout details:
login: %s
"
+"password: %s
You can change your password after login."
+msgstr ""
+
+#: mod/register.php:109
+msgid "Registration successful."
+msgstr ""
+
+#: mod/register.php:115
+msgid "Your registration can not be processed."
+msgstr ""
+
+#: mod/register.php:164
+msgid "Your registration is pending approval by the site owner."
+msgstr ""
+
+#: mod/register.php:230
+msgid ""
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
+msgstr ""
+
+#: 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/register.php:232
+msgid "Your OpenID (optional): "
+msgstr ""
+
+#: mod/register.php:246
+msgid "Include your profile in member directory?"
+msgstr ""
+
+#: mod/register.php:271
+msgid "Note for the admin"
+msgstr ""
+
+#: mod/register.php:271
+msgid "Leave a message for the admin, why you want to join this node"
+msgstr ""
+
+#: mod/register.php:272
+msgid "Membership on this site is by invitation only."
+msgstr ""
+
+#: mod/register.php:273
+msgid "Your invitation ID: "
+msgstr ""
+
+#: mod/register.php:284
+msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
+msgstr ""
+
+#: mod/register.php:285
+msgid "Your Email Address: "
+msgstr ""
+
+#: mod/register.php:287 mod/settings.php:1280
+msgid "New Password:"
+msgstr ""
+
+#: mod/register.php:287
+msgid "Leave empty for an auto generated password."
+msgstr ""
+
+#: mod/register.php:288 mod/settings.php:1281
+msgid "Confirm:"
+msgstr ""
+
+#: mod/register.php:289
+msgid ""
+"Choose a profile nickname. This must begin with a text character. Your "
+"profile address on this site will then be 'nickname@$sitename"
+"strong>'."
+msgstr ""
+
+#: mod/register.php:290
+msgid "Choose a nickname: "
+msgstr ""
+
+#: mod/register.php:300
+msgid "Import your profile to this friendica instance"
+msgstr ""
+
+#: mod/regmod.php:61
+msgid "Account approved."
+msgstr ""
+
+#: mod/regmod.php:89
+#, php-format
+msgid "Registration revoked for %s"
+msgstr ""
+
+#: mod/regmod.php:101
+msgid "Please login."
+msgstr ""
+
+#: mod/removeme.php:55 mod/removeme.php:58
+msgid "Remove My Account"
+msgstr ""
+
+#: mod/removeme.php:56
+msgid ""
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
+msgstr ""
+
+#: mod/removeme.php:57
+msgid "Please enter your password for verification:"
+msgstr ""
+
+#: mod/repair_ostatus.php:17
+msgid "Resubscribing to OStatus contacts"
+msgstr ""
+
+#: mod/repair_ostatus.php:33
+msgid "Error"
+msgstr ""
+
+#: mod/settings.php:63
+msgid "Display"
+msgstr ""
+
+#: mod/settings.php:70 mod/settings.php:892
+msgid "Social Networks"
+msgstr ""
+
+#: mod/settings.php:91
+msgid "Connected apps"
+msgstr ""
+
+#: mod/settings.php:98 mod/uexport.php:47
+msgid "Export personal data"
+msgstr ""
+
+#: mod/settings.php:105
+msgid "Remove account"
+msgstr ""
+
+#: mod/settings.php:160
+msgid "Missing some important data!"
+msgstr ""
+
+#: mod/settings.php:274
+msgid "Failed to connect with email account using the settings provided."
+msgstr ""
+
+#: mod/settings.php:279
+msgid "Email settings updated."
+msgstr ""
+
+#: mod/settings.php:294
+msgid "Features updated"
+msgstr ""
+
+#: mod/settings.php:364
+msgid "Relocate message has been send to your contacts"
+msgstr ""
+
+#: mod/settings.php:383
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr ""
+
+#: mod/settings.php:391
+msgid "Wrong password."
+msgstr ""
+
+#: mod/settings.php:402
+msgid "Password changed."
+msgstr ""
+
+#: mod/settings.php:404
+msgid "Password update failed. Please try again."
+msgstr ""
+
+#: mod/settings.php:484
+msgid " Please use a shorter name."
+msgstr ""
+
+#: mod/settings.php:486
+msgid " Name too short."
+msgstr ""
+
+#: mod/settings.php:495
+msgid "Wrong Password"
+msgstr ""
+
+#: mod/settings.php:500
+msgid " Not valid email."
+msgstr ""
+
+#: mod/settings.php:506
+msgid " Cannot change to that email."
+msgstr ""
+
+#: mod/settings.php:562
+msgid "Private forum has no privacy permissions. Using default privacy group."
+msgstr ""
+
+#: mod/settings.php:566
+msgid "Private forum has no privacy permissions and no default privacy group."
+msgstr ""
+
+#: mod/settings.php:606
+msgid "Settings updated."
+msgstr ""
+
+#: mod/settings.php:682 mod/settings.php:708 mod/settings.php:744
+msgid "Add application"
+msgstr ""
+
+#: mod/settings.php:686 mod/settings.php:712
+msgid "Consumer Key"
+msgstr ""
+
+#: mod/settings.php:687 mod/settings.php:713
+msgid "Consumer Secret"
+msgstr ""
+
+#: mod/settings.php:688 mod/settings.php:714
+msgid "Redirect"
+msgstr ""
+
+#: mod/settings.php:689 mod/settings.php:715
+msgid "Icon url"
+msgstr ""
+
+#: mod/settings.php:700
+msgid "You can't edit this application."
+msgstr ""
+
+#: mod/settings.php:743
+msgid "Connected Apps"
+msgstr ""
+
+#: mod/settings.php:747
+msgid "Client key starts with"
+msgstr ""
+
+#: mod/settings.php:748
+msgid "No name"
+msgstr ""
+
+#: mod/settings.php:749
+msgid "Remove authorization"
+msgstr ""
+
+#: mod/settings.php:761
+msgid "No Plugin settings configured"
+msgstr ""
+
+#: mod/settings.php:770
+msgid "Plugin Settings"
+msgstr ""
+
+#: mod/settings.php:792
+msgid "Additional Features"
+msgstr ""
+
+#: mod/settings.php:802 mod/settings.php:806
+msgid "General Social Media Settings"
+msgstr ""
+
+#: mod/settings.php:812
+msgid "Disable intelligent shortening"
+msgstr ""
+
+#: mod/settings.php:814
+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."
+msgstr ""
+
+#: mod/settings.php:820
+msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
+msgstr ""
+
+#: mod/settings.php:822
+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."
+msgstr ""
+
+#: mod/settings.php:828
+msgid "Default group for OStatus contacts"
+msgstr ""
+
+#: mod/settings.php:836
+msgid "Your legacy GNU Social account"
+msgstr ""
+
+#: 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/settings.php:841
+msgid "Repair OStatus subscriptions"
+msgstr ""
+
+#: mod/settings.php:850 mod/settings.php:851
+#, php-format
+msgid "Built-in support for %s connectivity is %s"
+msgstr ""
+
+#: mod/settings.php:850 mod/settings.php:851
+msgid "enabled"
+msgstr ""
+
+#: mod/settings.php:850 mod/settings.php:851
+msgid "disabled"
+msgstr ""
+
+#: mod/settings.php:851
+msgid "GNU Social (OStatus)"
+msgstr ""
+
+#: mod/settings.php:885
+msgid "Email access is disabled on this site."
+msgstr ""
+
+#: mod/settings.php:897
+msgid "Email/Mailbox Setup"
+msgstr ""
+
+#: 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/settings.php:899
+msgid "Last successful email check:"
+msgstr ""
+
+#: mod/settings.php:901
+msgid "IMAP server name:"
+msgstr ""
+
+#: mod/settings.php:902
+msgid "IMAP port:"
+msgstr ""
+
+#: mod/settings.php:903
+msgid "Security:"
+msgstr ""
+
+#: mod/settings.php:903 mod/settings.php:908
+msgid "None"
+msgstr ""
+
+#: mod/settings.php:904
+msgid "Email login name:"
+msgstr ""
+
+#: mod/settings.php:905
+msgid "Email password:"
+msgstr ""
+
+#: mod/settings.php:906
+msgid "Reply-to address:"
+msgstr ""
+
+#: mod/settings.php:907
+msgid "Send public posts to all email contacts:"
+msgstr ""
+
+#: mod/settings.php:908
+msgid "Action after import:"
+msgstr ""
+
+#: mod/settings.php:908
+msgid "Move to folder"
+msgstr ""
+
+#: mod/settings.php:909
+msgid "Move to folder:"
+msgstr ""
+
+#: mod/settings.php:1005
+msgid "Display Settings"
+msgstr ""
+
+#: mod/settings.php:1011 mod/settings.php:1034
+msgid "Display Theme:"
+msgstr ""
+
+#: mod/settings.php:1012
+msgid "Mobile Theme:"
+msgstr ""
+
+#: mod/settings.php:1013
+msgid "Suppress warning of insecure networks"
+msgstr ""
+
+#: mod/settings.php:1013
+msgid ""
+"Should the system suppress the warning that the current group contains "
+"members of networks that can't receive non public postings."
+msgstr ""
+
+#: mod/settings.php:1014
+msgid "Update browser every xx seconds"
+msgstr ""
+
+#: mod/settings.php:1014
+msgid "Minimum of 10 seconds. Enter -1 to disable it."
+msgstr ""
+
+#: mod/settings.php:1015
+msgid "Number of items to display per page:"
+msgstr ""
+
+#: mod/settings.php:1015 mod/settings.php:1016
+msgid "Maximum of 100 items"
+msgstr ""
+
+#: 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/settings.php:1019
+msgid "Beginning of week:"
+msgstr ""
+
+#: mod/settings.php:1020
+msgid "Don't show notices"
+msgstr ""
+
+#: mod/settings.php:1021
+msgid "Infinite scroll"
+msgstr ""
+
+#: mod/settings.php:1022
+msgid "Automatic updates only at the top of the network page"
+msgstr ""
+
+#: mod/settings.php:1022
+msgid ""
+"When disabled, the network page is updated all the time, which could be "
+"confusing while reading."
+msgstr ""
+
+#: mod/settings.php:1023
+msgid "Bandwith Saver Mode"
+msgstr ""
+
+#: mod/settings.php:1023
+msgid ""
+"When enabled, embedded content is not displayed on automatic updates, they "
+"only show on page reload."
+msgstr ""
+
+#: mod/settings.php:1025
+msgid "General Theme Settings"
+msgstr ""
+
+#: mod/settings.php:1026
+msgid "Custom Theme Settings"
+msgstr ""
+
+#: mod/settings.php:1027
+msgid "Content Settings"
+msgstr ""
+
+#: 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/settings.php:1112
+msgid "Account Types"
+msgstr ""
+
+#: mod/settings.php:1113
+msgid "Personal Page Subtypes"
+msgstr ""
+
+#: mod/settings.php:1114
+msgid "Community Forum Subtypes"
+msgstr ""
+
+#: mod/settings.php:1121
+msgid "Personal Page"
+msgstr ""
+
+#: mod/settings.php:1122
+msgid "Account for a personal profile."
+msgstr ""
+
+#: mod/settings.php:1125
+msgid "Organisation Page"
+msgstr ""
+
+#: mod/settings.php:1126
+msgid ""
+"Account for an organisation that automatically approves contact requests as "
+"\"Followers\"."
+msgstr ""
+
+#: mod/settings.php:1129
+msgid "News Page"
+msgstr ""
+
+#: mod/settings.php:1130
+msgid ""
+"Account for a news reflector that automatically approves contact requests as "
+"\"Followers\"."
+msgstr ""
+
+#: mod/settings.php:1133
+msgid "Community Forum"
+msgstr ""
+
+#: mod/settings.php:1134
+msgid "Account for community discussions."
+msgstr ""
+
+#: mod/settings.php:1137
+msgid "Normal Account Page"
+msgstr ""
+
+#: mod/settings.php:1138
+msgid ""
+"Account for a regular personal profile that requires manual approval of "
+"\"Friends\" and \"Followers\"."
+msgstr ""
+
+#: mod/settings.php:1141
+msgid "Soapbox Page"
+msgstr ""
+
+#: mod/settings.php:1142
+msgid ""
+"Account for a public profile that automatically approves contact requests as "
+"\"Followers\"."
+msgstr ""
+
+#: mod/settings.php:1145
+msgid "Public Forum"
+msgstr ""
+
+#: mod/settings.php:1146
+msgid "Automatically approves all contact requests."
+msgstr ""
+
+#: mod/settings.php:1149
+msgid "Automatic Friend Page"
+msgstr ""
+
+#: mod/settings.php:1150
+msgid ""
+"Account for a popular profile that automatically approves contact requests "
+"as \"Friends\"."
+msgstr ""
+
+#: mod/settings.php:1153
+msgid "Private Forum [Experimental]"
+msgstr ""
+
+#: mod/settings.php:1154
+msgid "Requires manual approval of contact requests."
+msgstr ""
+
+#: mod/settings.php:1165
+msgid "OpenID:"
+msgstr ""
+
+#: mod/settings.php:1165
+msgid "(Optional) Allow this OpenID to login to this account."
+msgstr ""
+
+#: mod/settings.php:1173
+msgid "Publish your default profile in your local site directory?"
+msgstr ""
+
+#: mod/settings.php:1173
+msgid "Your profile may be visible in public."
+msgstr ""
+
+#: mod/settings.php:1179
+msgid "Publish your default profile in the global social directory?"
+msgstr ""
+
+#: mod/settings.php:1186
+msgid "Hide your contact/friend list from viewers of your default profile?"
+msgstr ""
+
+#: mod/settings.php:1190
+msgid ""
+"If enabled, posting public messages to Diaspora and other networks isn't "
+"possible."
+msgstr ""
+
+#: mod/settings.php:1195
+msgid "Allow friends to post to your profile page?"
+msgstr ""
+
+#: mod/settings.php:1200
+msgid "Allow friends to tag your posts?"
+msgstr ""
+
+#: mod/settings.php:1205
+msgid "Allow us to suggest you as a potential friend to new members?"
+msgstr ""
+
+#: mod/settings.php:1210
+msgid "Permit unknown people to send you private mail?"
+msgstr ""
+
+#: mod/settings.php:1218
+msgid "Profile is not published."
+msgstr ""
+
+#: mod/settings.php:1226
+#, php-format
+msgid "Your Identity Address is '%s' or '%s'."
+msgstr ""
+
+#: mod/settings.php:1233
+msgid "Automatically expire posts after this many days:"
+msgstr ""
+
+#: mod/settings.php:1233
+msgid "If empty, posts will not expire. Expired posts will be deleted"
+msgstr ""
+
+#: mod/settings.php:1234
+msgid "Advanced expiration settings"
+msgstr ""
+
+#: mod/settings.php:1235
+msgid "Advanced Expiration"
+msgstr ""
+
+#: mod/settings.php:1236
+msgid "Expire posts:"
+msgstr ""
+
+#: mod/settings.php:1237
+msgid "Expire personal notes:"
+msgstr ""
+
+#: mod/settings.php:1238
+msgid "Expire starred posts:"
+msgstr ""
+
+#: mod/settings.php:1239
+msgid "Expire photos:"
+msgstr ""
+
+#: mod/settings.php:1240
+msgid "Only expire posts by others:"
+msgstr ""
+
+#: mod/settings.php:1271
+msgid "Account Settings"
+msgstr ""
+
+#: mod/settings.php:1279
+msgid "Password Settings"
+msgstr ""
+
+#: mod/settings.php:1281
+msgid "Leave password fields blank unless changing"
+msgstr ""
+
+#: mod/settings.php:1282
+msgid "Current Password:"
+msgstr ""
+
+#: mod/settings.php:1282 mod/settings.php:1283
+msgid "Your current password to confirm the changes"
+msgstr ""
+
+#: mod/settings.php:1283
+msgid "Password:"
+msgstr ""
+
+#: mod/settings.php:1287
+msgid "Basic Settings"
+msgstr ""
+
+#: mod/settings.php:1289
+msgid "Email Address:"
+msgstr ""
+
+#: mod/settings.php:1290
+msgid "Your Timezone:"
+msgstr ""
+
+#: mod/settings.php:1291
+msgid "Your Language:"
+msgstr ""
+
+#: mod/settings.php:1291
+msgid ""
+"Set the language we use to show you friendica interface and to send you "
+"emails"
+msgstr ""
+
+#: mod/settings.php:1292
+msgid "Default Post Location:"
+msgstr ""
+
+#: mod/settings.php:1293
+msgid "Use Browser Location:"
+msgstr ""
+
+#: mod/settings.php:1296
+msgid "Security and Privacy Settings"
+msgstr ""
+
+#: mod/settings.php:1298
+msgid "Maximum Friend Requests/Day:"
+msgstr ""
+
+#: mod/settings.php:1298 mod/settings.php:1328
+msgid "(to prevent spam abuse)"
+msgstr ""
+
+#: mod/settings.php:1299
+msgid "Default Post Permissions"
+msgstr ""
+
+#: mod/settings.php:1300
+msgid "(click to open/close)"
+msgstr ""
+
+#: mod/settings.php:1311
+msgid "Default Private Post"
+msgstr ""
+
+#: mod/settings.php:1312
+msgid "Default Public Post"
+msgstr ""
+
+#: mod/settings.php:1316
+msgid "Default Permissions for New Posts"
+msgstr ""
+
+#: mod/settings.php:1328
+msgid "Maximum private messages per day from unknown people:"
+msgstr ""
+
+#: mod/settings.php:1331
+msgid "Notification Settings"
+msgstr ""
+
+#: mod/settings.php:1332
+msgid "By default post a status message when:"
+msgstr ""
+
+#: mod/settings.php:1333
+msgid "accepting a friend request"
+msgstr ""
+
+#: mod/settings.php:1334
+msgid "joining a forum/community"
+msgstr ""
+
+#: mod/settings.php:1335
+msgid "making an interesting profile change"
+msgstr ""
+
+#: mod/settings.php:1336
+msgid "Send a notification email when:"
+msgstr ""
+
+#: mod/settings.php:1337
+msgid "You receive an introduction"
+msgstr ""
+
+#: mod/settings.php:1338
+msgid "Your introductions are confirmed"
+msgstr ""
+
+#: mod/settings.php:1339
+msgid "Someone writes on your profile wall"
+msgstr ""
+
+#: mod/settings.php:1340
+msgid "Someone writes a followup comment"
+msgstr ""
+
+#: mod/settings.php:1341
+msgid "You receive a private message"
+msgstr ""
+
+#: mod/settings.php:1342
+msgid "You receive a friend suggestion"
+msgstr ""
+
+#: mod/settings.php:1343
+msgid "You are tagged in a post"
+msgstr ""
+
+#: mod/settings.php:1344
+msgid "You are poked/prodded/etc. in a post"
+msgstr ""
+
+#: mod/settings.php:1346
+msgid "Activate desktop notifications"
+msgstr ""
+
+#: mod/settings.php:1346
+msgid "Show desktop popup on new notifications"
+msgstr ""
+
+#: mod/settings.php:1348
+msgid "Text-only notification emails"
+msgstr ""
+
+#: mod/settings.php:1350
+msgid "Send text only notification emails, without the html part"
+msgstr ""
+
+#: mod/settings.php:1352
+msgid "Advanced Account/Page Type Settings"
+msgstr ""
+
+#: mod/settings.php:1353
+msgid "Change the behaviour of this account for special situations"
+msgstr ""
+
+#: mod/settings.php:1356
+msgid "Relocate"
+msgstr ""
+
+#: 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/settings.php:1358
+msgid "Resend relocate message to contacts"
+msgstr ""
+
+#: mod/subthread.php:106
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
+msgstr ""
+
+#: mod/suggest.php:30
+msgid "Do you really want to delete this suggestion?"
+msgstr ""
+
+#: mod/suggest.php:74
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
+msgstr ""
+
+#: mod/suggest.php:87 mod/suggest.php:107
+msgid "Ignore/Hide"
+msgstr ""
+
+#: mod/tagrm.php:46
+msgid "Tag removed"
+msgstr ""
+
+#: mod/tagrm.php:85
+msgid "Remove Item Tag"
+msgstr ""
+
+#: mod/tagrm.php:87
+msgid "Select a tag to remove: "
+msgstr ""
+
+#: mod/uexport.php:39
+msgid "Export account"
+msgstr ""
+
+#: mod/uexport.php:39
+msgid ""
+"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/uexport.php:40
+msgid "Export all"
+msgstr ""
+
+#: 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/unfollow.php:33
+msgid "Contact wasn't found or can't be unfollowed."
+msgstr ""
+
+#: mod/unfollow.php:47
+msgid "Contact unfollowed"
+msgstr ""
+
+#: mod/unfollow.php:73
+msgid "You aren't a friend of this contact."
+msgstr ""
+
+#: mod/unfollow.php:79
+msgid "Unfollowing is currently not supported by your network."
+msgstr ""
+
+#: mod/videos.php:127
+msgid "Do you really want to delete this video?"
+msgstr ""
+
+#: mod/videos.php:132
+msgid "Delete Video"
+msgstr ""
+
+#: mod/videos.php:211
+msgid "No videos selected"
+msgstr ""
+
+#: mod/videos.php:405
+msgid "Recent Videos"
+msgstr ""
+
+#: mod/videos.php:407
+msgid "Upload New Videos"
+msgstr ""
+
+#: mod/wallmessage.php:45 mod/wallmessage.php:109
+#, php-format
+msgid "Number of daily wall messages for %s exceeded. Message failed."
+msgstr ""
+
+#: mod/wallmessage.php:56
+msgid "Unable to check your home location."
+msgstr ""
+
+#: mod/wallmessage.php:83 mod/wallmessage.php:92
+msgid "No recipient."
+msgstr ""
+
+#: 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: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 e4aba94aa..28a7ed58a 100644
--- a/view/templates/saved_searches_aside.tpl
+++ b/view/templates/saved_searches_aside.tpl
@@ -7,7 +7,7 @@
{{foreach $saved as $search}}
- {{$search.term}}
+ {{$search.term}}
{{/foreach}}
diff --git a/view/theme/frio/templates/saved_searches_aside.tpl b/view/theme/frio/templates/saved_searches_aside.tpl
index da4cd1541..fea9794ad 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}}
- {{$search.term}}
+ {{$search.term}}
{{/foreach}}
diff --git a/view/theme/quattro/templates/saved_searches_aside.tpl b/view/theme/quattro/templates/saved_searches_aside.tpl
index 007d1d956..c310d98ca 100644
--- a/view/theme/quattro/templates/saved_searches_aside.tpl
+++ b/view/theme/quattro/templates/saved_searches_aside.tpl
@@ -4,7 +4,7 @@