]> git.mxchange.org Git - friendica.git/commitdiff
Merge remote-tracking branch 'upstream/develop' into develop
authorSilke Meyer <silke@silkemeyer.net>
Wed, 4 Oct 2017 19:28:35 +0000 (21:28 +0200)
committerSilke Meyer <silke@silkemeyer.net>
Wed, 4 Oct 2017 19:28:35 +0000 (21:28 +0200)
53 files changed:
INSTALL.txt
boot.php
doc/Install.md
doc/de/Install.md
doc/htconfig.md
include/Contact.php
include/Photo.php
include/api.php
include/bbcode.php
include/cron.php
include/cronjobs.php
include/dba.php
include/dbstructure.php
include/dfrn.php
include/diaspora.php
include/enotify.php
include/items.php
include/message.php
include/ostatus.php
include/photos.php
include/poller.php
include/session.php
include/socgraph.php
include/text.php
include/threads.php
include/user.php
index.php
mod/admin.php
mod/contacts.php
mod/delegate.php
mod/dfrn_confirm.php
mod/directory.php
mod/display.php
mod/follow.php
mod/lostpass.php
mod/network.php
mod/nodeinfo.php
mod/photo.php
mod/photos.php
mod/ping.php
mod/profiles.php
mod/proxy.php
mod/search.php
mod/settings.php
mod/suggest.php
mod/unfollow.php [new file with mode: 0644]
mod/wall_attach.php
mods/sample-nginx.config
object/Item.php
util/messages.po
view/templates/saved_searches_aside.tpl
view/theme/frio/templates/saved_searches_aside.tpl
view/theme/quattro/templates/saved_searches_aside.tpl

index 592d3f5557919597e7526299f692ca3943209789..4a88ac841748f75b180ea19831b2062b0c5b3184 100644 (file)
@@ -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
 
index c3ad39cd5750c80ff81d3a1fb90540daaf9595ae..32fee4f50905cda647c317286cce438b2310f746 100644 (file)
--- 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' );
 
index 06ae77352bbbe93b5ff7193a2428c097acc0b3a8..cda58fa6f70bcc015298c8195cbb1503200ba31a 100644 (file)
@@ -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.)
index 344117c56a57bf2694eb9259407ebf6fc11dfdaa..538641f1bda356c9c9956ef5a8d5623c73c97289 100644 (file)
@@ -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] 
index aeb0c920227b863afe92224140fc37f43ed5a5f4..dd7ab8047ce748fa8f23fb1987276da96a564cdc 100644 (file)
@@ -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".
index 7d480ab020759e7f979ece2bf5f84395d09701f9..a4477c8cb355b82b710530b917ca3c5a209e6ff5 100644 (file)
@@ -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);
        }
index f02ee130a0c865ce878eac2788011933bbeed5a8..78d448fbc240814eb432888384fc5d548ade937f 100644 (file)
@@ -628,92 +628,24 @@ class Photo {
 
        public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') {
 
-               $r = q("SELECT `guid` FROM `photo` WHERE `resource-id` = '%s' AND `guid` != '' LIMIT 1",
-                       dbesc($rid)
-               );
+               $r = dba::select('photo', array('guid'), array("`resource-id` = ? AND `guid` != ?", $rid, ''), array('limit' => 1));
                if (dbm::is_result($r)) {
-                       $guid = $r[0]['guid'];
+                       $guid = $r['guid'];
                } else {
                        $guid = get_guid();
                }
 
-               $x = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `contact-id` = %d AND `scale` = %d LIMIT 1",
-                       dbesc($rid),
-                       intval($uid),
-                       intval($cid),
-                       intval($scale)
-               );
+               $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1));
+
+               $fields = array('uid' => $uid, 'contact-id' => $cid, 'guid' => $guid, 'resource-id' => $rid, 'created' => datetime_convert(), 'edited' => datetime_convert(),
+                               'filename' => basename($filename), 'type' => $this->getType(), 'album' => $album, 'height' => $this->getHeight(), 'width' => $this->getWidth(),
+                               'datasize' => strlen($this->imageString()), 'data' => $this->imageString(), 'scale' => $scale, 'profile' => $profile,
+                               'allow_cid' => $allow_cid, 'allow_gid' => $allow_gid, 'deny_cid' => $deny_cid, 'deny_gid' => $deny_gid, 'desc' => $desc);
+
                if (dbm::is_result($x)) {
-                       $r = q("UPDATE `photo`
-                               SET `uid` = %d,
-                               `contact-id` = %d,
-                               `guid` = '%s',
-                               `resource-id` = '%s',
-                               `created` = '%s',
-                               `edited` = '%s',
-                               `filename` = '%s',
-                               `type` = '%s',
-                               `album` = '%s',
-                               `height` = %d,
-                               `width` = %d,
-                               `datasize` = %d,
-                               `data` = '%s',
-                               `scale` = %d,
-                               `profile` = %d,
-                               `allow_cid` = '%s',
-                               `allow_gid` = '%s',
-                               `deny_cid` = '%s',
-                               `deny_gid` = '%s',
-                               `desc` = '%s'
-                               WHERE `id` = %d",
-
-                               intval($uid),
-                               intval($cid),
-                               dbesc($guid),
-                               dbesc($rid),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
-                               dbesc(basename($filename)),
-                               dbesc($this->getType()),
-                               dbesc($album),
-                               intval($this->getHeight()),
-                               intval($this->getWidth()),
-                               dbesc(strlen($this->imageString())),
-                               dbesc($this->imageString()),
-                               intval($scale),
-                               intval($profile),
-                               dbesc($allow_cid),
-                               dbesc($allow_gid),
-                               dbesc($deny_cid),
-                               dbesc($deny_gid),
-                               dbesc($desc),
-                               intval($x[0]['id'])
-                       );
+                       $r = dba::update('photo', $fields, array('id' => $x['id']));
                } else {
-                       $r = q("INSERT INTO `photo`
-                               (`uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `datasize`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `desc`)
-                               VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s')",
-                               intval($uid),
-                               intval($cid),
-                               dbesc($guid),
-                               dbesc($rid),
-                               dbesc(datetime_convert()),
-                               dbesc(datetime_convert()),
-                               dbesc(basename($filename)),
-                               dbesc($this->getType()),
-                               dbesc($album),
-                               intval($this->getHeight()),
-                               intval($this->getWidth()),
-                               dbesc(strlen($this->imageString())),
-                               dbesc($this->imageString()),
-                               intval($scale),
-                               intval($profile),
-                               dbesc($allow_cid),
-                               dbesc($allow_gid),
-                               dbesc($deny_cid),
-                               dbesc($deny_gid),
-                               dbesc($desc)
-                       );
+                       $r = dba::insert('photo', $fields);
                }
 
                return $r;
index e7c320e62d74e1cb8af9290d8cf23de2860adc18..45c9ed2554df13370f662453b4afc426ea7b2ee8 100644 (file)
@@ -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("<br>", "<blockquote>", "</blockquote>",
                                "<h1>", "</h1>", "<h2>", "</h2>",
                                "<h3>", "</h3>", "<h4>", "</h4>",
                                "<h5>", "</h5>", "<h6>", "</h6>");
-               $replace = array("<br>\n", "\n<blockquote>", "</blockquote>\n",
-                               "\n<h1>", "</h1>\n", "\n<h2>", "</h2>\n",
-                               "\n<h3>", "</h3>\n", "\n<h4>", "</h4>\n",
-                               "\n<h5>", "</h5>\n", "\n<h6>", "</h6>\n");
+               $replace = array("<br>", "<br><blockquote>", "</blockquote><br>",
+                               "<br><h1>", "</h1><br>", "<br><h2>", "</h2><br>",
+                               "<br><h3>", "</h3><br>", "<br><h4>", "</h4><br>",
+                               "<br><h5>", "</h5><br>", "<br><h6>", "</h6><br>");
                $statushtml = str_replace($search, $replace, $statushtml);
 
                if ($item['title'] != "") {
-                       $statushtml = "<h4>" . bbcode($item['title']) . "</h4>\n" . $statushtml;
+                       $statushtml = "<br><h4>" . bbcode($item['title']) . "</h4><br>" . $statushtml;
+               }
+
+               do {
+                       $oldtext = $statushtml;
+                       $statushtml = str_replace("<br><br>", "<br>", $statushtml);
+               } while ($oldtext != $statushtml);
+
+               if (substr($statushtml, 0, 4) == '<br>') {
+                       $statushtml = substr($statushtml, 4);
+               }
+
+               if (substr($statushtml, 0, -4) == '<br>') {
+                       $statushtml = substr($statushtml, -4);
                }
 
                // feeds without body should contain the link
index be4667a2988f6bbb34c9c427e5a88631fe755824..a14e3ee8e9b88f9377b6d9ed02adb73b1e18e59e 100644 (file)
@@ -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) {
index ccac49b637b7c901ed8acf81a74df795c7bc540e..8b0fab77abfefedc5b0dc1c92abf016a03f3b794 100644 (file)
@@ -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");
 
index 53316e464f7c591141361ce29047fac075229459..437fedd53c2243da5d68521d36c1a02fe979f9b5 100644 (file)
@@ -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') {
index c945228297a22cf685f4258ec2767ef7ebf059a0..bc3802935163badf83d5c4eea5ef8c8b979b3319 100644 (file)
@@ -7,11 +7,6 @@ require_once('include/datetime.php');
 /**
  * @class MySQL database class
  *
- * For debugging, insert 'dbg(1);' anywhere in the program flow.
- * dbg(0); will turn it off. Logging is performed at LOGGER_DATA level.
- * When logging, all binary info is converted to text and html entities are escaped so that
- * the debugging stream is safe to view within both terminals and web pages.
- *
  * This class is for the low level database stuff that does driver specific things.
  */
 
@@ -214,175 +209,32 @@ class dba {
                }
        }
 
-       public function q($sql, $onlyquery = false) {
-               $a = get_app();
-
-               if (!$this->db || !$this->connected) {
-                       return false;
-               }
-
-               $this->error = '';
-
-               $connstr = ($this->connected() ? "Connected" : "Disonnected");
-
-               $stamp1 = microtime(true);
-
-               $orig_sql = $sql;
-
-               if (x($a->config,'system') && x($a->config['system'], 'db_callstack')) {
-                       $sql = "/*".System::callstack()." */ ".$sql;
-               }
-
-               $columns = 0;
-
-               switch ($this->driver) {
-                       case 'pdo':
-                               $result = @$this->db->query($sql);
-                               // Is used to separate between queries that returning data - or not
-                               if (!is_bool($result)) {
-                                       $columns = $result->columnCount();
-                               }
-                               break;
-                       case 'mysqli':
-                               $result = @$this->db->query($sql);
-                               break;
-                       case 'mysql':
-                               $result = @mysql_query($sql,$this->db);
-                               break;
-               }
-               $stamp2 = microtime(true);
-               $duration = (float)($stamp2 - $stamp1);
-
-               $a->save_timestamp($stamp1, "database");
-
-               if (strtolower(substr($orig_sql, 0, 6)) != "select") {
-                       $a->save_timestamp($stamp1, "database_write");
-               }
-               if (x($a->config,'system') && x($a->config['system'],'db_log')) {
-                       if (($duration > $a->config["system"]["db_loglimit"])) {
-                               $duration = round($duration, 3);
-                               $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
-                               @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t".
-                                               basename($backtrace[1]["file"])."\t".
-                                               $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
-                                               substr($sql, 0, 2000)."\n", FILE_APPEND);
-                       }
-               }
-
-               switch ($this->driver) {
-                       case 'pdo':
-                               $errorInfo = $this->db->errorInfo();
-                               if ($errorInfo) {
-                                       $this->error = $errorInfo[2];
-                                       $this->errorno = $errorInfo[1];
-                               }
-                               break;
-                       case 'mysqli':
-                               if ($this->db->errno) {
-                                       $this->error = $this->db->error;
-                                       $this->errorno = $this->db->errno;
-                               }
-                               break;
-                       case 'mysql':
-                               if (mysql_errno($this->db)) {
-                                       $this->error = mysql_error($this->db);
-                                       $this->errorno = mysql_errno($this->db);
-                               }
-                               break;
-               }
-               if (strlen($this->error)) {
-                       logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error);
-               }
-
-               if ($this->debug) {
-
-                       $mesg = '';
-
-                       if ($result === false) {
-                               $mesg = 'false';
-                       } elseif ($result === true) {
-                               $mesg = 'true';
-                       } else {
-                               switch ($this->driver) {
-                                       case 'pdo':
-                                               $mesg = $result->rowCount().' results'.EOL;
-                                               break;
-                                       case 'mysqli':
-                                               $mesg = $result->num_rows.' results'.EOL;
-                                               break;
-                                       case 'mysql':
-                                               $mesg = mysql_num_rows($result).' results'.EOL;
-                                               break;
-                               }
-                       }
-
-                       $str =  'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg
-                               . (($this->error) ? ' error: ' . $this->error : '')
-                               . EOL;
-
-                       logger('dba: ' . $str );
-               }
-
-               /**
-                * If dbfail.out exists, we will write any failed calls directly to it,
-                * regardless of any logging that may or may nor be in effect.
-                * These usually indicate SQL syntax errors that need to be resolved.
-                */
+       /**
+        * @brief execute SQL query - deprecated
+        *
+        * Please use the dba:: functions instead:
+        * dba::select, dba::exists, dba::insert
+        * dba::delete, dba::update, dba::p, dba::e
+        *
+        * @param string $sql SQL query
+        * @return array Query array
+        */
+       public function q($sql) {
+               $ret = self::p($sql);
 
-               if ($result === false) {
-                       logger('dba: ' . printable($sql) . ' returned false.' . "\n" . $this->error);
-                       if (file_exists('dbfail.out')) {
-                               file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND);
-                       }
+               if (is_bool($ret)) {
+                       return $ret;
                }
 
-               if (is_bool($result)) {
-                       return $result;
-               }
-               if ($onlyquery) {
-                       $this->result = $result;
-                       return true;
-               }
+               $columns = self::columnCount($ret);
 
-               $r = array();
-               switch ($this->driver) {
-                       case 'pdo':
-                               while ($x = $result->fetch(PDO::FETCH_ASSOC)) {
-                                       $r[] = $x;
-                               }
-                               $result->closeCursor();
-                               break;
-                       case 'mysqli':
-                               while ($x = $result->fetch_array(MYSQLI_ASSOC)) {
-                                       $r[] = $x;
-                               }
-                               $result->free_result();
-                               break;
-                       case 'mysql':
-                               while ($x = mysql_fetch_array($result, MYSQL_ASSOC)) {
-                                       $r[] = $x;
-                               }
-                               mysql_free_result($result);
-                               break;
-               }
+               $data = self::inArray($ret);
 
-               // PDO doesn't return "true" on successful operations - like mysqli does
-               // Emulate this behaviour by checking if the query returned data and had columns
-               // This should be reliable enough
-               if (($this->driver == 'pdo') && (count($r) == 0) && ($columns == 0)) {
+               if ((count($data) == 0) && ($columns == 0)) {
                        return true;
                }
 
-               //$a->save_timestamp($stamp1, "database");
-
-               if ($this->debug) {
-                       logger('dba: ' . printable(print_r($r, true)));
-               }
-               return($r);
-       }
-
-       public function dbg($dbg) {
-               $this->debug = $dbg;
+               return $data;
        }
 
        public function escape($str) {
@@ -515,6 +367,10 @@ class dba {
        /**
         * @brief Executes a prepared statement that returns data
         * @usage Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid);
+        *
+        * Please only use it with complicated queries.
+        * For all regular queries please use dba::select or dba::exists
+        *
         * @param string $sql SQL statement
         * @return object statement object
         */
@@ -540,7 +396,7 @@ class dba {
                        return false;
                }
 
-               if (substr_count($sql, '?') != count($args)) {
+               if ((substr_count($sql, '?') != count($args)) && (count($args) > 0)) {
                        // Question: Should we continue or stop the query here?
                        logger('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG);
                }
@@ -572,6 +428,19 @@ class dba {
 
                switch (self::$dbo->driver) {
                        case 'pdo':
+                               // If there are no arguments we use "query"
+                               if (count($args) == 0) {
+                                       if (!$retval = self::$dbo->db->query($sql)) {
+                                               $errorInfo = self::$dbo->db->errorInfo();
+                                               self::$dbo->error = $errorInfo[2];
+                                               self::$dbo->errorno = $errorInfo[1];
+                                               $retval = false;
+                                               break;
+                                       }
+                                       self::$dbo->affected_rows = $retval->rowCount();
+                                       break;
+                               }
+
                                if (!$stmt = self::$dbo->db->prepare($sql)) {
                                        $errorInfo = self::$dbo->db->errorInfo();
                                        self::$dbo->error = $errorInfo[2];
@@ -600,8 +469,8 @@ class dba {
                                $command = strtolower($parts[0]);
                                $can_be_prepared = in_array($command, array('select', 'update', 'insert', 'delete'));
 
-                               // The fallback routine currently only works with statements that doesn't return values
-                               if (!$can_be_prepared && $called_from_e) {
+                               // The fallback routine is called as well when there are no arguments
+                               if (!$can_be_prepared || (count($args) == 0)) {
                                        $retval = self::$dbo->db->query(self::replace_parameters($sql, $args));
                                        if (self::$dbo->db->errno) {
                                                self::$dbo->error = self::$dbo->db->error;
@@ -710,6 +579,8 @@ class dba {
        /**
         * @brief Executes a prepared statement like UPDATE or INSERT that doesn't return data
         *
+        * Please use dba::delete, dba::insert, dba::update, ... instead
+        *
         * @param string $sql SQL statement
         * @return boolean Was the query successfull? False is returned only if an error occurred
         */
@@ -792,6 +663,8 @@ class dba {
        /**
         * @brief Fetches the first row
         *
+        * Please use dba::select or dba::exists whenever this is possible.
+        *
         * @param string $sql SQL statement
         * @return array first row of query
         */
@@ -820,6 +693,26 @@ class dba {
                return self::$dbo->affected_rows;
        }
 
+       /**
+        * @brief Returns the number of columns of a statement
+        *
+        * @param object Statement object
+        * @return int Number of columns
+        */
+       public static function columnCount($stmt) {
+               if (!is_object($stmt)) {
+                       return 0;
+               }
+               switch (self::$dbo->driver) {
+                       case 'pdo':
+                               return $stmt->columnCount();
+                       case 'mysqli':
+                               return $stmt->field_count;
+                       case 'mysql':
+                               return mysql_affected_rows($stmt);
+               }
+               return 0;
+       }
        /**
         * @brief Returns the number of rows of a statement
         *
@@ -856,6 +749,10 @@ class dba {
                        case 'pdo':
                                return $stmt->fetch(PDO::FETCH_ASSOC);
                        case 'mysqli':
+                               if (get_class($stmt) == 'mysqli_result') {
+                                       return $stmt->fetch_assoc();
+                               }
+
                                // This code works, but is slow
 
                                // Bind the result to a result array
@@ -1019,13 +916,13 @@ class dba {
                $definition = db_definition();
 
                foreach ($definition AS $table => $structure) {
-                       foreach ($structure['fields'] AS $field => $field_struct) {
-                               if (isset($field_struct['relation'])) {
-                                       foreach ($field_struct['relation'] AS $rel_table => $rel_field) {
-                                               self::$relation[$rel_table][$rel_field][$table][] = $field;
-                                       }
-                               }
-                       }
+                       foreach ($structure['fields'] AS $field => $field_struct) {
+                               if (isset($field_struct['relation'])) {
+                                       foreach ($field_struct['relation'] AS $rel_table => $rel_field) {
+                                               self::$relation[$rel_table][$rel_field][$table][] = $field;
+                                       }
+                               }
+                       }
                }
        }
 
@@ -1271,7 +1168,11 @@ class dba {
         * Example:
         * $table = "item";
         * $fields = array("id", "uri", "uid", "network");
+        *
         * $condition = array("uid" => 1, "network" => 'dspr');
+        * or:
+        * $condition = array("`uid` = ? AND `network` IN (?, ?)", 1, 'dfrn', 'dspr');
+        *
         * $params = array("order" => array("id", "received" => true), "limit" => 1);
         *
         * $data = dba::select($table, $fields, $condition, $params);
@@ -1381,24 +1282,6 @@ class dba {
        }
 }
 
-function printable($s) {
-       $s = preg_replace("~([\x01-\x08\x0E-\x0F\x10-\x1F\x7F-\xFF])~",".", $s);
-       $s = str_replace("\x00",'.',$s);
-       if (x($_SERVER,'SERVER_NAME')) {
-               $s = escape_tags($s);
-       }
-       return $s;
-}
-
-// Procedural functions
-function dbg($state) {
-       global $db;
-
-       if ($db) {
-               $db->dbg($state);
-       }
-}
-
 function dbesc($str) {
        global $db;
 
@@ -1409,107 +1292,46 @@ function dbesc($str) {
        }
 }
 
-// Function: q($sql,$args);
-// Description: execute SQL query with printf style args.
-// Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
-//                   'user', 1);
-function q($sql) {
-       global $db;
-       $args = func_get_args();
-       unset($args[0]);
-
-       if ($db && $db->connected) {
-               $sql = $db->clean_query($sql);
-               $sql = $db->any_value_fallback($sql);
-               $stmt = @vsprintf($sql,$args); // Disabled warnings
-               //logger("dba: q: $stmt", LOGGER_ALL);
-               if ($stmt === false)
-                       logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);
-
-               $db->log_index($stmt);
-
-               return $db->q($stmt);
-       }
-
-       /**
-        *
-        * This will happen occasionally trying to store the
-        * session data after abnormal program termination
-        *
-        */
-       logger('dba: no database: ' . print_r($args,true));
-       return false;
-}
-
 /**
- * @brief Performs a query with "dirty reads"
+ * @brief execute SQL query with printf style args - deprecated
  *
- * By doing dirty reads (reading uncommitted data) no locks are performed
- * This function can be used to fetch data that doesn't need to be reliable.
+ * Please use the dba:: functions instead:
+ * dba::select, dba::exists, dba::insert
+ * dba::delete, dba::update, dba::p, dba::e
  *
  * @param $args Query parameters (1 to N parameters of different types)
  * @return array Query array
  */
-function qu($sql) {
+function q($sql) {
        global $db;
 
        $args = func_get_args();
        unset($args[0]);
 
-       if ($db && $db->connected) {
-               $sql = $db->clean_query($sql);
-               $sql = $db->any_value_fallback($sql);
-               $stmt = @vsprintf($sql,$args); // Disabled warnings
-               if ($stmt === false)
-                       logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);
-
-               $db->log_index($stmt);
-
-               $db->q("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
-               $retval = $db->q($stmt);
-               $db->q("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;");
-               return $retval;
+       if (!$db || !$db->connected) {
+               return false;
        }
 
-       /**
-        *
-        * This will happen occasionally trying to store the
-        * session data after abnormal program termination
-        *
-        */
-       logger('dba: no database: ' . print_r($args,true));
-       return false;
-}
+       $sql = $db->clean_query($sql);
+       $sql = $db->any_value_fallback($sql);
 
-/**
- *
- * Raw db query, no arguments
- *
- */
-function dbq($sql) {
-       global $db;
+       $stmt = @vsprintf($sql, $args);
 
-       if ($db && $db->connected) {
-               $ret = $db->q($sql);
-       } else {
-               $ret = false;
+       $ret = dba::p($stmt);
+
+       if (is_bool($ret)) {
+               return $ret;
        }
-       return $ret;
-}
 
-// Caller is responsible for ensuring that any integer arguments to
-// dbesc_array are actually integers and not malformed strings containing
-// SQL injection vectors. All integer array elements should be specifically
-// cast to int to avoid trouble.
-function dbesc_array_cb(&$item, $key) {
-       if (is_string($item))
-               $item = dbesc($item);
-}
+       $columns = dba::columnCount($ret);
+
+       $data = dba::inArray($ret);
 
-function dbesc_array(&$arr) {
-       if (is_array($arr) && count($arr)) {
-               array_walk($arr,'dbesc_array_cb');
+       if ((count($data) == 0) && ($columns == 0)) {
+               return true;
        }
+
+       return $data;
 }
 
 function dba_timer() {
index a2599fc392f49f9f8fb48c87e5e62df45458162f..4d615a2f14ba16dcd8929cb3da4fac6c8507de45 100644 (file)
@@ -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;
 }
index 4c8f828af62ce45a9c2c03948f6dc7b4b2ec71b9..9a821a9d9125fe6a7c414a9df0c4ce50a637279d 100644 (file)
@@ -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
index 1907c0d5ad74366101a5640dbef1fbcfcc54a098..63958f30bf416616548a769f584d9bcdd73e0252 100644 (file)
@@ -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'],
index 62328c01fdfea5667aa84e9001d3075767bd6270..10723fb418af41432d91f80d3a8da7f7f8320d03 100644 (file)
@@ -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');
index eb9f44c3eb050a3f9b1d403392c48680651b49f7..4b61641627bb64ab77665e72af8e9a491e608ca9 100644 (file)
@@ -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;
 }
 
index 6800663b5c838a4b831a3e4ba71bd8cfbbec3d1a..d6b1601110e9bb58f06cbd853e140d5f41e257d6 100644 (file)
@@ -60,22 +60,14 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){
 
                $handles = $recip_handle . ';' . $sender_handle;
 
-               $r = q("insert into conv (uid,guid,creator,created,updated,subject,recips) values(%d, '%s', '%s', '%s', '%s', '%s', '%s') ",
-                       intval(local_user()),
-                       dbesc($conv_guid),
-                       dbesc($sender_handle),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
-                       dbesc($subject),
-                       dbesc($handles)
-               );
+               $fields = array('uid' => local_user(), 'guid' => $conv_guid, 'creator' => $sender_handle,
+                               'created' => datetime_convert(), 'updated' => datetime_convert(),
+                               'subject' => $subject, 'recips' => $handles);
+               $r = dba::insert('conv', $fields);
 
-               $r = q("select * from conv where guid = '%s' and uid = %d limit 1",
-                       dbesc($conv_guid),
-                       intval(local_user())
-               );
+               $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => local_user()), array('limit' => 1));
                if (dbm::is_result($r))
-                       $convid = $r[0]['id'];
+                       $convid = $r['id'];
        }
 
        if (! $convid) {
@@ -194,28 +186,18 @@ function send_wallmessage($recipient='', $body='', $subject='', $replyto=''){
 
        $handles = $recip_handle . ';' . $sender_handle;
 
-       $r = q("INSERT INTO `conv` (`uid`,`guid`,`creator`,`created`,`updated`,`subject`,`recips`) values(%d, '%s', '%s', '%s', '%s', '%s', '%s') ",
-               intval($recipient['uid']),
-               dbesc($conv_guid),
-               dbesc($sender_handle),
-               dbesc(datetime_convert()),
-               dbesc(datetime_convert()),
-               dbesc($subject),
-               dbesc($handles)
-       );
-
-       $r = q("SELECT * FROM `conv` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
-               dbesc($conv_guid),
-               intval($recipient['uid'])
-       );
-
+       $fields = array('uid' => $recipient['uid'], 'guid' => $conv_guid, 'creator' => $sender_handle,
+                       'created' => datetime_convert(), 'updated' => datetime_convert(),
+                       'subject' => $subject, 'recips' => $handles);
+       $r = dba::insert('conv', $fields);
 
-       if (! dbm::is_result($r)) {
+       $r = dba::select('conv', array('id'), array('guid' => $conv_guid, 'uid' => $recipient['uid']), array('limit' => 1));
+       if (!dbm::is_result($r)) {
                logger('send message: conversation not found.');
                return -4;
        }
 
-       $convid = $r[0]['id'];
+       $convid = $r['id'];
 
        $r = q("INSERT INTO `mail` ( `uid`, `guid`, `convid`, `from-name`, `from-photo`, `from-url`,
                `contact-id`, `title`, `body`, `seen`, `reply`, `replied`, `uri`, `parent-uri`, `created`, `unknown`)
index 809a48cd0260d73f9b8a3e45c1a64a3c8d673c98..19392b91731a8f8024c9b86aa950c086ce33430d 100644 (file)
@@ -7,6 +7,7 @@ use Friendica\App;
 use Friendica\Core\System;
 use Friendica\Core\Config;
 use Friendica\Network\Probe;
+use Friendica\Util\Lock;
 
 require_once 'include/Contact.php';
 require_once 'include/threads.php';
@@ -29,15 +30,15 @@ require_once 'include/cache.php';
  *
  */
 class ostatus {
-       const OSTATUS_DEFAULT_POLL_INTERVAL = 30; // given in minutes
-       const OSTATUS_DEFAULT_POLL_TIMEFRAME = 1440; // given in minutes
-       const OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS = 14400; // given in minutes
+
+       private static $itemlist;
+       private static $conv_list = array();
 
        /**
         * @brief Fetches author data
         *
         * @param object $xpath The xpath object
-        * @param object $context The xml context of the author detals
+        * @param object $context The xml context of the author details
         * @param array $importer user record of the importing user
         * @param array $contact Called by reference, will contain the fetched contact
         * @param bool $onlyfetch Only fetch the header without updating the contact entries
@@ -64,28 +65,34 @@ class ostatus {
 
                $author["contact-id"] = $contact["id"];
 
+               $found = false;
+
                if ($author["author-link"] != "") {
                        if ($aliaslink == "") {
                                $aliaslink = $author["author-link"];
                        }
 
-                       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'",
-                               intval($importer["uid"]), dbesc(normalise_link($author["author-link"])),
-                               dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET));
+                       $condition = array("`uid` = ? AND `nurl` IN (?, ?) AND `network` != ?", $importer["uid"],
+                                       normalise_link($author["author-link"]), normalise_link($aliaslink), NETWORK_STATUSNET);
+                       $r = dba::select('contact', array(), $condition, array('limit' => 1));
 
                        if (dbm::is_result($r)) {
-                               $contact = $r[0];
-                               $author["contact-id"] = $r[0]["id"];
-                               $author["author-link"] = $r[0]["url"];
+                               $found = true;
+                               $contact = $r;
+                               $author["contact-id"] = $r["id"];
+                               $author["author-link"] = $r["url"];
                        }
-               } elseif ($addr != "") {
-                       // Should not happen
-                       $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `uid` = ? AND `addr` = ? AND `network` != ?",
+               }
+
+               if (!$found && ($addr != "")) {
+                       $condition = array("`uid` = ? AND `addr` = ? AND `network` != ?",
                                        $importer["uid"], $addr, NETWORK_STATUSNET);
+                       $r = dba::select('contact', array(), $condition, array('limit' => 1));
 
-                       if (dbm::is_result($contact)) {
-                               $author["contact-id"] = $contact["id"];
-                               $author["author-link"] = $contact["url"];
+                       if (dbm::is_result($r)) {
+                               $contact = $r;
+                               $author["contact-id"] = $r["id"];
+                               $author["author-link"] = $r["url"];
                        }
                }
 
@@ -176,14 +183,16 @@ class ostatus {
                        $cid = get_contact($author["author-link"], 0);
 
                        if ($cid) {
+                               $fields = array('url', 'name', 'nick', 'alias', 'about', 'location');
+                               $old_contact = dba::select('contact', $fields, array('id' => $cid), array('limit' => 1));
+
                                // Update it with the current values
-                               q("UPDATE `contact` SET `url` = '%s', `name` = '%s', `nick` = '%s', `alias` = '%s',
-                                               `about` = '%s', `location` = '%s',
-                                               `success_update` = '%s', `last-update` = '%s'
-                                       WHERE `id` = %d",
-                                       dbesc($author["author-link"]), dbesc($contact["name"]), dbesc($contact["nick"]),
-                                       dbesc($contact["alias"]), dbesc($contact["about"]), dbesc($contact["location"]),
-                                       dbesc(datetime_convert()), dbesc(datetime_convert()), intval($cid));
+                               $fields = array('url' => $author["author-link"], 'name' => $contact["name"],
+                                               'nick' => $contact["nick"], 'alias' => $contact["alias"],
+                                               'about' => $contact["about"], 'location' => $contact["location"],
+                                               'success_update' => datetime_convert(), 'last-update' => datetime_convert());
+
+                               dba::update('contact', $fields, array('id' => $cid), $old_contact);
 
                                // Update the avatar
                                update_contact_avatar($author["author-avatar"], 0, $cid);
@@ -257,20 +266,36 @@ class ostatus {
         *
         * @param string $xml The XML
         * @param array $importer user record of the importing user
-        * @param $contact
-        * @param array $hub Called by reference, returns the fetched hub data
+        * @param array $contact
+        * @param string $hub Called by reference, returns the fetched hub data
+        */
+       public static function import($xml, $importer, &$contact, &$hub) {
+               self::process($xml, $importer, $contact, $hub);
+       }
+
+       /**
+        * @brief Internal feed processing
+        *
+        * @param string $xml The XML
+        * @param array $importer user record of the importing user
+        * @param array $contact
+        * @param string $hub Called by reference, returns the fetched hub data
+        * @param boolean $stored Is the post fresh imported or from the database?
+        * @param boolean $initialize Is it the leading post so that data has to be initialized?
+        *
+        * @return boolean Could the XML be processed?
         */
-       public static function import($xml,$importer,&$contact, &$hub) {
-               /// @todo this function is too long. It has to be split in many parts
+       private static function process($xml, $importer, &$contact, &$hub, $stored = false, $initialize = true) {
+               if ($initialize) {
+                       self::$itemlist = array();
+                       self::$conv_list = array();
+               }
 
                logger("Import OStatus message", LOGGER_DEBUG);
 
                if ($xml == "") {
-                       return;
+                       return false;
                }
-               //$tempfile = tempnam(get_temppath(), "import");
-               //file_put_contents($tempfile, $xml);
-
                $doc = new DOMDocument();
                @$doc->loadXML($xml);
 
@@ -284,7 +309,7 @@ class ostatus {
                $xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS);
                $xpath->registerNamespace('statusnet', NAMESPACE_STATUSNET);
 
-               $gub = "";
+               $hub = "";
                $hub_attributes = $xpath->query("/atom:feed/atom:link[@rel='hub']")->item(0)->attributes;
                if (is_object($hub_attributes)) {
                        foreach ($hub_attributes AS $hub_attribute) {
@@ -294,6 +319,7 @@ class ostatus {
                                }
                        }
                }
+
                $header = array();
                $header["uid"] = $importer["uid"];
                $header["network"] = NETWORK_OSTATUS;
@@ -302,20 +328,33 @@ class ostatus {
                $header["origin"] = 0;
                $header["gravity"] = GRAVITY_PARENT;
 
-               // it could either be a received post or a post we fetched by ourselves
-               // depending on that, the first node is different
                $first_child = $doc->firstChild->tagName;
 
                if ($first_child == "feed") {
                        $entries = $xpath->query('/atom:feed/atom:entry');
-                       $header["protocol"] = PROTOCOL_OSTATUS_FEED;
                } else {
                        $entries = $xpath->query('/atom:entry');
+               }
+
+               if ($entries->length == 1) {
+                       // We reformat the XML to make it better readable
+                       $doc2 = new DOMDocument();
+                       $doc2->loadXML($xml);
+                       $doc2->preserveWhiteSpace = false;
+                       $doc2->formatOutput = true;
+                       $xml2 = $doc2->saveXML();
+
                        $header["protocol"] = PROTOCOL_OSTATUS_SALMON;
+                       $header["source"] = $xml2;
+               } elseif (!$initialize) {
+                       return false;
                }
-               $conversation = "";
-               $conversationlist = array();
-               $item_id = 0;
+
+               // Fetch the first author
+               $authordata = $xpath->query('//author')->item(0);
+               $author = self::fetchauthor($xpath, $authordata, $importer, $contact, $stored);
+
+               $entry = $xpath->query('/atom:entry');
 
                // Reverse the order of the entries
                $entrylist = array();
@@ -323,64 +362,56 @@ class ostatus {
                foreach ($entries AS $entry) {
                        $entrylist[] = $entry;
                }
-               foreach (array_reverse($entrylist) AS $entry) {
-
-                       $mention = false;
 
+               foreach (array_reverse($entrylist) AS $entry) {
                        // fetch the author
-                       if ($first_child == "feed") {
-                               $author = self::fetchauthor($xpath, $doc->firstChild, $importer, $contact, false);
-                       } else {
-                               $author = self::fetchauthor($xpath, $entry, $importer, $contact, false);
+                       $authorelement = $xpath->query('/atom:entry/atom:author', $entry);
+                       if ($authorelement->length > 0) {
+                               $author = self::fetchauthor($xpath, $entry, $importer, $contact, $stored);
                        }
-                       $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $context)->item(0)->nodeValue;
+
+                       $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $entry)->item(0)->nodeValue;
                        if ($value != "") {
                                $nickname = $value;
                        } else {
                                $nickname = $author["author-name"];
                        }
+
                        $item = array_merge($header, $author);
 
-                       // Now get the item
                        $item["uri"] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue;
 
-                       $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
-                               intval($importer["uid"]), dbesc($item["uri"]));
-                       if (dbm::is_result($r)) {
-                               logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
-                               continue;
-                       }
-
-                       $item["body"] = add_page_info_to_body(html2bbcode($xpath->query('atom:content/text()', $entry)->item(0)->nodeValue));
-                       $item["object-type"] = $xpath->query('activity:object-type/text()', $entry)->item(0)->nodeValue;
                        $item["verb"] = $xpath->query('activity:verb/text()', $entry)->item(0)->nodeValue;
 
-                       // Mastodon Content Warning
-                       if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) {
-                               $clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue;
-
-                               $item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]';
+                       // Delete a message
+                       if (in_array($item["verb"], array('qvitter-delete-notice', ACTIVITY_DELETE, 'delete'))) {
+                               self::deleteNotice($item);
+                               continue;
                        }
 
-                       if (($item["object-type"] == ACTIVITY_OBJ_BOOKMARK) || ($item["object-type"] == ACTIVITY_OBJ_EVENT)) {
-                               $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue;
-                               $item["body"] = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue;
-                       } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) {
-                               $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue;
+                       if (in_array($item["verb"], array(NAMESPACE_OSTATUS."/unfavorite", ACTIVITY_UNFAVORITE))) {
+                               // Ignore "Unfavorite" message
+                               logger("Ignore unfavorite message ".print_r($item, true), LOGGER_DEBUG);
+                               continue;
                        }
-                       $item["source"] = $xml;
 
-                       /// @TODO
-                       /// Delete a message
-                       if ($item["verb"] == "qvitter-delete-notice" || $item["verb"] == ACTIVITY_DELETE) {
-                               // ignore "Delete" messages (by now)
-                               logger("Ignore delete message ".print_r($item, true));
+                       // Deletions come with the same uri, so we check for duplicates after processing deletions
+                       if (dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item["uri"]))) {
+                               logger('Post with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
                                continue;
+                       } else {
+                               logger('Processing post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
                        }
 
                        if ($item["verb"] == ACTIVITY_JOIN) {
                                // ignore "Join" messages
-                               logger("Ignore join message ".print_r($item, true));
+                               logger("Ignore join message ".print_r($item, true), LOGGER_DEBUG);
+                               continue;
+                       }
+
+                       if ($item["verb"] == "http://mastodon.social/schema/1.0/block") {
+                               // ignore mastodon "block" messages
+                               logger("Ignore block message ".print_r($item, true), LOGGER_DEBUG);
                                continue;
                        }
 
@@ -403,958 +434,661 @@ class ostatus {
                                $item["gravity"] = GRAVITY_LIKE;
                        }
 
-                       if ($item["verb"] == NAMESPACE_OSTATUS."/unfavorite") {
-                               // Ignore "Unfavorite" message
-                               logger("Ignore unfavorite message ".print_r($item, true));
-                               continue;
-                       }
-
                        // http://activitystrea.ms/schema/1.0/rsvp-yes
                        if (!in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_LIKE, ACTIVITY_SHARE))) {
-                               logger("Unhandled verb ".$item["verb"]." ".print_r($item, true));
-                       }
-                       $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
-                       $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue;
-                       $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
-                       $item['conversation-uri'] = $conversation;
-
-                       $conv = $xpath->query('ostatus:conversation', $entry);
-                       if (is_object($conv->item(0))) {
-                               foreach ($conv->item(0)->attributes AS $attributes) {
-                                       if ($attributes->name == "ref") {
-                                               $item['conversation-uri'] = $attributes->textContent;
-                                       }
-                                       if ($attributes->name == "href") {
-                                               $item['conversation-href'] = $attributes->textContent;
-                                       }
-                               }
+                               logger("Unhandled verb ".$item["verb"]." ".print_r($item, true), LOGGER_DEBUG);
                        }
 
-                       $related = "";
+                       self::processPost($xpath, $entry, $item, $importer);
 
-                       $inreplyto = $xpath->query('thr:in-reply-to', $entry);
-                       if (is_object($inreplyto->item(0))) {
-                               foreach ($inreplyto->item(0)->attributes AS $attributes) {
-                                       if ($attributes->name == "ref") {
-                                               $item["parent-uri"] = $attributes->textContent;
-                                       }
-                                       if ($attributes->name == "href") {
-                                               $related = $attributes->textContent;
+                       if ($initialize && (count(self::$itemlist) > 0)) {
+                               if (self::$itemlist[0]['uri'] == self::$itemlist[0]['parent-uri']) {
+                                       // We will import it everytime, when it is started by our contacts
+                                       $valid = !empty(self::$itemlist[0]['contact-id']);
+                                       if (!$valid) {
+                                               // If not, then it depends on this setting
+                                               $valid = !Config::get('system','ostatus_full_threads');
                                        }
-                               }
-                       }
-
-                       $georsspoint = $xpath->query('georss:point', $entry);
-                       if ($georsspoint) {
-                               $item["coord"] = $georsspoint->item(0)->nodeValue;
-                       }
-                       $categories = $xpath->query('atom:category', $entry);
-                       if ($categories) {
-                               foreach ($categories AS $category) {
-                                       foreach ($category->attributes AS $attributes) {
-                                               if ($attributes->name == "term") {
-                                                       $term = $attributes->textContent;
-                                                       if (strlen($item["tag"])) {
-                                                               $item["tag"] .= ',';
+                                       if ($valid) {
+                                               // Never post a thread when the only interaction by our contact was a like
+                                               $valid = false;
+                                               $verbs = array(ACTIVITY_POST, ACTIVITY_SHARE);
+                                               foreach (self::$itemlist AS $item) {
+                                                       if (!empty($item['contact-id']) && in_array($item['verb'], $verbs)) {
+                                                               $valid = true;
                                                        }
-                                                       $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
                                                }
                                        }
+                               } else {
+                                       // But we will only import complete threads
+                                       $valid = dba::exists('item', array('uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri']));
                                }
-                       }
-
-                       $self = "";
-                       $enclosure = "";
 
-                       $links = $xpath->query('atom:link', $entry);
-                       if ($links) {
-                               foreach ($links AS $link) {
-                                       $attribute = self::read_attributes($link);
-
-                                       if (($attribute['rel'] != "") && ($attribute['href'] != "")) {
-                                               switch ($attribute['rel']) {
-                                                       case "alternate":
-                                                               $item["plink"] = $attribute['href'];
-                                                               if (($item["object-type"] == ACTIVITY_OBJ_QUESTION) ||
-                                                                       ($item["object-type"] == ACTIVITY_OBJ_EVENT)) {
-                                                                       $item["body"] .= add_page_info($attribute['href']);
-                                                               }
-                                                               break;
-                                                       case "ostatus:conversation":
-                                                               $conversation = $attribute['href'];
-                                                               $item['conversation-href'] = $conversation;
-                                                               if (!isset($item['conversation-uri'])) {
-                                                                       $item['conversation-uri'] = $item['conversation-href'];
-                                                               }
-                                                               break;
-                                                       case "enclosure":
-                                                               $enclosure = $attribute['href'];
-                                                               if (strlen($item["attach"])) {
-                                                                       $item["attach"] .= ',';
-                                                               }
-                                                               if (!isset($attribute['length'])) {
-                                                                       $attribute['length'] = "0";
-                                                               }
-                                                               $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]';
-                                                               break;
-                                                       case "related":
-                                                               if ($item["object-type"] != ACTIVITY_OBJ_BOOKMARK) {
-                                                                       if (!isset($item["parent-uri"])) {
-                                                                               $item["parent-uri"] = $attribute['href'];
-                                                                       }
-                                                                       if ($related == "") {
-                                                                               $related = $attribute['href'];
-                                                                       }
-                                                               } else {
-                                                                       $item["body"] .= add_page_info($attribute['href']);
-                                                               }
-                                                               break;
-                                                       case "self":
-                                                               $self = $attribute['href'];
-                                                               break;
-                                                       case "mentioned":
-                                                               // Notification check
-                                                               if ($importer["nurl"] == normalise_link($attribute['href'])) {
-                                                                       $mention = true;
-                                                               }
-                                                               break;
+                               if ($valid) {
+                                       $default_contact = 0;
+                                       $key = count(self::$itemlist);
+                                       for ($key = count(self::$itemlist) - 1; $key >= 0; $key--) {
+                                               if (empty(self::$itemlist[$key]['contact-id'])) {
+                                                       self::$itemlist[$key]['contact-id'] = $default_contact;
+                                               } else {
+                                                       $default_contact = $item['contact-id'];
                                                }
                                        }
-                               }
-                       }
-
-                       $local_id = "";
-                       $repeat_of = "";
-
-                       $notice_info = $xpath->query('statusnet:notice_info', $entry);
-                       if ($notice_info && ($notice_info->length > 0)) {
-                               foreach ($notice_info->item(0)->attributes AS $attributes) {
-                                       if ($attributes->name == "source") {
-                                               $item["app"] = strip_tags($attributes->textContent);
-                                       }
-                                       if ($attributes->name == "local_id") {
-                                               $local_id = $attributes->textContent;
-                                       }
-                                       if ($attributes->name == "repeat_of") {
-                                               $repeat_of = $attributes->textContent;
+                                       foreach (self::$itemlist AS $item) {
+                                               $found = dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item["uri"]));
+                                               if ($found) {
+                                                       logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already exists.", LOGGER_DEBUG);
+                                               } else {
+                                                       // We are having duplicated entries. Hopefully this solves it.
+                                                       if (Lock::set('ostatus_process_item_store')) {
+                                                               $ret = item_store($item);
+                                                               Lock::remove('ostatus_process_item_store');
+                                                               logger("Item with uri ".$item["uri"]." for user ".$importer["uid"].' stored. Return value: '.$ret);
+                                                       } else {
+                                                               $ret = item_store($item);
+                                                               logger("We couldn't lock - but tried to store the item anyway. Return value is ".$ret);
+                                                       }
+                                               }
                                        }
                                }
+                               self::$itemlist = array();
                        }
+                       logger('Processing done for post with URI '.$item["uri"].' for user '.$importer["uid"].'.', LOGGER_DEBUG);
+               }
+               return true;
+       }
 
-                       // Is it a repeated post?
-                       if (($repeat_of != "") || ($item["verb"] == ACTIVITY_SHARE)) {
-                               $activityobjects = $xpath->query('activity:object', $entry)->item(0);
-
-                               if (is_object($activityobjects)) {
+       private static function deleteNotice($item) {
 
-                                       $orig_uri = $xpath->query("activity:object/atom:id", $activityobjects)->item(0)->nodeValue;
-                                       if (!isset($orig_uri)) {
-                                               $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue;
-                                       }
-                                       $orig_links = $xpath->query("activity:object/atom:link[@rel='alternate']", $activityobjects);
-                                       if ($orig_links && ($orig_links->length > 0)) {
-                                               foreach ($orig_links->item(0)->attributes AS $attributes) {
-                                                       if ($attributes->name == "href") {
-                                                               $orig_link = $attributes->textContent;
-                                                       }
-                                               }
-                                       }
-                                       if (!isset($orig_link)) {
-                                               $orig_link = $xpath->query("atom:link[@rel='alternate']", $activityobjects)->item(0)->nodeValue;
-                                       }
-                                       if (!isset($orig_link)) {
-                                               $orig_link =  self::convert_href($orig_uri);
-                                       }
-                                       $orig_body = $xpath->query('activity:object/atom:content/text()', $activityobjects)->item(0)->nodeValue;
-                                       if (!isset($orig_body)) {
-                                               $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue;
-                                       }
-                                       $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue;
-                                       $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue;
+               $condition = array('uid' => $item['uid'], 'author-link' => $item['author-link'], 'uri' => $item['uri']);
+               $deleted = dba::select('item', array('id', 'parent-uri'), $condition, array('limit' => 1));
+               if (!dbm::is_result($deleted)) {
+                       logger('Item from '.$item['author-link'].' with uri '.$item['uri'].' for user '.$item['uid']." wasn't found. We don't delete it. ");
+                       return;
+               }
 
-                                       $orig_contact = $contact;
-                                       $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false);
+               // Currently we don't have a central deletion function that we could use in this case. The function "item_drop" doesn't work for that case
+               dba::update('item', array('deleted' => true, 'title' => '', 'body' => '',
+                                       'edited' => datetime_convert(), 'changed' => datetime_convert()),
+                               array('id' => $deleted["id"]));
 
-                                       $item["author-name"] = $orig_author["author-name"];
-                                       $item["author-link"] = $orig_author["author-link"];
-                                       $item["author-avatar"] = $orig_author["author-avatar"];
+               delete_thread($deleted["id"], $deleted["parent-uri"]);
 
-                                       $item["body"] = add_page_info_to_body(html2bbcode($orig_body));
-                                       $item["created"] = $orig_created;
-                                       $item["edited"] = $orig_edited;
+               logger('Deleted item with uri '.$item['uri'].' for user '.$item['uid']);
+       }
 
-                                       $item["uri"] = $orig_uri;
+       /**
+        * @brief Processes the XML for a post
+        *
+        * @param object $xpath The xpath object
+        * @param object $entry The xml entry that is processed
+        * @param array $item The item array
+        * @param array $importer user record of the importing user
+        */
+       private static function processPost($xpath, $entry, &$item, $importer) {
+               $item["body"] = html2bbcode($xpath->query('atom:content/text()', $entry)->item(0)->nodeValue);
+               $item["object-type"] = $xpath->query('activity:object-type/text()', $entry)->item(0)->nodeValue;
+               if (($item["object-type"] == ACTIVITY_OBJ_BOOKMARK) || ($item["object-type"] == ACTIVITY_OBJ_EVENT)) {
+                       $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue;
+                       $item["body"] = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue;
+               } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) {
+                       $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue;
+               }
+
+               $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
+               $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue;
+               $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+               $item['conversation-uri'] = $conversation;
+
+               $conv = $xpath->query('ostatus:conversation', $entry);
+               if (is_object($conv->item(0))) {
+                       foreach ($conv->item(0)->attributes AS $attributes) {
+                               if ($attributes->name == "ref") {
+                                       $item['conversation-uri'] = $attributes->textContent;
+                               }
+                               if ($attributes->name == "href") {
+                                       $item['conversation-href'] = $attributes->textContent;
+                               }
+                       }
+               }
 
-                                       if (!isset($item["plink"])) {
-                                               $item["plink"] = $orig_link;
-                                       }
+               $related = "";
 
-                                       $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue;
+               $inreplyto = $xpath->query('thr:in-reply-to', $entry);
+               if (is_object($inreplyto->item(0))) {
+                       foreach ($inreplyto->item(0)->attributes AS $attributes) {
+                               if ($attributes->name == "ref") {
+                                       $item["parent-uri"] = $attributes->textContent;
+                               }
+                               if ($attributes->name == "href") {
+                                       $related = $attributes->textContent;
+                               }
+                       }
+               }
 
-                                       $item["object-type"] = $xpath->query('activity:object/activity:object-type/text()', $activityobjects)->item(0)->nodeValue;
-                                       if (!isset($item["object-type"])) {
-                                               $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue;
-                                       }
+               $georsspoint = $xpath->query('georss:point', $entry);
+               if (!empty($georsspoint) && ($georsspoint->length > 0)) {
+                       $item["coord"] = $georsspoint->item(0)->nodeValue;
+               }
 
-                                       $enclosures = $xpath->query("atom:link[@rel='alternate']", $activityobjects);
-                                       if ($enclosures) {
-                                               foreach ($enclosures AS $link) {
-                                                       $attribute = self::read_attributes($link);
-                                                       if ($href != "") {
-                                                               $enclosure = $attribute['href'];
-                                                               if (strlen($item["attach"])) {
-                                                                       $item["attach"] .= ',';
-                                                               }
-                                                               if (!isset($attribute['length'])) {
-                                                                       $attribute['length'] = "0";
-                                                               }
-                                                               $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]';
-                                                       }
+               $categories = $xpath->query('atom:category', $entry);
+               if ($categories) {
+                       foreach ($categories AS $category) {
+                               foreach ($category->attributes AS $attributes) {
+                                       if ($attributes->name == "term") {
+                                               $term = $attributes->textContent;
+                                               if (strlen($item["tag"])) {
+                                                       $item["tag"] .= ',';
                                                }
+                                               $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
                                        }
                                }
                        }
+               }
 
-                       //if ($enclosure != "")
-                       //      $item["body"] .= add_page_info($enclosure);
-
-                       if (isset($item["parent-uri"])) {
-                               $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
-                                       intval($importer["uid"]), dbesc($item["parent-uri"]));
-
-                               // Only fetch missing stuff if it is a comment or reshare.
-                               if (in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_SHARE)) &&
-                                       !dbm::is_result($r) && ($related != "")) {
-                                       $reply_path = str_replace("/notice/", "/api/statuses/show/", $related).".atom";
+               $self = '';
+               $add_body = '';
 
-                                       if ($reply_path != $related) {
-                                               logger("Fetching related items for user ".$importer["uid"]." from ".$reply_path, LOGGER_DEBUG);
-                                               $reply_xml = fetch_url($reply_path);
+               $links = $xpath->query('atom:link', $entry);
+               if ($links) {
+                       $link_data = self::processLinks($links, $item);
+                       $self = $link_data['self'];
+                       $add_body = $link_data['add_body'];
+               }
 
-                                               $reply_contact = $contact;
-                                               self::import($reply_xml,$importer,$reply_contact, $reply_hub);
+               $repeat_of = "";
 
-                                               // After the import try to fetch the parent item again
-                                               $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
-                                                       intval($importer["uid"]), dbesc($item["parent-uri"]));
-                                       }
+               $notice_info = $xpath->query('statusnet:notice_info', $entry);
+               if ($notice_info && ($notice_info->length > 0)) {
+                       foreach ($notice_info->item(0)->attributes AS $attributes) {
+                               if ($attributes->name == "source") {
+                                       $item["app"] = strip_tags($attributes->textContent);
                                }
-                               if (dbm::is_result($r)) {
-                                       $item["type"] = 'remote-comment';
-                                       $item["gravity"] = GRAVITY_COMMENT;
+                               if ($attributes->name == "repeat_of") {
+                                       $repeat_of = $attributes->textContent;
                                }
-                       } else {
-                               $item["parent-uri"] = $item["uri"];
                        }
-                       $item_id = self::completion($conversation, $importer["uid"], $item, $self);
-
-                       if (!$item_id) {
-                               // Store the conversation data. This is normally done in "item_store"
-                               // but since something went wrong, we want to be sure to save the data.
-                               store_conversation($item);
-                               logger("Error storing item", LOGGER_DEBUG);
-                               continue;
+               }
+               // Is it a repeated post?
+               if (($repeat_of != "") || ($item["verb"] == ACTIVITY_SHARE)) {
+                       $link_data = self::processRepeatedItem($xpath, $entry, $item, $importer);
+                       if (!empty($link_data['add_body'])) {
+                               $add_body .= $link_data['add_body'];
                        }
-
-                       logger("Item was stored with id ".$item_id, LOGGER_DEBUG);
                }
-       }
-
-       /**
-        * @brief Create an url out of an uri
-        *
-        * @param string $href URI in the format "parameter1:parameter1:..."
-        *
-        * @return string URL in the format http(s)://....
-        */
-       public static function convert_href($href) {
-               $elements = explode(":",$href);
 
-               if ((count($elements) <= 2) || ($elements[0] != "tag"))
-                       return $href;
+               $item["body"] .= $add_body;
 
-               $server = explode(",", $elements[1]);
-               $conversation = explode("=", $elements[2]);
-
-               if ((count($elements) == 4) && ($elements[2] == "post"))
-                       return "http://".$server[0]."/notice/".$elements[3];
-
-               if ((count($conversation) != 2) || ($conversation[1] =="")) {
-                       return $href;
-               }
-               if ($elements[3] == "objectType=thread") {
-                       return "http://".$server[0]."/conversation/".$conversation[1];
-               } else {
-                       return "http://".$server[0]."/notice/".$conversation[1];
+               // Only add additional data when there is no picture in the post
+               if (!strstr($item["body"],'[/img]')) {
+                       $item["body"] = add_page_info_to_body($item["body"]);
                }
-               return $href;
-       }
 
-       /**
-        * @brief Checks if there are entries in conversations that aren't present on our side
-        *
-        * @param bool $mentions Fetch conversations where we are mentioned
-        * @param bool $override Override the interval setting
-        */
-       public static function check_conversations($mentions = false, $override = false) {
-               $last = get_config('system','ostatus_last_poll');
+               // Mastodon Content Warning
+               if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) {
+                       $clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue;
 
-               $poll_interval = intval(get_config('system','ostatus_poll_interval'));
-               if (!$poll_interval) {
-                       $poll_interval = self::OSTATUS_DEFAULT_POLL_INTERVAL;
+                       $item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]';
                }
 
-               // Don't poll if the interval is set negative
-               if (($poll_interval < 0) && !$override) {
-                       return;
+               if (($self != '') && empty($item['protocol'])) {
+                       self::fetchSelf($self, $item);
                }
 
-               if (!$mentions) {
-                       $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
-                       if (!$poll_timeframe) {
-                               $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME;
-                       }
-               } else {
-                       $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
-                       if (!$poll_timeframe) {
-                               $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
-                       }
+               if (!empty($item["conversation-href"])) {
+                       self::fetchConversation($item['conversation-href'], $item['conversation-uri']);
                }
 
-
-               if ($last && !$override) {
-                       $next = $last + ($poll_interval * 60);
-                       if ($next > time()) {
-                               logger('poll interval not reached');
-                               return;
+               if (isset($item["parent-uri"]) && ($related != '')) {
+                       if (!dba::exists('item', array('uid' => $importer["uid"], 'uri' => $item['parent-uri']))) {
+                               self::fetchRelated($related, $item["parent-uri"], $importer);
+                       } else {
+                               logger('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', LOGGER_DEBUG);
                        }
-               }
-
-               logger('cron_start');
-
-               $start = date("Y-m-d H:i:s", time() - ($poll_timeframe * 60));
 
-               if ($mentions) {
-                       $conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term`
-                                               STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid`
-                                               WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention`
-                                               GROUP BY `term`.`url`, `term`.`uid`, `term`.`oid`, `term`.`term` ORDER BY `term`.`term` DESC", dbesc($start));
+                       $item["type"] = 'remote-comment';
+                       $item["gravity"] = GRAVITY_COMMENT;
                } else {
-                       $conversations = q("SELECT `oid`, `url`, `uid` FROM `term`
-                                               WHERE `type` = 7 AND `term` > '%s'
-                                               GROUP BY `url`, `uid`, `oid`, `term` ORDER BY `term` DESC", dbesc($start));
+                       $item["parent-uri"] = $item["uri"];
                }
 
-               foreach ($conversations AS $conversation) {
-                       self::completion($conversation['url'], $conversation['uid']);
+               if (($item['author-link'] != '') && !empty($item['protocol'])) {
+                       $item = store_conversation($item);
                }
 
-               logger('cron_end');
-
-               set_config('system','ostatus_last_poll', time());
+               self::$itemlist[] = $item;
        }
 
        /**
-        * @brief Updates the gcontact table with actor data from the conversation
+        * @brief Fetch the conversation for posts
         *
-        * @param object $actor The actor object that contains the contact data
+        * @param string $conversation The link to the conversation
+        * @param string $conversation_uri The conversation in "uri" format
         */
-       private static function conv_fetch_actor($actor) {
-
-               // We set the generation to "3" since the data here is not as reliable as the data we get on other occasions
-               $contact = array("network" => NETWORK_OSTATUS, "generation" => 3);
-
-               if (isset($actor->url))
-                       $contact["url"] = $actor->url;
+       private static function fetchConversation($conversation, $conversation_uri) {
 
-               if (isset($actor->displayName))
-                       $contact["name"] = $actor->displayName;
-
-               if (isset($actor->portablecontacts_net->displayName))
-                       $contact["name"] = $actor->portablecontacts_net->displayName;
-
-               if (isset($actor->portablecontacts_net->preferredUsername))
-                       $contact["nick"] = $actor->portablecontacts_net->preferredUsername;
+               // Ensure that we only store a conversation once in a process
+               if (isset(self::$conv_list[$conversation])) {
+                       return;
+               }
 
-               if (isset($actor->id))
-                       $contact["alias"] = $actor->id;
+               self::$conv_list[$conversation] = true;
 
-               if (isset($actor->summary))
-                       $contact["about"] = $actor->summary;
+               $conversation_data = z_fetch_url($conversation, false, $redirects, array('accept_content' => 'application/atom+xml'));
 
-               if (isset($actor->portablecontacts_net->note))
-                       $contact["about"] = $actor->portablecontacts_net->note;
+               if (!$conversation_data['success']) {
+                       return;
+               }
 
-               if (isset($actor->portablecontacts_net->addresses->formatted))
-                       $contact["location"] = $actor->portablecontacts_net->addresses->formatted;
+               $xml = '';
 
+               if (stristr($conversation_data['header'], 'Content-Type: application/atom+xml')) {
+                       $xml = $conversation_data['body'];
+               }
 
-               if (isset($actor->image->url))
-                       $contact["photo"] = $actor->image->url;
+               if ($xml == '') {
+                       $doc = new DOMDocument();
+                       if (!@$doc->loadHTML($conversation_data['body'])) {
+                               return;
+                       }
+                       $xpath = new DomXPath($doc);
 
-               if (isset($actor->image->width))
-                       $avatarwidth = $actor->image->width;
+                       $links = $xpath->query('//link');
+                       if ($links) {
+                               foreach ($links AS $link) {
+                                       $attribute = ostatus::read_attributes($link);
+                                       if (($attribute['rel'] == 'alternate') && ($attribute['type'] == 'application/atom+xml')) {
+                                               $file = $attribute['href'];
+                                       }
+                               }
+                               if ($file != '') {
+                                       $conversation_atom = z_fetch_url($attribute['href']);
 
-               if (is_array($actor->status_net->avatarLinks))
-                       foreach ($actor->status_net->avatarLinks AS $avatar) {
-                               if ($avatarsize < $avatar->width) {
-                                       $contact["photo"] = $avatar->url;
-                                       $avatarsize = $avatar->width;
+                                       if ($conversation_atom['success']) {
+                                               $xml = $conversation_atom['body'];
+                                       }
                                }
                        }
+               }
+
+               if ($xml == '') {
+                       return;
+               }
 
-               $contact["hide"] = false; // OStatus contacts are never hidden
-               update_gcontact($contact);
+               self::storeConversation($xml, $conversation, $conversation_uri);
        }
 
        /**
-        * @brief Fetches the conversation url for a given item link or conversation id
-        *
-        * @param string $self The link to the posting
-        * @param string $conversation_id The conversation id
+        * @brief Store a feed in several conversation entries
         *
-        * @return string The conversation url
+        * @param string $xml The feed
         */
-       private static function fetch_conversation($self, $conversation_id = "") {
-
-               if ($conversation_id != "") {
-                       $elements = explode(":", $conversation_id);
-
-                       if ((count($elements) <= 2) || ($elements[0] != "tag"))
-                               return $conversation_id;
-               }
-
-               if ($self == "")
-                       return "";
-
-               $json = str_replace(".atom", ".json", $self);
+       private static function storeConversation($xml, $conversation = '', $conversation_uri = '') {
+               $doc = new DOMDocument();
+               @$doc->loadXML($xml);
 
-               $raw = fetch_url($json);
-               if ($raw == "")
-                       return "";
+               $xpath = new DomXPath($doc);
+               $xpath->registerNamespace('atom', NAMESPACE_ATOM1);
+               $xpath->registerNamespace('thr', NAMESPACE_THREAD);
+               $xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS);
 
-               $data = json_decode($raw);
-               if (!is_object($data))
-                       return "";
+               $entries = $xpath->query('/atom:feed/atom:entry');
 
-               $conversation_id = $data->statusnet_conversation_id;
+               // Now store the entries
+               foreach ($entries AS $entry) {
+                       $doc2 = new DOMDocument();
+                       $doc2->preserveWhiteSpace = false;
+                       $doc2->formatOutput = true;
 
-               $pos = strpos($self, "/api/statuses/show/");
-               $base_url = substr($self, 0, $pos);
+                       $conv_data = array();
 
-               return $base_url."/conversation/".$conversation_id;
-       }
+                       $conv_data['protocol'] = PROTOCOL_SPLITTED_CONV;
+                       $conv_data['network'] = NETWORK_OSTATUS;
+                       $conv_data['uri'] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue;
 
-       /**
-        * @brief Fetches a shared object from a given conversation object
-        *
-        * Sometimes GNU Social seems to fail when returning shared objects.
-        * Then they don't contains all needed data.
-        * We then try to find this object in the conversation
-        *
-        * @param string $id Message id
-        * @param object $conversation Conversation object
-        *
-        * @return object The shared object
-        */
-       private static function shared_object($id, $conversation) {
-               if (!is_array($conversation->items)) {
-                       return false;
-               }
-               foreach ($conversation->items AS $single_conv) {
-                       if ($single_conv->id == $id) {
-                               return $single_conv;
+                       $inreplyto = $xpath->query('thr:in-reply-to', $entry);
+                       if (is_object($inreplyto->item(0))) {
+                               foreach ($inreplyto->item(0)->attributes AS $attributes) {
+                                       if ($attributes->name == "ref") {
+                                               $conv_data['reply-to-uri'] = $attributes->textContent;
+                                       }
+                               }
                        }
-               }
-               return false;
-       }
-
-       /**
-        * @brief Fetches actor details of a given actor and user id
-        *
-        * @param string $actor The actor url
-        * @param int $uid The user id
-        * @param int $contact_id The default contact-id
-        *
-        * @return array Array with actor details
-        */
-       private static function get_actor_details($actor, $uid, $contact_id) {
 
-               $details = array();
+                       $conv = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+                       $conv_data['conversation-uri'] = $conv;
 
-               $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
-                                       $uid, normalise_link($actor), NETWORK_STATUSNET);
+                       $conv = $xpath->query('ostatus:conversation', $entry);
+                       if (is_object($conv->item(0))) {
+                               foreach ($conv->item(0)->attributes AS $attributes) {
+                                       if ($attributes->name == "ref") {
+                                               $conv_data['conversation-uri'] = $attributes->textContent;
+                                       }
+                                       if ($attributes->name == "href") {
+                                               $conv_data['conversation-href'] = $attributes->textContent;
+                                       }
+                               }
+                       }
 
-               if (!$contact)
-                       $contact = q("SELECT `id`, `rel`, `network` FROM `contact` WHERE `uid` = %d AND `alias` IN ('%s', '%s') AND `network` != '%s'",
-                                       $uid, $actor, normalise_link($actor), NETWORK_STATUSNET);
+                       if ($conversation != '') {
+                               $conv_data['conversation-uri'] = $conversation;
+                       }
 
-               if ($contact) {
-                       logger("Found contact for url ".$actor, LOGGER_DEBUG);
-                       $details["contact_id"] = $contact[0]["id"];
-                       $details["network"] = $contact[0]["network"];
+                       if ($conversation_uri != '') {
+                               $conv_data['conversation-uri'] = $conversation_uri;
+                       }
 
-                       $details["not_following"] = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND));
-               } else {
-                       logger("No contact found for user ".$uid." and url ".$actor, LOGGER_DEBUG);
+                       $entry = $doc2->importNode($entry, true);
 
-                       // Adding a global contact
-                       /// @TODO Use this data for the post
-                       $details["global_contact_id"] = get_contact($actor, 0);
+                       $doc2->appendChild($entry);
 
-                       logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG);
+                       $conv_data['source'] = $doc2->saveXML();
 
-                       $details["contact_id"] = $contact_id;
-                       $details["network"] = NETWORK_OSTATUS;
+                       $condition = array('item-uri' => $conv_data['uri'],'protocol' => PROTOCOL_OSTATUS_FEED);
+                       if (dba::exists('conversation', $condition)) {
+                               logger('Delete deprecated entry for URI '.$conv_data['uri'], LOGGER_DEBUG);
+                               dba::delete('conversation', array('item-uri' => $conv_data['uri']));
+                       }
 
-                       $details["not_following"] = true;
+                       logger('Store conversation data for uri '.$conv_data['uri'], LOGGER_DEBUG);
+                       store_conversation($conv_data);
                }
-
-               return $details;
        }
 
        /**
-        * @brief Stores an item and completes the thread
+        * @brief Fetch the own post so that it can be stored later
+        * @param array $item The item array
         *
-        * @param string $conversation_url The URI of the conversation
-        * @param integer $uid The user id
-        * @param array $item Data of the item that is to be posted
+        * We want to store the original data for later processing.
+        * This function is meant for cases where we process a feed with multiple entries.
+        * In that case we need to fetch the single posts here.
         *
-        * @return integer The item id of the posted item array
+        * @param string $self The link to the self item
         */
-       private static function completion($conversation_url, $uid, $item = array(), $self = "") {
-
-               /// @todo This function is totally ugly and has to be rewritten totally
-
-               // Import all threads or only threads that were started by our followers?
-               $all_threads = !get_config('system','ostatus_full_threads');
-
-               $item_stored = -1;
-
-               $conversation_url = self::fetch_conversation($self, $conversation_url);
-
-               // If the thread shouldn't be completed then store the item and go away
-               // Don't do a completion on liked content
-               if (((intval(get_config('system','ostatus_poll_interval')) == -2) && (count($item) > 0)) ||
-                       ($item["verb"] == ACTIVITY_LIKE) || ($conversation_url == "")) {
-                       $item_stored = item_store($item, $all_threads);
-                       return $item_stored;
-               }
-
-               // Get the parent
-               $parents = q("SELECT `item`.`id`, `item`.`parent`, `item`.`uri`, `item`.`contact-id`, `item`.`type`,
-                               `item`.`verb`, `item`.`visible` FROM `term`
-                               STRAIGHT_JOIN `item` AS `thritem` ON `thritem`.`parent` = `term`.`oid`
-                               STRAIGHT_JOIN `item` ON `item`.`parent` = `thritem`.`parent`
-                               WHERE `term`.`uid` = %d AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`url` = '%s'",
-                               intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url));
-               if ($parents) {
-                       $parent = $parents[0];
-               } elseif (count($item) > 0) {
-                       $parent = $item;
-                       $parent["type"] = "remote";
-                       $parent["verb"] = ACTIVITY_POST;
-                       $parent["visible"] = 1;
-               } else {
-                       // Preset the parent
-                       $r = q("SELECT `id` FROM `contact` WHERE `self` AND `uid`=%d", $uid);
-                       if (!dbm::is_result($r)) {
-                               return -2;
-                       }
-                       $parent = array();
-                       $parent["id"] = 0;
-                       $parent["parent"] = 0;
-                       $parent["uri"] = "";
-                       $parent["contact-id"] = $r[0]["id"];
-                       $parent["type"] = "remote";
-                       $parent["verb"] = ACTIVITY_POST;
-                       $parent["visible"] = 1;
-               }
-
-               $conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as";
-               $pageno = 1;
-               $items = array();
-
-               logger('fetching conversation url '.$conv.' (Self: '.$self.') for user '.$uid);
-
-               do {
-                       $conv_arr = z_fetch_url($conv."?page=".$pageno);
-
-                       // If it is a non-ssl site and there is an error, then try ssl or vice versa
-                       if (!$conv_arr["success"] && (substr($conv, 0, 7) == "http://")) {
-                               $conv = str_replace("http://", "https://", $conv);
-                               $conv_as = fetch_url($conv."?page=".$pageno);
-                       } elseif (!$conv_arr["success"] && (substr($conv, 0, 8) == "https://")) {
-                               $conv = str_replace("https://", "http://", $conv);
-                               $conv_as = fetch_url($conv."?page=".$pageno);
-                       } else {
-                               $conv_as = $conv_arr["body"];
-                       }
-                       $conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as);
-                       $conv_as = json_decode($conv_as);
-
-                       $no_of_items = sizeof($items);
-
-                       if (@is_array($conv_as->items))
-                               foreach ($conv_as->items AS $single_item)
-                                       $items[$single_item->id] = $single_item;
-
-                       if ($no_of_items == sizeof($items))
-                               break;
-
-                       $pageno++;
-
-               } while (true);
-
-               logger('fetching conversation done. Found '.count($items).' items');
-
-               if (!sizeof($items)) {
-                       if (count($item) > 0) {
-                               $item_stored = item_store($item, $all_threads);
-
-                               if ($item_stored) {
-                                       logger("Conversation ".$conversation_url." couldn't be fetched. Item uri ".$item["uri"]." stored: ".$item_stored, LOGGER_DEBUG);
-                                       self::store_conversation($item_id, $conversation_url);
-                               }
-
-                               return $item_stored;
-                       } else {
-                               return -3;
-                       }
+       private static function fetchSelf($self, &$item) {
+               $condition = array('`item-uri` = ? AND `protocol` IN (?, ?)', $self, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON);
+               if (dba::exists('conversation', $condition)) {
+                       logger('Conversation '.$item['uri'].' is already stored.', LOGGER_DEBUG);
+                       return;
                }
 
-               $items = array_reverse($items);
-
-               $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self`", intval($uid));
-               $importer = $r[0];
+               $self_data = z_fetch_url($self);
 
-               $new_parent = true;
-
-               foreach ($items as $single_conv) {
-
-                       // Update the gcontact table
-                       self::conv_fetch_actor($single_conv->actor);
-
-                       // Test - remove before flight
-                       //$tempfile = tempnam(get_temppath(), "conversation");
-                       //file_put_contents($tempfile, json_encode($single_conv));
-
-                       $mention = false;
-
-                       if (isset($single_conv->object->id))
-                               $single_conv->id = $single_conv->object->id;
-
-                       $plink = self::convert_href($single_conv->id);
-                       if (isset($single_conv->object->url))
-                               $plink = self::convert_href($single_conv->object->url);
-
-                       if (@!$single_conv->id)
-                               continue;
-
-                       logger("Got id ".$single_conv->id, LOGGER_DEBUG);
-
-                       if ($first_id == "") {
-                               $first_id = $single_conv->id;
-
-                               // The first post of the conversation isn't our first post. There are three options:
-                               // 1. Our conversation hasn't the "real" thread starter
-                               // 2. This first post is a post inside our thread
-                               // 3. This first post is a post inside another thread
-                               if (($first_id != $parent["uri"]) && ($parent["uri"] != "")) {
+               if (!$self_data['success']) {
+                       return;
+               }
 
-                                       $new_parent = true;
+               // We reformat the XML to make it better readable
+               $doc = new DOMDocument();
+               $doc->loadXML($self_data['body']);
+               $doc->preserveWhiteSpace = false;
+               $doc->formatOutput = true;
+               $xml = $doc->saveXML();
 
-                                       $new_parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN
-                                                               (SELECT `parent` FROM `item`
-                                                                       WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s')) LIMIT 1",
-                                               intval($uid), dbesc($first_id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
-                                       if ($new_parents) {
-                                               if ($new_parents[0]["parent"] == $parent["parent"]) {
-                                                       // Option 2: This post is already present inside our thread - but not as thread starter
-                                                       logger("Option 2: uri present in our thread: ".$first_id, LOGGER_DEBUG);
-                                                       $first_id = $parent["uri"];
-                                               } else {
-                                                       // Option 3: Not so good. We have mixed parents. We have to see how to clean this up.
-                                                       // For now just take the new parent.
-                                                       $parent = $new_parents[0];
-                                                       $first_id = $parent["uri"];
-                                                       logger("Option 3: mixed parents for uri ".$first_id, LOGGER_DEBUG);
-                                               }
-                                       } else {
-                                               // Option 1: We hadn't got the real thread starter
-                                               // We have to clean up our existing messages.
-                                               $parent["id"] = 0;
-                                               $parent["uri"] = $first_id;
-                                               logger("Option 1: we have a new parent: ".$first_id, LOGGER_DEBUG);
-                                       }
-                               } elseif ($parent["uri"] == "") {
-                                       $parent["id"] = 0;
-                                       $parent["uri"] = $first_id;
-                               }
-                       }
+               $item["protocol"] = PROTOCOL_OSTATUS_SALMON;
+               $item["source"] = $xml;
 
-                       $parent_uri = $parent["uri"];
+               logger('Conversation '.$item['uri'].' is now fetched.', LOGGER_DEBUG);
+       }
 
-                       // "context" only seems to exist on older servers
-                       if (isset($single_conv->context->inReplyTo->id)) {
-                               $parent_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
-                                                       intval($uid), dbesc($single_conv->context->inReplyTo->id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
-                               if ($parent_exists)
-                                       $parent_uri = $single_conv->context->inReplyTo->id;
+       /**
+        * @brief Fetch related posts and processes them
+        *
+        * @param string $related The link to the related item
+        * @param string $related_uri The related item in "uri" format
+        * @param array $importer user record of the importing user
+        */
+       private static function fetchRelated($related, $related_uri, $importer) {
+               $condition = array('`item-uri` = ? AND `protocol` IN (?, ?)', $related_uri, PROTOCOL_DFRN, PROTOCOL_OSTATUS_SALMON);
+               $conversation = dba::select('conversation', array('source', 'protocol'), $condition,  array('limit' => 1));
+               if (dbm::is_result($conversation)) {
+                       $stored = true;
+                       $xml = $conversation['source'];
+                       if (self::process($xml, $importer, $contact, $hub, $stored, false)) {
+                               logger('Got valid cached XML for URI '.$related_uri, LOGGER_DEBUG);
+                               return;
                        }
-
-                       // This is the current way
-                       if (isset($single_conv->object->inReplyTo->id)) {
-                               $parent_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
-                                                       intval($uid), dbesc($single_conv->object->inReplyTo->id), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
-                               if ($parent_exists)
-                                       $parent_uri = $single_conv->object->inReplyTo->id;
+                       if ($conversation['protocol'] == PROTOCOL_OSTATUS_SALMON) {
+                               logger('Delete invalid cached XML for URI '.$related_uri, LOGGER_DEBUG);
+                               dba::delete('conversation', array('item-uri' => $related_uri));
                        }
+               }
 
-                       $message_exists = q("SELECT `id`, `parent`, `uri` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
-                                                       intval($uid), dbesc($single_conv->id),
-                                                       dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
-                       if ($message_exists) {
-                               logger("Message ".$single_conv->id." already existed on the system", LOGGER_DEBUG);
-
-                               if ($parent["id"] != 0) {
-                                       $existing_message = $message_exists[0];
+               $stored = false;
+               $related_data = z_fetch_url($related, false, $redirects, array('accept_content' => 'application/atom+xml'));
 
-                                       // We improved the way we fetch OStatus messages, this shouldn't happen very often now
-                                       /// @TODO We have to change the shadow copies as well. This way here is really ugly.
-                                       if ($existing_message["parent"] != $parent["id"]) {
-                                               logger('updating id '.$existing_message["id"].' with parent '.$existing_message["parent"].' to parent '.$parent["id"].' uri '.$parent["uri"].' thread '.$parent_uri, LOGGER_DEBUG);
+               if (!$related_data['success']) {
+                       return;
+               }
 
-                                               // Update the parent id of the selected item
-                                               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `id` = %d",
-                                                       intval($parent["id"]), dbesc($parent["uri"]), intval($existing_message["id"]));
+               $xml = '';
 
-                                               // Update the parent uri in the thread - but only if it points to itself
-                                               $r = q("UPDATE `item` SET `thr-parent` = '%s' WHERE `id` = %d AND `uri` = `thr-parent`",
-                                                       dbesc($parent_uri), intval($existing_message["id"]));
+               if (stristr($related_data['header'], 'Content-Type: application/atom+xml')) {
+                       logger('Directly fetched XML for URI '.$related_uri, LOGGER_DEBUG);
+                       $xml = $related_data['body'];
+               }
 
-                                               // try to change all items of the same parent
-                                               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d",
-                                                       intval($parent["id"]), dbesc($parent["uri"]), intval($existing_message["parent"]));
+               if ($xml == '') {
+                       $doc = new DOMDocument();
+                       if (!@$doc->loadHTML($related_data['body'])) {
+                               return;
+                       }
+                       $xpath = new DomXPath($doc);
 
-                                               // Update the parent uri in the thread - but only if it points to itself
-                                               $r = q("UPDATE `item` SET `thr-parent` = '%s' WHERE (`parent` = %d) AND (`uri` = `thr-parent`)",
-                                                       dbesc($parent["uri"]), intval($existing_message["parent"]));
+                       $atom_file = '';
 
-                                               // Now delete the thread
-                                               delete_thread($existing_message["parent"]);
+                       $links = $xpath->query('//link');
+                       if ($links) {
+                               foreach ($links AS $link) {
+                                       $attribute = self::read_attributes($link);
+                                       if (($attribute['rel'] == 'alternate') && ($attribute['type'] == 'application/atom+xml')) {
+                                               $atom_file = $attribute['href'];
                                        }
                                }
+                               if ($atom_file != '') {
+                                       $related_atom = z_fetch_url($atom_file);
 
-                               // The item we are having on the system is the one that we wanted to store via the item array
-                               if (isset($item["uri"]) && ($item["uri"] == $existing_message["uri"])) {
-                                       $item = array();
-                                       $item_stored = 0;
+                                       if ($related_atom['success']) {
+                                               logger('Fetched XML for URI '.$related_uri, LOGGER_DEBUG);
+                                               $xml = $related_atom['body'];
+                                       }
                                }
-
-                               continue;
                        }
+               }
 
-                       if (is_array($single_conv->to))
-                               foreach ($single_conv->to AS $to)
-                                       if ($importer["nurl"] == normalise_link($to->id))
-                                               $mention = true;
-
-                       $actor = $single_conv->actor->id;
-                       if (isset($single_conv->actor->url))
-                               $actor = $single_conv->actor->url;
-
-                       $details = self::get_actor_details($actor, $uid, $parent["contact-id"]);
+               // Workaround for older GNU Social servers
+               if (($xml == '') && strstr($related, '/notice/')) {
+                       $related_atom = z_fetch_url(str_replace('/notice/', '/api/statuses/show/', $related).'.atom');
 
-                       // Do we only want to import threads that were started by our contacts?
-                       if ($details["not_following"] && $new_parent && get_config('system','ostatus_full_threads')) {
-                               logger("Don't import uri ".$first_id." because user ".$uid." doesn't follow the person ".$actor, LOGGER_DEBUG);
-                               continue;
+                       if ($related_atom['success']) {
+                               logger('GNU Social workaround to fetch XML for URI '.$related_uri, LOGGER_DEBUG);
+                               $xml = $related_atom['body'];
                        }
+               }
 
-                       /// @TODO One statment is okay (until if () )
-                       $arr = array();
-                       $arr["network"] = $details["network"];
-                       $arr["uri"] = $single_conv->id;
-                       $arr["plink"] = $plink;
-                       $arr["uid"] = $uid;
-                       $arr["contact-id"] = $details["contact_id"];
-                       $arr["parent-uri"] = $parent_uri;
-                       $arr["created"] = $single_conv->published;
-                       $arr["edited"] = $single_conv->published;
-                       $arr["owner-name"] = $single_conv->actor->displayName;
-                       if ($arr["owner-name"] == '')
-                               $arr["owner-name"] = $single_conv->actor->contact->displayName;
-                       if ($arr["owner-name"] == '')
-                               $arr["owner-name"] = $single_conv->actor->portablecontacts_net->displayName;
-
-                       $arr["owner-link"] = $actor;
-                       $arr["owner-avatar"] = Probe::fixAvatar($single_conv->actor->image->url, $arr["owner-link"]);
-
-                       $arr["author-name"] = $arr["owner-name"];
-                       $arr["author-link"] = $arr["owner-link"];
-                       $arr["author-avatar"] = $arr["owner-avatar"];
-                       $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->content));
-
-                       if (isset($single_conv->status_net->conversation)) {
-                               $arr['conversation-uri'] = $single_conv->status_net->conversation;
-                       }
+               // Even more worse workaround for GNU Social ;-)
+               if ($xml == '') {
+                       $related_guess = ostatus::convert_href($related_uri);
+                       $related_atom = z_fetch_url(str_replace('/notice/', '/api/statuses/show/', $related_guess).'.atom');
 
-                       if (isset($single_conv->status_net->notice_info->source)) {
-                               $arr["app"] = strip_tags($single_conv->status_net->notice_info->source);
-                       } elseif (isset($single_conv->statusnet->notice_info->source)) {
-                               $arr["app"] = strip_tags($single_conv->statusnet->notice_info->source);
-                       } elseif (isset($single_conv->statusnet_notice_info->source)) {
-                               $arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
-                       } elseif (isset($single_conv->provider->displayName)) {
-                               $arr["app"] = $single_conv->provider->displayName;
-                       } else {
-                               $arr["app"] = "OStatus";
+                       if ($related_atom['success']) {
+                               logger('GNU Social workaround 2 to fetch XML for URI '.$related_uri, LOGGER_DEBUG);
+                               $xml = $related_atom['body'];
                        }
+               }
 
-                       $arr["source"] = json_encode($single_conv);
-                       $arr["protocol"] = PROTOCOL_GS_CONVERSATION;
+               // Finally we take the data that we fetched from "ostatus:conversation"
+               if ($xml == '') {
+                       $condition = array('item-uri' => $related_uri, 'protocol' => PROTOCOL_SPLITTED_CONV);
+                       $conversation = dba::select('conversation', array('source'), $condition,  array('limit' => 1));
+                       if (dbm::is_result($conversation)) {
+                               $stored = true;
+                               logger('Got cached XML from conversation for URI '.$related_uri, LOGGER_DEBUG);
+                               $xml = $conversation['source'];
+                       }
+               }
 
-                       $arr["verb"] = $parent["verb"];
-                       $arr["visible"] = $parent["visible"];
-                       $arr["location"] = $single_conv->location->displayName;
-                       $arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon);
+               if ($xml != '') {
+                       self::process($xml, $importer, $contact, $hub, $stored, false);
+               } else {
+                       logger("XML couldn't be fetched for URI: ".$related_uri." - href: ".$related, LOGGER_DEBUG);
+               }
+               return;
+       }
 
-                       // Is it a reshared item?
-                       if (isset($single_conv->verb) && ($single_conv->verb == "share") && isset($single_conv->object)) {
-                               if (is_array($single_conv->object))
-                                       $single_conv->object = $single_conv->object[0];
+       /**
+        * @brief Processes the XML for a repeated post
+        *
+        * @param object $xpath The xpath object
+        * @param object $entry The xml entry that is processed
+        * @param array $item The item array
+        * @param array $importer user record of the importing user
+        *
+        * @return array with data from links
+        */
+       private static function processRepeatedItem($xpath, $entry, &$item, $importer) {
+               $activityobjects = $xpath->query('activity:object', $entry)->item(0);
 
-                               // Sometimes GNU Social doesn't returns a complete object
-                               if (!isset($single_conv->object->actor->url)) {
-                                       $object = self::shared_object($single_conv->object->id, $conversation);
-                                       if (is_object($object)) {
-                                               $single_conv->object = $object;
-                                       }
-                               }
+               if (!is_object($activityobjects)) {
+                       return array();
+               }
 
-                               if (isset($single_conv->object->actor->url)) {
-                                       logger("Found reshared item ".$single_conv->object->id);
+               $link_data = array();
 
-                                       // $single_conv->object->context->conversation;
+               $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue;
 
-                                       if (isset($single_conv->object->object->id)) {
-                                               $arr["uri"] = $single_conv->object->object->id;
-                                       } else {
-                                               $arr["uri"] = $single_conv->object->id;
-                                       }
-                                       if (isset($single_conv->object->object->url)) {
-                                               $plink = self::convert_href($single_conv->object->object->url);
-                                       } else {
-                                               $plink = self::convert_href($single_conv->object->url);
-                                       }
-                                       if (isset($single_conv->object->object->content)) {
-                                               $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->object->content));
-                                       } else {
-                                               $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->content));
-                                       }
-                                       $arr["plink"] = $plink;
+               $links = $xpath->query("atom:link", $activityobjects);
+               if ($links) {
+                       $link_data = self::processLinks($links, $item);
+               }
 
-                                       $arr["created"] = $single_conv->object->published;
-                                       $arr["edited"] = $single_conv->object->published;
+               $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue;
+               $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue;
+               $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue;
 
-                                       $arr["author-name"] = $single_conv->object->actor->displayName;
-                                       if ($arr["owner-name"] == '') {
-                                               $arr["author-name"] = $single_conv->object->actor->contact->displayName;
-                                       }
-                                       $arr["author-link"] = $single_conv->object->actor->url;
-                                       $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]);
+               $orig_contact = $contact;
+               $orig_author = self::fetchauthor($xpath, $activityobjects, $importer, $orig_contact, false);
 
-                                       $arr["app"] = $single_conv->object->provider->displayName."#";
-                                       //$arr["verb"] = $single_conv->object->verb;
+               $item["author-name"] = $orig_author["author-name"];
+               $item["author-link"] = $orig_author["author-link"];
+               $item["author-avatar"] = $orig_author["author-avatar"];
 
-                                       $arr["location"] = $single_conv->object->location->displayName;
-                                       $arr["coord"] = trim($single_conv->object->location->lat." ".$single_conv->object->location->lon);
-                               }
-                       }
+               $item["body"] = html2bbcode($orig_body);
+               $item["created"] = $orig_created;
+               $item["edited"] = $orig_edited;
 
-                       if ($arr["location"] == "")
-                               unset($arr["location"]);
+               $item["uri"] = $orig_uri;
 
-                       if ($arr["coord"] == "")
-                               unset($arr["coord"]);
+               $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue;
 
-                       // Copy fields from given item array
-                       if (isset($item["uri"]) && (($item["uri"] == $arr["uri"]) || ($item["uri"] ==  $single_conv->id))) {
-                               logger('Use stored item array for item with URI '.$item["uri"], LOGGER_DEBUG);
-                               $newitem = item_store($item);
-                               $item = array();
-                               $item_stored = $newitem;
-                       } else {
-                               $newitem = item_store($arr);
-                       }
+               $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue;
 
-                       if (!$newitem) {
-                               logger("Item wasn't stored ".print_r($arr, true), LOGGER_DEBUG);
-                               continue;
-                       }
-
-                       logger('Stored new item '.$plink.' for parent '.$arr["parent-uri"].' under id '.$newitem, LOGGER_DEBUG);
-
-                       // Add the conversation entry (but don't fetch the whole conversation)
-                       self::store_conversation($newitem, $conversation_url);
-
-                       // If the newly created item is the top item then change the parent settings of the thread
-                       // This shouldn't happen anymore. This is supposed to be absolote.
-                       if ($arr["uri"] == $first_id) {
-                               logger('setting new parent to id '.$newitem);
-                               $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
-                                       intval($uid), intval($newitem));
-                               if ($new_parents)
-                                       $parent = $new_parents[0];
+               $inreplyto = $xpath->query('thr:in-reply-to', $activityobjects);
+               if (is_object($inreplyto->item(0))) {
+                       foreach ($inreplyto->item(0)->attributes AS $attributes) {
+                               if ($attributes->name == "ref") {
+                                       $item["parent-uri"] = $attributes->textContent;
+                               }
                        }
                }
 
-               if (($item_stored < 0) && (count($item) > 0)) {
+               return $link_data;
+       }
 
-                       if (get_config('system','ostatus_full_threads')) {
-                               $details = self::get_actor_details($item["owner-link"], $uid, $item["contact-id"]);
-                               if ($details["not_following"]) {
-                                       logger("Don't import uri ".$item["uri"]." because user ".$uid." doesn't follow the person ".$item["owner-link"], LOGGER_DEBUG);
-                                       return false;
+       /**
+        * @brief Processes links in the XML
+        *
+        * @param object $links The xml data that contain links
+        * @param array $item The item array
+        *
+        * @return array with data from the links
+        */
+       private static function processLinks($links, &$item) {
+               $link_data = array('add_body' => '', 'self' => '');
+
+               foreach ($links AS $link) {
+                       $attribute = self::read_attributes($link);
+
+                       if (($attribute['rel'] != "") && ($attribute['href'] != "")) {
+                               switch ($attribute['rel']) {
+                                       case "alternate":
+                                               $item["plink"] = $attribute['href'];
+                                               if (($item["object-type"] == ACTIVITY_OBJ_QUESTION) ||
+                                                       ($item["object-type"] == ACTIVITY_OBJ_EVENT)) {
+                                                       $item["body"] .= add_page_info($attribute['href']);
+                                               }
+                                               break;
+                                       case "ostatus:conversation":
+                                               $link_data['conversation'] = $attribute['href'];
+                                               $item['conversation-href'] = $link_data['conversation'];
+                                               if (!isset($item['conversation-uri'])) {
+                                                       $item['conversation-uri'] = $item['conversation-href'];
+                                               }
+                                               break;
+                                       case "enclosure":
+                                               $filetype = strtolower(substr($attribute['type'], 0, strpos($attribute['type'],'/')));
+                                               if ($filetype == 'image') {
+                                                       $link_data['add_body'] .= "\n[img]".$attribute['href'].'[/img]';
+                                               } else {
+                                                       if (strlen($item["attach"])) {
+                                                               $item["attach"] .= ',';
+                                                       }
+                                                       if (!isset($attribute['length'])) {
+                                                               $attribute['length'] = "0";
+                                                       }
+                                                       $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]';
+                                               }
+                                               break;
+                                       case "related":
+                                               if ($item["object-type"] != ACTIVITY_OBJ_BOOKMARK) {
+                                                       if (!isset($item["parent-uri"])) {
+                                                               $item["parent-uri"] = $attribute['href'];
+                                                       }
+                                                       $link_data['related'] = $attribute['href'];
+                                               } else {
+                                                       $item["body"] .= add_page_info($attribute['href']);
+                                               }
+                                               break;
+                                       case "self":
+                                               if ($item["plink"] == '') {
+                                                       $item["plink"] = $attribute['href'];
+                                               }
+                                               $link_data['self'] = $attribute['href'];
+                                               break;
                                }
                        }
-
-                       $item_stored = item_store($item, $all_threads);
-                       if ($item_stored) {
-                               logger("Uri ".$item["uri"]." wasn't found in conversation ".$conversation_url, LOGGER_DEBUG);
-                               self::store_conversation($item_stored, $conversation_url);
-                       }
                }
-
-               return $item_stored;
+               return $link_data;
        }
 
-       /**
-        * @brief Stores conversation data into the database
+/**
+        * @brief Create an url out of an uri
         *
-        * @param integer $itemid The id of the item
-        * @param string $conversation_url The uri of the conversation
+        * @param string $href URI in the format "parameter1:parameter1:..."
+        *
+        * @return string URL in the format http(s)://....
         */
-       private static function store_conversation($itemid, $conversation_url) {
+       public static function convert_href($href) {
+               $elements = explode(":",$href);
 
-               $conversation_url = self::convert_href($conversation_url);
+               if ((count($elements) <= 2) || ($elements[0] != "tag"))
+                       return $href;
 
-               $messages = q("SELECT `uid`, `parent`, `created`, `received`, `guid` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
-               if (!$messages)
-                       return;
-               $message = $messages[0];
+               $server = explode(",", $elements[1]);
+               $conversation = explode("=", $elements[2]);
 
-               // Store conversation url if not done before
-               $conversation = q("SELECT `url` FROM `term` WHERE `uid` = %d AND `oid` = %d AND `otype` = %d AND `type` = %d",
-                       intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION));
+               if ((count($elements) == 4) && ($elements[2] == "post"))
+                       return "http://".$server[0]."/notice/".$elements[3];
 
-               if (!$conversation) {
-                       $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`, `created`, `received`, `guid`) VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s')",
-                               intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION),
-                               dbesc($message["created"]), dbesc($conversation_url), dbesc($message["created"]), dbesc($message["received"]), dbesc($message["guid"]));
-                       logger('Storing conversation url '.$conversation_url.' for id '.$itemid);
+               if ((count($conversation) != 2) || ($conversation[1] =="")) {
+                       return $href;
                }
+               if ($elements[3] == "objectType=thread") {
+                       return "http://".$server[0]."/conversation/".$conversation[1];
+               } else {
+                       return "http://".$server[0]."/notice/".$conversation[1];
+               }
+               return $href;
        }
 
        /**
index 6e0002bd472405b858fd7e3e16c75c409abcc295..49ba83fa3c77faefdb47625428abc107530d1137 100644 (file)
@@ -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),
index 9758ab9464c1c73775fb5650b414200348078757..d43257fc9f47c912d60e9cea303b7db33eb344b0 100644 (file)
@@ -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;
index 5194e7ef0e901472677693b2f0b0330df4f8573d..af871b28a1d8467b9ebb4f87ad1131f4cf424804 100644 (file)
@@ -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',
index 621085b0eee30db9637aef2c9c6db57231d786e0..f0a855d70c9d91412bca5c480af4a5a5b2055f18 100644 (file)
@@ -1158,8 +1158,9 @@ function poco_check_server($server_url, $network = "", $force = false) {
                                $network = NETWORK_OSTATUS;
                        }
                }
-               if (strstr($orig_version, 'Pleroma')) {
+               if (strstr($orig_version.$version, 'Pleroma')) {
                        $platform = 'Pleroma';
+                       $version = trim(str_replace('Pleroma', '', $version));
                }
        }
 
@@ -2238,22 +2239,22 @@ function update_gcontact($contact) {
 
        if ($update) {
                logger("Update gcontact for ".$contact["url"], LOGGER_DEBUG);
-
-               q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s',
-                                       `birthday` = '%s', `gender` = '%s', `keywords` = '%s', `hide` = %d, `nsfw` = %d,
-                                       `contact-type` = %d, `alias` = '%s', `notify` = '%s', `url` = '%s',
-                                       `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s',
-                                       `server_url` = '%s', `connect` = '%s'
-                               WHERE `nurl` = '%s' AND (`generation` = 0 OR `generation` >= %d)",
-                       dbesc($contact["photo"]), dbesc($contact["name"]), dbesc($contact["nick"]),
-                       dbesc($contact["addr"]), dbesc($contact["network"]), dbesc($contact["birthday"]),
-                       dbesc($contact["gender"]), dbesc($contact["keywords"]), intval($contact["hide"]),
-                       intval($contact["nsfw"]), intval($contact["contact-type"]), dbesc($contact["alias"]),
-                       dbesc($contact["notify"]), dbesc($contact["url"]), dbesc($contact["location"]),
-                       dbesc($contact["about"]), intval($contact["generation"]), dbesc(dbm::date($contact["updated"])),
-                       dbesc($contact["server_url"]), dbesc($contact["connect"]),
-                       dbesc(normalise_link($contact["url"])), intval($contact["generation"]));
-
+               $condition = array('`nurl` = ? AND (`generation` = 0 OR `generation` >= ?)',
+                               normalise_link($contact["url"]), $contact["generation"]);
+               $contact["updated"] = dbm::date($contact["updated"]);
+
+               $updated = array('photo' => $contact['photo'], 'name' => $contact['name'],
+                               'nick' => $contact['nick'], 'addr' => $contact['addr'],
+                               'network' => $contact['network'], 'birthday' => $contact['birthday'],
+                               'gender' => $contact['gender'], 'keywords' => $contact['keywords'],
+                               'hide' => $contact['hide'], 'nsfw' => $contact['nsfw'],
+                               'contact-type' => $contact['contact-type'], 'alias' => $contact['alias'],
+                               'notify' => $contact['notify'], 'url' => $contact['url'],
+                               'location' => $contact['location'], 'about' => $contact['about'],
+                               'generation' => $contact['generation'], 'updated' => $contact['updated'],
+                               'server_url' => $contact['server_url'], 'connect' => $contact['connect']);
+
+               dba::update('gcontact', $updated, $condition, $fields);
 
                // Now update the contact entry with the user id "0" as well.
                // This is used for the shadow copies of public items.
@@ -2261,20 +2262,25 @@ function update_gcontact($contact) {
                        dbesc(normalise_link($contact["url"])));
 
                if (dbm::is_result($r)) {
-                       logger("Update shadow contact ".$r[0]["id"], LOGGER_DEBUG);
+                       logger("Update public contact ".$r[0]["id"], LOGGER_DEBUG);
 
                        update_contact_avatar($contact["photo"], 0, $r[0]["id"]);
 
-                       q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s',
-                                               `network` = '%s', `bd` = '%s', `gender` = '%s',
-                                               `keywords` = '%s', `alias` = '%s', `contact-type` = %d,
-                                               `url` = '%s', `location` = '%s', `about` = '%s'
-                                       WHERE `id` = %d",
-                               dbesc($contact["name"]), dbesc($contact["nick"]), dbesc($contact["addr"]),
-                               dbesc($contact["network"]), dbesc($contact["birthday"]), dbesc($contact["gender"]),
-                               dbesc($contact["keywords"]), dbesc($contact["alias"]), intval($contact["contact-type"]),
-                               dbesc($contact["url"]), dbesc($contact["location"]), dbesc($contact["about"]),
-                               intval($r[0]["id"]));
+                       $fields = array('name', 'nick', 'addr',
+                                       'network', 'bd', 'gender',
+                                       'keywords', 'alias', 'contact-type',
+                                       'url', 'location', 'about');
+                       $old_contact = dba::select('contact', $fields, array('id' => $r[0]["id"]), array('limit' => 1));
+
+                       // Update it with the current values
+                       $fields = array('name' => $contact['name'], 'nick' => $contact['nick'],
+                                       'addr' => $contact['addr'], 'network' => $contact['network'],
+                                       'bd' => $contact['birthday'], 'gender' => $contact['gender'],
+                                       'keywords' => $contact['keywords'], 'alias' => $contact['alias'],
+                                       'contact-type' => $contact['contact-type'], 'url' => $contact['url'],
+                                       'location' => $contact['location'], 'about' => $contact['about']);
+
+                       dba::update('contact', $fields, array('id' => $r[0]["id"]), $old_contact);
                }
        }
 
index 9b7b47a773247416a2c8917367d055641faba4c1..66d4f17ea66ac5b20ef9c486f207d23dfa65e68a 100644 (file)
@@ -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 = '<img class="attached" src="'.$the_url.'" alt="" title="'.$title.'">';
-                                               $s .= '<br><a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attached" target="_blank" >' . $icon . '</a>';
-                                       } else {
-                                               $icon = '<div class="attachtype icon s22 type-' . $filetype . ' subtype-' . $filesubtype . '"></div>';
-                                               $as .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="_blank" >' . $icon . '</a>';
-                                       }
-
+                                       $icon = '<div class="attachtype icon s22 type-' . $filetype . ' subtype-' . $filesubtype . '"></div>';
+                                       $as .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="_blank" >' . $icon . '</a>';
                                }
                        }
                }
index 4cb881569389a7093f72d6d2b42502dec9a5fbd3..8e58a04b3104896842eba2907cc636fe00886b7a 100644 (file)
@@ -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);
                }
        }
 }
index 4ed5e57f3d39464f2a8bf7ddcb5cfdade6f95430..a05bd831a8e7d81aa19344d3853846acc363ee36 100644 (file)
@@ -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,
index 5b4cea756b3d68964ad67a0c2f30157c4883b93a..d3d2e42ae6a7c8e088be411c896e644764d8c816 100644 (file)
--- 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.
index c5043f2252e22cb767f61359b93f16513c64b7a2..ee95a180a5b30aa7049fdee99aee9a536ad24fec 100644 (file)
@@ -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`
index bbbd088cd1bfe5c46521626e30f1ca077419c2f3..2539360552d20ad487e7127819f2b3c478edf010 100644 (file)
@@ -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') ),
index 4d35d46c70ca8bd5c9feaeb1e8a68c4c0f58b5a4..4bccf1142ae0884f61285207e960e3ce9c5cf804 100644 (file)
@@ -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');
index 9c64c8c8838b3c7674f28389e130ecec81cbcd52..0e99b26c32cd9d81a7650f1d8a4c14445eb9a85c 100644 (file)
@@ -352,8 +352,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                                dbesc(NETWORK_DFRN),
                                intval($contact_id)
                        );
-               }
-               else {
+               } else {
 
                        // $network !== NETWORK_DFRN
 
@@ -361,18 +360,16 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                        $notify = (($contact['notify']) ? $contact['notify'] : '');
                        $poll   = (($contact['poll']) ? $contact['poll'] : '');
 
-                       if((! $contact['notify']) || (! $contact['poll'])) {
-                               $arr = Probe::lrdd($contact['url']);
-                               if(count($arr)) {
-                                       foreach($arr as $link) {
-                                               if($link['@attributes']['rel'] === 'salmon')
-                                                       $notify = $link['@attributes']['href'];
-                                               if($link['@attributes']['rel'] === NAMESPACE_FEED)
-                                                       $poll = $link['@attributes']['href'];
-                                       }
-                               }
+                       $arr = Probe::uri($contact['url']);
+                       if (empty($contact['notify'])) {
+                               $notify = $arr['notify'];
+                       }
+                       if (empty($contact['poll'])) {
+                               $poll = $arr['poll'];
                        }
 
+                       $addr = $arr['addr'];
+
                        $new_relation = $contact['rel'];
                        $writable = $contact['writable'];
 
@@ -394,6 +391,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
 
                        $r = q("UPDATE `contact` SET `name-date` = '%s',
                                `uri-date` = '%s',
+                               `addr` = '%s',
                                `notify` = '%s',
                                `poll` = '%s',
                                `blocked` = 0,
@@ -406,6 +404,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                        ",
                                dbesc(datetime_convert()),
                                dbesc(datetime_convert()),
+                               dbesc($addr),
                                dbesc($notify),
                                dbesc($poll),
                                dbesc($network),
index cb0b1f4cd115d18af37ba4bbd55faf796d02132c..9e004ab5d8b41c1e2a28bb630aa95618f7585998 100644 (file)
@@ -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)) {
index 56f7aa6442696389094a14e0798668e8c1083a40..37d3a123a88d5ba3f0f172bc238475e217515ac1 100644 (file)
@@ -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();
+}
index 4f2b45e3bf4afef4c3c21a4c685b1816b15886b5..a76a0f188fd52ac67661e83a6958b2a2a85812ce 100644 (file)
@@ -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
-}
index a2e69ffb090d2422a7f5253ee731735ddd53d961..e7e1a33bd02b22d72c90d621cd2d50656638f127 100644 (file)
@@ -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,
index 796d35b866ebff154204a9104971615393ffbd5e..a78500174ea1d31f07981f81887e0fa2d84d0bb2 100644 (file)
@@ -2,13 +2,38 @@
 
 use Friendica\App;
 use Friendica\Core\System;
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
+
+require_once 'include/conversation.php';
+require_once 'include/group.php';
+require_once 'include/contact_widgets.php';
+require_once 'include/items.php';
+require_once 'include/ForumManager.php';
+require_once 'include/acl_selectors.php';
 
 function network_init(App $a) {
-       if (! local_user()) {
-               notice( t('Permission denied.') . EOL);
+       if (!local_user()) {
+               notice(t('Permission denied.') . EOL);
                return;
        }
 
+       $search = (x($_GET, 'search') ? escape_tags($_GET['search']) : '');
+
+       if (($search != '') && !empty($_GET['submit'])) {
+               goaway('search?search='.urlencode($search));
+       }
+
+       if (x($_GET, 'save')) {
+               $exists = dba::exists('search', array('uid' => local_user(), 'term' => $search));
+               if (!$exists) {
+                       dba::insert('search', array('uid' => local_user(), 'term' => $search));
+               }
+       }
+       if (x($_GET, 'remove')) {
+               dba::delete('search', array('uid' => local_user(), 'term' => $search));
+       }
+
        $is_a_date_query = false;
        if (x($_GET, 'cid') && intval($_GET['cid']) != 0) {
                $cid = $_GET['cid'];
@@ -30,13 +55,13 @@ function network_init(App $a) {
        array_shift($query_array);
 
        // fetch last used network view and redirect if needed
-       if (! $is_a_date_query) {
+       if (!$is_a_date_query) {
                $sel_tabs = network_query_get_sel_tab($a);
                $sel_nets = network_query_get_sel_net();
                $sel_groups = network_query_get_sel_group($a);
-               $last_sel_tabs = get_pconfig(local_user(), 'network.view','tab.selected');
-               $last_sel_nets = get_pconfig(local_user(), 'network.view', 'net.selected');
-               $last_sel_groups = get_pconfig(local_user(), 'network.view', 'group.selected');
+               $last_sel_tabs = PConfig::get(local_user(), 'network.view','tab.selected');
+               $last_sel_nets = PConfig::get(local_user(), 'network.view', 'net.selected');
+               $last_sel_groups = PConfig::get(local_user(), 'network.view', 'group.selected');
 
                $remember_tab = ($sel_tabs[0] === 'active' && is_array($last_sel_tabs) && $last_sel_tabs[0] !== 'active');
                $remember_net = ($sel_nets === false && $last_sel_nets && $last_sel_nets !== 'all');
@@ -47,7 +72,7 @@ function network_init(App $a) {
 
                if ($remember_group) {
                        $net_baseurl .= '/' . $last_sel_groups; // Note that the group number must come before the "/new" tab selection
-               } elseif($sel_groups !== false) {
+               } elseif ($sel_groups !== false) {
                        $net_baseurl .= '/' . $sel_groups;
                }
 
@@ -95,12 +120,11 @@ function network_init(App $a) {
 
                if ($remember_net) {
                        $net_args['nets'] = $last_sel_nets;
-               }
-               else if($sel_nets!==false) {
+               } elseif ($sel_nets!==false) {
                        $net_args['nets'] = $sel_nets;
                }
 
-               if($remember_tab || $remember_net || $remember_group) {
+               if ($remember_tab || $remember_net || $remember_group) {
                        $net_args = array_merge($query_array, $net_args);
                        $net_queries = build_querystring($net_args);
 
@@ -117,57 +141,23 @@ function network_init(App $a) {
 
        $group_id = (($a->argc > 1 && is_numeric($a->argv[1])) ? intval($a->argv[1]) : 0);
 
-       set_pconfig(local_user(), 'network.view', 'group.selected', $group_id);
+       PConfig::set(local_user(), 'network.view', 'group.selected', $group_id);
 
-       require_once 'include/group.php';
-       require_once 'include/contact_widgets.php';
-       require_once 'include/items.php';
-       require_once 'include/ForumManager.php';
-
-       if (! x($a->page, 'aside')) {
+       if (!x($a->page, 'aside')) {
                $a->page['aside'] = '';
        }
 
-       $search = ((x($_GET, 'search')) ? escape_tags($_GET['search']) : '');
-
-       if (x($_GET, 'save')) {
-               $r = q("SELECT * FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1",
-                       intval(local_user()),
-                       dbesc($search)
-               );
-               if (! dbm::is_result($r)) {
-                       q("INSERT INTO `search` ( `uid`,`term` ) VALUES ( %d, '%s') ",
-                               intval(local_user()),
-                               dbesc($search)
-                       );
-               }
-       }
-       if (x($_GET, 'remove')) {
-               q("DELETE FROM `search` WHERE `uid` = %d AND `term` = '%s'",
-                       intval(local_user()),
-                       dbesc($search)
-               );
-       }
-
-       // search terms header
-       if (x($_GET, 'search')) {
-               $a->page['content'] .= replace_macros(get_markup_template("section_title.tpl"),array(
-                       '$title' => sprintf( t('Results for: %s'), $search)
-               ));
-       }
-
        $a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : '');
        $a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? ForumManager::widget(local_user(),$cid) : '');
        $a->page['aside'] .= posted_date_widget('network',local_user(),false);
        $a->page['aside'] .= networks_widget('network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
        $a->page['aside'] .= saved_searches($search);
        $a->page['aside'] .= fileas_widget('network',(x($_GET, 'file') ? $_GET['file'] : ''));
-
 }
 
 function saved_searches($search) {
 
-       if (! feature_enabled(local_user(),'savedsearch')) {
+       if (!feature_enabled(local_user(),'savedsearch')) {
                return '';
        }
 
@@ -186,25 +176,19 @@ function saved_searches($search) {
 
        $o = '';
 
-       $r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d",
-               intval(local_user())
-       );
-
+       $terms = dba::select('search', array('id', 'term'), array('uid' => local_user()));
        $saved = array();
 
-       if (dbm::is_result($r)) {
-               foreach ($r as $rr) {
-                       $saved[] = array(
-                               'id'          => $rr['id'],
-                               'term'        => $rr['term'],
-                               'encodedterm' => urlencode($rr['term']),
-                               'delete'      => t('Remove term'),
-                               'selected'    => ($search==$rr['term']),
-                       );
-               }
+       while ($rr = dba::fetch($terms)) {
+               $saved[] = array(
+                       'id'          => $rr['id'],
+                       'term'        => $rr['term'],
+                       'encodedterm' => urlencode($rr['term']),
+                       'delete'      => t('Remove term'),
+                       'selected'    => ($search==$rr['term']),
+               );
        }
 
-
        $tpl = get_markup_template("saved_searches_aside.tpl");
        $o = replace_macros($tpl, array(
                '$title'     => t('Saved Searches'),
@@ -214,7 +198,6 @@ function saved_searches($search) {
        ));
 
        return $o;
-
 }
 
 /**
@@ -230,7 +213,7 @@ function saved_searches($search) {
  *             '/network?f=&bmark=1',          => $bookmarked_active = 'active'
  *             '/network?f=&spam=1',           => $spam_active = 'active'
  *
- * @return Array ( $no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active );
+ * @return Array ($no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active);
  */
 function network_query_get_sel_tab(App $a) {
        $no_active='';
@@ -238,33 +221,28 @@ function network_query_get_sel_tab(App $a) {
        $new_active = '';
        $bookmarked_active = '';
        $all_active = '';
-       $search_active = '';
        $conv_active = '';
        $spam_active = '';
        $postord_active = '';
 
-       if(($a->argc > 1 && $a->argv[1] === 'new')
+       if (($a->argc > 1 && $a->argv[1] === 'new')
                || ($a->argc > 2 && $a->argv[2] === 'new')) {
                        $new_active = 'active';
        }
 
-       if(x($_GET,'search')) {
-               $search_active = 'active';
-       }
-
-       if(x($_GET,'star')) {
+       if (x($_GET,'star')) {
                $starred_active = 'active';
        }
 
-       if(x($_GET,'bmark')) {
+       if (x($_GET,'bmark')) {
                $bookmarked_active = 'active';
        }
 
-       if(x($_GET,'conv')) {
+       if (x($_GET,'conv')) {
                $conv_active = 'active';
        }
 
-       if(x($_GET,'spam')) {
+       if (x($_GET,'spam')) {
                $spam_active = 'active';
        }
 
@@ -274,7 +252,6 @@ function network_query_get_sel_tab(App $a) {
                && ($starred_active == '')
                && ($bookmarked_active == '')
                && ($conv_active == '')
-               && ($search_active == '')
                && ($spam_active == '')) {
                        $no_active = 'active';
        }
@@ -296,7 +273,7 @@ function network_query_get_sel_tab(App $a) {
 function network_query_get_sel_net() {
        $network = false;
 
-       if(x($_GET,'nets')) {
+       if (x($_GET,'nets')) {
                $network = $_GET['nets'];
        }
 
@@ -306,23 +283,214 @@ function network_query_get_sel_net() {
 function network_query_get_sel_group(App $a) {
        $group = false;
 
-       if($a->argc >= 2 && is_numeric($a->argv[1])) {
+       if ($a->argc >= 2 && is_numeric($a->argv[1])) {
                $group = $a->argv[1];
        }
 
        return $group;
 }
 
+/**
+ * @brief Sets the pager data and returns SQL
+ *
+ * @param App $a The global App
+ * @param integer $update Used for the automatic reloading
+ * @return string SQL with the appropriate LIMIT clause
+ */
+function networkPager($a, $update) {
+       if ($update) {
+               // only setup pagination on initial page view
+               return ' LIMIT 100';
 
-function network_content(App $a, $update = 0) {
+       }
+
+       //  check if we serve a mobile device and get the user settings
+       //  accordingly
+       if ($a->is_mobile) {
+               $itemspage_network = PConfig::get(local_user(),'system','itemspage_mobile_network');
+               $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20);
+       } else {
+               $itemspage_network = PConfig::get(local_user(),'system','itemspage_network');
+               $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
+       }
+
+       //  now that we have the user settings, see if the theme forces
+       //  a maximum item number which is lower then the user choice
+       if (($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network)) {
+               $itemspage_network = $a->force_max_items;
+       }
+
+       $a->set_pager_itemspage($itemspage_network);
+
+       return sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+}
 
-       require_once('include/conversation.php');
+/**
+ * @brief Sets items as seen
+ *
+ * @param array $condition The array with the SQL condition
+ */
+function networkSetSeen($condition) {
+       if (empty($condition)) {
+               return;
+       }
+
+       $unseen = dba::exists('item', $condition);
+
+       if ($unseen) {
+               $r = dba::update('item', array('unseen' => false), $condition);
+       }
+}
+
+/**
+ * @brief Create the conversation HTML
+ *
+ * @param App $a The global App
+ * @param array $items Items of the conversation
+ * @param string $mode Display mode for the conversation
+ * @param integer $update Used for the automatic reloading
+ * @return string HTML of the conversation
+ */
+function networkConversation($a, $items, $mode, $update) {
+       // Set this so that the conversation function can find out contact info for our wall-wall items
+       $a->page_contact = $a->contact;
 
-       if (! local_user()) {
+       $o .= conversation($a, $items, $mode, $update);
+
+       if (!$update) {
+               if (PConfig::get(local_user(), 'system', 'infinite_scroll')) {
+                       $o .= scroll_loader();
+               } else {
+                       $o .= alt_pager($a, count($items));
+               }
+       }
+
+       return $o;
+}
+
+function network_content(App $a, $update = 0) {
+       if (!local_user()) {
                $_SESSION['return_url'] = $a->query_string;
                return login(false);
        }
 
+       /// @TODO Is this really necessary? $a is already available to hooks
+       $arr = array('query' => $a->query_string);
+       call_hooks('network_content_init', $arr);
+
+       $nouveau = false;
+
+       if ($a->argc > 1) {
+               for ($x = 1; $x < $a->argc; $x ++) {
+                       if ($a->argv[$x] === 'new') {
+                               $nouveau = true;
+                       }
+               }
+       }
+
+       if (x($_GET,'file')) {
+               $nouveau = true;
+       }
+
+       if ($nouveau) {
+               $o = networkFlatView($a, $update);
+       } else {
+               $o = networkThreadedView($a, $update);
+       }
+
+       return $o;
+}
+
+/**
+ * @brief Get the network content in flat view
+ *
+ * @param App $a The global App
+ * @param integer $update Used for the automatic reloading
+ * @return string HTML of the network content in flat view
+ */
+function networkFlatView(App $a, $update = 0) {
+
+       // Rawmode is used for fetching new content at the end of the page
+       $rawmode = (isset($_GET["mode"]) AND ($_GET["mode"] == "raw"));
+
+       if (isset($_GET["last_id"])) {
+               $last_id = intval($_GET["last_id"]);
+       } else {
+               $last_id = 0;
+       }
+
+       $o = '';
+
+       $file = ((x($_GET,'file')) ? $_GET['file'] : '');
+
+       PConfig::set(local_user(), 'network.view', 'net.selected', 'all');
+
+       if (!$update && !$rawmode) {
+               $tabs = network_tabs($a);
+               $o .= $tabs;
+
+               nav_set_selected('network');
+
+               $x = array(
+                       'is_owner' => true,
+                       'allow_location' => $a->user['allow_location'],
+                       'default_location' => $a->user['default-location'],
+                       'nickname' => $a->user['nickname'],
+                       'lockstate'=> (((is_array($a->user) &&
+                                       ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) ||
+                                       (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
+                       'default_perms' => get_acl_permissions($a->user),
+                       'acl'   => populate_acl($a->user, true),
+                       'bang'  => '',
+                       'visitor' => 'block',
+                       'profile_uid' => local_user(),
+                       'acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
+                       'content' => '',
+               );
+
+               $o .= status_editor($a,$x);
+
+               if (!Config::get('theme','hide_eventlist')) {
+                       $o .= get_birthdays();
+                       $o .= get_events();
+               }
+       }
+
+       if (strlen($file)) {
+               $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
+                               dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user()));
+       } else {
+               $sql_post_table = " INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`";
+       }
+
+       $pager_sql = networkPager($a, $update);
+
+       // show all items unthreaded in reverse created date order
+       $items = q("SELECT %s FROM `item` $sql_post_table %s
+               WHERE %s AND `item`.`uid` = %d
+               ORDER BY `item`.`id` DESC $pager_sql ",
+               item_fieldlists(), item_joins(), item_condition(),
+               intval($_SESSION['uid'])
+       );
+
+       $condition = array('unseen' => true, 'uid' => local_user());
+       networkSetSeen($condition);
+
+       $mode = 'network-new';
+       $o .= networkConversation($a, $items, $mode, $update);
+
+       return $o;
+}
+
+/**
+ * @brief Get the network content in threaded view
+ *
+ * @param App $a The global App
+ * @param integer $update Used for the automatic reloading
+ * @return string HTML of the network content in flat view
+ */
+function networkThreadedView(App $a, $update = 0) {
+
        // Rawmode is used for fetching new content at the end of the page
        $rawmode = (isset($_GET["mode"]) AND ($_GET["mode"] == "raw"));
 
@@ -338,31 +506,20 @@ function network_content(App $a, $update = 0) {
                $last_id = 0;
        }
 
-       /// @TODO Is this really necessary? $a is already available to hooks
-       $arr = array('query' => $a->query_string);
-       call_hooks('network_content_init', $arr);
-
-
        $datequery = $datequery2 = '';
 
        $group = 0;
 
-       $nouveau = false;
-
-       if($a->argc > 1) {
-               for($x = 1; $x < $a->argc; $x ++) {
-                       if(is_a_date_arg($a->argv[$x])) {
-                               if($datequery)
+       if ($a->argc > 1) {
+               for ($x = 1; $x < $a->argc; $x ++) {
+                       if (is_a_date_arg($a->argv[$x])) {
+                               if ($datequery) {
                                        $datequery2 = escape_tags($a->argv[$x]);
-                               else {
+                               else {
                                        $datequery = escape_tags($a->argv[$x]);
                                        $_GET['order'] = 'post';
                                }
-                       }
-                       elseif($a->argv[$x] === 'new') {
-                               $nouveau = true;
-                       }
-                       elseif(intval($a->argv[$x])) {
+                       } elseif (intval($a->argv[$x])) {
                                $group = intval($a->argv[$x]);
                                $def_acl = array('allow_gid' => '<' . $group . '>');
                        }
@@ -371,52 +528,36 @@ function network_content(App $a, $update = 0) {
 
        $o = '';
 
-
-
-       $contact_id = $a->cid;
-
-       require_once('include/acl_selectors.php');
-
        $cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0);
        $star = ((x($_GET,'star')) ? intval($_GET['star']) : 0);
        $bmark = ((x($_GET,'bmark')) ? intval($_GET['bmark']) : 0);
        $order = ((x($_GET,'order')) ? notags($_GET['order']) : 'comment');
-       $liked = ((x($_GET,'liked')) ? intval($_GET['liked']) : 0);
        $conv = ((x($_GET,'conv')) ? intval($_GET['conv']) : 0);
-       $spam = ((x($_GET,'spam')) ? intval($_GET['spam']) : 0);
        $nets = ((x($_GET,'nets')) ? $_GET['nets'] : '');
-       $cmin = ((x($_GET,'cmin')) ? intval($_GET['cmin']) : 0);
-       $cmax = ((x($_GET,'cmax')) ? intval($_GET['cmax']) : 99);
-       $file = ((x($_GET,'file')) ? $_GET['file'] : '');
 
-
-
-       if(x($_GET,'search') || x($_GET,'file'))
-               $nouveau = true;
-       if($cid)
+       if ($cid) {
                $def_acl = array('allow_cid' => '<' . intval($cid) . '>');
+       }
 
-       if($nets) {
-               $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND network = '%s' AND `self` = 0",
-                       intval(local_user()),
-                       dbesc($nets)
-               );
+       if ($nets) {
+               $r = dba::select('contact', array('id'), array('uid' => local_user(), 'network' => $nets), array('self' => false));
 
                $str = '';
-               if (dbm::is_result($r))
-                       foreach($r as $rr)
-                               $str .= '<' . $rr['id'] . '>';
-               if(strlen($str))
+               while ($rr = dba::fetch($r)) {
+                       $str .= '<' . $rr['id'] . '>';
+               }
+               if (strlen($str)) {
                        $def_acl = array('allow_cid' => $str);
+               }
        }
-       set_pconfig(local_user(), 'network.view', 'net.selected', ($nets ? $nets : 'all'));
+       PConfig::set(local_user(), 'network.view', 'net.selected', ($nets ? $nets : 'all'));
 
-       if(!$update && !$rawmode) {
+       if (!$update && !$rawmode) {
                $tabs = network_tabs($a);
                $o .= $tabs;
 
-               if($group) {
-                       if(($t = group_public_members($group)) && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
+               if ($group) {
+                       if (($t = group_public_members($group)) && !PConfig::get(local_user(),'system','nowarn_insecure')) {
                                notice(sprintf(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.",
                                                "Warning: This group contains %s members from a network that doesn't allow non public messages.",
                                                $t), $t).EOL);
@@ -430,12 +571,15 @@ function network_content(App $a, $update = 0) {
 
                if ($cid) {
                        // If $cid belongs to a communitity forum or a privat goup,.add a mention to the status editor
-                       $contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND (`forum` OR `prv`) ",
-                               intval($cid),
-                               intval(local_user())
-                       );
-                       if ($contact)
-                               $content = "@".$contact[0]["nick"]."+".$cid;
+                       $condition = array("`id` = ? AND (`forum` OR `prv`)", $cid);
+                       $contact = dba::select('contact', array('addr', 'nick'), $condition, array('limit' => 1));
+                       if (dbm::is_result($contact)) {
+                               if ($contact["addr"] != '') {
+                                       $content = "@".$contact["addr"];
+                               } else {
+                                       $content = "@".$contact["nick"]."+".$cid;
+                               }
+                       }
                }
 
                $x = array(
@@ -472,7 +616,7 @@ function network_content(App $a, $update = 0) {
        $sql_table = "`thread`";
        $sql_parent = "`iid`";
 
-       if ($nouveau || strlen($file) || $update) {
+       if ($update) {
                $sql_table = "`item`";
                $sql_parent = "`parent`";
                $sql_post_table = " INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`";
@@ -480,34 +624,25 @@ function network_content(App $a, $update = 0) {
 
        $sql_nets = (($nets) ? sprintf(" and $sql_table.`network` = '%s' ", dbesc($nets)) : '');
 
-       if($group) {
-               $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1",
-                       intval($group),
-                       intval($_SESSION['uid'])
-               );
-               if (! dbm::is_result($r)) {
-                       if($update)
+       if ($group) {
+               $r = dba::select('group', array('name'), array('id' => $group, 'uid' => $_SESSION['uid']), array('limit' => 1));
+               if (!dbm::is_result($r)) {
+                       if ($update)
                                killme();
-                       notice( t('No such group') . EOL );
+                       notice(t('No such group') . EOL);
                        goaway('network/0');
                        // NOTREACHED
                }
 
                $contacts = expand_groups(array($group));
-               $gcontacts = expand_groups(array($group), false, true);
 
-               if((is_array($contacts)) && count($contacts)) {
+               if ((is_array($contacts)) && count($contacts)) {
                        $contact_str_self = "";
-                       $gcontact_str_self = "";
 
                        $contact_str = implode(',',$contacts);
-                       $gcontact_str = implode(',',$gcontacts);
-                       $self = q("SELECT `contact`.`id`, `gcontact`.`id` AS `gid` FROM `contact`
-                                       INNER JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl`
-                                       WHERE `uid` = %d AND `self`", intval($_SESSION['uid']));
-                       if (count($self)) {
-                               $contact_str_self = $self[0]["id"];
-                               $gcontact_str_self = $self[0]["gid"];
+                       $self = dba::select('contact', array('id'), array('uid' => $_SESSION['uid'], 'self' => true), array('limit' => 1));
+                       if (dbm::is_result($self)) {
+                               $contact_str_self = $self["id"];
                        }
 
                        $sql_post_table .= " INNER JOIN `item` AS `temp1` ON `temp1`.`id` = ".$sql_table.".".$sql_parent;
@@ -515,94 +650,63 @@ function network_content(App $a, $update = 0) {
                        $sql_extra3 .= " OR (`thread`.`contact-id` = '$contact_str_self' AND `temp1`.`allow_gid` LIKE '".protect_sprintf('%<'.intval($group).'>%')."' AND `temp1`.`private`))";
                } else {
                        $sql_extra3 .= " AND false ";
-                       info( t('Group is empty'));
+                       info(t('Group is empty'));
                }
 
                $o = replace_macros(get_markup_template("section_title.tpl"),array(
-                       '$title' => sprintf( t('Group: %s'), $r[0]['name'])
+                       '$title' => sprintf(t('Group: %s'), $r['name'])
                )) . $o;
 
-       }
-       elseif($cid) {
-
-               $r = q("SELECT `id`,`name`,`network`,`writable`,`nurl`, `forum`, `prv`, `contact-type`, `addr`, `thumb`, `location` FROM `contact` WHERE `id` = %d
-                               AND (NOT `blocked` OR `pending`) LIMIT 1",
-                       intval($cid)
-               );
+       } elseif ($cid) {
+               $fields = array('id', 'name', 'network', 'writable', 'nurl',
+                               'forum', 'prv', 'contact-type', 'addr', 'thumb', 'location');
+               $condition = array("`id` = ? AND (NOT `blocked` OR `pending`)", $cid);
+               $r = dba::select('contact', $fields, $condition, array('limit' => 1));
                if (dbm::is_result($r)) {
                        $sql_extra = " AND ".$sql_table.".`contact-id` = ".intval($cid);
 
                        $entries[0] = array(
                                'id' => 'network',
-                               'name' => htmlentities($r[0]['name']),
-                               'itemurl' => (($r[0]['addr']) ? ($r[0]['addr']) : ($r[0]['nurl'])),
-                               'thumb' => proxy_url($r[0]['thumb'], false, PROXY_SIZE_THUMB),
-                               'details' => $r[0]['location'],
+                               'name' => htmlentities($r['name']),
+                               'itemurl' => (($r['addr']) ? ($r['addr']) : ($r['nurl'])),
+                               'thumb' => proxy_url($r['thumb'], false, PROXY_SIZE_THUMB),
+                               'details' => $r['location'],
                        );
 
-                       $entries[0]["account_type"] = account_type($r[0]);
+                       $entries[0]["account_type"] = account_type($r);
 
                        $o = replace_macros(get_markup_template("viewcontact_template.tpl"),array(
                                'contacts' => $entries,
                                'id' => 'network',
                        )) . $o;
 
-                       if($r[0]['network'] === NETWORK_OSTATUS && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
-                               notice( t('Private messages to this person are at risk of public disclosure.') . EOL);
+                       if ($r['network'] === NETWORK_OSTATUS && $r['writable'] && !PConfig::get(local_user(),'system','nowarn_insecure')) {
+                               notice(t('Private messages to this person are at risk of public disclosure.') . EOL);
                        }
 
-               }
-               else {
-                       notice( t('Invalid contact.') . EOL);
+               } else {
+                       notice(t('Invalid contact.') . EOL);
                        goaway('network');
                        // NOTREACHED
                }
        }
 
-       if((! $group) && (! $cid) && (! $update) && (! get_config('theme','hide_eventlist'))) {
+       if (!$group && !$cid && !$update && !Config::get('theme','hide_eventlist')) {
                $o .= get_birthdays();
                $o .= get_events();
        }
 
-       if($datequery) {
+       if ($datequery) {
                $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery))));
        }
-       if($datequery2) {
+       if ($datequery2) {
                $sql_extra3 .= protect_sprintf(sprintf(" AND $sql_table.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2))));
        }
 
-       //$sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` ");
-       $sql_extra2 = (($nouveau) ? '' : $sql_extra2);
-       $sql_extra3 = (($nouveau) ? '' : $sql_extra3);
        $sql_order = "";
        $order_mode = "received";
-       $tag = false;
-
-       if(x($_GET,'search')) {
-               $search = escape_tags($_GET['search']);
-
-               if(strpos($search,'#') === 0) {
-                       $tag = true;
-                       $search = substr($search,1);
-               }
-
-               if (get_config('system','only_tag_search'))
-                       $tag = true;
 
-               if($tag) {
-                       $sql_extra = "";
-
-                       $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
-                                       dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG), intval(local_user()));
-                       $sql_order = "`item`.`id`";
-                       $order_mode = "id";
-               } else {
-                       $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
-                       $sql_order = "`item`.`id`";
-                       $order_mode = "id";
-               }
-       }
-       if(strlen($file)) {
+       if (strlen($file)) {
                $sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
                                dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user()));
                $sql_order = "`item`.`id`";
@@ -612,215 +716,154 @@ function network_content(App $a, $update = 0) {
        if ($conv) {
                $sql_extra3 .= " AND $sql_table.`mention`";
        }
-       if ($update) {
-               // only setup pagination on initial page view
-               $pager_sql = '';
+
+       // Normal conversation view
+       if ($order === 'post') {
+               $ordering = "`created`";
+               if ($sql_order == "") {
+                       $order_mode = "created";
+               }
        } else {
-               //  check if we serve a mobile device and get the user settings
-               //  accordingly
-               if ($a->is_mobile) {
-                       $itemspage_network = get_pconfig(local_user(),'system','itemspage_mobile_network');
-                       $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20);
-               } else {
-                       $itemspage_network = get_pconfig(local_user(),'system','itemspage_network');
-                       $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
+               $ordering = "`commented`";
+               if ($sql_order == "") {
+                       $order_mode = "commented";
                }
+       }
 
-               //  now that we have the user settings, see if the theme forces
-               //  a maximum item number which is lower then the user choice
-               if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network))
-                       $itemspage_network = $a->force_max_items;
+       if ($sql_order == "") {
+               $sql_order = "$sql_table.$ordering";
+       }
 
-               $a->set_pager_itemspage($itemspage_network);
-               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+       if (($_GET["offset"] != "")) {
+               $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
        }
 
-       if ($nouveau) {
-               $simple_update = (($update) ? " AND `item`.`unseen` " : '');
-
-               if ($sql_order == "")
-                       $sql_order = "`item`.`id`";
-
-               // "New Item View" - show all items unthreaded in reverse created date order
-               $items = q("SELECT %s FROM $sql_table $sql_post_table %s
-                       WHERE %s AND `item`.`uid` = %d
-                       $simple_update
-                       $sql_extra $sql_nets
-                       ORDER BY $sql_order DESC $pager_sql ",
-                       item_fieldlists(), item_joins(), item_condition(),
-                       intval($_SESSION['uid'])
-               );
+       $pager_sql = networkPager($a, $update);
 
-               $update_unseen = ' WHERE uid = ' . intval($_SESSION['uid']) . " AND unseen = 1 $sql_extra $sql_nets";
-       } else {
+       switch ($order_mode) {
+               case 'received':
+                       if ($last_received != '') {
+                               $sql_extra3 .= sprintf(" AND $sql_table.`received` < '%s'", dbesc($last_received));
+                               $a->set_pager_page(1);
+                               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+                       }
+                       break;
+               case 'commented':
+                       if ($last_commented != '') {
+                               $sql_extra3 .= sprintf(" AND $sql_table.`commented` < '%s'", dbesc($last_commented));
+                               $a->set_pager_page(1);
+                               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+                       }
+                       break;
+               case 'created':
+                       if ($last_created != '') {
+                               $sql_extra3 .= sprintf(" AND $sql_table.`created` < '%s'", dbesc($last_created));
+                               $a->set_pager_page(1);
+                               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+                       }
+                       break;
+               case 'id':
+                       if (($last_id > 0) && ($sql_table == "`thread`")) {
+                               $sql_extra3 .= sprintf(" AND $sql_table.`iid` < '%s'", dbesc($last_id));
+                               $a->set_pager_page(1);
+                               $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
+                       }
+                       break;
+       }
 
-               // Normal conversation view
-               if($order === 'post') {
-                       $ordering = "`created`";
-                       if ($sql_order == "")
-                               $order_mode = "created";
+       // Fetch a page full of parent items for this page
+       if ($update) {
+               if (Config::get("system", "like_no_comment")) {
+                       $sql_extra4 = " AND `item`.`verb` = '".ACTIVITY_POST."'";
                } else {
-                       $ordering = "`commented`";
-                       if ($sql_order == "")
-                               $order_mode = "commented";
+                       $sql_extra4 = "";
                }
 
-               if ($sql_order == "")
-                       $sql_order = "$sql_table.$ordering";
+               $r = q("SELECT `item`.`parent` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid`
+                       FROM $sql_table $sql_post_table INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+                       AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` $sql_extra4
+                       AND NOT `item`.`moderated` AND `item`.`unseen`
+                       $sql_extra3 $sql_extra $sql_nets
+                       ORDER BY `item_id` DESC LIMIT 100",
+                       intval(local_user())
+               );
+       } else {
+               $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid`
+                       FROM $sql_table $sql_post_table STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id`
+                       AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted`
+                       AND NOT `thread`.`moderated`
+                       $sql_extra2 $sql_extra3 $sql_extra $sql_nets
+                       ORDER BY $sql_order DESC $pager_sql",
+                       intval(local_user())
+               );
+       }
 
-               if (($_GET["offset"] != ""))
-                       $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
+       // Then fetch all the children of the parents that are on this page
 
-               switch ($order_mode) {
-                       case 'received':
-                               if ($last_received != '') {
-                                       $sql_extra3 .= sprintf(" AND $sql_table.`received` < '%s'", dbesc($last_received));
-                                       $a->set_pager_page(1);
-                                       $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
-                               }
-                               break;
-                       case 'commented':
-                               if ($last_commented != '') {
-                                       $sql_extra3 .= sprintf(" AND $sql_table.`commented` < '%s'", dbesc($last_commented));
-                                       $a->set_pager_page(1);
-                                       $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
-                               }
-                               break;
-                       case 'created':
-                               if ($last_created != '') {
-                                       $sql_extra3 .= sprintf(" AND $sql_table.`created` < '%s'", dbesc($last_created));
-                                       $a->set_pager_page(1);
-                                       $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
-                               }
-                               break;
-                       case 'id':
-                               if (($last_id > 0) && ($sql_table == "`thread`")) {
-                                       $sql_extra3 .= sprintf(" AND $sql_table.`iid` < '%s'", dbesc($last_id));
-                                       $a->set_pager_page(1);
-                                       $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
-                               }
-                               break;
+       $parents_arr = array();
+       $parents_str = '';
+       $date_offset = "";
+
+       if (dbm::is_result($r)) {
+               foreach ($r as $rr) {
+                       if (!in_array($rr['item_id'],$parents_arr)) {
+                               $parents_arr[] = $rr['item_id'];
+                       }
                }
 
-               // Fetch a page full of parent items for this page
-               if ($update) {
-                       if (get_config("system", "like_no_comment"))
-                               $sql_extra4 = " AND `item`.`verb` = '".ACTIVITY_POST."'";
-                       else
-                               $sql_extra4 = "";
-
-                       $r = q("SELECT `item`.`parent` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid`
-                               FROM $sql_table $sql_post_table INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
-                               AND (NOT `contact`.`blocked` OR `contact`.`pending`)
-                               WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` $sql_extra4
-                               AND NOT `item`.`moderated` AND `item`.`unseen`
-                               $sql_extra3 $sql_extra $sql_nets
-                               ORDER BY `item_id` DESC LIMIT 100",
-                               intval(local_user())
-                       );
-               } else {
-                       $r = q("SELECT `thread`.`iid` AS `item_id`, `thread`.`network` AS `item_network`, `contact`.`uid` AS `contact_uid`
-                               FROM $sql_table $sql_post_table STRAIGHT_JOIN `contact` ON `contact`.`id` = `thread`.`contact-id`
-                               AND (NOT `contact`.`blocked` OR `contact`.`pending`)
-                               WHERE `thread`.`uid` = %d AND `thread`.`visible` AND NOT `thread`.`deleted`
-                               AND NOT `thread`.`moderated`
-                               $sql_extra2 $sql_extra3 $sql_extra $sql_nets
-                               ORDER BY $sql_order DESC $pager_sql ",
-                               intval(local_user())
-                       );
+               $parents_str = implode(", ", $parents_arr);
+
+               // splitted into separate queries to avoid the problem with very long threads
+               // so always the last X comments are loaded
+               // This problem can occur expecially with imported facebook posts
+               $max_comments = Config::get("system", "max_comments");
+               if ($max_comments == 0) {
+                       $max_comments = 100;
                }
 
-               // Then fetch all the children of the parents that are on this page
+               $items = array();
 
-               $parents_arr = array();
-               $parents_str = '';
-               $date_offset = "";
+               foreach ($parents_arr AS $parents) {
+                       $thread_items = dba::p(item_query()." AND `item`.`uid` = ?
+                               AND `item`.`parent` = ?
+                               ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1),
+                               local_user(),
+                               $parents
+                       );
 
-               if (dbm::is_result($r)) {
-                       foreach($r as $rr)
-                               if(! in_array($rr['item_id'],$parents_arr))
-                                       $parents_arr[] = $rr['item_id'];
-
-                       $parents_str = implode(", ", $parents_arr);
-
-                       // splitted into separate queries to avoid the problem with very long threads
-                       // so always the last X comments are loaded
-                       // This problem can occur expecially with imported facebook posts
-                       $max_comments = get_config("system", "max_comments");
-                       if ($max_comments == 0)
-                               $max_comments = 100;
-
-                       $items = array();
-
-                       foreach ($parents_arr AS $parents) {
-                               $thread_items = dba::p(item_query()." AND `item`.`uid` = ?
-                                       AND `item`.`parent` = ?
-                                       ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1),
-                                       local_user(),
-                                       $parents
-                               );
-
-                               if (dbm::is_result($thread_items))
-                                       $items = array_merge($items, dba::inArray($thread_items));
+                       if (dbm::is_result($thread_items)) {
+                               $items = array_merge($items, dba::inArray($thread_items));
                        }
-                       $items = conv_sort($items,$ordering);
-               } else {
-                       $items = array();
                }
+               $items = conv_sort($items,$ordering);
+       } else {
+               $items = array();
+       }
 
-               if ($_GET["offset"] == "")
-                       $date_offset = $items[0][$order_mode];
-               else
-                       $date_offset = $_GET["offset"];
-
-               $a->page_offset = $date_offset;
-
-               if($parents_str)
-                       $update_unseen = ' WHERE uid = ' . intval(local_user()) . ' AND unseen = 1 AND parent IN ( ' . dbesc($parents_str) . ' )';
+       if ($_GET["offset"] == "") {
+               $date_offset = $items[0][$order_mode];
+       } else {
+               $date_offset = $_GET["offset"];
        }
 
+       $a->page_offset = $date_offset;
+
        // We aren't going to try and figure out at the item, group, and page
        // level which items you've seen and which you haven't. If you're looking
        // at the top level network page just mark everything seen.
 
-
-// The $update_unseen is a bit unreliable if you have stuff coming into your stream from a new contact -
-// and other feeds that bring in stuff from the past. One can't find it all.
-// I'm reviving this block to mark everything seen on page 1 of the network as a temporary measure.
-// The correct solution is to implement a network notifications box just like the system notifications popup
-// with the ability in the popup to "mark all seen".
-// Several people are complaining because there are unseen messages they can't find and as time goes
-// on they just get buried deeper. It has happened to me a couple of times also.
-
-
        if (!$group && !$cid && !$star) {
-               $unseen = dba::exists('item', array('unseen' => true, 'uid' => local_user()));
-
-               if ($unseen) {
-                       $r = dba::update('item', array('unseen' => false), array('uid' => local_user(), 'unseen' => true));
-               }
-       } elseif ($update_unseen) {
-               $unseen = q("SELECT `id` FROM `item` ".$update_unseen. " LIMIT 1");
-
-               if (dbm::is_result($unseen)) {
-                       $r = q("UPDATE `item` SET `unseen` = 0 $update_unseen");
-               }
+               $condition = array('unseen' => true, 'uid' => local_user());
+       } elseif ($parents_str) {
+               $condition = array("`uid` = ? AND `unseen` AND `parent` IN (" . dbesc($parents_str) . ")", local_user());
        }
 
-       // Set this so that the conversation function can find out contact info for our wall-wall items
-       $a->page_contact = $a->contact;
-
-       $mode = (($nouveau) ? 'network-new' : 'network');
+       networkSetSeen($condition);
 
-       $o .= conversation($a, $items, $mode, $update);
-
-       if (!$update) {
-               if (get_pconfig(local_user(), 'system', 'infinite_scroll')) {
-                       $o .= scroll_loader();
-               } else {
-                       $o .= alt_pager($a, count($items));
-               }
-       }
+       $mode = 'network';
+       $o .= networkConversation($a, $items, $mode, $update);
 
        return $o;
 }
@@ -863,7 +906,7 @@ function network_tabs(App $a) {
                ),
        );
 
-       if(feature_enabled(local_user(),'personal_tab')) {
+       if (feature_enabled(local_user(),'personal_tab')) {
                $tabs[] = array(
                        'label' => t('Personal'),
                        'url'   => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
@@ -885,7 +928,7 @@ function network_tabs(App $a) {
                );
        }
 
-       if(feature_enabled(local_user(),'link_tab')) {
+       if (feature_enabled(local_user(),'link_tab')) {
                $tabs[] = array(
                        'label' => t('Shared Links'),
                        'url'   => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
@@ -896,7 +939,7 @@ function network_tabs(App $a) {
                );
        }
 
-       if(feature_enabled(local_user(),'star_posts')) {
+       if (feature_enabled(local_user(),'star_posts')) {
                $tabs[] = array(
                        'label' => t('Starred'),
                        'url'   => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
@@ -907,9 +950,9 @@ function network_tabs(App $a) {
                );
        }
 
-       // save selected tab, but only if not in search or file mode
-       if(!x($_GET,'search') && !x($_GET,'file')) {
-               set_pconfig( local_user(), 'network.view','tab.selected',array($all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) );
+       // save selected tab, but only if not in file mode
+       if (!x($_GET,'file')) {
+               PConfig::set(local_user(), 'network.view','tab.selected',array($all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active));
        }
 
        $arr = array('tabs' => $tabs);
index 5cc2734c8e162098f8c5ac699ee8c24e560e3ff0..e889d5a94ee1693b72027d15093cdd32c0b39b9d 100644 (file)
@@ -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`",
index 3c5fdd7be4bde26b5fb375e9cbab1b8143b1bf7d..5896c90baa9690c773fc1eb372a2a63a70e19142 100644 (file)
@@ -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)
                        );
index ac54e0e096f8095369cb165fcf28f392e318d928..6c9f4bd66214bcbd1d05aac08c5ab3cd16079f1f 100644 (file)
@@ -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'
index 5a5bdcd5890b9be772ddfdb14b00e1402d430431..59fa52121411429ae6acff8bb90f8b9743d4badd 100644 (file)
@@ -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))
index 42f458756338bb21235f7d938f788241810e73ab..4a1d1ad93479033342ec504ff7cfa949b3f0ce78 100644 (file)
@@ -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()),
index 20d02af85a174ae9c743e365a1b5a789acd7b049..d6f76da70bdf9a514e994cc8bf00a77deef49301 100644 (file)
@@ -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 == '')) {
index 1975a05bf662e7a0df98b39c8ef86ebc385e913c..ee652ee8aa9431f7bace8b1bf01ba242211f7100 100644 (file)
@@ -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);
index c98e1b99be5cdeb371e429a12c9313b9fa68475d..9970d32595a9815a3792b394891790e6ff3d4143 100644 (file)
@@ -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',
index 19e89f05ba7155c85334aeac1373f7ae80a84589..e71c726952c582f5c24aefad147763b4bb3e6184 100644 (file)
@@ -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 (file)
index 0000000..d0baf87
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+
+use Friendica\App;
+use Friendica\Core\System;
+
+require_once 'include/probe.php';
+require_once 'include/follow.php';
+require_once 'include/Contact.php';
+require_once 'include/contact_selectors.php';
+
+function unfollow_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'];
+
+       $condition = array("`uid` = ? AND `rel` = ? AND (`nurl` = ? OR `alias` = ? OR `alias` = ?) AND `network` != ?",
+                       $uid, CONTACT_IS_FRIEND, normalise_link($url),
+                       normalise_link($url), $url, NETWORK_STATUSNET);
+       $contact = dba::select('contact', array(), $condition, array('limit' => 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;
+}
index 8bf1fdbf19d6293b0bada256d2bc4362fc4debae..9f455a19f345ff1fddfaf50be7f24f8c2930fded 100644 (file)
@@ -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);
 
index 6bf75bd8181c33e48de1efbb939cd188feea3ee6..ac518cbd48a53e9ada01cc1f3740374f8a114c9b 100644 (file)
@@ -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
index f81b8ea4e8a13be43206444663bc8bb92685e6d9..816406e4eb866dfe1ae644cc5cdc64a0e8321de7 100644 (file)
@@ -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)),
index 2eedd7c1bb18adc31b7b314f8009f3836249ce6d..675918eb2f426e4bf07ea5cea5ca9f2cf7984b4d 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -105,7 +105,7 @@ msgstr ""
 msgid "Enable widget to display Network posts only from selected network"
 msgstr ""
 
-#: include/features.php:86 mod/search.php:37 mod/network.php:209
+#: include/features.php:86 mod/search.php:37 mod/network.php:194
 msgid "Saved Searches"
 msgstr ""
 
@@ -177,7 +177,7 @@ msgstr ""
 msgid "Add categories to your posts"
 msgstr ""
 
-#: include/features.php:104 include/contact_widgets.php:166
+#: include/features.php:104 include/contact_widgets.php:167
 msgid "Saved Folders"
 msgstr ""
 
@@ -217,15 +217,15 @@ msgstr ""
 msgid "Show visitors public community forums at the Advanced Profile Page"
 msgstr ""
 
-#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:701
+#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:702
 msgid "Miscellaneous"
 msgstr ""
 
-#: include/datetime.php:196 include/identity.php:653
+#: include/datetime.php:196 include/identity.php:654
 msgid "Birthday:"
 msgstr ""
 
-#: include/datetime.php:198 mod/profiles.php:724
+#: include/datetime.php:198 mod/profiles.php:725
 msgid "Age: "
 msgstr ""
 
@@ -249,8 +249,8 @@ msgstr ""
 msgid "years"
 msgstr ""
 
-#: include/datetime.php:380 include/event.php:453 mod/cal.php:281
-#: mod/events.php:387
+#: include/datetime.php:380 include/event.php:454 mod/cal.php:282
+#: mod/events.php:388
 msgid "month"
 msgstr ""
 
@@ -258,8 +258,8 @@ msgstr ""
 msgid "months"
 msgstr ""
 
-#: include/datetime.php:381 include/event.php:454 mod/cal.php:282
-#: mod/events.php:388
+#: include/datetime.php:381 include/event.php:455 mod/cal.php:283
+#: mod/events.php:389
 msgid "week"
 msgstr ""
 
@@ -267,8 +267,8 @@ msgstr ""
 msgid "weeks"
 msgstr ""
 
-#: include/datetime.php:382 include/event.php:455 mod/cal.php:283
-#: mod/events.php:389
+#: include/datetime.php:382 include/event.php:456 mod/cal.php:284
+#: mod/events.php:390
 msgid "day"
 msgstr ""
 
@@ -310,215 +310,11 @@ msgstr ""
 msgid "%s's birthday"
 msgstr ""
 
-#: include/datetime.php:621 include/dfrn.php:1318
+#: include/datetime.php:621 include/dfrn.php:1332
 #, php-format
 msgid "Happy Birthday %s"
 msgstr ""
 
-#: include/like.php:30 include/conversation.php:154 include/diaspora.php:1653
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
-msgstr ""
-
-#: include/like.php:34 include/like.php:39 include/conversation.php:157
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
-msgstr ""
-
-#: include/like.php:44
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
-msgstr ""
-
-#: include/like.php:49
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
-msgstr ""
-
-#: include/like.php:54
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
-msgstr ""
-
-#: include/like.php:181 include/conversation.php:142
-#: include/conversation.php:294 include/text.php:1893 mod/subthread.php:89
-#: mod/tagger.php:63
-msgid "photo"
-msgstr ""
-
-#: include/like.php:181 include/conversation.php:137
-#: include/conversation.php:147 include/conversation.php:289
-#: include/conversation.php:298 include/diaspora.php:1657 mod/subthread.php:89
-#: mod/tagger.php:63
-msgid "status"
-msgstr ""
-
-#: include/like.php:183 include/conversation.php:134
-#: include/conversation.php:286 include/text.php:1891
-msgid "event"
-msgstr ""
-
-#: include/user.php:39 mod/settings.php:377
-msgid "Passwords do not match. Password unchanged."
-msgstr ""
-
-#: include/user.php:48
-msgid "An invitation is required."
-msgstr ""
-
-#: include/user.php:53
-msgid "Invitation could not be verified."
-msgstr ""
-
-#: include/user.php:61
-msgid "Invalid OpenID url"
-msgstr ""
-
-#: include/user.php:75 include/auth.php:139
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
-msgstr ""
-
-#: include/user.php:75 include/auth.php:139
-msgid "The error message was:"
-msgstr ""
-
-#: include/user.php:82
-msgid "Please enter the required information."
-msgstr ""
-
-#: include/user.php:96
-msgid "Please use a shorter name."
-msgstr ""
-
-#: include/user.php:98
-msgid "Name too short."
-msgstr ""
-
-#: include/user.php:106
-msgid "That doesn't appear to be your full (First Last) name."
-msgstr ""
-
-#: include/user.php:111
-msgid "Your email domain is not among those allowed on this site."
-msgstr ""
-
-#: include/user.php:114
-msgid "Not a valid email address."
-msgstr ""
-
-#: include/user.php:127
-msgid "Cannot use that email."
-msgstr ""
-
-#: include/user.php:133
-msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
-msgstr ""
-
-#: include/user.php:140 include/user.php:228
-msgid "Nickname is already registered. Please choose another."
-msgstr ""
-
-#: include/user.php:150
-msgid ""
-"Nickname was once registered here and may not be re-used. Please choose "
-"another."
-msgstr ""
-
-#: include/user.php:166
-msgid "SERIOUS ERROR: Generation of security keys failed."
-msgstr ""
-
-#: include/user.php:214
-msgid "An error occurred during registration. Please try again."
-msgstr ""
-
-#: include/user.php:237 view/theme/duepuntozero/config.php:46
-msgid "default"
-msgstr ""
-
-#: include/user.php:247
-msgid "An error occurred creating your default profile. Please try again."
-msgstr ""
-
-#: include/user.php:260 include/user.php:264 include/profile_selectors.php:42
-msgid "Friends"
-msgstr ""
-
-#: include/user.php:306 include/user.php:314 include/user.php:322
-#: include/api.php:3702 mod/photos.php:73 mod/photos.php:189 mod/photos.php:776
-#: mod/photos.php:1258 mod/photos.php:1279 mod/photos.php:1865
-#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90
-#: mod/profile_photo.php:214 mod/profile_photo.php:309
-#: mod/profile_photo.php:319
-msgid "Profile Photos"
-msgstr ""
-
-#: include/user.php:397
-#, php-format
-msgid ""
-"\n"
-"\t\tDear %1$s,\n"
-"\t\t\tThank you for registering at %2$s. Your account is pending for "
-"approval by the administrator.\n"
-"\t"
-msgstr ""
-
-#: include/user.php:407
-#, php-format
-msgid "Registration at %s"
-msgstr ""
-
-#: include/user.php:417
-#, php-format
-msgid ""
-"\n"
-"\t\tDear %1$s,\n"
-"\t\t\tThank you for registering at %2$s. Your account has been created.\n"
-"\t"
-msgstr ""
-
-#: include/user.php:421
-#, php-format
-msgid ""
-"\n"
-"\t\tThe login details are as follows:\n"
-"\t\t\tSite Location:\t%3$s\n"
-"\t\t\tLogin Name:\t%1$s\n"
-"\t\t\tPassword:\t%5$s\n"
-"\n"
-"\t\tYou may change your password from your account \"Settings\" page after "
-"logging\n"
-"\t\tin.\n"
-"\n"
-"\t\tPlease take a few moments to review the other account settings on that "
-"page.\n"
-"\n"
-"\t\tYou may also wish to add some basic information to your default profile\n"
-"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
-"\n"
-"\t\tWe recommend setting your full name, adding a profile photo,\n"
-"\t\tadding some profile \"keywords\" (very useful in making new friends) - "
-"and\n"
-"\t\tperhaps what country you live in; if you do not wish to be more "
-"specific\n"
-"\t\tthan that.\n"
-"\n"
-"\t\tWe fully respect your right to privacy, and none of these items are "
-"necessary.\n"
-"\t\tIf you are new and do not know anybody here, they may help\n"
-"\t\tyou to make some new and interesting friends.\n"
-"\n"
-"\n"
-"\t\tThank you and welcome to %2$s."
-msgstr ""
-
-#: include/user.php:453 mod/admin.php:1398
-#, php-format
-msgid "Registration details for %s"
-msgstr ""
-
 #: include/profile_selectors.php:6
 msgid "Male"
 msgstr ""
@@ -571,7 +367,7 @@ msgstr ""
 msgid "Other"
 msgstr ""
 
-#: include/profile_selectors.php:6 include/conversation.php:1555
+#: include/profile_selectors.php:6 include/conversation.php:1556
 msgid "Undecided"
 msgid_plural "Undecided"
 msgstr[0] ""
@@ -665,6 +461,10 @@ msgstr ""
 msgid "Sex Addict"
 msgstr ""
 
+#: include/profile_selectors.php:42 include/user.php:262 include/user.php:266
+msgid "Friends"
+msgstr ""
+
 #: include/profile_selectors.php:42
 msgid "Friends/Benefits"
 msgstr ""
@@ -749,1085 +549,1265 @@ msgstr ""
 msgid "Ask me"
 msgstr ""
 
-#: include/NotificationsManager.php:155
-msgid "System"
+#: include/dba_pdo.php:75 include/dba.php:61
+#, php-format
+msgid "Cannot locate DNS info for database server '%s'"
 msgstr ""
 
-#: include/NotificationsManager.php:162 include/nav.php:160 mod/admin.php:587
-#: view/theme/frio/theme.php:259
-msgid "Network"
+#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:43
+#: mod/fbrowser.php:64 mod/photos.php:190 mod/photos.php:1126
+#: mod/photos.php:1259 mod/photos.php:1280 mod/photos.php:1842
+#: mod/photos.php:1856
+msgid "Contact Photos"
 msgstr ""
 
-#: include/NotificationsManager.php:169 mod/profiles.php:699
-#: mod/network.php:867
-msgid "Personal"
+#: include/acl_selectors.php:355
+msgid "Post to Email"
 msgstr ""
 
-#: include/NotificationsManager.php:176 include/nav.php:107 include/nav.php:163
-msgid "Home"
+#: include/acl_selectors.php:360
+#, php-format
+msgid "Connectors disabled, since \"%s\" is enabled."
 msgstr ""
 
-#: include/NotificationsManager.php:183 include/nav.php:168
-msgid "Introductions"
+#: include/acl_selectors.php:361 mod/settings.php:1190
+msgid "Hide your profile details from unknown viewers?"
 msgstr ""
 
-#: include/NotificationsManager.php:241 include/NotificationsManager.php:253
-#, php-format
-msgid "%s commented on %s's post"
+#: include/acl_selectors.php:367
+msgid "Visible to everybody"
 msgstr ""
 
-#: include/NotificationsManager.php:252
-#, php-format
-msgid "%s created a new post"
+#: include/acl_selectors.php:368 view/theme/vier/config.php:110
+msgid "show"
 msgstr ""
 
-#: include/NotificationsManager.php:267
-#, php-format
-msgid "%s liked %s's post"
+#: include/acl_selectors.php:369 view/theme/vier/config.php:110
+msgid "don't show"
 msgstr ""
 
-#: include/NotificationsManager.php:280
-#, php-format
-msgid "%s disliked %s's post"
+#: include/acl_selectors.php:375 mod/editpost.php:126
+msgid "CC: email addresses"
 msgstr ""
 
-#: include/NotificationsManager.php:293
-#, php-format
-msgid "%s is attending %s's event"
+#: include/acl_selectors.php:376 mod/editpost.php:133
+msgid "Example: bob@example.com, mary@example.com"
 msgstr ""
 
-#: include/NotificationsManager.php:306
-#, php-format
-msgid "%s is not attending %s's event"
+#: include/acl_selectors.php:378 mod/events.php:512 mod/photos.php:1199
+#: mod/photos.php:1596
+msgid "Permissions"
 msgstr ""
 
-#: include/NotificationsManager.php:319
-#, php-format
-msgid "%s may attend %s's event"
+#: include/acl_selectors.php:379
+msgid "Close"
 msgstr ""
 
-#: include/NotificationsManager.php:336
-#, php-format
-msgid "%s is now friends with %s"
+#: include/contact_selectors.php:32
+msgid "Unknown | Not categorised"
 msgstr ""
 
-#: include/NotificationsManager.php:774
-msgid "Friend Suggestion"
+#: include/contact_selectors.php:33
+msgid "Block immediately"
 msgstr ""
 
-#: include/NotificationsManager.php:803
-msgid "Friend/Connect Request"
+#: include/contact_selectors.php:34
+msgid "Shady, spammer, self-marketer"
 msgstr ""
 
-#: include/NotificationsManager.php:803
-msgid "New Follower"
+#: include/contact_selectors.php:35
+msgid "Known to me, but no opinion"
 msgstr ""
 
-#: include/Photo.php:1075 include/Photo.php:1091 include/Photo.php:1099
-#: include/Photo.php:1124 include/message.php:145 mod/wall_upload.php:249
-#: mod/item.php:468
-msgid "Wall Photos"
+#: include/contact_selectors.php:36
+msgid "OK, probably harmless"
 msgstr ""
 
-#: include/api.php:1102
-#, php-format
-msgid "Daily posting limit of %d posts reached. The post was rejected."
+#: include/contact_selectors.php:37
+msgid "Reputable, has my trust"
 msgstr ""
 
-#: include/api.php:1123
-#, php-format
-msgid "Weekly posting limit of %d posts reached. The post was rejected."
+#: include/contact_selectors.php:56 mod/admin.php:1072
+msgid "Frequently"
 msgstr ""
 
-#: include/api.php:1144
-#, php-format
-msgid "Monthly posting limit of %d posts reached. The post was rejected."
+#: include/contact_selectors.php:57 mod/admin.php:1073
+msgid "Hourly"
 msgstr ""
 
-#: include/auth.php:52
-msgid "Logged out."
+#: include/contact_selectors.php:58 mod/admin.php:1074
+msgid "Twice daily"
 msgstr ""
 
-#: include/auth.php:123 include/auth.php:185 mod/openid.php:110
-msgid "Login failed."
+#: include/contact_selectors.php:59 mod/admin.php:1075
+msgid "Daily"
 msgstr ""
 
-#: include/dba_pdo.php:75 include/dba.php:59
-#, php-format
-msgid "Cannot locate DNS info for database server '%s'"
+#: include/contact_selectors.php:60
+msgid "Weekly"
 msgstr ""
 
-#: include/delivery.php:428
-msgid "(no subject)"
+#: include/contact_selectors.php:61
+msgid "Monthly"
 msgstr ""
 
-#: include/delivery.php:440 include/enotify.php:46
-msgid "noreply"
+#: include/contact_selectors.php:76 mod/dfrn_request.php:887
+msgid "Friendica"
 msgstr ""
 
-#: include/event.php:19 include/bb2diaspora.php:233 mod/localtime.php:13
-msgid "l F d, Y \\@ g:i A"
+#: include/contact_selectors.php:77
+msgid "OStatus"
 msgstr ""
 
-#: include/event.php:36 include/event.php:56 include/event.php:459
-#: include/bb2diaspora.php:239
-msgid "Starts:"
+#: include/contact_selectors.php:78
+msgid "RSS/Atom"
 msgstr ""
 
-#: include/event.php:39 include/event.php:62 include/event.php:460
-#: include/bb2diaspora.php:247
-msgid "Finishes:"
+#: include/contact_selectors.php:79 include/contact_selectors.php:86
+#: mod/admin.php:1582 mod/admin.php:1595 mod/admin.php:1608 mod/admin.php:1626
+msgid "Email"
 msgstr ""
 
-#: include/event.php:43 include/event.php:69 include/event.php:461
-#: include/bb2diaspora.php:256 include/identity.php:338 mod/directory.php:135
-#: mod/notifications.php:246 mod/events.php:496 mod/contacts.php:641
-msgid "Location:"
+#: include/contact_selectors.php:80 mod/dfrn_request.php:889
+#: mod/settings.php:850
+msgid "Diaspora"
 msgstr ""
 
-#: include/event.php:408
-msgid "all-day"
-msgstr ""
-
-#: include/event.php:410
-msgid "Sun"
+#: include/contact_selectors.php:81
+msgid "Facebook"
 msgstr ""
 
-#: include/event.php:411
-msgid "Mon"
+#: include/contact_selectors.php:82
+msgid "Zot!"
 msgstr ""
 
-#: include/event.php:412
-msgid "Tue"
+#: include/contact_selectors.php:83
+msgid "LinkedIn"
 msgstr ""
 
-#: include/event.php:413
-msgid "Wed"
+#: include/contact_selectors.php:84
+msgid "XMPP/IM"
 msgstr ""
 
-#: include/event.php:414
-msgid "Thu"
+#: include/contact_selectors.php:85
+msgid "MySpace"
 msgstr ""
 
-#: include/event.php:415
-msgid "Fri"
+#: include/contact_selectors.php:87
+msgid "Google+"
 msgstr ""
 
-#: include/event.php:416
-msgid "Sat"
+#: include/contact_selectors.php:88
+msgid "pump.io"
 msgstr ""
 
-#: include/event.php:418 include/text.php:1206 mod/settings.php:982
-msgid "Sunday"
+#: include/contact_selectors.php:89
+msgid "Twitter"
 msgstr ""
 
-#: include/event.php:419 include/text.php:1206 mod/settings.php:982
-msgid "Monday"
+#: include/contact_selectors.php:90
+msgid "Diaspora Connector"
 msgstr ""
 
-#: include/event.php:420 include/text.php:1206
-msgid "Tuesday"
+#: include/contact_selectors.php:91
+msgid "GNU Social Connector"
 msgstr ""
 
-#: include/event.php:421 include/text.php:1206
-msgid "Wednesday"
+#: include/contact_selectors.php:92
+msgid "pnut"
 msgstr ""
 
-#: include/event.php:422 include/text.php:1206
-msgid "Thursday"
+#: include/contact_selectors.php:93
+msgid "App.net"
 msgstr ""
 
-#: include/event.php:423 include/text.php:1206
-msgid "Friday"
+#: include/group.php:25
+msgid ""
+"A deleted group with this name was revived. Existing item permissions "
+"<strong>may</strong> apply to this group and any future members. If this is "
+"not what you intended, please create another group with a different name."
 msgstr ""
 
-#: include/event.php:424 include/text.php:1206
-msgid "Saturday"
+#: include/group.php:201
+msgid "Default privacy group for new contacts"
 msgstr ""
 
-#: include/event.php:426
-msgid "Jan"
+#: include/group.php:234
+msgid "Everybody"
 msgstr ""
 
-#: include/event.php:427
-msgid "Feb"
+#: include/group.php:257
+msgid "edit"
 msgstr ""
 
-#: include/event.php:428
-msgid "Mar"
+#: include/group.php:278 mod/newmember.php:39
+msgid "Groups"
 msgstr ""
 
-#: include/event.php:429
-msgid "Apr"
+#: include/group.php:280
+msgid "Edit groups"
 msgstr ""
 
-#: include/event.php:430 include/event.php:443 include/text.php:1210
-msgid "May"
+#: include/group.php:282
+msgid "Edit group"
 msgstr ""
 
-#: include/event.php:431
-msgid "Jun"
+#: include/group.php:283
+msgid "Create a new group"
 msgstr ""
 
-#: include/event.php:432
-msgid "Jul"
+#: include/group.php:284 mod/group.php:101 mod/group.php:198
+msgid "Group Name: "
 msgstr ""
 
-#: include/event.php:433
-msgid "Aug"
+#: include/group.php:286
+msgid "Contacts not in any group"
 msgstr ""
 
-#: include/event.php:434
-msgid "Sept"
+#: include/group.php:288 mod/network.php:195
+msgid "add"
 msgstr ""
 
-#: include/event.php:435
-msgid "Oct"
+#: include/Contact.php:381 include/Contact.php:394 include/Contact.php:439
+#: include/conversation.php:1013 include/conversation.php:1029
+#: mod/allfriends.php:71 mod/directory.php:153 mod/dirfind.php:212
+#: mod/match.php:77 mod/suggest.php:85
+msgid "View Profile"
 msgstr ""
 
-#: include/event.php:436
-msgid "Nov"
+#: include/Contact.php:395 include/contact_widgets.php:39
+#: include/conversation.php:1026 mod/allfriends.php:72 mod/contacts.php:580
+#: mod/dirfind.php:213 mod/follow.php:143 mod/match.php:78 mod/suggest.php:86
+msgid "Connect/Follow"
 msgstr ""
 
-#: include/event.php:437
-msgid "Dec"
+#: include/Contact.php:438 include/conversation.php:1012
+msgid "View Status"
 msgstr ""
 
-#: include/event.php:439 include/text.php:1210
-msgid "January"
+#: include/Contact.php:440 include/conversation.php:1014
+msgid "View Photos"
 msgstr ""
 
-#: include/event.php:440 include/text.php:1210
-msgid "February"
+#: include/Contact.php:441 include/conversation.php:1015
+msgid "Network Posts"
 msgstr ""
 
-#: include/event.php:441 include/text.php:1210
-msgid "March"
+#: include/Contact.php:442 include/conversation.php:1016
+msgid "View Contact"
 msgstr ""
 
-#: include/event.php:442 include/text.php:1210
-msgid "April"
+#: include/Contact.php:443
+msgid "Drop Contact"
 msgstr ""
 
-#: include/event.php:444 include/text.php:1210
-msgid "June"
+#: include/Contact.php:444 include/conversation.php:1017
+msgid "Send PM"
 msgstr ""
 
-#: include/event.php:445 include/text.php:1210
-msgid "July"
+#: include/Contact.php:445 include/conversation.php:1021
+msgid "Poke"
 msgstr ""
 
-#: include/event.php:446 include/text.php:1210
-msgid "August"
+#: include/Contact.php:814
+msgid "Organisation"
 msgstr ""
 
-#: include/event.php:447 include/text.php:1210
-msgid "September"
+#: include/Contact.php:817
+msgid "News"
 msgstr ""
 
-#: include/event.php:448 include/text.php:1210
-msgid "October"
+#: include/Contact.php:820
+msgid "Forum"
 msgstr ""
 
-#: include/event.php:449 include/text.php:1210
-msgid "November"
+#: include/ForumManager.php:119 include/nav.php:134 include/text.php:1104
+#: view/theme/vier/theme.php:249
+msgid "Forums"
 msgstr ""
 
-#: include/event.php:450 include/text.php:1210
-msgid "December"
+#: include/ForumManager.php:121 view/theme/vier/theme.php:251
+msgid "External link to forum"
 msgstr ""
 
-#: include/event.php:452 mod/cal.php:280 mod/events.php:386
-msgid "today"
+#: include/ForumManager.php:124 include/contact_widgets.php:272
+#: include/items.php:2398 mod/content.php:626 object/Item.php:412
+#: view/theme/vier/theme.php:254 src/App.php:524
+msgid "show more"
 msgstr ""
 
-#: include/event.php:457
-msgid "No events to display"
+#: include/NotificationsManager.php:157
+msgid "System"
 msgstr ""
 
-#: include/event.php:570
-msgid "l, F j"
+#: include/NotificationsManager.php:164 include/nav.php:161 mod/admin.php:589
+#: view/theme/frio/theme.php:260
+msgid "Network"
 msgstr ""
 
-#: include/event.php:592
-msgid "Edit event"
+#: include/NotificationsManager.php:171 mod/network.php:911
+#: mod/profiles.php:700
+msgid "Personal"
 msgstr ""
 
-#: include/event.php:593
-msgid "Delete event"
+#: include/NotificationsManager.php:178 include/nav.php:108 include/nav.php:164
+msgid "Home"
 msgstr ""
 
-#: include/event.php:619 include/text.php:1615 include/text.php:1622
-msgid "link to source"
+#: include/NotificationsManager.php:185 include/nav.php:169
+msgid "Introductions"
 msgstr ""
 
-#: include/event.php:877
-msgid "Export"
+#: include/NotificationsManager.php:243 include/NotificationsManager.php:255
+#, php-format
+msgid "%s commented on %s's post"
 msgstr ""
 
-#: include/event.php:878
-msgid "Export calendar as ical"
+#: include/NotificationsManager.php:254
+#, php-format
+msgid "%s created a new post"
 msgstr ""
 
-#: include/event.php:879
-msgid "Export calendar as csv"
+#: include/NotificationsManager.php:269
+#, php-format
+msgid "%s liked %s's post"
 msgstr ""
 
-#: include/follow.php:84 mod/dfrn_request.php:514
-msgid "Disallowed profile URL."
+#: include/NotificationsManager.php:282
+#, php-format
+msgid "%s disliked %s's post"
 msgstr ""
 
-#: include/follow.php:89 mod/friendica.php:115 mod/dfrn_request.php:520
-#: mod/admin.php:288 mod/admin.php:306
-msgid "Blocked domain"
+#: include/NotificationsManager.php:295
+#, php-format
+msgid "%s is attending %s's event"
 msgstr ""
 
-#: include/follow.php:94
-msgid "Connect URL missing."
+#: include/NotificationsManager.php:308
+#, php-format
+msgid "%s is not attending %s's event"
 msgstr ""
 
-#: include/follow.php:122
-msgid ""
-"This site is not configured to allow communications with other networks."
+#: include/NotificationsManager.php:321
+#, php-format
+msgid "%s may attend %s's event"
 msgstr ""
 
-#: include/follow.php:123 include/follow.php:137
-msgid "No compatible communication protocols or feeds were discovered."
+#: include/NotificationsManager.php:338
+#, php-format
+msgid "%s is now friends with %s"
 msgstr ""
 
-#: include/follow.php:135
-msgid "The profile address specified does not provide adequate information."
+#: include/NotificationsManager.php:776
+msgid "Friend Suggestion"
 msgstr ""
 
-#: include/follow.php:140
-msgid "An author or name was not found."
+#: include/NotificationsManager.php:805
+msgid "Friend/Connect Request"
 msgstr ""
 
-#: include/follow.php:143
-msgid "No browser URL could be matched to this address."
+#: include/NotificationsManager.php:805
+msgid "New Follower"
 msgstr ""
 
-#: include/follow.php:146
-msgid ""
-"Unable to match @-style Identity Address with a known protocol or email "
-"contact."
+#: include/Photo.php:1076 include/Photo.php:1092 include/Photo.php:1100
+#: include/Photo.php:1125 include/message.php:146 mod/item.php:469
+#: mod/wall_upload.php:250
+msgid "Wall Photos"
 msgstr ""
 
-#: include/follow.php:147
-msgid "Use mailto: in front of address to force email check."
+#: include/api.php:1103
+#, php-format
+msgid "Daily posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/follow.php:153
-msgid ""
-"The profile address specified belongs to a network which has been disabled "
-"on this site."
+#: include/api.php:1124
+#, php-format
+msgid "Weekly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/follow.php:158
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
+#: include/api.php:1145
+#, php-format
+msgid "Monthly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/follow.php:259
-msgid "Unable to retrieve contact information."
+#: include/api.php:3717 include/user.php:308 include/user.php:316
+#: include/user.php:324 mod/photos.php:74 mod/photos.php:190 mod/photos.php:777
+#: mod/photos.php:1259 mod/photos.php:1280 mod/photos.php:1866
+#: mod/profile_photo.php:75 mod/profile_photo.php:83 mod/profile_photo.php:91
+#: mod/profile_photo.php:215 mod/profile_photo.php:310
+#: mod/profile_photo.php:320
+msgid "Profile Photos"
 msgstr ""
 
-#: include/message.php:14 include/message.php:168
-msgid "[no subject]"
+#: include/auth.php:53
+msgid "Logged out."
 msgstr ""
 
-#: include/nav.php:37 mod/navigation.php:21
-msgid "Nothing new here"
+#: include/auth.php:124 include/auth.php:186 mod/openid.php:111
+msgid "Login failed."
 msgstr ""
 
-#: include/nav.php:41 mod/navigation.php:25
-msgid "Clear notifications"
+#: include/auth.php:140 include/user.php:77
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
 msgstr ""
 
-#: include/nav.php:42 include/text.php:1093
-msgid "@name, !forum, #tags, content"
+#: include/auth.php:140 include/user.php:77
+msgid "The error message was:"
 msgstr ""
 
-#: include/nav.php:80 view/theme/frio/theme.php:249 boot.php:871
-msgid "Logout"
+#: include/bb2diaspora.php:234 include/event.php:20 mod/localtime.php:14
+msgid "l F d, Y \\@ g:i A"
 msgstr ""
 
-#: include/nav.php:80 view/theme/frio/theme.php:249
-msgid "End this session"
+#: include/bb2diaspora.php:240 include/event.php:37 include/event.php:57
+#: include/event.php:460
+msgid "Starts:"
 msgstr ""
 
-#: include/nav.php:83 include/identity.php:783 mod/contacts.php:650
-#: mod/contacts.php:846 view/theme/frio/theme.php:252
-msgid "Status"
+#: include/bb2diaspora.php:248 include/event.php:40 include/event.php:63
+#: include/event.php:461
+msgid "Finishes:"
 msgstr ""
 
-#: include/nav.php:83 include/nav.php:163 view/theme/frio/theme.php:252
-msgid "Your posts and conversations"
+#: include/bb2diaspora.php:257 include/event.php:44 include/event.php:70
+#: include/event.php:462 include/identity.php:339 mod/contacts.php:648
+#: mod/directory.php:135 mod/events.php:497 mod/notifications.php:247
+msgid "Location:"
 msgstr ""
 
-#: include/nav.php:84 include/identity.php:629 include/identity.php:758
-#: include/identity.php:791 mod/newmember.php:20 mod/profperm.php:107
-#: mod/contacts.php:652 mod/contacts.php:854 view/theme/frio/theme.php:253
-msgid "Profile"
+#: include/bbcode.php:429 include/bbcode.php:1192 include/bbcode.php:1193
+msgid "Image/photo"
 msgstr ""
 
-#: include/nav.php:84 view/theme/frio/theme.php:253
-msgid "Your profile page"
+#: include/bbcode.php:545
+#, php-format
+msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
 msgstr ""
 
-#: include/nav.php:85 include/identity.php:799 mod/fbrowser.php:33
-#: view/theme/frio/theme.php:254
-msgid "Photos"
+#: include/bbcode.php:1149 include/bbcode.php:1171
+msgid "$1 wrote:"
 msgstr ""
 
-#: include/nav.php:85 view/theme/frio/theme.php:254
-msgid "Your photos"
+#: include/bbcode.php:1201 include/bbcode.php:1202
+msgid "Encrypted content"
 msgstr ""
 
-#: include/nav.php:86 include/identity.php:807 include/identity.php:810
-#: view/theme/frio/theme.php:255
-msgid "Videos"
+#: include/bbcode.php:1321
+msgid "Invalid source protocol"
 msgstr ""
 
-#: include/nav.php:86 view/theme/frio/theme.php:255
-msgid "Your videos"
+#: include/bbcode.php:1332
+msgid "Invalid link protocol"
 msgstr ""
 
-#: include/nav.php:87 include/nav.php:151 include/identity.php:819
-#: include/identity.php:830 mod/cal.php:272 mod/events.php:377
-#: view/theme/frio/theme.php:256 view/theme/frio/theme.php:260
-msgid "Events"
+#: include/contact_widgets.php:12
+msgid "Add New Contact"
 msgstr ""
 
-#: include/nav.php:87 view/theme/frio/theme.php:256
-msgid "Your events"
+#: include/contact_widgets.php:13
+msgid "Enter address or web location"
 msgstr ""
 
-#: include/nav.php:88
-msgid "Personal notes"
+#: include/contact_widgets.php:14
+msgid "Example: bob@example.com, http://example.com/barbara"
 msgstr ""
 
-#: include/nav.php:88
-msgid "Your personal notes"
+#: include/contact_widgets.php:16 include/identity.php:229
+#: mod/allfriends.php:88 mod/dirfind.php:210 mod/match.php:93
+#: mod/suggest.php:104
+msgid "Connect"
 msgstr ""
 
-#: include/nav.php:97 mod/bookmarklet.php:14 boot.php:872
-msgid "Login"
+#: include/contact_widgets.php:31
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/contact_widgets.php:37
+msgid "Find People"
 msgstr ""
 
-#: include/nav.php:97
-msgid "Sign in"
+#: include/contact_widgets.php:38
+msgid "Enter name or interest"
 msgstr ""
 
-#: include/nav.php:107
-msgid "Home Page"
+#: include/contact_widgets.php:40
+msgid "Examples: Robert Morgenstein, Fishing"
 msgstr ""
 
-#: include/nav.php:111 mod/register.php:292 boot.php:848
-msgid "Register"
+#: include/contact_widgets.php:41 mod/contacts.php:818 mod/directory.php:202
+msgid "Find"
 msgstr ""
 
-#: include/nav.php:111
-msgid "Create an account"
+#: include/contact_widgets.php:42 mod/suggest.php:117
+#: view/theme/vier/theme.php:196
+msgid "Friend Suggestions"
 msgstr ""
 
-#: include/nav.php:117 mod/help.php:50 view/theme/vier/theme.php:291
-msgid "Help"
+#: include/contact_widgets.php:43 view/theme/vier/theme.php:195
+msgid "Similar Interests"
 msgstr ""
 
-#: include/nav.php:117
-msgid "Help and documentation"
+#: include/contact_widgets.php:44
+msgid "Random Profile"
 msgstr ""
 
-#: include/nav.php:121
-msgid "Apps"
+#: include/contact_widgets.php:45 view/theme/vier/theme.php:197
+msgid "Invite Friends"
 msgstr ""
 
-#: include/nav.php:121
-msgid "Addon applications, utilities, games"
+#: include/contact_widgets.php:46
+msgid "View Global Directory"
 msgstr ""
 
-#: include/nav.php:125 include/text.php:1090 mod/search.php:152
-msgid "Search"
+#: include/contact_widgets.php:132
+msgid "Networks"
 msgstr ""
 
-#: include/nav.php:125
-msgid "Search site content"
+#: include/contact_widgets.php:135
+msgid "All Networks"
 msgstr ""
 
-#: include/nav.php:128 include/text.php:1098
-msgid "Full Text"
+#: include/contact_widgets.php:170 include/contact_widgets.php:205
+msgid "Everything"
 msgstr ""
 
-#: include/nav.php:129 include/text.php:1099
-msgid "Tags"
+#: include/contact_widgets.php:202
+msgid "Categories"
 msgstr ""
 
-#: include/nav.php:130 include/nav.php:194 include/identity.php:852
-#: include/identity.php:855 include/text.php:1100 mod/viewcontacts.php:124
-#: mod/contacts.php:805 mod/contacts.php:866 view/theme/frio/theme.php:263
-msgid "Contacts"
-msgstr ""
+#: include/contact_widgets.php:267
+#, php-format
+msgid "%d contact in common"
+msgid_plural "%d contacts in common"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/nav.php:133 include/ForumManager.php:118 include/text.php:1103
-#: view/theme/vier/theme.php:248
-msgid "Forums"
+#: include/conversation.php:135 include/conversation.php:287
+#: include/like.php:184 include/text.php:1885
+msgid "event"
 msgstr ""
 
-#: include/nav.php:145 include/nav.php:147 mod/community.php:31
-msgid "Community"
+#: include/conversation.php:138 include/conversation.php:148
+#: include/conversation.php:290 include/conversation.php:299
+#: include/diaspora.php:1663 include/like.php:182 mod/subthread.php:90
+#: mod/tagger.php:64
+msgid "status"
 msgstr ""
 
-#: include/nav.php:145
-msgid "Conversations on this site"
+#: include/conversation.php:143 include/conversation.php:295
+#: include/like.php:182 include/text.php:1887 mod/subthread.php:90
+#: mod/tagger.php:64
+msgid "photo"
 msgstr ""
 
-#: include/nav.php:147
-msgid "Conversations on the network"
+#: include/conversation.php:155 include/diaspora.php:1659 include/like.php:31
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
 msgstr ""
 
-#: include/nav.php:151 include/identity.php:822 include/identity.php:833
-#: view/theme/frio/theme.php:260
-msgid "Events and Calendar"
+#: include/conversation.php:158 include/like.php:35 include/like.php:40
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
 msgstr ""
 
-#: include/nav.php:154
-msgid "Directory"
+#: include/conversation.php:161
+#, php-format
+msgid "%1$s attends %2$s's %3$s"
 msgstr ""
 
-#: include/nav.php:154
-msgid "People directory"
+#: include/conversation.php:164
+#, php-format
+msgid "%1$s doesn't attend %2$s's %3$s"
 msgstr ""
 
-#: include/nav.php:156
-msgid "Information"
+#: include/conversation.php:167
+#, php-format
+msgid "%1$s attends maybe %2$s's %3$s"
 msgstr ""
 
-#: include/nav.php:156
-msgid "Information about this friendica instance"
+#: include/conversation.php:200 mod/dfrn_confirm.php:480
+#, php-format
+msgid "%1$s is now friends with %2$s"
 msgstr ""
 
-#: include/nav.php:160 view/theme/frio/theme.php:259
-msgid "Conversations from your friends"
+#: include/conversation.php:241
+#, php-format
+msgid "%1$s poked %2$s"
 msgstr ""
 
-#: include/nav.php:161
-msgid "Network Reset"
+#: include/conversation.php:262 mod/mood.php:65
+#, php-format
+msgid "%1$s is currently %2$s"
 msgstr ""
 
-#: include/nav.php:161
-msgid "Load Network page with no filters"
+#: include/conversation.php:309 mod/tagger.php:97
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
 msgstr ""
 
-#: include/nav.php:168
-msgid "Friend Requests"
+#: include/conversation.php:336
+msgid "post/item"
 msgstr ""
 
-#: include/nav.php:171 mod/notifications.php:98
-msgid "Notifications"
+#: include/conversation.php:337
+#, php-format
+msgid "%1$s marked %2$s's %3$s as favorite"
 msgstr ""
 
-#: include/nav.php:172
-msgid "See all notifications"
+#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
+#: mod/profiles.php:345
+msgid "Likes"
 msgstr ""
 
-#: include/nav.php:173 mod/settings.php:907
-msgid "Mark as seen"
+#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
+#: mod/profiles.php:349
+msgid "Dislikes"
 msgstr ""
 
-#: include/nav.php:173
-msgid "Mark all system notifications seen"
+#: include/conversation.php:616 include/conversation.php:1550
+#: mod/content.php:375 mod/photos.php:1666
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666
+msgid "Not attending"
 msgstr ""
 
-#: include/nav.php:177 mod/message.php:181 view/theme/frio/theme.php:261
-msgid "Messages"
+#: include/conversation.php:616 mod/content.php:375 mod/photos.php:1666
+msgid "Might attend"
 msgstr ""
 
-#: include/nav.php:177 view/theme/frio/theme.php:261
-msgid "Private mail"
+#: include/conversation.php:753 mod/content.php:455 mod/content.php:761
+#: mod/photos.php:1731 object/Item.php:142
+msgid "Select"
 msgstr ""
 
-#: include/nav.php:178
-msgid "Inbox"
+#: include/conversation.php:754 mod/admin.php:1600 mod/contacts.php:828
+#: mod/contacts.php:1027 mod/content.php:456 mod/content.php:762
+#: mod/photos.php:1732 mod/settings.php:746 object/Item.php:143
+msgid "Delete"
 msgstr ""
 
-#: include/nav.php:179
-msgid "Outbox"
+#: include/conversation.php:797 mod/content.php:489 mod/content.php:917
+#: mod/content.php:918 object/Item.php:345 object/Item.php:346
+#, php-format
+msgid "View %s's profile @ %s"
 msgstr ""
 
-#: include/nav.php:180 mod/message.php:18
-msgid "New Message"
+#: include/conversation.php:809 object/Item.php:333
+msgid "Categories:"
 msgstr ""
 
-#: include/nav.php:183
-msgid "Manage"
+#: include/conversation.php:810 object/Item.php:334
+msgid "Filed under:"
 msgstr ""
 
-#: include/nav.php:183
-msgid "Manage other pages"
+#: include/conversation.php:817 mod/content.php:499 mod/content.php:930
+#: object/Item.php:359
+#, php-format
+msgid "%s from %s"
 msgstr ""
 
-#: include/nav.php:186 mod/settings.php:83
-msgid "Delegations"
+#: include/conversation.php:833 mod/content.php:515
+msgid "View in context"
 msgstr ""
 
-#: include/nav.php:186 mod/delegate.php:132
-msgid "Delegate Page Management"
+#: include/conversation.php:835 include/conversation.php:1307
+#: mod/content.php:517 mod/content.php:955 mod/editpost.php:117
+#: mod/message.php:337 mod/message.php:522 mod/photos.php:1630
+#: mod/wallmessage.php:143 object/Item.php:384
+msgid "Please wait"
 msgstr ""
 
-#: include/nav.php:188 mod/newmember.php:15 mod/settings.php:113
-#: mod/admin.php:1708 mod/admin.php:1984 view/theme/frio/theme.php:262
-msgid "Settings"
+#: include/conversation.php:912
+msgid "remove"
 msgstr ""
 
-#: include/nav.php:188 view/theme/frio/theme.php:262
-msgid "Account settings"
+#: include/conversation.php:916
+msgid "Delete Selected Items"
 msgstr ""
 
-#: include/nav.php:191 include/identity.php:292
-msgid "Profiles"
+#: include/conversation.php:1011 view/theme/frio/theme.php:347
+msgid "Follow Thread"
 msgstr ""
 
-#: include/nav.php:191
-msgid "Manage/Edit Profiles"
+#: include/conversation.php:1148
+#, php-format
+msgid "%s likes this."
 msgstr ""
 
-#: include/nav.php:194 view/theme/frio/theme.php:263
-msgid "Manage/edit friends and contacts"
+#: include/conversation.php:1151
+#, php-format
+msgid "%s doesn't like this."
 msgstr ""
 
-#: include/nav.php:199 mod/admin.php:202
-msgid "Admin"
+#: include/conversation.php:1154
+#, php-format
+msgid "%s attends."
 msgstr ""
 
-#: include/nav.php:199
-msgid "Site setup and configuration"
+#: include/conversation.php:1157
+#, php-format
+msgid "%s doesn't attend."
 msgstr ""
 
-#: include/nav.php:202
-msgid "Navigation"
+#: include/conversation.php:1160
+#, php-format
+msgid "%s attends maybe."
 msgstr ""
 
-#: include/nav.php:202
-msgid "Site map"
+#: include/conversation.php:1171
+msgid "and"
 msgstr ""
 
-#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:42
-#: mod/fbrowser.php:63 mod/photos.php:189 mod/photos.php:1125
-#: mod/photos.php:1258 mod/photos.php:1279 mod/photos.php:1841
-#: mod/photos.php:1855
-msgid "Contact Photos"
+#: include/conversation.php:1177
+#, php-format
+msgid ", and %d other people"
 msgstr ""
 
-#: include/acl_selectors.php:355
-msgid "Post to Email"
+#: include/conversation.php:1186
+#, php-format
+msgid "<span  %1$s>%2$d people</span> like this"
 msgstr ""
 
-#: include/acl_selectors.php:360
+#: include/conversation.php:1187
 #, php-format
-msgid "Connectors disabled, since \"%s\" is enabled."
+msgid "%s like this."
 msgstr ""
 
-#: include/acl_selectors.php:361 mod/settings.php:1189
-msgid "Hide your profile details from unknown viewers?"
+#: include/conversation.php:1190
+#, php-format
+msgid "<span  %1$s>%2$d people</span> don't like this"
 msgstr ""
 
-#: include/acl_selectors.php:367
-msgid "Visible to everybody"
+#: include/conversation.php:1191
+#, php-format
+msgid "%s don't like this."
 msgstr ""
 
-#: include/acl_selectors.php:368 view/theme/vier/config.php:109
-msgid "show"
+#: include/conversation.php:1194
+#, php-format
+msgid "<span  %1$s>%2$d people</span> attend"
 msgstr ""
 
-#: include/acl_selectors.php:369 view/theme/vier/config.php:109
-msgid "don't show"
+#: include/conversation.php:1195
+#, php-format
+msgid "%s attend."
 msgstr ""
 
-#: include/acl_selectors.php:375 mod/editpost.php:125
-msgid "CC: email addresses"
+#: include/conversation.php:1198
+#, php-format
+msgid "<span  %1$s>%2$d people</span> don't attend"
 msgstr ""
 
-#: include/acl_selectors.php:376 mod/editpost.php:132
-msgid "Example: bob@example.com, mary@example.com"
+#: include/conversation.php:1199
+#, php-format
+msgid "%s don't attend."
 msgstr ""
 
-#: include/acl_selectors.php:378 mod/photos.php:1198 mod/photos.php:1595
-#: mod/events.php:511
-msgid "Permissions"
+#: include/conversation.php:1202
+#, php-format
+msgid "<span  %1$s>%2$d people</span> attend maybe"
 msgstr ""
 
-#: include/acl_selectors.php:379
-msgid "Close"
+#: include/conversation.php:1203
+#, php-format
+msgid "%s anttend maybe."
 msgstr ""
 
-#: include/contact_selectors.php:32
-msgid "Unknown | Not categorised"
+#: include/conversation.php:1232 include/conversation.php:1248
+msgid "Visible to <strong>everybody</strong>"
 msgstr ""
 
-#: include/contact_selectors.php:33
-msgid "Block immediately"
+#: include/conversation.php:1233 include/conversation.php:1249
+#: mod/message.php:271 mod/message.php:278 mod/message.php:418
+#: mod/message.php:425 mod/wallmessage.php:117 mod/wallmessage.php:124
+msgid "Please enter a link URL:"
 msgstr ""
 
-#: include/contact_selectors.php:34
-msgid "Shady, spammer, self-marketer"
+#: include/conversation.php:1234 include/conversation.php:1250
+msgid "Please enter a video link/URL:"
 msgstr ""
 
-#: include/contact_selectors.php:35
-msgid "Known to me, but no opinion"
+#: include/conversation.php:1235 include/conversation.php:1251
+msgid "Please enter an audio link/URL:"
 msgstr ""
 
-#: include/contact_selectors.php:36
-msgid "OK, probably harmless"
+#: include/conversation.php:1236 include/conversation.php:1252
+msgid "Tag term:"
 msgstr ""
 
-#: include/contact_selectors.php:37
-msgid "Reputable, has my trust"
+#: include/conversation.php:1237 include/conversation.php:1253 mod/filer.php:31
+msgid "Save to Folder:"
 msgstr ""
 
-#: include/contact_selectors.php:56 mod/admin.php:1070
-msgid "Frequently"
+#: include/conversation.php:1238 include/conversation.php:1254
+msgid "Where are you right now?"
 msgstr ""
 
-#: include/contact_selectors.php:57 mod/admin.php:1071
-msgid "Hourly"
+#: include/conversation.php:1239
+msgid "Delete item(s)?"
 msgstr ""
 
-#: include/contact_selectors.php:58 mod/admin.php:1072
-msgid "Twice daily"
+#: include/conversation.php:1288
+msgid "Share"
 msgstr ""
 
-#: include/contact_selectors.php:59 mod/admin.php:1073
-msgid "Daily"
+#: include/conversation.php:1289 mod/editpost.php:103 mod/message.php:335
+#: mod/message.php:519 mod/wallmessage.php:141
+msgid "Upload photo"
 msgstr ""
 
-#: include/contact_selectors.php:60
-msgid "Weekly"
+#: include/conversation.php:1290 mod/editpost.php:104
+msgid "upload photo"
 msgstr ""
 
-#: include/contact_selectors.php:61
-msgid "Monthly"
+#: include/conversation.php:1291 mod/editpost.php:105
+msgid "Attach file"
 msgstr ""
 
-#: include/contact_selectors.php:76 mod/dfrn_request.php:886
-msgid "Friendica"
+#: include/conversation.php:1292 mod/editpost.php:106
+msgid "attach file"
 msgstr ""
 
-#: include/contact_selectors.php:77
-msgid "OStatus"
+#: include/conversation.php:1293 mod/editpost.php:107 mod/message.php:336
+#: mod/message.php:520 mod/wallmessage.php:142
+msgid "Insert web link"
 msgstr ""
 
-#: include/contact_selectors.php:78
-msgid "RSS/Atom"
+#: include/conversation.php:1294 mod/editpost.php:108
+msgid "web link"
 msgstr ""
 
-#: include/contact_selectors.php:79 include/contact_selectors.php:86
-#: mod/admin.php:1580 mod/admin.php:1593 mod/admin.php:1606 mod/admin.php:1624
-msgid "Email"
+#: include/conversation.php:1295 mod/editpost.php:109
+msgid "Insert video link"
 msgstr ""
 
-#: include/contact_selectors.php:80 mod/dfrn_request.php:888
-#: mod/settings.php:849
-msgid "Diaspora"
+#: include/conversation.php:1296 mod/editpost.php:110
+msgid "video link"
 msgstr ""
 
-#: include/contact_selectors.php:81
-msgid "Facebook"
+#: include/conversation.php:1297 mod/editpost.php:111
+msgid "Insert audio link"
 msgstr ""
 
-#: include/contact_selectors.php:82
-msgid "Zot!"
+#: include/conversation.php:1298 mod/editpost.php:112
+msgid "audio link"
 msgstr ""
 
-#: include/contact_selectors.php:83
-msgid "LinkedIn"
+#: include/conversation.php:1299 mod/editpost.php:113
+msgid "Set your location"
 msgstr ""
 
-#: include/contact_selectors.php:84
-msgid "XMPP/IM"
+#: include/conversation.php:1300 mod/editpost.php:114
+msgid "set location"
 msgstr ""
 
-#: include/contact_selectors.php:85
-msgid "MySpace"
+#: include/conversation.php:1301 mod/editpost.php:115
+msgid "Clear browser location"
 msgstr ""
 
-#: include/contact_selectors.php:87
-msgid "Google+"
+#: include/conversation.php:1302 mod/editpost.php:116
+msgid "clear location"
 msgstr ""
 
-#: include/contact_selectors.php:88
-msgid "pump.io"
+#: include/conversation.php:1304 mod/editpost.php:130
+msgid "Set title"
 msgstr ""
 
-#: include/contact_selectors.php:89
-msgid "Twitter"
+#: include/conversation.php:1306 mod/editpost.php:132
+msgid "Categories (comma-separated list)"
 msgstr ""
 
-#: include/contact_selectors.php:90
-msgid "Diaspora Connector"
+#: include/conversation.php:1308 mod/editpost.php:118
+msgid "Permission settings"
 msgstr ""
 
-#: include/contact_selectors.php:91
-msgid "GNU Social Connector"
+#: include/conversation.php:1309 mod/editpost.php:147
+msgid "permissions"
 msgstr ""
 
-#: include/contact_selectors.php:92
-msgid "pnut"
+#: include/conversation.php:1317 mod/editpost.php:127
+msgid "Public post"
 msgstr ""
 
-#: include/contact_selectors.php:93
-msgid "App.net"
+#: include/conversation.php:1322 mod/content.php:739 mod/editpost.php:138
+#: mod/events.php:507 mod/photos.php:1650 mod/photos.php:1692
+#: mod/photos.php:1772 object/Item.php:706
+msgid "Preview"
 msgstr ""
 
-#: include/enotify.php:27
-msgid "Friendica Notification"
+#: include/conversation.php:1326 include/items.php:2139 mod/contacts.php:459
+#: mod/dfrn_request.php:895 mod/editpost.php:141 mod/fbrowser.php:103
+#: mod/fbrowser.php:138 mod/follow.php:161 mod/message.php:210
+#: mod/photos.php:248 mod/photos.php:340 mod/settings.php:684
+#: mod/settings.php:710 mod/suggest.php:35 mod/tagrm.php:14 mod/tagrm.php:99
+#: mod/unfollow.php:117 mod/videos.php:135
+msgid "Cancel"
 msgstr ""
 
-#: include/enotify.php:30
-msgid "Thank You,"
+#: include/conversation.php:1332
+msgid "Post to Groups"
 msgstr ""
 
-#: include/enotify.php:33
-#, php-format
+#: include/conversation.php:1333
+msgid "Post to Contacts"
+msgstr ""
+
+#: include/conversation.php:1334
+msgid "Private post"
+msgstr ""
+
+#: include/conversation.php:1339 include/identity.php:267 mod/editpost.php:145
+msgid "Message"
+msgstr ""
+
+#: include/conversation.php:1340 mod/editpost.php:146
+msgid "Browser"
+msgstr ""
+
+#: include/conversation.php:1522
+msgid "View all"
+msgstr ""
+
+#: include/conversation.php:1544
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/conversation.php:1547
+msgid "Dislike"
+msgid_plural "Dislikes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/conversation.php:1553
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/dbstructure.php:26
+msgid "There are no tables on MyISAM."
+msgstr ""
+
+#: include/dbstructure.php:67
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe friendica developers released update %s recently,\n"
+"\t\t\tbut when I tried to install it, something went terribly wrong.\n"
+"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n"
+"\t\t\tfriendica developer if you can not help me on your own. My database "
+"might be invalid."
+msgstr ""
+
+#: include/dbstructure.php:72
+#, php-format
+msgid ""
+"The error message is\n"
+"[pre]%s[/pre]"
+msgstr ""
+
+#: include/dbstructure.php:197
+#, php-format
+msgid ""
+"\n"
+"Error %d occurred during database update:\n"
+"%s\n"
+msgstr ""
+
+#: include/dbstructure.php:200
+msgid "Errors encountered performing database changes: "
+msgstr ""
+
+#: include/dbstructure.php:208
+msgid ": Database update"
+msgstr ""
+
+#: include/dbstructure.php:440
+#, php-format
+msgid "%s: updating %s table."
+msgstr ""
+
+#: include/delivery.php:429
+msgid "(no subject)"
+msgstr ""
+
+#: include/delivery.php:441 include/enotify.php:47
+msgid "noreply"
+msgstr ""
+
+#: include/dfrn.php:1331
+#, php-format
+msgid "%s\\'s birthday"
+msgstr ""
+
+#: include/diaspora.php:2226
+msgid "Sharing notification from Diaspora network"
+msgstr ""
+
+#: include/diaspora.php:3183
+msgid "Attachments:"
+msgstr ""
+
+#: include/enotify.php:28
+msgid "Friendica Notification"
+msgstr ""
+
+#: include/enotify.php:31
+msgid "Thank You,"
+msgstr ""
+
+#: include/enotify.php:34
+#, php-format
 msgid "%s Administrator"
 msgstr ""
 
-#: include/enotify.php:35
+#: include/enotify.php:36
 #, php-format
 msgid "%1$s, %2$s Administrator"
 msgstr ""
 
-#: include/enotify.php:78
+#: include/enotify.php:81
 #, php-format
 msgid "%s <!item_type!>"
 msgstr ""
 
-#: include/enotify.php:91
+#: include/enotify.php:94
 #, php-format
 msgid "[Friendica:Notify] New mail received at %s"
 msgstr ""
 
-#: include/enotify.php:93
+#: include/enotify.php:96
 #, php-format
 msgid "%1$s sent you a new private message at %2$s."
 msgstr ""
 
-#: include/enotify.php:94
+#: include/enotify.php:97
 #, php-format
 msgid "%1$s sent you %2$s."
 msgstr ""
 
-#: include/enotify.php:94
+#: include/enotify.php:97
 msgid "a private message"
 msgstr ""
 
-#: include/enotify.php:96
+#: include/enotify.php:99
 #, php-format
 msgid "Please visit %s to view and/or reply to your private messages."
 msgstr ""
 
-#: include/enotify.php:142
+#: include/enotify.php:145
 #, php-format
 msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
 msgstr ""
 
-#: include/enotify.php:149
+#: include/enotify.php:152
 #, php-format
 msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
 msgstr ""
 
-#: include/enotify.php:157
+#: include/enotify.php:160
 #, php-format
 msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
 msgstr ""
 
-#: include/enotify.php:167
+#: include/enotify.php:170
 #, php-format
 msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
 msgstr ""
 
-#: include/enotify.php:169
+#: include/enotify.php:172
 #, php-format
 msgid "%s commented on an item/conversation you have been following."
 msgstr ""
 
-#: include/enotify.php:172 include/enotify.php:186 include/enotify.php:200
-#: include/enotify.php:214 include/enotify.php:232 include/enotify.php:246
+#: include/enotify.php:175 include/enotify.php:189 include/enotify.php:203
+#: include/enotify.php:217 include/enotify.php:235 include/enotify.php:249
 #, php-format
 msgid "Please visit %s to view and/or reply to the conversation."
 msgstr ""
 
-#: include/enotify.php:179
+#: include/enotify.php:182
 #, php-format
 msgid "[Friendica:Notify] %s posted to your profile wall"
 msgstr ""
 
-#: include/enotify.php:181
+#: include/enotify.php:184
 #, php-format
 msgid "%1$s posted to your profile wall at %2$s"
 msgstr ""
 
-#: include/enotify.php:182
+#: include/enotify.php:185
 #, php-format
 msgid "%1$s posted to [url=%2$s]your wall[/url]"
 msgstr ""
 
-#: include/enotify.php:193
+#: include/enotify.php:196
 #, php-format
 msgid "[Friendica:Notify] %s tagged you"
 msgstr ""
 
-#: include/enotify.php:195
+#: include/enotify.php:198
 #, php-format
 msgid "%1$s tagged you at %2$s"
 msgstr ""
 
-#: include/enotify.php:196
+#: include/enotify.php:199
 #, php-format
 msgid "%1$s [url=%2$s]tagged you[/url]."
 msgstr ""
 
-#: include/enotify.php:207
+#: include/enotify.php:210
 #, php-format
 msgid "[Friendica:Notify] %s shared a new post"
 msgstr ""
 
-#: include/enotify.php:209
+#: include/enotify.php:212
 #, php-format
 msgid "%1$s shared a new post at %2$s"
 msgstr ""
 
-#: include/enotify.php:210
+#: include/enotify.php:213
 #, php-format
 msgid "%1$s [url=%2$s]shared a post[/url]."
 msgstr ""
 
-#: include/enotify.php:221
+#: include/enotify.php:224
 #, php-format
 msgid "[Friendica:Notify] %1$s poked you"
 msgstr ""
 
-#: include/enotify.php:223
+#: include/enotify.php:226
 #, php-format
 msgid "%1$s poked you at %2$s"
 msgstr ""
 
-#: include/enotify.php:224
+#: include/enotify.php:227
 #, php-format
 msgid "%1$s [url=%2$s]poked you[/url]."
 msgstr ""
 
-#: include/enotify.php:239
+#: include/enotify.php:242
 #, php-format
 msgid "[Friendica:Notify] %s tagged your post"
 msgstr ""
 
-#: include/enotify.php:241
+#: include/enotify.php:244
 #, php-format
 msgid "%1$s tagged your post at %2$s"
 msgstr ""
 
-#: include/enotify.php:242
+#: include/enotify.php:245
 #, php-format
 msgid "%1$s tagged [url=%2$s]your post[/url]"
 msgstr ""
 
-#: include/enotify.php:253
+#: include/enotify.php:256
 msgid "[Friendica:Notify] Introduction received"
 msgstr ""
 
-#: include/enotify.php:255
+#: include/enotify.php:258
 #, php-format
 msgid "You've received an introduction from '%1$s' at %2$s"
 msgstr ""
 
-#: include/enotify.php:256
+#: include/enotify.php:259
 #, php-format
 msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
 msgstr ""
 
-#: include/enotify.php:260 include/enotify.php:303
+#: include/enotify.php:263 include/enotify.php:306
 #, php-format
 msgid "You may visit their profile at %s"
 msgstr ""
 
-#: include/enotify.php:262
+#: include/enotify.php:265
 #, php-format
 msgid "Please visit %s to approve or reject the introduction."
 msgstr ""
 
-#: include/enotify.php:270
+#: include/enotify.php:273
 msgid "[Friendica:Notify] A new person is sharing with you"
 msgstr ""
 
-#: include/enotify.php:272 include/enotify.php:273
+#: include/enotify.php:275 include/enotify.php:276
 #, php-format
 msgid "%1$s is sharing with you at %2$s"
 msgstr ""
 
-#: include/enotify.php:279
+#: include/enotify.php:282
 msgid "[Friendica:Notify] You have a new follower"
 msgstr ""
 
-#: include/enotify.php:281 include/enotify.php:282
+#: include/enotify.php:284 include/enotify.php:285
 #, php-format
 msgid "You have a new follower at %2$s : %1$s"
 msgstr ""
 
-#: include/enotify.php:293
+#: include/enotify.php:296
 msgid "[Friendica:Notify] Friend suggestion received"
 msgstr ""
 
-#: include/enotify.php:295
+#: include/enotify.php:298
 #, php-format
 msgid "You've received a friend suggestion from '%1$s' at %2$s"
 msgstr ""
 
-#: include/enotify.php:296
+#: include/enotify.php:299
 #, php-format
 msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
 msgstr ""
 
-#: include/enotify.php:301
+#: include/enotify.php:304
 msgid "Name:"
 msgstr ""
 
-#: include/enotify.php:302
+#: include/enotify.php:305
 msgid "Photo:"
 msgstr ""
 
-#: include/enotify.php:305
+#: include/enotify.php:308
 #, php-format
 msgid "Please visit %s to approve or reject the suggestion."
 msgstr ""
 
-#: include/enotify.php:313 include/enotify.php:327
+#: include/enotify.php:316 include/enotify.php:330
 msgid "[Friendica:Notify] Connection accepted"
 msgstr ""
 
-#: include/enotify.php:315 include/enotify.php:329
+#: include/enotify.php:318 include/enotify.php:332
 #, php-format
 msgid "'%1$s' has accepted your connection request at %2$s"
 msgstr ""
 
-#: include/enotify.php:316 include/enotify.php:330
+#: include/enotify.php:319 include/enotify.php:333
 #, php-format
 msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
 msgstr ""
 
-#: include/enotify.php:320
+#: include/enotify.php:323
 msgid ""
 "You are now mutual friends and may exchange status updates, photos, and "
 "email without restriction."
 msgstr ""
 
-#: include/enotify.php:322
+#: include/enotify.php:325
 #, php-format
 msgid "Please visit %s if you wish to make any changes to this relationship."
 msgstr ""
 
-#: include/enotify.php:334
+#: include/enotify.php:337
 #, php-format
 msgid ""
 "'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
@@ -1836,1206 +1816,1090 @@ msgid ""
 "automatically."
 msgstr ""
 
-#: include/enotify.php:336
+#: include/enotify.php:339
 #, php-format
 msgid ""
 "'%1$s' may choose to extend this into a two-way or more permissive "
 "relationship in the future."
 msgstr ""
 
-#: include/enotify.php:338
+#: include/enotify.php:341
 #, php-format
 msgid "Please visit %s  if you wish to make any changes to this relationship."
 msgstr ""
 
-#: include/enotify.php:348
+#: include/enotify.php:351
 msgid "[Friendica System:Notify] registration request"
 msgstr ""
 
-#: include/enotify.php:350
+#: include/enotify.php:353
 #, php-format
 msgid "You've received a registration request from '%1$s' at %2$s"
 msgstr ""
 
-#: include/enotify.php:351
+#: include/enotify.php:354
 #, php-format
 msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
 msgstr ""
 
-#: include/enotify.php:355
+#: include/enotify.php:358
 #, php-format
 msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
 msgstr ""
 
-#: include/enotify.php:358
+#: include/enotify.php:361
 #, php-format
 msgid "Please visit %s to approve or reject the request."
 msgstr ""
 
-#: include/group.php:25
-msgid ""
-"A deleted group with this name was revived. Existing item permissions "
-"<strong>may</strong> apply to this group and any future members. If this is "
-"not what you intended, please create another group with a different name."
+#: include/event.php:409
+msgid "all-day"
 msgstr ""
 
-#: include/group.php:201
-msgid "Default privacy group for new contacts"
+#: include/event.php:411
+msgid "Sun"
 msgstr ""
 
-#: include/group.php:234
-msgid "Everybody"
+#: include/event.php:412
+msgid "Mon"
 msgstr ""
 
-#: include/group.php:257
-msgid "edit"
+#: include/event.php:413
+msgid "Tue"
 msgstr ""
 
-#: include/group.php:278 mod/newmember.php:39
-msgid "Groups"
+#: include/event.php:414
+msgid "Wed"
 msgstr ""
 
-#: include/group.php:280
-msgid "Edit groups"
+#: include/event.php:415
+msgid "Thu"
 msgstr ""
 
-#: include/group.php:282
-msgid "Edit group"
+#: include/event.php:416
+msgid "Fri"
 msgstr ""
 
-#: include/group.php:283
-msgid "Create a new group"
+#: include/event.php:417
+msgid "Sat"
 msgstr ""
 
-#: include/group.php:284 mod/group.php:100 mod/group.php:197
-msgid "Group Name: "
+#: include/event.php:419 include/text.php:1207 mod/settings.php:983
+msgid "Sunday"
 msgstr ""
 
-#: include/group.php:286
-msgid "Contacts not in any group"
+#: include/event.php:420 include/text.php:1207 mod/settings.php:983
+msgid "Monday"
 msgstr ""
 
-#: include/group.php:288 mod/network.php:210
-msgid "add"
+#: include/event.php:421 include/text.php:1207
+msgid "Tuesday"
 msgstr ""
 
-#: include/oembed.php:253
-msgid "Embedded content"
+#: include/event.php:422 include/text.php:1207
+msgid "Wednesday"
 msgstr ""
 
-#: include/oembed.php:261
-msgid "Embedding disabled"
+#: include/event.php:423 include/text.php:1207
+msgid "Thursday"
 msgstr ""
 
-#: include/Contact.php:380 include/Contact.php:393 include/Contact.php:438
-#: include/conversation.php:1012 include/conversation.php:1028
-#: mod/allfriends.php:70 mod/directory.php:153 mod/match.php:76
-#: mod/suggest.php:84 mod/dirfind.php:211
-msgid "View Profile"
+#: include/event.php:424 include/text.php:1207
+msgid "Friday"
 msgstr ""
 
-#: include/Contact.php:394 include/contact_widgets.php:38
-#: include/conversation.php:1025 mod/allfriends.php:71 mod/match.php:77
-#: mod/suggest.php:85 mod/dirfind.php:212 mod/follow.php:108
-#: mod/contacts.php:615
-msgid "Connect/Follow"
+#: include/event.php:425 include/text.php:1207
+msgid "Saturday"
 msgstr ""
 
-#: include/Contact.php:437 include/conversation.php:1011
-msgid "View Status"
+#: include/event.php:427
+msgid "Jan"
 msgstr ""
 
-#: include/Contact.php:439 include/conversation.php:1013
-msgid "View Photos"
+#: include/event.php:428
+msgid "Feb"
 msgstr ""
 
-#: include/Contact.php:440 include/conversation.php:1014
-msgid "Network Posts"
+#: include/event.php:429
+msgid "Mar"
 msgstr ""
 
-#: include/Contact.php:441 include/conversation.php:1015
-msgid "View Contact"
+#: include/event.php:430
+msgid "Apr"
 msgstr ""
 
-#: include/Contact.php:442
-msgid "Drop Contact"
+#: include/event.php:431 include/event.php:444 include/text.php:1211
+msgid "May"
 msgstr ""
 
-#: include/Contact.php:443 include/conversation.php:1016
-msgid "Send PM"
+#: include/event.php:432
+msgid "Jun"
 msgstr ""
 
-#: include/Contact.php:444 include/conversation.php:1020
-msgid "Poke"
+#: include/event.php:433
+msgid "Jul"
 msgstr ""
 
-#: include/Contact.php:813
-msgid "Organisation"
+#: include/event.php:434
+msgid "Aug"
 msgstr ""
 
-#: include/Contact.php:816
-msgid "News"
+#: include/event.php:435
+msgid "Sept"
 msgstr ""
 
-#: include/Contact.php:819
-msgid "Forum"
+#: include/event.php:436
+msgid "Oct"
 msgstr ""
 
-#: include/ForumManager.php:120 view/theme/vier/theme.php:250
-msgid "External link to forum"
+#: include/event.php:437
+msgid "Nov"
 msgstr ""
 
-#: include/ForumManager.php:123 include/contact_widgets.php:271
-#: include/items.php:2385 mod/content.php:625 object/Item.php:419
-#: view/theme/vier/theme.php:253 src/App.php:528
-msgid "show more"
+#: include/event.php:438
+msgid "Dec"
 msgstr ""
 
-#: include/bbcode.php:428 include/bbcode.php:1186 include/bbcode.php:1187
-msgid "Image/photo"
+#: include/event.php:440 include/text.php:1211
+msgid "January"
 msgstr ""
 
-#: include/bbcode.php:544
-#, php-format
-msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
+#: include/event.php:441 include/text.php:1211
+msgid "February"
 msgstr ""
 
-#: include/bbcode.php:1143 include/bbcode.php:1165
-msgid "$1 wrote:"
+#: include/event.php:442 include/text.php:1211
+msgid "March"
 msgstr ""
 
-#: include/bbcode.php:1195 include/bbcode.php:1196
-msgid "Encrypted content"
+#: include/event.php:443 include/text.php:1211
+msgid "April"
 msgstr ""
 
-#: include/bbcode.php:1315
-msgid "Invalid source protocol"
+#: include/event.php:445 include/text.php:1211
+msgid "June"
 msgstr ""
 
-#: include/bbcode.php:1326
-msgid "Invalid link protocol"
+#: include/event.php:446 include/text.php:1211
+msgid "July"
 msgstr ""
 
-#: include/contact_widgets.php:11
-msgid "Add New Contact"
+#: include/event.php:447 include/text.php:1211
+msgid "August"
 msgstr ""
 
-#: include/contact_widgets.php:12
-msgid "Enter address or web location"
+#: include/event.php:448 include/text.php:1211
+msgid "September"
 msgstr ""
 
-#: include/contact_widgets.php:13
-msgid "Example: bob@example.com, http://example.com/barbara"
+#: include/event.php:449 include/text.php:1211
+msgid "October"
 msgstr ""
 
-#: include/contact_widgets.php:15 include/identity.php:228
-#: mod/allfriends.php:87 mod/match.php:92 mod/suggest.php:103
-#: mod/dirfind.php:209
-msgid "Connect"
+#: include/event.php:450 include/text.php:1211
+msgid "November"
 msgstr ""
 
-#: include/contact_widgets.php:30
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] ""
-msgstr[1] ""
+#: include/event.php:451 include/text.php:1211
+msgid "December"
+msgstr ""
 
-#: include/contact_widgets.php:36
-msgid "Find People"
+#: include/event.php:453 mod/cal.php:281 mod/events.php:387
+msgid "today"
 msgstr ""
 
-#: include/contact_widgets.php:37
-msgid "Enter name or interest"
+#: include/event.php:458
+msgid "No events to display"
 msgstr ""
 
-#: include/contact_widgets.php:39
-msgid "Examples: Robert Morgenstein, Fishing"
+#: include/event.php:571
+msgid "l, F j"
 msgstr ""
 
-#: include/contact_widgets.php:40 mod/directory.php:202 mod/contacts.php:811
-msgid "Find"
+#: include/event.php:593
+msgid "Edit event"
 msgstr ""
 
-#: include/contact_widgets.php:41 mod/suggest.php:116
-#: view/theme/vier/theme.php:195
-msgid "Friend Suggestions"
+#: include/event.php:594
+msgid "Delete event"
 msgstr ""
 
-#: include/contact_widgets.php:42 view/theme/vier/theme.php:194
-msgid "Similar Interests"
+#: include/event.php:620 include/text.php:1609 include/text.php:1616
+msgid "link to source"
 msgstr ""
 
-#: include/contact_widgets.php:43
-msgid "Random Profile"
+#: include/event.php:878
+msgid "Export"
 msgstr ""
 
-#: include/contact_widgets.php:44 view/theme/vier/theme.php:196
-msgid "Invite Friends"
+#: include/event.php:879
+msgid "Export calendar as ical"
 msgstr ""
 
-#: include/contact_widgets.php:45
-msgid "View Global Directory"
+#: include/event.php:880
+msgid "Export calendar as csv"
 msgstr ""
 
-#: include/contact_widgets.php:131
-msgid "Networks"
+#: include/follow.php:85 mod/dfrn_request.php:515
+msgid "Disallowed profile URL."
 msgstr ""
 
-#: include/contact_widgets.php:134
-msgid "All Networks"
+#: include/follow.php:90 mod/admin.php:289 mod/admin.php:307
+#: mod/dfrn_request.php:521 mod/friendica.php:116
+msgid "Blocked domain"
 msgstr ""
 
-#: include/contact_widgets.php:169 include/contact_widgets.php:204
-msgid "Everything"
+#: include/follow.php:95
+msgid "Connect URL missing."
 msgstr ""
 
-#: include/contact_widgets.php:201
-msgid "Categories"
+#: include/follow.php:123
+msgid ""
+"This site is not configured to allow communications with other networks."
 msgstr ""
 
-#: include/contact_widgets.php:266
-#, php-format
-msgid "%d contact in common"
-msgid_plural "%d contacts in common"
-msgstr[0] ""
-msgstr[1] ""
-
-#: include/conversation.php:160
-#, php-format
-msgid "%1$s attends %2$s's %3$s"
+#: include/follow.php:124 include/follow.php:138
+msgid "No compatible communication protocols or feeds were discovered."
 msgstr ""
 
-#: include/conversation.php:163
-#, php-format
-msgid "%1$s doesn't attend %2$s's %3$s"
+#: include/follow.php:136
+msgid "The profile address specified does not provide adequate information."
 msgstr ""
 
-#: include/conversation.php:166
-#, php-format
-msgid "%1$s attends maybe %2$s's %3$s"
+#: include/follow.php:141
+msgid "An author or name was not found."
 msgstr ""
 
-#: include/conversation.php:199 mod/dfrn_confirm.php:480
-#, php-format
-msgid "%1$s is now friends with %2$s"
+#: include/follow.php:144
+msgid "No browser URL could be matched to this address."
 msgstr ""
 
-#: include/conversation.php:240
-#, php-format
-msgid "%1$s poked %2$s"
+#: include/follow.php:147
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
 msgstr ""
 
-#: include/conversation.php:261 mod/mood.php:64
-#, php-format
-msgid "%1$s is currently %2$s"
+#: include/follow.php:148
+msgid "Use mailto: in front of address to force email check."
 msgstr ""
 
-#: include/conversation.php:308 mod/tagger.php:96
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
+#: include/follow.php:154
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
 msgstr ""
 
-#: include/conversation.php:335
-msgid "post/item"
+#: include/follow.php:159
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
 msgstr ""
 
-#: include/conversation.php:336
-#, php-format
-msgid "%1$s marked %2$s's %3$s as favorite"
+#: include/follow.php:260
+msgid "Unable to retrieve contact information."
 msgstr ""
 
-#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664
-#: mod/profiles.php:344
-msgid "Likes"
+#: include/identity.php:46
+msgid "Requested account is not available."
 msgstr ""
 
-#: include/conversation.php:614 mod/content.php:373 mod/photos.php:1664
-#: mod/profiles.php:348
-msgid "Dislikes"
+#: include/identity.php:55 mod/profile.php:23
+msgid "Requested profile is not available."
 msgstr ""
 
-#: include/conversation.php:615 include/conversation.php:1549
-#: mod/content.php:374 mod/photos.php:1665
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] ""
-msgstr[1] ""
-
-#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
-msgid "Not attending"
+#: include/identity.php:99 include/identity.php:322 include/identity.php:755
+msgid "Edit profile"
 msgstr ""
 
-#: include/conversation.php:615 mod/content.php:374 mod/photos.php:1665
-msgid "Might attend"
+#: include/identity.php:262
+msgid "Atom feed"
 msgstr ""
 
-#: include/conversation.php:752 mod/content.php:454 mod/content.php:760
-#: mod/photos.php:1730 object/Item.php:137
-msgid "Select"
+#: include/identity.php:293 include/nav.php:192
+msgid "Profiles"
 msgstr ""
 
-#: include/conversation.php:753 mod/content.php:455 mod/content.php:761
-#: mod/photos.php:1731 mod/contacts.php:821 mod/contacts.php:1020
-#: mod/settings.php:745 mod/admin.php:1598 object/Item.php:138
-msgid "Delete"
+#: include/identity.php:293
+msgid "Manage/edit profiles"
 msgstr ""
 
-#: include/conversation.php:796 mod/content.php:488 mod/content.php:916
-#: mod/content.php:917 object/Item.php:352 object/Item.php:353
-#, php-format
-msgid "View %s's profile @ %s"
+#: include/identity.php:298 include/identity.php:324 mod/profiles.php:791
+msgid "Change profile photo"
 msgstr ""
 
-#: include/conversation.php:808 object/Item.php:340
-msgid "Categories:"
+#: include/identity.php:299 mod/profiles.php:792
+msgid "Create New Profile"
 msgstr ""
 
-#: include/conversation.php:809 object/Item.php:341
-msgid "Filed under:"
+#: include/identity.php:309 mod/profiles.php:781
+msgid "Profile Image"
 msgstr ""
 
-#: include/conversation.php:816 mod/content.php:498 mod/content.php:929
-#: object/Item.php:366
-#, php-format
-msgid "%s from %s"
+#: include/identity.php:312 mod/profiles.php:783
+msgid "visible to everybody"
 msgstr ""
 
-#: include/conversation.php:832 mod/content.php:514
-msgid "View in context"
+#: include/identity.php:313 mod/profiles.php:688 mod/profiles.php:784
+msgid "Edit visibility"
 msgstr ""
 
-#: include/conversation.php:834 include/conversation.php:1306
-#: mod/content.php:516 mod/content.php:954 mod/editpost.php:116
-#: mod/message.php:339 mod/message.php:524 mod/photos.php:1629
-#: mod/wallmessage.php:142 object/Item.php:391
-msgid "Please wait"
+#: include/identity.php:341 include/identity.php:642 mod/directory.php:137
+#: mod/notifications.php:253
+msgid "Gender:"
 msgstr ""
 
-#: include/conversation.php:911
-msgid "remove"
+#: include/identity.php:344 include/identity.php:665 mod/directory.php:139
+msgid "Status:"
 msgstr ""
 
-#: include/conversation.php:915
-msgid "Delete Selected Items"
+#: include/identity.php:346 include/identity.php:682 mod/directory.php:141
+msgid "Homepage:"
 msgstr ""
 
-#: include/conversation.php:1010 view/theme/frio/theme.php:346
-msgid "Follow Thread"
+#: include/identity.php:348 include/identity.php:702 mod/contacts.php:652
+#: mod/directory.php:143 mod/notifications.php:249
+msgid "About:"
 msgstr ""
 
-#: include/conversation.php:1147
-#, php-format
-msgid "%s likes this."
+#: include/identity.php:350 mod/contacts.php:650
+msgid "XMPP:"
 msgstr ""
 
-#: include/conversation.php:1150
-#, php-format
-msgid "%s doesn't like this."
+#: include/identity.php:436 mod/contacts.php:59 mod/notifications.php:261
+msgid "Network:"
 msgstr ""
 
-#: include/conversation.php:1153
-#, php-format
-msgid "%s attends."
+#: include/identity.php:465 include/identity.php:556
+msgid "g A l F d"
 msgstr ""
 
-#: include/conversation.php:1156
-#, php-format
-msgid "%s doesn't attend."
+#: include/identity.php:466 include/identity.php:557
+msgid "F d"
 msgstr ""
 
-#: include/conversation.php:1159
-#, php-format
-msgid "%s attends maybe."
+#: include/identity.php:518 include/identity.php:604
+msgid "[today]"
 msgstr ""
 
-#: include/conversation.php:1170
-msgid "and"
+#: include/identity.php:530
+msgid "Birthday Reminders"
 msgstr ""
 
-#: include/conversation.php:1176
-#, php-format
-msgid ", and %d other people"
+#: include/identity.php:531
+msgid "Birthdays this week:"
 msgstr ""
 
-#: include/conversation.php:1185
-#, php-format
-msgid "<span  %1$s>%2$d people</span> like this"
+#: include/identity.php:591
+msgid "[No description]"
 msgstr ""
 
-#: include/conversation.php:1186
-#, php-format
-msgid "%s like this."
+#: include/identity.php:618
+msgid "Event Reminders"
 msgstr ""
 
-#: include/conversation.php:1189
-#, php-format
-msgid "<span  %1$s>%2$d people</span> don't like this"
+#: include/identity.php:619
+msgid "Events this week:"
 msgstr ""
 
-#: include/conversation.php:1190
-#, php-format
-msgid "%s don't like this."
+#: include/identity.php:630 include/identity.php:759 include/identity.php:792
+#: include/nav.php:85 mod/newmember.php:20 mod/profperm.php:107
+#: mod/contacts.php:659 mod/contacts.php:861 view/theme/frio/theme.php:254
+msgid "Profile"
 msgstr ""
 
-#: include/conversation.php:1193
-#, php-format
-msgid "<span  %1$s>%2$d people</span> attend"
+#: include/identity.php:639 mod/settings.php:1288
+msgid "Full Name:"
 msgstr ""
 
-#: include/conversation.php:1194
-#, php-format
-msgid "%s attend."
+#: include/identity.php:646
+msgid "j F, Y"
 msgstr ""
 
-#: include/conversation.php:1197
-#, php-format
-msgid "<span  %1$s>%2$d people</span> don't attend"
+#: include/identity.php:647
+msgid "j F"
 msgstr ""
 
-#: include/conversation.php:1198
-#, php-format
-msgid "%s don't attend."
+#: include/identity.php:661
+msgid "Age:"
 msgstr ""
 
-#: include/conversation.php:1201
+#: include/identity.php:674
 #, php-format
-msgid "<span  %1$s>%2$d people</span> attend maybe"
+msgid "for %1$d %2$s"
 msgstr ""
 
-#: include/conversation.php:1202
-#, php-format
-msgid "%s anttend maybe."
+#: include/identity.php:678 mod/profiles.php:707
+msgid "Sexual Preference:"
 msgstr ""
 
-#: include/conversation.php:1231 include/conversation.php:1247
-msgid "Visible to <strong>everybody</strong>"
+#: include/identity.php:686 mod/profiles.php:734
+msgid "Hometown:"
 msgstr ""
 
-#: include/conversation.php:1232 include/conversation.php:1248
-#: mod/message.php:273 mod/message.php:280 mod/message.php:420
-#: mod/message.php:427 mod/wallmessage.php:116 mod/wallmessage.php:123
-msgid "Please enter a link URL:"
+#: include/identity.php:690 mod/contacts.php:654 mod/follow.php:174
+#: mod/notifications.php:251
+msgid "Tags:"
 msgstr ""
 
-#: include/conversation.php:1233 include/conversation.php:1249
-msgid "Please enter a video link/URL:"
+#: include/identity.php:694 mod/profiles.php:735
+msgid "Political Views:"
 msgstr ""
 
-#: include/conversation.php:1234 include/conversation.php:1250
-msgid "Please enter an audio link/URL:"
+#: include/identity.php:698
+msgid "Religion:"
 msgstr ""
 
-#: include/conversation.php:1235 include/conversation.php:1251
-msgid "Tag term:"
+#: include/identity.php:706
+msgid "Hobbies/Interests:"
 msgstr ""
 
-#: include/conversation.php:1236 include/conversation.php:1252 mod/filer.php:31
-msgid "Save to Folder:"
+#: include/identity.php:710 mod/profiles.php:739
+msgid "Likes:"
 msgstr ""
 
-#: include/conversation.php:1237 include/conversation.php:1253
-msgid "Where are you right now?"
+#: include/identity.php:714 mod/profiles.php:740
+msgid "Dislikes:"
 msgstr ""
 
-#: include/conversation.php:1238
-msgid "Delete item(s)?"
+#: include/identity.php:718
+msgid "Contact information and Social Networks:"
 msgstr ""
 
-#: include/conversation.php:1287
-msgid "Share"
+#: include/identity.php:722
+msgid "Musical interests:"
 msgstr ""
 
-#: include/conversation.php:1288 mod/editpost.php:102 mod/message.php:337
-#: mod/message.php:521 mod/wallmessage.php:140
-msgid "Upload photo"
+#: include/identity.php:726
+msgid "Books, literature:"
 msgstr ""
 
-#: include/conversation.php:1289 mod/editpost.php:103
-msgid "upload photo"
+#: include/identity.php:730
+msgid "Television:"
 msgstr ""
 
-#: include/conversation.php:1290 mod/editpost.php:104
-msgid "Attach file"
+#: include/identity.php:734
+msgid "Film/dance/culture/entertainment:"
 msgstr ""
 
-#: include/conversation.php:1291 mod/editpost.php:105
-msgid "attach file"
+#: include/identity.php:738
+msgid "Love/Romance:"
 msgstr ""
 
-#: include/conversation.php:1292 mod/editpost.php:106 mod/message.php:338
-#: mod/message.php:522 mod/wallmessage.php:141
-msgid "Insert web link"
+#: include/identity.php:742
+msgid "Work/employment:"
 msgstr ""
 
-#: include/conversation.php:1293 mod/editpost.php:107
-msgid "web link"
+#: include/identity.php:746
+msgid "School/education:"
 msgstr ""
 
-#: include/conversation.php:1294 mod/editpost.php:108
-msgid "Insert video link"
+#: include/identity.php:751
+msgid "Forums:"
 msgstr ""
 
-#: include/conversation.php:1295 mod/editpost.php:109
-msgid "video link"
+#: include/identity.php:760 mod/events.php:510
+msgid "Basic"
 msgstr ""
 
-#: include/conversation.php:1296 mod/editpost.php:110
-msgid "Insert audio link"
+#: include/identity.php:761 mod/admin.php:1151 mod/contacts.php:890
+#: mod/events.php:511
+msgid "Advanced"
 msgstr ""
 
-#: include/conversation.php:1297 mod/editpost.php:111
-msgid "audio link"
+#: include/identity.php:784 include/nav.php:84 mod/contacts.php:657
+#: mod/contacts.php:853 view/theme/frio/theme.php:253
+msgid "Status"
 msgstr ""
 
-#: include/conversation.php:1298 mod/editpost.php:112
-msgid "Set your location"
+#: include/identity.php:787 mod/contacts.php:856 mod/follow.php:182
+#: mod/unfollow.php:133
+msgid "Status Messages and Posts"
 msgstr ""
 
-#: include/conversation.php:1299 mod/editpost.php:113
-msgid "set location"
+#: include/identity.php:795 mod/contacts.php:864
+msgid "Profile Details"
 msgstr ""
 
-#: include/conversation.php:1300 mod/editpost.php:114
-msgid "Clear browser location"
+#: include/identity.php:800 include/nav.php:86 mod/fbrowser.php:34
+#: view/theme/frio/theme.php:255
+msgid "Photos"
 msgstr ""
 
-#: include/conversation.php:1301 mod/editpost.php:115
-msgid "clear location"
+#: include/identity.php:803 mod/photos.php:96
+msgid "Photo Albums"
 msgstr ""
 
-#: include/conversation.php:1303 mod/editpost.php:129
-msgid "Set title"
+#: include/identity.php:808 include/identity.php:811 include/nav.php:87
+#: view/theme/frio/theme.php:256
+msgid "Videos"
 msgstr ""
 
-#: include/conversation.php:1305 mod/editpost.php:131
-msgid "Categories (comma-separated list)"
+#: include/identity.php:820 include/identity.php:831 include/nav.php:88
+#: include/nav.php:152 mod/cal.php:273 mod/events.php:378
+#: view/theme/frio/theme.php:257 view/theme/frio/theme.php:261
+msgid "Events"
 msgstr ""
 
-#: include/conversation.php:1307 mod/editpost.php:117
-msgid "Permission settings"
+#: include/identity.php:823 include/identity.php:834 include/nav.php:152
+#: view/theme/frio/theme.php:261
+msgid "Events and Calendar"
 msgstr ""
 
-#: include/conversation.php:1308 mod/editpost.php:146
-msgid "permissions"
+#: include/identity.php:842 mod/notes.php:49
+msgid "Personal Notes"
 msgstr ""
 
-#: include/conversation.php:1316 mod/editpost.php:126
-msgid "Public post"
+#: include/identity.php:845
+msgid "Only You Can See This"
 msgstr ""
 
-#: include/conversation.php:1321 mod/content.php:738 mod/editpost.php:137
-#: mod/photos.php:1649 mod/photos.php:1691 mod/photos.php:1771
-#: mod/events.php:506 object/Item.php:713
-msgid "Preview"
+#: include/identity.php:853 include/identity.php:856 include/nav.php:131
+#: include/nav.php:195 include/text.php:1101 mod/viewcontacts.php:124
+#: mod/contacts.php:812 mod/contacts.php:873 view/theme/frio/theme.php:264
+msgid "Contacts"
 msgstr ""
 
-#: include/conversation.php:1325 include/items.php:2126 mod/editpost.php:140
-#: mod/fbrowser.php:102 mod/fbrowser.php:137 mod/message.php:211
-#: mod/photos.php:247 mod/photos.php:339 mod/suggest.php:34 mod/tagrm.php:13
-#: mod/tagrm.php:98 mod/videos.php:134 mod/dfrn_request.php:894
-#: mod/follow.php:126 mod/contacts.php:458 mod/settings.php:683
-#: mod/settings.php:709
-msgid "Cancel"
+#: include/items.php:1715 mod/dfrn_confirm.php:738 mod/dfrn_request.php:760
+msgid "[Name Withheld]"
 msgstr ""
 
-#: include/conversation.php:1331
-msgid "Post to Groups"
+#: include/items.php:2091 mod/viewsrc.php:16 mod/admin.php:257
+#: mod/admin.php:1657 mod/admin.php:1908 mod/display.php:122
+#: mod/display.php:291 mod/display.php:496 mod/notice.php:18
+msgid "Item not found."
 msgstr ""
 
-#: include/conversation.php:1332
-msgid "Post to Contacts"
+#: include/items.php:2134
+msgid "Do you really want to delete this item?"
 msgstr ""
 
-#: include/conversation.php:1333
-msgid "Private post"
+#: include/items.php:2136 mod/api.php:107 mod/contacts.php:456
+#: mod/dfrn_request.php:881 mod/follow.php:150 mod/message.php:207
+#: mod/profiles.php:644 mod/profiles.php:647 mod/profiles.php:674
+#: mod/register.php:249 mod/settings.php:1173 mod/settings.php:1179
+#: mod/settings.php:1186 mod/settings.php:1190 mod/settings.php:1195
+#: mod/settings.php:1200 mod/settings.php:1205 mod/settings.php:1210
+#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238
+#: mod/settings.php:1239 mod/settings.php:1240 mod/suggest.php:32
+msgid "Yes"
 msgstr ""
 
-#: include/conversation.php:1338 include/identity.php:266 mod/editpost.php:144
-msgid "Message"
+#: include/items.php:2275 mod/api.php:28 mod/api.php:33 mod/attach.php:35
+#: mod/common.php:20 mod/crepair.php:105 mod/fsuggest.php:80 mod/nogroup.php:29
+#: mod/notes.php:25 mod/viewcontacts.php:49 mod/wall_attach.php:69
+#: mod/wall_attach.php:72 mod/uimport.php:26 mod/allfriends.php:15
+#: mod/cal.php:302 mod/contacts.php:364 mod/delegate.php:15
+#: mod/dfrn_confirm.php:64 mod/dirfind.php:16 mod/display.php:493
+#: mod/editpost.php:13 mod/events.php:189 mod/follow.php:14 mod/follow.php:55
+#: mod/follow.php:118 mod/group.php:21 mod/invite.php:18 mod/invite.php:106
+#: mod/item.php:198 mod/item.php:210 mod/manage.php:104 mod/message.php:49
+#: mod/message.php:172 mod/mood.php:117 mod/network.php:17
+#: mod/notifications.php:74 mod/ostatus_subscribe.php:12 mod/photos.php:169
+#: mod/photos.php:1112 mod/poke.php:156 mod/profile_photo.php:20
+#: mod/profile_photo.php:180 mod/profile_photo.php:191
+#: mod/profile_photo.php:204 mod/profiles.php:173 mod/profiles.php:611
+#: mod/register.php:46 mod/regmod.php:107 mod/repair_ostatus.php:12
+#: mod/settings.php:25 mod/settings.php:133 mod/settings.php:670
+#: mod/suggest.php:61 mod/unfollow.php:14 mod/unfollow.php:57
+#: mod/unfollow.php:90 mod/wall_upload.php:102 mod/wall_upload.php:105
+#: mod/wallmessage.php:12 mod/wallmessage.php:36 mod/wallmessage.php:76
+#: mod/wallmessage.php:100 index.php:411
+msgid "Permission denied."
 msgstr ""
 
-#: include/conversation.php:1339 mod/editpost.php:145
-msgid "Browser"
+#: include/items.php:2392
+msgid "Archives"
 msgstr ""
 
-#: include/conversation.php:1521
-msgid "View all"
+#: include/like.php:45
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
 msgstr ""
 
-#: include/conversation.php:1543
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] ""
-msgstr[1] ""
+#: include/like.php:50
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
+msgstr ""
 
-#: include/conversation.php:1546
-msgid "Dislike"
-msgid_plural "Dislikes"
-msgstr[0] ""
-msgstr[1] ""
+#: include/like.php:55
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
+msgstr ""
 
-#: include/conversation.php:1552
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] ""
-msgstr[1] ""
+#: include/message.php:15 include/message.php:169
+msgid "[no subject]"
+msgstr ""
 
-#: include/dbstructure.php:25
-msgid "There are no tables on MyISAM."
+#: include/nav.php:38 mod/navigation.php:22
+msgid "Nothing new here"
 msgstr ""
 
-#: include/dbstructure.php:66
-#, php-format
-msgid ""
-"\n"
-"\t\t\tThe friendica developers released update %s recently,\n"
-"\t\t\tbut when I tried to install it, something went terribly wrong.\n"
-"\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n"
-"\t\t\tfriendica developer if you can not help me on your own. My database "
-"might be invalid."
-msgstr ""
-
-#: include/dbstructure.php:71
-#, php-format
-msgid ""
-"The error message is\n"
-"[pre]%s[/pre]"
-msgstr ""
-
-#: include/dbstructure.php:196
-#, php-format
-msgid ""
-"\n"
-"Error %d occurred during database update:\n"
-"%s\n"
-msgstr ""
-
-#: include/dbstructure.php:199
-msgid "Errors encountered performing database changes: "
-msgstr ""
-
-#: include/dbstructure.php:207
-msgid ": Database update"
-msgstr ""
-
-#: include/dbstructure.php:439
-#, php-format
-msgid "%s: updating %s table."
-msgstr ""
-
-#: include/dfrn.php:1317
-#, php-format
-msgid "%s\\'s birthday"
-msgstr ""
-
-#: include/diaspora.php:2212
-msgid "Sharing notification from Diaspora network"
-msgstr ""
-
-#: include/diaspora.php:3169
-msgid "Attachments:"
-msgstr ""
-
-#: include/identity.php:45
-msgid "Requested account is not available."
-msgstr ""
-
-#: include/identity.php:54 mod/profile.php:22
-msgid "Requested profile is not available."
+#: include/nav.php:42 mod/navigation.php:26
+msgid "Clear notifications"
 msgstr ""
 
-#: include/identity.php:98 include/identity.php:321 include/identity.php:754
-msgid "Edit profile"
+#: include/nav.php:43 include/text.php:1094
+msgid "@name, !forum, #tags, content"
 msgstr ""
 
-#: include/identity.php:261
-msgid "Atom feed"
+#: include/nav.php:81 view/theme/frio/theme.php:250 boot.php:860
+msgid "Logout"
 msgstr ""
 
-#: include/identity.php:292
-msgid "Manage/edit profiles"
+#: include/nav.php:81 view/theme/frio/theme.php:250
+msgid "End this session"
 msgstr ""
 
-#: include/identity.php:297 include/identity.php:323 mod/profiles.php:790
-msgid "Change profile photo"
+#: include/nav.php:84 include/nav.php:164 view/theme/frio/theme.php:253
+msgid "Your posts and conversations"
 msgstr ""
 
-#: include/identity.php:298 mod/profiles.php:791
-msgid "Create New Profile"
+#: include/nav.php:85 view/theme/frio/theme.php:254
+msgid "Your profile page"
 msgstr ""
 
-#: include/identity.php:308 mod/profiles.php:780
-msgid "Profile Image"
+#: include/nav.php:86 view/theme/frio/theme.php:255
+msgid "Your photos"
 msgstr ""
 
-#: include/identity.php:311 mod/profiles.php:782
-msgid "visible to everybody"
+#: include/nav.php:87 view/theme/frio/theme.php:256
+msgid "Your videos"
 msgstr ""
 
-#: include/identity.php:312 mod/profiles.php:687 mod/profiles.php:783
-msgid "Edit visibility"
+#: include/nav.php:88 view/theme/frio/theme.php:257
+msgid "Your events"
 msgstr ""
 
-#: include/identity.php:340 include/identity.php:641 mod/directory.php:137
-#: mod/notifications.php:252
-msgid "Gender:"
+#: include/nav.php:89
+msgid "Personal notes"
 msgstr ""
 
-#: include/identity.php:343 include/identity.php:664 mod/directory.php:139
-msgid "Status:"
+#: include/nav.php:89
+msgid "Your personal notes"
 msgstr ""
 
-#: include/identity.php:345 include/identity.php:681 mod/directory.php:141
-msgid "Homepage:"
+#: include/nav.php:98 mod/bookmarklet.php:15 boot.php:861
+msgid "Login"
 msgstr ""
 
-#: include/identity.php:347 include/identity.php:701 mod/directory.php:143
-#: mod/notifications.php:248 mod/contacts.php:645
-msgid "About:"
+#: include/nav.php:98
+msgid "Sign in"
 msgstr ""
 
-#: include/identity.php:349 mod/contacts.php:643
-msgid "XMPP:"
+#: include/nav.php:108
+msgid "Home Page"
 msgstr ""
 
-#: include/identity.php:435 mod/notifications.php:260 mod/contacts.php:58
-msgid "Network:"
+#: include/nav.php:112 mod/register.php:293 boot.php:837
+msgid "Register"
 msgstr ""
 
-#: include/identity.php:464 include/identity.php:555
-msgid "g A l F d"
+#: include/nav.php:112
+msgid "Create an account"
 msgstr ""
 
-#: include/identity.php:465 include/identity.php:556
-msgid "F d"
+#: include/nav.php:118 mod/help.php:51 view/theme/vier/theme.php:292
+msgid "Help"
 msgstr ""
 
-#: include/identity.php:517 include/identity.php:603
-msgid "[today]"
+#: include/nav.php:118
+msgid "Help and documentation"
 msgstr ""
 
-#: include/identity.php:529
-msgid "Birthday Reminders"
+#: include/nav.php:122
+msgid "Apps"
 msgstr ""
 
-#: include/identity.php:530
-msgid "Birthdays this week:"
+#: include/nav.php:122
+msgid "Addon applications, utilities, games"
 msgstr ""
 
-#: include/identity.php:590
-msgid "[No description]"
+#: include/nav.php:126 include/text.php:1091 mod/search.php:152
+msgid "Search"
 msgstr ""
 
-#: include/identity.php:617
-msgid "Event Reminders"
+#: include/nav.php:126
+msgid "Search site content"
 msgstr ""
 
-#: include/identity.php:618
-msgid "Events this week:"
+#: include/nav.php:129 include/text.php:1099
+msgid "Full Text"
 msgstr ""
 
-#: include/identity.php:638 mod/settings.php:1287
-msgid "Full Name:"
+#: include/nav.php:130 include/text.php:1100
+msgid "Tags"
 msgstr ""
 
-#: include/identity.php:645
-msgid "j F, Y"
+#: include/nav.php:146 include/nav.php:148 mod/community.php:31
+msgid "Community"
 msgstr ""
 
-#: include/identity.php:646
-msgid "j F"
+#: include/nav.php:146
+msgid "Conversations on this site"
 msgstr ""
 
-#: include/identity.php:660
-msgid "Age:"
+#: include/nav.php:148
+msgid "Conversations on the network"
 msgstr ""
 
-#: include/identity.php:673
-#, php-format
-msgid "for %1$d %2$s"
+#: include/nav.php:155
+msgid "Directory"
 msgstr ""
 
-#: include/identity.php:677 mod/profiles.php:706
-msgid "Sexual Preference:"
+#: include/nav.php:155
+msgid "People directory"
 msgstr ""
 
-#: include/identity.php:685 mod/profiles.php:733
-msgid "Hometown:"
+#: include/nav.php:157
+msgid "Information"
 msgstr ""
 
-#: include/identity.php:689 mod/notifications.php:250 mod/follow.php:139
-#: mod/contacts.php:647
-msgid "Tags:"
+#: include/nav.php:157
+msgid "Information about this friendica instance"
 msgstr ""
 
-#: include/identity.php:693 mod/profiles.php:734
-msgid "Political Views:"
+#: include/nav.php:161 view/theme/frio/theme.php:260
+msgid "Conversations from your friends"
 msgstr ""
 
-#: include/identity.php:697
-msgid "Religion:"
+#: include/nav.php:162
+msgid "Network Reset"
 msgstr ""
 
-#: include/identity.php:705
-msgid "Hobbies/Interests:"
+#: include/nav.php:162
+msgid "Load Network page with no filters"
 msgstr ""
 
-#: include/identity.php:709 mod/profiles.php:738
-msgid "Likes:"
+#: include/nav.php:169
+msgid "Friend Requests"
 msgstr ""
 
-#: include/identity.php:713 mod/profiles.php:739
-msgid "Dislikes:"
+#: include/nav.php:172 mod/notifications.php:99
+msgid "Notifications"
 msgstr ""
 
-#: include/identity.php:717
-msgid "Contact information and Social Networks:"
+#: include/nav.php:173
+msgid "See all notifications"
 msgstr ""
 
-#: include/identity.php:721
-msgid "Musical interests:"
+#: include/nav.php:174 mod/settings.php:908
+msgid "Mark as seen"
 msgstr ""
 
-#: include/identity.php:725
-msgid "Books, literature:"
+#: include/nav.php:174
+msgid "Mark all system notifications seen"
 msgstr ""
 
-#: include/identity.php:729
-msgid "Television:"
+#: include/nav.php:178 mod/message.php:180 view/theme/frio/theme.php:262
+msgid "Messages"
 msgstr ""
 
-#: include/identity.php:733
-msgid "Film/dance/culture/entertainment:"
+#: include/nav.php:178 view/theme/frio/theme.php:262
+msgid "Private mail"
 msgstr ""
 
-#: include/identity.php:737
-msgid "Love/Romance:"
+#: include/nav.php:179
+msgid "Inbox"
 msgstr ""
 
-#: include/identity.php:741
-msgid "Work/employment:"
+#: include/nav.php:180
+msgid "Outbox"
 msgstr ""
 
-#: include/identity.php:745
-msgid "School/education:"
+#: include/nav.php:181 mod/message.php:19
+msgid "New Message"
 msgstr ""
 
-#: include/identity.php:750
-msgid "Forums:"
+#: include/nav.php:184
+msgid "Manage"
 msgstr ""
 
-#: include/identity.php:759 mod/events.php:509
-msgid "Basic"
+#: include/nav.php:184
+msgid "Manage other pages"
 msgstr ""
 
-#: include/identity.php:760 mod/events.php:510 mod/contacts.php:883
-#: mod/admin.php:1149
-msgid "Advanced"
+#: include/nav.php:187 mod/settings.php:84
+msgid "Delegations"
 msgstr ""
 
-#: include/identity.php:786 mod/follow.php:147 mod/contacts.php:849
-msgid "Status Messages and Posts"
+#: include/nav.php:187 mod/delegate.php:133
+msgid "Delegate Page Management"
 msgstr ""
 
-#: include/identity.php:794 mod/contacts.php:857
-msgid "Profile Details"
+#: include/nav.php:189 mod/newmember.php:15 mod/admin.php:1710
+#: mod/admin.php:1986 mod/settings.php:114 view/theme/frio/theme.php:263
+msgid "Settings"
 msgstr ""
 
-#: include/identity.php:802 mod/photos.php:95
-msgid "Photo Albums"
+#: include/nav.php:189 view/theme/frio/theme.php:263
+msgid "Account settings"
 msgstr ""
 
-#: include/identity.php:841 mod/notes.php:49
-msgid "Personal Notes"
+#: include/nav.php:192
+msgid "Manage/Edit Profiles"
 msgstr ""
 
-#: include/identity.php:844
-msgid "Only You Can See This"
+#: include/nav.php:195 view/theme/frio/theme.php:264
+msgid "Manage/edit friends and contacts"
 msgstr ""
 
-#: include/items.php:1702 mod/dfrn_confirm.php:738 mod/dfrn_request.php:759
-msgid "[Name Withheld]"
+#: include/nav.php:200 mod/admin.php:203
+msgid "Admin"
 msgstr ""
 
-#: include/items.php:2078 mod/notice.php:17 mod/viewsrc.php:16
-#: mod/admin.php:256 mod/admin.php:1655 mod/admin.php:1906 mod/display.php:121
-#: mod/display.php:290 mod/display.php:498
-msgid "Item not found."
+#: include/nav.php:200
+msgid "Site setup and configuration"
 msgstr ""
 
-#: include/items.php:2121
-msgid "Do you really want to delete this item?"
+#: include/nav.php:203
+msgid "Navigation"
 msgstr ""
 
-#: include/items.php:2123 mod/api.php:107 mod/message.php:208
-#: mod/suggest.php:31 mod/dfrn_request.php:880 mod/follow.php:115
-#: mod/profiles.php:643 mod/profiles.php:646 mod/profiles.php:673
-#: mod/register.php:248 mod/contacts.php:455 mod/settings.php:1172
-#: mod/settings.php:1178 mod/settings.php:1185 mod/settings.php:1189
-#: mod/settings.php:1194 mod/settings.php:1199 mod/settings.php:1204
-#: mod/settings.php:1209 mod/settings.php:1235 mod/settings.php:1236
-#: mod/settings.php:1237 mod/settings.php:1238 mod/settings.php:1239
-msgid "Yes"
+#: include/nav.php:203
+msgid "Site map"
 msgstr ""
 
-#: include/items.php:2262 mod/allfriends.php:14 mod/api.php:28 mod/api.php:33
-#: mod/attach.php:35 mod/cal.php:301 mod/common.php:20 mod/crepair.php:105
-#: mod/delegate.php:14 mod/dfrn_confirm.php:63 mod/editpost.php:12
-#: mod/fsuggest.php:80 mod/group.php:20 mod/manage.php:103 mod/message.php:48
-#: mod/message.php:173 mod/mood.php:116 mod/nogroup.php:29 mod/notes.php:25
-#: mod/notifications.php:73 mod/ostatus_subscribe.php:11 mod/photos.php:168
-#: mod/photos.php:1111 mod/poke.php:155 mod/repair_ostatus.php:11
-#: mod/suggest.php:60 mod/viewcontacts.php:49 mod/wall_attach.php:69
-#: mod/wall_attach.php:72 mod/wall_upload.php:101 mod/wall_upload.php:104
-#: mod/wallmessage.php:11 mod/wallmessage.php:35 mod/wallmessage.php:75
-#: mod/wallmessage.php:99 mod/regmod.php:106 mod/uimport.php:26
-#: mod/dirfind.php:15 mod/events.php:188 mod/follow.php:13 mod/follow.php:76
-#: mod/follow.php:160 mod/profile_photo.php:19 mod/profile_photo.php:179
-#: mod/profile_photo.php:190 mod/profile_photo.php:203 mod/profiles.php:172
-#: mod/profiles.php:610 mod/register.php:45 mod/contacts.php:363
-#: mod/invite.php:17 mod/invite.php:105 mod/settings.php:24
-#: mod/settings.php:132 mod/settings.php:669 mod/display.php:495
-#: mod/item.php:197 mod/item.php:209 mod/network.php:7 index.php:410
-msgid "Permission denied."
+#: include/network.php:701
+msgid "view full size"
 msgstr ""
 
-#: include/items.php:2379
-msgid "Archives"
+#: include/oembed.php:254
+msgid "Embedded content"
 msgstr ""
 
-#: include/network.php:700
-msgid "view full size"
+#: include/oembed.php:262
+msgid "Embedding disabled"
 msgstr ""
 
-#: include/ostatus.php:1950
+#: include/ostatus.php:1643
 #, php-format
 msgid "%s is now following %s."
 msgstr ""
 
-#: include/ostatus.php:1951
+#: include/ostatus.php:1644
 msgid "following"
 msgstr ""
 
-#: include/ostatus.php:1954
+#: include/ostatus.php:1647
 #, php-format
 msgid "%s stopped following %s."
 msgstr ""
 
-#: include/ostatus.php:1955
+#: include/ostatus.php:1648
 msgid "stopped following"
 msgstr ""
 
-#: include/plugin.php:518 include/plugin.php:520
+#: include/plugin.php:519 include/plugin.php:521
 msgid "Click here to upgrade."
 msgstr ""
 
-#: include/plugin.php:527
+#: include/plugin.php:528
 msgid "This action exceeds the limits set by your subscription plan."
 msgstr ""
 
-#: include/plugin.php:532
+#: include/plugin.php:533
 msgid "This action is not available under your subscription plan."
 msgstr ""
 
-#: include/security.php:63
+#: include/security.php:64
 msgid "Welcome "
 msgstr ""
 
-#: include/security.php:64
+#: include/security.php:65
 msgid "Please upload a profile photo."
 msgstr ""
 
-#: include/security.php:66
+#: include/security.php:67
 msgid "Welcome back "
 msgstr ""
 
-#: include/security.php:423
+#: include/security.php:424
 msgid ""
 "The form security token was not correct. This probably happened because the "
 "form has been opened for too long (>3 hours) before submitting it."
 msgstr ""
 
-#: include/text.php:314
+#: include/text.php:315
 msgid "newer"
 msgstr ""
 
-#: include/text.php:315
+#: include/text.php:316
 msgid "older"
 msgstr ""
 
-#: include/text.php:320
+#: include/text.php:321
 msgid "first"
 msgstr ""
 
-#: include/text.php:321
+#: include/text.php:322
 msgid "prev"
 msgstr ""
 
-#: include/text.php:355
+#: include/text.php:356
 msgid "next"
 msgstr ""
 
-#: include/text.php:356
+#: include/text.php:357
 msgid "last"
 msgstr ""
 
-#: include/text.php:410
+#: include/text.php:411
 msgid "Loading more entries..."
 msgstr ""
 
-#: include/text.php:411
+#: include/text.php:412
 msgid "The end"
 msgstr ""
 
-#: include/text.php:964
+#: include/text.php:965
 msgid "No contacts"
 msgstr ""
 
-#: include/text.php:988
+#: include/text.php:989
 #, php-format
 msgid "%d Contact"
 msgid_plural "%d Contacts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/text.php:1001
+#: include/text.php:1002
 msgid "View Contacts"
 msgstr ""
 
-#: include/text.php:1091 mod/editpost.php:101 mod/filer.php:32 mod/notes.php:64
+#: include/text.php:1092 mod/filer.php:32 mod/notes.php:64 mod/editpost.php:102
 msgid "Save"
 msgstr ""
 
-#: include/text.php:1152
+#: include/text.php:1153
 msgid "poke"
 msgstr ""
 
-#: include/text.php:1152
+#: include/text.php:1153
 msgid "poked"
 msgstr ""
 
-#: include/text.php:1153
+#: include/text.php:1154
 msgid "ping"
 msgstr ""
 
-#: include/text.php:1153
+#: include/text.php:1154
 msgid "pinged"
 msgstr ""
 
-#: include/text.php:1154
+#: include/text.php:1155
 msgid "prod"
 msgstr ""
 
-#: include/text.php:1154
+#: include/text.php:1155
 msgid "prodded"
 msgstr ""
 
-#: include/text.php:1155
+#: include/text.php:1156
 msgid "slap"
 msgstr ""
 
-#: include/text.php:1155
+#: include/text.php:1156
 msgid "slapped"
 msgstr ""
 
-#: include/text.php:1156
+#: include/text.php:1157
 msgid "finger"
 msgstr ""
 
-#: include/text.php:1156
+#: include/text.php:1157
 msgid "fingered"
 msgstr ""
 
-#: include/text.php:1157
+#: include/text.php:1158
 msgid "rebuff"
 msgstr ""
 
-#: include/text.php:1157
+#: include/text.php:1158
 msgid "rebuffed"
 msgstr ""
 
-#: include/text.php:1171
+#: include/text.php:1172
 msgid "happy"
 msgstr ""
 
-#: include/text.php:1172
+#: include/text.php:1173
 msgid "sad"
 msgstr ""
 
-#: include/text.php:1173
+#: include/text.php:1174
 msgid "mellow"
 msgstr ""
 
-#: include/text.php:1174
+#: include/text.php:1175
 msgid "tired"
 msgstr ""
 
-#: include/text.php:1175
+#: include/text.php:1176
 msgid "perky"
 msgstr ""
 
-#: include/text.php:1176
+#: include/text.php:1177
 msgid "angry"
 msgstr ""
 
-#: include/text.php:1177
+#: include/text.php:1178
 msgid "stupified"
 msgstr ""
 
-#: include/text.php:1178
+#: include/text.php:1179
 msgid "puzzled"
 msgstr ""
 
-#: include/text.php:1179
+#: include/text.php:1180
 msgid "interested"
 msgstr ""
 
-#: include/text.php:1180
+#: include/text.php:1181
 msgid "bitter"
 msgstr ""
 
-#: include/text.php:1181
+#: include/text.php:1182
 msgid "cheerful"
 msgstr ""
 
-#: include/text.php:1182
+#: include/text.php:1183
 msgid "alive"
 msgstr ""
 
-#: include/text.php:1183
+#: include/text.php:1184
 msgid "annoyed"
 msgstr ""
 
-#: include/text.php:1184
+#: include/text.php:1185
 msgid "anxious"
 msgstr ""
 
-#: include/text.php:1185
+#: include/text.php:1186
 msgid "cranky"
 msgstr ""
 
-#: include/text.php:1186
+#: include/text.php:1187
 msgid "disturbed"
 msgstr ""
 
-#: include/text.php:1187
+#: include/text.php:1188
 msgid "frustrated"
 msgstr ""
 
-#: include/text.php:1188
+#: include/text.php:1189
 msgid "motivated"
 msgstr ""
 
-#: include/text.php:1189
+#: include/text.php:1190
 msgid "relaxed"
 msgstr ""
 
-#: include/text.php:1190
+#: include/text.php:1191
 msgid "surprised"
 msgstr ""
 
-#: include/text.php:1408 mod/videos.php:388
+#: include/text.php:1408 mod/videos.php:389
 msgid "View Video"
 msgstr ""
 
@@ -3043,106 +2907,240 @@ msgstr ""
 msgid "bytes"
 msgstr ""
 
-#: include/text.php:1466 include/text.php:1477
+#: include/text.php:1460 include/text.php:1471
 msgid "Click to open/close"
 msgstr ""
 
-#: include/text.php:1609
+#: include/text.php:1603
 msgid "View on separate page"
 msgstr ""
 
-#: include/text.php:1610
+#: include/text.php:1604
 msgid "view on separate page"
 msgstr ""
 
-#: include/text.php:1895
+#: include/text.php:1889
 msgid "activity"
 msgstr ""
 
-#: include/text.php:1897 mod/content.php:624 object/Item.php:418
-#: object/Item.php:430
+#: include/text.php:1891 mod/content.php:625 object/Item.php:411
+#: object/Item.php:423
 msgid "comment"
 msgid_plural "comments"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/text.php:1900
+#: include/text.php:1894
 msgid "post"
 msgstr ""
 
-#: include/text.php:2066
+#: include/text.php:2060
 msgid "Item filed"
 msgstr ""
 
-#: include/uimport.php:83
+#: include/uimport.php:84
 msgid "Error decoding account file"
 msgstr ""
 
-#: include/uimport.php:89
+#: include/uimport.php:90
 msgid "Error! No version data in file! This is not a Friendica account file?"
 msgstr ""
 
-#: include/uimport.php:106 include/uimport.php:117
+#: include/uimport.php:107 include/uimport.php:118
 msgid "Error! Cannot check nickname"
 msgstr ""
 
-#: include/uimport.php:110 include/uimport.php:121
+#: include/uimport.php:111 include/uimport.php:122
 #, php-format
 msgid "User '%s' already exists on this server!"
 msgstr ""
 
-#: include/uimport.php:143
+#: include/uimport.php:144
 msgid "User creation error"
 msgstr ""
 
-#: include/uimport.php:164
+#: include/uimport.php:165
 msgid "User profile creation error"
 msgstr ""
 
-#: include/uimport.php:213
+#: include/uimport.php:214
 #, php-format
 msgid "%d contact not imported"
 msgid_plural "%d contacts not imported"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/uimport.php:279
+#: include/uimport.php:280
 msgid "Done. You can now login with your username and password"
 msgstr ""
 
-#: mod/allfriends.php:48
-msgid "No friends to display."
+#: include/user.php:41 mod/settings.php:378
+msgid "Passwords do not match. Password unchanged."
 msgstr ""
 
-#: mod/api.php:78 mod/api.php:104
-msgid "Authorize application connection"
+#: include/user.php:50
+msgid "An invitation is required."
 msgstr ""
 
-#: mod/api.php:79
-msgid "Return to your app and insert this Securty Code:"
+#: include/user.php:55
+msgid "Invitation could not be verified."
 msgstr ""
 
-#: mod/api.php:91
-msgid "Please login to continue."
+#: include/user.php:63
+msgid "Invalid OpenID url"
 msgstr ""
 
-#: mod/api.php:106
+#: include/user.php:84
+msgid "Please enter the required information."
+msgstr ""
+
+#: include/user.php:98
+msgid "Please use a shorter name."
+msgstr ""
+
+#: include/user.php:100
+msgid "Name too short."
+msgstr ""
+
+#: include/user.php:108
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr ""
+
+#: include/user.php:113
+msgid "Your email domain is not among those allowed on this site."
+msgstr ""
+
+#: include/user.php:116
+msgid "Not a valid email address."
+msgstr ""
+
+#: include/user.php:129
+msgid "Cannot use that email."
+msgstr ""
+
+#: include/user.php:135
+msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
+msgstr ""
+
+#: include/user.php:142 include/user.php:230
+msgid "Nickname is already registered. Please choose another."
+msgstr ""
+
+#: include/user.php:152
+msgid ""
+"Nickname was once registered here and may not be re-used. Please choose "
+"another."
+msgstr ""
+
+#: include/user.php:168
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr ""
+
+#: include/user.php:216
+msgid "An error occurred during registration. Please try again."
+msgstr ""
+
+#: include/user.php:239 view/theme/duepuntozero/config.php:47
+msgid "default"
+msgstr ""
+
+#: include/user.php:249
+msgid "An error occurred creating your default profile. Please try again."
+msgstr ""
+
+#: include/user.php:399
+#, php-format
+msgid ""
+"\n"
+"\t\tDear %1$s,\n"
+"\t\t\tThank you for registering at %2$s. Your account is pending for "
+"approval by the administrator.\n"
+"\t"
+msgstr ""
+
+#: include/user.php:409
+#, php-format
+msgid "Registration at %s"
+msgstr ""
+
+#: include/user.php:419
+#, php-format
+msgid ""
+"\n"
+"\t\tDear %1$s,\n"
+"\t\t\tThank you for registering at %2$s. Your account has been created.\n"
+"\t"
+msgstr ""
+
+#: include/user.php:423
+#, php-format
+msgid ""
+"\n"
+"\t\tThe login details are as follows:\n"
+"\t\t\tSite Location:\t%3$s\n"
+"\t\t\tLogin Name:\t%1$s\n"
+"\t\t\tPassword:\t%5$s\n"
+"\n"
+"\t\tYou may change your password from your account \"Settings\" page after "
+"logging\n"
+"\t\tin.\n"
+"\n"
+"\t\tPlease take a few moments to review the other account settings on that "
+"page.\n"
+"\n"
+"\t\tYou may also wish to add some basic information to your default profile\n"
+"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\tadding some profile \"keywords\" (very useful in making new friends) - "
+"and\n"
+"\t\tperhaps what country you live in; if you do not wish to be more "
+"specific\n"
+"\t\tthan that.\n"
+"\n"
+"\t\tWe fully respect your right to privacy, and none of these items are "
+"necessary.\n"
+"\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\n"
+"\t\tThank you and welcome to %2$s."
+msgstr ""
+
+#: include/user.php:455 mod/admin.php:1400
+#, php-format
+msgid "Registration details for %s"
+msgstr ""
+
+#: mod/api.php:78 mod/api.php:104
+msgid "Authorize application connection"
+msgstr ""
+
+#: mod/api.php:79
+msgid "Return to your app and insert this Securty Code:"
+msgstr ""
+
+#: mod/api.php:91
+msgid "Please login to continue."
+msgstr ""
+
+#: mod/api.php:106
 msgid ""
 "Do you want to authorize this application to access your posts and contacts, "
 "and/or create new posts for you?"
 msgstr ""
 
-#: mod/api.php:108 mod/dfrn_request.php:880 mod/follow.php:115
-#: mod/profiles.php:643 mod/profiles.php:647 mod/profiles.php:673
-#: mod/register.php:249 mod/settings.php:1172 mod/settings.php:1178
-#: mod/settings.php:1185 mod/settings.php:1189 mod/settings.php:1194
-#: mod/settings.php:1199 mod/settings.php:1204 mod/settings.php:1209
-#: mod/settings.php:1235 mod/settings.php:1236 mod/settings.php:1237
-#: mod/settings.php:1238 mod/settings.php:1239
+#: mod/api.php:108 mod/dfrn_request.php:881 mod/follow.php:150
+#: mod/profiles.php:644 mod/profiles.php:648 mod/profiles.php:674
+#: mod/register.php:250 mod/settings.php:1173 mod/settings.php:1179
+#: mod/settings.php:1186 mod/settings.php:1190 mod/settings.php:1195
+#: mod/settings.php:1200 mod/settings.php:1205 mod/settings.php:1210
+#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238
+#: mod/settings.php:1239 mod/settings.php:1240
 msgid "No"
 msgstr ""
 
-#: mod/apps.php:9 index.php:257
+#: mod/apps.php:9 index.php:258
 msgid "You must be logged in to use addons. "
 msgstr ""
 
@@ -3210,3240 +3208,3409 @@ msgstr ""
 msgid "diaspora2bb: "
 msgstr ""
 
-#: mod/bookmarklet.php:43
-msgid "The post was created"
-msgstr ""
-
-#: mod/cal.php:145 mod/display.php:347 mod/profile.php:156
-msgid "Access to this profile has been restricted."
+#: mod/common.php:93
+msgid "No contacts in common."
 msgstr ""
 
-#: mod/cal.php:273 mod/events.php:378
-msgid "View"
+#: mod/common.php:143 mod/contacts.php:883
+msgid "Common Friends"
 msgstr ""
 
-#: mod/cal.php:274 mod/events.php:380
-msgid "Previous"
+#: mod/credits.php:19
+msgid "Credits"
 msgstr ""
 
-#: mod/cal.php:275 mod/install.php:203 mod/events.php:381
-msgid "Next"
+#: mod/credits.php:20
+msgid ""
+"Friendica is a community project, that would not be possible without the "
+"help of many people. Here is a list of those who have contributed to the "
+"code or the translation of Friendica. Thank you all!"
 msgstr ""
 
-#: mod/cal.php:284 mod/events.php:390
-msgid "list"
+#: mod/crepair.php:92
+msgid "Contact settings applied."
 msgstr ""
 
-#: mod/cal.php:294
-msgid "User not found"
+#: mod/crepair.php:94
+msgid "Contact update failed."
 msgstr ""
 
-#: mod/cal.php:310
-msgid "This calendar format is not supported"
+#: mod/crepair.php:119 mod/fsuggest.php:22 mod/fsuggest.php:94
+#: mod/dfrn_confirm.php:129
+msgid "Contact not found."
 msgstr ""
 
-#: mod/cal.php:312
-msgid "No exportable data found"
+#: mod/crepair.php:125
+msgid ""
+"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
+"information your communications with this contact may stop working."
 msgstr ""
 
-#: mod/cal.php:327
-msgid "calendar"
+#: mod/crepair.php:126
+msgid ""
+"Please use your browser 'Back' button <strong>now</strong> if you are "
+"uncertain what to do on this page."
 msgstr ""
 
-#: mod/common.php:93
-msgid "No contacts in common."
+#: mod/crepair.php:139 mod/crepair.php:141
+msgid "No mirroring"
 msgstr ""
 
-#: mod/common.php:143 mod/contacts.php:876
-msgid "Common Friends"
+#: mod/crepair.php:139
+msgid "Mirror as forwarded posting"
 msgstr ""
 
-#: mod/content.php:120 mod/network.php:490
-msgid "No such group"
+#: mod/crepair.php:139 mod/crepair.php:141
+msgid "Mirror as my own posting"
 msgstr ""
 
-#: mod/content.php:131 mod/group.php:214 mod/network.php:517
-msgid "Group is empty"
+#: mod/crepair.php:155
+msgid "Return to contact editor"
 msgstr ""
 
-#: mod/content.php:136 mod/network.php:521
-#, php-format
-msgid "Group: %s"
+#: mod/crepair.php:157
+msgid "Refetch contact data"
 msgstr ""
 
-#: mod/content.php:326 object/Item.php:96
-msgid "This entry was edited"
+#: mod/crepair.php:159 mod/fsuggest.php:109 mod/contacts.php:595
+#: mod/content.php:730 mod/events.php:509 mod/install.php:245
+#: mod/install.php:285 mod/invite.php:150 mod/localtime.php:47
+#: mod/manage.php:157 mod/message.php:338 mod/message.php:521 mod/mood.php:140
+#: mod/photos.php:1144 mod/photos.php:1274 mod/photos.php:1600
+#: mod/photos.php:1649 mod/photos.php:1691 mod/photos.php:1771 mod/poke.php:205
+#: mod/profiles.php:685 object/Item.php:697
+#: view/theme/duepuntozero/config.php:65 view/theme/frio/config.php:68
+#: view/theme/quattro/config.php:71 view/theme/vier/config.php:114
+msgid "Submit"
 msgstr ""
 
-#: mod/content.php:622 object/Item.php:416
-#, php-format
-msgid "%d comment"
-msgid_plural "%d comments"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/content.php:639 mod/photos.php:1431 object/Item.php:117
-msgid "Private Message"
+#: mod/crepair.php:161
+msgid "Remote Self"
 msgstr ""
 
-#: mod/content.php:703 mod/photos.php:1627 object/Item.php:270
-msgid "I like this (toggle)"
+#: mod/crepair.php:164
+msgid "Mirror postings from this contact"
 msgstr ""
 
-#: mod/content.php:703 object/Item.php:270
-msgid "like"
+#: mod/crepair.php:166
+msgid ""
+"Mark this contact as remote_self, this will cause friendica to repost new "
+"entries from this contact."
 msgstr ""
 
-#: mod/content.php:704 mod/photos.php:1628 object/Item.php:271
-msgid "I don't like this (toggle)"
+#: mod/crepair.php:170 mod/admin.php:1582 mod/admin.php:1595 mod/admin.php:1608
+#: mod/admin.php:1624 mod/settings.php:685 mod/settings.php:711
+msgid "Name"
 msgstr ""
 
-#: mod/content.php:704 object/Item.php:271
-msgid "dislike"
+#: mod/crepair.php:171
+msgid "Account Nickname"
 msgstr ""
 
-#: mod/content.php:706 object/Item.php:274
-msgid "Share this"
+#: mod/crepair.php:172
+msgid "@Tagname - overrides Name/Nickname"
 msgstr ""
 
-#: mod/content.php:706 object/Item.php:274
-msgid "share"
+#: mod/crepair.php:173
+msgid "Account URL"
 msgstr ""
 
-#: mod/content.php:726 mod/photos.php:1645 mod/photos.php:1687
-#: mod/photos.php:1767 object/Item.php:701
-msgid "This is you"
+#: mod/crepair.php:174
+msgid "Friend Request URL"
 msgstr ""
 
-#: mod/content.php:728 mod/content.php:951 mod/photos.php:1647
-#: mod/photos.php:1689 mod/photos.php:1769 object/Item.php:388
-#: object/Item.php:703
-msgid "Comment"
+#: mod/crepair.php:175
+msgid "Friend Confirm URL"
 msgstr ""
 
-#: mod/content.php:729 mod/crepair.php:159 mod/fsuggest.php:109
-#: mod/install.php:244 mod/install.php:284 mod/localtime.php:46
-#: mod/manage.php:156 mod/message.php:340 mod/message.php:523 mod/mood.php:139
-#: mod/photos.php:1143 mod/photos.php:1273 mod/photos.php:1599
-#: mod/photos.php:1648 mod/photos.php:1690 mod/photos.php:1770 mod/poke.php:204
-#: mod/events.php:508 mod/profiles.php:684 mod/contacts.php:588
-#: mod/invite.php:149 object/Item.php:704 view/theme/duepuntozero/config.php:64
-#: view/theme/frio/config.php:67 view/theme/quattro/config.php:70
-#: view/theme/vier/config.php:113
-msgid "Submit"
+#: mod/crepair.php:176
+msgid "Notification Endpoint URL"
 msgstr ""
 
-#: mod/content.php:730 object/Item.php:705
-msgid "Bold"
+#: mod/crepair.php:177
+msgid "Poll/Feed URL"
 msgstr ""
 
-#: mod/content.php:731 object/Item.php:706
-msgid "Italic"
+#: mod/crepair.php:178
+msgid "New photo from this URL"
 msgstr ""
 
-#: mod/content.php:732 object/Item.php:707
-msgid "Underline"
+#: mod/filer.php:31
+msgid "- select -"
 msgstr ""
 
-#: mod/content.php:733 object/Item.php:708
-msgid "Quote"
+#: mod/fsuggest.php:65
+msgid "Friend suggestion sent."
 msgstr ""
 
-#: mod/content.php:734 object/Item.php:709
-msgid "Code"
+#: mod/fsuggest.php:99
+msgid "Suggest Friends"
 msgstr ""
 
-#: mod/content.php:735 object/Item.php:710
-msgid "Image"
+#: mod/fsuggest.php:101
+#, php-format
+msgid "Suggest a friend for %s"
 msgstr ""
 
-#: mod/content.php:736 object/Item.php:711
-msgid "Link"
+#: mod/lockview.php:33 mod/lockview.php:41
+msgid "Remote privacy information not available."
 msgstr ""
 
-#: mod/content.php:737 object/Item.php:712
-msgid "Video"
+#: mod/lockview.php:50
+msgid "Visible to:"
 msgstr ""
 
-#: mod/content.php:747 mod/settings.php:744 object/Item.php:122
-#: object/Item.php:124
-msgid "Edit"
+#: mod/maintenance.php:21
+msgid "System down for maintenance"
 msgstr ""
 
-#: mod/content.php:773 object/Item.php:237
-msgid "add star"
+#: mod/newmember.php:7
+msgid "Welcome to Friendica"
 msgstr ""
 
-#: mod/content.php:774 object/Item.php:238
-msgid "remove star"
+#: mod/newmember.php:8
+msgid "New Member Checklist"
 msgstr ""
 
-#: mod/content.php:775 object/Item.php:239
-msgid "toggle star status"
+#: mod/newmember.php:10
+msgid ""
+"We would like to offer some tips and links to help make your experience "
+"enjoyable. Click any item to visit the relevant page. A link to this page "
+"will be visible from your home page for two weeks after your initial "
+"registration and then will quietly disappear."
 msgstr ""
 
-#: mod/content.php:778 object/Item.php:242
-msgid "starred"
+#: mod/newmember.php:11
+msgid "Getting Started"
 msgstr ""
 
-#: mod/content.php:779 mod/content.php:801 object/Item.php:259
-msgid "add tag"
+#: mod/newmember.php:13
+msgid "Friendica Walk-Through"
 msgstr ""
 
-#: mod/content.php:790 object/Item.php:247
-msgid "ignore thread"
+#: mod/newmember.php:13
+msgid ""
+"On your <em>Quick Start</em> page - find a brief introduction to your "
+"profile and network tabs, make some new connections, and find some groups to "
+"join."
 msgstr ""
 
-#: mod/content.php:791 object/Item.php:248
-msgid "unignore thread"
+#: mod/newmember.php:17
+msgid "Go to Your Settings"
 msgstr ""
 
-#: mod/content.php:792 object/Item.php:249
-msgid "toggle ignore status"
+#: mod/newmember.php:17
+msgid ""
+"On your <em>Settings</em> page -  change your initial password. Also make a "
+"note of your Identity Address. This looks just like an email address - and "
+"will be useful in making friends on the free social web."
 msgstr ""
 
-#: mod/content.php:795 mod/ostatus_subscribe.php:75 object/Item.php:252
-msgid "ignored"
+#: mod/newmember.php:18
+msgid ""
+"Review the other settings, particularly the privacy settings. An unpublished "
+"directory listing is like having an unlisted phone number. In general, you "
+"should probably publish your listing - unless all of your friends and "
+"potential friends know exactly how to find you."
 msgstr ""
 
-#: mod/content.php:806 object/Item.php:141
-msgid "save to folder"
+#: mod/newmember.php:22 mod/profile_photo.php:256 mod/profiles.php:704
+msgid "Upload Profile Photo"
 msgstr ""
 
-#: mod/content.php:854 object/Item.php:211
-msgid "I will attend"
+#: mod/newmember.php:22
+msgid ""
+"Upload a profile photo if you have not done so already. Studies have shown "
+"that people with real photos of themselves are ten times more likely to make "
+"friends than people who do not."
 msgstr ""
 
-#: mod/content.php:854 object/Item.php:211
-msgid "I will not attend"
+#: mod/newmember.php:23
+msgid "Edit Your Profile"
 msgstr ""
 
-#: mod/content.php:854 object/Item.php:211
-msgid "I might attend"
+#: mod/newmember.php:23
+msgid ""
+"Edit your <strong>default</strong> profile to your liking. Review the "
+"settings for hiding your list of friends and hiding the profile from unknown "
+"visitors."
 msgstr ""
 
-#: mod/content.php:918 object/Item.php:354
-msgid "to"
+#: mod/newmember.php:24
+msgid "Profile Keywords"
 msgstr ""
 
-#: mod/content.php:919 object/Item.php:356
-msgid "Wall-to-Wall"
+#: mod/newmember.php:24
+msgid ""
+"Set some public keywords for your default profile which describe your "
+"interests. We may be able to find other people with similar interests and "
+"suggest friendships."
 msgstr ""
 
-#: mod/content.php:920 object/Item.php:357
-msgid "via Wall-To-Wall:"
+#: mod/newmember.php:26
+msgid "Connecting"
 msgstr ""
 
-#: mod/credits.php:19
-msgid "Credits"
+#: mod/newmember.php:32
+msgid "Importing Emails"
 msgstr ""
 
-#: mod/credits.php:20
+#: mod/newmember.php:32
 msgid ""
-"Friendica is a community project, that would not be possible without the "
-"help of many people. Here is a list of those who have contributed to the "
-"code or the translation of Friendica. Thank you all!"
+"Enter your email access information on your Connector Settings page if you "
+"wish to import and interact with friends or mailing lists from your email "
+"INBOX"
 msgstr ""
 
-#: mod/crepair.php:92
-msgid "Contact settings applied."
+#: mod/newmember.php:35
+msgid "Go to Your Contacts Page"
 msgstr ""
 
-#: mod/crepair.php:94
-msgid "Contact update failed."
+#: mod/newmember.php:35
+msgid ""
+"Your Contacts page is your gateway to managing friendships and connecting "
+"with friends on other networks. Typically you enter their address or site "
+"URL in the <em>Add New Contact</em> dialog."
 msgstr ""
 
-#: mod/crepair.php:119 mod/dfrn_confirm.php:128 mod/fsuggest.php:22
-#: mod/fsuggest.php:94
-msgid "Contact not found."
+#: mod/newmember.php:36
+msgid "Go to Your Site's Directory"
 msgstr ""
 
-#: mod/crepair.php:125
+#: mod/newmember.php:36
 msgid ""
-"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
-"information your communications with this contact may stop working."
+"The Directory page lets you find other people in this network or other "
+"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
+"their profile page. Provide your own Identity Address if requested."
 msgstr ""
 
-#: mod/crepair.php:126
-msgid ""
-"Please use your browser 'Back' button <strong>now</strong> if you are "
-"uncertain what to do on this page."
+#: mod/newmember.php:37
+msgid "Finding New People"
 msgstr ""
 
-#: mod/crepair.php:139 mod/crepair.php:141
-msgid "No mirroring"
+#: mod/newmember.php:37
+msgid ""
+"On the side panel of the Contacts page are several tools to find new "
+"friends. We can match people by interest, look up people by name or "
+"interest, and provide suggestions based on network relationships. On a brand "
+"new site, friend suggestions will usually begin to be populated within 24 "
+"hours."
 msgstr ""
 
-#: mod/crepair.php:139
-msgid "Mirror as forwarded posting"
+#: mod/newmember.php:41
+msgid "Group Your Contacts"
 msgstr ""
 
-#: mod/crepair.php:139 mod/crepair.php:141
-msgid "Mirror as my own posting"
+#: mod/newmember.php:41
+msgid ""
+"Once you have made some friends, organize them into private conversation "
+"groups from the sidebar of your Contacts page and then you can interact with "
+"each group privately on your Network page."
 msgstr ""
 
-#: mod/crepair.php:155
-msgid "Return to contact editor"
+#: mod/newmember.php:44
+msgid "Why Aren't My Posts Public?"
 msgstr ""
 
-#: mod/crepair.php:157
-msgid "Refetch contact data"
+#: mod/newmember.php:44
+msgid ""
+"Friendica respects your privacy. By default, your posts will only show up to "
+"people you've added as friends. For more information, see the help section "
+"from the link above."
 msgstr ""
 
-#: mod/crepair.php:161
-msgid "Remote Self"
+#: mod/newmember.php:48
+msgid "Getting Help"
 msgstr ""
 
-#: mod/crepair.php:164
-msgid "Mirror postings from this contact"
+#: mod/newmember.php:50
+msgid "Go to the Help Section"
 msgstr ""
 
-#: mod/crepair.php:166
+#: mod/newmember.php:50
 msgid ""
-"Mark this contact as remote_self, this will cause friendica to repost new "
-"entries from this contact."
+"Our <strong>help</strong> pages may be consulted for detail on other program "
+"features and resources."
 msgstr ""
 
-#: mod/crepair.php:170 mod/settings.php:684 mod/settings.php:710
-#: mod/admin.php:1580 mod/admin.php:1593 mod/admin.php:1606 mod/admin.php:1622
-msgid "Name"
+#: mod/nogroup.php:45 mod/viewcontacts.php:105 mod/contacts.php:606
+#: mod/contacts.php:950
+#, php-format
+msgid "Visit %s's profile [%s]"
 msgstr ""
 
-#: mod/crepair.php:171
-msgid "Account Nickname"
+#: mod/nogroup.php:46 mod/contacts.php:951
+msgid "Edit contact"
 msgstr ""
 
-#: mod/crepair.php:172
-msgid "@Tagname - overrides Name/Nickname"
+#: mod/nogroup.php:67
+msgid "Contacts who are not members of a group"
 msgstr ""
 
-#: mod/crepair.php:173
-msgid "Account URL"
+#: mod/profperm.php:22 mod/group.php:78 index.php:410
+msgid "Permission denied"
 msgstr ""
 
-#: mod/crepair.php:174
-msgid "Friend Request URL"
+#: mod/profperm.php:28 mod/profperm.php:59
+msgid "Invalid profile identifier."
 msgstr ""
 
-#: mod/crepair.php:175
-msgid "Friend Confirm URL"
+#: mod/profperm.php:105
+msgid "Profile Visibility Editor"
 msgstr ""
 
-#: mod/crepair.php:176
-msgid "Notification Endpoint URL"
+#: mod/profperm.php:109 mod/group.php:264
+msgid "Click on a contact to add or remove."
 msgstr ""
 
-#: mod/crepair.php:177
-msgid "Poll/Feed URL"
+#: mod/profperm.php:118
+msgid "Visible To"
 msgstr ""
 
-#: mod/crepair.php:178
-msgid "New photo from this URL"
+#: mod/profperm.php:134
+msgid "All Contacts (with secure profile access)"
 msgstr ""
 
-#: mod/delegate.php:103
-msgid "No potential page delegates located."
+#: mod/update_community.php:21 mod/update_display.php:25
+#: mod/update_notes.php:38 mod/update_profile.php:37 mod/update_network.php:29
+msgid "[Embedded content - reload page to view]"
 msgstr ""
 
-#: mod/delegate.php:134
-msgid ""
-"Delegates are able to manage all aspects of this account/page except for "
-"basic account settings. Please do not delegate your personal account to "
-"anybody that you do not trust completely."
+#: mod/viewcontacts.php:39 mod/webfinger.php:10 mod/probe.php:9
+#: mod/search.php:96 mod/search.php:102 mod/community.php:17
+#: mod/dfrn_request.php:805 mod/directory.php:33 mod/display.php:218
+#: mod/photos.php:982 mod/videos.php:201
+msgid "Public access denied."
 msgstr ""
 
-#: mod/delegate.php:135
-msgid "Existing Page Managers"
+#: mod/viewcontacts.php:78
+msgid "No contacts."
 msgstr ""
 
-#: mod/delegate.php:137
-msgid "Existing Page Delegates"
+#: mod/viewsrc.php:8
+msgid "Access denied."
 msgstr ""
 
-#: mod/delegate.php:139
-msgid "Potential Delegates"
+#: mod/wall_attach.php:19 mod/wall_attach.php:27 mod/wall_attach.php:78
+#: mod/wall_upload.php:37 mod/wall_upload.php:53 mod/wall_upload.php:111
+#: mod/wall_upload.php:151 mod/wall_upload.php:154
+msgid "Invalid request."
 msgstr ""
 
-#: mod/delegate.php:141 mod/tagrm.php:97
-msgid "Remove"
+#: mod/wall_attach.php:96
+msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
 msgstr ""
 
-#: mod/delegate.php:142
-msgid "Add"
+#: mod/wall_attach.php:96
+msgid "Or - did you try to upload an empty file?"
 msgstr ""
 
-#: mod/delegate.php:143
-msgid "No entries."
+#: mod/wall_attach.php:107
+#, php-format
+msgid "File exceeds size limit of %s"
 msgstr ""
 
-#: mod/dfrn_confirm.php:72 mod/profiles.php:23 mod/profiles.php:139
-#: mod/profiles.php:186 mod/profiles.php:622
-msgid "Profile not found."
+#: mod/wall_attach.php:160 mod/wall_attach.php:176
+msgid "File upload failed."
 msgstr ""
 
-#: mod/dfrn_confirm.php:129
-msgid ""
-"This may occasionally happen if contact was requested by both persons and it "
-"has already been approved."
+#: mod/webfinger.php:11 mod/probe.php:10
+msgid "Only logged in users are permitted to perform a probing."
 msgstr ""
 
-#: mod/dfrn_confirm.php:246
-msgid "Response from remote site was not understood."
+#: mod/uimport.php:53 mod/register.php:202
+msgid ""
+"This site has exceeded the number of allowed daily account registrations. "
+"Please try again tomorrow."
 msgstr ""
 
-#: mod/dfrn_confirm.php:255 mod/dfrn_confirm.php:260
-msgid "Unexpected response from remote site: "
+#: mod/uimport.php:68 mod/register.php:299
+msgid "Import"
 msgstr ""
 
-#: mod/dfrn_confirm.php:269
-msgid "Confirmation completed successfully."
+#: mod/uimport.php:70
+msgid "Move account"
 msgstr ""
 
-#: mod/dfrn_confirm.php:271 mod/dfrn_confirm.php:285 mod/dfrn_confirm.php:292
-msgid "Remote site reported: "
+#: mod/uimport.php:71
+msgid "You can import an account from another Friendica server."
 msgstr ""
 
-#: mod/dfrn_confirm.php:283
-msgid "Temporary failure. Please wait and try again."
+#: mod/uimport.php:72
+msgid ""
+"You need to export your account from the old server and upload it here. We "
+"will recreate your old account here with all your contacts. We will try also "
+"to inform your friends that you moved here."
 msgstr ""
 
-#: mod/dfrn_confirm.php:290
-msgid "Introduction failed or was revoked."
+#: mod/uimport.php:73
+msgid ""
+"This feature is experimental. We can't import contacts from the OStatus "
+"network (GNU Social/Statusnet) or from Diaspora"
 msgstr ""
 
-#: mod/dfrn_confirm.php:420
-msgid "Unable to set contact photo."
+#: mod/uimport.php:74
+msgid "Account file"
 msgstr ""
 
-#: mod/dfrn_confirm.php:561
-#, php-format
-msgid "No user record found for '%s' "
+#: mod/uimport.php:74
+msgid ""
+"To export your account, go to \"Settings->Export your personal data\" and "
+"select \"Export account\""
 msgstr ""
 
-#: mod/dfrn_confirm.php:571
-msgid "Our site encryption key is apparently messed up."
+#: mod/search.php:28 mod/network.php:187
+msgid "Remove term"
 msgstr ""
 
-#: mod/dfrn_confirm.php:582
-msgid "Empty site URL was provided or URL could not be decrypted by us."
+#: mod/search.php:103
+msgid "Only logged in users are permitted to perform a search."
 msgstr ""
 
-#: mod/dfrn_confirm.php:604
-msgid "Contact record was not found for you on our site."
+#: mod/search.php:127
+msgid "Too Many Requests"
 msgstr ""
 
-#: mod/dfrn_confirm.php:618
-#, php-format
-msgid "Site public key not available in contact record for URL %s."
+#: mod/search.php:128
+msgid "Only one search per minute is permitted for not logged in users."
 msgstr ""
 
-#: mod/dfrn_confirm.php:638
-msgid ""
-"The ID provided by your system is a duplicate on our system. It should work "
-"if you try again."
+#: mod/search.php:222 mod/community.php:49
+msgid "No results."
 msgstr ""
 
-#: mod/dfrn_confirm.php:649
-msgid "Unable to set your contact credentials on our system."
+#: mod/search.php:228
+#, php-format
+msgid "Items tagged with: %s"
 msgstr ""
 
-#: mod/dfrn_confirm.php:711
-msgid "Unable to update your contact profile details on our system"
+#: mod/search.php:230 mod/contacts.php:817
+#, php-format
+msgid "Results for: %s"
 msgstr ""
 
-#: mod/dfrn_confirm.php:783
-#, php-format
-msgid "%1$s has joined %2$s"
+#: mod/community.php:22
+msgid "Not available."
 msgstr ""
 
-#: mod/directory.php:33 mod/photos.php:981 mod/videos.php:200
-#: mod/viewcontacts.php:39 mod/webfinger.php:10 mod/dfrn_request.php:804
-#: mod/probe.php:9 mod/search.php:96 mod/search.php:102 mod/community.php:17
-#: mod/display.php:217
-msgid "Public access denied."
+#: mod/admin.php:99
+msgid "Theme settings updated."
 msgstr ""
 
-#: mod/directory.php:195 view/theme/vier/theme.php:193
-msgid "Global Directory"
+#: mod/admin.php:171 mod/admin.php:1146
+msgid "Site"
 msgstr ""
 
-#: mod/directory.php:197
-msgid "Find on this site"
+#: mod/admin.php:172 mod/admin.php:1080 mod/admin.php:1590 mod/admin.php:1606
+msgid "Users"
 msgstr ""
 
-#: mod/directory.php:199
-msgid "Results for:"
+#: mod/admin.php:173 mod/admin.php:1708 mod/admin.php:1771 mod/settings.php:77
+msgid "Plugins"
 msgstr ""
 
-#: mod/directory.php:201
-msgid "Site Directory"
+#: mod/admin.php:174 mod/admin.php:1984 mod/admin.php:2034
+msgid "Themes"
 msgstr ""
 
-#: mod/directory.php:208
-msgid "No entries (some entries may be hidden)."
+#: mod/admin.php:175 mod/settings.php:55
+msgid "Additional features"
 msgstr ""
 
-#: mod/editpost.php:19 mod/editpost.php:29
-msgid "Item not found"
+#: mod/admin.php:176
+msgid "DB updates"
 msgstr ""
 
-#: mod/editpost.php:34
-msgid "Edit post"
+#: mod/admin.php:177 mod/admin.php:584
+msgid "Inspect Queue"
 msgstr ""
 
-#: mod/fbrowser.php:134
-msgid "Files"
+#: mod/admin.php:178 mod/admin.php:298
+msgid "Server Blocklist"
 msgstr ""
 
-#: mod/filer.php:31
-msgid "- select -"
+#: mod/admin.php:179 mod/admin.php:550
+msgid "Federation Statistics"
 msgstr ""
 
-#: mod/friendica.php:69
-msgid "This is Friendica, version"
+#: mod/admin.php:180 mod/admin.php:375
+msgid "Delete Item"
 msgstr ""
 
-#: mod/friendica.php:70
-msgid "running at web location"
+#: mod/admin.php:194 mod/admin.php:205 mod/admin.php:2108
+msgid "Logs"
 msgstr ""
 
-#: mod/friendica.php:74
-msgid ""
-"Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
-"more about the Friendica project."
+#: mod/admin.php:195 mod/admin.php:2176
+msgid "View Logs"
 msgstr ""
 
-#: mod/friendica.php:78
-msgid "Bug reports and issues: please visit"
+#: mod/admin.php:196
+msgid "probe address"
 msgstr ""
 
-#: mod/friendica.php:78
-msgid "the bugtracker at github"
+#: mod/admin.php:197
+msgid "check webfinger"
 msgstr ""
 
-#: mod/friendica.php:81
-msgid ""
-"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
-"dot com"
+#: mod/admin.php:204
+msgid "Plugin Features"
 msgstr ""
 
-#: mod/friendica.php:95
-msgid "Installed plugins/addons/apps:"
+#: mod/admin.php:206
+msgid "diagnostics"
 msgstr ""
 
-#: mod/friendica.php:109
-msgid "No installed plugins/addons/apps"
+#: mod/admin.php:207
+msgid "User registrations waiting for confirmation"
 msgstr ""
 
-#: mod/friendica.php:114
-msgid "On this server the following remote servers are blocked."
+#: mod/admin.php:289
+msgid "The blocked domain"
 msgstr ""
 
-#: mod/friendica.php:115 mod/admin.php:289 mod/admin.php:307
+#: mod/admin.php:290 mod/admin.php:308 mod/friendica.php:116
 msgid "Reason for the block"
 msgstr ""
 
-#: mod/fsuggest.php:65
-msgid "Friend suggestion sent."
+#: mod/admin.php:290 mod/admin.php:303
+msgid "The reason why you blocked this domain."
 msgstr ""
 
-#: mod/fsuggest.php:99
-msgid "Suggest Friends"
+#: mod/admin.php:291
+msgid "Delete domain"
 msgstr ""
 
-#: mod/fsuggest.php:101
-#, php-format
-msgid "Suggest a friend for %s"
+#: mod/admin.php:291
+msgid "Check to delete this entry from the blocklist"
 msgstr ""
 
-#: mod/group.php:30
-msgid "Group created."
+#: mod/admin.php:297 mod/admin.php:374 mod/admin.php:549 mod/admin.php:583
+#: mod/admin.php:663 mod/admin.php:1145 mod/admin.php:1589 mod/admin.php:1707
+#: mod/admin.php:1770 mod/admin.php:1983 mod/admin.php:2033 mod/admin.php:2107
+#: mod/admin.php:2175
+msgid "Administration"
 msgstr ""
 
-#: mod/group.php:36
-msgid "Could not create group."
+#: mod/admin.php:299
+msgid ""
+"This page can be used to define a black list of servers from the federated "
+"network that are not allowed to interact with your node. For all entered "
+"domains you should also give a reason why you have blocked the remote server."
 msgstr ""
 
-#: mod/group.php:50 mod/group.php:155
-msgid "Group not found."
+#: mod/admin.php:300
+msgid ""
+"The list of blocked servers will be made publically available on the /"
+"friendica page so that your users and people investigating communication "
+"problems can find the reason easily."
 msgstr ""
 
-#: mod/group.php:64
-msgid "Group name changed."
+#: mod/admin.php:301
+msgid "Add new entry to block list"
 msgstr ""
 
-#: mod/group.php:77 mod/profperm.php:22 index.php:409
-msgid "Permission denied"
+#: mod/admin.php:302
+msgid "Server Domain"
 msgstr ""
 
-#: mod/group.php:94
-msgid "Save Group"
+#: mod/admin.php:302
+msgid ""
+"The domain of the new server to add to the block list. Do not include the "
+"protocol."
 msgstr ""
 
-#: mod/group.php:99
-msgid "Create a group of contacts/friends."
+#: mod/admin.php:303
+msgid "Block reason"
 msgstr ""
 
-#: mod/group.php:124
-msgid "Group removed."
+#: mod/admin.php:304
+msgid "Add Entry"
 msgstr ""
 
-#: mod/group.php:126
-msgid "Unable to remove group."
+#: mod/admin.php:305
+msgid "Save changes to the blocklist"
 msgstr ""
 
-#: mod/group.php:190
-msgid "Delete Group"
+#: mod/admin.php:306
+msgid "Current Entries in the Blocklist"
 msgstr ""
 
-#: mod/group.php:196
-msgid "Group Editor"
+#: mod/admin.php:309
+msgid "Delete entry from blocklist"
 msgstr ""
 
-#: mod/group.php:201
-msgid "Edit Group Name"
+#: mod/admin.php:312
+msgid "Delete entry from blocklist?"
 msgstr ""
 
-#: mod/group.php:211
-msgid "Members"
+#: mod/admin.php:337
+msgid "Server added to blocklist."
 msgstr ""
 
-#: mod/group.php:213 mod/contacts.php:705
-msgid "All Contacts"
+#: mod/admin.php:353
+msgid "Site blocklist updated."
 msgstr ""
 
-#: mod/group.php:227
-msgid "Remove Contact"
+#: mod/admin.php:376
+msgid "Delete this Item"
 msgstr ""
 
-#: mod/group.php:251
-msgid "Add Contact"
+#: mod/admin.php:377
+msgid ""
+"On this page you can delete an item from your node. If the item is a top "
+"level posting, the entire thread will be deleted."
 msgstr ""
 
-#: mod/group.php:263 mod/profperm.php:109
-msgid "Click on a contact to add or remove."
+#: mod/admin.php:378
+msgid ""
+"You need to know the GUID of the item. You can find it e.g. by looking at "
+"the display URL. The last part of http://example.com/display/123456 is the "
+"GUID, here 123456."
 msgstr ""
 
-#: mod/hcard.php:13
-msgid "No profile"
+#: mod/admin.php:379
+msgid "GUID"
 msgstr ""
 
-#: mod/home.php:41
-#, php-format
-msgid "Welcome to %s"
+#: mod/admin.php:379
+msgid "The GUID of the item you want to delete."
 msgstr ""
 
-#: mod/install.php:108
-msgid "Friendica Communications Server - Setup"
+#: mod/admin.php:416
+msgid "Item marked for deletion."
 msgstr ""
 
-#: mod/install.php:114
-msgid "Could not connect to database."
+#: mod/admin.php:480
+msgid "unknown"
 msgstr ""
 
-#: mod/install.php:118
-msgid "Could not create table."
+#: mod/admin.php:543
+msgid ""
+"This page offers you some numbers to the known part of the federated social "
+"network your Friendica node is part of. These numbers are not complete but "
+"only reflect the part of the network your node is aware of."
 msgstr ""
 
-#: mod/install.php:124
-msgid "Your Friendica site database has been installed."
+#: mod/admin.php:544
+msgid ""
+"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
+"will improve the data displayed here."
 msgstr ""
 
-#: mod/install.php:129
-msgid ""
-"You may need to import the file \"database.sql\" manually using phpmyadmin "
-"or mysql."
+#: mod/admin.php:556
+#, php-format
+msgid "Currently this node is aware of %d nodes from the following platforms:"
 msgstr ""
 
-#: mod/install.php:130 mod/install.php:202 mod/install.php:549
-msgid "Please see the file \"INSTALL.txt\"."
+#: mod/admin.php:586
+msgid "ID"
 msgstr ""
 
-#: mod/install.php:142
-msgid "Database already in use."
+#: mod/admin.php:587
+msgid "Recipient Name"
 msgstr ""
 
-#: mod/install.php:199
-msgid "System check"
+#: mod/admin.php:588
+msgid "Recipient Profile"
 msgstr ""
 
-#: mod/install.php:204
-msgid "Check again"
+#: mod/admin.php:590
+msgid "Created"
 msgstr ""
 
-#: mod/install.php:223
-msgid "Database connection"
+#: mod/admin.php:591
+msgid "Last Tried"
 msgstr ""
 
-#: mod/install.php:224
+#: mod/admin.php:592
 msgid ""
-"In order to install Friendica we need to know how to connect to your "
-"database."
+"This page lists the content of the queue for outgoing postings. These are "
+"postings the initial delivery failed for. They will be resend later and "
+"eventually deleted if the delivery fails permanently."
 msgstr ""
 
-#: mod/install.php:225
+#: mod/admin.php:617
+#, php-format
 msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
+"Your DB still runs with MyISAM tables. You should change the engine type to "
+"InnoDB. As Friendica will use InnoDB only features in the future, you should "
+"change this! See <a href=\"%s\">here</a> for a guide that may be helpful "
+"converting the table engines. You may also use the command <tt>php include/"
+"dbstructure.php toinnodb</tt> of your Friendica installation for an "
+"automatic conversion.<br />"
 msgstr ""
 
-#: mod/install.php:226
+#: mod/admin.php:626
 msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
+"The database update failed. Please run \"php include/dbstructure.php update"
+"\" from the command line and have a look at the errors that might appear."
 msgstr ""
 
-#: mod/install.php:230
-msgid "Database Server Name"
+#: mod/admin.php:631 mod/admin.php:1539
+msgid "Normal Account"
 msgstr ""
 
-#: mod/install.php:231
-msgid "Database Login Name"
+#: mod/admin.php:632 mod/admin.php:1540
+msgid "Automatic Follower Account"
 msgstr ""
 
-#: mod/install.php:232
-msgid "Database Login Password"
+#: mod/admin.php:633 mod/admin.php:1541
+msgid "Public Forum Account"
 msgstr ""
 
-#: mod/install.php:232
-msgid "For security reasons the password must not be empty"
+#: mod/admin.php:634 mod/admin.php:1542
+msgid "Automatic Friend Account"
 msgstr ""
 
-#: mod/install.php:233
-msgid "Database Name"
+#: mod/admin.php:635
+msgid "Blog Account"
 msgstr ""
 
-#: mod/install.php:234 mod/install.php:275
-msgid "Site administrator email address"
+#: mod/admin.php:636
+msgid "Private Forum Account"
 msgstr ""
 
-#: mod/install.php:234 mod/install.php:275
-msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
+#: mod/admin.php:658
+msgid "Message queues"
 msgstr ""
 
-#: mod/install.php:238 mod/install.php:278
-msgid "Please select a default timezone for your website"
+#: mod/admin.php:664
+msgid "Summary"
 msgstr ""
 
-#: mod/install.php:265
-msgid "Site settings"
+#: mod/admin.php:666
+msgid "Registered users"
 msgstr ""
 
-#: mod/install.php:279
-msgid "System Language:"
+#: mod/admin.php:668
+msgid "Pending registrations"
 msgstr ""
 
-#: mod/install.php:279
-msgid ""
-"Set the default language for your Friendica installation interface and to "
-"send emails."
+#: mod/admin.php:669
+msgid "Version"
 msgstr ""
 
-#: mod/install.php:319
-msgid "Could not find a command line version of PHP in the web server PATH."
+#: mod/admin.php:674
+msgid "Active plugins"
 msgstr ""
 
-#: mod/install.php:320
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run the background processing. See <a href='https://"
-"github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-"
-"poller'>'Setup the poller'</a>"
+#: mod/admin.php:699
+msgid "Can not parse base url. Must have at least <scheme>://<domain>"
 msgstr ""
 
-#: mod/install.php:324
-msgid "PHP executable path"
+#: mod/admin.php:1006
+msgid "Site settings updated."
 msgstr ""
 
-#: mod/install.php:324
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
+#: mod/admin.php:1034 mod/settings.php:945
+msgid "No special theme for mobile devices"
 msgstr ""
 
-#: mod/install.php:329
-msgid "Command line PHP"
+#: mod/admin.php:1063
+msgid "No community page"
 msgstr ""
 
-#: mod/install.php:338
-msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
+#: mod/admin.php:1064
+msgid "Public postings from users of this site"
 msgstr ""
 
-#: mod/install.php:339
-msgid "Found PHP version: "
+#: mod/admin.php:1065
+msgid "Global community page"
 msgstr ""
 
-#: mod/install.php:341
-msgid "PHP cli binary"
+#: mod/admin.php:1070 mod/contacts.php:542
+msgid "Never"
 msgstr ""
 
-#: mod/install.php:352
-msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
+#: mod/admin.php:1071
+msgid "At post arrival"
 msgstr ""
 
-#: mod/install.php:353
-msgid "This is required for message delivery to work."
+#: mod/admin.php:1079 mod/contacts.php:569
+msgid "Disabled"
 msgstr ""
 
-#: mod/install.php:355
-msgid "PHP register_argc_argv"
+#: mod/admin.php:1081
+msgid "Users, Global Contacts"
 msgstr ""
 
-#: mod/install.php:378
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
+#: mod/admin.php:1082
+msgid "Users, Global Contacts/fallback"
 msgstr ""
 
-#: mod/install.php:379
-msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
+#: mod/admin.php:1086
+msgid "One month"
 msgstr ""
 
-#: mod/install.php:381
-msgid "Generate encryption keys"
+#: mod/admin.php:1087
+msgid "Three months"
 msgstr ""
 
-#: mod/install.php:388
-msgid "libCurl PHP module"
+#: mod/admin.php:1088
+msgid "Half a year"
 msgstr ""
 
-#: mod/install.php:389
-msgid "GD graphics PHP module"
+#: mod/admin.php:1089
+msgid "One year"
 msgstr ""
 
-#: mod/install.php:390
-msgid "OpenSSL PHP module"
+#: mod/admin.php:1094
+msgid "Multi user instance"
 msgstr ""
 
-#: mod/install.php:391
-msgid "PDO or MySQLi PHP module"
+#: mod/admin.php:1117
+msgid "Closed"
 msgstr ""
 
-#: mod/install.php:392
-msgid "mb_string PHP module"
+#: mod/admin.php:1118
+msgid "Requires approval"
 msgstr ""
 
-#: mod/install.php:393
-msgid "XML PHP module"
+#: mod/admin.php:1119
+msgid "Open"
 msgstr ""
 
-#: mod/install.php:394
-msgid "iconv module"
+#: mod/admin.php:1123
+msgid "No SSL policy, links will track page SSL state"
 msgstr ""
 
-#: mod/install.php:398 mod/install.php:400
-msgid "Apache mod_rewrite module"
+#: mod/admin.php:1124
+msgid "Force all links to use SSL"
 msgstr ""
 
-#: mod/install.php:398
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
+#: mod/admin.php:1125
+msgid "Self-signed certificate, use SSL for local links only (discouraged)"
 msgstr ""
 
-#: mod/install.php:406
-msgid "Error: libCURL PHP module required but not installed."
+#: mod/admin.php:1147 mod/admin.php:1772 mod/admin.php:2035 mod/admin.php:2109
+#: mod/admin.php:2262 mod/settings.php:683 mod/settings.php:794
+#: mod/settings.php:843 mod/settings.php:910 mod/settings.php:1007
+#: mod/settings.php:1273
+msgid "Save Settings"
 msgstr ""
 
-#: mod/install.php:410
-msgid ""
-"Error: GD graphics PHP module with JPEG support required but not installed."
+#: mod/admin.php:1148 mod/register.php:276
+msgid "Registration"
 msgstr ""
 
-#: mod/install.php:414
-msgid "Error: openssl PHP module required but not installed."
+#: mod/admin.php:1149
+msgid "File upload"
 msgstr ""
 
-#: mod/install.php:418
-msgid "Error: PDO or MySQLi PHP module required but not installed."
+#: mod/admin.php:1150
+msgid "Policies"
 msgstr ""
 
-#: mod/install.php:422
-msgid "Error: The MySQL driver for PDO is not installed."
+#: mod/admin.php:1152
+msgid "Auto Discovered Contact Directory"
 msgstr ""
 
-#: mod/install.php:426
-msgid "Error: mb_string PHP module required but not installed."
+#: mod/admin.php:1153
+msgid "Performance"
 msgstr ""
 
-#: mod/install.php:430
-msgid "Error: iconv PHP module required but not installed."
+#: mod/admin.php:1154
+msgid "Worker"
 msgstr ""
 
-#: mod/install.php:440
-msgid "Error, XML PHP module required but not installed."
+#: mod/admin.php:1155
+msgid ""
+"Relocate - WARNING: advanced function. Could make this server unreachable."
 msgstr ""
 
-#: mod/install.php:452
-msgid ""
-"The web installer needs to be able to create a file called \".htconfig.php\" "
-"in the top folder of your web server and it is unable to do so."
+#: mod/admin.php:1158
+msgid "Site name"
 msgstr ""
 
-#: mod/install.php:453
-msgid ""
-"This is most often a permission setting, as the web server may not be able "
-"to write files in your folder - even if you can."
+#: mod/admin.php:1159
+msgid "Host name"
 msgstr ""
 
-#: mod/install.php:454
-msgid ""
-"At the end of this procedure, we will give you a text to save in a file "
-"named .htconfig.php in your Friendica top folder."
+#: mod/admin.php:1160
+msgid "Sender Email"
 msgstr ""
 
-#: mod/install.php:455
+#: mod/admin.php:1160
 msgid ""
-"You can alternatively skip this procedure and perform a manual installation. "
-"Please see the file \"INSTALL.txt\" for instructions."
+"The email address your server shall use to send notification emails from."
 msgstr ""
 
-#: mod/install.php:458
-msgid ".htconfig.php is writable"
+#: mod/admin.php:1161
+msgid "Banner/Logo"
 msgstr ""
 
-#: mod/install.php:468
-msgid ""
-"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
-"compiles templates to PHP to speed up rendering."
+#: mod/admin.php:1162
+msgid "Shortcut icon"
 msgstr ""
 
-#: mod/install.php:469
-msgid ""
-"In order to store these compiled templates, the web server needs to have "
-"write access to the directory view/smarty3/ under the Friendica top level "
-"folder."
+#: mod/admin.php:1162
+msgid "Link to an icon that will be used for browsers."
 msgstr ""
 
-#: mod/install.php:470
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has "
-"write access to this folder."
+#: mod/admin.php:1163
+msgid "Touch icon"
 msgstr ""
 
-#: mod/install.php:471
-msgid ""
-"Note: as a security measure, you should give the web server write access to "
-"view/smarty3/ only--not the template files (.tpl) that it contains."
+#: mod/admin.php:1163
+msgid "Link to an icon that will be used for tablets and mobiles."
 msgstr ""
 
-#: mod/install.php:474
-msgid "view/smarty3 is writable"
+#: mod/admin.php:1164
+msgid "Additional Info"
 msgstr ""
 
-#: mod/install.php:490
+#: mod/admin.php:1164
+#, php-format
 msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
+"For public servers: you can add additional information here that will be "
+"listed at %s/siteinfo."
 msgstr ""
 
-#: mod/install.php:492
-msgid "Url rewrite is working"
+#: mod/admin.php:1165
+msgid "System language"
 msgstr ""
 
-#: mod/install.php:511
-msgid "ImageMagick PHP extension is not installed"
+#: mod/admin.php:1166
+msgid "System theme"
 msgstr ""
 
-#: mod/install.php:513
-msgid "ImageMagick PHP extension is installed"
+#: mod/admin.php:1166
+msgid ""
+"Default system theme - may be over-ridden by user profiles - <a href='#' "
+"id='cnftheme'>change theme settings</a>"
 msgstr ""
 
-#: mod/install.php:515
-msgid "ImageMagick supports GIF"
+#: mod/admin.php:1167
+msgid "Mobile system theme"
 msgstr ""
 
-#: mod/install.php:522
-msgid ""
-"The database configuration file \".htconfig.php\" could not be written. "
-"Please use the enclosed text to create a configuration file in your web "
-"server root."
+#: mod/admin.php:1167
+msgid "Theme for mobile devices"
 msgstr ""
 
-#: mod/install.php:547
-msgid "<h1>What next</h1>"
+#: mod/admin.php:1168
+msgid "SSL link policy"
 msgstr ""
 
-#: mod/install.php:548
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+#: mod/admin.php:1168
+msgid "Determines whether generated links should be forced to use SSL"
 msgstr ""
 
-#: mod/localtime.php:25
-msgid "Time Conversion"
+#: mod/admin.php:1169
+msgid "Force SSL"
 msgstr ""
 
-#: mod/localtime.php:27
+#: mod/admin.php:1169
 msgid ""
-"Friendica provides this service for sharing events with other networks and "
-"friends in unknown timezones."
+"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
+"to endless loops."
 msgstr ""
 
-#: mod/localtime.php:31
-#, php-format
-msgid "UTC time: %s"
+#: mod/admin.php:1170
+msgid "Hide help entry from navigation menu"
 msgstr ""
 
-#: mod/localtime.php:34
-#, php-format
-msgid "Current timezone: %s"
+#: mod/admin.php:1170
+msgid ""
+"Hides the menu entry for the Help pages from the navigation menu. You can "
+"still access it calling /help directly."
 msgstr ""
 
-#: mod/localtime.php:37
-#, php-format
-msgid "Converted localtime: %s"
+#: mod/admin.php:1171
+msgid "Single user instance"
 msgstr ""
 
-#: mod/localtime.php:42
-msgid "Please select your timezone:"
+#: mod/admin.php:1171
+msgid "Make this instance multi-user or single-user for the named user"
 msgstr ""
 
-#: mod/lockview.php:33 mod/lockview.php:41
-msgid "Remote privacy information not available."
+#: mod/admin.php:1172
+msgid "Maximum image size"
 msgstr ""
 
-#: mod/lockview.php:50
-msgid "Visible to:"
+#: mod/admin.php:1172
+msgid ""
+"Maximum size in bytes of uploaded images. Default is 0, which means no "
+"limits."
 msgstr ""
 
-#: mod/lostpass.php:21
-msgid "No valid account found."
+#: mod/admin.php:1173
+msgid "Maximum image length"
 msgstr ""
 
-#: mod/lostpass.php:37
-msgid "Password reset request issued. Check your email."
+#: mod/admin.php:1173
+msgid ""
+"Maximum length in pixels of the longest side of uploaded images. Default is "
+"-1, which means no limits."
 msgstr ""
 
-#: mod/lostpass.php:43
-#, php-format
-msgid ""
-"\n"
-"\t\tDear %1$s,\n"
-"\t\t\tA request was recently received at \"%2$s\" to reset your account\n"
-"\t\tpassword. In order to confirm this request, please select the "
-"verification link\n"
-"\t\tbelow or paste it into your web browser address bar.\n"
-"\n"
-"\t\tIf you did NOT request this change, please DO NOT follow the link\n"
-"\t\tprovided and ignore and/or delete this email.\n"
-"\n"
-"\t\tYour password will not be changed unless we can verify that you\n"
-"\t\tissued this request."
+#: mod/admin.php:1174
+msgid "JPEG image quality"
 msgstr ""
 
-#: mod/lostpass.php:54
-#, php-format
+#: mod/admin.php:1174
 msgid ""
-"\n"
-"\t\tFollow this link to verify your identity:\n"
-"\n"
-"\t\t%1$s\n"
-"\n"
-"\t\tYou will then receive a follow-up message containing the new password.\n"
-"\t\tYou may change that password from your account settings page after "
-"logging in.\n"
-"\n"
-"\t\tThe login details are as follows:\n"
-"\n"
-"\t\tSite Location:\t%2$s\n"
-"\t\tLogin Name:\t%3$s"
+"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
+"100, which is full quality."
 msgstr ""
 
-#: mod/lostpass.php:73
-#, php-format
-msgid "Password reset requested at %s"
+#: mod/admin.php:1176
+msgid "Register policy"
 msgstr ""
 
-#: mod/lostpass.php:93
-msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
+#: mod/admin.php:1177
+msgid "Maximum Daily Registrations"
 msgstr ""
 
-#: mod/lostpass.php:112 boot.php:886
-msgid "Password Reset"
+#: mod/admin.php:1177
+msgid ""
+"If registration is permitted above, this sets the maximum number of new user "
+"registrations to accept per day.  If register is set to closed, this setting "
+"has no effect."
 msgstr ""
 
-#: mod/lostpass.php:113
-msgid "Your password has been reset as requested."
+#: mod/admin.php:1178
+msgid "Register text"
 msgstr ""
 
-#: mod/lostpass.php:114
-msgid "Your new password is"
+#: mod/admin.php:1178
+msgid "Will be displayed prominently on the registration page."
 msgstr ""
 
-#: mod/lostpass.php:115
-msgid "Save or copy your new password - and then"
+#: mod/admin.php:1179
+msgid "Accounts abandoned after x days"
 msgstr ""
 
-#: mod/lostpass.php:116
-msgid "click here to login"
-msgstr ""
-
-#: mod/lostpass.php:117
+#: mod/admin.php:1179
 msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
+"Will not waste system resources polling external sites for abandonded "
+"accounts. Enter 0 for no time limit."
 msgstr ""
 
-#: mod/lostpass.php:127
-#, php-format
-msgid ""
-"\n"
-"\t\t\t\tDear %1$s,\n"
-"\t\t\t\t\tYour password has been changed as requested. Please retain this\n"
-"\t\t\t\tinformation for your records (or change your password immediately "
-"to\n"
-"\t\t\t\tsomething that you will remember).\n"
-"\t\t\t"
+#: mod/admin.php:1180
+msgid "Allowed friend domains"
 msgstr ""
 
-#: mod/lostpass.php:133
-#, php-format
+#: mod/admin.php:1180
 msgid ""
-"\n"
-"\t\t\t\tYour login details are as follows:\n"
-"\n"
-"\t\t\t\tSite Location:\t%1$s\n"
-"\t\t\t\tLogin Name:\t%2$s\n"
-"\t\t\t\tPassword:\t%3$s\n"
-"\n"
-"\t\t\t\tYou may change that password from your account settings page after "
-"logging in.\n"
-"\t\t\t"
+"Comma separated list of domains which are allowed to establish friendships "
+"with this site. Wildcards are accepted. Empty to allow any domains"
 msgstr ""
 
-#: mod/lostpass.php:149
-#, php-format
-msgid "Your password has been changed at %s"
+#: mod/admin.php:1181
+msgid "Allowed email domains"
 msgstr ""
 
-#: mod/lostpass.php:161
-msgid "Forgot your Password?"
+#: mod/admin.php:1181
+msgid ""
+"Comma separated list of domains which are allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains"
 msgstr ""
 
-#: mod/lostpass.php:162
-msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
+#: mod/admin.php:1182
+msgid "Block public"
 msgstr ""
 
-#: mod/lostpass.php:163 boot.php:874
-msgid "Nickname or Email: "
+#: mod/admin.php:1182
+msgid ""
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently logged in."
 msgstr ""
 
-#: mod/lostpass.php:164
-msgid "Reset"
+#: mod/admin.php:1183
+msgid "Force publish"
 msgstr ""
 
-#: mod/maintenance.php:21
-msgid "System down for maintenance"
+#: mod/admin.php:1183
+msgid ""
+"Check to force all profiles on this site to be listed in the site directory."
 msgstr ""
 
-#: mod/manage.php:152
-msgid "Manage Identities and/or Pages"
+#: mod/admin.php:1184
+msgid "Global directory URL"
 msgstr ""
 
-#: mod/manage.php:153
+#: mod/admin.php:1184
 msgid ""
-"Toggle between different identities or community/group pages which share "
-"your account details or which you have been granted \"manage\" permissions"
+"URL to the global directory. If this is not set, the global directory is "
+"completely unavailable to the application."
 msgstr ""
 
-#: mod/manage.php:154
-msgid "Select an identity to manage: "
+#: mod/admin.php:1185
+msgid "Allow threaded items"
 msgstr ""
 
-#: mod/match.php:38
-msgid "No keywords to match. Please add keywords to your default profile."
+#: mod/admin.php:1185
+msgid "Allow infinite level threading for items on this site."
 msgstr ""
 
-#: mod/match.php:91
-msgid "is interested in:"
+#: mod/admin.php:1186
+msgid "Private posts by default for new users"
 msgstr ""
 
-#: mod/match.php:105
-msgid "Profile Match"
+#: mod/admin.php:1186
+msgid ""
+"Set default post permissions for all new members to the default privacy "
+"group rather than public."
 msgstr ""
 
-#: mod/match.php:112 mod/dirfind.php:247
-msgid "No matches"
+#: mod/admin.php:1187
+msgid "Don't include post content in email notifications"
 msgstr ""
 
-#: mod/message.php:62 mod/wallmessage.php:52
-msgid "No recipient selected."
+#: mod/admin.php:1187
+msgid ""
+"Don't include the content of a post/comment/private message/etc. in the "
+"email notifications that are sent out from this site, as a privacy measure."
 msgstr ""
 
-#: mod/message.php:66
-msgid "Unable to locate contact information."
+#: mod/admin.php:1188
+msgid "Disallow public access to addons listed in the apps menu."
 msgstr ""
 
-#: mod/message.php:69 mod/wallmessage.php:58
-msgid "Message could not be sent."
+#: mod/admin.php:1188
+msgid ""
+"Checking this box will restrict addons listed in the apps menu to members "
+"only."
 msgstr ""
 
-#: mod/message.php:72 mod/wallmessage.php:61
-msgid "Message collection failure."
+#: mod/admin.php:1189
+msgid "Don't embed private images in posts"
 msgstr ""
 
-#: mod/message.php:75 mod/wallmessage.php:64
-msgid "Message sent."
+#: mod/admin.php:1189
+msgid ""
+"Don't replace locally-hosted private photos in posts with an embedded copy "
+"of the image. This means that contacts who receive posts containing private "
+"photos will have to authenticate and load each image, which may take a while."
 msgstr ""
 
-#: mod/message.php:206
-msgid "Do you really want to delete this message?"
+#: mod/admin.php:1190
+msgid "Allow Users to set remote_self"
 msgstr ""
 
-#: mod/message.php:226
-msgid "Message deleted."
+#: mod/admin.php:1190
+msgid ""
+"With checking this, every user is allowed to mark every contact as a "
+"remote_self in the repair contact dialog. Setting this flag on a contact "
+"causes mirroring every posting of that contact in the users stream."
 msgstr ""
 
-#: mod/message.php:257
-msgid "Conversation removed."
+#: mod/admin.php:1191
+msgid "Block multiple registrations"
 msgstr ""
 
-#: mod/message.php:324 mod/wallmessage.php:128
-msgid "Send Private Message"
+#: mod/admin.php:1191
+msgid "Disallow users to register additional accounts for use as pages."
 msgstr ""
 
-#: mod/message.php:325 mod/message.php:512 mod/wallmessage.php:130
-msgid "To:"
+#: mod/admin.php:1192
+msgid "OpenID support"
 msgstr ""
 
-#: mod/message.php:330 mod/message.php:514 mod/wallmessage.php:131
-msgid "Subject:"
+#: mod/admin.php:1192
+msgid "OpenID support for registration and logins."
 msgstr ""
 
-#: mod/message.php:334 mod/message.php:517 mod/wallmessage.php:137
-#: mod/invite.php:143
-msgid "Your message:"
+#: mod/admin.php:1193
+msgid "Fullname check"
 msgstr ""
 
-#: mod/message.php:366
-msgid "No messages."
+#: mod/admin.php:1193
+msgid ""
+"Force users to register with a space between firstname and lastname in Full "
+"name, as an antispam measure"
 msgstr ""
 
-#: mod/message.php:405
-msgid "Message not available."
+#: mod/admin.php:1194
+msgid "Community Page Style"
 msgstr ""
 
-#: mod/message.php:479
-msgid "Delete message"
+#: mod/admin.php:1194
+msgid ""
+"Type of community page to show. 'Global community' shows every public "
+"posting from an open distributed network that arrived on this server."
 msgstr ""
 
-#: mod/message.php:505 mod/message.php:593
-msgid "Delete conversation"
+#: mod/admin.php:1195
+msgid "Posts per user on community page"
 msgstr ""
 
-#: mod/message.php:507
+#: mod/admin.php:1195
 msgid ""
-"No secure communications available. You <strong>may</strong> be able to "
-"respond from the sender's profile page."
+"The maximum number of posts per user on the community page. (Not valid for "
+"'Global Community')"
 msgstr ""
 
-#: mod/message.php:511
-msgid "Send Reply"
+#: mod/admin.php:1196
+msgid "Enable OStatus support"
 msgstr ""
 
-#: mod/message.php:563
-#, php-format
-msgid "Unknown sender - %s"
+#: mod/admin.php:1196
+msgid ""
+"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
+"communications in OStatus are public, so privacy warnings will be "
+"occasionally displayed."
 msgstr ""
 
-#: mod/message.php:565
-#, php-format
-msgid "You and %s"
+#: mod/admin.php:1197
+msgid "OStatus conversation completion interval"
 msgstr ""
 
-#: mod/message.php:567
-#, php-format
-msgid "%s and You"
+#: mod/admin.php:1197
+msgid ""
+"How often shall the poller check for new entries in OStatus conversations? "
+"This can be a very ressource task."
 msgstr ""
 
-#: mod/message.php:596
-msgid "D, d M Y - g:i A"
+#: mod/admin.php:1198
+msgid "Only import OStatus threads from our contacts"
 msgstr ""
 
-#: mod/message.php:599
-#, php-format
-msgid "%d message"
-msgid_plural "%d messages"
-msgstr[0] ""
-msgstr[1] ""
+#: mod/admin.php:1198
+msgid ""
+"Normally we import every content from our OStatus contacts. With this option "
+"we only store threads that are started by a contact that is known on our "
+"system."
+msgstr ""
 
-#: mod/mood.php:135
-msgid "Mood"
+#: mod/admin.php:1199
+msgid "OStatus support can only be enabled if threading is enabled."
 msgstr ""
 
-#: mod/mood.php:136
-msgid "Set your current mood and tell your friends"
+#: mod/admin.php:1201
+msgid ""
+"Diaspora support can't be enabled because Friendica was installed into a sub "
+"directory."
 msgstr ""
 
-#: mod/newmember.php:7
-msgid "Welcome to Friendica"
+#: mod/admin.php:1202
+msgid "Enable Diaspora support"
 msgstr ""
 
-#: mod/newmember.php:8
-msgid "New Member Checklist"
+#: mod/admin.php:1202
+msgid "Provide built-in Diaspora network compatibility."
 msgstr ""
 
-#: mod/newmember.php:10
-msgid ""
-"We would like to offer some tips and links to help make your experience "
-"enjoyable. Click any item to visit the relevant page. A link to this page "
-"will be visible from your home page for two weeks after your initial "
-"registration and then will quietly disappear."
+#: mod/admin.php:1203
+msgid "Only allow Friendica contacts"
 msgstr ""
 
-#: mod/newmember.php:11
-msgid "Getting Started"
+#: mod/admin.php:1203
+msgid ""
+"All contacts must use Friendica protocols. All other built-in communication "
+"protocols disabled."
 msgstr ""
 
-#: mod/newmember.php:13
-msgid "Friendica Walk-Through"
+#: mod/admin.php:1204
+msgid "Verify SSL"
 msgstr ""
 
-#: mod/newmember.php:13
+#: mod/admin.php:1204
 msgid ""
-"On your <em>Quick Start</em> page - find a brief introduction to your "
-"profile and network tabs, make some new connections, and find some groups to "
-"join."
+"If you wish, you can turn on strict certificate checking. This will mean you "
+"cannot connect (at all) to self-signed SSL sites."
 msgstr ""
 
-#: mod/newmember.php:17
-msgid "Go to Your Settings"
+#: mod/admin.php:1205
+msgid "Proxy user"
 msgstr ""
 
-#: mod/newmember.php:17
-msgid ""
-"On your <em>Settings</em> page -  change your initial password. Also make a "
-"note of your Identity Address. This looks just like an email address - and "
-"will be useful in making friends on the free social web."
+#: mod/admin.php:1206
+msgid "Proxy URL"
 msgstr ""
 
-#: mod/newmember.php:18
-msgid ""
-"Review the other settings, particularly the privacy settings. An unpublished "
-"directory listing is like having an unlisted phone number. In general, you "
-"should probably publish your listing - unless all of your friends and "
-"potential friends know exactly how to find you."
+#: mod/admin.php:1207
+msgid "Network timeout"
 msgstr ""
 
-#: mod/newmember.php:22 mod/profile_photo.php:255 mod/profiles.php:703
-msgid "Upload Profile Photo"
+#: mod/admin.php:1207
+msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
 msgstr ""
 
-#: mod/newmember.php:22
+#: mod/admin.php:1208
+msgid "Maximum Load Average"
+msgstr ""
+
+#: mod/admin.php:1208
 msgid ""
-"Upload a profile photo if you have not done so already. Studies have shown "
-"that people with real photos of themselves are ten times more likely to make "
-"friends than people who do not."
+"Maximum system load before delivery and poll processes are deferred - "
+"default 50."
 msgstr ""
 
-#: mod/newmember.php:23
-msgid "Edit Your Profile"
+#: mod/admin.php:1209
+msgid "Maximum Load Average (Frontend)"
 msgstr ""
 
-#: mod/newmember.php:23
+#: mod/admin.php:1209
+msgid "Maximum system load before the frontend quits service - default 50."
+msgstr ""
+
+#: mod/admin.php:1210
+msgid "Minimal Memory"
+msgstr ""
+
+#: mod/admin.php:1210
 msgid ""
-"Edit your <strong>default</strong> profile to your liking. Review the "
-"settings for hiding your list of friends and hiding the profile from unknown "
-"visitors."
+"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - "
+"default 0 (deactivated)."
 msgstr ""
 
-#: mod/newmember.php:24
-msgid "Profile Keywords"
+#: mod/admin.php:1211
+msgid "Maximum table size for optimization"
 msgstr ""
 
-#: mod/newmember.php:24
+#: mod/admin.php:1211
 msgid ""
-"Set some public keywords for your default profile which describe your "
-"interests. We may be able to find other people with similar interests and "
-"suggest friendships."
+"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
+"Enter -1 to disable it."
 msgstr ""
 
-#: mod/newmember.php:26
-msgid "Connecting"
+#: mod/admin.php:1212
+msgid "Minimum level of fragmentation"
 msgstr ""
 
-#: mod/newmember.php:32
-msgid "Importing Emails"
+#: mod/admin.php:1212
+msgid ""
+"Minimum fragmenation level to start the automatic optimization - default "
+"value is 30%."
 msgstr ""
 
-#: mod/newmember.php:32
+#: mod/admin.php:1214
+msgid "Periodical check of global contacts"
+msgstr ""
+
+#: mod/admin.php:1214
 msgid ""
-"Enter your email access information on your Connector Settings page if you "
-"wish to import and interact with friends or mailing lists from your email "
-"INBOX"
+"If enabled, the global contacts are checked periodically for missing or "
+"outdated data and the vitality of the contacts and servers."
 msgstr ""
 
-#: mod/newmember.php:35
-msgid "Go to Your Contacts Page"
+#: mod/admin.php:1215
+msgid "Days between requery"
 msgstr ""
 
-#: mod/newmember.php:35
+#: mod/admin.php:1215
+msgid "Number of days after which a server is requeried for his contacts."
+msgstr ""
+
+#: mod/admin.php:1216
+msgid "Discover contacts from other servers"
+msgstr ""
+
+#: mod/admin.php:1216
 msgid ""
-"Your Contacts page is your gateway to managing friendships and connecting "
-"with friends on other networks. Typically you enter their address or site "
-"URL in the <em>Add New Contact</em> dialog."
+"Periodically query other servers for contacts. You can choose between "
+"'users': the users on the remote system, 'Global Contacts': active contacts "
+"that are known on the system. The fallback is meant for Redmatrix servers "
+"and older friendica servers, where global contacts weren't available. The "
+"fallback increases the server load, so the recommened setting is 'Users, "
+"Global Contacts'."
 msgstr ""
 
-#: mod/newmember.php:36
-msgid "Go to Your Site's Directory"
+#: mod/admin.php:1217
+msgid "Timeframe for fetching global contacts"
 msgstr ""
 
-#: mod/newmember.php:36
+#: mod/admin.php:1217
 msgid ""
-"The Directory page lets you find other people in this network or other "
-"federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on "
-"their profile page. Provide your own Identity Address if requested."
+"When the discovery is activated, this value defines the timeframe for the "
+"activity of the global contacts that are fetched from other servers."
 msgstr ""
 
-#: mod/newmember.php:37
-msgid "Finding New People"
+#: mod/admin.php:1218
+msgid "Search the local directory"
 msgstr ""
 
-#: mod/newmember.php:37
+#: mod/admin.php:1218
 msgid ""
-"On the side panel of the Contacts page are several tools to find new "
-"friends. We can match people by interest, look up people by name or "
-"interest, and provide suggestions based on network relationships. On a brand "
-"new site, friend suggestions will usually begin to be populated within 24 "
-"hours."
+"Search the local directory instead of the global directory. When searching "
+"locally, every search will be executed on the global directory in the "
+"background. This improves the search results when the search is repeated."
 msgstr ""
 
-#: mod/newmember.php:41
-msgid "Group Your Contacts"
+#: mod/admin.php:1220
+msgid "Publish server information"
 msgstr ""
 
-#: mod/newmember.php:41
+#: mod/admin.php:1220
 msgid ""
-"Once you have made some friends, organize them into private conversation "
-"groups from the sidebar of your Contacts page and then you can interact with "
-"each group privately on your Network page."
+"If enabled, general server and usage data will be published. The data "
+"contains the name and version of the server, number of users with public "
+"profiles, number of posts and the activated protocols and connectors. See <a "
+"href='http://the-federation.info/'>the-federation.info</a> for details."
 msgstr ""
 
-#: mod/newmember.php:44
-msgid "Why Aren't My Posts Public?"
+#: mod/admin.php:1222
+msgid "Suppress Tags"
 msgstr ""
 
-#: mod/newmember.php:44
+#: mod/admin.php:1222
+msgid "Suppress showing a list of hashtags at the end of the posting."
+msgstr ""
+
+#: mod/admin.php:1223
+msgid "Path to item cache"
+msgstr ""
+
+#: mod/admin.php:1223
+msgid "The item caches buffers generated bbcode and external images."
+msgstr ""
+
+#: mod/admin.php:1224
+msgid "Cache duration in seconds"
+msgstr ""
+
+#: mod/admin.php:1224
 msgid ""
-"Friendica respects your privacy. By default, your posts will only show up to "
-"people you've added as friends. For more information, see the help section "
-"from the link above."
+"How long should the cache files be hold? Default value is 86400 seconds (One "
+"day). To disable the item cache, set the value to -1."
 msgstr ""
 
-#: mod/newmember.php:48
-msgid "Getting Help"
+#: mod/admin.php:1225
+msgid "Maximum numbers of comments per post"
 msgstr ""
 
-#: mod/newmember.php:50
-msgid "Go to the Help Section"
+#: mod/admin.php:1225
+msgid "How much comments should be shown for each post? Default value is 100."
 msgstr ""
 
-#: mod/newmember.php:50
+#: mod/admin.php:1226
+msgid "Temp path"
+msgstr ""
+
+#: mod/admin.php:1226
 msgid ""
-"Our <strong>help</strong> pages may be consulted for detail on other program "
-"features and resources."
+"If you have a restricted system where the webserver can't access the system "
+"temp path, enter another path here."
 msgstr ""
 
-#: mod/nogroup.php:45 mod/viewcontacts.php:105 mod/contacts.php:599
-#: mod/contacts.php:943
-#, php-format
-msgid "Visit %s's profile [%s]"
+#: mod/admin.php:1227
+msgid "Base path to installation"
 msgstr ""
 
-#: mod/nogroup.php:46 mod/contacts.php:944
-msgid "Edit contact"
+#: mod/admin.php:1227
+msgid ""
+"If the system cannot detect the correct path to your installation, enter the "
+"correct path here. This setting should only be set if you are using a "
+"restricted system and symbolic links to your webroot."
 msgstr ""
 
-#: mod/nogroup.php:67
-msgid "Contacts who are not members of a group"
+#: mod/admin.php:1228
+msgid "Disable picture proxy"
 msgstr ""
 
-#: mod/notifications.php:37
-msgid "Invalid request identifier."
+#: mod/admin.php:1228
+msgid ""
+"The picture proxy increases performance and privacy. It shouldn't be used on "
+"systems with very low bandwith."
 msgstr ""
 
-#: mod/notifications.php:46 mod/notifications.php:182 mod/notifications.php:229
-msgid "Discard"
+#: mod/admin.php:1229
+msgid "Only search in tags"
 msgstr ""
 
-#: mod/notifications.php:62 mod/notifications.php:181 mod/notifications.php:265
-#: mod/contacts.php:619 mod/contacts.php:819 mod/contacts.php:1004
-msgid "Ignore"
+#: mod/admin.php:1229
+msgid "On large systems the text search can slow down the system extremely."
 msgstr ""
 
-#: mod/notifications.php:107
-msgid "Network Notifications"
+#: mod/admin.php:1231
+msgid "New base url"
 msgstr ""
 
-#: mod/notifications.php:113 mod/notify.php:72
-msgid "System Notifications"
+#: mod/admin.php:1231
+msgid ""
+"Change base url for this server. Sends relocate message to all DFRN contacts "
+"of all users."
 msgstr ""
 
-#: mod/notifications.php:119
-msgid "Personal Notifications"
+#: mod/admin.php:1233
+msgid "RINO Encryption"
 msgstr ""
 
-#: mod/notifications.php:125
-msgid "Home Notifications"
+#: mod/admin.php:1233
+msgid "Encryption layer between nodes."
 msgstr ""
 
-#: mod/notifications.php:154
-msgid "Show Ignored Requests"
+#: mod/admin.php:1235
+msgid "Maximum number of parallel workers"
 msgstr ""
 
-#: mod/notifications.php:154
-msgid "Hide Ignored Requests"
+#: mod/admin.php:1235
+msgid ""
+"On shared hosters set this to 2. On larger systems, values of 10 are great. "
+"Default value is 4."
 msgstr ""
 
-#: mod/notifications.php:166 mod/notifications.php:236
-msgid "Notification type: "
+#: mod/admin.php:1236
+msgid "Don't use 'proc_open' with the worker"
 msgstr ""
 
-#: mod/notifications.php:169
+#: mod/admin.php:1236
+msgid ""
+"Enable this if your system doesn't allow the use of 'proc_open'. This can "
+"happen on shared hosters. If this is enabled you should increase the "
+"frequency of poller calls in your crontab."
+msgstr ""
+
+#: mod/admin.php:1237
+msgid "Enable fastlane"
+msgstr ""
+
+#: mod/admin.php:1237
+msgid ""
+"When enabed, the fastlane mechanism starts an additional worker if processes "
+"with higher priority are blocked by processes of lower priority."
+msgstr ""
+
+#: mod/admin.php:1238
+msgid "Enable frontend worker"
+msgstr ""
+
+#: mod/admin.php:1238
 #, php-format
-msgid "suggested by %s"
+msgid ""
+"When enabled the Worker process is triggered when backend access is "
+"performed (e.g. messages being delivered). On smaller sites you might want "
+"to call %s/worker on a regular basis via an external cron job. You should "
+"only enable this option if you cannot utilize cron/scheduled jobs on your "
+"server."
 msgstr ""
 
-#: mod/notifications.php:174 mod/notifications.php:253 mod/contacts.php:626
-msgid "Hide this contact from others"
+#: mod/admin.php:1268
+msgid "Update has been marked successful"
 msgstr ""
 
-#: mod/notifications.php:175 mod/notifications.php:254
-msgid "Post a new friend activity"
+#: mod/admin.php:1276
+#, php-format
+msgid "Database structure update %s was successfully applied."
 msgstr ""
 
-#: mod/notifications.php:175 mod/notifications.php:254
-msgid "if applicable"
+#: mod/admin.php:1279
+#, php-format
+msgid "Executing of database structure update %s failed with error: %s"
 msgstr ""
 
-#: mod/notifications.php:178 mod/notifications.php:263 mod/admin.php:1596
-msgid "Approve"
+#: mod/admin.php:1293
+#, php-format
+msgid "Executing %s failed with error: %s"
 msgstr ""
 
-#: mod/notifications.php:197
-msgid "Claims to be known to you: "
+#: mod/admin.php:1296
+#, php-format
+msgid "Update %s was successfully applied."
 msgstr ""
 
-#: mod/notifications.php:198
-msgid "yes"
+#: mod/admin.php:1299
+#, php-format
+msgid "Update %s did not return a status. Unknown if it succeeded."
 msgstr ""
 
-#: mod/notifications.php:198
-msgid "no"
+#: mod/admin.php:1302
+#, php-format
+msgid "There was no additional update function %s that needed to be called."
 msgstr ""
 
-#: mod/notifications.php:199 mod/notifications.php:204
-msgid "Shall your connection be bidirectional or not?"
+#: mod/admin.php:1322
+msgid "No failed updates."
+msgstr ""
+
+#: mod/admin.php:1323
+msgid "Check database structure"
+msgstr ""
+
+#: mod/admin.php:1328
+msgid "Failed Updates"
+msgstr ""
+
+#: mod/admin.php:1329
+msgid ""
+"This does not include updates prior to 1139, which did not return a status."
+msgstr ""
+
+#: mod/admin.php:1330
+msgid "Mark success (if update was manually applied)"
+msgstr ""
+
+#: mod/admin.php:1331
+msgid "Attempt to execute this update step automatically"
+msgstr ""
+
+#: mod/admin.php:1365
+#, php-format
+msgid ""
+"\n"
+"\t\t\tDear %1$s,\n"
+"\t\t\t\tthe administrator of %2$s has set up an account for you."
+msgstr ""
+
+#: mod/admin.php:1368
+#, php-format
+msgid ""
+"\n"
+"\t\t\tThe login details are as follows:\n"
+"\n"
+"\t\t\tSite Location:\t%1$s\n"
+"\t\t\tLogin Name:\t\t%2$s\n"
+"\t\t\tPassword:\t\t%3$s\n"
+"\n"
+"\t\t\tYou may change your password from your account \"Settings\" page after "
+"logging\n"
+"\t\t\tin.\n"
+"\n"
+"\t\t\tPlease take a few moments to review the other account settings on that "
+"page.\n"
+"\n"
+"\t\t\tYou may also wish to add some basic information to your default "
+"profile\n"
+"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
+"\n"
+"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
+"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - "
+"and\n"
+"\t\t\tperhaps what country you live in; if you do not wish to be more "
+"specific\n"
+"\t\t\tthan that.\n"
+"\n"
+"\t\t\tWe fully respect your right to privacy, and none of these items are "
+"necessary.\n"
+"\t\t\tIf you are new and do not know anybody here, they may help\n"
+"\t\t\tyou to make some new and interesting friends.\n"
+"\n"
+"\t\t\tThank you and welcome to %4$s."
 msgstr ""
 
-#: mod/notifications.php:200 mod/notifications.php:205
+#: mod/admin.php:1412
 #, php-format
-msgid ""
-"Accepting %s as a friend allows %s to subscribe to your posts, and you will "
-"also receive updates from them in your news feed."
-msgstr ""
+msgid "%s user blocked/unblocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/notifications.php:201
+#: mod/admin.php:1419
 #, php-format
-msgid ""
-"Accepting %s as a subscriber allows them to subscribe to your posts, but you "
-"will not receive updates from them in your news feed."
-msgstr ""
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/notifications.php:206
+#: mod/admin.php:1466
 #, php-format
-msgid ""
-"Accepting %s as a sharer allows them to subscribe to your posts, but you "
-"will not receive updates from them in your news feed."
-msgstr ""
-
-#: mod/notifications.php:217
-msgid "Friend"
-msgstr ""
-
-#: mod/notifications.php:218
-msgid "Sharer"
-msgstr ""
-
-#: mod/notifications.php:218
-msgid "Subscriber"
-msgstr ""
-
-#: mod/notifications.php:257 mod/follow.php:131 mod/contacts.php:637
-msgid "Profile URL"
+msgid "User '%s' deleted"
 msgstr ""
 
-#: mod/notifications.php:274
-msgid "No introductions."
+#: mod/admin.php:1474
+#, php-format
+msgid "User '%s' unblocked"
 msgstr ""
 
-#: mod/notifications.php:315
-msgid "Show unread"
+#: mod/admin.php:1474
+#, php-format
+msgid "User '%s' blocked"
 msgstr ""
 
-#: mod/notifications.php:315
-msgid "Show all"
+#: mod/admin.php:1582 mod/admin.php:1608
+msgid "Register date"
 msgstr ""
 
-#: mod/notifications.php:321
-#, php-format
-msgid "No more %s notifications."
+#: mod/admin.php:1582 mod/admin.php:1608
+msgid "Last login"
 msgstr ""
 
-#: mod/notify.php:68
-msgid "No more system notifications."
+#: mod/admin.php:1582 mod/admin.php:1608
+msgid "Last item"
 msgstr ""
 
-#: mod/oexchange.php:24
-msgid "Post successful."
+#: mod/admin.php:1582 mod/settings.php:46
+msgid "Account"
 msgstr ""
 
-#: mod/openid.php:24
-msgid "OpenID protocol error. No ID returned."
+#: mod/admin.php:1591
+msgid "Add User"
 msgstr ""
 
-#: mod/openid.php:60
-msgid ""
-"Account not found and OpenID registration is not permitted on this site."
+#: mod/admin.php:1592
+msgid "select all"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:16
-msgid "Subscribing to OStatus contacts"
+#: mod/admin.php:1593
+msgid "User registrations waiting for confirm"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:27
-msgid "No contact provided."
+#: mod/admin.php:1594
+msgid "User waiting for permanent deletion"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:33
-msgid "Couldn't fetch information for contact."
+#: mod/admin.php:1595
+msgid "Request date"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:42
-msgid "Couldn't fetch friends for contact."
+#: mod/admin.php:1596
+msgid "No registrations."
 msgstr ""
 
-#: mod/ostatus_subscribe.php:56 mod/repair_ostatus.php:46
-msgid "Done"
+#: mod/admin.php:1597
+msgid "Note from the user"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:70
-msgid "success"
+#: mod/admin.php:1598 mod/notifications.php:179 mod/notifications.php:264
+msgid "Approve"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:72
-msgid "failed"
+#: mod/admin.php:1599
+msgid "Deny"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:80 mod/repair_ostatus.php:52
-msgid "Keep this window open until done."
+#: mod/admin.php:1601 mod/contacts.php:625 mod/contacts.php:825
+#: mod/contacts.php:1003
+msgid "Block"
 msgstr ""
 
-#: mod/p.php:12
-msgid "Not Extended"
+#: mod/admin.php:1602 mod/contacts.php:625 mod/contacts.php:825
+#: mod/contacts.php:1003
+msgid "Unblock"
 msgstr ""
 
-#: mod/p.php:19 mod/p.php:46 mod/p.php:55 mod/fetch.php:15 mod/fetch.php:42
-#: mod/fetch.php:51 mod/help.php:56 index.php:301
-msgid "Not Found"
+#: mod/admin.php:1603
+msgid "Site admin"
 msgstr ""
 
-#: mod/photos.php:96 mod/photos.php:1902
-msgid "Recent Photos"
+#: mod/admin.php:1604
+msgid "Account expired"
 msgstr ""
 
-#: mod/photos.php:99 mod/photos.php:1330 mod/photos.php:1904
-msgid "Upload New Photos"
+#: mod/admin.php:1607
+msgid "New User"
 msgstr ""
 
-#: mod/photos.php:114 mod/settings.php:38
-msgid "everybody"
+#: mod/admin.php:1608
+msgid "Deleted since"
 msgstr ""
 
-#: mod/photos.php:178
-msgid "Contact information unavailable"
+#: mod/admin.php:1613
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
 msgstr ""
 
-#: mod/photos.php:199
-msgid "Album not found."
+#: mod/admin.php:1614
+msgid ""
+"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
+"site will be permanently deleted!\\n\\nAre you sure?"
 msgstr ""
 
-#: mod/photos.php:232 mod/photos.php:244 mod/photos.php:1274
-msgid "Delete Album"
+#: mod/admin.php:1624
+msgid "Name of the new user."
 msgstr ""
 
-#: mod/photos.php:242
-msgid "Do you really want to delete this photo album and all its photos?"
+#: mod/admin.php:1625
+msgid "Nickname"
 msgstr ""
 
-#: mod/photos.php:325 mod/photos.php:336 mod/photos.php:1600
-msgid "Delete Photo"
+#: mod/admin.php:1625
+msgid "Nickname of the new user."
 msgstr ""
 
-#: mod/photos.php:334
-msgid "Do you really want to delete this photo?"
+#: mod/admin.php:1626
+msgid "Email address of the new user."
 msgstr ""
 
-#: mod/photos.php:715
+#: mod/admin.php:1669
 #, php-format
-msgid "%1$s was tagged in %2$s by %3$s"
-msgstr ""
-
-#: mod/photos.php:715
-msgid "a photo"
+msgid "Plugin %s disabled."
 msgstr ""
 
-#: mod/photos.php:815 mod/wall_upload.php:181 mod/profile_photo.php:155
+#: mod/admin.php:1673
 #, php-format
-msgid "Image exceeds size limit of %s"
+msgid "Plugin %s enabled."
 msgstr ""
 
-#: mod/photos.php:823
-msgid "Image file is empty."
+#: mod/admin.php:1684 mod/admin.php:1936
+msgid "Disable"
 msgstr ""
 
-#: mod/photos.php:856 mod/wall_upload.php:218 mod/profile_photo.php:164
-msgid "Unable to process image."
+#: mod/admin.php:1686 mod/admin.php:1938
+msgid "Enable"
 msgstr ""
 
-#: mod/photos.php:885 mod/wall_upload.php:257 mod/profile_photo.php:314
-msgid "Image upload failed."
+#: mod/admin.php:1709 mod/admin.php:1985
+msgid "Toggle"
 msgstr ""
 
-#: mod/photos.php:990
-msgid "No photos selected"
+#: mod/admin.php:1717 mod/admin.php:1994
+msgid "Author: "
 msgstr ""
 
-#: mod/photos.php:1093 mod/videos.php:311
-msgid "Access to this item is restricted."
+#: mod/admin.php:1718 mod/admin.php:1995
+msgid "Maintainer: "
 msgstr ""
 
-#: mod/photos.php:1153
-#, php-format
-msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
+#: mod/admin.php:1773
+msgid "Reload active plugins"
 msgstr ""
 
-#: mod/photos.php:1190
-msgid "Upload Photos"
+#: mod/admin.php:1778
+#, php-format
+msgid ""
+"There are currently no plugins available on your node. You can find the "
+"official plugin repository at %1$s and might find other interesting plugins "
+"in the open plugin registry at %2$s"
 msgstr ""
 
-#: mod/photos.php:1194 mod/photos.php:1269
-msgid "New album name: "
+#: mod/admin.php:1897
+msgid "No themes found."
 msgstr ""
 
-#: mod/photos.php:1195
-msgid "or existing album name: "
+#: mod/admin.php:1976
+msgid "Screenshot"
 msgstr ""
 
-#: mod/photos.php:1196
-msgid "Do not show a status post for this upload"
+#: mod/admin.php:2036
+msgid "Reload active themes"
 msgstr ""
 
-#: mod/photos.php:1207 mod/photos.php:1604 mod/settings.php:1308
-msgid "Show to Groups"
+#: mod/admin.php:2041
+#, php-format
+msgid "No themes found on the system. They should be paced in %1$s"
 msgstr ""
 
-#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309
-msgid "Show to Contacts"
+#: mod/admin.php:2042
+msgid "[Experimental]"
 msgstr ""
 
-#: mod/photos.php:1209
-msgid "Private Photo"
+#: mod/admin.php:2043
+msgid "[Unsupported]"
 msgstr ""
 
-#: mod/photos.php:1210
-msgid "Public Photo"
+#: mod/admin.php:2067
+msgid "Log settings updated."
 msgstr ""
 
-#: mod/photos.php:1280
-msgid "Edit Album"
+#: mod/admin.php:2099
+msgid "PHP log currently enabled."
 msgstr ""
 
-#: mod/photos.php:1285
-msgid "Show Newest First"
+#: mod/admin.php:2101
+msgid "PHP log currently disabled."
 msgstr ""
 
-#: mod/photos.php:1287
-msgid "Show Oldest First"
+#: mod/admin.php:2110
+msgid "Clear"
 msgstr ""
 
-#: mod/photos.php:1316 mod/photos.php:1887
-msgid "View Photo"
+#: mod/admin.php:2115
+msgid "Enable Debugging"
 msgstr ""
 
-#: mod/photos.php:1361
-msgid "Permission denied. Access to this item may be restricted."
+#: mod/admin.php:2116
+msgid "Log file"
 msgstr ""
 
-#: mod/photos.php:1363
-msgid "Photo not available"
+#: mod/admin.php:2116
+msgid ""
+"Must be writable by web server. Relative to your Friendica top-level "
+"directory."
 msgstr ""
 
-#: mod/photos.php:1424
-msgid "View photo"
+#: mod/admin.php:2117
+msgid "Log level"
 msgstr ""
 
-#: mod/photos.php:1424
-msgid "Edit photo"
+#: mod/admin.php:2120
+msgid "PHP logging"
 msgstr ""
 
-#: mod/photos.php:1425
-msgid "Use as profile photo"
+#: mod/admin.php:2121
+msgid ""
+"To enable logging of PHP errors and warnings you can add the following to "
+"the .htconfig.php file of your installation. The filename set in the "
+"'error_log' line is relative to the friendica top-level directory and must "
+"be writeable by the web server. The option '1' for 'log_errors' and "
+"'display_errors' is to enable these options, set to '0' to disable them."
 msgstr ""
 
-#: mod/photos.php:1450
-msgid "View Full Size"
+#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784
+msgid "Off"
 msgstr ""
 
-#: mod/photos.php:1540
-msgid "Tags: "
+#: mod/admin.php:2251 mod/admin.php:2252 mod/settings.php:784
+msgid "On"
 msgstr ""
 
-#: mod/photos.php:1543
-msgid "[Remove any tag]"
+#: mod/admin.php:2252
+#, php-format
+msgid "Lock feature %s"
 msgstr ""
 
-#: mod/photos.php:1586
-msgid "New album name"
+#: mod/admin.php:2260
+msgid "Manage Additional Features"
 msgstr ""
 
-#: mod/photos.php:1587
-msgid "Caption"
+#: mod/allfriends.php:49
+msgid "No friends to display."
 msgstr ""
 
-#: mod/photos.php:1588
-msgid "Add a Tag"
+#: mod/bookmarklet.php:44
+msgid "The post was created"
 msgstr ""
 
-#: mod/photos.php:1588
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+#: mod/cal.php:146 mod/display.php:348 mod/profile.php:157
+msgid "Access to this profile has been restricted."
 msgstr ""
 
-#: mod/photos.php:1589
-msgid "Do not rotate"
+#: mod/cal.php:274 mod/events.php:379
+msgid "View"
 msgstr ""
 
-#: mod/photos.php:1590
-msgid "Rotate CW (right)"
+#: mod/cal.php:275 mod/events.php:381
+msgid "Previous"
 msgstr ""
 
-#: mod/photos.php:1591
-msgid "Rotate CCW (left)"
+#: mod/cal.php:276 mod/events.php:382 mod/install.php:204
+msgid "Next"
 msgstr ""
 
-#: mod/photos.php:1606
-msgid "Private photo"
+#: mod/cal.php:285 mod/events.php:391
+msgid "list"
 msgstr ""
 
-#: mod/photos.php:1607
-msgid "Public photo"
+#: mod/cal.php:295
+msgid "User not found"
 msgstr ""
 
-#: mod/photos.php:1816
-msgid "Map"
+#: mod/cal.php:311
+msgid "This calendar format is not supported"
 msgstr ""
 
-#: mod/photos.php:1893 mod/videos.php:395
-msgid "View Album"
+#: mod/cal.php:313
+msgid "No exportable data found"
 msgstr ""
 
-#: mod/poke.php:197
-msgid "Poke/Prod"
+#: mod/cal.php:328
+msgid "calendar"
 msgstr ""
 
-#: mod/poke.php:198
-msgid "poke, prod or do other things to somebody"
-msgstr ""
+#: mod/contacts.php:138
+#, php-format
+msgid "%d contact edited."
+msgid_plural "%d contacts edited."
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/poke.php:199
-msgid "Recipient"
+#: mod/contacts.php:173 mod/contacts.php:382
+msgid "Could not access contact record."
 msgstr ""
 
-#: mod/poke.php:200
-msgid "Choose what you wish to do to recipient"
+#: mod/contacts.php:187
+msgid "Could not locate selected profile."
 msgstr ""
 
-#: mod/poke.php:203
-msgid "Make this post private"
+#: mod/contacts.php:220
+msgid "Contact updated."
 msgstr ""
 
-#: mod/profperm.php:28 mod/profperm.php:59
-msgid "Invalid profile identifier."
+#: mod/contacts.php:222 mod/dfrn_request.php:594
+msgid "Failed to update contact record."
 msgstr ""
 
-#: mod/profperm.php:105
-msgid "Profile Visibility Editor"
+#: mod/contacts.php:403
+msgid "Contact has been blocked"
 msgstr ""
 
-#: mod/profperm.php:118
-msgid "Visible To"
+#: mod/contacts.php:403
+msgid "Contact has been unblocked"
 msgstr ""
 
-#: mod/profperm.php:134
-msgid "All Contacts (with secure profile access)"
+#: mod/contacts.php:414
+msgid "Contact has been ignored"
 msgstr ""
 
-#: mod/removeme.php:54 mod/removeme.php:57
-msgid "Remove My Account"
+#: mod/contacts.php:414
+msgid "Contact has been unignored"
 msgstr ""
 
-#: mod/removeme.php:55
-msgid ""
-"This will completely remove your account. Once this has been done it is not "
-"recoverable."
+#: mod/contacts.php:426
+msgid "Contact has been archived"
 msgstr ""
 
-#: mod/removeme.php:56
-msgid "Please enter your password for verification:"
+#: mod/contacts.php:426
+msgid "Contact has been unarchived"
 msgstr ""
 
-#: mod/repair_ostatus.php:16
-msgid "Resubscribing to OStatus contacts"
+#: mod/contacts.php:451
+msgid "Drop contact"
 msgstr ""
 
-#: mod/repair_ostatus.php:32
-msgid "Error"
+#: mod/contacts.php:454 mod/contacts.php:821
+msgid "Do you really want to delete this contact?"
 msgstr ""
 
-#: mod/subthread.php:105
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
+#: mod/contacts.php:473
+msgid "Contact has been removed."
 msgstr ""
 
-#: mod/suggest.php:29
-msgid "Do you really want to delete this suggestion?"
+#: mod/contacts.php:510
+#, php-format
+msgid "You are mutual friends with %s"
 msgstr ""
 
-#: mod/suggest.php:73
-msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
+#: mod/contacts.php:514
+#, php-format
+msgid "You are sharing with %s"
 msgstr ""
 
-#: mod/suggest.php:86 mod/suggest.php:106
-msgid "Ignore/Hide"
+#: mod/contacts.php:519
+#, php-format
+msgid "%s is sharing with you"
 msgstr ""
 
-#: mod/tagrm.php:45
-msgid "Tag removed"
+#: mod/contacts.php:539
+msgid "Private communications are not available for this contact."
 msgstr ""
 
-#: mod/tagrm.php:84
-msgid "Remove Item Tag"
+#: mod/contacts.php:546
+msgid "(Update was successful)"
 msgstr ""
 
-#: mod/tagrm.php:86
-msgid "Select a tag to remove: "
+#: mod/contacts.php:546
+msgid "(Update was not successful)"
 msgstr ""
 
-#: mod/uexport.php:38
-msgid "Export account"
+#: mod/contacts.php:548 mod/contacts.php:984
+msgid "Suggest friends"
 msgstr ""
 
-#: mod/uexport.php:38
-msgid ""
-"Export your account info and contacts. Use this to make a backup of your "
-"account and/or to move it to another server."
+#: mod/contacts.php:552
+#, php-format
+msgid "Network type: %s"
 msgstr ""
 
-#: mod/uexport.php:39
-msgid "Export all"
+#: mod/contacts.php:565
+msgid "Communications lost with this contact!"
 msgstr ""
 
-#: mod/uexport.php:39
-msgid ""
-"Export your accout info, contacts and all your items as json. Could be a "
-"very big file, and could take a lot of time. Use this to make a full backup "
-"of your account (photos are not exported)"
+#: mod/contacts.php:568
+msgid "Fetch further information for feeds"
 msgstr ""
 
-#: mod/uexport.php:46 mod/settings.php:97
-msgid "Export personal data"
+#: mod/contacts.php:569
+msgid "Fetch information"
 msgstr ""
 
-#: mod/update_community.php:21 mod/update_display.php:25
-#: mod/update_notes.php:38 mod/update_profile.php:37 mod/update_network.php:29
-msgid "[Embedded content - reload page to view]"
+#: mod/contacts.php:569
+msgid "Fetch information and keywords"
 msgstr ""
 
-#: mod/videos.php:126
-msgid "Do you really want to delete this video?"
+#: mod/contacts.php:583 mod/unfollow.php:100
+msgid "Disconnect/Unfollow"
 msgstr ""
 
-#: mod/videos.php:131
-msgid "Delete Video"
+#: mod/contacts.php:593
+msgid "Contact"
 msgstr ""
 
-#: mod/videos.php:210
-msgid "No videos selected"
+#: mod/contacts.php:596
+msgid "Profile Visibility"
 msgstr ""
 
-#: mod/videos.php:404
-msgid "Recent Videos"
+#: mod/contacts.php:597
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
 msgstr ""
 
-#: mod/videos.php:406
-msgid "Upload New Videos"
+#: mod/contacts.php:598
+msgid "Contact Information / Notes"
 msgstr ""
 
-#: mod/viewcontacts.php:78
-msgid "No contacts."
+#: mod/contacts.php:599
+msgid "Their personal note"
 msgstr ""
 
-#: mod/viewsrc.php:8
-msgid "Access denied."
+#: mod/contacts.php:601
+msgid "Edit contact notes"
 msgstr ""
 
-#: mod/wall_attach.php:19 mod/wall_attach.php:27 mod/wall_attach.php:78
-#: mod/wall_upload.php:36 mod/wall_upload.php:52 mod/wall_upload.php:110
-#: mod/wall_upload.php:150 mod/wall_upload.php:153
-msgid "Invalid request."
+#: mod/contacts.php:607
+msgid "Block/Unblock contact"
 msgstr ""
 
-#: mod/wall_attach.php:96
-msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
+#: mod/contacts.php:608
+msgid "Ignore contact"
 msgstr ""
 
-#: mod/wall_attach.php:96
-msgid "Or - did you try to upload an empty file?"
+#: mod/contacts.php:609
+msgid "Repair URL settings"
 msgstr ""
 
-#: mod/wall_attach.php:107
-#, php-format
-msgid "File exceeds size limit of %s"
+#: mod/contacts.php:610
+msgid "View conversations"
 msgstr ""
 
-#: mod/wall_attach.php:160 mod/wall_attach.php:176
-msgid "File upload failed."
+#: mod/contacts.php:616
+msgid "Last update:"
 msgstr ""
 
-#: mod/wallmessage.php:44 mod/wallmessage.php:108
-#, php-format
-msgid "Number of daily wall messages for %s exceeded. Message failed."
+#: mod/contacts.php:618
+msgid "Update public posts"
 msgstr ""
 
-#: mod/wallmessage.php:55
-msgid "Unable to check your home location."
+#: mod/contacts.php:620 mod/contacts.php:994
+msgid "Update now"
 msgstr ""
 
-#: mod/wallmessage.php:82 mod/wallmessage.php:91
-msgid "No recipient."
+#: mod/contacts.php:626 mod/contacts.php:826 mod/contacts.php:1011
+msgid "Unignore"
 msgstr ""
 
-#: mod/wallmessage.php:129
-#, php-format
-msgid ""
-"If you wish for %s to respond, please check that the privacy settings on "
-"your site allow private mail from unknown senders."
+#: mod/contacts.php:626 mod/contacts.php:826 mod/contacts.php:1011
+#: mod/notifications.php:63 mod/notifications.php:182 mod/notifications.php:266
+msgid "Ignore"
 msgstr ""
 
-#: mod/webfinger.php:11 mod/probe.php:10
-msgid "Only logged in users are permitted to perform a probing."
+#: mod/contacts.php:630
+msgid "Currently blocked"
 msgstr ""
 
-#: mod/regmod.php:60
-msgid "Account approved."
+#: mod/contacts.php:631
+msgid "Currently ignored"
 msgstr ""
 
-#: mod/regmod.php:88
-#, php-format
-msgid "Registration revoked for %s"
+#: mod/contacts.php:632
+msgid "Currently archived"
 msgstr ""
 
-#: mod/regmod.php:100
-msgid "Please login."
+#: mod/contacts.php:633 mod/notifications.php:175 mod/notifications.php:254
+msgid "Hide this contact from others"
 msgstr ""
 
-#: mod/uimport.php:53 mod/register.php:201
+#: mod/contacts.php:633
 msgid ""
-"This site has exceeded the number of allowed daily account registrations. "
-"Please try again tomorrow."
+"Replies/likes to your public posts <strong>may</strong> still be visible"
 msgstr ""
 
-#: mod/uimport.php:68 mod/register.php:298
-msgid "Import"
+#: mod/contacts.php:634
+msgid "Notification for new posts"
 msgstr ""
 
-#: mod/uimport.php:70
-msgid "Move account"
+#: mod/contacts.php:634
+msgid "Send a notification of every new post of this contact"
 msgstr ""
 
-#: mod/uimport.php:71
-msgid "You can import an account from another Friendica server."
+#: mod/contacts.php:637
+msgid "Blacklisted keywords"
 msgstr ""
 
-#: mod/uimport.php:72
+#: mod/contacts.php:637
 msgid ""
-"You need to export your account from the old server and upload it here. We "
-"will recreate your old account here with all your contacts. We will try also "
-"to inform your friends that you moved here."
+"Comma separated list of keywords that should not be converted to hashtags, "
+"when \"Fetch information and keywords\" is selected"
 msgstr ""
 
-#: mod/uimport.php:73
-msgid ""
-"This feature is experimental. We can't import contacts from the OStatus "
-"network (GNU Social/Statusnet) or from Diaspora"
+#: mod/contacts.php:644 mod/follow.php:166 mod/notifications.php:258
+#: mod/unfollow.php:122
+msgid "Profile URL"
 msgstr ""
 
-#: mod/uimport.php:74
-msgid "Account file"
+#: mod/contacts.php:655
+msgid "Actions"
 msgstr ""
 
-#: mod/uimport.php:74
-msgid ""
-"To export your account, go to \"Settings->Export your personal data\" and "
-"select \"Export account\""
+#: mod/contacts.php:658
+msgid "Contact Settings"
 msgstr ""
 
-#: mod/dfrn_request.php:103
-msgid "This introduction has already been accepted."
+#: mod/contacts.php:704
+msgid "Suggestions"
 msgstr ""
 
-#: mod/dfrn_request.php:126 mod/dfrn_request.php:528
-msgid "Profile location is not valid or does not contain profile information."
+#: mod/contacts.php:707
+msgid "Suggest potential friends"
 msgstr ""
 
-#: mod/dfrn_request.php:131 mod/dfrn_request.php:533
-msgid "Warning: profile location has no identifiable owner name."
+#: mod/contacts.php:712 mod/group.php:214
+msgid "All Contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:134 mod/dfrn_request.php:536
-msgid "Warning: profile location has no profile photo."
+#: mod/contacts.php:715
+msgid "Show all contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:138 mod/dfrn_request.php:540
-#, php-format
-msgid "%d required parameter was not found at the given location"
-msgid_plural "%d required parameters were not found at the given location"
-msgstr[0] ""
-msgstr[1] ""
+#: mod/contacts.php:720
+msgid "Unblocked"
+msgstr ""
 
-#: mod/dfrn_request.php:182
-msgid "Introduction complete."
+#: mod/contacts.php:723
+msgid "Only show unblocked contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:227
-msgid "Unrecoverable protocol error."
+#: mod/contacts.php:729
+msgid "Blocked"
 msgstr ""
 
-#: mod/dfrn_request.php:255
-msgid "Profile unavailable."
+#: mod/contacts.php:732
+msgid "Only show blocked contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:282
-#, php-format
-msgid "%s has received too many connection requests today."
+#: mod/contacts.php:738
+msgid "Ignored"
 msgstr ""
 
-#: mod/dfrn_request.php:283
-msgid "Spam protection measures have been invoked."
+#: mod/contacts.php:741
+msgid "Only show ignored contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:284
-msgid "Friends are advised to please try again in 24 hours."
+#: mod/contacts.php:747
+msgid "Archived"
 msgstr ""
 
-#: mod/dfrn_request.php:346
-msgid "Invalid locator"
+#: mod/contacts.php:750
+msgid "Only show archived contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:355
-msgid "Invalid email address."
+#: mod/contacts.php:756
+msgid "Hidden"
 msgstr ""
 
-#: mod/dfrn_request.php:380
-msgid "This account has not been configured for email. Request failed."
+#: mod/contacts.php:759
+msgid "Only show hidden contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:483
-msgid "You have already introduced yourself here."
+#: mod/contacts.php:816
+msgid "Search your contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:487
-#, php-format
-msgid "Apparently you are already friends with %s."
+#: mod/contacts.php:824 mod/settings.php:163 mod/settings.php:709
+msgid "Update"
 msgstr ""
 
-#: mod/dfrn_request.php:508
-msgid "Invalid profile URL."
+#: mod/contacts.php:827 mod/contacts.php:1019
+msgid "Archive"
 msgstr ""
 
-#: mod/dfrn_request.php:593 mod/contacts.php:221
-msgid "Failed to update contact record."
+#: mod/contacts.php:827 mod/contacts.php:1019
+msgid "Unarchive"
 msgstr ""
 
-#: mod/dfrn_request.php:614
-msgid "Your introduction has been sent."
+#: mod/contacts.php:830
+msgid "Batch Actions"
 msgstr ""
 
-#: mod/dfrn_request.php:656
-msgid ""
-"Remote subscription can't be done for your network. Please subscribe "
-"directly on your system."
+#: mod/contacts.php:876
+msgid "View all contacts"
 msgstr ""
 
-#: mod/dfrn_request.php:677
-msgid "Please login to confirm introduction."
+#: mod/contacts.php:886
+msgid "View all common friends"
 msgstr ""
 
-#: mod/dfrn_request.php:687
-msgid ""
-"Incorrect identity currently logged in. Please login to <strong>this</"
-"strong> profile."
+#: mod/contacts.php:893
+msgid "Advanced Contact Settings"
 msgstr ""
 
-#: mod/dfrn_request.php:701 mod/dfrn_request.php:718
-msgid "Confirm"
+#: mod/contacts.php:927
+msgid "Mutual Friendship"
 msgstr ""
 
-#: mod/dfrn_request.php:713
-msgid "Hide this contact"
+#: mod/contacts.php:931
+msgid "is a fan of yours"
 msgstr ""
 
-#: mod/dfrn_request.php:716
-#, php-format
-msgid "Welcome home %s."
+#: mod/contacts.php:935
+msgid "you are a fan of"
 msgstr ""
 
-#: mod/dfrn_request.php:717
-#, php-format
-msgid "Please confirm your introduction/connection request to %s."
+#: mod/contacts.php:1005
+msgid "Toggle Blocked status"
 msgstr ""
 
-#: mod/dfrn_request.php:848
-msgid ""
-"Please enter your 'Identity Address' from one of the following supported "
-"communications networks:"
+#: mod/contacts.php:1013
+msgid "Toggle Ignored status"
 msgstr ""
 
-#: mod/dfrn_request.php:872
-#, php-format
-msgid ""
-"If you are not yet a member of the free social web, <a href=\"%s/siteinfo"
-"\">follow this link to find a public Friendica site and join us today</a>."
+#: mod/contacts.php:1021
+msgid "Toggle Archive status"
 msgstr ""
 
-#: mod/dfrn_request.php:877
-msgid "Friend/Connection Request"
+#: mod/contacts.php:1029
+msgid "Delete contact"
 msgstr ""
 
-#: mod/dfrn_request.php:878
-msgid ""
-"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
-"testuser@identi.ca"
+#: mod/content.php:121 mod/network.php:632
+msgid "No such group"
 msgstr ""
 
-#: mod/dfrn_request.php:879 mod/follow.php:114
-msgid "Please answer the following:"
+#: mod/content.php:132 mod/group.php:215 mod/network.php:653
+msgid "Group is empty"
 msgstr ""
 
-#: mod/dfrn_request.php:880 mod/follow.php:115
+#: mod/content.php:137 mod/network.php:657
 #, php-format
-msgid "Does %s know you?"
+msgid "Group: %s"
 msgstr ""
 
-#: mod/dfrn_request.php:884 mod/follow.php:116
-msgid "Add a personal note:"
+#: mod/content.php:327 object/Item.php:101
+msgid "This entry was edited"
 msgstr ""
 
-#: mod/dfrn_request.php:887
-msgid "StatusNet/Federated Social Web"
+#: mod/content.php:623 object/Item.php:409
+#, php-format
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/content.php:640 mod/photos.php:1432 object/Item.php:122
+msgid "Private Message"
 msgstr ""
 
-#: mod/dfrn_request.php:889
-#, php-format
-msgid ""
-" - please do not use this form.  Instead, enter %s into your Diaspora search "
-"bar."
+#: mod/content.php:704 mod/photos.php:1628 object/Item.php:275
+msgid "I like this (toggle)"
 msgstr ""
 
-#: mod/dfrn_request.php:890 mod/follow.php:122
-msgid "Your Identity Address:"
+#: mod/content.php:704 object/Item.php:275
+msgid "like"
 msgstr ""
 
-#: mod/dfrn_request.php:893 mod/follow.php:21
-msgid "Submit Request"
+#: mod/content.php:705 mod/photos.php:1629 object/Item.php:276
+msgid "I don't like this (toggle)"
+msgstr ""
+
+#: mod/content.php:705 object/Item.php:276
+msgid "dislike"
 msgstr ""
 
-#: mod/dirfind.php:39
-#, php-format
-msgid "People Search - %s"
+#: mod/content.php:707 object/Item.php:279
+msgid "Share this"
 msgstr ""
 
-#: mod/dirfind.php:50
-#, php-format
-msgid "Forum Search - %s"
+#: mod/content.php:707 object/Item.php:279
+msgid "share"
 msgstr ""
 
-#: mod/events.php:96 mod/events.php:98
-msgid "Event can not end before it has started."
+#: mod/content.php:727 mod/photos.php:1646 mod/photos.php:1688
+#: mod/photos.php:1768 object/Item.php:694
+msgid "This is you"
 msgstr ""
 
-#: mod/events.php:105 mod/events.php:107
-msgid "Event title and start time are required."
+#: mod/content.php:729 mod/content.php:952 mod/photos.php:1648
+#: mod/photos.php:1690 mod/photos.php:1770 object/Item.php:381
+#: object/Item.php:696
+msgid "Comment"
 msgstr ""
 
-#: mod/events.php:379
-msgid "Create New Event"
+#: mod/content.php:731 object/Item.php:698
+msgid "Bold"
 msgstr ""
 
-#: mod/events.php:484
-msgid "Event details"
+#: mod/content.php:732 object/Item.php:699
+msgid "Italic"
 msgstr ""
 
-#: mod/events.php:485
-msgid "Starting date and Title are required."
+#: mod/content.php:733 object/Item.php:700
+msgid "Underline"
 msgstr ""
 
-#: mod/events.php:486 mod/events.php:487
-msgid "Event Starts:"
+#: mod/content.php:734 object/Item.php:701
+msgid "Quote"
 msgstr ""
 
-#: mod/events.php:486 mod/events.php:498 mod/profiles.php:712
-msgid "Required"
+#: mod/content.php:735 object/Item.php:702
+msgid "Code"
 msgstr ""
 
-#: mod/events.php:488 mod/events.php:504
-msgid "Finish date/time is not known or not relevant"
+#: mod/content.php:736 object/Item.php:703
+msgid "Image"
 msgstr ""
 
-#: mod/events.php:490 mod/events.php:491
-msgid "Event Finishes:"
+#: mod/content.php:737 object/Item.php:704
+msgid "Link"
 msgstr ""
 
-#: mod/events.php:492 mod/events.php:505
-msgid "Adjust for viewer timezone"
+#: mod/content.php:738 object/Item.php:705
+msgid "Video"
 msgstr ""
 
-#: mod/events.php:494
-msgid "Description:"
+#: mod/content.php:748 mod/settings.php:745 object/Item.php:127
+#: object/Item.php:129
+msgid "Edit"
 msgstr ""
 
-#: mod/events.php:498 mod/events.php:500
-msgid "Title:"
+#: mod/content.php:774 object/Item.php:242
+msgid "add star"
 msgstr ""
 
-#: mod/events.php:501 mod/events.php:502
-msgid "Share this event"
+#: mod/content.php:775 object/Item.php:243
+msgid "remove star"
 msgstr ""
 
-#: mod/events.php:531
-msgid "Failed to remove event"
+#: mod/content.php:776 object/Item.php:244
+msgid "toggle star status"
 msgstr ""
 
-#: mod/events.php:533
-msgid "Event removed"
+#: mod/content.php:779 object/Item.php:247
+msgid "starred"
 msgstr ""
 
-#: mod/follow.php:32
-msgid "You already added this contact."
+#: mod/content.php:780 mod/content.php:802 object/Item.php:264
+msgid "add tag"
 msgstr ""
 
-#: mod/follow.php:41
-msgid "Diaspora support isn't enabled. Contact can't be added."
+#: mod/content.php:791 object/Item.php:252
+msgid "ignore thread"
 msgstr ""
 
-#: mod/follow.php:48
-msgid "OStatus support is disabled. Contact can't be added."
+#: mod/content.php:792 object/Item.php:253
+msgid "unignore thread"
 msgstr ""
 
-#: mod/follow.php:55
-msgid "The network type couldn't be detected. Contact can't be added."
+#: mod/content.php:793 object/Item.php:254
+msgid "toggle ignore status"
 msgstr ""
 
-#: mod/follow.php:188
-msgid "Contact added"
+#: mod/content.php:796 mod/ostatus_subscribe.php:76 object/Item.php:257
+msgid "ignored"
 msgstr ""
 
-#: mod/ping.php:274
-msgid "{0} wants to be your friend"
+#: mod/content.php:807 object/Item.php:146
+msgid "save to folder"
 msgstr ""
 
-#: mod/ping.php:289
-msgid "{0} sent you a message"
+#: mod/content.php:855 object/Item.php:216
+msgid "I will attend"
 msgstr ""
 
-#: mod/ping.php:304
-msgid "{0} requested registration"
+#: mod/content.php:855 object/Item.php:216
+msgid "I will not attend"
 msgstr ""
 
-#: mod/profile_photo.php:44
-msgid "Image uploaded but image cropping failed."
+#: mod/content.php:855 object/Item.php:216
+msgid "I might attend"
 msgstr ""
 
-#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93
-#: mod/profile_photo.php:322
-#, php-format
-msgid "Image size reduction [%s] failed."
+#: mod/content.php:919 object/Item.php:347
+msgid "to"
 msgstr ""
 
-#: mod/profile_photo.php:127
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
+#: mod/content.php:920 object/Item.php:349
+msgid "Wall-to-Wall"
 msgstr ""
 
-#: mod/profile_photo.php:136
-msgid "Unable to process image"
+#: mod/content.php:921 object/Item.php:350
+msgid "via Wall-To-Wall:"
 msgstr ""
 
-#: mod/profile_photo.php:253
-msgid "Upload File:"
+#: mod/delegate.php:104
+msgid "No potential page delegates located."
 msgstr ""
 
-#: mod/profile_photo.php:254
-msgid "Select a profile:"
+#: mod/delegate.php:135
+msgid ""
+"Delegates are able to manage all aspects of this account/page except for "
+"basic account settings. Please do not delegate your personal account to "
+"anybody that you do not trust completely."
 msgstr ""
 
-#: mod/profile_photo.php:256
-msgid "Upload"
+#: mod/delegate.php:136
+msgid "Existing Page Managers"
 msgstr ""
 
-#: mod/profile_photo.php:259
-msgid "or"
+#: mod/delegate.php:138
+msgid "Existing Page Delegates"
 msgstr ""
 
-#: mod/profile_photo.php:259
-msgid "skip this step"
+#: mod/delegate.php:140
+msgid "Potential Delegates"
 msgstr ""
 
-#: mod/profile_photo.php:259
-msgid "select a photo from your photo albums"
+#: mod/delegate.php:142 mod/tagrm.php:98
+msgid "Remove"
 msgstr ""
 
-#: mod/profile_photo.php:273
-msgid "Crop Image"
+#: mod/delegate.php:143
+msgid "Add"
 msgstr ""
 
-#: mod/profile_photo.php:274
-msgid "Please adjust the image cropping for optimum viewing."
+#: mod/delegate.php:144
+msgid "No entries."
 msgstr ""
 
-#: mod/profile_photo.php:276
-msgid "Done Editing"
+#: mod/dfrn_confirm.php:73 mod/profiles.php:24 mod/profiles.php:140
+#: mod/profiles.php:187 mod/profiles.php:623
+msgid "Profile not found."
 msgstr ""
 
-#: mod/profile_photo.php:312
-msgid "Image uploaded successfully."
+#: mod/dfrn_confirm.php:130
+msgid ""
+"This may occasionally happen if contact was requested by both persons and it "
+"has already been approved."
 msgstr ""
 
-#: mod/profiles.php:42
-msgid "Profile deleted."
+#: mod/dfrn_confirm.php:247
+msgid "Response from remote site was not understood."
 msgstr ""
 
-#: mod/profiles.php:58 mod/profiles.php:94
-msgid "Profile-"
+#: mod/dfrn_confirm.php:256 mod/dfrn_confirm.php:261
+msgid "Unexpected response from remote site: "
 msgstr ""
 
-#: mod/profiles.php:77 mod/profiles.php:122
-msgid "New profile created."
+#: mod/dfrn_confirm.php:270
+msgid "Confirmation completed successfully."
 msgstr ""
 
-#: mod/profiles.php:100
-msgid "Profile unavailable to clone."
+#: mod/dfrn_confirm.php:272 mod/dfrn_confirm.php:286 mod/dfrn_confirm.php:293
+msgid "Remote site reported: "
 msgstr ""
 
-#: mod/profiles.php:196
-msgid "Profile Name is required."
+#: mod/dfrn_confirm.php:284
+msgid "Temporary failure. Please wait and try again."
 msgstr ""
 
-#: mod/profiles.php:336
-msgid "Marital Status"
+#: mod/dfrn_confirm.php:291
+msgid "Introduction failed or was revoked."
 msgstr ""
 
-#: mod/profiles.php:340
-msgid "Romantic Partner"
+#: mod/dfrn_confirm.php:420
+msgid "Unable to set contact photo."
 msgstr ""
 
-#: mod/profiles.php:352
-msgid "Work/Employment"
+#: mod/dfrn_confirm.php:561
+#, php-format
+msgid "No user record found for '%s' "
 msgstr ""
 
-#: mod/profiles.php:355
-msgid "Religion"
+#: mod/dfrn_confirm.php:571
+msgid "Our site encryption key is apparently messed up."
 msgstr ""
 
-#: mod/profiles.php:359
-msgid "Political Views"
+#: mod/dfrn_confirm.php:582
+msgid "Empty site URL was provided or URL could not be decrypted by us."
 msgstr ""
 
-#: mod/profiles.php:363
-msgid "Gender"
+#: mod/dfrn_confirm.php:604
+msgid "Contact record was not found for you on our site."
 msgstr ""
 
-#: mod/profiles.php:367
-msgid "Sexual Preference"
+#: mod/dfrn_confirm.php:618
+#, php-format
+msgid "Site public key not available in contact record for URL %s."
 msgstr ""
 
-#: mod/profiles.php:371
-msgid "XMPP"
+#: mod/dfrn_confirm.php:638
+msgid ""
+"The ID provided by your system is a duplicate on our system. It should work "
+"if you try again."
 msgstr ""
 
-#: mod/profiles.php:375
-msgid "Homepage"
+#: mod/dfrn_confirm.php:649
+msgid "Unable to set your contact credentials on our system."
 msgstr ""
 
-#: mod/profiles.php:379 mod/profiles.php:698
-msgid "Interests"
+#: mod/dfrn_confirm.php:711
+msgid "Unable to update your contact profile details on our system"
 msgstr ""
 
-#: mod/profiles.php:383
-msgid "Address"
+#: mod/dfrn_confirm.php:783
+#, php-format
+msgid "%1$s has joined %2$s"
 msgstr ""
 
-#: mod/profiles.php:390 mod/profiles.php:694
-msgid "Location"
+#: mod/dfrn_poll.php:114 mod/dfrn_poll.php:550
+#, php-format
+msgid "%1$s welcomes %2$s"
 msgstr ""
 
-#: mod/profiles.php:475
-msgid "Profile updated."
+#: mod/dfrn_request.php:104
+msgid "This introduction has already been accepted."
 msgstr ""
 
-#: mod/profiles.php:567
-msgid " and "
+#: mod/dfrn_request.php:127 mod/dfrn_request.php:529
+msgid "Profile location is not valid or does not contain profile information."
 msgstr ""
 
-#: mod/profiles.php:576
-msgid "public profile"
+#: mod/dfrn_request.php:132 mod/dfrn_request.php:534
+msgid "Warning: profile location has no identifiable owner name."
 msgstr ""
 
-#: mod/profiles.php:579
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+#: mod/dfrn_request.php:135 mod/dfrn_request.php:537
+msgid "Warning: profile location has no profile photo."
 msgstr ""
 
-#: mod/profiles.php:580
+#: mod/dfrn_request.php:139 mod/dfrn_request.php:541
 #, php-format
-msgid " - Visit %1$s's %2$s"
-msgstr ""
+msgid "%d required parameter was not found at the given location"
+msgid_plural "%d required parameters were not found at the given location"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/profiles.php:582
-#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
+#: mod/dfrn_request.php:183
+msgid "Introduction complete."
 msgstr ""
 
-#: mod/profiles.php:640
-msgid "Hide contacts and friends:"
+#: mod/dfrn_request.php:228
+msgid "Unrecoverable protocol error."
 msgstr ""
 
-#: mod/profiles.php:645
-msgid "Hide your contact/friend list from viewers of this profile?"
+#: mod/dfrn_request.php:256
+msgid "Profile unavailable."
 msgstr ""
 
-#: mod/profiles.php:670
-msgid "Show more profile fields:"
+#: mod/dfrn_request.php:283
+#, php-format
+msgid "%s has received too many connection requests today."
 msgstr ""
 
-#: mod/profiles.php:682
-msgid "Profile Actions"
+#: mod/dfrn_request.php:284
+msgid "Spam protection measures have been invoked."
 msgstr ""
 
-#: mod/profiles.php:683
-msgid "Edit Profile Details"
+#: mod/dfrn_request.php:285
+msgid "Friends are advised to please try again in 24 hours."
 msgstr ""
 
-#: mod/profiles.php:685
-msgid "Change Profile Photo"
+#: mod/dfrn_request.php:347
+msgid "Invalid locator"
 msgstr ""
 
-#: mod/profiles.php:686
-msgid "View this profile"
+#: mod/dfrn_request.php:356
+msgid "Invalid email address."
 msgstr ""
 
-#: mod/profiles.php:688
-msgid "Create a new profile using these settings"
+#: mod/dfrn_request.php:381
+msgid "This account has not been configured for email. Request failed."
 msgstr ""
 
-#: mod/profiles.php:689
-msgid "Clone this profile"
+#: mod/dfrn_request.php:484
+msgid "You have already introduced yourself here."
 msgstr ""
 
-#: mod/profiles.php:690
-msgid "Delete this profile"
+#: mod/dfrn_request.php:488
+#, php-format
+msgid "Apparently you are already friends with %s."
 msgstr ""
 
-#: mod/profiles.php:692
-msgid "Basic information"
+#: mod/dfrn_request.php:509
+msgid "Invalid profile URL."
 msgstr ""
 
-#: mod/profiles.php:693
-msgid "Profile picture"
+#: mod/dfrn_request.php:615
+msgid "Your introduction has been sent."
 msgstr ""
 
-#: mod/profiles.php:695
-msgid "Preferences"
+#: mod/dfrn_request.php:657
+msgid ""
+"Remote subscription can't be done for your network. Please subscribe "
+"directly on your system."
 msgstr ""
 
-#: mod/profiles.php:696
-msgid "Status information"
+#: mod/dfrn_request.php:678
+msgid "Please login to confirm introduction."
 msgstr ""
 
-#: mod/profiles.php:697
-msgid "Additional information"
+#: mod/dfrn_request.php:688
+msgid ""
+"Incorrect identity currently logged in. Please login to <strong>this</"
+"strong> profile."
 msgstr ""
 
-#: mod/profiles.php:700
-msgid "Relation"
+#: mod/dfrn_request.php:702 mod/dfrn_request.php:719
+msgid "Confirm"
 msgstr ""
 
-#: mod/profiles.php:704
-msgid "Your Gender:"
+#: mod/dfrn_request.php:714
+msgid "Hide this contact"
 msgstr ""
 
-#: mod/profiles.php:705
-msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
+#: mod/dfrn_request.php:717
+#, php-format
+msgid "Welcome home %s."
 msgstr ""
 
-#: mod/profiles.php:707
-msgid "Example: fishing photography software"
+#: mod/dfrn_request.php:718
+#, php-format
+msgid "Please confirm your introduction/connection request to %s."
 msgstr ""
 
-#: mod/profiles.php:712
-msgid "Profile Name:"
+#: mod/dfrn_request.php:849
+msgid ""
+"Please enter your 'Identity Address' from one of the following supported "
+"communications networks:"
 msgstr ""
 
-#: mod/profiles.php:714
+#: mod/dfrn_request.php:873
+#, php-format
 msgid ""
-"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
-"be visible to anybody using the internet."
+"If you are not yet a member of the free social web, <a href=\"%s/siteinfo"
+"\">follow this link to find a public Friendica site and join us today</a>."
 msgstr ""
 
-#: mod/profiles.php:715
-msgid "Your Full Name:"
+#: mod/dfrn_request.php:878
+msgid "Friend/Connection Request"
 msgstr ""
 
-#: mod/profiles.php:716
-msgid "Title/Description:"
+#: mod/dfrn_request.php:879
+msgid ""
+"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
+"testuser@identi.ca"
 msgstr ""
 
-#: mod/profiles.php:719
-msgid "Street Address:"
+#: mod/dfrn_request.php:880 mod/follow.php:149
+msgid "Please answer the following:"
 msgstr ""
 
-#: mod/profiles.php:720
-msgid "Locality/City:"
+#: mod/dfrn_request.php:881 mod/follow.php:150
+#, php-format
+msgid "Does %s know you?"
 msgstr ""
 
-#: mod/profiles.php:721
-msgid "Region/State:"
+#: mod/dfrn_request.php:885 mod/follow.php:151
+msgid "Add a personal note:"
 msgstr ""
 
-#: mod/profiles.php:722
-msgid "Postal/Zip Code:"
+#: mod/dfrn_request.php:888
+msgid "StatusNet/Federated Social Web"
+msgstr ""
+
+#: mod/dfrn_request.php:890
+#, php-format
+msgid ""
+" - please do not use this form.  Instead, enter %s into your Diaspora search "
+"bar."
 msgstr ""
 
-#: mod/profiles.php:723
-msgid "Country:"
+#: mod/dfrn_request.php:891 mod/follow.php:157 mod/unfollow.php:113
+msgid "Your Identity Address:"
 msgstr ""
 
-#: mod/profiles.php:727
-msgid "Who: (if applicable)"
+#: mod/dfrn_request.php:894 mod/follow.php:63 mod/unfollow.php:65
+msgid "Submit Request"
 msgstr ""
 
-#: mod/profiles.php:727
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+#: mod/directory.php:195 view/theme/vier/theme.php:194
+msgid "Global Directory"
 msgstr ""
 
-#: mod/profiles.php:728
-msgid "Since [date]:"
+#: mod/directory.php:197
+msgid "Find on this site"
 msgstr ""
 
-#: mod/profiles.php:730
-msgid "Tell us about yourself..."
+#: mod/directory.php:199
+msgid "Results for:"
 msgstr ""
 
-#: mod/profiles.php:731
-msgid "XMPP (Jabber) address:"
+#: mod/directory.php:201
+msgid "Site Directory"
 msgstr ""
 
-#: mod/profiles.php:731
-msgid ""
-"The XMPP address will be propagated to your contacts so that they can follow "
-"you."
+#: mod/directory.php:208
+msgid "No entries (some entries may be hidden)."
 msgstr ""
 
-#: mod/profiles.php:732
-msgid "Homepage URL:"
+#: mod/dirfind.php:40
+#, php-format
+msgid "People Search - %s"
 msgstr ""
 
-#: mod/profiles.php:735
-msgid "Religious Views:"
+#: mod/dirfind.php:51
+#, php-format
+msgid "Forum Search - %s"
 msgstr ""
 
-#: mod/profiles.php:736
-msgid "Public Keywords:"
+#: mod/dirfind.php:248 mod/match.php:113
+msgid "No matches"
 msgstr ""
 
-#: mod/profiles.php:736
-msgid "(Used for suggesting potential friends, can be seen by others)"
+#: mod/display.php:491
+msgid "Item has been removed."
 msgstr ""
 
-#: mod/profiles.php:737
-msgid "Private Keywords:"
+#: mod/editpost.php:20 mod/editpost.php:30
+msgid "Item not found"
 msgstr ""
 
-#: mod/profiles.php:737
-msgid "(Used for searching profiles, never shown to others)"
+#: mod/editpost.php:35
+msgid "Edit post"
 msgstr ""
 
-#: mod/profiles.php:740
-msgid "Musical interests"
+#: mod/events.php:97 mod/events.php:99
+msgid "Event can not end before it has started."
 msgstr ""
 
-#: mod/profiles.php:741
-msgid "Books, literature"
+#: mod/events.php:106 mod/events.php:108
+msgid "Event title and start time are required."
 msgstr ""
 
-#: mod/profiles.php:742
-msgid "Television"
+#: mod/events.php:380
+msgid "Create New Event"
 msgstr ""
 
-#: mod/profiles.php:743
-msgid "Film/dance/culture/entertainment"
+#: mod/events.php:485
+msgid "Event details"
 msgstr ""
 
-#: mod/profiles.php:744
-msgid "Hobbies/Interests"
+#: mod/events.php:486
+msgid "Starting date and Title are required."
 msgstr ""
 
-#: mod/profiles.php:745
-msgid "Love/romance"
+#: mod/events.php:487 mod/events.php:488
+msgid "Event Starts:"
 msgstr ""
 
-#: mod/profiles.php:746
-msgid "Work/employment"
+#: mod/events.php:487 mod/events.php:499 mod/profiles.php:713
+msgid "Required"
 msgstr ""
 
-#: mod/profiles.php:747
-msgid "School/education"
+#: mod/events.php:489 mod/events.php:505
+msgid "Finish date/time is not known or not relevant"
 msgstr ""
 
-#: mod/profiles.php:748
-msgid "Contact information and Social Networks"
+#: mod/events.php:491 mod/events.php:492
+msgid "Event Finishes:"
 msgstr ""
 
-#: mod/profiles.php:789
-msgid "Edit/Manage Profiles"
+#: mod/events.php:493 mod/events.php:506
+msgid "Adjust for viewer timezone"
 msgstr ""
 
-#: mod/register.php:96
-msgid ""
-"Registration successful. Please check your email for further instructions."
+#: mod/events.php:495
+msgid "Description:"
 msgstr ""
 
-#: mod/register.php:101
-#, php-format
-msgid ""
-"Failed to send email message. Here your accout details:<br> login: %s<br> "
-"password: %s<br><br>You can change your password after login."
+#: mod/events.php:499 mod/events.php:501
+msgid "Title:"
 msgstr ""
 
-#: mod/register.php:108
-msgid "Registration successful."
+#: mod/events.php:502 mod/events.php:503
+msgid "Share this event"
 msgstr ""
 
-#: mod/register.php:114
-msgid "Your registration can not be processed."
+#: mod/events.php:532
+msgid "Failed to remove event"
 msgstr ""
 
-#: mod/register.php:163
-msgid "Your registration is pending approval by the site owner."
+#: mod/events.php:534
+msgid "Event removed"
 msgstr ""
 
-#: mod/register.php:229
-msgid ""
-"You may (optionally) fill in this form via OpenID by supplying your OpenID "
-"and clicking 'Register'."
+#: mod/fbrowser.php:135
+msgid "Files"
 msgstr ""
 
-#: mod/register.php:230
-msgid ""
-"If you are not familiar with OpenID, please leave that field blank and fill "
-"in the rest of the items."
+#: mod/fetch.php:16 mod/fetch.php:43 mod/fetch.php:52 mod/help.php:57
+#: mod/p.php:20 mod/p.php:47 mod/p.php:56 index.php:302
+msgid "Not Found"
 msgstr ""
 
-#: mod/register.php:231
-msgid "Your OpenID (optional): "
+#: mod/follow.php:42
+msgid "Contact added"
 msgstr ""
 
-#: mod/register.php:245
-msgid "Include your profile in member directory?"
+#: mod/follow.php:74
+msgid "You already added this contact."
 msgstr ""
 
-#: mod/register.php:270
-msgid "Note for the admin"
+#: mod/follow.php:83
+msgid "Diaspora support isn't enabled. Contact can't be added."
 msgstr ""
 
-#: mod/register.php:270
-msgid "Leave a message for the admin, why you want to join this node"
+#: mod/follow.php:90
+msgid "OStatus support is disabled. Contact can't be added."
 msgstr ""
 
-#: mod/register.php:271
-msgid "Membership on this site is by invitation only."
+#: mod/follow.php:97
+msgid "The network type couldn't be detected. Contact can't be added."
 msgstr ""
 
-#: mod/register.php:272
-msgid "Your invitation ID: "
+#: mod/friendica.php:70
+msgid "This is Friendica, version"
 msgstr ""
 
-#: mod/register.php:275 mod/admin.php:1146
-msgid "Registration"
+#: mod/friendica.php:71
+msgid "running at web location"
 msgstr ""
 
-#: mod/register.php:283
-msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
+#: mod/friendica.php:75
+msgid ""
+"Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
+"more about the Friendica project."
 msgstr ""
 
-#: mod/register.php:284
-msgid "Your Email Address: "
+#: mod/friendica.php:79
+msgid "Bug reports and issues: please visit"
 msgstr ""
 
-#: mod/register.php:286 mod/settings.php:1279
-msgid "New Password:"
+#: mod/friendica.php:79
+msgid "the bugtracker at github"
 msgstr ""
 
-#: mod/register.php:286
-msgid "Leave empty for an auto generated password."
+#: mod/friendica.php:82
+msgid ""
+"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
+"dot com"
 msgstr ""
 
-#: mod/register.php:287 mod/settings.php:1280
-msgid "Confirm:"
+#: mod/friendica.php:96
+msgid "Installed plugins/addons/apps:"
 msgstr ""
 
-#: mod/register.php:288
-msgid ""
-"Choose a profile nickname. This must begin with a text character. Your "
-"profile address on this site will then be '<strong>nickname@$sitename</"
-"strong>'."
+#: mod/friendica.php:110
+msgid "No installed plugins/addons/apps"
 msgstr ""
 
-#: mod/register.php:289
-msgid "Choose a nickname: "
+#: mod/friendica.php:115
+msgid "On this server the following remote servers are blocked."
 msgstr ""
 
-#: mod/register.php:299
-msgid "Import your profile to this friendica instance"
+#: mod/group.php:31
+msgid "Group created."
 msgstr ""
 
-#: mod/search.php:28 mod/network.php:200
-msgid "Remove term"
+#: mod/group.php:37
+msgid "Could not create group."
 msgstr ""
 
-#: mod/search.php:103
-msgid "Only logged in users are permitted to perform a search."
+#: mod/group.php:51 mod/group.php:156
+msgid "Group not found."
 msgstr ""
 
-#: mod/search.php:127
-msgid "Too Many Requests"
+#: mod/group.php:65
+msgid "Group name changed."
 msgstr ""
 
-#: mod/search.php:128
-msgid "Only one search per minute is permitted for not logged in users."
+#: mod/group.php:95
+msgid "Save Group"
 msgstr ""
 
-#: mod/search.php:222 mod/community.php:49
-msgid "No results."
+#: mod/group.php:100
+msgid "Create a group of contacts/friends."
 msgstr ""
 
-#: mod/search.php:228
-#, php-format
-msgid "Items tagged with: %s"
+#: mod/group.php:125
+msgid "Group removed."
 msgstr ""
 
-#: mod/search.php:230 mod/contacts.php:810 mod/network.php:154
-#, php-format
-msgid "Results for: %s"
+#: mod/group.php:127
+msgid "Unable to remove group."
 msgstr ""
 
-#: mod/contacts.php:137
-#, php-format
-msgid "%d contact edited."
-msgid_plural "%d contacts edited."
-msgstr[0] ""
-msgstr[1] ""
+#: mod/group.php:191
+msgid "Delete Group"
+msgstr ""
 
-#: mod/contacts.php:172 mod/contacts.php:381
-msgid "Could not access contact record."
+#: mod/group.php:197
+msgid "Group Editor"
 msgstr ""
 
-#: mod/contacts.php:186
-msgid "Could not locate selected profile."
+#: mod/group.php:202
+msgid "Edit Group Name"
 msgstr ""
 
-#: mod/contacts.php:219
-msgid "Contact updated."
+#: mod/group.php:212
+msgid "Members"
 msgstr ""
 
-#: mod/contacts.php:402
-msgid "Contact has been blocked"
+#: mod/group.php:228
+msgid "Remove Contact"
 msgstr ""
 
-#: mod/contacts.php:402
-msgid "Contact has been unblocked"
+#: mod/group.php:252
+msgid "Add Contact"
 msgstr ""
 
-#: mod/contacts.php:413
-msgid "Contact has been ignored"
+#: mod/hcard.php:14
+msgid "No profile"
 msgstr ""
 
-#: mod/contacts.php:413
-msgid "Contact has been unignored"
+#: mod/help.php:45
+msgid "Help:"
 msgstr ""
 
-#: mod/contacts.php:425
-msgid "Contact has been archived"
+#: mod/help.php:60 index.php:305
+msgid "Page not found."
 msgstr ""
 
-#: mod/contacts.php:425
-msgid "Contact has been unarchived"
+#: mod/home.php:42
+#, php-format
+msgid "Welcome to %s"
 msgstr ""
 
-#: mod/contacts.php:450
-msgid "Drop contact"
+#: mod/install.php:109
+msgid "Friendica Communications Server - Setup"
 msgstr ""
 
-#: mod/contacts.php:453 mod/contacts.php:814
-msgid "Do you really want to delete this contact?"
+#: mod/install.php:115
+msgid "Could not connect to database."
 msgstr ""
 
-#: mod/contacts.php:472
-msgid "Contact has been removed."
+#: mod/install.php:119
+msgid "Could not create table."
 msgstr ""
 
-#: mod/contacts.php:509
-#, php-format
-msgid "You are mutual friends with %s"
+#: mod/install.php:125
+msgid "Your Friendica site database has been installed."
 msgstr ""
 
-#: mod/contacts.php:513
-#, php-format
-msgid "You are sharing with %s"
+#: mod/install.php:130
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
 msgstr ""
 
-#: mod/contacts.php:518
-#, php-format
-msgid "%s is sharing with you"
+#: mod/install.php:131 mod/install.php:203 mod/install.php:550
+msgid "Please see the file \"INSTALL.txt\"."
 msgstr ""
 
-#: mod/contacts.php:538
-msgid "Private communications are not available for this contact."
+#: mod/install.php:143
+msgid "Database already in use."
 msgstr ""
 
-#: mod/contacts.php:541 mod/admin.php:1068
-msgid "Never"
+#: mod/install.php:200
+msgid "System check"
 msgstr ""
 
-#: mod/contacts.php:545
-msgid "(Update was successful)"
+#: mod/install.php:205
+msgid "Check again"
 msgstr ""
 
-#: mod/contacts.php:545
-msgid "(Update was not successful)"
+#: mod/install.php:224
+msgid "Database connection"
 msgstr ""
 
-#: mod/contacts.php:547 mod/contacts.php:977
-msgid "Suggest friends"
+#: mod/install.php:225
+msgid ""
+"In order to install Friendica we need to know how to connect to your "
+"database."
 msgstr ""
 
-#: mod/contacts.php:551
-#, php-format
-msgid "Network type: %s"
+#: mod/install.php:226
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
 msgstr ""
 
-#: mod/contacts.php:564
-msgid "Communications lost with this contact!"
+#: mod/install.php:227
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
 msgstr ""
 
-#: mod/contacts.php:567
-msgid "Fetch further information for feeds"
+#: mod/install.php:231
+msgid "Database Server Name"
 msgstr ""
 
-#: mod/contacts.php:568 mod/admin.php:1077
-msgid "Disabled"
+#: mod/install.php:232
+msgid "Database Login Name"
 msgstr ""
 
-#: mod/contacts.php:568
-msgid "Fetch information"
+#: mod/install.php:233
+msgid "Database Login Password"
 msgstr ""
 
-#: mod/contacts.php:568
-msgid "Fetch information and keywords"
+#: mod/install.php:233
+msgid "For security reasons the password must not be empty"
 msgstr ""
 
-#: mod/contacts.php:586
-msgid "Contact"
+#: mod/install.php:234
+msgid "Database Name"
 msgstr ""
 
-#: mod/contacts.php:589
-msgid "Profile Visibility"
+#: mod/install.php:235 mod/install.php:276
+msgid "Site administrator email address"
 msgstr ""
 
-#: mod/contacts.php:590
-#, php-format
+#: mod/install.php:235 mod/install.php:276
 msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
+"Your account email address must match this in order to use the web admin "
+"panel."
 msgstr ""
 
-#: mod/contacts.php:591
-msgid "Contact Information / Notes"
+#: mod/install.php:239 mod/install.php:279
+msgid "Please select a default timezone for your website"
 msgstr ""
 
-#: mod/contacts.php:592
-msgid "Their personal note"
+#: mod/install.php:266
+msgid "Site settings"
 msgstr ""
 
-#: mod/contacts.php:594
-msgid "Edit contact notes"
+#: mod/install.php:280
+msgid "System Language:"
 msgstr ""
 
-#: mod/contacts.php:600
-msgid "Block/Unblock contact"
+#: mod/install.php:280
+msgid ""
+"Set the default language for your Friendica installation interface and to "
+"send emails."
 msgstr ""
 
-#: mod/contacts.php:601
-msgid "Ignore contact"
+#: mod/install.php:320
+msgid "Could not find a command line version of PHP in the web server PATH."
 msgstr ""
 
-#: mod/contacts.php:602
-msgid "Repair URL settings"
+#: mod/install.php:321
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run the background processing. See <a href='https://"
+"github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-"
+"poller'>'Setup the poller'</a>"
 msgstr ""
 
-#: mod/contacts.php:603
-msgid "View conversations"
+#: mod/install.php:325
+msgid "PHP executable path"
 msgstr ""
 
-#: mod/contacts.php:609
-msgid "Last update:"
+#: mod/install.php:325
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
 msgstr ""
 
-#: mod/contacts.php:611
-msgid "Update public posts"
+#: mod/install.php:330
+msgid "Command line PHP"
 msgstr ""
 
-#: mod/contacts.php:613 mod/contacts.php:987
-msgid "Update now"
+#: mod/install.php:339
+msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
 msgstr ""
 
-#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996
-#: mod/admin.php:1600
-msgid "Unblock"
+#: mod/install.php:340
+msgid "Found PHP version: "
 msgstr ""
 
-#: mod/contacts.php:618 mod/contacts.php:818 mod/contacts.php:996
-#: mod/admin.php:1599
-msgid "Block"
+#: mod/install.php:342
+msgid "PHP cli binary"
 msgstr ""
 
-#: mod/contacts.php:619 mod/contacts.php:819 mod/contacts.php:1004
-msgid "Unignore"
+#: mod/install.php:353
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
 msgstr ""
 
-#: mod/contacts.php:623
-msgid "Currently blocked"
+#: mod/install.php:354
+msgid "This is required for message delivery to work."
 msgstr ""
 
-#: mod/contacts.php:624
-msgid "Currently ignored"
+#: mod/install.php:356
+msgid "PHP register_argc_argv"
 msgstr ""
 
-#: mod/contacts.php:625
-msgid "Currently archived"
+#: mod/install.php:379
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
 msgstr ""
 
-#: mod/contacts.php:626
+#: mod/install.php:380
 msgid ""
-"Replies/likes to your public posts <strong>may</strong> still be visible"
+"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
+"installation.php\"."
 msgstr ""
 
-#: mod/contacts.php:627
-msgid "Notification for new posts"
+#: mod/install.php:382
+msgid "Generate encryption keys"
 msgstr ""
 
-#: mod/contacts.php:627
-msgid "Send a notification of every new post of this contact"
+#: mod/install.php:389
+msgid "libCurl PHP module"
 msgstr ""
 
-#: mod/contacts.php:630
-msgid "Blacklisted keywords"
+#: mod/install.php:390
+msgid "GD graphics PHP module"
 msgstr ""
 
-#: mod/contacts.php:630
-msgid ""
-"Comma separated list of keywords that should not be converted to hashtags, "
-"when \"Fetch information and keywords\" is selected"
+#: mod/install.php:391
+msgid "OpenSSL PHP module"
 msgstr ""
 
-#: mod/contacts.php:648
-msgid "Actions"
+#: mod/install.php:392
+msgid "PDO or MySQLi PHP module"
 msgstr ""
 
-#: mod/contacts.php:651
-msgid "Contact Settings"
+#: mod/install.php:393
+msgid "mb_string PHP module"
 msgstr ""
 
-#: mod/contacts.php:697
-msgid "Suggestions"
+#: mod/install.php:394
+msgid "XML PHP module"
 msgstr ""
 
-#: mod/contacts.php:700
-msgid "Suggest potential friends"
+#: mod/install.php:395
+msgid "iconv module"
 msgstr ""
 
-#: mod/contacts.php:708
-msgid "Show all contacts"
+#: mod/install.php:399 mod/install.php:401
+msgid "Apache mod_rewrite module"
 msgstr ""
 
-#: mod/contacts.php:713
-msgid "Unblocked"
+#: mod/install.php:399
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
 msgstr ""
 
-#: mod/contacts.php:716
-msgid "Only show unblocked contacts"
+#: mod/install.php:407
+msgid "Error: libCURL PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:722
-msgid "Blocked"
+#: mod/install.php:411
+msgid ""
+"Error: GD graphics PHP module with JPEG support required but not installed."
 msgstr ""
 
-#: mod/contacts.php:725
-msgid "Only show blocked contacts"
+#: mod/install.php:415
+msgid "Error: openssl PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:731
-msgid "Ignored"
+#: mod/install.php:419
+msgid "Error: PDO or MySQLi PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:734
-msgid "Only show ignored contacts"
+#: mod/install.php:423
+msgid "Error: The MySQL driver for PDO is not installed."
 msgstr ""
 
-#: mod/contacts.php:740
-msgid "Archived"
+#: mod/install.php:427
+msgid "Error: mb_string PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:743
-msgid "Only show archived contacts"
+#: mod/install.php:431
+msgid "Error: iconv PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:749
-msgid "Hidden"
+#: mod/install.php:441
+msgid "Error, XML PHP module required but not installed."
 msgstr ""
 
-#: mod/contacts.php:752
-msgid "Only show hidden contacts"
+#: mod/install.php:453
+msgid ""
+"The web installer needs to be able to create a file called \".htconfig.php\" "
+"in the top folder of your web server and it is unable to do so."
 msgstr ""
 
-#: mod/contacts.php:809
-msgid "Search your contacts"
+#: mod/install.php:454
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
 msgstr ""
 
-#: mod/contacts.php:817 mod/settings.php:162 mod/settings.php:708
-msgid "Update"
+#: mod/install.php:455
+msgid ""
+"At the end of this procedure, we will give you a text to save in a file "
+"named .htconfig.php in your Friendica top folder."
 msgstr ""
 
-#: mod/contacts.php:820 mod/contacts.php:1012
-msgid "Archive"
+#: mod/install.php:456
+msgid ""
+"You can alternatively skip this procedure and perform a manual installation. "
+"Please see the file \"INSTALL.txt\" for instructions."
 msgstr ""
 
-#: mod/contacts.php:820 mod/contacts.php:1012
-msgid "Unarchive"
+#: mod/install.php:459
+msgid ".htconfig.php is writable"
 msgstr ""
 
-#: mod/contacts.php:823
-msgid "Batch Actions"
+#: mod/install.php:469
+msgid ""
+"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
+"compiles templates to PHP to speed up rendering."
 msgstr ""
 
-#: mod/contacts.php:869
-msgid "View all contacts"
+#: mod/install.php:470
+msgid ""
+"In order to store these compiled templates, the web server needs to have "
+"write access to the directory view/smarty3/ under the Friendica top level "
+"folder."
 msgstr ""
 
-#: mod/contacts.php:879
-msgid "View all common friends"
+#: mod/install.php:471
+msgid ""
+"Please ensure that the user that your web server runs as (e.g. www-data) has "
+"write access to this folder."
 msgstr ""
 
-#: mod/contacts.php:886
-msgid "Advanced Contact Settings"
+#: mod/install.php:472
+msgid ""
+"Note: as a security measure, you should give the web server write access to "
+"view/smarty3/ only--not the template files (.tpl) that it contains."
 msgstr ""
 
-#: mod/contacts.php:920
-msgid "Mutual Friendship"
+#: mod/install.php:475
+msgid "view/smarty3 is writable"
 msgstr ""
 
-#: mod/contacts.php:924
-msgid "is a fan of yours"
+#: mod/install.php:491
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
 msgstr ""
 
-#: mod/contacts.php:928
-msgid "you are a fan of"
+#: mod/install.php:493
+msgid "Url rewrite is working"
 msgstr ""
 
-#: mod/contacts.php:998
-msgid "Toggle Blocked status"
+#: mod/install.php:512
+msgid "ImageMagick PHP extension is not installed"
 msgstr ""
 
-#: mod/contacts.php:1006
-msgid "Toggle Ignored status"
+#: mod/install.php:514
+msgid "ImageMagick PHP extension is installed"
 msgstr ""
 
-#: mod/contacts.php:1014
-msgid "Toggle Archive status"
+#: mod/install.php:516
+msgid "ImageMagick supports GIF"
 msgstr ""
 
-#: mod/contacts.php:1022
-msgid "Delete contact"
+#: mod/install.php:523
+msgid ""
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
 msgstr ""
 
-#: mod/help.php:44
-msgid "Help:"
+#: mod/install.php:548
+msgid "<h1>What next</h1>"
 msgstr ""
 
-#: mod/help.php:59 index.php:304
-msgid "Page not found."
+#: mod/install.php:549
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
 msgstr ""
 
-#: mod/invite.php:30
+#: mod/invite.php:31
 msgid "Total invitation limit exceeded."
 msgstr ""
 
-#: mod/invite.php:53
+#: mod/invite.php:54
 #, php-format
 msgid "%s : Not a valid email address."
 msgstr ""
 
-#: mod/invite.php:78
+#: mod/invite.php:79
 msgid "Please join us on Friendica"
 msgstr ""
 
-#: mod/invite.php:89
+#: mod/invite.php:90
 msgid "Invitation limit exceeded. Please contact your site administrator."
 msgstr ""
 
-#: mod/invite.php:93
+#: mod/invite.php:94
 #, php-format
 msgid "%s : Message delivery failed."
 msgstr ""
 
-#: mod/invite.php:97
+#: mod/invite.php:98
 #, php-format
 msgid "%d message sent."
 msgid_plural "%d messages sent."
 msgstr[0] ""
 msgstr[1] ""
 
-#: mod/invite.php:116
+#: mod/invite.php:117
 msgid "You have no more invitations available"
 msgstr ""
 
-#: mod/invite.php:124
+#: mod/invite.php:125
 #, php-format
 msgid ""
 "Visit %s for a list of public sites that you can join. Friendica members on "
@@ -6451,14 +6618,14 @@ msgid ""
 "other social networks."
 msgstr ""
 
-#: mod/invite.php:126
+#: mod/invite.php:127
 #, php-format
 msgid ""
 "To accept this invitation, please visit and register at %s or any other "
 "public Friendica website."
 msgstr ""
 
-#: mod/invite.php:127
+#: mod/invite.php:128
 #, php-format
 msgid ""
 "Friendica sites all inter-connect to create a huge privacy-enhanced social "
@@ -6467,2354 +6634,2210 @@ msgid ""
 "sites you can join."
 msgstr ""
 
-#: mod/invite.php:131
+#: mod/invite.php:132
 msgid ""
 "Our apologies. This system is not currently configured to connect with other "
 "public sites or invite members."
 msgstr ""
 
-#: mod/invite.php:134
+#: mod/invite.php:135
 #, php-format
 msgid "To accept this invitation, please visit and register at %s."
 msgstr ""
 
-#: mod/invite.php:135
+#: mod/invite.php:136
 msgid ""
 "Friendica sites all inter-connect to create a huge privacy-enhanced social "
 "web that is owned and controlled by its members. They can also connect with "
 "many traditional social networks."
 msgstr ""
 
-#: mod/invite.php:141
+#: mod/invite.php:142
 msgid "Send invitations"
 msgstr ""
 
-#: mod/invite.php:142
+#: mod/invite.php:143
 msgid "Enter email addresses, one per line:"
 msgstr ""
 
-#: mod/invite.php:144
+#: mod/invite.php:144 mod/message.php:332 mod/message.php:515
+#: mod/wallmessage.php:138
+msgid "Your message:"
+msgstr ""
+
+#: mod/invite.php:145
 msgid ""
 "You are cordially invited to join me and other close friends on Friendica - "
 "and help us to create a better social web."
 msgstr ""
 
-#: mod/invite.php:146
+#: mod/invite.php:147
 msgid "You will need to supply this invitation code: $invite_code"
 msgstr ""
 
-#: mod/invite.php:146
+#: mod/invite.php:147
 msgid ""
 "Once you have registered, please connect with me via my profile page at:"
 msgstr ""
 
-#: mod/invite.php:148
+#: mod/invite.php:149
 msgid ""
 "For more information about the Friendica project and why we feel it is "
 "important, please visit http://friendi.ca"
 msgstr ""
 
-#: mod/settings.php:45 mod/admin.php:1580
-msgid "Account"
-msgstr ""
-
-#: mod/settings.php:54 mod/admin.php:174
-msgid "Additional features"
-msgstr ""
-
-#: mod/settings.php:62
-msgid "Display"
-msgstr ""
-
-#: mod/settings.php:69 mod/settings.php:891
-msgid "Social Networks"
-msgstr ""
-
-#: mod/settings.php:76 mod/admin.php:172 mod/admin.php:1706 mod/admin.php:1769
-msgid "Plugins"
-msgstr ""
-
-#: mod/settings.php:90
-msgid "Connected apps"
-msgstr ""
-
-#: mod/settings.php:104
-msgid "Remove account"
-msgstr ""
-
-#: mod/settings.php:159
-msgid "Missing some important data!"
-msgstr ""
-
-#: mod/settings.php:273
-msgid "Failed to connect with email account using the settings provided."
-msgstr ""
-
-#: mod/settings.php:278
-msgid "Email settings updated."
-msgstr ""
-
-#: mod/settings.php:293
-msgid "Features updated"
-msgstr ""
-
-#: mod/settings.php:363
-msgid "Relocate message has been send to your contacts"
-msgstr ""
-
-#: mod/settings.php:382
-msgid "Empty passwords are not allowed. Password unchanged."
-msgstr ""
-
-#: mod/settings.php:390
-msgid "Wrong password."
-msgstr ""
-
-#: mod/settings.php:401
-msgid "Password changed."
-msgstr ""
-
-#: mod/settings.php:403
-msgid "Password update failed. Please try again."
-msgstr ""
-
-#: mod/settings.php:483
-msgid " Please use a shorter name."
-msgstr ""
-
-#: mod/settings.php:485
-msgid " Name too short."
-msgstr ""
-
-#: mod/settings.php:494
-msgid "Wrong Password"
+#: mod/item.php:119
+msgid "Unable to locate original post."
 msgstr ""
 
-#: mod/settings.php:499
-msgid " Not valid email."
+#: mod/item.php:346
+msgid "Empty post discarded."
 msgstr ""
 
-#: mod/settings.php:505
-msgid " Cannot change to that email."
+#: mod/item.php:903
+msgid "System error. Post not saved."
 msgstr ""
 
-#: mod/settings.php:561
-msgid "Private forum has no privacy permissions. Using default privacy group."
+#: mod/item.php:994
+#, php-format
+msgid ""
+"This message was sent to you by %s, a member of the Friendica social network."
 msgstr ""
 
-#: mod/settings.php:565
-msgid "Private forum has no privacy permissions and no default privacy group."
+#: mod/item.php:996
+#, php-format
+msgid "You may visit them online at %s"
 msgstr ""
 
-#: mod/settings.php:605
-msgid "Settings updated."
+#: mod/item.php:997
+msgid ""
+"Please contact the sender by replying to this post if you do not wish to "
+"receive these messages."
 msgstr ""
 
-#: mod/settings.php:681 mod/settings.php:707 mod/settings.php:743
-msgid "Add application"
+#: mod/item.php:1001
+#, php-format
+msgid "%s posted an update."
 msgstr ""
 
-#: mod/settings.php:682 mod/settings.php:793 mod/settings.php:842
-#: mod/settings.php:909 mod/settings.php:1006 mod/settings.php:1272
-#: mod/admin.php:1145 mod/admin.php:1770 mod/admin.php:2033 mod/admin.php:2107
-#: mod/admin.php:2260
-msgid "Save Settings"
+#: mod/localtime.php:26
+msgid "Time Conversion"
 msgstr ""
 
-#: mod/settings.php:685 mod/settings.php:711
-msgid "Consumer Key"
+#: mod/localtime.php:28
+msgid ""
+"Friendica provides this service for sharing events with other networks and "
+"friends in unknown timezones."
 msgstr ""
 
-#: mod/settings.php:686 mod/settings.php:712
-msgid "Consumer Secret"
+#: mod/localtime.php:32
+#, php-format
+msgid "UTC time: %s"
 msgstr ""
 
-#: mod/settings.php:687 mod/settings.php:713
-msgid "Redirect"
+#: mod/localtime.php:35
+#, php-format
+msgid "Current timezone: %s"
 msgstr ""
 
-#: mod/settings.php:688 mod/settings.php:714
-msgid "Icon url"
+#: mod/localtime.php:38
+#, php-format
+msgid "Converted localtime: %s"
 msgstr ""
 
-#: mod/settings.php:699
-msgid "You can't edit this application."
+#: mod/localtime.php:43
+msgid "Please select your timezone:"
 msgstr ""
 
-#: mod/settings.php:742
-msgid "Connected Apps"
+#: mod/lostpass.php:22
+msgid "No valid account found."
 msgstr ""
 
-#: mod/settings.php:746
-msgid "Client key starts with"
+#: mod/lostpass.php:38
+msgid "Password reset request issued. Check your email."
 msgstr ""
 
-#: mod/settings.php:747
-msgid "No name"
+#: mod/lostpass.php:44
+#, php-format
+msgid ""
+"\n"
+"\t\tDear %1$s,\n"
+"\t\t\tA request was recently received at \"%2$s\" to reset your account\n"
+"\t\tpassword. In order to confirm this request, please select the "
+"verification link\n"
+"\t\tbelow or paste it into your web browser address bar.\n"
+"\n"
+"\t\tIf you did NOT request this change, please DO NOT follow the link\n"
+"\t\tprovided and ignore and/or delete this email.\n"
+"\n"
+"\t\tYour password will not be changed unless we can verify that you\n"
+"\t\tissued this request."
 msgstr ""
 
-#: mod/settings.php:748
-msgid "Remove authorization"
+#: mod/lostpass.php:55
+#, php-format
+msgid ""
+"\n"
+"\t\tFollow this link to verify your identity:\n"
+"\n"
+"\t\t%1$s\n"
+"\n"
+"\t\tYou will then receive a follow-up message containing the new password.\n"
+"\t\tYou may change that password from your account settings page after "
+"logging in.\n"
+"\n"
+"\t\tThe login details are as follows:\n"
+"\n"
+"\t\tSite Location:\t%2$s\n"
+"\t\tLogin Name:\t%3$s"
 msgstr ""
 
-#: mod/settings.php:760
-msgid "No Plugin settings configured"
+#: mod/lostpass.php:74
+#, php-format
+msgid "Password reset requested at %s"
 msgstr ""
 
-#: mod/settings.php:769
-msgid "Plugin Settings"
+#: mod/lostpass.php:94
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
 msgstr ""
 
-#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250
-msgid "Off"
+#: mod/lostpass.php:113 boot.php:875
+msgid "Password Reset"
 msgstr ""
 
-#: mod/settings.php:783 mod/admin.php:2249 mod/admin.php:2250
-msgid "On"
+#: mod/lostpass.php:114
+msgid "Your password has been reset as requested."
 msgstr ""
 
-#: mod/settings.php:791
-msgid "Additional Features"
+#: mod/lostpass.php:115
+msgid "Your new password is"
 msgstr ""
 
-#: mod/settings.php:801 mod/settings.php:805
-msgid "General Social Media Settings"
+#: mod/lostpass.php:116
+msgid "Save or copy your new password - and then"
 msgstr ""
 
-#: mod/settings.php:811
-msgid "Disable intelligent shortening"
+#: mod/lostpass.php:117
+msgid "click here to login"
 msgstr ""
 
-#: mod/settings.php:813
+#: mod/lostpass.php:118
 msgid ""
-"Normally the system tries to find the best link to add to shortened posts. "
-"If this option is enabled then every shortened post will always point to the "
-"original friendica post."
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
 msgstr ""
 
-#: mod/settings.php:819
-msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
+#: mod/lostpass.php:128
+#, php-format
+msgid ""
+"\n"
+"\t\t\t\tDear %1$s,\n"
+"\t\t\t\t\tYour password has been changed as requested. Please retain this\n"
+"\t\t\t\tinformation for your records (or change your password immediately "
+"to\n"
+"\t\t\t\tsomething that you will remember).\n"
+"\t\t\t"
 msgstr ""
 
-#: mod/settings.php:821
+#: mod/lostpass.php:134
+#, php-format
 msgid ""
-"If you receive a message from an unknown OStatus user, this option decides "
-"what to do. If it is checked, a new contact will be created for every "
-"unknown user."
+"\n"
+"\t\t\t\tYour login details are as follows:\n"
+"\n"
+"\t\t\t\tSite Location:\t%1$s\n"
+"\t\t\t\tLogin Name:\t%2$s\n"
+"\t\t\t\tPassword:\t%3$s\n"
+"\n"
+"\t\t\t\tYou may change that password from your account settings page after "
+"logging in.\n"
+"\t\t\t"
 msgstr ""
 
-#: mod/settings.php:827
-msgid "Default group for OStatus contacts"
+#: mod/lostpass.php:150
+#, php-format
+msgid "Your password has been changed at %s"
 msgstr ""
 
-#: mod/settings.php:835
-msgid "Your legacy GNU Social account"
+#: mod/lostpass.php:162
+msgid "Forgot your Password?"
 msgstr ""
 
-#: mod/settings.php:837
+#: mod/lostpass.php:163
 msgid ""
-"If you enter your old GNU Social/Statusnet account name here (in the format "
-"user@domain.tld), your contacts will be added automatically. The field will "
-"be emptied when done."
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
 msgstr ""
 
-#: mod/settings.php:840
-msgid "Repair OStatus subscriptions"
+#: mod/lostpass.php:164 boot.php:863
+msgid "Nickname or Email: "
 msgstr ""
 
-#: mod/settings.php:849 mod/settings.php:850
-#, php-format
-msgid "Built-in support for %s connectivity is %s"
+#: mod/lostpass.php:165
+msgid "Reset"
 msgstr ""
 
-#: mod/settings.php:849 mod/settings.php:850
-msgid "enabled"
+#: mod/manage.php:153
+msgid "Manage Identities and/or Pages"
 msgstr ""
 
-#: mod/settings.php:849 mod/settings.php:850
-msgid "disabled"
+#: mod/manage.php:154
+msgid ""
+"Toggle between different identities or community/group pages which share "
+"your account details or which you have been granted \"manage\" permissions"
 msgstr ""
 
-#: mod/settings.php:850
-msgid "GNU Social (OStatus)"
+#: mod/manage.php:155
+msgid "Select an identity to manage: "
 msgstr ""
 
-#: mod/settings.php:884
-msgid "Email access is disabled on this site."
+#: mod/match.php:39
+msgid "No keywords to match. Please add keywords to your default profile."
 msgstr ""
 
-#: mod/settings.php:896
-msgid "Email/Mailbox Setup"
+#: mod/match.php:92
+msgid "is interested in:"
 msgstr ""
 
-#: mod/settings.php:897
-msgid ""
-"If you wish to communicate with email contacts using this service "
-"(optional), please specify how to connect to your mailbox."
+#: mod/match.php:106
+msgid "Profile Match"
 msgstr ""
 
-#: mod/settings.php:898
-msgid "Last successful email check:"
+#: mod/message.php:63 mod/wallmessage.php:53
+msgid "No recipient selected."
 msgstr ""
 
-#: mod/settings.php:900
-msgid "IMAP server name:"
+#: mod/message.php:67
+msgid "Unable to locate contact information."
 msgstr ""
 
-#: mod/settings.php:901
-msgid "IMAP port:"
+#: mod/message.php:70 mod/wallmessage.php:59
+msgid "Message could not be sent."
 msgstr ""
 
-#: mod/settings.php:902
-msgid "Security:"
+#: mod/message.php:73 mod/wallmessage.php:62
+msgid "Message collection failure."
 msgstr ""
 
-#: mod/settings.php:902 mod/settings.php:907
-msgid "None"
+#: mod/message.php:76 mod/wallmessage.php:65
+msgid "Message sent."
 msgstr ""
 
-#: mod/settings.php:903
-msgid "Email login name:"
+#: mod/message.php:205
+msgid "Do you really want to delete this message?"
 msgstr ""
 
-#: mod/settings.php:904
-msgid "Email password:"
+#: mod/message.php:225
+msgid "Message deleted."
 msgstr ""
 
-#: mod/settings.php:905
-msgid "Reply-to address:"
+#: mod/message.php:255
+msgid "Conversation removed."
 msgstr ""
 
-#: mod/settings.php:906
-msgid "Send public posts to all email contacts:"
+#: mod/message.php:322 mod/wallmessage.php:129
+msgid "Send Private Message"
 msgstr ""
 
-#: mod/settings.php:907
-msgid "Action after import:"
+#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:131
+msgid "To:"
 msgstr ""
 
-#: mod/settings.php:907
-msgid "Move to folder"
+#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:132
+msgid "Subject:"
 msgstr ""
 
-#: mod/settings.php:908
-msgid "Move to folder:"
+#: mod/message.php:364
+msgid "No messages."
 msgstr ""
 
-#: mod/settings.php:944 mod/admin.php:1032
-msgid "No special theme for mobile devices"
+#: mod/message.php:403
+msgid "Message not available."
 msgstr ""
 
-#: mod/settings.php:1004
-msgid "Display Settings"
+#: mod/message.php:478
+msgid "Delete message"
 msgstr ""
 
-#: mod/settings.php:1010 mod/settings.php:1033
-msgid "Display Theme:"
+#: mod/message.php:503 mod/message.php:591
+msgid "Delete conversation"
 msgstr ""
 
-#: mod/settings.php:1011
-msgid "Mobile Theme:"
+#: mod/message.php:505
+msgid ""
+"No secure communications available. You <strong>may</strong> be able to "
+"respond from the sender's profile page."
 msgstr ""
 
-#: mod/settings.php:1012
-msgid "Suppress warning of insecure networks"
+#: mod/message.php:509
+msgid "Send Reply"
 msgstr ""
 
-#: mod/settings.php:1012
-msgid ""
-"Should the system suppress the warning that the current group contains "
-"members of networks that can't receive non public postings."
+#: mod/message.php:561
+#, php-format
+msgid "Unknown sender - %s"
 msgstr ""
 
-#: mod/settings.php:1013
-msgid "Update browser every xx seconds"
+#: mod/message.php:563
+#, php-format
+msgid "You and %s"
 msgstr ""
 
-#: mod/settings.php:1013
-msgid "Minimum of 10 seconds. Enter -1 to disable it."
+#: mod/message.php:565
+#, php-format
+msgid "%s and You"
 msgstr ""
 
-#: mod/settings.php:1014
-msgid "Number of items to display per page:"
+#: mod/message.php:594
+msgid "D, d M Y - g:i A"
 msgstr ""
 
-#: mod/settings.php:1014 mod/settings.php:1015
-msgid "Maximum of 100 items"
-msgstr ""
+#: mod/message.php:597
+#, php-format
+msgid "%d message"
+msgid_plural "%d messages"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/settings.php:1015
-msgid "Number of items to display per page when viewed from mobile device:"
+#: mod/mood.php:136
+msgid "Mood"
 msgstr ""
 
-#: mod/settings.php:1016
-msgid "Don't show emoticons"
+#: mod/mood.php:137
+msgid "Set your current mood and tell your friends"
 msgstr ""
 
-#: mod/settings.php:1017
-msgid "Calendar"
-msgstr ""
+#: mod/network.php:561
+#, php-format
+msgid ""
+"Warning: This group contains %s member from a network that doesn't allow non "
+"public messages."
+msgid_plural ""
+"Warning: This group contains %s members from a network that doesn't allow "
+"non public messages."
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/settings.php:1018
-msgid "Beginning of week:"
+#: mod/network.php:564
+msgid "Messages in this group won't be send to these receivers."
 msgstr ""
 
-#: mod/settings.php:1019
-msgid "Don't show notices"
+#: mod/network.php:684
+msgid "Private messages to this person are at risk of public disclosure."
 msgstr ""
 
-#: mod/settings.php:1020
-msgid "Infinite scroll"
+#: mod/network.php:688
+msgid "Invalid contact."
 msgstr ""
 
-#: mod/settings.php:1021
-msgid "Automatic updates only at the top of the network page"
+#: mod/network.php:892
+msgid "Commented Order"
 msgstr ""
 
-#: mod/settings.php:1021
-msgid ""
-"When disabled, the network page is updated all the time, which could be "
-"confusing while reading."
+#: mod/network.php:895
+msgid "Sort by Comment Date"
 msgstr ""
 
-#: mod/settings.php:1022
-msgid "Bandwith Saver Mode"
+#: mod/network.php:900
+msgid "Posted Order"
 msgstr ""
 
-#: mod/settings.php:1022
-msgid ""
-"When enabled, embedded content is not displayed on automatic updates, they "
-"only show on page reload."
+#: mod/network.php:903
+msgid "Sort by Post Date"
+msgstr ""
+
+#: mod/network.php:914
+msgid "Posts that mention or involve you"
 msgstr ""
 
-#: mod/settings.php:1024
-msgid "General Theme Settings"
+#: mod/network.php:922
+msgid "New"
 msgstr ""
 
-#: mod/settings.php:1025
-msgid "Custom Theme Settings"
+#: mod/network.php:925
+msgid "Activity Stream - by date"
 msgstr ""
 
-#: mod/settings.php:1026
-msgid "Content Settings"
+#: mod/network.php:933
+msgid "Shared Links"
 msgstr ""
 
-#: mod/settings.php:1027 view/theme/duepuntozero/config.php:66
-#: view/theme/frio/config.php:69 view/theme/quattro/config.php:72
-#: view/theme/vier/config.php:115
-msgid "Theme settings"
+#: mod/network.php:936
+msgid "Interesting Links"
 msgstr ""
 
-#: mod/settings.php:1111
-msgid "Account Types"
+#: mod/network.php:944
+msgid "Starred"
 msgstr ""
 
-#: mod/settings.php:1112
-msgid "Personal Page Subtypes"
+#: mod/network.php:947
+msgid "Favourite Posts"
 msgstr ""
 
-#: mod/settings.php:1113
-msgid "Community Forum Subtypes"
+#: mod/notifications.php:38
+msgid "Invalid request identifier."
 msgstr ""
 
-#: mod/settings.php:1120
-msgid "Personal Page"
+#: mod/notifications.php:47 mod/notifications.php:183 mod/notifications.php:230
+msgid "Discard"
 msgstr ""
 
-#: mod/settings.php:1121
-msgid "Account for a personal profile."
+#: mod/notifications.php:108
+msgid "Network Notifications"
 msgstr ""
 
-#: mod/settings.php:1124
-msgid "Organisation Page"
+#: mod/notifications.php:114 mod/notify.php:73
+msgid "System Notifications"
 msgstr ""
 
-#: mod/settings.php:1125
-msgid ""
-"Account for an organisation that automatically approves contact requests as "
-"\"Followers\"."
+#: mod/notifications.php:120
+msgid "Personal Notifications"
 msgstr ""
 
-#: mod/settings.php:1128
-msgid "News Page"
+#: mod/notifications.php:126
+msgid "Home Notifications"
 msgstr ""
 
-#: mod/settings.php:1129
-msgid ""
-"Account for a news reflector that automatically approves contact requests as "
-"\"Followers\"."
+#: mod/notifications.php:155
+msgid "Show Ignored Requests"
 msgstr ""
 
-#: mod/settings.php:1132
-msgid "Community Forum"
+#: mod/notifications.php:155
+msgid "Hide Ignored Requests"
 msgstr ""
 
-#: mod/settings.php:1133
-msgid "Account for community discussions."
+#: mod/notifications.php:167 mod/notifications.php:237
+msgid "Notification type: "
 msgstr ""
 
-#: mod/settings.php:1136
-msgid "Normal Account Page"
+#: mod/notifications.php:170
+#, php-format
+msgid "suggested by %s"
 msgstr ""
 
-#: mod/settings.php:1137
-msgid ""
-"Account for a regular personal profile that requires manual approval of "
-"\"Friends\" and \"Followers\"."
+#: mod/notifications.php:176 mod/notifications.php:255
+msgid "Post a new friend activity"
 msgstr ""
 
-#: mod/settings.php:1140
-msgid "Soapbox Page"
+#: mod/notifications.php:176 mod/notifications.php:255
+msgid "if applicable"
 msgstr ""
 
-#: mod/settings.php:1141
-msgid ""
-"Account for a public profile that automatically approves contact requests as "
-"\"Followers\"."
+#: mod/notifications.php:198
+msgid "Claims to be known to you: "
 msgstr ""
 
-#: mod/settings.php:1144
-msgid "Public Forum"
+#: mod/notifications.php:199
+msgid "yes"
 msgstr ""
 
-#: mod/settings.php:1145
-msgid "Automatically approves all contact requests."
+#: mod/notifications.php:199
+msgid "no"
 msgstr ""
 
-#: mod/settings.php:1148
-msgid "Automatic Friend Page"
+#: mod/notifications.php:200 mod/notifications.php:205
+msgid "Shall your connection be bidirectional or not?"
 msgstr ""
 
-#: mod/settings.php:1149
+#: mod/notifications.php:201 mod/notifications.php:206
+#, php-format
 msgid ""
-"Account for a popular profile that automatically approves contact requests "
-"as \"Friends\"."
+"Accepting %s as a friend allows %s to subscribe to your posts, and you will "
+"also receive updates from them in your news feed."
 msgstr ""
 
-#: mod/settings.php:1152
-msgid "Private Forum [Experimental]"
+#: mod/notifications.php:202
+#, php-format
+msgid ""
+"Accepting %s as a subscriber allows them to subscribe to your posts, but you "
+"will not receive updates from them in your news feed."
 msgstr ""
 
-#: mod/settings.php:1153
-msgid "Requires manual approval of contact requests."
+#: mod/notifications.php:207
+#, php-format
+msgid ""
+"Accepting %s as a sharer allows them to subscribe to your posts, but you "
+"will not receive updates from them in your news feed."
 msgstr ""
 
-#: mod/settings.php:1164
-msgid "OpenID:"
+#: mod/notifications.php:218
+msgid "Friend"
 msgstr ""
 
-#: mod/settings.php:1164
-msgid "(Optional) Allow this OpenID to login to this account."
+#: mod/notifications.php:219
+msgid "Sharer"
 msgstr ""
 
-#: mod/settings.php:1172
-msgid "Publish your default profile in your local site directory?"
+#: mod/notifications.php:219
+msgid "Subscriber"
 msgstr ""
 
-#: mod/settings.php:1172
-msgid "Your profile may be visible in public."
+#: mod/notifications.php:275
+msgid "No introductions."
 msgstr ""
 
-#: mod/settings.php:1178
-msgid "Publish your default profile in the global social directory?"
+#: mod/notifications.php:316
+msgid "Show unread"
 msgstr ""
 
-#: mod/settings.php:1185
-msgid "Hide your contact/friend list from viewers of your default profile?"
+#: mod/notifications.php:316
+msgid "Show all"
 msgstr ""
 
-#: mod/settings.php:1189
-msgid ""
-"If enabled, posting public messages to Diaspora and other networks isn't "
-"possible."
+#: mod/notifications.php:322
+#, php-format
+msgid "No more %s notifications."
 msgstr ""
 
-#: mod/settings.php:1194
-msgid "Allow friends to post to your profile page?"
+#: mod/notify.php:69
+msgid "No more system notifications."
 msgstr ""
 
-#: mod/settings.php:1199
-msgid "Allow friends to tag your posts?"
+#: mod/oexchange.php:25
+msgid "Post successful."
 msgstr ""
 
-#: mod/settings.php:1204
-msgid "Allow us to suggest you as a potential friend to new members?"
+#: mod/openid.php:25
+msgid "OpenID protocol error. No ID returned."
 msgstr ""
 
-#: mod/settings.php:1209
-msgid "Permit unknown people to send you private mail?"
+#: mod/openid.php:61
+msgid ""
+"Account not found and OpenID registration is not permitted on this site."
 msgstr ""
 
-#: mod/settings.php:1217
-msgid "Profile is <strong>not published</strong>."
+#: mod/ostatus_subscribe.php:17
+msgid "Subscribing to OStatus contacts"
 msgstr ""
 
-#: mod/settings.php:1225
-#, php-format
-msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
+#: mod/ostatus_subscribe.php:28
+msgid "No contact provided."
 msgstr ""
 
-#: mod/settings.php:1232
-msgid "Automatically expire posts after this many days:"
+#: mod/ostatus_subscribe.php:34
+msgid "Couldn't fetch information for contact."
 msgstr ""
 
-#: mod/settings.php:1232
-msgid "If empty, posts will not expire. Expired posts will be deleted"
+#: mod/ostatus_subscribe.php:43
+msgid "Couldn't fetch friends for contact."
 msgstr ""
 
-#: mod/settings.php:1233
-msgid "Advanced expiration settings"
+#: mod/ostatus_subscribe.php:57 mod/repair_ostatus.php:47
+msgid "Done"
 msgstr ""
 
-#: mod/settings.php:1234
-msgid "Advanced Expiration"
+#: mod/ostatus_subscribe.php:71
+msgid "success"
 msgstr ""
 
-#: mod/settings.php:1235
-msgid "Expire posts:"
+#: mod/ostatus_subscribe.php:73
+msgid "failed"
 msgstr ""
 
-#: mod/settings.php:1236
-msgid "Expire personal notes:"
+#: mod/ostatus_subscribe.php:81 mod/repair_ostatus.php:53
+msgid "Keep this window open until done."
 msgstr ""
 
-#: mod/settings.php:1237
-msgid "Expire starred posts:"
+#: mod/p.php:13
+msgid "Not Extended"
 msgstr ""
 
-#: mod/settings.php:1238
-msgid "Expire photos:"
+#: mod/photos.php:97 mod/photos.php:1903
+msgid "Recent Photos"
 msgstr ""
 
-#: mod/settings.php:1239
-msgid "Only expire posts by others:"
+#: mod/photos.php:100 mod/photos.php:1331 mod/photos.php:1905
+msgid "Upload New Photos"
 msgstr ""
 
-#: mod/settings.php:1270
-msgid "Account Settings"
+#: mod/photos.php:115 mod/settings.php:39
+msgid "everybody"
 msgstr ""
 
-#: mod/settings.php:1278
-msgid "Password Settings"
+#: mod/photos.php:179
+msgid "Contact information unavailable"
 msgstr ""
 
-#: mod/settings.php:1280
-msgid "Leave password fields blank unless changing"
+#: mod/photos.php:200
+msgid "Album not found."
 msgstr ""
 
-#: mod/settings.php:1281
-msgid "Current Password:"
+#: mod/photos.php:233 mod/photos.php:245 mod/photos.php:1275
+msgid "Delete Album"
 msgstr ""
 
-#: mod/settings.php:1281 mod/settings.php:1282
-msgid "Your current password to confirm the changes"
+#: mod/photos.php:243
+msgid "Do you really want to delete this photo album and all its photos?"
 msgstr ""
 
-#: mod/settings.php:1282
-msgid "Password:"
+#: mod/photos.php:326 mod/photos.php:337 mod/photos.php:1601
+msgid "Delete Photo"
 msgstr ""
 
-#: mod/settings.php:1286
-msgid "Basic Settings"
+#: mod/photos.php:335
+msgid "Do you really want to delete this photo?"
 msgstr ""
 
-#: mod/settings.php:1288
-msgid "Email Address:"
+#: mod/photos.php:716
+#, php-format
+msgid "%1$s was tagged in %2$s by %3$s"
 msgstr ""
 
-#: mod/settings.php:1289
-msgid "Your Timezone:"
+#: mod/photos.php:716
+msgid "a photo"
 msgstr ""
 
-#: mod/settings.php:1290
-msgid "Your Language:"
+#: mod/photos.php:816 mod/profile_photo.php:156 mod/wall_upload.php:182
+#, php-format
+msgid "Image exceeds size limit of %s"
 msgstr ""
 
-#: mod/settings.php:1290
-msgid ""
-"Set the language we use to show you friendica interface and to send you "
-"emails"
+#: mod/photos.php:824
+msgid "Image file is empty."
 msgstr ""
 
-#: mod/settings.php:1291
-msgid "Default Post Location:"
+#: mod/photos.php:857 mod/profile_photo.php:165 mod/wall_upload.php:219
+msgid "Unable to process image."
 msgstr ""
 
-#: mod/settings.php:1292
-msgid "Use Browser Location:"
+#: mod/photos.php:886 mod/profile_photo.php:315 mod/wall_upload.php:258
+msgid "Image upload failed."
 msgstr ""
 
-#: mod/settings.php:1295
-msgid "Security and Privacy Settings"
+#: mod/photos.php:991
+msgid "No photos selected"
 msgstr ""
 
-#: mod/settings.php:1297
-msgid "Maximum Friend Requests/Day:"
+#: mod/photos.php:1094 mod/videos.php:312
+msgid "Access to this item is restricted."
 msgstr ""
 
-#: mod/settings.php:1297 mod/settings.php:1327
-msgid "(to prevent spam abuse)"
+#: mod/photos.php:1154
+#, php-format
+msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
 msgstr ""
 
-#: mod/settings.php:1298
-msgid "Default Post Permissions"
+#: mod/photos.php:1191
+msgid "Upload Photos"
 msgstr ""
 
-#: mod/settings.php:1299
-msgid "(click to open/close)"
+#: mod/photos.php:1195 mod/photos.php:1270
+msgid "New album name: "
 msgstr ""
 
-#: mod/settings.php:1310
-msgid "Default Private Post"
+#: mod/photos.php:1196
+msgid "or existing album name: "
 msgstr ""
 
-#: mod/settings.php:1311
-msgid "Default Public Post"
+#: mod/photos.php:1197
+msgid "Do not show a status post for this upload"
 msgstr ""
 
-#: mod/settings.php:1315
-msgid "Default Permissions for New Posts"
+#: mod/photos.php:1208 mod/photos.php:1605 mod/settings.php:1309
+msgid "Show to Groups"
 msgstr ""
 
-#: mod/settings.php:1327
-msgid "Maximum private messages per day from unknown people:"
+#: mod/photos.php:1209 mod/photos.php:1606 mod/settings.php:1310
+msgid "Show to Contacts"
 msgstr ""
 
-#: mod/settings.php:1330
-msgid "Notification Settings"
+#: mod/photos.php:1210
+msgid "Private Photo"
 msgstr ""
 
-#: mod/settings.php:1331
-msgid "By default post a status message when:"
+#: mod/photos.php:1211
+msgid "Public Photo"
 msgstr ""
 
-#: mod/settings.php:1332
-msgid "accepting a friend request"
+#: mod/photos.php:1281
+msgid "Edit Album"
 msgstr ""
 
-#: mod/settings.php:1333
-msgid "joining a forum/community"
+#: mod/photos.php:1286
+msgid "Show Newest First"
 msgstr ""
 
-#: mod/settings.php:1334
-msgid "making an <em>interesting</em> profile change"
+#: mod/photos.php:1288
+msgid "Show Oldest First"
 msgstr ""
 
-#: mod/settings.php:1335
-msgid "Send a notification email when:"
+#: mod/photos.php:1317 mod/photos.php:1888
+msgid "View Photo"
 msgstr ""
 
-#: mod/settings.php:1336
-msgid "You receive an introduction"
+#: mod/photos.php:1362
+msgid "Permission denied. Access to this item may be restricted."
 msgstr ""
 
-#: mod/settings.php:1337
-msgid "Your introductions are confirmed"
+#: mod/photos.php:1364
+msgid "Photo not available"
 msgstr ""
 
-#: mod/settings.php:1338
-msgid "Someone writes on your profile wall"
+#: mod/photos.php:1425
+msgid "View photo"
 msgstr ""
 
-#: mod/settings.php:1339
-msgid "Someone writes a followup comment"
+#: mod/photos.php:1425
+msgid "Edit photo"
 msgstr ""
 
-#: mod/settings.php:1340
-msgid "You receive a private message"
+#: mod/photos.php:1426
+msgid "Use as profile photo"
 msgstr ""
 
-#: mod/settings.php:1341
-msgid "You receive a friend suggestion"
+#: mod/photos.php:1451
+msgid "View Full Size"
 msgstr ""
 
-#: mod/settings.php:1342
-msgid "You are tagged in a post"
+#: mod/photos.php:1541
+msgid "Tags: "
 msgstr ""
 
-#: mod/settings.php:1343
-msgid "You are poked/prodded/etc. in a post"
+#: mod/photos.php:1544
+msgid "[Remove any tag]"
 msgstr ""
 
-#: mod/settings.php:1345
-msgid "Activate desktop notifications"
+#: mod/photos.php:1587
+msgid "New album name"
 msgstr ""
 
-#: mod/settings.php:1345
-msgid "Show desktop popup on new notifications"
+#: mod/photos.php:1588
+msgid "Caption"
 msgstr ""
 
-#: mod/settings.php:1347
-msgid "Text-only notification emails"
+#: mod/photos.php:1589
+msgid "Add a Tag"
 msgstr ""
 
-#: mod/settings.php:1349
-msgid "Send text only notification emails, without the html part"
+#: mod/photos.php:1589
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 msgstr ""
 
-#: mod/settings.php:1351
-msgid "Advanced Account/Page Type Settings"
+#: mod/photos.php:1590
+msgid "Do not rotate"
 msgstr ""
 
-#: mod/settings.php:1352
-msgid "Change the behaviour of this account for special situations"
+#: mod/photos.php:1591
+msgid "Rotate CW (right)"
 msgstr ""
 
-#: mod/settings.php:1355
-msgid "Relocate"
+#: mod/photos.php:1592
+msgid "Rotate CCW (left)"
 msgstr ""
 
-#: mod/settings.php:1356
-msgid ""
-"If you have moved this profile from another server, and some of your "
-"contacts don't receive your updates, try pushing this button."
+#: mod/photos.php:1607
+msgid "Private photo"
 msgstr ""
 
-#: mod/settings.php:1357
-msgid "Resend relocate message to contacts"
+#: mod/photos.php:1608
+msgid "Public photo"
 msgstr ""
 
-#: mod/admin.php:98
-msgid "Theme settings updated."
+#: mod/photos.php:1817
+msgid "Map"
 msgstr ""
 
-#: mod/admin.php:170 mod/admin.php:1144
-msgid "Site"
+#: mod/photos.php:1894 mod/videos.php:396
+msgid "View Album"
 msgstr ""
 
-#: mod/admin.php:171 mod/admin.php:1078 mod/admin.php:1588 mod/admin.php:1604
-msgid "Users"
+#: mod/ping.php:275
+msgid "{0} wants to be your friend"
 msgstr ""
 
-#: mod/admin.php:173 mod/admin.php:1982 mod/admin.php:2032
-msgid "Themes"
+#: mod/ping.php:290
+msgid "{0} sent you a message"
 msgstr ""
 
-#: mod/admin.php:175
-msgid "DB updates"
+#: mod/ping.php:305
+msgid "{0} requested registration"
 msgstr ""
 
-#: mod/admin.php:176 mod/admin.php:582
-msgid "Inspect Queue"
+#: mod/poke.php:198
+msgid "Poke/Prod"
 msgstr ""
 
-#: mod/admin.php:177 mod/admin.php:297
-msgid "Server Blocklist"
+#: mod/poke.php:199
+msgid "poke, prod or do other things to somebody"
 msgstr ""
 
-#: mod/admin.php:178 mod/admin.php:548
-msgid "Federation Statistics"
+#: mod/poke.php:200
+msgid "Recipient"
 msgstr ""
 
-#: mod/admin.php:179 mod/admin.php:374
-msgid "Delete Item"
+#: mod/poke.php:201
+msgid "Choose what you wish to do to recipient"
 msgstr ""
 
-#: mod/admin.php:193 mod/admin.php:204 mod/admin.php:2106
-msgid "Logs"
+#: mod/poke.php:204
+msgid "Make this post private"
 msgstr ""
 
-#: mod/admin.php:194 mod/admin.php:2174
-msgid "View Logs"
+#: mod/profile.php:177
+msgid "Tips for New Members"
 msgstr ""
 
-#: mod/admin.php:195
-msgid "probe address"
+#: mod/profile_photo.php:45
+msgid "Image uploaded but image cropping failed."
 msgstr ""
 
-#: mod/admin.php:196
-msgid "check webfinger"
+#: mod/profile_photo.php:78 mod/profile_photo.php:86 mod/profile_photo.php:94
+#: mod/profile_photo.php:323
+#, php-format
+msgid "Image size reduction [%s] failed."
 msgstr ""
 
-#: mod/admin.php:203
-msgid "Plugin Features"
+#: mod/profile_photo.php:128
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
 msgstr ""
 
-#: mod/admin.php:205
-msgid "diagnostics"
+#: mod/profile_photo.php:137
+msgid "Unable to process image"
 msgstr ""
 
-#: mod/admin.php:206
-msgid "User registrations waiting for confirmation"
+#: mod/profile_photo.php:254
+msgid "Upload File:"
 msgstr ""
 
-#: mod/admin.php:288
-msgid "The blocked domain"
+#: mod/profile_photo.php:255
+msgid "Select a profile:"
 msgstr ""
 
-#: mod/admin.php:289 mod/admin.php:302
-msgid "The reason why you blocked this domain."
+#: mod/profile_photo.php:257
+msgid "Upload"
 msgstr ""
 
-#: mod/admin.php:290
-msgid "Delete domain"
+#: mod/profile_photo.php:260
+msgid "or"
 msgstr ""
 
-#: mod/admin.php:290
-msgid "Check to delete this entry from the blocklist"
+#: mod/profile_photo.php:260
+msgid "skip this step"
 msgstr ""
 
-#: mod/admin.php:296 mod/admin.php:373 mod/admin.php:547 mod/admin.php:581
-#: mod/admin.php:661 mod/admin.php:1143 mod/admin.php:1587 mod/admin.php:1705
-#: mod/admin.php:1768 mod/admin.php:1981 mod/admin.php:2031 mod/admin.php:2105
-#: mod/admin.php:2173
-msgid "Administration"
+#: mod/profile_photo.php:260
+msgid "select a photo from your photo albums"
 msgstr ""
 
-#: mod/admin.php:298
-msgid ""
-"This page can be used to define a black list of servers from the federated "
-"network that are not allowed to interact with your node. For all entered "
-"domains you should also give a reason why you have blocked the remote server."
+#: mod/profile_photo.php:274
+msgid "Crop Image"
 msgstr ""
 
-#: mod/admin.php:299
-msgid ""
-"The list of blocked servers will be made publically available on the /"
-"friendica page so that your users and people investigating communication "
-"problems can find the reason easily."
+#: mod/profile_photo.php:275
+msgid "Please adjust the image cropping for optimum viewing."
 msgstr ""
 
-#: mod/admin.php:300
-msgid "Add new entry to block list"
+#: mod/profile_photo.php:277
+msgid "Done Editing"
 msgstr ""
 
-#: mod/admin.php:301
-msgid "Server Domain"
+#: mod/profile_photo.php:313
+msgid "Image uploaded successfully."
 msgstr ""
 
-#: mod/admin.php:301
-msgid ""
-"The domain of the new server to add to the block list. Do not include the "
-"protocol."
+#: mod/profiles.php:43
+msgid "Profile deleted."
 msgstr ""
 
-#: mod/admin.php:302
-msgid "Block reason"
+#: mod/profiles.php:59 mod/profiles.php:95
+msgid "Profile-"
 msgstr ""
 
-#: mod/admin.php:303
-msgid "Add Entry"
+#: mod/profiles.php:78 mod/profiles.php:123
+msgid "New profile created."
 msgstr ""
 
-#: mod/admin.php:304
-msgid "Save changes to the blocklist"
+#: mod/profiles.php:101
+msgid "Profile unavailable to clone."
 msgstr ""
 
-#: mod/admin.php:305
-msgid "Current Entries in the Blocklist"
+#: mod/profiles.php:197
+msgid "Profile Name is required."
 msgstr ""
 
-#: mod/admin.php:308
-msgid "Delete entry from blocklist"
+#: mod/profiles.php:337
+msgid "Marital Status"
 msgstr ""
 
-#: mod/admin.php:311
-msgid "Delete entry from blocklist?"
+#: mod/profiles.php:341
+msgid "Romantic Partner"
 msgstr ""
 
-#: mod/admin.php:336
-msgid "Server added to blocklist."
+#: mod/profiles.php:353
+msgid "Work/Employment"
 msgstr ""
 
-#: mod/admin.php:352
-msgid "Site blocklist updated."
+#: mod/profiles.php:356
+msgid "Religion"
 msgstr ""
 
-#: mod/admin.php:375
-msgid "Delete this Item"
+#: mod/profiles.php:360
+msgid "Political Views"
 msgstr ""
 
-#: mod/admin.php:376
-msgid ""
-"On this page you can delete an item from your node. If the item is a top "
-"level posting, the entire thread will be deleted."
+#: mod/profiles.php:364
+msgid "Gender"
 msgstr ""
 
-#: mod/admin.php:377
-msgid ""
-"You need to know the GUID of the item. You can find it e.g. by looking at "
-"the display URL. The last part of http://example.com/display/123456 is the "
-"GUID, here 123456."
+#: mod/profiles.php:368
+msgid "Sexual Preference"
 msgstr ""
 
-#: mod/admin.php:378
-msgid "GUID"
+#: mod/profiles.php:372
+msgid "XMPP"
 msgstr ""
 
-#: mod/admin.php:378
-msgid "The GUID of the item you want to delete."
+#: mod/profiles.php:376
+msgid "Homepage"
 msgstr ""
 
-#: mod/admin.php:415
-msgid "Item marked for deletion."
+#: mod/profiles.php:380 mod/profiles.php:699
+msgid "Interests"
 msgstr ""
 
-#: mod/admin.php:478
-msgid "unknown"
+#: mod/profiles.php:384
+msgid "Address"
 msgstr ""
 
-#: mod/admin.php:541
-msgid ""
-"This page offers you some numbers to the known part of the federated social "
-"network your Friendica node is part of. These numbers are not complete but "
-"only reflect the part of the network your node is aware of."
+#: mod/profiles.php:391 mod/profiles.php:695
+msgid "Location"
 msgstr ""
 
-#: mod/admin.php:542
-msgid ""
-"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
-"will improve the data displayed here."
+#: mod/profiles.php:476
+msgid "Profile updated."
 msgstr ""
 
-#: mod/admin.php:554
-#, php-format
-msgid "Currently this node is aware of %d nodes from the following platforms:"
+#: mod/profiles.php:568
+msgid " and "
 msgstr ""
 
-#: mod/admin.php:584
-msgid "ID"
+#: mod/profiles.php:577
+msgid "public profile"
 msgstr ""
 
-#: mod/admin.php:585
-msgid "Recipient Name"
+#: mod/profiles.php:580
+#, php-format
+msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
 msgstr ""
 
-#: mod/admin.php:586
-msgid "Recipient Profile"
+#: mod/profiles.php:581
+#, php-format
+msgid " - Visit %1$s's %2$s"
 msgstr ""
 
-#: mod/admin.php:588
-msgid "Created"
+#: mod/profiles.php:583
+#, php-format
+msgid "%1$s has an updated %2$s, changing %3$s."
 msgstr ""
 
-#: mod/admin.php:589
-msgid "Last Tried"
+#: mod/profiles.php:641
+msgid "Hide contacts and friends:"
 msgstr ""
 
-#: mod/admin.php:590
-msgid ""
-"This page lists the content of the queue for outgoing postings. These are "
-"postings the initial delivery failed for. They will be resend later and "
-"eventually deleted if the delivery fails permanently."
+#: mod/profiles.php:646
+msgid "Hide your contact/friend list from viewers of this profile?"
 msgstr ""
 
-#: mod/admin.php:615
-#, php-format
-msgid ""
-"Your DB still runs with MyISAM tables. You should change the engine type to "
-"InnoDB. As Friendica will use InnoDB only features in the future, you should "
-"change this! See <a href=\"%s\">here</a> for a guide that may be helpful "
-"converting the table engines. You may also use the command <tt>php include/"
-"dbstructure.php toinnodb</tt> of your Friendica installation for an "
-"automatic conversion.<br />"
+#: mod/profiles.php:671
+msgid "Show more profile fields:"
 msgstr ""
 
-#: mod/admin.php:624
-msgid ""
-"The database update failed. Please run \"php include/dbstructure.php update"
-"\" from the command line and have a look at the errors that might appear."
+#: mod/profiles.php:683
+msgid "Profile Actions"
 msgstr ""
 
-#: mod/admin.php:629 mod/admin.php:1537
-msgid "Normal Account"
+#: mod/profiles.php:684
+msgid "Edit Profile Details"
 msgstr ""
 
-#: mod/admin.php:630 mod/admin.php:1538
-msgid "Automatic Follower Account"
+#: mod/profiles.php:686
+msgid "Change Profile Photo"
 msgstr ""
 
-#: mod/admin.php:631 mod/admin.php:1539
-msgid "Public Forum Account"
+#: mod/profiles.php:687
+msgid "View this profile"
 msgstr ""
 
-#: mod/admin.php:632 mod/admin.php:1540
-msgid "Automatic Friend Account"
+#: mod/profiles.php:689
+msgid "Create a new profile using these settings"
 msgstr ""
 
-#: mod/admin.php:633
-msgid "Blog Account"
+#: mod/profiles.php:690
+msgid "Clone this profile"
 msgstr ""
 
-#: mod/admin.php:634
-msgid "Private Forum Account"
+#: mod/profiles.php:691
+msgid "Delete this profile"
 msgstr ""
 
-#: mod/admin.php:656
-msgid "Message queues"
+#: mod/profiles.php:693
+msgid "Basic information"
 msgstr ""
 
-#: mod/admin.php:662
-msgid "Summary"
+#: mod/profiles.php:694
+msgid "Profile picture"
 msgstr ""
 
-#: mod/admin.php:664
-msgid "Registered users"
+#: mod/profiles.php:696
+msgid "Preferences"
 msgstr ""
 
-#: mod/admin.php:666
-msgid "Pending registrations"
+#: mod/profiles.php:697
+msgid "Status information"
 msgstr ""
 
-#: mod/admin.php:667
-msgid "Version"
+#: mod/profiles.php:698
+msgid "Additional information"
 msgstr ""
 
-#: mod/admin.php:672
-msgid "Active plugins"
+#: mod/profiles.php:701
+msgid "Relation"
 msgstr ""
 
-#: mod/admin.php:697
-msgid "Can not parse base url. Must have at least <scheme>://<domain>"
+#: mod/profiles.php:705
+msgid "Your Gender:"
 msgstr ""
 
-#: mod/admin.php:1004
-msgid "Site settings updated."
+#: mod/profiles.php:706
+msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
 msgstr ""
 
-#: mod/admin.php:1061
-msgid "No community page"
+#: mod/profiles.php:708
+msgid "Example: fishing photography software"
 msgstr ""
 
-#: mod/admin.php:1062
-msgid "Public postings from users of this site"
+#: mod/profiles.php:713
+msgid "Profile Name:"
 msgstr ""
 
-#: mod/admin.php:1063
-msgid "Global community page"
+#: mod/profiles.php:715
+msgid ""
+"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
+"be visible to anybody using the internet."
 msgstr ""
 
-#: mod/admin.php:1069
-msgid "At post arrival"
+#: mod/profiles.php:716
+msgid "Your Full Name:"
 msgstr ""
 
-#: mod/admin.php:1079
-msgid "Users, Global Contacts"
+#: mod/profiles.php:717
+msgid "Title/Description:"
 msgstr ""
 
-#: mod/admin.php:1080
-msgid "Users, Global Contacts/fallback"
+#: mod/profiles.php:720
+msgid "Street Address:"
 msgstr ""
 
-#: mod/admin.php:1084
-msgid "One month"
+#: mod/profiles.php:721
+msgid "Locality/City:"
 msgstr ""
 
-#: mod/admin.php:1085
-msgid "Three months"
+#: mod/profiles.php:722
+msgid "Region/State:"
 msgstr ""
 
-#: mod/admin.php:1086
-msgid "Half a year"
+#: mod/profiles.php:723
+msgid "Postal/Zip Code:"
 msgstr ""
-
-#: mod/admin.php:1087
-msgid "One year"
+
+#: mod/profiles.php:724
+msgid "Country:"
 msgstr ""
 
-#: mod/admin.php:1092
-msgid "Multi user instance"
+#: mod/profiles.php:728
+msgid "Who: (if applicable)"
 msgstr ""
 
-#: mod/admin.php:1115
-msgid "Closed"
+#: mod/profiles.php:728
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
 msgstr ""
 
-#: mod/admin.php:1116
-msgid "Requires approval"
+#: mod/profiles.php:729
+msgid "Since [date]:"
 msgstr ""
 
-#: mod/admin.php:1117
-msgid "Open"
+#: mod/profiles.php:731
+msgid "Tell us about yourself..."
 msgstr ""
 
-#: mod/admin.php:1121
-msgid "No SSL policy, links will track page SSL state"
+#: mod/profiles.php:732
+msgid "XMPP (Jabber) address:"
 msgstr ""
 
-#: mod/admin.php:1122
-msgid "Force all links to use SSL"
+#: mod/profiles.php:732
+msgid ""
+"The XMPP address will be propagated to your contacts so that they can follow "
+"you."
 msgstr ""
 
-#: mod/admin.php:1123
-msgid "Self-signed certificate, use SSL for local links only (discouraged)"
+#: mod/profiles.php:733
+msgid "Homepage URL:"
 msgstr ""
 
-#: mod/admin.php:1147
-msgid "File upload"
+#: mod/profiles.php:736
+msgid "Religious Views:"
 msgstr ""
 
-#: mod/admin.php:1148
-msgid "Policies"
+#: mod/profiles.php:737
+msgid "Public Keywords:"
 msgstr ""
 
-#: mod/admin.php:1150
-msgid "Auto Discovered Contact Directory"
+#: mod/profiles.php:737
+msgid "(Used for suggesting potential friends, can be seen by others)"
 msgstr ""
 
-#: mod/admin.php:1151
-msgid "Performance"
+#: mod/profiles.php:738
+msgid "Private Keywords:"
 msgstr ""
 
-#: mod/admin.php:1152
-msgid "Worker"
+#: mod/profiles.php:738
+msgid "(Used for searching profiles, never shown to others)"
 msgstr ""
 
-#: mod/admin.php:1153
-msgid ""
-"Relocate - WARNING: advanced function. Could make this server unreachable."
+#: mod/profiles.php:741
+msgid "Musical interests"
 msgstr ""
 
-#: mod/admin.php:1156
-msgid "Site name"
+#: mod/profiles.php:742
+msgid "Books, literature"
 msgstr ""
 
-#: mod/admin.php:1157
-msgid "Host name"
+#: mod/profiles.php:743
+msgid "Television"
 msgstr ""
 
-#: mod/admin.php:1158
-msgid "Sender Email"
+#: mod/profiles.php:744
+msgid "Film/dance/culture/entertainment"
 msgstr ""
 
-#: mod/admin.php:1158
-msgid ""
-"The email address your server shall use to send notification emails from."
+#: mod/profiles.php:745
+msgid "Hobbies/Interests"
 msgstr ""
 
-#: mod/admin.php:1159
-msgid "Banner/Logo"
+#: mod/profiles.php:746
+msgid "Love/romance"
 msgstr ""
 
-#: mod/admin.php:1160
-msgid "Shortcut icon"
+#: mod/profiles.php:747
+msgid "Work/employment"
 msgstr ""
 
-#: mod/admin.php:1160
-msgid "Link to an icon that will be used for browsers."
+#: mod/profiles.php:748
+msgid "School/education"
 msgstr ""
 
-#: mod/admin.php:1161
-msgid "Touch icon"
+#: mod/profiles.php:749
+msgid "Contact information and Social Networks"
 msgstr ""
 
-#: mod/admin.php:1161
-msgid "Link to an icon that will be used for tablets and mobiles."
+#: mod/profiles.php:790
+msgid "Edit/Manage Profiles"
 msgstr ""
 
-#: mod/admin.php:1162
-msgid "Additional Info"
+#: mod/register.php:97
+msgid ""
+"Registration successful. Please check your email for further instructions."
 msgstr ""
 
-#: mod/admin.php:1162
+#: mod/register.php:102
 #, php-format
 msgid ""
-"For public servers: you can add additional information here that will be "
-"listed at %s/siteinfo."
+"Failed to send email message. Here your accout details:<br> login: %s<br> "
+"password: %s<br><br>You can change your password after login."
 msgstr ""
 
-#: mod/admin.php:1163
-msgid "System language"
+#: mod/register.php:109
+msgid "Registration successful."
 msgstr ""
 
-#: mod/admin.php:1164
-msgid "System theme"
+#: mod/register.php:115
+msgid "Your registration can not be processed."
 msgstr ""
 
-#: mod/admin.php:1164
+#: mod/register.php:164
+msgid "Your registration is pending approval by the site owner."
+msgstr ""
+
+#: mod/register.php:230
 msgid ""
-"Default system theme - may be over-ridden by user profiles - <a href='#' "
-"id='cnftheme'>change theme settings</a>"
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
 msgstr ""
 
-#: mod/admin.php:1165
-msgid "Mobile system theme"
+#: mod/register.php:231
+msgid ""
+"If you are not familiar with OpenID, please leave that field blank and fill "
+"in the rest of the items."
 msgstr ""
 
-#: mod/admin.php:1165
-msgid "Theme for mobile devices"
+#: mod/register.php:232
+msgid "Your OpenID (optional): "
 msgstr ""
 
-#: mod/admin.php:1166
-msgid "SSL link policy"
+#: mod/register.php:246
+msgid "Include your profile in member directory?"
 msgstr ""
 
-#: mod/admin.php:1166
-msgid "Determines whether generated links should be forced to use SSL"
+#: mod/register.php:271
+msgid "Note for the admin"
 msgstr ""
 
-#: mod/admin.php:1167
-msgid "Force SSL"
+#: mod/register.php:271
+msgid "Leave a message for the admin, why you want to join this node"
 msgstr ""
 
-#: mod/admin.php:1167
-msgid ""
-"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
-"to endless loops."
+#: mod/register.php:272
+msgid "Membership on this site is by invitation only."
 msgstr ""
 
-#: mod/admin.php:1168
-msgid "Hide help entry from navigation menu"
+#: mod/register.php:273
+msgid "Your invitation ID: "
 msgstr ""
 
-#: mod/admin.php:1168
-msgid ""
-"Hides the menu entry for the Help pages from the navigation menu. You can "
-"still access it calling /help directly."
+#: mod/register.php:284
+msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
 msgstr ""
 
-#: mod/admin.php:1169
-msgid "Single user instance"
+#: mod/register.php:285
+msgid "Your Email Address: "
 msgstr ""
 
-#: mod/admin.php:1169
-msgid "Make this instance multi-user or single-user for the named user"
+#: mod/register.php:287 mod/settings.php:1280
+msgid "New Password:"
 msgstr ""
 
-#: mod/admin.php:1170
-msgid "Maximum image size"
+#: mod/register.php:287
+msgid "Leave empty for an auto generated password."
 msgstr ""
 
-#: mod/admin.php:1170
+#: mod/register.php:288 mod/settings.php:1281
+msgid "Confirm:"
+msgstr ""
+
+#: mod/register.php:289
 msgid ""
-"Maximum size in bytes of uploaded images. Default is 0, which means no "
-"limits."
+"Choose a profile nickname. This must begin with a text character. Your "
+"profile address on this site will then be '<strong>nickname@$sitename</"
+"strong>'."
 msgstr ""
 
-#: mod/admin.php:1171
-msgid "Maximum image length"
+#: mod/register.php:290
+msgid "Choose a nickname: "
 msgstr ""
 
-#: mod/admin.php:1171
-msgid ""
-"Maximum length in pixels of the longest side of uploaded images. Default is "
-"-1, which means no limits."
+#: mod/register.php:300
+msgid "Import your profile to this friendica instance"
 msgstr ""
 
-#: mod/admin.php:1172
-msgid "JPEG image quality"
+#: mod/regmod.php:61
+msgid "Account approved."
 msgstr ""
 
-#: mod/admin.php:1172
-msgid ""
-"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
-"100, which is full quality."
+#: mod/regmod.php:89
+#, php-format
+msgid "Registration revoked for %s"
 msgstr ""
 
-#: mod/admin.php:1174
-msgid "Register policy"
+#: mod/regmod.php:101
+msgid "Please login."
 msgstr ""
 
-#: mod/admin.php:1175
-msgid "Maximum Daily Registrations"
+#: mod/removeme.php:55 mod/removeme.php:58
+msgid "Remove My Account"
 msgstr ""
 
-#: mod/admin.php:1175
+#: mod/removeme.php:56
 msgid ""
-"If registration is permitted above, this sets the maximum number of new user "
-"registrations to accept per day.  If register is set to closed, this setting "
-"has no effect."
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
 msgstr ""
 
-#: mod/admin.php:1176
-msgid "Register text"
+#: mod/removeme.php:57
+msgid "Please enter your password for verification:"
 msgstr ""
 
-#: mod/admin.php:1176
-msgid "Will be displayed prominently on the registration page."
+#: mod/repair_ostatus.php:17
+msgid "Resubscribing to OStatus contacts"
 msgstr ""
 
-#: mod/admin.php:1177
-msgid "Accounts abandoned after x days"
+#: mod/repair_ostatus.php:33
+msgid "Error"
 msgstr ""
 
-#: mod/admin.php:1177
-msgid ""
-"Will not waste system resources polling external sites for abandonded "
-"accounts. Enter 0 for no time limit."
+#: mod/settings.php:63
+msgid "Display"
 msgstr ""
 
-#: mod/admin.php:1178
-msgid "Allowed friend domains"
+#: mod/settings.php:70 mod/settings.php:892
+msgid "Social Networks"
 msgstr ""
 
-#: mod/admin.php:1178
-msgid ""
-"Comma separated list of domains which are allowed to establish friendships "
-"with this site. Wildcards are accepted. Empty to allow any domains"
+#: mod/settings.php:91
+msgid "Connected apps"
 msgstr ""
 
-#: mod/admin.php:1179
-msgid "Allowed email domains"
+#: mod/settings.php:98 mod/uexport.php:47
+msgid "Export personal data"
 msgstr ""
 
-#: mod/admin.php:1179
-msgid ""
-"Comma separated list of domains which are allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains"
+#: mod/settings.php:105
+msgid "Remove account"
 msgstr ""
 
-#: mod/admin.php:1180
-msgid "Block public"
+#: mod/settings.php:160
+msgid "Missing some important data!"
 msgstr ""
 
-#: mod/admin.php:1180
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently logged in."
+#: mod/settings.php:274
+msgid "Failed to connect with email account using the settings provided."
 msgstr ""
 
-#: mod/admin.php:1181
-msgid "Force publish"
+#: mod/settings.php:279
+msgid "Email settings updated."
 msgstr ""
 
-#: mod/admin.php:1181
-msgid ""
-"Check to force all profiles on this site to be listed in the site directory."
+#: mod/settings.php:294
+msgid "Features updated"
 msgstr ""
 
-#: mod/admin.php:1182
-msgid "Global directory URL"
+#: mod/settings.php:364
+msgid "Relocate message has been send to your contacts"
 msgstr ""
 
-#: mod/admin.php:1182
-msgid ""
-"URL to the global directory. If this is not set, the global directory is "
-"completely unavailable to the application."
+#: mod/settings.php:383
+msgid "Empty passwords are not allowed. Password unchanged."
 msgstr ""
 
-#: mod/admin.php:1183
-msgid "Allow threaded items"
+#: mod/settings.php:391
+msgid "Wrong password."
 msgstr ""
 
-#: mod/admin.php:1183
-msgid "Allow infinite level threading for items on this site."
+#: mod/settings.php:402
+msgid "Password changed."
 msgstr ""
 
-#: mod/admin.php:1184
-msgid "Private posts by default for new users"
+#: mod/settings.php:404
+msgid "Password update failed. Please try again."
 msgstr ""
 
-#: mod/admin.php:1184
-msgid ""
-"Set default post permissions for all new members to the default privacy "
-"group rather than public."
+#: mod/settings.php:484
+msgid " Please use a shorter name."
+msgstr ""
+
+#: mod/settings.php:486
+msgid " Name too short."
 msgstr ""
 
-#: mod/admin.php:1185
-msgid "Don't include post content in email notifications"
+#: mod/settings.php:495
+msgid "Wrong Password"
 msgstr ""
 
-#: mod/admin.php:1185
-msgid ""
-"Don't include the content of a post/comment/private message/etc. in the "
-"email notifications that are sent out from this site, as a privacy measure."
+#: mod/settings.php:500
+msgid " Not valid email."
 msgstr ""
 
-#: mod/admin.php:1186
-msgid "Disallow public access to addons listed in the apps menu."
+#: mod/settings.php:506
+msgid " Cannot change to that email."
 msgstr ""
 
-#: mod/admin.php:1186
-msgid ""
-"Checking this box will restrict addons listed in the apps menu to members "
-"only."
+#: mod/settings.php:562
+msgid "Private forum has no privacy permissions. Using default privacy group."
 msgstr ""
 
-#: mod/admin.php:1187
-msgid "Don't embed private images in posts"
+#: mod/settings.php:566
+msgid "Private forum has no privacy permissions and no default privacy group."
 msgstr ""
 
-#: mod/admin.php:1187
-msgid ""
-"Don't replace locally-hosted private photos in posts with an embedded copy "
-"of the image. This means that contacts who receive posts containing private "
-"photos will have to authenticate and load each image, which may take a while."
+#: mod/settings.php:606
+msgid "Settings updated."
 msgstr ""
 
-#: mod/admin.php:1188
-msgid "Allow Users to set remote_self"
+#: mod/settings.php:682 mod/settings.php:708 mod/settings.php:744
+msgid "Add application"
 msgstr ""
 
-#: mod/admin.php:1188
-msgid ""
-"With checking this, every user is allowed to mark every contact as a "
-"remote_self in the repair contact dialog. Setting this flag on a contact "
-"causes mirroring every posting of that contact in the users stream."
+#: mod/settings.php:686 mod/settings.php:712
+msgid "Consumer Key"
 msgstr ""
 
-#: mod/admin.php:1189
-msgid "Block multiple registrations"
+#: mod/settings.php:687 mod/settings.php:713
+msgid "Consumer Secret"
 msgstr ""
 
-#: mod/admin.php:1189
-msgid "Disallow users to register additional accounts for use as pages."
+#: mod/settings.php:688 mod/settings.php:714
+msgid "Redirect"
 msgstr ""
 
-#: mod/admin.php:1190
-msgid "OpenID support"
+#: mod/settings.php:689 mod/settings.php:715
+msgid "Icon url"
 msgstr ""
 
-#: mod/admin.php:1190
-msgid "OpenID support for registration and logins."
+#: mod/settings.php:700
+msgid "You can't edit this application."
 msgstr ""
 
-#: mod/admin.php:1191
-msgid "Fullname check"
+#: mod/settings.php:743
+msgid "Connected Apps"
 msgstr ""
 
-#: mod/admin.php:1191
-msgid ""
-"Force users to register with a space between firstname and lastname in Full "
-"name, as an antispam measure"
+#: mod/settings.php:747
+msgid "Client key starts with"
 msgstr ""
 
-#: mod/admin.php:1192
-msgid "Community Page Style"
+#: mod/settings.php:748
+msgid "No name"
 msgstr ""
 
-#: mod/admin.php:1192
-msgid ""
-"Type of community page to show. 'Global community' shows every public "
-"posting from an open distributed network that arrived on this server."
+#: mod/settings.php:749
+msgid "Remove authorization"
 msgstr ""
 
-#: mod/admin.php:1193
-msgid "Posts per user on community page"
+#: mod/settings.php:761
+msgid "No Plugin settings configured"
 msgstr ""
 
-#: mod/admin.php:1193
-msgid ""
-"The maximum number of posts per user on the community page. (Not valid for "
-"'Global Community')"
+#: mod/settings.php:770
+msgid "Plugin Settings"
 msgstr ""
 
-#: mod/admin.php:1194
-msgid "Enable OStatus support"
+#: mod/settings.php:792
+msgid "Additional Features"
 msgstr ""
 
-#: mod/admin.php:1194
-msgid ""
-"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
-"communications in OStatus are public, so privacy warnings will be "
-"occasionally displayed."
+#: mod/settings.php:802 mod/settings.php:806
+msgid "General Social Media Settings"
 msgstr ""
 
-#: mod/admin.php:1195
-msgid "OStatus conversation completion interval"
+#: mod/settings.php:812
+msgid "Disable intelligent shortening"
 msgstr ""
 
-#: mod/admin.php:1195
+#: mod/settings.php:814
 msgid ""
-"How often shall the poller check for new entries in OStatus conversations? "
-"This can be a very ressource task."
+"Normally the system tries to find the best link to add to shortened posts. "
+"If this option is enabled then every shortened post will always point to the "
+"original friendica post."
 msgstr ""
 
-#: mod/admin.php:1196
-msgid "Only import OStatus threads from our contacts"
+#: mod/settings.php:820
+msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
 msgstr ""
 
-#: mod/admin.php:1196
+#: mod/settings.php:822
 msgid ""
-"Normally we import every content from our OStatus contacts. With this option "
-"we only store threads that are started by a contact that is known on our "
-"system."
+"If you receive a message from an unknown OStatus user, this option decides "
+"what to do. If it is checked, a new contact will be created for every "
+"unknown user."
 msgstr ""
 
-#: mod/admin.php:1197
-msgid "OStatus support can only be enabled if threading is enabled."
+#: mod/settings.php:828
+msgid "Default group for OStatus contacts"
 msgstr ""
 
-#: mod/admin.php:1199
-msgid ""
-"Diaspora support can't be enabled because Friendica was installed into a sub "
-"directory."
+#: mod/settings.php:836
+msgid "Your legacy GNU Social account"
 msgstr ""
 
-#: mod/admin.php:1200
-msgid "Enable Diaspora support"
+#: mod/settings.php:838
+msgid ""
+"If you enter your old GNU Social/Statusnet account name here (in the format "
+"user@domain.tld), your contacts will be added automatically. The field will "
+"be emptied when done."
 msgstr ""
 
-#: mod/admin.php:1200
-msgid "Provide built-in Diaspora network compatibility."
+#: mod/settings.php:841
+msgid "Repair OStatus subscriptions"
 msgstr ""
 
-#: mod/admin.php:1201
-msgid "Only allow Friendica contacts"
+#: mod/settings.php:850 mod/settings.php:851
+#, php-format
+msgid "Built-in support for %s connectivity is %s"
 msgstr ""
 
-#: mod/admin.php:1201
-msgid ""
-"All contacts must use Friendica protocols. All other built-in communication "
-"protocols disabled."
+#: mod/settings.php:850 mod/settings.php:851
+msgid "enabled"
 msgstr ""
 
-#: mod/admin.php:1202
-msgid "Verify SSL"
+#: mod/settings.php:850 mod/settings.php:851
+msgid "disabled"
 msgstr ""
 
-#: mod/admin.php:1202
-msgid ""
-"If you wish, you can turn on strict certificate checking. This will mean you "
-"cannot connect (at all) to self-signed SSL sites."
+#: mod/settings.php:851
+msgid "GNU Social (OStatus)"
 msgstr ""
 
-#: mod/admin.php:1203
-msgid "Proxy user"
+#: mod/settings.php:885
+msgid "Email access is disabled on this site."
 msgstr ""
 
-#: mod/admin.php:1204
-msgid "Proxy URL"
+#: mod/settings.php:897
+msgid "Email/Mailbox Setup"
 msgstr ""
 
-#: mod/admin.php:1205
-msgid "Network timeout"
+#: mod/settings.php:898
+msgid ""
+"If you wish to communicate with email contacts using this service "
+"(optional), please specify how to connect to your mailbox."
 msgstr ""
 
-#: mod/admin.php:1205
-msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
+#: mod/settings.php:899
+msgid "Last successful email check:"
 msgstr ""
 
-#: mod/admin.php:1206
-msgid "Maximum Load Average"
+#: mod/settings.php:901
+msgid "IMAP server name:"
 msgstr ""
 
-#: mod/admin.php:1206
-msgid ""
-"Maximum system load before delivery and poll processes are deferred - "
-"default 50."
+#: mod/settings.php:902
+msgid "IMAP port:"
 msgstr ""
 
-#: mod/admin.php:1207
-msgid "Maximum Load Average (Frontend)"
+#: mod/settings.php:903
+msgid "Security:"
 msgstr ""
 
-#: mod/admin.php:1207
-msgid "Maximum system load before the frontend quits service - default 50."
+#: mod/settings.php:903 mod/settings.php:908
+msgid "None"
 msgstr ""
 
-#: mod/admin.php:1208
-msgid "Minimal Memory"
+#: mod/settings.php:904
+msgid "Email login name:"
 msgstr ""
 
-#: mod/admin.php:1208
-msgid ""
-"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - "
-"default 0 (deactivated)."
+#: mod/settings.php:905
+msgid "Email password:"
 msgstr ""
 
-#: mod/admin.php:1209
-msgid "Maximum table size for optimization"
+#: mod/settings.php:906
+msgid "Reply-to address:"
 msgstr ""
 
-#: mod/admin.php:1209
-msgid ""
-"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
-"Enter -1 to disable it."
+#: mod/settings.php:907
+msgid "Send public posts to all email contacts:"
 msgstr ""
 
-#: mod/admin.php:1210
-msgid "Minimum level of fragmentation"
+#: mod/settings.php:908
+msgid "Action after import:"
 msgstr ""
 
-#: mod/admin.php:1210
-msgid ""
-"Minimum fragmenation level to start the automatic optimization - default "
-"value is 30%."
+#: mod/settings.php:908
+msgid "Move to folder"
 msgstr ""
 
-#: mod/admin.php:1212
-msgid "Periodical check of global contacts"
+#: mod/settings.php:909
+msgid "Move to folder:"
 msgstr ""
 
-#: mod/admin.php:1212
-msgid ""
-"If enabled, the global contacts are checked periodically for missing or "
-"outdated data and the vitality of the contacts and servers."
+#: mod/settings.php:1005
+msgid "Display Settings"
 msgstr ""
 
-#: mod/admin.php:1213
-msgid "Days between requery"
+#: mod/settings.php:1011 mod/settings.php:1034
+msgid "Display Theme:"
 msgstr ""
 
-#: mod/admin.php:1213
-msgid "Number of days after which a server is requeried for his contacts."
+#: mod/settings.php:1012
+msgid "Mobile Theme:"
 msgstr ""
 
-#: mod/admin.php:1214
-msgid "Discover contacts from other servers"
+#: mod/settings.php:1013
+msgid "Suppress warning of insecure networks"
 msgstr ""
 
-#: mod/admin.php:1214
+#: mod/settings.php:1013
 msgid ""
-"Periodically query other servers for contacts. You can choose between "
-"'users': the users on the remote system, 'Global Contacts': active contacts "
-"that are known on the system. The fallback is meant for Redmatrix servers "
-"and older friendica servers, where global contacts weren't available. The "
-"fallback increases the server load, so the recommened setting is 'Users, "
-"Global Contacts'."
+"Should the system suppress the warning that the current group contains "
+"members of networks that can't receive non public postings."
 msgstr ""
 
-#: mod/admin.php:1215
-msgid "Timeframe for fetching global contacts"
+#: mod/settings.php:1014
+msgid "Update browser every xx seconds"
 msgstr ""
 
-#: mod/admin.php:1215
-msgid ""
-"When the discovery is activated, this value defines the timeframe for the "
-"activity of the global contacts that are fetched from other servers."
+#: mod/settings.php:1014
+msgid "Minimum of 10 seconds. Enter -1 to disable it."
 msgstr ""
 
-#: mod/admin.php:1216
-msgid "Search the local directory"
+#: mod/settings.php:1015
+msgid "Number of items to display per page:"
 msgstr ""
 
-#: mod/admin.php:1216
-msgid ""
-"Search the local directory instead of the global directory. When searching "
-"locally, every search will be executed on the global directory in the "
-"background. This improves the search results when the search is repeated."
+#: mod/settings.php:1015 mod/settings.php:1016
+msgid "Maximum of 100 items"
 msgstr ""
 
-#: mod/admin.php:1218
-msgid "Publish server information"
+#: mod/settings.php:1016
+msgid "Number of items to display per page when viewed from mobile device:"
+msgstr ""
+
+#: mod/settings.php:1017
+msgid "Don't show emoticons"
+msgstr ""
+
+#: mod/settings.php:1018
+msgid "Calendar"
 msgstr ""
 
-#: mod/admin.php:1218
-msgid ""
-"If enabled, general server and usage data will be published. The data "
-"contains the name and version of the server, number of users with public "
-"profiles, number of posts and the activated protocols and connectors. See <a "
-"href='http://the-federation.info/'>the-federation.info</a> for details."
+#: mod/settings.php:1019
+msgid "Beginning of week:"
 msgstr ""
 
-#: mod/admin.php:1220
-msgid "Suppress Tags"
+#: mod/settings.php:1020
+msgid "Don't show notices"
 msgstr ""
 
-#: mod/admin.php:1220
-msgid "Suppress showing a list of hashtags at the end of the posting."
+#: mod/settings.php:1021
+msgid "Infinite scroll"
 msgstr ""
 
-#: mod/admin.php:1221
-msgid "Path to item cache"
+#: mod/settings.php:1022
+msgid "Automatic updates only at the top of the network page"
 msgstr ""
 
-#: mod/admin.php:1221
-msgid "The item caches buffers generated bbcode and external images."
+#: mod/settings.php:1022
+msgid ""
+"When disabled, the network page is updated all the time, which could be "
+"confusing while reading."
 msgstr ""
 
-#: mod/admin.php:1222
-msgid "Cache duration in seconds"
+#: mod/settings.php:1023
+msgid "Bandwith Saver Mode"
 msgstr ""
 
-#: mod/admin.php:1222
+#: mod/settings.php:1023
 msgid ""
-"How long should the cache files be hold? Default value is 86400 seconds (One "
-"day). To disable the item cache, set the value to -1."
+"When enabled, embedded content is not displayed on automatic updates, they "
+"only show on page reload."
 msgstr ""
 
-#: mod/admin.php:1223
-msgid "Maximum numbers of comments per post"
+#: mod/settings.php:1025
+msgid "General Theme Settings"
 msgstr ""
 
-#: mod/admin.php:1223
-msgid "How much comments should be shown for each post? Default value is 100."
+#: mod/settings.php:1026
+msgid "Custom Theme Settings"
 msgstr ""
 
-#: mod/admin.php:1224
-msgid "Temp path"
+#: mod/settings.php:1027
+msgid "Content Settings"
 msgstr ""
 
-#: mod/admin.php:1224
-msgid ""
-"If you have a restricted system where the webserver can't access the system "
-"temp path, enter another path here."
+#: mod/settings.php:1028 view/theme/duepuntozero/config.php:67
+#: view/theme/frio/config.php:70 view/theme/quattro/config.php:73
+#: view/theme/vier/config.php:116
+msgid "Theme settings"
 msgstr ""
 
-#: mod/admin.php:1225
-msgid "Base path to installation"
+#: mod/settings.php:1112
+msgid "Account Types"
 msgstr ""
 
-#: mod/admin.php:1225
-msgid ""
-"If the system cannot detect the correct path to your installation, enter the "
-"correct path here. This setting should only be set if you are using a "
-"restricted system and symbolic links to your webroot."
+#: mod/settings.php:1113
+msgid "Personal Page Subtypes"
 msgstr ""
 
-#: mod/admin.php:1226
-msgid "Disable picture proxy"
+#: mod/settings.php:1114
+msgid "Community Forum Subtypes"
 msgstr ""
 
-#: mod/admin.php:1226
-msgid ""
-"The picture proxy increases performance and privacy. It shouldn't be used on "
-"systems with very low bandwith."
+#: mod/settings.php:1121
+msgid "Personal Page"
 msgstr ""
 
-#: mod/admin.php:1227
-msgid "Only search in tags"
+#: mod/settings.php:1122
+msgid "Account for a personal profile."
 msgstr ""
 
-#: mod/admin.php:1227
-msgid "On large systems the text search can slow down the system extremely."
+#: mod/settings.php:1125
+msgid "Organisation Page"
 msgstr ""
 
-#: mod/admin.php:1229
-msgid "New base url"
+#: mod/settings.php:1126
+msgid ""
+"Account for an organisation that automatically approves contact requests as "
+"\"Followers\"."
 msgstr ""
 
-#: mod/admin.php:1229
+#: mod/settings.php:1129
+msgid "News Page"
+msgstr ""
+
+#: mod/settings.php:1130
 msgid ""
-"Change base url for this server. Sends relocate message to all DFRN contacts "
-"of all users."
+"Account for a news reflector that automatically approves contact requests as "
+"\"Followers\"."
 msgstr ""
 
-#: mod/admin.php:1231
-msgid "RINO Encryption"
+#: mod/settings.php:1133
+msgid "Community Forum"
 msgstr ""
 
-#: mod/admin.php:1231
-msgid "Encryption layer between nodes."
+#: mod/settings.php:1134
+msgid "Account for community discussions."
 msgstr ""
 
-#: mod/admin.php:1233
-msgid "Maximum number of parallel workers"
+#: mod/settings.php:1137
+msgid "Normal Account Page"
 msgstr ""
 
-#: mod/admin.php:1233
+#: mod/settings.php:1138
 msgid ""
-"On shared hosters set this to 2. On larger systems, values of 10 are great. "
-"Default value is 4."
+"Account for a regular personal profile that requires manual approval of "
+"\"Friends\" and \"Followers\"."
 msgstr ""
 
-#: mod/admin.php:1234
-msgid "Don't use 'proc_open' with the worker"
+#: mod/settings.php:1141
+msgid "Soapbox Page"
 msgstr ""
 
-#: mod/admin.php:1234
+#: mod/settings.php:1142
 msgid ""
-"Enable this if your system doesn't allow the use of 'proc_open'. This can "
-"happen on shared hosters. If this is enabled you should increase the "
-"frequency of poller calls in your crontab."
+"Account for a public profile that automatically approves contact requests as "
+"\"Followers\"."
 msgstr ""
 
-#: mod/admin.php:1235
-msgid "Enable fastlane"
+#: mod/settings.php:1145
+msgid "Public Forum"
 msgstr ""
 
-#: mod/admin.php:1235
-msgid ""
-"When enabed, the fastlane mechanism starts an additional worker if processes "
-"with higher priority are blocked by processes of lower priority."
+#: mod/settings.php:1146
+msgid "Automatically approves all contact requests."
 msgstr ""
 
-#: mod/admin.php:1236
-msgid "Enable frontend worker"
+#: mod/settings.php:1149
+msgid "Automatic Friend Page"
 msgstr ""
 
-#: mod/admin.php:1236
-#, php-format
+#: mod/settings.php:1150
 msgid ""
-"When enabled the Worker process is triggered when backend access is "
-"performed (e.g. messages being delivered). On smaller sites you might want "
-"to call %s/worker on a regular basis via an external cron job. You should "
-"only enable this option if you cannot utilize cron/scheduled jobs on your "
-"server."
+"Account for a popular profile that automatically approves contact requests "
+"as \"Friends\"."
 msgstr ""
 
-#: mod/admin.php:1266
-msgid "Update has been marked successful"
+#: mod/settings.php:1153
+msgid "Private Forum [Experimental]"
 msgstr ""
 
-#: mod/admin.php:1274
-#, php-format
-msgid "Database structure update %s was successfully applied."
+#: mod/settings.php:1154
+msgid "Requires manual approval of contact requests."
 msgstr ""
 
-#: mod/admin.php:1277
-#, php-format
-msgid "Executing of database structure update %s failed with error: %s"
+#: mod/settings.php:1165
+msgid "OpenID:"
 msgstr ""
 
-#: mod/admin.php:1291
-#, php-format
-msgid "Executing %s failed with error: %s"
+#: mod/settings.php:1165
+msgid "(Optional) Allow this OpenID to login to this account."
 msgstr ""
 
-#: mod/admin.php:1294
-#, php-format
-msgid "Update %s was successfully applied."
+#: mod/settings.php:1173
+msgid "Publish your default profile in your local site directory?"
 msgstr ""
 
-#: mod/admin.php:1297
-#, php-format
-msgid "Update %s did not return a status. Unknown if it succeeded."
+#: mod/settings.php:1173
+msgid "Your profile may be visible in public."
 msgstr ""
 
-#: mod/admin.php:1300
-#, php-format
-msgid "There was no additional update function %s that needed to be called."
+#: mod/settings.php:1179
+msgid "Publish your default profile in the global social directory?"
 msgstr ""
 
-#: mod/admin.php:1320
-msgid "No failed updates."
+#: mod/settings.php:1186
+msgid "Hide your contact/friend list from viewers of your default profile?"
 msgstr ""
 
-#: mod/admin.php:1321
-msgid "Check database structure"
+#: mod/settings.php:1190
+msgid ""
+"If enabled, posting public messages to Diaspora and other networks isn't "
+"possible."
 msgstr ""
 
-#: mod/admin.php:1326
-msgid "Failed Updates"
+#: mod/settings.php:1195
+msgid "Allow friends to post to your profile page?"
 msgstr ""
 
-#: mod/admin.php:1327
-msgid ""
-"This does not include updates prior to 1139, which did not return a status."
+#: mod/settings.php:1200
+msgid "Allow friends to tag your posts?"
 msgstr ""
 
-#: mod/admin.php:1328
-msgid "Mark success (if update was manually applied)"
+#: mod/settings.php:1205
+msgid "Allow us to suggest you as a potential friend to new members?"
 msgstr ""
 
-#: mod/admin.php:1329
-msgid "Attempt to execute this update step automatically"
+#: mod/settings.php:1210
+msgid "Permit unknown people to send you private mail?"
 msgstr ""
 
-#: mod/admin.php:1363
-#, php-format
-msgid ""
-"\n"
-"\t\t\tDear %1$s,\n"
-"\t\t\t\tthe administrator of %2$s has set up an account for you."
+#: mod/settings.php:1218
+msgid "Profile is <strong>not published</strong>."
 msgstr ""
 
-#: mod/admin.php:1366
+#: mod/settings.php:1226
 #, php-format
-msgid ""
-"\n"
-"\t\t\tThe login details are as follows:\n"
-"\n"
-"\t\t\tSite Location:\t%1$s\n"
-"\t\t\tLogin Name:\t\t%2$s\n"
-"\t\t\tPassword:\t\t%3$s\n"
-"\n"
-"\t\t\tYou may change your password from your account \"Settings\" page after "
-"logging\n"
-"\t\t\tin.\n"
-"\n"
-"\t\t\tPlease take a few moments to review the other account settings on that "
-"page.\n"
-"\n"
-"\t\t\tYou may also wish to add some basic information to your default "
-"profile\n"
-"\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
-"\n"
-"\t\t\tWe recommend setting your full name, adding a profile photo,\n"
-"\t\t\tadding some profile \"keywords\" (very useful in making new friends) - "
-"and\n"
-"\t\t\tperhaps what country you live in; if you do not wish to be more "
-"specific\n"
-"\t\t\tthan that.\n"
-"\n"
-"\t\t\tWe fully respect your right to privacy, and none of these items are "
-"necessary.\n"
-"\t\t\tIf you are new and do not know anybody here, they may help\n"
-"\t\t\tyou to make some new and interesting friends.\n"
-"\n"
-"\t\t\tThank you and welcome to %4$s."
+msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
 msgstr ""
 
-#: mod/admin.php:1410
-#, php-format
-msgid "%s user blocked/unblocked"
-msgid_plural "%s users blocked/unblocked"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/admin.php:1417
-#, php-format
-msgid "%s user deleted"
-msgid_plural "%s users deleted"
-msgstr[0] ""
-msgstr[1] ""
+#: mod/settings.php:1233
+msgid "Automatically expire posts after this many days:"
+msgstr ""
 
-#: mod/admin.php:1464
-#, php-format
-msgid "User '%s' deleted"
+#: mod/settings.php:1233
+msgid "If empty, posts will not expire. Expired posts will be deleted"
 msgstr ""
 
-#: mod/admin.php:1472
-#, php-format
-msgid "User '%s' unblocked"
+#: mod/settings.php:1234
+msgid "Advanced expiration settings"
 msgstr ""
 
-#: mod/admin.php:1472
-#, php-format
-msgid "User '%s' blocked"
+#: mod/settings.php:1235
+msgid "Advanced Expiration"
 msgstr ""
 
-#: mod/admin.php:1580 mod/admin.php:1606
-msgid "Register date"
+#: mod/settings.php:1236
+msgid "Expire posts:"
 msgstr ""
 
-#: mod/admin.php:1580 mod/admin.php:1606
-msgid "Last login"
+#: mod/settings.php:1237
+msgid "Expire personal notes:"
 msgstr ""
 
-#: mod/admin.php:1580 mod/admin.php:1606
-msgid "Last item"
+#: mod/settings.php:1238
+msgid "Expire starred posts:"
 msgstr ""
 
-#: mod/admin.php:1589
-msgid "Add User"
+#: mod/settings.php:1239
+msgid "Expire photos:"
 msgstr ""
 
-#: mod/admin.php:1590
-msgid "select all"
+#: mod/settings.php:1240
+msgid "Only expire posts by others:"
 msgstr ""
 
-#: mod/admin.php:1591
-msgid "User registrations waiting for confirm"
+#: mod/settings.php:1271
+msgid "Account Settings"
 msgstr ""
 
-#: mod/admin.php:1592
-msgid "User waiting for permanent deletion"
+#: mod/settings.php:1279
+msgid "Password Settings"
 msgstr ""
 
-#: mod/admin.php:1593
-msgid "Request date"
+#: mod/settings.php:1281
+msgid "Leave password fields blank unless changing"
 msgstr ""
 
-#: mod/admin.php:1594
-msgid "No registrations."
+#: mod/settings.php:1282
+msgid "Current Password:"
 msgstr ""
 
-#: mod/admin.php:1595
-msgid "Note from the user"
+#: mod/settings.php:1282 mod/settings.php:1283
+msgid "Your current password to confirm the changes"
 msgstr ""
 
-#: mod/admin.php:1597
-msgid "Deny"
+#: mod/settings.php:1283
+msgid "Password:"
 msgstr ""
 
-#: mod/admin.php:1601
-msgid "Site admin"
+#: mod/settings.php:1287
+msgid "Basic Settings"
 msgstr ""
 
-#: mod/admin.php:1602
-msgid "Account expired"
+#: mod/settings.php:1289
+msgid "Email Address:"
 msgstr ""
 
-#: mod/admin.php:1605
-msgid "New User"
+#: mod/settings.php:1290
+msgid "Your Timezone:"
 msgstr ""
 
-#: mod/admin.php:1606
-msgid "Deleted since"
+#: mod/settings.php:1291
+msgid "Your Language:"
 msgstr ""
 
-#: mod/admin.php:1611
+#: mod/settings.php:1291
 msgid ""
-"Selected users will be deleted!\\n\\nEverything these users had posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
+"Set the language we use to show you friendica interface and to send you "
+"emails"
 msgstr ""
 
-#: mod/admin.php:1612
-msgid ""
-"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
-"site will be permanently deleted!\\n\\nAre you sure?"
+#: mod/settings.php:1292
+msgid "Default Post Location:"
 msgstr ""
 
-#: mod/admin.php:1622
-msgid "Name of the new user."
+#: mod/settings.php:1293
+msgid "Use Browser Location:"
 msgstr ""
 
-#: mod/admin.php:1623
-msgid "Nickname"
+#: mod/settings.php:1296
+msgid "Security and Privacy Settings"
 msgstr ""
 
-#: mod/admin.php:1623
-msgid "Nickname of the new user."
+#: mod/settings.php:1298
+msgid "Maximum Friend Requests/Day:"
 msgstr ""
 
-#: mod/admin.php:1624
-msgid "Email address of the new user."
+#: mod/settings.php:1298 mod/settings.php:1328
+msgid "(to prevent spam abuse)"
 msgstr ""
 
-#: mod/admin.php:1667
-#, php-format
-msgid "Plugin %s disabled."
+#: mod/settings.php:1299
+msgid "Default Post Permissions"
 msgstr ""
 
-#: mod/admin.php:1671
-#, php-format
-msgid "Plugin %s enabled."
+#: mod/settings.php:1300
+msgid "(click to open/close)"
 msgstr ""
 
-#: mod/admin.php:1682 mod/admin.php:1934
-msgid "Disable"
+#: mod/settings.php:1311
+msgid "Default Private Post"
 msgstr ""
 
-#: mod/admin.php:1684 mod/admin.php:1936
-msgid "Enable"
+#: mod/settings.php:1312
+msgid "Default Public Post"
 msgstr ""
 
-#: mod/admin.php:1707 mod/admin.php:1983
-msgid "Toggle"
+#: mod/settings.php:1316
+msgid "Default Permissions for New Posts"
 msgstr ""
 
-#: mod/admin.php:1715 mod/admin.php:1992
-msgid "Author: "
+#: mod/settings.php:1328
+msgid "Maximum private messages per day from unknown people:"
 msgstr ""
 
-#: mod/admin.php:1716 mod/admin.php:1993
-msgid "Maintainer: "
+#: mod/settings.php:1331
+msgid "Notification Settings"
 msgstr ""
 
-#: mod/admin.php:1771
-msgid "Reload active plugins"
+#: mod/settings.php:1332
+msgid "By default post a status message when:"
 msgstr ""
 
-#: mod/admin.php:1776
-#, php-format
-msgid ""
-"There are currently no plugins available on your node. You can find the "
-"official plugin repository at %1$s and might find other interesting plugins "
-"in the open plugin registry at %2$s"
+#: mod/settings.php:1333
+msgid "accepting a friend request"
 msgstr ""
 
-#: mod/admin.php:1895
-msgid "No themes found."
+#: mod/settings.php:1334
+msgid "joining a forum/community"
 msgstr ""
 
-#: mod/admin.php:1974
-msgid "Screenshot"
+#: mod/settings.php:1335
+msgid "making an <em>interesting</em> profile change"
 msgstr ""
 
-#: mod/admin.php:2034
-msgid "Reload active themes"
+#: mod/settings.php:1336
+msgid "Send a notification email when:"
 msgstr ""
 
-#: mod/admin.php:2039
-#, php-format
-msgid "No themes found on the system. They should be paced in %1$s"
+#: mod/settings.php:1337
+msgid "You receive an introduction"
 msgstr ""
 
-#: mod/admin.php:2040
-msgid "[Experimental]"
+#: mod/settings.php:1338
+msgid "Your introductions are confirmed"
 msgstr ""
 
-#: mod/admin.php:2041
-msgid "[Unsupported]"
+#: mod/settings.php:1339
+msgid "Someone writes on your profile wall"
 msgstr ""
 
-#: mod/admin.php:2065
-msgid "Log settings updated."
+#: mod/settings.php:1340
+msgid "Someone writes a followup comment"
 msgstr ""
 
-#: mod/admin.php:2097
-msgid "PHP log currently enabled."
+#: mod/settings.php:1341
+msgid "You receive a private message"
 msgstr ""
 
-#: mod/admin.php:2099
-msgid "PHP log currently disabled."
+#: mod/settings.php:1342
+msgid "You receive a friend suggestion"
 msgstr ""
 
-#: mod/admin.php:2108
-msgid "Clear"
+#: mod/settings.php:1343
+msgid "You are tagged in a post"
 msgstr ""
 
-#: mod/admin.php:2113
-msgid "Enable Debugging"
+#: mod/settings.php:1344
+msgid "You are poked/prodded/etc. in a post"
 msgstr ""
 
-#: mod/admin.php:2114
-msgid "Log file"
+#: mod/settings.php:1346
+msgid "Activate desktop notifications"
 msgstr ""
 
-#: mod/admin.php:2114
-msgid ""
-"Must be writable by web server. Relative to your Friendica top-level "
-"directory."
+#: mod/settings.php:1346
+msgid "Show desktop popup on new notifications"
 msgstr ""
 
-#: mod/admin.php:2115
-msgid "Log level"
+#: mod/settings.php:1348
+msgid "Text-only notification emails"
 msgstr ""
 
-#: mod/admin.php:2118
-msgid "PHP logging"
+#: mod/settings.php:1350
+msgid "Send text only notification emails, without the html part"
 msgstr ""
 
-#: mod/admin.php:2119
-msgid ""
-"To enable logging of PHP errors and warnings you can add the following to "
-"the .htconfig.php file of your installation. The filename set in the "
-"'error_log' line is relative to the friendica top-level directory and must "
-"be writeable by the web server. The option '1' for 'log_errors' and "
-"'display_errors' is to enable these options, set to '0' to disable them."
+#: mod/settings.php:1352
+msgid "Advanced Account/Page Type Settings"
 msgstr ""
 
-#: mod/admin.php:2250
-#, php-format
-msgid "Lock feature %s"
+#: mod/settings.php:1353
+msgid "Change the behaviour of this account for special situations"
 msgstr ""
 
-#: mod/admin.php:2258
-msgid "Manage Additional Features"
+#: mod/settings.php:1356
+msgid "Relocate"
 msgstr ""
 
-#: mod/community.php:22
-msgid "Not available."
+#: mod/settings.php:1357
+msgid ""
+"If you have moved this profile from another server, and some of your "
+"contacts don't receive your updates, try pushing this button."
 msgstr ""
 
-#: mod/dfrn_poll.php:113 mod/dfrn_poll.php:549
-#, php-format
-msgid "%1$s welcomes %2$s"
+#: mod/settings.php:1358
+msgid "Resend relocate message to contacts"
 msgstr ""
 
-#: mod/display.php:493
-msgid "Item has been removed."
+#: mod/subthread.php:106
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
 msgstr ""
 
-#: mod/item.php:118
-msgid "Unable to locate original post."
+#: mod/suggest.php:30
+msgid "Do you really want to delete this suggestion?"
 msgstr ""
 
-#: mod/item.php:345
-msgid "Empty post discarded."
+#: mod/suggest.php:74
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
 msgstr ""
 
-#: mod/item.php:899
-msgid "System error. Post not saved."
+#: mod/suggest.php:87 mod/suggest.php:107
+msgid "Ignore/Hide"
 msgstr ""
 
-#: mod/item.php:990
-#, php-format
-msgid ""
-"This message was sent to you by %s, a member of the Friendica social network."
+#: mod/tagrm.php:46
+msgid "Tag removed"
 msgstr ""
 
-#: mod/item.php:992
-#, php-format
-msgid "You may visit them online at %s"
+#: mod/tagrm.php:85
+msgid "Remove Item Tag"
 msgstr ""
 
-#: mod/item.php:993
-msgid ""
-"Please contact the sender by replying to this post if you do not wish to "
-"receive these messages."
+#: mod/tagrm.php:87
+msgid "Select a tag to remove: "
 msgstr ""
 
-#: mod/item.php:997
-#, php-format
-msgid "%s posted an update."
+#: mod/uexport.php:39
+msgid "Export account"
 msgstr ""
 
-#: mod/network.php:419
-#, php-format
+#: mod/uexport.php:39
 msgid ""
-"Warning: This group contains %s member from a network that doesn't allow non "
-"public messages."
-msgid_plural ""
-"Warning: This group contains %s members from a network that doesn't allow "
-"non public messages."
-msgstr[0] ""
-msgstr[1] ""
+"Export your account info and contacts. Use this to make a backup of your "
+"account and/or to move it to another server."
+msgstr ""
 
-#: mod/network.php:422
-msgid "Messages in this group won't be send to these receivers."
+#: mod/uexport.php:40
+msgid "Export all"
 msgstr ""
 
-#: mod/network.php:550
-msgid "Private messages to this person are at risk of public disclosure."
+#: mod/uexport.php:40
+msgid ""
+"Export your accout info, contacts and all your items as json. Could be a "
+"very big file, and could take a lot of time. Use this to make a full backup "
+"of your account (photos are not exported)"
 msgstr ""
 
-#: mod/network.php:555
-msgid "Invalid contact."
+#: mod/unfollow.php:33
+msgid "Contact wasn't found or can't be unfollowed."
 msgstr ""
 
-#: mod/network.php:848
-msgid "Commented Order"
+#: mod/unfollow.php:47
+msgid "Contact unfollowed"
 msgstr ""
 
-#: mod/network.php:851
-msgid "Sort by Comment Date"
+#: mod/unfollow.php:73
+msgid "You aren't a friend of this contact."
 msgstr ""
 
-#: mod/network.php:856
-msgid "Posted Order"
+#: mod/unfollow.php:79
+msgid "Unfollowing is currently not supported by your network."
 msgstr ""
 
-#: mod/network.php:859
-msgid "Sort by Post Date"
+#: mod/videos.php:127
+msgid "Do you really want to delete this video?"
 msgstr ""
 
-#: mod/network.php:870
-msgid "Posts that mention or involve you"
+#: mod/videos.php:132
+msgid "Delete Video"
 msgstr ""
 
-#: mod/network.php:878
-msgid "New"
+#: mod/videos.php:211
+msgid "No videos selected"
 msgstr ""
 
-#: mod/network.php:881
-msgid "Activity Stream - by date"
+#: mod/videos.php:405
+msgid "Recent Videos"
 msgstr ""
 
-#: mod/network.php:889
-msgid "Shared Links"
+#: mod/videos.php:407
+msgid "Upload New Videos"
 msgstr ""
 
-#: mod/network.php:892
-msgid "Interesting Links"
+#: mod/wallmessage.php:45 mod/wallmessage.php:109
+#, php-format
+msgid "Number of daily wall messages for %s exceeded. Message failed."
 msgstr ""
 
-#: mod/network.php:900
-msgid "Starred"
+#: mod/wallmessage.php:56
+msgid "Unable to check your home location."
 msgstr ""
 
-#: mod/network.php:903
-msgid "Favourite Posts"
+#: mod/wallmessage.php:83 mod/wallmessage.php:92
+msgid "No recipient."
 msgstr ""
 
-#: mod/profile.php:176
-msgid "Tips for New Members"
+#: mod/wallmessage.php:130
+#, php-format
+msgid ""
+"If you wish for %s to respond, please check that the privacy settings on "
+"your site allow private mail from unknown senders."
 msgstr ""
 
-#: object/Item.php:355
+#: object/Item.php:348
 msgid "via"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:47
+#: view/theme/duepuntozero/config.php:48
 msgid "greenzero"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:48
+#: view/theme/duepuntozero/config.php:49
 msgid "purplezero"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:49
+#: view/theme/duepuntozero/config.php:50
 msgid "easterbunny"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:50
+#: view/theme/duepuntozero/config.php:51
 msgid "darkzero"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:51
+#: view/theme/duepuntozero/config.php:52
 msgid "comix"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:52
+#: view/theme/duepuntozero/config.php:53
 msgid "slackr"
 msgstr ""
 
-#: view/theme/duepuntozero/config.php:67
+#: view/theme/duepuntozero/config.php:68
 msgid "Variations"
 msgstr ""
 
@@ -8850,167 +8873,167 @@ msgstr ""
 msgid "Resize to best fit and retain aspect ratio."
 msgstr ""
 
-#: view/theme/frio/config.php:50
+#: view/theme/frio/config.php:51
 msgid "Default"
 msgstr ""
 
-#: view/theme/frio/config.php:62
+#: view/theme/frio/config.php:63
 msgid "Note: "
 msgstr ""
 
-#: view/theme/frio/config.php:62
+#: view/theme/frio/config.php:63
 msgid "Check image permissions if all users are allowed to visit the image"
 msgstr ""
 
-#: view/theme/frio/config.php:70
+#: view/theme/frio/config.php:71
 msgid "Select scheme"
 msgstr ""
 
-#: view/theme/frio/config.php:71
+#: view/theme/frio/config.php:72
 msgid "Navigation bar background color"
 msgstr ""
 
-#: view/theme/frio/config.php:72
+#: view/theme/frio/config.php:73
 msgid "Navigation bar icon color "
 msgstr ""
 
-#: view/theme/frio/config.php:73
+#: view/theme/frio/config.php:74
 msgid "Link color"
 msgstr ""
 
-#: view/theme/frio/config.php:74
+#: view/theme/frio/config.php:75
 msgid "Set the background color"
 msgstr ""
 
-#: view/theme/frio/config.php:75
+#: view/theme/frio/config.php:76
 msgid "Content background transparency"
 msgstr ""
 
-#: view/theme/frio/config.php:76
+#: view/theme/frio/config.php:77
 msgid "Set the background image"
 msgstr ""
 
-#: view/theme/frio/theme.php:230
+#: view/theme/frio/theme.php:231
 msgid "Guest"
 msgstr ""
 
-#: view/theme/frio/theme.php:236
+#: view/theme/frio/theme.php:237
 msgid "Visitor"
 msgstr ""
 
-#: view/theme/quattro/config.php:73
+#: view/theme/quattro/config.php:74
 msgid "Alignment"
 msgstr ""
 
-#: view/theme/quattro/config.php:73
+#: view/theme/quattro/config.php:74
 msgid "Left"
 msgstr ""
 
-#: view/theme/quattro/config.php:73
+#: view/theme/quattro/config.php:74
 msgid "Center"
 msgstr ""
 
-#: view/theme/quattro/config.php:74
+#: view/theme/quattro/config.php:75
 msgid "Color scheme"
 msgstr ""
 
-#: view/theme/quattro/config.php:75
+#: view/theme/quattro/config.php:76
 msgid "Posts font size"
 msgstr ""
 
-#: view/theme/quattro/config.php:76
+#: view/theme/quattro/config.php:77
 msgid "Textareas font size"
 msgstr ""
 
-#: view/theme/vier/config.php:70
+#: view/theme/vier/config.php:71
 msgid "Comma separated list of helper forums"
 msgstr ""
 
-#: view/theme/vier/config.php:116
+#: view/theme/vier/config.php:117
 msgid "Set style"
 msgstr ""
 
-#: view/theme/vier/config.php:117
+#: view/theme/vier/config.php:118
 msgid "Community Pages"
 msgstr ""
 
-#: view/theme/vier/config.php:118 view/theme/vier/theme.php:143
+#: view/theme/vier/config.php:119 view/theme/vier/theme.php:144
 msgid "Community Profiles"
 msgstr ""
 
-#: view/theme/vier/config.php:119
+#: view/theme/vier/config.php:120
 msgid "Help or @NewHere ?"
 msgstr ""
 
-#: view/theme/vier/config.php:120 view/theme/vier/theme.php:384
+#: view/theme/vier/config.php:121 view/theme/vier/theme.php:385
 msgid "Connect Services"
 msgstr ""
 
-#: view/theme/vier/config.php:121 view/theme/vier/theme.php:191
+#: view/theme/vier/config.php:122 view/theme/vier/theme.php:192
 msgid "Find Friends"
 msgstr ""
 
-#: view/theme/vier/config.php:122 view/theme/vier/theme.php:173
+#: view/theme/vier/config.php:123 view/theme/vier/theme.php:174
 msgid "Last users"
 msgstr ""
 
-#: view/theme/vier/theme.php:192
+#: view/theme/vier/theme.php:193
 msgid "Local Directory"
 msgstr ""
 
-#: view/theme/vier/theme.php:284
+#: view/theme/vier/theme.php:285
 msgid "Quick Start"
 msgstr ""
 
-#: src/App.php:527
+#: src/App.php:523
 msgid "Delete this item?"
 msgstr ""
 
-#: src/App.php:529
+#: src/App.php:525
 msgid "show fewer"
 msgstr ""
 
-#: boot.php:735
+#: boot.php:724
 #, php-format
 msgid "Update %s failed. See error logs."
 msgstr ""
 
-#: boot.php:847
+#: boot.php:836
 msgid "Create a New Account"
 msgstr ""
 
-#: boot.php:875
+#: boot.php:864
 msgid "Password: "
 msgstr ""
 
-#: boot.php:876
+#: boot.php:865
 msgid "Remember me"
 msgstr ""
 
-#: boot.php:879
+#: boot.php:868
 msgid "Or login using OpenID: "
 msgstr ""
 
-#: boot.php:885
+#: boot.php:874
 msgid "Forgot your password?"
 msgstr ""
 
-#: boot.php:888
+#: boot.php:877
 msgid "Website Terms of Service"
 msgstr ""
 
-#: boot.php:889
+#: boot.php:878
 msgid "terms of service"
 msgstr ""
 
-#: boot.php:891
+#: boot.php:880
 msgid "Website Privacy Policy"
 msgstr ""
 
-#: boot.php:892
+#: boot.php:881
 msgid "privacy policy"
 msgstr ""
 
-#: index.php:436
+#: index.php:437
 msgid "toggle mobile"
 msgstr ""
index e4aba94aa3eac91fa45f2aeb9670d95a75ed2503..28a7ed58aae521a7a5acb212e578449eb4654064 100644 (file)
@@ -7,7 +7,7 @@
                {{foreach $saved as $search}}
                <li role="menuitem" class="saved-search-li clear">
                        <a title="{{$search.delete}}" onclick="return confirmDelete();" id="drop-saved-search-term-{{$search.id}}" class="iconspacer savedsearchdrop " href="network/?f=&amp;remove=1&amp;search={{$search.encodedterm}}"></a>
-                       <a id="saved-search-term-{{$search.id}}" class="savedsearchterm" href="network/?f=&amp;search={{$search.encodedterm}}">{{$search.term}}</a>
+                       <a id="saved-search-term-{{$search.id}}" class="savedsearchterm" href="search?search={{$search.encodedterm}}">{{$search.term}}</a>
                </li>
                {{/foreach}}
        </ul>
index da4cd1541a3083225495f24aa760f200b861b952..fea9794ad53a1352f9c0edcde234a6442d33ccc2 100644 (file)
@@ -7,7 +7,7 @@
                {{foreach $saved as $search}}
                <li role="menuitem" class="saved-search-li clear">
                        <a title="{{$search.delete}}" onclick="return confirmDelete();" id="drop-saved-search-term-{{$search.id}}" class="savedsearchdrop pull-right" href="network/?f=&amp;remove=1&amp;search={{$search.encodedterm}}"><i class="fa fa-trash" aria-hidden="true"></i></a>
-                       <a id="saved-search-term-{{$search.id}}" class="savedsearchterm" href="network/?f=&amp;search={{$search.encodedterm}}">{{$search.term}}</a>
+                       <a id="saved-search-term-{{$search.id}}" class="savedsearchterm" href="search?search={{$search.encodedterm}}">{{$search.term}}</a>
                </li>
                {{/foreach}}
        </ul>
index 007d1d956e850d5d0541d766f3f24530318b523f..c310d98ca7fa0396dd2a898eb2b0c455ecc2e861 100644 (file)
@@ -4,7 +4,7 @@
        <ul id="saved-search-ul">
                {{foreach $saved as $search}}
                        <li class="tool {{if $search.selected}}selected{{/if}}">
-                                       <a href="network/?f=&search={{$search.encodedterm}}" class="label" >{{$search.term}}</a>
+                                       <a href="search?search={{$search.encodedterm}}" class="label" >{{$search.term}}</a>
                                        <a href="network/?f=&remove=1&search={{$search.encodedterm}}" class="action icon s10 delete" title="{{$search.delete}}" onclick="return confirmDelete();"></a>
                        </li>
                {{/foreach}}