]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #3380 from fabrixxm/feature/frio/fixedaside2
authorrabuzarus <rabuzarus@t-online.de>
Tue, 16 May 2017 15:31:06 +0000 (17:31 +0200)
committerGitHub <noreply@github.com>
Tue, 16 May 2017 15:31:06 +0000 (17:31 +0200)
Frio: better UX for aside bar

355 files changed:
boot.php
composer.lock
database.sql
doc/Composer.md
doc/Developer-How-To-Move-Classes-to-src.md [new file with mode: 0644]
doc/Developers-Intro.md
doc/Home.md
doc/Install.md
doc/Settings.md
doc/api.md
doc/autoloader.md
doc/database.md
doc/database/db_conversation.md [new file with mode: 0644]
doc/de/Install.md
doc/de/Settings.md
include/Contact.php
include/Emailer.php
include/ForumManager.php
include/NotificationsManager.php
include/Photo.php
include/Probe.php [deleted file]
include/Scrape.php [deleted file]
include/Smilies.php
include/acl_selectors.php
include/api.php
include/auth.php
include/auth_ejabberd.php
include/bb2diaspora.php
include/bbcode.php
include/cache.php
include/cli_startup.php
include/config.php
include/contact_widgets.php
include/conversation.php
include/create_shadowentry.php
include/cron.php
include/cronhooks.php
include/cronjobs.php
include/datetime.php
include/dba.php
include/dba_pdo.php
include/dbclean.php
include/dbm.php
include/dbstructure.php
include/dbupdate.php
include/delivery.php
include/dfrn.php
include/diaspora.php
include/directory.php
include/discover_poco.php
include/enotify.php
include/event.php
include/expire.php
include/feed.php
include/files.php
include/follow.php
include/gprobe.php
include/html2bbcode.php
include/html2plain.php
include/identity.php
include/items.php
include/like.php
include/lock.php
include/message.php
include/msgclean.php
include/nav.php
include/network.php
include/notifier.php
include/oauth.php
include/oembed.php
include/onepoll.php
include/ostatus.php
include/pgettext.php
include/photos.php
include/pidfile.php
include/plaintext.php
include/plugin.php
include/poller.php
include/post_update.php
include/probe.php [new file with mode: 0644]
include/pubsubpublish.php
include/queue.php
include/quoteconvert.php
include/redir.php
include/remove_contact.php
include/salmon.php
include/security.php
include/shadowupdate.php
include/socgraph.php
include/spool_post.php
include/tags.php
include/text.php
include/threads.php
include/uimport.php
include/update_gcontact.php
include/user.php
index.php
js/autocomplete.js
mod/_well_known.php
mod/acctlink.php
mod/acl.php
mod/admin.php
mod/allfriends.php
mod/amcd.php
mod/api.php
mod/apps.php
mod/attach.php
mod/babel.php
mod/bookmarklet.php
mod/cal.php
mod/cb.php
mod/common.php
mod/community.php
mod/contactgroup.php
mod/contacts.php
mod/content.php
mod/credits.php
mod/crepair.php
mod/delegate.php
mod/dfrn_confirm.php
mod/dfrn_notify.php
mod/dfrn_poll.php
mod/dfrn_request.php
mod/directory.php
mod/dirfind.php
mod/display.php
mod/editpost.php
mod/events.php
mod/fbrowser.php
mod/fetch.php
mod/filer.php
mod/filerm.php
mod/follow.php
mod/friendica.php
mod/fsuggest.php
mod/group.php
mod/hcard.php
mod/help.php
mod/home.php
mod/hostxrd.php
mod/hovercard.php
mod/ignored.php
mod/install.php
mod/invite.php
mod/item.php
mod/like.php
mod/localtime.php
mod/lockview.php
mod/login.php
mod/lostpass.php
mod/maintenance.php
mod/manage.php
mod/manifest.php
mod/match.php
mod/message.php
mod/modexp.php
mod/mood.php
mod/msearch.php
mod/navigation.php
mod/network.php
mod/newmember.php
mod/nodeinfo.php
mod/nogroup.php
mod/noscrape.php
mod/notes.php
mod/notice.php
mod/notifications.php
mod/notify.php
mod/oembed.php
mod/oexchange.php
mod/openid.php
mod/opensearch.php
mod/ostatus_subscribe.php
mod/p.php
mod/parse_url.php
mod/photo.php
mod/photos.php
mod/ping.php
mod/poco.php
mod/poke.php
mod/post.php
mod/pretheme.php
mod/probe.php
mod/profile.php
mod/profile_photo.php
mod/profiles.php
mod/profperm.php
mod/proxy.php
mod/pubsub.php
mod/pubsubhubbub.php
mod/qsearch.php
mod/randprof.php
mod/receive.php
mod/redir.php
mod/register.php
mod/regmod.php
mod/removeme.php
mod/repair_ostatus.php
mod/robots_txt.php [new file with mode: 0644]
mod/rsd_xml.php
mod/salmon.php
mod/search.php
mod/session.php
mod/settings.php
mod/share.php
mod/smilies.php
mod/starred.php
mod/statistics_json.php
mod/subthread.php
mod/suggest.php
mod/tagger.php
mod/tagrm.php
mod/toggle_mobile.php
mod/uexport.php
mod/uimport.php
mod/update_community.php
mod/update_display.php
mod/update_network.php
mod/update_notes.php
mod/update_profile.php
mod/videos.php
mod/viewcontacts.php
mod/viewsrc.php
mod/wall_attach.php
mod/wall_upload.php
mod/wallmessage.php
mod/webfinger.php
mod/worker.php
mod/xrd.php
object/BaseObject.php
object/Conversation.php
object/Item.php
src/App.php [new file with mode: 0644]
src/Network/Probe.php [new file with mode: 0644]
src/ParseUrl.php
tests/xss_filter_test.php
update.php
util/createdoxygen.php
util/credits.txt
util/daemon.php
util/db_update.php
util/maintenance.php
util/messages.po
util/php2po.php
util/typo.php [changed mode: 0644->0755]
vendor/composer/autoload_classmap.php
vendor/composer/autoload_static.php
vendor/composer/include_paths.php
vendor/composer/installed.json
vendor/pear-pear.php.net/PEAR/OS/Guess.php
vendor/pear-pear.php.net/PEAR/PEAR.php
vendor/pear-pear.php.net/PEAR/PEAR/Builder.php
vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile.php
vendor/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php
vendor/pear-pear.php.net/PEAR/PEAR/Command.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Auth.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Build.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Channels.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Common.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Config.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Install.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Package.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Registry.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Remote.php
vendor/pear-pear.php.net/PEAR/PEAR/Command/Test.php
vendor/pear-pear.php.net/PEAR/PEAR/Common.php
vendor/pear-pear.php.net/PEAR/PEAR/Config.php
vendor/pear-pear.php.net/PEAR/PEAR/Dependency2.php
vendor/pear-pear.php.net/PEAR/PEAR/DependencyDB.php
vendor/pear-pear.php.net/PEAR/PEAR/Downloader.php
vendor/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php
vendor/pear-pear.php.net/PEAR/PEAR/ErrorStack.php
vendor/pear-pear.php.net/PEAR/PEAR/Exception.php
vendor/pear-pear.php.net/PEAR/PEAR/Frontend.php
vendor/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php
vendor/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php
vendor/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php
vendor/pear-pear.php.net/PEAR/PEAR/Packager.php
vendor/pear-pear.php.net/PEAR/PEAR/REST.php
vendor/pear-pear.php.net/PEAR/PEAR/REST/10.php
vendor/pear-pear.php.net/PEAR/PEAR/REST/11.php
vendor/pear-pear.php.net/PEAR/PEAR/REST/13.php
vendor/pear-pear.php.net/PEAR/PEAR/Registry.php
vendor/pear-pear.php.net/PEAR/PEAR/RunTest.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Common.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php
vendor/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php
vendor/pear-pear.php.net/PEAR/PEAR/Validate.php
vendor/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php
vendor/pear-pear.php.net/PEAR/PEAR/XMLParser.php
vendor/pear-pear.php.net/PEAR/System.php
vendor/pear-pear.php.net/PEAR/pearcmd.php
view/lang/de/messages.po
view/lang/de/strings.php
view/php/default.php
view/php/minimal.php
view/templates/admin_blocklist.tpl [new file with mode: 0644]
view/templates/admin_site.tpl
view/templates/group_drop.tpl
view/templates/groupeditor.tpl
view/templates/intros.tpl
view/theme/duepuntozero/config.php
view/theme/duepuntozero/style.php
view/theme/duepuntozero/theme.php
view/theme/frio/config.php
view/theme/frio/css/style.css
view/theme/frio/js/mod_group.js [new file with mode: 0644]
view/theme/frio/php/default.php
view/theme/frio/php/frio_boot.php
view/theme/frio/php/standard.php
view/theme/frio/templates/admin_aside.tpl [new file with mode: 0644]
view/theme/frio/templates/contact_template.tpl
view/theme/frio/templates/generic_links_widget.tpl [new file with mode: 0644]
view/theme/frio/templates/group_drop.tpl [new file with mode: 0644]
view/theme/frio/templates/group_edit.tpl [new file with mode: 0644]
view/theme/frio/templates/groupeditor.tpl [new file with mode: 0644]
view/theme/frio/templates/intros.tpl
view/theme/frio/templates/nav.tpl
view/theme/frio/theme.php
view/theme/frost-mobile/php/default.php
view/theme/frost-mobile/theme.php
view/theme/frost/php/default.php
view/theme/frost/theme.php
view/theme/quattro/config.php
view/theme/quattro/theme.php
view/theme/smoothly/php/default.php
view/theme/smoothly/theme.php
view/theme/vier/config.php
view/theme/vier/theme.php

index 2ef5853e005e63079267c809897a104509159b2a..e3fb320ac55f6860cc617ecce39911cf8a5b0baf 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -1,4 +1,5 @@
 <?php
+
 /** @file boot.php
  *
  * This file defines some global constants and includes the central App class.
  * easily as email does today.
  */
 
-require_once(__DIR__ . DIRECTORY_SEPARATOR. 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
-require_once('include/config.php');
-require_once('include/network.php');
-require_once('include/plugin.php');
-require_once('include/text.php');
-require_once('include/datetime.php');
-require_once('include/pgettext.php');
-require_once('include/nav.php');
-require_once('include/cache.php');
-require_once('include/features.php');
-require_once('include/identity.php');
-require_once('update.php');
-require_once('include/dbstructure.php');
+require_once 'include/config.php';
+require_once 'include/network.php';
+require_once 'include/plugin.php';
+require_once 'include/text.php';
+require_once 'include/datetime.php';
+require_once 'include/pgettext.php';
+require_once 'include/nav.php';
+require_once 'include/cache.php';
+require_once 'include/features.php';
+require_once 'include/identity.php';
+require_once 'update.php';
+require_once 'include/dbstructure.php';
 
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
 define ( 'FRIENDICA_CODENAME',     'Asparagus');
 define ( 'FRIENDICA_VERSION',      '3.5.2-dev' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1220      );
+define ( 'DB_UPDATE_VERSION',      1224      );
 
 /**
  * @brief Constant with a HTML line break.
@@ -50,7 +52,6 @@ define ( 'DB_UPDATE_VERSION',      1220      );
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
 
-
 /**
  * @brief Image storage quality.
  *
@@ -61,8 +62,8 @@ define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
  * below about 50
  *
  */
-
 define ( 'JPEG_QUALITY',            100  );
+
 /**
  * $a->config['system']['png_quality'] from 0 (uncompressed) to 9
  */
@@ -86,12 +87,10 @@ define ( 'PNG_QUALITY',             8  );
  */
 define ( 'MAX_IMAGE_LENGTH',        -1  );
 
-
 /**
  * Not yet used
  */
-
-define ( 'DEFAULT_DB_ENGINE',  'MyISAM'  );
+define ( 'DEFAULT_DB_ENGINE',  'InnoDB' );
 
 /**
  * @name SSL Policy
@@ -165,7 +164,6 @@ define ( 'UPDATE_SUCCESS', 0);
 define ( 'UPDATE_FAILED',  1);
 /** @}*/
 
-
 /**
  * @name page/profile types
  *
@@ -218,6 +216,20 @@ define ( 'CP_USERS_ON_SERVER',     0 );
 define ( 'CP_GLOBAL_COMMUNITY',    1 );
 /** @}*/
 
+/**
+ * @name Protocols
+ *
+ * Different protocols that we are storing
+ * @{
+ */
+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);
+/** @}*/
+
 /**
  * @name Network
  *
@@ -277,20 +289,16 @@ $netgroup_ids = array(
        NETWORK_PHANTOM  => (-127),
 );
 
-
 /**
  * Maximum number of "people who like (or don't like) this"  that we will list by name
  */
-
 define ( 'MAX_LIKERS',    75);
 
 /**
  * Communication timeout
  */
-
 define ( 'ZCURL_TIMEOUT' , (-1));
 
-
 /**
  * @name Notify
  *
@@ -331,8 +339,6 @@ define ( 'TERM_CONVERSATION', 7 );
 define ( 'TERM_OBJ_POST',  1 );
 define ( 'TERM_OBJ_PHOTO', 2 );
 
-
-
 /**
  * @name Namespaces
  *
@@ -354,6 +360,7 @@ define ( 'NAMESPACE_FEED',            'http://schemas.google.com/g/2010#updates-
 define ( 'NAMESPACE_OSTATUS',         'http://ostatus.org/schema/1.0' );
 define ( 'NAMESPACE_STATUSNET',       'http://status.net/schema/api/1/' );
 define ( 'NAMESPACE_ATOM1',           'http://www.w3.org/2005/Atom' );
+define ( 'NAMESPACE_MASTODON',        'http://mastodon.social/schema/1.0' );
 /* @}*/
 
 /**
@@ -443,14 +450,13 @@ define('SR_SCOPE_TAGS', 'tags');
 /**
  * Lowest possible date time value
  */
-
 define ('NULL_DATE', '0001-01-01 00:00:00');
 
-
 // Normally this constant is defined - but not if "pcntl" isn't installed
 if (!defined("SIGTERM")) {
        define("SIGTERM", 15);
 }
+
 /**
  *
  * Reverse the effect of magic_quotes_gpc if it is enabled.
@@ -458,9 +464,7 @@ if (!defined("SIGTERM")) {
  * See http://php.net/manual/en/security.magicquotes.disabling.php
  *
  */
-
 function startup() {
-
        error_reporting(E_ERROR | E_WARNING | E_PARSE);
 
        set_time_limit(0);
@@ -468,7 +472,6 @@ function startup() {
        // This has to be quite large to deal with embedded private photos
        ini_set('pcre.backtrack_limit', 500000);
 
-
        if (get_magic_quotes_gpc()) {
                $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
                while (list($key, $val) = each($process)) {
@@ -484,946 +487,6 @@ function startup() {
                }
                unset($process);
        }
-
-}
-
-/**
- *
- * class: App
- *
- * @brief Our main application structure for the life of this page.
- *
- * Primarily deals with the URL that got us here
- * and tries to make some sense of it, and
- * stores our page contents and config storage
- * and anything else that might need to be passed around
- * before we spit the page out.
- *
- */
-class App {
-
-       /// @TODO decide indending as a colorful mixure is ahead ...
-       public  $module_loaded = false;
-       public  $query_string;
-       public  $config;
-       public  $page;
-       public  $profile;
-       public  $profile_uid;
-       public  $user;
-       public  $cid;
-       public  $contact;
-       public  $contacts;
-       public  $page_contact;
-       public  $content;
-       public  $data = array();
-       public  $error = false;
-       public  $cmd;
-       public  $argv;
-       public  $argc;
-       public  $module;
-       public  $pager;
-       public  $strings;
-       public  $path;
-       public  $hooks;
-       public  $timezone;
-       public  $interactive = true;
-       public  $plugins;
-       public  $apps = array();
-       public  $identities;
-       public  $is_mobile = false;
-       public  $is_tablet = false;
-       public  $is_friendica_app;
-       public  $performance = array();
-       public  $callstack = array();
-       public  $theme_info = array();
-       public  $backend = true;
-
-       public $nav_sel;
-
-       public $category;
-
-
-       // Allow themes to control internal parameters
-       // by changing App values in theme.php
-
-       public  $sourcename = '';
-       public  $videowidth = 425;
-       public  $videoheight = 350;
-       public  $force_max_items = 0;
-       public  $theme_thread_allow = true;
-       public  $theme_events_in_profile = true;
-
-       /**
-        * @brief An array for all theme-controllable parameters
-        *
-        * Mostly unimplemented yet. Only options 'template_engine' and
-        * beyond are used.
-        */
-       public  $theme = array(
-               'sourcename'      => '',
-               'videowidth'      => 425,
-               'videoheight'     => 350,
-               'force_max_items' => 0,
-               'thread_allow'    => true,
-               'stylesheet'      => '',
-               'template_engine' => 'smarty3',
-       );
-
-       /**
-        * @brief An array of registered template engines ('name'=>'class name')
-        */
-       public $template_engines = array();
-       /**
-        * @brief An array of instanced template engines ('name'=>'instance')
-        */
-       public $template_engine_instance = array();
-
-       public $process_id;
-
-       private $ldelim = array(
-               'internal' => '',
-               'smarty3' => '{{'
-       );
-       private $rdelim = array(
-               'internal' => '',
-               'smarty3' => '}}'
-       );
-
-       private $scheme;
-       private $hostname;
-       private $db;
-
-       private $curl_code;
-       private $curl_content_type;
-       private $curl_headers;
-
-       private $cached_profile_image;
-       private $cached_profile_picdate;
-
-       private static $a;
-
-       /**
-        * @brief App constructor.
-        */
-       function __construct() {
-
-               global $default_timezone;
-
-               $hostname = "";
-
-               if (file_exists(".htpreconfig.php")) {
-                       include ".htpreconfig.php";
-               }
-
-               $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
-
-               date_default_timezone_set($this->timezone);
-
-               $this->performance["start"] = microtime(true);
-               $this->performance["database"] = 0;
-               $this->performance["database_write"] = 0;
-               $this->performance["network"] = 0;
-               $this->performance["file"] = 0;
-               $this->performance["rendering"] = 0;
-               $this->performance["parser"] = 0;
-               $this->performance["marktime"] = 0;
-               $this->performance["markstart"] = microtime(true);
-
-               $this->callstack["database"] = array();
-               $this->callstack["database_write"] = array();
-               $this->callstack["network"] = array();
-               $this->callstack["file"] = array();
-               $this->callstack["rendering"] = array();
-               $this->callstack["parser"] = array();
-
-               $this->config = array();
-               $this->page = array();
-               $this->pager= array();
-
-               $this->query_string = '';
-
-               $this->process_id = uniqid("log", true);
-
-               startup();
-
-               set_include_path(
-                               get_include_path() . PATH_SEPARATOR
-                               . 'include' . PATH_SEPARATOR
-                               . 'library' . PATH_SEPARATOR
-                               . 'library/langdet' . PATH_SEPARATOR
-                               . '.' );
-
-               $this->scheme = 'http';
-
-               if ((x($_SERVER, 'HTTPS') && $_SERVER['HTTPS']) ||
-                               (x($_SERVER, 'HTTP_FORWARDED') && preg_match("/proto=https/", $_SERVER['HTTP_FORWARDED'])) ||
-                               (x($_SERVER, 'HTTP_X_FORWARDED_PROTO') && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
-                               (x($_SERVER, 'HTTP_X_FORWARDED_SSL') && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') ||
-                               (x($_SERVER, 'FRONT_END_HTTPS') && $_SERVER['FRONT_END_HTTPS'] == 'on') ||
-                               (x($_SERVER, 'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) // XXX: reasonable assumption, but isn't this hardcoding too much?
-                               ) {
-                       $this->scheme = 'https';
-               }
-
-               if (x($_SERVER, 'SERVER_NAME')) {
-                       $this->hostname = $_SERVER['SERVER_NAME'];
-
-                       if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
-                               $this->hostname .= ':' . $_SERVER['SERVER_PORT'];
-                       }
-                       /*
-                        * Figure out if we are running at the top of a domain
-                        * or in a sub-directory and adjust accordingly
-                        */
-
-                       /// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander)
-                       $path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
-                       if (isset($path) && strlen($path) && ($path != $this->path)) {
-                               $this->path = $path;
-                       }
-               }
-
-               if ($hostname != "") {
-                       $this->hostname = $hostname;
-               }
-
-               if (is_array($_SERVER["argv"]) && $_SERVER["argc"] > 1 && substr(end($_SERVER["argv"]), 0, 4) == "http" ) {
-                       $this->set_baseurl(array_pop($_SERVER["argv"]));
-                       $_SERVER["argc"] --;
-               }
-
-               if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === "pagename=") {
-                       $this->query_string = substr($_SERVER['QUERY_STRING'], 9);
-
-                       // removing trailing / - maybe a nginx problem
-                       $this->query_string = ltrim($this->query_string, '/');
-               } elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === "q=") {
-                       $this->query_string = substr($_SERVER['QUERY_STRING'], 2);
-
-                       // removing trailing / - maybe a nginx problem
-                       $this->query_string = ltrim($this->query_string, '/');
-               }
-
-               if (x($_GET, 'pagename')) {
-                       $this->cmd = trim($_GET['pagename'], '/\\');
-               } elseif (x($_GET, 'q')) {
-                       $this->cmd = trim($_GET['q'], '/\\');
-               }
-
-
-               // fix query_string
-               $this->query_string = str_replace($this->cmd . "&", $this->cmd . "?", $this->query_string);
-
-               // unix style "homedir"
-               if (substr($this->cmd, 0, 1) === '~') {
-                       $this->cmd = 'profile/' . substr($this->cmd, 1);
-               }
-
-               // Diaspora style profile url
-               if (substr($this->cmd, 0, 2) === 'u/') {
-                       $this->cmd = 'profile/' . substr($this->cmd, 2);
-               }
-
-
-               /*
-                * Break the URL path into C style argc/argv style arguments for our
-                * modules. Given "http://example.com/module/arg1/arg2", $this->argc
-                * will be 3 (integer) and $this->argv will contain:
-                *   [0] => 'module'
-                *   [1] => 'arg1'
-                *   [2] => 'arg2'
-                *
-                *
-                * There will always be one argument. If provided a naked domain
-                * URL, $this->argv[0] is set to "home".
-                */
-
-               $this->argv = explode('/', $this->cmd);
-               $this->argc = count($this->argv);
-               if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) {
-                       $this->module = str_replace(".", "_", $this->argv[0]);
-                       $this->module = str_replace("-", "_", $this->module);
-               } else {
-                       $this->argc = 1;
-                       $this->argv = array('home');
-                       $this->module = 'home';
-               }
-
-               /*
-                * See if there is any page number information, and initialise
-                * pagination
-                */
-
-               $this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1);
-               $this->pager['itemspage'] = 50;
-               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
-
-               if ($this->pager['start'] < 0) {
-                       $this->pager['start'] = 0;
-               }
-               $this->pager['total'] = 0;
-
-               /*
-                * Detect mobile devices
-                */
-
-               $mobile_detect = new Mobile_Detect();
-               $this->is_mobile = $mobile_detect->isMobile();
-               $this->is_tablet = $mobile_detect->isTablet();
-
-               // Friendica-Client
-               $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)");
-
-               /*
-                * register template engines
-                */
-               $dc = get_declared_classes();
-               foreach ($dc as $k) {
-                       if (in_array("ITemplateEngine", class_implements($k))){
-                               $this->register_template_engine($k);
-                       }
-               }
-
-               self::$a = $this;
-
-       }
-
-       public static function get_basepath() {
-
-               $basepath = get_config("system", "basepath");
-
-               if ($basepath == "") {
-                       $basepath = dirname(__FILE__);
-               }
-
-               if ($basepath == "") {
-                       $basepath = $_SERVER["DOCUMENT_ROOT"];
-               }
-
-               if ($basepath == "") {
-                       $basepath = $_SERVER["PWD"];
-               }
-
-               return $basepath;
-       }
-
-       function get_scheme() {
-               return $this->scheme;
-       }
-
-       /**
-        * @brief Retrieves the Friendica instance base URL
-        *
-        * This function assembles the base URL from multiple parts:
-        * - Protocol is determined either by the request or a combination of
-        * system.ssl_policy and the $ssl parameter.
-        * - Host name is determined either by system.hostname or inferred from request
-        * - Path is inferred from SCRIPT_NAME
-        *
-        * Note: $ssl parameter value doesn't directly correlate with the resulting protocol
-        *
-        * @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN
-        * @return string Friendica server base URL
-        */
-       function get_baseurl($ssl = false) {
-
-               // Is the function called statically?
-               if (!(isset($this) && get_class($this) == __CLASS__)) {
-                       return self::$a->get_baseurl($ssl);
-               }
-
-               $scheme = $this->scheme;
-
-               if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) {
-                       $scheme = 'https';
-               }
-
-               //      Basically, we have $ssl = true on any links which can only be seen by a logged in user
-               //      (and also the login link). Anything seen by an outsider will have it turned off.
-
-               if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) {
-                       if ($ssl) {
-                               $scheme = 'https';
-                       } else {
-                               $scheme = 'http';
-                       }
-               }
-
-               if (Config::get('config', 'hostname') != '') {
-                       $this->hostname = Config::get('config', 'hostname');
-               }
-
-               return $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
-       }
-
-       /**
-        * @brief Initializes the baseurl components
-        *
-        * Clears the baseurl cache to prevent inconstistencies
-        *
-        * @param string $url
-        */
-       function set_baseurl($url) {
-               $parsed = @parse_url($url);
-
-               if ($parsed) {
-                       $this->scheme = $parsed['scheme'];
-
-                       $hostname = $parsed['host'];
-                       if (x($parsed, 'port')) {
-                               $hostname .= ':' . $parsed['port'];
-                       }
-                       if (x($parsed, 'path')) {
-                               $this->path = trim($parsed['path'], '\\/');
-                       }
-
-                       if (file_exists(".htpreconfig.php")) {
-                               include ".htpreconfig.php";
-                       }
-
-                       if (get_config('config', 'hostname') != '') {
-                               $this->hostname = get_config('config', 'hostname');
-                       }
-
-                       if (!isset($this->hostname) OR ($this->hostname == '')) {
-                               $this->hostname = $hostname;
-                       }
-               }
-       }
-
-       function get_hostname() {
-               if (get_config('config', 'hostname') != "") {
-                       $this->hostname = get_config('config', 'hostname');
-               }
-
-               return $this->hostname;
-       }
-
-       function set_hostname($h) {
-               $this->hostname = $h;
-       }
-
-       function set_path($p) {
-               $this->path = trim(trim($p), '/');
-       }
-
-       function get_path() {
-               return $this->path;
-       }
-
-       function set_pager_total($n) {
-               $this->pager['total'] = intval($n);
-       }
-
-       function set_pager_itemspage($n) {
-               $this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
-               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
-       }
-
-       function set_pager_page($n) {
-               $this->pager['page'] = $n;
-               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
-       }
-
-       function init_pagehead() {
-               $interval = ((local_user()) ? get_pconfig(local_user(),'system','update_interval') : 40000);
-
-               // If the update is "deactivated" set it to the highest integer number (~24 days)
-               if ($interval < 0) {
-                       $interval = 2147483647;
-               }
-
-               if ($interval < 10000) {
-                       $interval = 40000;
-               }
-
-               // compose the page title from the sitename and the
-               // current module called
-               if (!$this->module == '') {
-                   $this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')';
-               } else {
-                       $this->page['title'] = $this->config['sitename'];
-               }
-
-               /* put the head template at the beginning of page['htmlhead']
-                * since the code added by the modules frequently depends on it
-                * being first
-                */
-               if (!isset($this->page['htmlhead'])) {
-                       $this->page['htmlhead'] = '';
-               }
-
-               // If we're using Smarty, then doing replace_macros() will replace
-               // any unrecognized variables with a blank string. Since we delay
-               // replacing $stylesheet until later, we need to replace it now
-               // with another variable name
-               if ($this->theme['template_engine'] === 'smarty3') {
-                       $stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
-               } else {
-                       $stylesheet = '$stylesheet';
-               }
-
-               $shortcut_icon = get_config("system", "shortcut_icon");
-               if ($shortcut_icon == "") {
-                       $shortcut_icon = "images/friendica-32.png";
-               }
-
-               $touch_icon = get_config("system", "touch_icon");
-               if ($touch_icon == "") {
-                       $touch_icon = "images/friendica-128.png";
-               }
-
-               // get data wich is needed for infinite scroll on the network page
-               $invinite_scroll = infinite_scroll_data($this->module);
-
-               $tpl = get_markup_template('head.tpl');
-               $this->page['htmlhead'] = replace_macros($tpl,array(
-                       '$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
-                       '$local_user' => local_user(),
-                       '$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
-                       '$delitem' => t('Delete this item?'),
-                       '$showmore' => t('show more'),
-                       '$showfewer' => t('show fewer'),
-                       '$update_interval' => $interval,
-                       '$shortcut_icon' => $shortcut_icon,
-                       '$touch_icon' => $touch_icon,
-                       '$stylesheet' => $stylesheet,
-                       '$infinite_scroll' => $invinite_scroll,
-               )) . $this->page['htmlhead'];
-       }
-
-       function init_page_end() {
-               if (!isset($this->page['end'])) {
-                       $this->page['end'] = '';
-               }
-               $tpl = get_markup_template('end.tpl');
-               $this->page['end'] = replace_macros($tpl,array(
-                       '$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
-               )) . $this->page['end'];
-       }
-
-       function set_curl_code($code) {
-               $this->curl_code = $code;
-       }
-
-       function get_curl_code() {
-               return $this->curl_code;
-       }
-
-       function set_curl_content_type($content_type) {
-               $this->curl_content_type = $content_type;
-       }
-
-       function get_curl_content_type() {
-               return $this->curl_content_type;
-       }
-
-       function set_curl_headers($headers) {
-               $this->curl_headers = $headers;
-       }
-
-       function get_curl_headers() {
-               return $this->curl_headers;
-       }
-
-       function get_cached_avatar_image($avatar_image){
-               return $avatar_image;
-       }
-
-
-       /**
-        * @brief Removes the baseurl from an url. This avoids some mixed content problems.
-        *
-        * @param string $orig_url
-        *
-        * @return string The cleaned url
-        */
-       function remove_baseurl($orig_url){
-
-               // Is the function called statically?
-               if (!(isset($this) && get_class($this) == __CLASS__)) {
-                       return self::$a->remove_baseurl($orig_url);
-               }
-
-               // Remove the hostname from the url if it is an internal link
-               $nurl = normalise_link($orig_url);
-               $base = normalise_link($this->get_baseurl());
-               $url = str_replace($base."/", "", $nurl);
-
-               // if it is an external link return the orignal value
-               if ($url == normalise_link($orig_url)) {
-                       return $orig_url;
-               } else {
-                       return $url;
-               }
-       }
-
-       /**
-        * @brief Register template engine class
-        *
-        * If $name is "", is used class static property $class::$name
-        *
-        * @param string $class
-        * @param string $name
-        */
-       function register_template_engine($class, $name = '') {
-               /// @TODO Really === and not just == ?
-               if ($name === "") {
-                       $v = get_class_vars( $class );
-                       if (x($v,"name")) $name = $v['name'];
-               }
-               if ($name === "") {
-                       echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
-                       killme();
-               }
-               $this->template_engines[$name] = $class;
-       }
-
-       /**
-        * @brief Return template engine instance.
-        *
-        * If $name is not defined, return engine defined by theme,
-        * or default
-        *
-        * @param strin $name Template engine name
-        * @return object Template Engine instance
-        */
-       function template_engine($name = '') {
-               /// @TODO really type-check included?
-               if ($name !== "") {
-                       $template_engine = $name;
-               } else {
-                       $template_engine = 'smarty3';
-                       if (x($this->theme, 'template_engine')) {
-                               $template_engine = $this->theme['template_engine'];
-                       }
-               }
-
-               if (isset($this->template_engines[$template_engine])){
-                       if (isset($this->template_engine_instance[$template_engine])){
-                               return $this->template_engine_instance[$template_engine];
-                       } else {
-                               $class = $this->template_engines[$template_engine];
-                               $obj = new $class;
-                               $this->template_engine_instance[$template_engine] = $obj;
-                               return $obj;
-                       }
-               }
-
-               echo "template engine <tt>$template_engine</tt> is not registered!\n"; killme();
-       }
-
-       /**
-        * @brief Returns the active template engine.
-        *
-        * @return string
-        */
-       function get_template_engine() {
-               return $this->theme['template_engine'];
-       }
-
-       function set_template_engine($engine = 'smarty3') {
-               $this->theme['template_engine'] = $engine;
-       }
-
-       function get_template_ldelim($engine = 'smarty3') {
-               return $this->ldelim[$engine];
-       }
-
-       function get_template_rdelim($engine = 'smarty3') {
-               return $this->rdelim[$engine];
-       }
-
-       function save_timestamp($stamp, $value) {
-               if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) {
-                       return;
-               }
-
-               $duration = (float)(microtime(true)-$stamp);
-
-               if (!isset($this->performance[$value])) {
-                       // Prevent ugly E_NOTICE
-                       $this->performance[$value] = 0;
-               }
-
-               $this->performance[$value] += (float)$duration;
-               $this->performance["marktime"] += (float)$duration;
-
-               $callstack = $this->callstack();
-
-               if (!isset($this->callstack[$value][$callstack])) {
-                       // Prevent ugly E_NOTICE
-                       $this->callstack[$value][$callstack] = 0;
-               }
-
-               $this->callstack[$value][$callstack] += (float)$duration;
-
-       }
-
-       /**
-        * @brief Log active processes into the "process" table
-        */
-       function start_process() {
-               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
-
-               $command = basename($trace[0]["file"]);
-
-               $this->remove_inactive_processes();
-
-               q("START TRANSACTION");
-
-               $r = q("SELECT `pid` FROM `process` WHERE `pid` = %d", intval(getmypid()));
-               if (!dbm::is_result($r)) {
-                       q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')",
-                               intval(getmypid()),
-                               dbesc($command),
-                               dbesc(datetime_convert()));
-               }
-               q("COMMIT");
-       }
-
-       /**
-        * @brief Remove inactive processes
-        */
-       function remove_inactive_processes() {
-               q("START TRANSACTION");
-
-               $r = q("SELECT `pid` FROM `process`");
-               if (dbm::is_result($r)) {
-                       foreach ($r AS $process) {
-                               if (!posix_kill($process["pid"], 0)) {
-                                       q("DELETE FROM `process` WHERE `pid` = %d", intval($process["pid"]));
-                               }
-                       }
-               }
-               q("COMMIT");
-       }
-
-       /**
-        * @brief Remove the active process from the "process" table
-        */
-       function end_process() {
-               q("DELETE FROM `process` WHERE `pid` = %d", intval(getmypid()));
-       }
-
-       /**
-        * @brief Returns a string with a callstack. Can be used for logging.
-        *
-        * @return string
-        */
-       function callstack() {
-               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 6);
-
-               // We remove the first two items from the list since they contain data that we don't need.
-               array_shift($trace);
-               array_shift($trace);
-
-               $callstack = array();
-               foreach ($trace AS $func) {
-                       $callstack[] = $func["function"];
-               }
-
-               return implode(", ", $callstack);
-       }
-
-       function get_useragent() {
-               return
-                       FRIENDICA_PLATFORM . " '" .
-                       FRIENDICA_CODENAME . "' " .
-                       FRIENDICA_VERSION . "-" .
-                       DB_UPDATE_VERSION . "; " .
-                       $this->get_baseurl();
-       }
-
-       function is_friendica_app() {
-               return $this->is_friendica_app;
-       }
-
-       /**
-        * @brief Checks if the site is called via a backend process
-        *
-        * This isn't a perfect solution. But we need this check very early.
-        * So we cannot wait until the modules are loaded.
-        *
-        * @return bool Is it a known backend?
-        */
-       function is_backend() {
-               static $backends = array();
-               $backends[] = "_well_known";
-               $backends[] = "api";
-               $backends[] = "dfrn_notify";
-               $backends[] = "fetch";
-               $backends[] = "hcard";
-               $backends[] = "hostxrd";
-               $backends[] = "nodeinfo";
-               $backends[] = "noscrape";
-               $backends[] = "p";
-               $backends[] = "poco";
-               $backends[] = "post";
-               $backends[] = "proxy";
-               $backends[] = "pubsub";
-               $backends[] = "pubsubhubbub";
-               $backends[] = "receive";
-               $backends[] = "rsd_xml";
-               $backends[] = "salmon";
-               $backends[] = "statistics_json";
-               $backends[] = "xrd";
-
-               // Check if current module is in backend or backend flag is set
-               return (in_array($this->module, $backends) || $this->backend);
-       }
-
-       /**
-        * @brief Checks if the maximum number of database processes is reached
-        *
-        * @return bool Is the limit reached?
-        */
-       function max_processes_reached() {
-
-               if ($this->is_backend()) {
-                       $process = "backend";
-                       $max_processes = get_config('system', 'max_processes_backend');
-                       if (intval($max_processes) == 0) {
-                               $max_processes = 5;
-                       }
-               } else {
-                       $process = "frontend";
-                       $max_processes = get_config('system', 'max_processes_frontend');
-                       if (intval($max_processes) == 0) {
-                               $max_processes = 20;
-                       }
-               }
-
-               $processlist = dbm::processlist();
-               if ($processlist["list"] != "") {
-                       logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG);
-
-                       if ($processlist["amount"] > $max_processes) {
-                               logger("Processcheck: Maximum number of processes for ".$process." tasks (".$max_processes.") reached.", LOGGER_DEBUG);
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * @brief Checks if the maximum load is reached
-        *
-        * @return bool Is the load reached?
-        */
-       function maxload_reached() {
-
-               if ($this->is_backend()) {
-                       $process = "backend";
-                       $maxsysload = intval(get_config('system', 'maxloadavg'));
-                       if ($maxsysload < 1) {
-                               $maxsysload = 50;
-                       }
-               } else {
-                       $process = "frontend";
-                       $maxsysload = intval(get_config('system','maxloadavg_frontend'));
-                       if ($maxsysload < 1) {
-                               $maxsysload = 50;
-                       }
-               }
-
-               $load = current_load();
-               if ($load) {
-                       if (intval($load) > $maxsysload) {
-                               logger('system: load '.$load.' for '.$process.' tasks ('.$maxsysload.') too high.');
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       function proc_run($args) {
-
-               if (!function_exists("proc_open")) {
-                       return;
-               }
-
-               // If the last worker fork was less than 10 seconds before then don't fork another one.
-               // This should prevent the forking of masses of workers.
-               $cachekey = "app:proc_run:started";
-               $result = Cache::get($cachekey);
-
-               if (!is_null($result) AND (time() - $result) < 10) {
-                       return;
-               }
-
-               // Set the timestamp of the last proc_run
-               Cache::set($cachekey, time(), CACHE_MINUTE);
-
-               array_unshift($args, ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'));
-
-               // add baseurl to args. cli scripts can't construct it
-               $args[] = $this->get_baseurl();
-
-               for ($x = 0; $x < count($args); $x ++) {
-                       $args[$x] = escapeshellarg($args[$x]);
-               }
-
-               $cmdline = implode($args, " ");
-
-               if (get_config('system', 'proc_windows')) {
-                       $resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__));
-               } else {
-                       $resource = proc_open($cmdline . " &", array(), $foo, dirname(__FILE__));
-               }
-               if (!is_resource($resource)) {
-                       logger('We got no resource for command '.$cmdline, LOGGER_DEBUG);
-                       return;
-               }
-               proc_close($resource);
-       }
-
-       /**
-        * @brief Returns the system user that is executing the script
-        *
-        * This mostly returns something like "www-data".
-        *
-        * @return string system username
-        */
-       static function systemuser() {
-               if (!function_exists('posix_getpwuid') OR !function_exists('posix_geteuid')) {
-                       return '';
-               }
-
-               $processUser = posix_getpwuid(posix_geteuid());
-               return $processUser['name'];
-       }
-
-       /**
-        * @brief Checks if a given directory is usable for the system
-        *
-        * @return boolean the directory is usable
-        */
-       static function directory_usable($directory) {
-
-               if ($directory == '') {
-                       logger("Directory is empty. This shouldn't happen.", LOGGER_DEBUG);
-                       return false;
-               }
-
-               if (!file_exists($directory)) {
-                       logger('Path "'.$directory.'" does not exist for user '.self::systemuser(), LOGGER_DEBUG);
-                       return false;
-               }
-               if (is_file($directory)) {
-                       logger('Path "'.$directory.'" is a file for user '.self::systemuser(), LOGGER_DEBUG);
-                       return false;
-               }
-               if (!is_dir($directory)) {
-                       logger('Path "'.$directory.'" is not a directory for user '.self::systemuser(), LOGGER_DEBUG);
-                       return false;
-               }
-               if (!is_writable($directory)) {
-                       logger('Path "'.$directory.'" is not writable for user '.self::systemuser(), LOGGER_DEBUG);
-                       return false;
-               }
-               return true;
-       }
 }
 
 /**
@@ -1436,7 +499,6 @@ function get_app() {
        return $a;
 }
 
-
 /**
  * @brief Multi-purpose function to check variable state.
  *
@@ -1451,7 +513,7 @@ function get_app() {
  *
  * @return bool|int
  */
-function x($s,$k = NULL) {
+function x($s, $k = NULL) {
        if ($k != NULL) {
                if ((is_array($s)) && (array_key_exists($k, $s))) {
                        if ($s[$k]) {
@@ -1471,7 +533,6 @@ function x($s,$k = NULL) {
        }
 }
 
-
 /**
  * @brief Called from db initialisation if db is dead.
  */
@@ -1481,7 +542,6 @@ function system_unavailable() {
        killme();
 }
 
-
 function clean_urls() {
        $a = get_app();
        return true;
@@ -1490,7 +550,7 @@ function clean_urls() {
 function z_path() {
        $base = App::get_baseurl();
 
-       if (! clean_urls()) {
+       if (!clean_urls()) {
                $base .= '/?q=';
        }
 
@@ -1517,7 +577,7 @@ function z_root() {
  * @return string
  */
 function absurl($path) {
-       if (strpos($path,'/') === 0) {
+       if (strpos($path, '/') === 0) {
                return z_path() . $path;
        }
        return $path;
@@ -1534,25 +594,23 @@ function is_ajax() {
 
 function check_db() {
 
-       $build = get_config('system','build');
-       if (! x($build)) {
-               set_config('system','build',DB_UPDATE_VERSION);
+       $build = get_config('system', 'build');
+       if (!x($build)) {
+               set_config('system', 'build', DB_UPDATE_VERSION);
                $build = DB_UPDATE_VERSION;
        }
        if ($build != DB_UPDATE_VERSION) {
                proc_run(PRIORITY_CRITICAL, 'include/dbupdate.php');
        }
-
 }
 
-
 /**
  * Sets the base url for use in cmdline programs which don't have
  * $_SERVER variables
  */
 function check_url(App $a) {
 
-       $url = get_config('system','url');
+       $url = get_config('system', 'url');
 
        // if the url isn't set or the stored url is radically different
        // than the currently visited url, store the current value accordingly.
@@ -1560,24 +618,23 @@ function check_url(App $a) {
        // and www.example.com vs example.com.
        // We will only change the url to an ip address if there is no existing setting
 
-       if (! x($url)) {
-               $url = set_config('system','url',App::get_baseurl());
+       if (!x($url)) {
+               $url = set_config('system', 'url', App::get_baseurl());
        }
-       if ((! link_compare($url,App::get_baseurl())) && (! preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$a->get_hostname))) {
-               $url = set_config('system','url',App::get_baseurl());
+       if ((!link_compare($url, App::get_baseurl())) && (!preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $a->get_hostname))) {
+               $url = set_config('system', 'url', App::get_baseurl());
        }
 
        return;
 }
 
-
 /**
  * @brief Automatic database updates
  */
 function update_db(App $a) {
-       $build = get_config('system','build');
-       if (! x($build)) {
-               $build = set_config('system','build',DB_UPDATE_VERSION);
+       $build = get_config('system', 'build');
+       if (!x($build)) {
+               $build = set_config('system', 'build', DB_UPDATE_VERSION);
        }
 
        if ($build != DB_UPDATE_VERSION) {
@@ -1588,7 +645,6 @@ function update_db(App $a) {
 
                        // We're reporting a different version than what is currently installed.
                        // Run any existing update scripts to bring the database up to current.
-
                        // make sure that boot.php and update.php are the same release, we might be
                        // updating right this very second and the correct version of the update.php
                        // file may not be here yet. This can happen on a very busy site.
@@ -1596,12 +652,12 @@ function update_db(App $a) {
                        if (DB_UPDATE_VERSION == UPDATE_VERSION) {
                                // Compare the current structure with the defined structure
 
-                               $t = get_config('database','dbupdate_'.DB_UPDATE_VERSION);
+                               $t = get_config('database', 'dbupdate_' . DB_UPDATE_VERSION);
                                if ($t !== false) {
                                        return;
                                }
 
-                               set_config('database','dbupdate_'.DB_UPDATE_VERSION, time());
+                               set_config('database', 'dbupdate_' . DB_UPDATE_VERSION, time());
 
                                // run old update routine (wich could modify the schema and
                                // conflits with new routine)
@@ -1625,7 +681,7 @@ function update_db(App $a) {
                                        );
                                        return;
                                } else {
-                                       set_config('database','dbupdate_'.DB_UPDATE_VERSION, 'success');
+                                       set_config('database', 'dbupdate_' . DB_UPDATE_VERSION, 'success');
                                }
 
                                // run any left update_nnnn functions in update.php
@@ -1649,15 +705,14 @@ function run_update_function($x) {
                // We want exactly one process to run the update command.
                // So store the fact that we're taking responsibility
                // after first checking to see if somebody else already has.
-
                // If the update fails or times-out completely you may need to
                // delete the config entry to try again.
 
-               $t = get_config('database','update_' . $x);
+               $t = get_config('database', 'update_' . $x);
                if ($t !== false) {
                        return false;
                }
-               set_config('database','update_' . $x, time());
+               set_config('database', 'update_' . $x, time());
 
                // call the specific update
 
@@ -1672,13 +727,13 @@ function run_update_function($x) {
                        );
                        return false;
                } else {
-                       set_config('database','update_' . $x, 'success');
-                       set_config('system','build', $x + 1);
+                       set_config('database', 'update_' . $x, 'success');
+                       set_config('system', 'build', $x + 1);
                        return true;
                }
        } else {
-               set_config('database','update_' . $x, 'success');
-               set_config('system','build', $x + 1);
+               set_config('database', 'update_' . $x, 'success');
+               set_config('system', 'build', $x + 1);
                return true;
        }
        return true;
@@ -1707,11 +762,11 @@ function check_plugins(App $a) {
                $installed = array();
        }
 
-       $plugins = get_config('system','addon');
+       $plugins = get_config('system', 'addon');
        $plugins_arr = array();
 
        if ($plugins) {
-               $plugins_arr = explode(',',str_replace(' ', '',$plugins));
+               $plugins_arr = explode(',', str_replace(' ', '', $plugins));
        }
 
        $a->plugins = $plugins_arr;
@@ -1720,7 +775,7 @@ function check_plugins(App $a) {
 
        if (count($installed)) {
                foreach ($installed as $i) {
-                       if (! in_array($i['name'],$plugins_arr)) {
+                       if (!in_array($i['name'], $plugins_arr)) {
                                uninstall_plugin($i['name']);
                        } else {
                                $installed_arr[] = $i['name'];
@@ -1730,20 +785,18 @@ function check_plugins(App $a) {
 
        if (count($plugins_arr)) {
                foreach ($plugins_arr as $p) {
-                       if (! in_array($p,$installed_arr)) {
+                       if (!in_array($p, $installed_arr)) {
                                install_plugin($p);
                        }
                }
        }
 
-
        load_hooks();
 
        return;
 }
 
-function get_guid($size=16, $prefix = "") {
-
+function get_guid($size = 16, $prefix = "") {
        if ($prefix == "") {
                $a = get_app();
                $prefix = hash("crc32", $a->get_hostname());
@@ -1776,7 +829,7 @@ function get_guid($size=16, $prefix = "") {
  * @hooks 'login_hook'
  *     string $o
  */
-function login($register = false, $hiddens=false) {
+function login($register = false, $hiddens = false) {
        $a = get_app();
        $o = "";
        $reg = false;
@@ -1787,14 +840,14 @@ function login($register = false, $hiddens=false) {
                );
        }
 
-       $noid = get_config('system','no_openid');
+       $noid = get_config('system', 'no_openid');
 
        $dest_url = $a->query_string;
 
        if (local_user()) {
                $tpl = get_markup_template("logout.tpl");
        } else {
-               $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"),array(
+               $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"), array(
                        '$baseurl' => $a->get_baseurl(true)
                ));
 
@@ -1828,10 +881,9 @@ function login($register = false, $hiddens=false) {
 
                '$privacytitle' => t('Website Privacy Policy'),
                '$privacylink'  => t('privacy policy'),
-
        ));
 
-       call_hooks('login_hook',$o);
+       call_hooks('login_hook', $o);
 
        return $o;
 }
@@ -1840,7 +892,6 @@ function login($register = false, $hiddens=false) {
  * @brief Used to end the current process, after saving session state.
  */
 function killme() {
-
        if (!get_app()->is_backend()) {
                session_write_close();
        }
@@ -1853,14 +904,13 @@ function killme() {
  */
 function goaway($s) {
        if (!strstr(normalise_link($s), "http://")) {
-               $s = App::get_baseurl()."/".$s;
+               $s = App::get_baseurl() . "/" . $s;
        }
 
        header("Location: $s");
        killme();
 }
 
-
 /**
  * @brief Returns the user id of locally logged in user or false.
  *
@@ -1902,7 +952,7 @@ function public_contact() {
  * @return int|bool visitor_id or false
  */
 function remote_user() {
-       if ((x($_SESSION,'authenticated')) && (x($_SESSION,'visitor_id'))) {
+       if ((x($_SESSION, 'authenticated')) && (x($_SESSION, 'visitor_id'))) {
                return intval($_SESSION['visitor_id']);
        }
        return false;
@@ -1917,7 +967,7 @@ function remote_user() {
  */
 function notice($s) {
        $a = get_app();
-       if (! x($_SESSION,'sysmsg')) {
+       if (!x($_SESSION, 'sysmsg')) {
                $_SESSION['sysmsg'] = array();
        }
        if ($a->interactive) {
@@ -1935,11 +985,11 @@ function notice($s) {
 function info($s) {
        $a = get_app();
 
-       if (local_user() AND get_pconfig(local_user(),'system','ignore_info')) {
+       if (local_user() AND get_pconfig(local_user(), 'system', 'ignore_info')) {
                return;
        }
 
-       if (! x($_SESSION,'sysmsg_info')) {
+       if (!x($_SESSION, 'sysmsg_info')) {
                $_SESSION['sysmsg_info'] = array();
        }
        if ($a->interactive) {
@@ -1947,7 +997,6 @@ function info($s) {
        }
 }
 
-
 /**
  * @brief Wrapper around config to limit the text length of an incoming message
  *
@@ -1955,12 +1004,12 @@ function info($s) {
  */
 function get_max_import_size() {
        $a = get_app();
-       return ((x($a->config,'max_import_size')) ? $a->config['max_import_size'] : 0 );
+       return ((x($a->config, 'max_import_size')) ? $a->config['max_import_size'] : 0 );
 }
 
 /**
  * @brief Wrap calls to proc_close(proc_open()) and call hook
- *     so plugins can take part in process :)
+ *     so plugins can take part in process :)
  *
  * @param (integer|array) priority or parameter array, $cmd atrings are deprecated and are ignored
  *
@@ -1971,9 +1020,9 @@ function get_max_import_size() {
  * @note $cmd and string args are surrounded with ""
  *
  * @hooks 'proc_run'
- *     array $arr
+ *     array $arr
  */
-function proc_run($cmd){
+function proc_run($cmd) {
 
        $a = get_app();
 
@@ -2006,7 +1055,7 @@ function proc_run($cmd){
        $arr = array('args' => $args, 'run_cmd' => true);
 
        call_hooks("proc_run", $arr);
-       if (!$arr['run_cmd'] OR !count($args)) {
+       if (!$arr['run_cmd'] OR ! count($args)) {
                return;
        }
 
@@ -2028,15 +1077,10 @@ function proc_run($cmd){
        array_shift($argv);
 
        $parameters = json_encode($argv);
-       $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'",
-               dbesc($parameters));
+       $found = dba::select('workerqueue', array('id'), array('parameter' => $parameters), array('limit' => 1));
 
        if (!dbm::is_result($found)) {
-               q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`)
-                       VALUES ('%s', '%s', %d)",
-                       dbesc($parameters),
-                       dbesc(datetime_convert()),
-                       intval($priority));
+               dba::insert('workerqueue', array('parameter' => $parameters, 'created' => datetime_convert(), 'priority' => $priority));
        }
 
        // Should we quit and wait for the poller to be called as a cronjob?
@@ -2065,7 +1109,7 @@ function proc_run($cmd){
        $a->proc_run($args);
 }
 
-function current_theme(){
+function current_theme() {
        $app_base_themes = array('duepuntozero', 'dispy', 'quattro');
 
        $a = get_app();
@@ -2087,7 +1131,7 @@ function current_theme(){
        // This works only if the user is on the same server
 
        if ($page_theme && local_user() && (local_user() != $a->profile_uid)) {
-               if (get_pconfig(local_user(),'system','always_my_theme')) {
+               if (get_pconfig(local_user(), 'system', 'always_my_theme')) {
                        $page_theme = null;
                }
        }
@@ -2097,7 +1141,7 @@ function current_theme(){
        $is_mobile = $a->is_mobile || $a->is_tablet;
 
        $standard_system_theme = Config::get('system', 'theme', '');
-       $standard_theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $standard_system_theme);
+       $standard_theme_name = ((isset($_SESSION) && x($_SESSION, 'theme')) ? $_SESSION['theme'] : $standard_system_theme);
 
        if ($is_mobile) {
                if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
@@ -2108,7 +1152,7 @@ function current_theme(){
                        if ($system_theme == '') {
                                $system_theme = $standard_system_theme;
                        }
-                       $theme_name = ((isset($_SESSION) && x($_SESSION,'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme);
+                       $theme_name = ((isset($_SESSION) && x($_SESSION, 'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme);
 
                        if ($theme_name === '---') {
                                // user has selected to have the mobile theme be the same as the normal one
@@ -2130,21 +1174,21 @@ function current_theme(){
        }
 
        if ($theme_name &&
-                       (file_exists('view/theme/' . $theme_name . '/style.css') ||
-                                       file_exists('view/theme/' . $theme_name . '/style.php'))) {
+               (file_exists('view/theme/' . $theme_name . '/style.css') ||
+               file_exists('view/theme/' . $theme_name . '/style.php'))) {
                return($theme_name);
        }
 
        foreach ($app_base_themes as $t) {
                if (file_exists('view/theme/' . $t . '/style.css') ||
-                               file_exists('view/theme/' . $t . '/style.php')) {
+                       file_exists('view/theme/' . $t . '/style.php')) {
                        return($t);
                }
        }
 
-       $fallback = array_merge(glob('view/theme/*/style.css'),glob('view/theme/*/style.php'));
+       $fallback = array_merge(glob('view/theme/*/style.css'), glob('view/theme/*/style.php'));
        if (count($fallback)) {
-               return (str_replace('view/theme/','', substr($fallback[0],0,-10)));
+               return (str_replace('view/theme/', '', substr($fallback[0], 0, -10)));
        }
 
        /// @TODO No final return statement?
@@ -2164,13 +1208,13 @@ function current_theme_url() {
 
        $opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
        if (file_exists('view/theme/' . $t . '/style.php')) {
-               return('view/theme/'.$t.'/style.pcss'.$opts);
+               return('view/theme/' . $t . '/style.pcss' . $opts);
        }
 
-       return('view/theme/'.$t.'/style.css');
+       return('view/theme/' . $t . '/style.css');
 }
 
-function feed_birthday($uid,$tz) {
+function feed_birthday($uid, $tz) {
 
        /**
         *
@@ -2190,11 +1234,9 @@ function feed_birthday($uid,$tz) {
         * 6:00PM the day before, but that will correspond to midnight to the birthday person.
         *
         */
-
-
        $birthday = '';
 
-       if (! strlen($tz)) {
+       if (!strlen($tz)) {
                $tz = 'UTC';
        }
 
@@ -2203,16 +1245,16 @@ function feed_birthday($uid,$tz) {
        );
 
        if (dbm::is_result($p)) {
-               $tmp_dob = substr($p[0]['dob'],5);
+               $tmp_dob = substr($p[0]['dob'], 5);
                if (intval($tmp_dob)) {
-                       $y = datetime_convert($tz,$tz,'now','Y');
+                       $y = datetime_convert($tz, $tz, 'now', 'Y');
                        $bd = $y . '-' . $tmp_dob . ' 00:00';
                        $t_dob = strtotime($bd);
-                       $now = strtotime(datetime_convert($tz,$tz,'now'));
+                       $now = strtotime(datetime_convert($tz, $tz, 'now'));
                        if ($t_dob < $now) {
                                $bd = $y + 1 . '-' . $tmp_dob . ' 00:00';
                        }
-                       $birthday = datetime_convert($tz,'UTC',$bd,ATOM_TIME);
+                       $birthday = datetime_convert($tz, 'UTC', $bd, ATOM_TIME);
                }
        }
 
@@ -2230,7 +1272,7 @@ function is_site_admin() {
        $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
 
        //if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email']))
-       if (local_user() && x($a->user,'email') && x($a->config,'admin_email') && in_array($a->user['email'], $adminlist)) {
+       if (local_user() && x($a->user, 'email') && x($a->config, 'admin_email') && in_array($a->user['email'], $adminlist)) {
                return true;
        }
        return false;
@@ -2252,7 +1294,7 @@ function build_querystring($params, $name = null) {
                        if ($name == null) {
                                $ret .= build_querystring($val, $key);
                        } else {
-                               $ret .= build_querystring($val, $name."[$key]");
+                               $ret .= build_querystring($val, $name . "[$key]");
                        }
                } else {
                        $val = urlencode($val);
@@ -2300,10 +1342,10 @@ function explode_querystring($query) {
 }
 
 /**
-* Returns the complete URL of the current page, e.g.: http(s)://something.com/network
-*
-* Taken from http://webcheatsheet.com/php/get_current_page_url.php
-*/
+ * Returns the complete URL of the current page, e.g.: http(s)://something.com/network
+ *
+ * Taken from http://webcheatsheet.com/php/get_current_page_url.php
+ */
 function curPageURL() {
        $pageURL = 'http';
        if ($_SERVER["HTTPS"] == "on") {
@@ -2313,9 +1355,9 @@ function curPageURL() {
        $pageURL .= "://";
 
        if ($_SERVER["SERVER_PORT"] != "80" && $_SERVER["SERVER_PORT"] != "443") {
-               $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
+               $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
        } else {
-               $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
+               $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
        }
        return $pageURL;
 }
@@ -2324,7 +1366,7 @@ function random_digits($digits) {
        $rn = '';
        for ($i = 0; $i < $digits; $i++) {
                /// @TODO rand() is different to mt_rand() and maybe lesser "random"
-               $rn .= rand(0,9);
+               $rn .= rand(0, 9);
        }
        return $rn;
 }
@@ -2342,7 +1384,7 @@ function get_server() {
 function get_cachefile($file, $writemode = true) {
        $cache = get_itemcachepath();
 
-       if ((! $cache) || (! is_dir($cache))) {
+       if ((!$cache) || (!is_dir($cache))) {
                return("");
        }
 
@@ -2375,15 +1417,15 @@ function clear_cache($basepath = "", $path = "") {
                return;
        }
 
-       $cachetime = (int)get_config('system','itemcache_duration');
+       $cachetime = (int) get_config('system', 'itemcache_duration');
        if ($cachetime == 0) {
                $cachetime = 86400;
        }
 
-       if (is_writable($path)){
+       if (is_writable($path)) {
                if ($dh = opendir($path)) {
                        while (($file = readdir($dh)) !== false) {
-                               $fullpath = $path."/".$file;
+                               $fullpath = $path . "/" . $file;
                                if ((filetype($fullpath) == "dir") and ($file != ".") and ($file != "..")) {
                                        clear_cache($basepath, $fullpath);
                                }
@@ -2398,12 +1440,12 @@ function clear_cache($basepath = "", $path = "") {
 
 function get_itemcachepath() {
        // Checking, if the cache is deactivated
-       $cachetime = (int)get_config('system','itemcache_duration');
+       $cachetime = (int) get_config('system', 'itemcache_duration');
        if ($cachetime < 0) {
                return "";
        }
 
-       $itemcache = get_config('system','itemcache');
+       $itemcache = get_config('system', 'itemcache');
        if (($itemcache != "") AND App::directory_usable($itemcache)) {
                return $itemcache;
        }
@@ -2411,7 +1453,7 @@ function get_itemcachepath() {
        $temppath = get_temppath();
 
        if ($temppath != "") {
-               $itemcache = $temppath."/itemcache";
+               $itemcache = $temppath . "/itemcache";
                if (!file_exists($itemcache) && !is_dir($itemcache)) {
                        mkdir($itemcache);
                }
@@ -2430,7 +1472,7 @@ function get_itemcachepath() {
  * @return string Spool path
  */
 function get_spoolpath() {
-       $spoolpath = get_config('system','spoolpath');
+       $spoolpath = get_config('system', 'spoolpath');
        if (($spoolpath != "") AND App::directory_usable($spoolpath)) {
                // We have a spool path and it is usable
                return $spoolpath;
@@ -2441,7 +1483,7 @@ function get_spoolpath() {
 
        if ($temppath != "") {
                // To avoid any interferences with other systems we create our own directory
-               $spoolpath = $temppath."/spool";
+               $spoolpath = $temppath . "/spool";
                if (!is_dir($spoolpath)) {
                        mkdir($spoolpath);
                }
@@ -2477,7 +1519,7 @@ function get_temppath() {
        // Check if it is usable
        if (($temppath != "") AND App::directory_usable($temppath)) {
                // To avoid any interferences with other systems we create our own directory
-               $new_temppath = $temppath."/".$a->get_hostname();
+               $new_temppath = $temppath . "/" . $a->get_hostname();
                if (!is_dir($new_temppath)) {
                        /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method?
                        mkdir($new_temppath);
@@ -2523,7 +1565,7 @@ function validate_include(&$file) {
                return false;
        }
 
-       $file = str_replace(getcwd()."/", "", $file, $count);
+       $file = str_replace(getcwd() . "/", "", $file, $count);
        if ($count != 1) {
                return false;
        }
@@ -2575,7 +1617,7 @@ function argc() {
  * @return string Value of the argv key
  */
 function argv($x) {
-       if (array_key_exists($x,get_app()->argv)) {
+       if (array_key_exists($x, get_app()->argv)) {
                return get_app()->argv[$x];
        }
 
@@ -2592,12 +1634,12 @@ function argv($x) {
  *
  * @param string $module The name of the module (e.g. "network")
  * @return array Of infinite scroll data
- *     'pageno' => $pageno The number of the actual page
- *     'reload_uri' => $reload_uri The URI of the content we have to load
+ *     'pageno' => $pageno The number of the actual page
+ *     'reload_uri' => $reload_uri The URI of the content we have to load
  */
 function infinite_scroll_data($module) {
 
-       if (get_pconfig(local_user(),'system','infinite_scroll')
+       if (get_pconfig(local_user(), 'system', 'infinite_scroll')
                AND ($module == "network") AND ($_GET["mode"] != "minimal")) {
 
                // get the page number
@@ -2616,7 +1658,7 @@ function infinite_scroll_data($module) {
                        }
                }
 
-               if (($a->page_offset != "") AND !strstr($reload_uri, "&offset=")) {
+               if (($a->page_offset != "") AND ! strstr($reload_uri, "&offset=")) {
                        $reload_uri .= "&offset=" . urlencode($a->page_offset);
                }
 
index b46614f6e3a74bb810bc79bd950da32dc9e7192b..f057d0cec76078a7b471eb49f26ac384f64374c6 100644 (file)
         },
         {
             "name": "pear-pear.php.net/PEAR",
-            "version": "1.10.3",
+            "version": "1.10.4",
             "dist": {
                 "type": "file",
-                "url": "https://pear.php.net/get/PEAR-1.10.3.tgz",
+                "url": "https://pear.php.net/get/PEAR-1.10.4.tgz",
                 "reference": null,
                 "shasum": null
             },
                 "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
             },
             "replace": {
-                "pear-pear/pear": "== 1.10.3.0"
+                "pear-pear/pear": "== 1.10.4.0"
             },
             "type": "pear-library",
             "autoload": {
index 69da511b0348763e279a5ca60ce1b788b5204779..73547b3058da2a83c2fd172468a0296561e061a1 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 3.5.2-dev (Asparagus)
--- DB_UPDATE_VERSION 1219
+-- DB_UPDATE_VERSION 1221
 -- ------------------------------------------
 
 
@@ -174,13 +174,13 @@ CREATE TABLE IF NOT EXISTS `contact` (
        `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0,
        `ffi_keyword_blacklist` text,
         PRIMARY KEY(`id`),
-        INDEX `uid_name` (`uid`,`name`),
+        INDEX `uid_name` (`uid`,`name`(190)),
         INDEX `self_uid` (`self`,`uid`),
         INDEX `alias_uid` (`alias`(32),`uid`),
         INDEX `pending_uid` (`pending`,`uid`),
         INDEX `blocked_uid` (`blocked`,`uid`),
-        INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`),
-        INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)),
+        INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`(4),`poll`(64),`archive`),
+        INDEX `uid_network_batch` (`uid`,`network`(4),`batch`(64)),
         INDEX `addr_uid` (`addr`(32),`uid`),
         INDEX `nurl_uid` (`nurl`(32),`uid`),
         INDEX `nick_uid` (`nick`(32),`uid`),
@@ -204,6 +204,21 @@ CREATE TABLE IF NOT EXISTS `conv` (
         INDEX `uid` (`uid`)
 ) DEFAULT COLLATE utf8mb4_general_ci;
 
+--
+-- TABLE conversation
+--
+CREATE TABLE IF NOT EXISTS `conversation` (
+       `item-uri` varbinary(255) NOT NULL,
+       `reply-to-uri` varbinary(255) NOT NULL DEFAULT '',
+       `conversation-uri` varbinary(255) NOT NULL DEFAULT '',
+       `conversation-href` varbinary(255) NOT NULL DEFAULT '',
+       `protocol` tinyint(1) unsigned NOT NULL DEFAULT 0,
+       `source` mediumtext,
+       `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
+        PRIMARY KEY(`item-uri`),
+        INDEX `conversation-uri` (`conversation-uri`)
+) DEFAULT COLLATE utf8mb4_general_ci;
+
 --
 -- TABLE event
 --
@@ -344,7 +359,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
         INDEX `name` (`name`(64)),
         INDEX `nick` (`nick`(32)),
         INDEX `addr` (`addr`(64)),
-        INDEX `hide_network_updated` (`hide`,`network`,`updated`),
+        INDEX `hide_network_updated` (`hide`,`network`(4),`updated`),
         INDEX `updated` (`updated`)
 ) DEFAULT COLLATE utf8mb4_general_ci;
 
@@ -523,22 +538,22 @@ CREATE TABLE IF NOT EXISTS `item` (
         INDEX `uid_contactid_id` (`uid`,`contact-id`,`id`),
         INDEX `uid_created` (`uid`,`created`),
         INDEX `uid_unseen_contactid` (`uid`,`unseen`,`contact-id`),
-        INDEX `uid_network_received` (`uid`,`network`,`received`),
-        INDEX `uid_network_commented` (`uid`,`network`,`commented`),
-        INDEX `uid_thrparent` (`uid`,`thr-parent`),
-        INDEX `uid_parenturi` (`uid`,`parent-uri`),
+        INDEX `uid_network_received` (`uid`,`network`(4),`received`),
+        INDEX `uid_network_commented` (`uid`,`network`(4),`commented`),
+        INDEX `uid_thrparent` (`uid`,`thr-parent`(190)),
+        INDEX `uid_parenturi` (`uid`,`parent-uri`(190)),
         INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`),
         INDEX `authorid_created` (`author-id`,`created`),
-        INDEX `uid_uri` (`uid`,`uri`),
+        INDEX `uid_uri` (`uid`,`uri`(190)),
         INDEX `resource-id` (`resource-id`),
         INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)),
-        INDEX `uid_type_changed` (`uid`,`type`,`changed`),
-        INDEX `contactid_verb` (`contact-id`,`verb`),
+        INDEX `uid_type_changed` (`uid`,`type`(190),`changed`),
+        INDEX `contactid_verb` (`contact-id`,`verb`(190)),
         INDEX `deleted_changed` (`deleted`,`changed`),
         INDEX `uid_wall_changed` (`uid`,`wall`,`changed`),
         INDEX `uid_eventid` (`uid`,`event-id`),
-        INDEX `uid_authorlink` (`uid`,`author-link`),
-        INDEX `uid_ownerlink` (`uid`,`owner-link`)
+        INDEX `uid_authorlink` (`uid`,`author-link`(190)),
+        INDEX `uid_ownerlink` (`uid`,`owner-link`(190))
 ) DEFAULT COLLATE utf8mb4_general_ci;
 
 --
@@ -652,7 +667,7 @@ CREATE TABLE IF NOT EXISTS `notify` (
         INDEX `hash_uid` (`hash`,`uid`),
         INDEX `seen_uid_date` (`seen`,`uid`,`date`),
         INDEX `uid_date` (`uid`,`date`),
-        INDEX `uid_type_link` (`uid`,`type`,`link`)
+        INDEX `uid_type_link` (`uid`,`type`,`link`(190))
 ) DEFAULT COLLATE utf8mb4_general_ci;
 
 --
@@ -963,7 +978,7 @@ CREATE TABLE IF NOT EXISTS `term` (
        `aid` int(10) unsigned NOT NULL DEFAULT 0,
        `uid` int(10) unsigned NOT NULL DEFAULT 0,
         PRIMARY KEY(`tid`),
-        INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`),
+        INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`(32)),
         INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`(32),`global`,`created`),
         INDEX `uid_otype_type_url` (`uid`,`otype`,`type`,`url`(64)),
         INDEX `guid` (`guid`(64))
index 8310baf3f0cfa67bd3ed7150c68f2f5cce1a5365..02ce61639cda4fabaad0ba8ec4e55a6844d1d002 100644 (file)
@@ -113,3 +113,8 @@ For Composer, this would be:
 ````
 $> COMPOSER_HOME=/var/tmp/composer sudo -u [web user] util/composer.phar [mode]
 ````
+
+## Related
+
+* [Class autoloading](help/autoloader)
+* [How To Move Classes to `src`](help/Developer-How-To-Move-Classes-to-src)
diff --git a/doc/Developer-How-To-Move-Classes-to-src.md b/doc/Developer-How-To-Move-Classes-to-src.md
new file mode 100644 (file)
index 0000000..25eb393
--- /dev/null
@@ -0,0 +1,108 @@
+How To Move Classes to `src`
+==============
+
+* [Home](help)
+  * [Developer Intro](help/Developers-Intro)
+
+Friendica uses [Composer](help/Composer) to manage autoloading.
+This means that all the PHP class files moved to the `src` folder will be [automatically included](help/autoloader) when the class it defines is first used in the flow.
+This is an improvement over the current `require` usage since files will be included on an actual usage basis instead of the presence of a `require` call.
+
+However, there are a significant number of items to check when moving a class file from the `include` folder to the `src` folder, and this page is there to list them.
+
+## Decide the namespace
+
+This isn't the most technical decision of them all, but it has long lasting consequences as it will be the name that will be used to refer to this class from now on.
+There is [a shared Ethercalc sheet](https://ethercalc.org/friendica_classes) to suggest namespace/class names that lists all the already moved class files for inspiration.
+
+A few pointers though:
+* `Friendica` is the base namespace for all classes in the `src` folder
+* Namespaces match the directory structure, with `Friendica` namespace being the base `src` directory. The `Config` class set in the `Friendica\Core` namespace is expected to be found at `src/Core/Config.php`.
+* Namespaces can help group classes with a similar purpose or relevant to a particular feature
+
+When you're done deciding the namespace, it's time to use it.
+Let's say we choose `Friendica\Core` for the `Config` class.
+
+## Use the namespace
+
+To declare the namespace, the file `src/Core/Config.php` must start with the following statement:
+
+````php
+namespace Friendica\Core;
+````
+
+From now on, the `Config` class can be referred to as `Friendica\Core\Config`, however it isn't very practical, especially when the class was previously used as `Config`.
+Thankfully, PHP provides namespace shortcuts through `use`.
+
+This language construct just provides a different naming scheme for a namespace or a class, but doesn't trigger the autoload mechanism on its own.
+Here are the different ways you can use `use`:
+
+````php
+// No use
+$config = new Friendica\Core\Config();
+````
+````php
+// Namespace shortcut
+use Friendica\Core;
+
+$config = new Core\Config();
+````
+````php
+// Class name shortcut
+use Friendica\Core\Config;
+
+$config = new Config();
+````
+````php
+// Aliasing
+use Friendica\Core\Config as Cfg;
+
+$config = new Cfg();
+````
+
+Whatever the style chosen, a repository-wide search has to be done to find all the class name usage and either use the fully-qualified class name (including the namespace) or add a `use` statement at the start of each relevant file.
+
+## Escape non-namespace classes
+
+The class file you just moved is now in the `Friendica` namespace, but it probably isn't the case for all the classes referenced in this file.
+Since we added a `namespace Friendica\Core;` to the file, all the class names still declared in `include` will be implicitly understood as `Friendica\Core\ClassName`, which is rarely what we expect.
+
+To avoid `Class Friendica\Core\ClassName not found` errors, all the `include`-declared class names have to be prepended with a `\`, it tells the autoloader not to look for the class in the namespace but in the global space where non-namespaced classes are set.
+If there are only a handful of references to a single non-namespaced class, just prepending `\` is enough. However, if there are many instance, we can use `use` again.
+
+````php
+namespace Friendica\Core;
+...
+if (\dbm::is_result($r)) {
+    ...
+}
+````
+````php
+namespace Friendica\Core;
+
+use \dbm;
+
+if (dbm::is_result($r)) {
+    ...
+}
+````
+
+## Remove any useless `require`
+
+Now that you successfully moved your class to the autoloaded `src` folder, there's no need to include this file anywhere in the app ever again.
+Please remove all the `require_once` mentions of the former file, as they will provoke a Fatal Error even if the class isn't used.
+
+## Miscellaneous tips
+
+When you are done with moving the class, please run `php util/typo.php` from the Friendica base directory to check for obvious mistakes.
+Howevever, this tool isn't bullet-proof, and a staging install of Friendica is recommended to test your class move without impairing your production server if you host one.
+
+Most of Friendica processes are run in the background, so make sure to turn on your debug log to check for errors that wouldn't show up while simply browsing Friendica.
+
+Check the class file for any magic constant `__FILE__` or `__DIR__`, as their value changed since you moved the class in the file tree.
+Most of the time it's used for debugging purposes but there can be instances where it's used to create cache folders for example.
+
+## Related
+
+* [Class autoloading](help/autoloader)
+* [Using Composer](help/Composer)
\ No newline at end of file
index 5568afeb5da9e64b04eed0005ba0b1141d4717bb..3cda8ab4662b96bac0a3a5c75b3c5df025cfe9e3 100644 (file)
@@ -52,7 +52,9 @@ Friendica uses [Composer](https://getcomposer.org) to manage dependencies librar
 
 It's a command-line tool that downloads required libraries into the `vendor` folder and makes any namespaced class in `src` available through the whole application through `boot.php`.
 
+* [Class autoloading](help/autoloader)
 * [Using Composer](help/Composer)
+* [How To Move Classes to `src`](help/Developer-How-To-Move-Classes-to-src)
 
 ###Coding standards
 
index 5490d171f8f02c47a7ec35c2a379562399838117..4cecec44e3f2b46c095731426110af3ac390aef7 100644 (file)
@@ -36,21 +36,25 @@ Friendica Documentation and Resources
 
 **Developer Manual**
 
-* [Where to get started?](help/Developers-Intro)
-* [Help on Github](help/Github)
-* [Help on Vagrant](help/Vagrant)
-* [How to translate Friendica](help/translations)
-* [Bugs and Issues](help/Bugs-and-Issues)
-* [Plugin Development](help/Plugins)
-* [Theme Development](help/themes)
-* [Smarty 3 Templates](help/smarty3-templates)
-* [Protocol Documentation](help/Protocol)
-* [Database schema documantation](help/database)
-* [Class Autoloading](help/autoloader)
-* [Using Composer](help/Composer)
-* [Code - Reference(Doxygen generated - sets cookies)](doc/html/)
-* [Twitter/GNU Social API Functions](help/api)
-
+* [Get started](help/Developers-Intro)
+* Set up development environment
+       * [Help on Github](help/Github)
+       * [Help on Vagrant](help/Vagrant)
+       * [Bugs and Issues](help/Bugs-and-Issues)
+* Code structure
+       * [Plugin Development](help/Plugins)
+       * [Theme Development](help/themes)
+       * [Smarty 3 Templates](help/smarty3-templates)
+* How To
+       * [Translate Friendica](help/translations)
+       * [Use Composer](help/Composer)
+       * [Move classes to `src`](help/Developer-How-To-Move-Classes-to-src)
+* Reference
+       * [Twitter/GNU Social API Functions](help/api)
+       * [Code (Doxygen generated - sets cookies)](doc/html/)
+       * [Protocol Documentation](help/Protocol)
+       * [Database schema documantation](help/database)
+       * [Class Autoloading](help/autoloader)
 
 **External Resources**
 
index b817339bb012e03d650b417358a2b03e8046996f..a8ea2c050398631a087b6fccd7dd17238ea05e3c 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, mysql, hash and openssl extensions
+* Curl, GD, PDO, MySQLi, hash 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 13424a5a48acf16e5b70d39959a71317b0d5e67b..e84418a453623e344d6d9d761f539be8c5877b83 100644 (file)
@@ -242,6 +242,12 @@ The receiving end might be off-line, there might be a high system load and so on
 Don't panic!
 Friendica will not queue messages for all time but will sort out *dead* nodes automatically after a while and remove messages from the queue then.
 
+## Server Blocklist
+
+This page allows to block all communications (inbound and outbound) with a specific domain name.
+Each blocked domain entry requires a reason that will be displayed on the [friendica](/friendica) page.
+Matching is exact, blocking a domain doesn't block subdomains.
+
 ## Federation Statistics
 
 The federation statistics page gives you a short summery of the nodes/servers/pods of the decentralized social network federation your node knows.
index b759b4697c0dbd51721745f2102939bbca8deed0..04abaa56328f5351b4b2d9cf40eee5669d0e18af 100644 (file)
-Friendica API\r
-===\r
-\r
-* [Home](help)\r
-\r
-The Friendica API aims to be compatible to the [GNU Social API](http://wiki.gnusocial.de/gnusocial:api) and the [Twitter API](https://dev.twitter.com/rest/public).\r
-\r
-Please refer to the linked documentation for further information.\r
-\r
-## Implemented API calls\r
-\r
-### General\r
-#### HTTP Method\r
-\r
-API endpoints can restrict the method used to request them.\r
-Using an invalid method results in HTTP error 405 "Method Not Allowed".\r
-\r
-In this document, the required method is listed after the endpoint name. "*" means every method can be used.\r
-\r
-#### Auth\r
-\r
-Friendica supports basic http auth and OAuth 1 to authenticate the user to the api.\r
-\r
-OAuth settings can be added by the user in web UI under /settings/oauth/\r
-\r
-In this document, endpoints which requires auth are marked with "AUTH" after endpoint name\r
-\r
-#### Unsupported parameters\r
-* cursor: Not implemented in GNU Social\r
-* trim_user: Not implemented in GNU Social\r
-* contributor_details: Not implemented in GNU Social\r
-* place_id: Not implemented in GNU Social\r
-* display_coordinates: Not implemented in GNU Social\r
-* include_rts: To-Do\r
-* include_my_retweet: Retweets in Friendica are implemented in a different way\r
-\r
-#### Different behaviour\r
-* screen_name: The nick name in friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken.\r
-* include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions.\r
-\r
-#### Return values\r
-* cid: Contact id of the user (important for "contact_allow" and "contact_deny")\r
-* network: network of the user\r
-\r
-#### Errors\r
-When an error occour in API call, an HTTP error code is returned, with an error message\r
-Usually:\r
-- 400 Bad Request: if parameter are missing or items can't be found\r
-- 403 Forbidden: if authenticated user is missing\r
-- 405 Method Not Allowed: if API was called with invalid method, eg. GET when API require POST\r
-- 501 Not Implemented: if requested API doesn't exists\r
-- 500 Internal Server Error: on other error contitions\r
-\r
-Error body is\r
-\r
-json:\r
-```\r
-       {\r
-               "error": "Specific error message",\r
-               "request": "API path requested",\r
-               "code": "HTTP error code"\r
-       }\r
-```\r
-\r
-xml:\r
-```\r
-       <status>\r
-               <error>Specific error message</error>\r
-               <request>API path requested</request>\r
-               <code>HTTP error code</code>\r
-       </status>\r
-```\r
-\r
----\r
-### account/rate_limit_status (*; AUTH)\r
-\r
----\r
-### account/verify_credentials (*; AUTH)\r
-#### Parameters\r
-\r
-* skip_status: Don't show the "status" field. (Default: false)\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### conversation/show (*; AUTH)\r
-Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id.\r
-\r
-#### Parameter\r
-* id: id of the post\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### direct_messages (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* getText: Defines the format of the status field. Can be "html" or "plain"\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-* friendica_verbose: "true" enables different error returns (default: "false")\r
-\r
-#### Unsupported parameters\r
-* skip_status\r
-\r
----\r
-### direct_messages/all (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* getText: Defines the format of the status field. Can be "html" or "plain"\r
-* friendica_verbose: "true" enables different error returns (default: "false")\r
-\r
----\r
-### direct_messages/conversation (*; AUTH)\r
-Shows all direct messages of a conversation\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* getText: Defines the format of the status field. Can be "html" or "plain"\r
-* uri: URI of the conversation\r
-* friendica_verbose: "true" enables different error returns (default: "false")\r
-\r
----\r
-### direct_messages/sent (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* getText: Defines the format of the status field. Can be "html" or "plain"\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-* friendica_verbose: "true" enables different error returns (default: "false")\r
-\r
----\r
-### direct_messages/new (POST,PUT; AUTH)\r
-#### Parameters\r
-* user_id: id of the user\r
-* screen_name: screen name (for technical reasons, this value is not unique!)\r
-* text: The message\r
-* replyto: ID of the replied direct message\r
-* title: Title of the direct message\r
-\r
----\r
-### direct_messages/destroy (POST,DELETE; AUTH)\r
-#### Parameters\r
-* id: id of the message to be deleted\r
-* include_entities: optional, currently not yet implemented\r
-* friendica_parenturi: optional, can be used for increased safety to delete only intended messages\r
-* friendica_verbose: "true" enables different error returns (default: "false")\r
-\r
-#### Return values\r
-\r
-On success:\r
-* JSON return as defined for Twitter API not yet implemented\r
-* on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"}\r
-\r
-On error:\r
-HTTP 400 BadRequest\r
-* on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"}\r
-\r
----\r
-### favorites (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* user_id\r
-* screen_name\r
-\r
-Favorites aren't displayed to other users, so "user_id" and "screen_name" are unsupported.\r
-Set this values will result in an empty array.\r
-\r
----\r
-### favorites/create (POST,PUT; AUTH)\r
-#### Parameters\r
-* id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### favorites/destroy (POST,DELETE; AUTH)\r
-#### Parameters\r
-* id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### followers/ids (*; AUTH)\r
-#### Parameters\r
-* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false)\r
-\r
-#### Unsupported parameters\r
-* user_id\r
-* screen_name\r
-* cursor\r
-\r
-Friendica doesn't allow showing followers of other users.\r
-\r
----\r
-### friends/ids (*; AUTH)\r
-#### Parameters\r
-* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false)\r
-\r
-#### Unsupported parameters\r
-* user_id\r
-* screen_name\r
-* cursor\r
-\r
-Friendica doesn't allow showing friends of other users.\r
-\r
----\r
-### help/test (*)\r
-\r
----\r
-### media/upload (POST,PUT; AUTH)\r
-#### Parameters\r
-* media: image data\r
-\r
----\r
-### oauth/request_token (*)\r
-#### Parameters\r
-* oauth_callback\r
-\r
-#### Unsupported parameters\r
-* x_auth_access_type\r
-\r
----\r
-### oauth/access_token (*)\r
-#### Parameters\r
-* oauth_verifier\r
-\r
-#### Unsupported parameters\r
-* x_auth_password\r
-* x_auth_username\r
-* x_auth_mode\r
-\r
----\r
-### statuses/destroy (POST,DELETE; AUTH)\r
-#### Parameters\r
-* id: message number\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* trim_user\r
-\r
----\r
-### statuses/followers (*; AUTH)\r
-\r
-#### Parameters\r
-\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### statuses/friends (*; AUTH)\r
-\r
-#### Parameters\r
-\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### statuses/friends_timeline (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* exclude_replies: don't show replies (default: false)\r
-* conversation_id: Shows all statuses of a given conversation.\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### statuses/home_timeline (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* exclude_replies: don't show replies (default: false)\r
-* conversation_id: Shows all statuses of a given conversation.\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### statuses/mentions (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### statuses/public_timeline (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* exclude_replies: don't show replies (default: false)\r
-* conversation_id: Shows all statuses of a given conversation.\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* trim_user\r
-\r
----\r
-### statuses/replies (*; AUTH)\r
-#### Parameters\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### statuses/retweet (POST,PUT; AUTH)\r
-#### Parameters\r
-* id: message number\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* trim_user\r
-\r
----\r
-### statuses/show (*; AUTH)\r
-#### Parameters\r
-* id: message number\r
-* conversation: if set to "1" show all messages of the conversation with the given id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* include_my_retweet\r
-* trim_user\r
-\r
----\r
-### statuses/update, statuses/update_with_media\r
-#### Parameters\r
-* title: Title of the status\r
-* status: Status in text format\r
-* htmlstatus: Status in HTML format\r
-* in_reply_to_status_id\r
-* lat: latitude\r
-* long: longitude\r
-* media: image data\r
-* source: Application name\r
-* group_allow\r
-* contact_allow\r
-* group_deny\r
-* contact_deny\r
-* network\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-* media_ids: (By now only a single value, no array)\r
-\r
-#### Unsupported parameters\r
-* trim_user\r
-* place_id\r
-* display_coordinates\r
-\r
----\r
-### statuses/user_timeline (*; AUTH)\r
-#### Parameters\r
-* user_id: id of the user\r
-* screen_name: screen name (for technical reasons, this value is not unique!)\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* exclude_replies: don't show replies (default: false)\r
-* conversation_id: Shows all statuses of a given conversation.\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-\r
-* include_rts\r
-* trim_user\r
-* contributor_details\r
-\r
----\r
-### statusnet/config (*)\r
-\r
----\r
-### statusnet/conversation (*; AUTH)\r
-It shows all direct answers (excluding the original post) to a given id.\r
-\r
-#### Parameter\r
-* id: id of the post\r
-* count: Items per page (default: 20)\r
-* page: page number\r
-* since_id: minimal id\r
-* max_id: maximum id\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
----\r
-### statusnet/version (*)\r
-\r
-#### Unsupported parameters\r
-* user_id\r
-* screen_name\r
-* cursor\r
-\r
-Friendica doesn't allow showing followers of other users.\r
-\r
----\r
-### users/search (*)\r
-#### Parameters\r
-* q: name of the user\r
-\r
-#### Unsupported parameters\r
-* page\r
-* count\r
-* include_entities\r
-\r
----\r
-### users/show (*)\r
-#### Parameters\r
-* user_id: id of the user\r
-* screen_name: screen name (for technical reasons, this value is not unique!)\r
-* include_entities: "true" shows entities for pictures and links (Default: false)\r
-\r
-#### Unsupported parameters\r
-* user_id\r
-* screen_name\r
-* cursor\r
-\r
-Friendica doesn't allow showing friends of other users.\r
-\r
-\r
-## Implemented API calls (not compatible with other APIs)\r
-\r
-\r
----\r
-### friendica/activity/<verb>\r
-#### parameters\r
-* id: item id\r
-\r
-Add or remove an activity from an item.\r
-'verb' can be one of:\r
-\r
-- like\r
-- dislike\r
-- attendyes\r
-- attendno\r
-- attendmaybe\r
-\r
-To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike"\r
-Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes".\r
-Attend verbs should be used only with event-related items (there is no check at the moment)\r
-\r
-#### Return values\r
-\r
-On success:\r
-json\r
-```"ok"```\r
-\r
-xml\r
-```<ok>true</ok>```\r
-\r
-On error:\r
-HTTP 400 BadRequest\r
-\r
----\r
-### friendica/group_show (*; AUTH)\r
-Return all or a specified group of the user with the containing contacts as array.\r
-\r
-#### Parameters\r
-* gid: optional, if not given, API returns all groups of the user\r
-\r
-#### Return values\r
-Array of:\r
-\r
-* name: name of the group\r
-* gid: id of the group\r
-* user: array of group members (return from api_get_user() function for each member)\r
-\r
-\r
----\r
-### friendica/group_delete (POST,DELETE; AUTH)\r
-delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted.\r
-\r
-#### Parameters\r
-* gid: id of the group to be deleted\r
-* name: name of the group to be deleted\r
-\r
-#### Return values\r
-Array of:\r
-\r
-* success: true if successfully deleted\r
-* gid: gid of the deleted group\r
-* name: name of the deleted group\r
-* status: „deleted“ if successfully deleted\r
-* wrong users: empty array\r
-\r
-\r
----\r
-### friendica/group_create (POST,PUT; AUTH)\r
-Create the group with the posted array of contacts as members.\r
-\r
-#### Parameters\r
-* name: name of the group to be created\r
-\r
-#### POST data\r
-JSON data as Array like the result of "users/group_show":\r
-\r
-* gid\r
-* name\r
-* array of users\r
-\r
-#### Return values\r
-Array of:\r
-\r
-* success: true if successfully created or reactivated\r
-* gid: gid of the created group\r
-* name: name of the created group\r
-* status: „missing user“ | „reactivated“ | „ok“\r
-* wrong users: array of users, which were not available in the contact table\r
-\r
-\r
----\r
-### friendica/group_update (POST)\r
-Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted).\r
-\r
-#### Parameters\r
-* gid: id of the group to be changed\r
-* name: name of the group to be changed\r
-\r
-#### POST data\r
-JSON data as array like the result of „users/group_show“:\r
-\r
-* gid\r
-* name\r
-* array of users\r
-\r
-#### Return values\r
-Array of:\r
-\r
-* success: true if successfully updated\r
-* gid: gid of the changed group\r
-* name: name of the changed group\r
-* status: „missing user“ | „ok“\r
-* wrong users: array of users, which were not available in the contact table\r
-\r
-\r
-\r
----\r
-### friendica/notifications (GET)\r
-Return last 50 notification for current user, ordered by date with unseen item on top\r
-\r
-#### Parameters\r
-none\r
-\r
-#### Return values\r
-Array of:\r
-\r
-* id: id of the note\r
-* type: type of notification as int (see NOTIFY_* constants in boot.php)\r
-* name: full name of the contact subject of the note\r
-* url: contact's profile url\r
-* photo: contact's profile photo\r
-* date: datetime string of the note\r
-* timestamp: timestamp of the node\r
-* date_rel: relative date of the note (eg. "1 hour ago")\r
-* msg: note message in bbcode\r
-* msg_html: note message in html\r
-* msg_plain: note message in plain text\r
-* link: link to note\r
-* seen: seen state: 0 or 1\r
-\r
-\r
----\r
-### friendica/notifications/seen (POST)\r
-Set note as seen, returns item object if possible\r
-\r
-#### Parameters\r
-id: id of the note to set seen\r
-\r
-#### Return values\r
-If the note is linked to an item, the item is returned, just like one of the "statuses/*_timeline" api.\r
-\r
-If the note is not linked to an item, a success status is returned:\r
-\r
-* "success" (json) | "&lt;status&gt;success&lt;/status&gt;" (xml)\r
-\r
-\r
----\r
-### friendica/photo (*; AUTH)\r
-#### Parameters\r
-* photo_id: Resource id of a photo.\r
-* scale: (optional) scale value of the photo\r
-\r
-Returns data of a picture with the given resource.\r
-If 'scale' isn't provided, returned data include full url to each scale of the photo.\r
-If 'scale' is set, returned data include image data base64 encoded.\r
-\r
-possibile scale value are:\r
-\r
-* 0: original or max size by server settings\r
-* 1: image with or height at <= 640\r
-* 2: image with or height at <= 320\r
-* 3: thumbnail 160x160\r
-* 4: Profile image at 175x175\r
-* 5: Profile image at 80x80\r
-* 6: Profile image at 48x48\r
-\r
-An image used as profile image has only scale 4-6, other images only 0-3\r
-\r
-#### Return values\r
-\r
-json\r
-```\r
-       {\r
-               "id": "photo id"\r
-               "created": "date(YYYY-MM-GG HH:MM:SS)",\r
-               "edited": "date(YYYY-MM-GG HH:MM:SS)",\r
-               "title": "photo title",\r
-               "desc": "photo description",\r
-               "album": "album name",\r
-               "filename": "original file name",\r
-               "type": "mime type",\r
-               "height": "number",\r
-               "width": "number",\r
-               "profile": "1 if is profile photo",\r
-               "link": {\r
-                       "<scale>": "url to image"\r
-                       ...\r
-               },\r
-               // if 'scale' is set\r
-               "datasize": "size in byte",\r
-               "data": "base64 encoded image data"\r
-       }\r
-```\r
-\r
-xml\r
-```\r
-       <photo>\r
-               <id>photo id</id>\r
-               <created>date(YYYY-MM-GG HH:MM:SS)</created>\r
-               <edited>date(YYYY-MM-GG HH:MM:SS)</edited>\r
-               <title>photo title</title>\r
-               <desc>photo description</desc>\r
-               <album>album name</album>\r
-               <filename>original file name</filename>\r
-               <type>mime type</type>\r
-               <height>number</height>\r
-               <width>number</width>\r
-               <profile>1 if is profile photo</profile>\r
-               <links type="array">\r
-               <link type="mime type" scale="scale number" href="image url"/>\r
-                       ...\r
-               </links>\r
-       </photo>\r
-```\r
-\r
----\r
-### friendica/photos/list (*; AUTH)\r
-\r
-Returns a list of all photo resources of the logged in user.\r
-\r
-#### Return values\r
-\r
-json\r
-```\r
-       [\r
-               {\r
-                       id: "resource_id",\r
-                       album: "album name",\r
-                       filename: "original file name",\r
-                       type: "image mime type",\r
-                       thumb: "url to thumb sized image"\r
-               },\r
-               ...\r
-       ]\r
-```\r
-\r
-xml\r
-```\r
-       <photos type="array">\r
-               <photo id="resource_id"\r
-               album="album name"\r
-               filename="original file name"\r
-               type="image mime type">\r
-                       "url to thumb sized image"\r
-               </photo>\r
-               ...\r
-       </photos>\r
-```\r
-\r
----\r
-### friendica/direct_messages_setseen (GET; AUTH)\r
-#### Parameters\r
-* id: id of the message to be updated as seen\r
-\r
-#### Return values\r
-\r
-On success:\r
-* JSON return {"result":"ok","message":"message set to seen"}\r
-\r
-On error:\r
-* different JSON returns {"result":"error","message":"xyz"}\r
-\r
----\r
-### friendica/direct_messages_search (GET; AUTH)\r
-#### Parameters\r
-* searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored)\r
-\r
-#### Return values\r
-Returns only tested with JSON, XML might work as well.\r
-\r
-On success:\r
-* JSON return {"success":"true","search_results": array of found messages}\r
-* JSOn return {"success":"false","search_results":"nothing found"}\r
-\r
-On error:\r
-* different JSON returns {"result":"error","message":"searchstring not specified"}\r
-\r
----\r
-### friendica/profile/show (GET; AUTH)\r
-show data of all profiles or a single profile of the authenticated user\r
-\r
-#### Parameters\r
-* profile_id: id of the profile to be returned (optional, if omitted all profiles are returned by default)\r
-\r
-#### Return values\r
-On success: Array of:\r
-\r
-* multi_profiles: true if user has activated multi_profiles\r
-* global_dir: URL of the global directory set in server settings\r
-* friendica_owner: user data of the authenticated user\r
-* profiles: array of the profile data\r
-\r
-On error: \r
-HTTP 403 Forbidden: when no authentication provided\r
-HTTP 400 Bad Request: if given profile_id is not in db or not assigned to authenticated user\r
-\r
-General description of profile data in API returns:\r
-* profile_id\r
-* profile_name\r
-* is_default: true if this is the public profile\r
-* hide_friends: true if friends are hidden\r
-* profile_photo\r
-* profile_thumb\r
-* publish: true if published on the server's local directory\r
-* net_publish: true if published to global_dir\r
-* description ... homepage: different data fields from 'profile' table in database\r
-* users: array with the users allowed to view this profile (empty if is_default=true)\r
-\r
-\r
----\r
-## Not Implemented API calls\r
-The following API calls are implemented in GNU Social but not in Friendica: (incomplete)\r
-\r
-* statuses/retweets_of_me\r
-* friendships/create\r
-* friendships/destroy\r
-* friendships/exists\r
-* friendships/show\r
-* account/update_profile_background_image\r
-* account/update_profile_image\r
-* blocks/create\r
-* blocks/destroy\r
-\r
-The following API calls from the Twitter API aren't implemented neither in Friendica nor in GNU Social:\r
-\r
-* statuses/mentions_timeline\r
-* statuses/retweets/:id\r
-* statuses/oembed\r
-* statuses/retweeters/ids\r
-* statuses/lookup\r
-* direct_messages/show\r
-* search/tweets\r
-* friendships/no_retweets/ids\r
-* friendships/incoming\r
-* friendships/outgoing\r
-* friendships/update\r
-* friends/list\r
-* friendships/lookup\r
-* account/settings\r
-* account/update_delivery_device\r
-* account/update_profile\r
-* account/update_profile_background_image\r
-* account/update_profile_image\r
-* blocks/list\r
-* blocks/ids\r
-* users/lookup\r
-* users/show\r
-* users/search\r
-* account/remove_profile_banner\r
-* account/update_profile_banner\r
-* users/profile_banner\r
-* mutes/users/create\r
-* mutes/users/destroy\r
-* mutes/users/ids\r
-* mutes/users/list\r
-* users/suggestions/:slug\r
-* users/suggestions\r
-* users/suggestions/:slug/members\r
-* favorites/list\r
-* lists/list\r
-* lists/statuses\r
-* lists/members/destroy\r
-* lists/memberships\r
-* lists/subscribers\r
-* lists/subscribers/create\r
-* lists/subscribers/show\r
-* lists/subscribers/destroy\r
-* lists/members/create_all\r
-* lists/members/show\r
-* lists/members\r
-* lists/members/create\r
-* lists/destroy\r
-* lists/update\r
-* lists/create\r
-* lists/show\r
-* lists/subscriptions\r
-* lists/members/destroy_all\r
-* lists/ownerships\r
-* saved_searches/list\r
-* saved_searches/show/:id\r
-* saved_searches/create\r
-* saved_searches/destroy/:id\r
-* geo/id/:place_id\r
-* geo/reverse_geocode\r
-* geo/search\r
-* geo/place\r
-* trends/place\r
-* trends/available\r
-* help/configuration\r
-* help/languages\r
-* help/privacy\r
-* help/tos\r
-* trends/closest\r
-* users/report_spam\r
-\r
----\r
-\r
----\r
-\r
-## Usage Examples\r
-### BASH / cURL\r
-Betamax has documentated some example API usage from a [bash script](https://en.wikipedia.org/wiki/Bash_(Unix_shell) employing [curl](https://en.wikipedia.org/wiki/CURL) (see [his posting](https://betamax65.de/display/betamax65/43539)).\r
-\r
-/usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post"\r
-\r
-### Python\r
-The [RSStoFriedika](https://github.com/pafcu/RSStoFriendika) code can be used as an example of how to use the API with python. The lines for posting are located at [line 21](https://github.com/pafcu/RSStoFriendika/blob/master/RSStoFriendika.py#L21) and following.\r
-\r
-def tweet(server, message, group_allow=None):\r
-url = server + '/api/statuses/update'\r
-urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True))\r
-\r
-There is also a [module for python 3](https://bitbucket.org/tobiasd/python-friendica) for using the API.\r
+Friendica API
+===
+
+* [Home](help)
+
+The Friendica API aims to be compatible to the [GNU Social API](http://wiki.gnusocial.de/gnusocial:api) and the [Twitter API](https://dev.twitter.com/rest/public).
+
+Please refer to the linked documentation for further information.
+
+## Implemented API calls
+
+### General
+#### HTTP Method
+
+API endpoints can restrict the method used to request them.
+Using an invalid method results in HTTP error 405 "Method Not Allowed".
+
+In this document, the required method is listed after the endpoint name. "*" means every method can be used.
+
+#### Auth
+
+Friendica supports basic http auth and OAuth 1 to authenticate the user to the api.
+
+OAuth settings can be added by the user in web UI under /settings/oauth/
+
+In this document, endpoints which requires auth are marked with "AUTH" after endpoint name
+
+#### Unsupported parameters
+* cursor: Not implemented in GNU Social
+* trim_user: Not implemented in GNU Social
+* contributor_details: Not implemented in GNU Social
+* place_id: Not implemented in GNU Social
+* display_coordinates: Not implemented in GNU Social
+* include_rts: To-Do
+* include_my_retweet: Retweets in Friendica are implemented in a different way
+
+#### Different behaviour
+* screen_name: The nick name in friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken.
+* include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions.
+
+#### Return values
+* cid: Contact id of the user (important for "contact_allow" and "contact_deny")
+* network: network of the user
+
+#### Errors
+When an error occour in API call, an HTTP error code is returned, with an error message
+Usually:
+- 400 Bad Request: if parameter are missing or items can't be found
+- 403 Forbidden: if authenticated user is missing
+- 405 Method Not Allowed: if API was called with invalid method, eg. GET when API require POST
+- 501 Not Implemented: if requested API doesn't exists
+- 500 Internal Server Error: on other error contitions
+
+Error body is
+
+json:
+```
+       {
+               "error": "Specific error message",
+               "request": "API path requested",
+               "code": "HTTP error code"
+       }
+```
+
+xml:
+```
+       <status>
+               <error>Specific error message</error>
+               <request>API path requested</request>
+               <code>HTTP error code</code>
+       </status>
+```
+
+---
+### account/rate_limit_status (*; AUTH)
+
+---
+### account/verify_credentials (*; AUTH)
+#### Parameters
+
+* skip_status: Don't show the "status" field. (Default: false)
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### conversation/show (*; AUTH)
+Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id.
+
+#### Parameter
+* id: id of the post
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### direct_messages (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* getText: Defines the format of the status field. Can be "html" or "plain"
+* include_entities: "true" shows entities for pictures and links (Default: false)
+* friendica_verbose: "true" enables different error returns (default: "false")
+
+#### Unsupported parameters
+* skip_status
+
+---
+### direct_messages/all (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* getText: Defines the format of the status field. Can be "html" or "plain"
+* friendica_verbose: "true" enables different error returns (default: "false")
+
+---
+### direct_messages/conversation (*; AUTH)
+Shows all direct messages of a conversation
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* getText: Defines the format of the status field. Can be "html" or "plain"
+* uri: URI of the conversation
+* friendica_verbose: "true" enables different error returns (default: "false")
+
+---
+### direct_messages/sent (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* getText: Defines the format of the status field. Can be "html" or "plain"
+* include_entities: "true" shows entities for pictures and links (Default: false)
+* friendica_verbose: "true" enables different error returns (default: "false")
+
+---
+### direct_messages/new (POST,PUT; AUTH)
+#### Parameters
+* user_id: id of the user
+* screen_name: screen name (for technical reasons, this value is not unique!)
+* text: The message
+* replyto: ID of the replied direct message
+* title: Title of the direct message
+
+---
+### direct_messages/destroy (POST,DELETE; AUTH)
+#### Parameters
+* id: id of the message to be deleted
+* include_entities: optional, currently not yet implemented
+* friendica_parenturi: optional, can be used for increased safety to delete only intended messages
+* friendica_verbose: "true" enables different error returns (default: "false")
+
+#### Return values
+
+On success:
+* JSON return as defined for Twitter API not yet implemented
+* on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"}
+
+On error:
+HTTP 400 BadRequest
+* on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"}
+
+---
+### externalprofile/show (*)
+#### Parameters
+* profileurl: profile url
+
+---
+### favorites (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* user_id
+* screen_name
+
+Favorites aren't displayed to other users, so "user_id" and "screen_name" are unsupported.
+Set this values will result in an empty array.
+
+---
+### favorites/create (POST,PUT; AUTH)
+#### Parameters
+* id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### favorites/destroy (POST,DELETE; AUTH)
+#### Parameters
+* id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### followers/ids (*; AUTH)
+#### Parameters
+* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false)
+
+#### Unsupported parameters
+* user_id
+* screen_name
+* cursor
+
+Friendica doesn't allow showing followers of other users.
+
+---
+### friends/ids (*; AUTH)
+#### Parameters
+* stringify_ids: Should the id numbers be sent as text (true) or number (false)? (default: false)
+
+#### Unsupported parameters
+* user_id
+* screen_name
+* cursor
+
+Friendica doesn't allow showing friends of other users.
+
+---
+### help/test (*)
+
+---
+### media/upload (POST,PUT; AUTH)
+#### Parameters
+* media: image data
+
+---
+### oauth/request_token (*)
+#### Parameters
+* oauth_callback
+
+#### Unsupported parameters
+* x_auth_access_type
+
+---
+### oauth/access_token (*)
+#### Parameters
+* oauth_verifier
+
+#### Unsupported parameters
+* x_auth_password
+* x_auth_username
+* x_auth_mode
+
+---
+### statuses/destroy (POST,DELETE; AUTH)
+#### Parameters
+* id: message number
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* trim_user
+
+---
+### statuses/followers (*; AUTH)
+
+#### Parameters
+
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### statuses/friends (*; AUTH)
+
+#### Parameters
+
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### statuses/friends_timeline (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* exclude_replies: don't show replies (default: false)
+* conversation_id: Shows all statuses of a given conversation.
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### statuses/home_timeline (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* exclude_replies: don't show replies (default: false)
+* conversation_id: Shows all statuses of a given conversation.
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### statuses/mentions (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### statuses/public_timeline (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* exclude_replies: don't show replies (default: false)
+* conversation_id: Shows all statuses of a given conversation.
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* trim_user
+
+---
+### statuses/replies (*; AUTH)
+#### Parameters
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### statuses/retweet (POST,PUT; AUTH)
+#### Parameters
+* id: message number
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* trim_user
+
+---
+### statuses/show (*; AUTH)
+#### Parameters
+* id: message number
+* conversation: if set to "1" show all messages of the conversation with the given id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* include_my_retweet
+* trim_user
+
+---
+### statuses/update, statuses/update_with_media
+#### Parameters
+* title: Title of the status
+* status: Status in text format
+* htmlstatus: Status in HTML format
+* in_reply_to_status_id
+* lat: latitude
+* long: longitude
+* media: image data
+* source: Application name
+* group_allow
+* contact_allow
+* group_deny
+* contact_deny
+* network
+* include_entities: "true" shows entities for pictures and links (Default: false)
+* media_ids: (By now only a single value, no array)
+
+#### Unsupported parameters
+* trim_user
+* place_id
+* display_coordinates
+
+---
+### statuses/user_timeline (*; AUTH)
+#### Parameters
+* user_id: id of the user
+* screen_name: screen name (for technical reasons, this value is not unique!)
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* exclude_replies: don't show replies (default: false)
+* conversation_id: Shows all statuses of a given conversation.
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+
+* include_rts
+* trim_user
+* contributor_details
+
+---
+### statusnet/config (*)
+
+---
+### statusnet/conversation (*; AUTH)
+It shows all direct answers (excluding the original post) to a given id.
+
+#### Parameter
+* id: id of the post
+* count: Items per page (default: 20)
+* page: page number
+* since_id: minimal id
+* max_id: maximum id
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+---
+### statusnet/version (*)
+
+#### Unsupported parameters
+* user_id
+* screen_name
+* cursor
+
+Friendica doesn't allow showing followers of other users.
+
+---
+### users/search (*)
+#### Parameters
+* q: name of the user
+
+#### Unsupported parameters
+* page
+* count
+* include_entities
+
+---
+### users/show (*)
+#### Parameters
+* user_id: id of the user
+* screen_name: screen name (for technical reasons, this value is not unique!)
+* include_entities: "true" shows entities for pictures and links (Default: false)
+
+#### Unsupported parameters
+* user_id
+* screen_name
+* cursor
+
+Friendica doesn't allow showing friends of other users.
+
+
+---
+### account/update_profile_image (POST; AUTH)
+#### Parameters
+* image: image data as base64 (Twitter has a limit of 700kb, Friendica allows more)
+* profile_id (optional): id of the profile for which the image should be used, default is changing the default profile
+
+uploads a new profile image (scales 4-6) to database, changes default or specified profile to the new photo
+
+#### Return values
+
+On success:
+* JSON return: returns the updated user details (see account/verify_credentials)
+
+On error:
+* 403 FORBIDDEN: if not authenticated
+* 400 BADREQUEST: "no media data submitted", "profile_id not available"
+* 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server",
+                       "image size exceeds Friendica Config setting (uploaded size: x)",
+                       "unable to process image data",
+                       "image upload failed"
+
+
+## Implemented API calls (not compatible with other APIs)
+
+
+---
+### friendica/activity/<verb>
+#### parameters
+* id: item id
+
+Add or remove an activity from an item.
+'verb' can be one of:
+
+- like
+- dislike
+- attendyes
+- attendno
+- attendmaybe
+
+To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike"
+Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes".
+Attend verbs should be used only with event-related items (there is no check at the moment)
+
+#### Return values
+
+On success:
+json
+```"ok"```
+
+xml
+```<ok>true</ok>```
+
+On error:
+HTTP 400 BadRequest
+
+---
+### friendica/group_show (*; AUTH)
+Return all or a specified group of the user with the containing contacts as array.
+
+#### Parameters
+* gid: optional, if not given, API returns all groups of the user
+
+#### Return values
+Array of:
+
+* name: name of the group
+* gid: id of the group
+* user: array of group members (return from api_get_user() function for each member)
+
+
+---
+### friendica/group_delete (POST,DELETE; AUTH)
+delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted.
+
+#### Parameters
+* gid: id of the group to be deleted
+* name: name of the group to be deleted
+
+#### Return values
+Array of:
+
+* success: true if successfully deleted
+* gid: gid of the deleted group
+* name: name of the deleted group
+* status: „deleted“ if successfully deleted
+* wrong users: empty array
+
+
+---
+### friendica/group_create (POST,PUT; AUTH)
+Create the group with the posted array of contacts as members.
+
+#### Parameters
+* name: name of the group to be created
+
+#### POST data
+JSON data as Array like the result of "users/group_show":
+
+* gid
+* name
+* array of users
+
+#### Return values
+Array of:
+
+* success: true if successfully created or reactivated
+* gid: gid of the created group
+* name: name of the created group
+* status: „missing user“ | „reactivated“ | „ok“
+* wrong users: array of users, which were not available in the contact table
+
+
+---
+### friendica/group_update (POST)
+Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted).
+
+#### Parameters
+* gid: id of the group to be changed
+* name: name of the group to be changed
+
+#### POST data
+JSON data as array like the result of „users/group_show“:
+
+* gid
+* name
+* array of users
+
+#### Return values
+Array of:
+
+* success: true if successfully updated
+* gid: gid of the changed group
+* name: name of the changed group
+* status: „missing user“ | „ok“
+* wrong users: array of users, which were not available in the contact table
+
+
+
+---
+### friendica/notifications (GET)
+Return last 50 notification for current user, ordered by date with unseen item on top
+
+#### Parameters
+none
+
+#### Return values
+Array of:
+
+* id: id of the note
+* type: type of notification as int (see NOTIFY_* constants in boot.php)
+* name: full name of the contact subject of the note
+* url: contact's profile url
+* photo: contact's profile photo
+* date: datetime string of the note
+* timestamp: timestamp of the node
+* date_rel: relative date of the note (eg. "1 hour ago")
+* msg: note message in bbcode
+* msg_html: note message in html
+* msg_plain: note message in plain text
+* link: link to note
+* seen: seen state: 0 or 1
+
+
+---
+### friendica/notifications/seen (POST)
+Set note as seen, returns item object if possible
+
+#### Parameters
+id: id of the note to set seen
+
+#### Return values
+If the note is linked to an item, the item is returned, just like one of the "statuses/*_timeline" api.
+
+If the note is not linked to an item, a success status is returned:
+
+* "success" (json) | "&lt;status&gt;success&lt;/status&gt;" (xml)
+
+
+---
+### friendica/photo (*; AUTH)
+#### Parameters
+* photo_id: Resource id of a photo.
+* scale: (optional) scale value of the photo
+
+Returns data of a picture with the given resource.
+If 'scale' isn't provided, returned data include full url to each scale of the photo.
+If 'scale' is set, returned data include image data base64 encoded.
+
+possibile scale value are:
+
+* 0: original or max size by server settings
+* 1: image with or height at <= 640
+* 2: image with or height at <= 320
+* 3: thumbnail 160x160
+* 4: Profile image at 175x175
+* 5: Profile image at 80x80
+* 6: Profile image at 48x48
+
+An image used as profile image has only scale 4-6, other images only 0-3
+
+#### Return values
+
+json
+```
+       {
+               "id": "photo id"
+               "created": "date(YYYY-MM-GG HH:MM:SS)",
+               "edited": "date(YYYY-MM-GG HH:MM:SS)",
+               "title": "photo title",
+               "desc": "photo description",
+               "album": "album name",
+               "filename": "original file name",
+               "type": "mime type",
+               "height": "number",
+               "width": "number",
+               "profile": "1 if is profile photo",
+               "link": {
+                       "<scale>": "url to image"
+                       ...
+               },
+               // if 'scale' is set
+               "datasize": "size in byte",
+               "data": "base64 encoded image data"
+       }
+```
+
+xml
+```
+       <photo>
+               <id>photo id</id>
+               <created>date(YYYY-MM-GG HH:MM:SS)</created>
+               <edited>date(YYYY-MM-GG HH:MM:SS)</edited>
+               <title>photo title</title>
+               <desc>photo description</desc>
+               <album>album name</album>
+               <filename>original file name</filename>
+               <type>mime type</type>
+               <height>number</height>
+               <width>number</width>
+               <profile>1 if is profile photo</profile>
+               <links type="array">
+               <link type="mime type" scale="scale number" href="image url"/>
+                       ...
+               </links>
+       </photo>
+```
+
+---
+### friendica/photos/list (*; AUTH)
+
+Returns a list of all photo resources of the logged in user.
+
+#### Return values
+
+json
+```
+       [
+               {
+                       id: "resource_id",
+                       album: "album name",
+                       filename: "original file name",
+                       type: "image mime type",
+                       thumb: "url to thumb sized image"
+               },
+               ...
+       ]
+```
+
+xml
+```
+       <photos type="array">
+               <photo id="resource_id"
+               album="album name"
+               filename="original file name"
+               type="image mime type">
+                       "url to thumb sized image"
+               </photo>
+               ...
+       </photos>
+```
+
+---
+### friendica/photoalbum/delete (POST,DELETE; AUTH)
+#### Parameters
+* album: name of the album to be deleted
+
+deletes all images with the specified album name, is not reversible -> ensure that client is asking user for being sure to do this
+
+#### Return values
+
+On success:
+* JSON return {"result":"deleted","message":"album 'xyz' with all containing photos has been deleted."}
+
+On error:
+* 403 FORBIDDEN: if not authenticated
+* 400 BADREQUEST: "no albumname specified", "album not available"
+* 500 INTERNALSERVERERROR: "problem with deleting item occured", "unknown error - deleting from database failed"
+
+
+---
+### friendica/photoalbum/update (POST,PUT; AUTH)
+#### Parameters
+* album: name of the album to be updated
+* album_new: new name of the album
+
+changes the album name to album_new for all photos in album
+
+#### Return values
+
+On success:
+* JSON return {"result":"updated","message":"album 'abc' with all containing photos has been renamed to 'xyz'."}
+
+On error:
+* 403 FORBIDDEN: if not authenticated
+* 400 BADREQUEST: "no albumname specified", "no new albumname specified", "album not available"
+* 500 INTERNALSERVERERROR: "unknown error - updating in database failed"
+
+
+---
+### friendica/photo/create (POST; AUTH)
+### friendica/photo/update (POST; AUTH)
+#### Parameters
+* photo_id (optional): if specified the photo with this id will be updated
+* media (optional): image data as base64, only optional if photo_id is specified (new upload must have media)
+* desc (optional): description for the photo, updated when photo_id is specified
+* album: name of the album to be deleted (always necessary)
+* album_new (optional): can be used to change the album of a single photo if photo_id is specified
+* allow_cid/allow_gid/deny_cid/deny_gid (optional): on create: empty string or omitting = public photo, specify in format '```<x><y><z>```' for private photo;
+                       on update: keys need to be present with empty values for setting a private photo now to public
+
+both calls point to one function for creating AND updating photos.
+Saves data for the scales 0-2 to database (see above for scale description).
+Call adds non-visible entries to items table to enable authenticated contacts to comment/like the photo.
+Client should pay attention to the fact that updated access rights are not transferred to the contacts. i.e. public photos remain publicly visible if they have been commented/liked before setting visibility back to a limited group.
+Currently it is best way to inform user that updating rights is not the best way, offer a solution to add photo as a new photo with the new rights.
+
+#### Return values
+
+On success:
+* new photo uploaded: JSON return with photo data (see friendica/photo)
+* photo updated - changed photo data: JSON return with photo data (see friendica/photo)
+* photo updated - changed info: JSON return {"result":"updated","message":"Image id 'xyz' has been updated."}
+* photo updated - nothing changed: JSON return {"result":"cancelled","message":"Nothing to update for image id 'xyz'."}
+
+On error:
+* 403 FORBIDDEN: if not authenticated
+* 400 BADREQUEST: "no albumname specified", "no media data submitted", "photo not available", "acl data invalid"
+* 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server",
+                       "image size exceeds Friendica Config setting (uploaded size: x)",
+                       "unable to process image data",
+                       "image upload failed",
+                       "unknown error - uploading photo failed, see Friendica log for more information",
+                       "unknown error - update photo entry in database failed",
+                       "unknown error - this error on uploading or updating a photo should never happen"
+
+
+---
+### friendica/photo/delete (DELETE; AUTH)
+#### Parameters
+* photo_id: id of the photo to be deleted
+
+deletes a single image with the specified id, is not reversible -> ensure that client is asking user for being sure to do this
+Sets item table entries for this photo to deleted = 1
+
+#### Return values
+
+On success:
+* JSON return {"result":"deleted","message":"photo with id 'xyz' has been deleted from server."}
+
+On error:
+* 403 FORBIDDEN: if not authenticated
+* 400 BADREQUEST: "no photo_id specified", "photo not available"
+* 500 INTERNALSERVERERROR: "unknown error on deleting photo", "problem with deleting items occurred"
+
+
+---
+### friendica/direct_messages_setseen (GET; AUTH)
+#### Parameters
+* id: id of the message to be updated as seen
+
+#### Return values
+
+On success:
+* JSON return {"result":"ok","message":"message set to seen"}
+
+On error:
+* different JSON returns {"result":"error","message":"xyz"}
+
+---
+### friendica/direct_messages_search (GET; AUTH)
+#### Parameters
+* searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored)
+
+#### Return values
+Returns only tested with JSON, XML might work as well.
+
+On success:
+* JSON return {"success":"true","search_results": array of found messages}
+* JSOn return {"success":"false","search_results":"nothing found"}
+
+On error:
+* different JSON returns {"result":"error","message":"searchstring not specified"}
+
+---
+### friendica/profile/show (GET; AUTH)
+show data of all profiles or a single profile of the authenticated user
+
+#### Parameters
+* profile_id: id of the profile to be returned (optional, if omitted all profiles are returned by default)
+
+#### Return values
+On success: Array of:
+
+* multi_profiles: true if user has activated multi_profiles
+* global_dir: URL of the global directory set in server settings
+* friendica_owner: user data of the authenticated user
+* profiles: array of the profile data
+
+On error:
+HTTP 403 Forbidden: when no authentication provided
+HTTP 400 Bad Request: if given profile_id is not in db or not assigned to authenticated user
+
+General description of profile data in API returns:
+* profile_id
+* profile_name
+* is_default: true if this is the public profile
+* hide_friends: true if friends are hidden
+* profile_photo
+* profile_thumb
+* publish: true if published on the server's local directory
+* net_publish: true if published to global_dir
+* description ... homepage: different data fields from 'profile' table in database
+* users: array with the users allowed to view this profile (empty if is_default=true)
+
+
+---
+## Not Implemented API calls
+The following API calls are implemented in GNU Social but not in Friendica: (incomplete)
+
+* statuses/retweets_of_me
+* friendships/create
+* friendships/destroy
+* friendships/exists
+* friendships/show
+* account/update_profile_background_image
+* blocks/create
+* blocks/destroy
+
+The following API calls from the Twitter API aren't implemented neither in Friendica nor in GNU Social:
+
+* statuses/mentions_timeline
+* statuses/retweets/:id
+* statuses/oembed
+* statuses/retweeters/ids
+* statuses/lookup
+* direct_messages/show
+* search/tweets
+* friendships/no_retweets/ids
+* friendships/incoming
+* friendships/outgoing
+* friendships/update
+* friends/list
+* friendships/lookup
+* account/settings
+* account/update_delivery_device
+* account/update_profile
+* account/update_profile_background_image
+* blocks/list
+* blocks/ids
+* users/lookup
+* users/show
+* users/search
+* account/remove_profile_banner
+* account/update_profile_banner
+* users/profile_banner
+* mutes/users/create
+* mutes/users/destroy
+* mutes/users/ids
+* mutes/users/list
+* users/suggestions/:slug
+* users/suggestions
+* users/suggestions/:slug/members
+* favorites/list
+* lists/list
+* lists/statuses
+* lists/members/destroy
+* lists/memberships
+* lists/subscribers
+* lists/subscribers/create
+* lists/subscribers/show
+* lists/subscribers/destroy
+* lists/members/create_all
+* lists/members/show
+* lists/members
+* lists/members/create
+* lists/destroy
+* lists/update
+* lists/create
+* lists/show
+* lists/subscriptions
+* lists/members/destroy_all
+* lists/ownerships
+* saved_searches/list
+* saved_searches/show/:id
+* saved_searches/create
+* saved_searches/destroy/:id
+* geo/id/:place_id
+* geo/reverse_geocode
+* geo/search
+* geo/place
+* trends/place
+* trends/available
+* help/configuration
+* help/languages
+* help/privacy
+* help/tos
+* trends/closest
+* users/report_spam
+
+---
+
+---
+
+## Usage Examples
+### BASH / cURL
+Betamax has documentated some example API usage from a [bash script](https://en.wikipedia.org/wiki/Bash_(Unix_shell) employing [curl](https://en.wikipedia.org/wiki/CURL) (see [his posting](https://betamax65.de/display/betamax65/43539)).
+
+/usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post"
+
+### Python
+The [RSStoFriedika](https://github.com/pafcu/RSStoFriendika) code can be used as an example of how to use the API with python. The lines for posting are located at [line 21](https://github.com/pafcu/RSStoFriendika/blob/master/RSStoFriendika.py#L21) and following.
+
+def tweet(server, message, group_allow=None):
+url = server + '/api/statuses/update'
+urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True))
+
+There is also a [module for python 3](https://bitbucket.org/tobiasd/python-friendica) for using the API.
index 83f1010440694cf0fb2109afcf86a11dedcc38ce..5b894cb1a013f9286a9c26671715ea73be4057ed 100644 (file)
-Autoloader with Composer\r
-==========\r
-\r
-* [Home](help)\r
-  * [Developer Intro](help/Developers-Intro)\r
-\r
-Friendica uses [Composer](https://getcomposer.org) to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.\r
-\r
-It's a command-line tool that downloads required libraries into the `vendor` folder and makes any namespaced class in `src` available through the whole application through `boot.php`.\r
-\r
-* [Using Composer](help/Composer)\r
-\r
-## A quick introduction to class autoloading\r
-\r
-The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once".\r
-\r
-Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently `vendor` and `src`)\r
-\r
-Under the hood, Composer registers a callback with [`spl_autoload_register()`](http://php.net/manual/en/function.spl-autoload-register.php) that receives a class name as an argument and includes the corresponding class definition file.\r
-For more info about PHP autoloading, please refer to the [official PHP documentation](http://php.net/manual/en/language.oop5.autoload.php).\r
-\r
-### Example\r
-\r
-Let's say you have a PHP file in `src/` that define a very useful class:\r
-\r
-```php\r
-       // src/ItemsManager.php\r
-       <?php\r
-       namespace \Friendica;\r
-\r
-       class ItemsManager {\r
-               public function getAll() { ... }\r
-               public function getByID($id) { ... }\r
-       }\r
-```\r
-\r
-The class `ItemsManager` has been declared in the `Friendica` namespace.\r
-Namespaces are useful to keep classes separated and avoid names conflicts (could be that a library you want to use also defines a class named `ItemsManager`, but as long as it is in another namespace, you don't have any problem)\r
-\r
-Let's say now that you need to load some items in a view, maybe in a fictional `mod/network.php`.\r
-In order for the Composer autoloader to work, it must first be included. In Friendica this is already done at the top of `boot.php`, with `require_once('vendor/autoload.php');`.\r
-\r
-The code will be something like:\r
-\r
-```php\r
-       // mod/network.php\r
-       <?php\r
-\r
-       function network_content(App $a) {\r
-               $itemsmanager = new \Friendica\ItemsManager();\r
-               $items = $itemsmanager->getAll();\r
-\r
-               // pass $items to template\r
-               // return result\r
-       }\r
-```\r
-\r
-That's a quite simple example, but look: no `require()`!\r
-If you need to use a class, you can simply use it and you don't need to do anything else.\r
-\r
-Going further: now we have a bunch of `*Manager` classes that cause some code duplication, let's define a `BaseManager` class, where we move all common code between all managers:\r
-\r
-```php\r
-       // src/BaseManager.php\r
-       <?php\r
-       namespace \Friendica;\r
-\r
-       class BaseManager {\r
-               public function thatFunctionEveryManagerUses() { ... }\r
-       }\r
-```\r
-\r
-and then let's change the ItemsManager class to use this code\r
-\r
-```php\r
-       // src/ItemsManager.php\r
-       <?php\r
-       namespace \Friendica;\r
-\r
-       class ItemsManager extends BaseManager {\r
-               public function getAll() { ... }\r
-               public function getByID($id) { ... }\r
-       }\r
-```\r
-\r
-Even though we didn't explicitly include the `src/BaseManager.php` file, the autoloader will when this class is first defined, because it is referenced as a parent class.\r
-It works with the "BaseManager" example here and it works when we need to call static methods:\r
-\r
-```php\r
-       // src/Dfrn.php\r
-       <?php\r
-       namespace \Friendica;\r
-\r
-       class Dfrn {\r
-               public static function  mail($item, $owner) { ... }\r
-       }\r
-```\r
-\r
-```php\r
-       // mod/mail.php\r
-       <?php\r
-\r
-       mail_post($a){\r
-               ...\r
-               \Friendica\dfrn::mail($item, $owner);\r
-               ...\r
-       }\r
-```\r
-\r
-If your code is in same namespace as the class you need, you don't need to prepend it:\r
-\r
-```php\r
-       // include/delivery.php\r
-       <?php\r
-\r
-       namespace \Friendica;\r
-\r
-       // this is the same content of current include/delivery.php,\r
-       // but has been declared to be in "Friendica" namespace\r
-\r
-       [...]\r
-       switch($contact['network']) {\r
-               case NETWORK_DFRN:\r
-                       if ($mail) {\r
-                               $item['body'] = ...\r
-                               $atom = Dfrn::mail($item, $owner);\r
-                       } elseif ($fsuggest) {\r
-                               $atom = Dfrn::fsuggest($item, $owner);\r
-                               q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item['id']));\r
-                       } elseif ($relocate)\r
-                               $atom = Dfrn::relocate($owner, $uid);\r
-       [...]\r
-```\r
-\r
-This is the current code of `include/delivery.php`, and since the code is declared to be in the "Friendica" namespace, you don't need to write it when you need to use the "Dfrn" class.\r
-But if you want to use classes from another library, you need to use the full namespace, e.g.\r
-\r
-```php\r
-       // src/Diaspora.php\r
-       <?php\r
-\r
-       namespace \Friendica;\r
-\r
-       class Diaspora {\r
-               public function md2bbcode() {\r
-                       $html = \Michelf\MarkdownExtra::defaultTransform($text);\r
-               }\r
-       }\r
-```\r
-\r
-if you use that class in many places of the code and you don't want to write the full path to the class every time, you can use the "use" PHP keyword\r
-\r
-```php\r
-       // src/Diaspora.php\r
-       <?php\r
-       namespace \Friendica;\r
-\r
-       use \Michelf\MarkdownExtra;\r
-\r
-       class Diaspora {\r
-               public function md2bbcode() {\r
-                       $html = MarkdownExtra::defaultTransform($text);\r
-               }\r
-       }\r
-```\r
-\r
-Note that namespaces are like paths in filesystem, separated by "\", with the first "\" being the global scope.\r
-You can go deeper if you want to, like:\r
-\r
-```\r
-       // src/Network/Dfrn.php\r
-    <?php\r
-    namespace \Friendica\Network;\r
-\r
-    class Dfrn {\r
-    }\r
-```\r
-\r
-Please note that the location of the file defining the class must be placed in the appropriate sub-folders of `src` if the namespace isn't plain `\Friendica`.\r
-\r
-or\r
-\r
-```\r
-       // src/Dba/Mysql\r
-    <?php\r
-    namespace \Friendica\Dba;\r
-\r
-    class Mysql {\r
-    }\r
-```\r
-\r
-So you can think of namespaces as folders in a Unix file system, with global scope as the root ("\").\r
+Autoloader with Composer
+==========
+
+* [Home](help)
+  * [Developer Intro](help/Developers-Intro)
+
+Friendica uses [Composer](https://getcomposer.org) to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.
+
+It's a command-line tool that downloads required libraries into the `vendor` folder and makes any namespaced class in `src` available through the whole application through `boot.php`.
+
+* [Using Composer](help/Composer)
+
+## A quick introduction to class autoloading
+
+The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once".
+
+Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently `vendor` and `src`)
+
+Under the hood, Composer registers a callback with [`spl_autoload_register()`](http://php.net/manual/en/function.spl-autoload-register.php) that receives a class name as an argument and includes the corresponding class definition file.
+For more info about PHP autoloading, please refer to the [official PHP documentation](http://php.net/manual/en/language.oop5.autoload.php).
+
+### Example
+
+Let's say you have a PHP file in `src/` that define a very useful class:
+
+```php
+// src/ItemsManager.php
+<?php
+namespace Friendica;
+
+class ItemsManager {
+       public function getAll() { ... }
+       public function getByID($id) { ... }
+}
+```
+
+The class `ItemsManager` has been declared in the `Friendica` namespace.
+Namespaces are useful to keep classes separated and avoid names conflicts (could be that a library you want to use also defines a class named `ItemsManager`, but as long as it is in another namespace, you don't have any problem)
+
+Let's say now that you need to load some items in a view, maybe in a fictional `mod/network.php`.
+In order for the Composer autoloader to work, it must first be included. In Friendica this is already done at the top of `boot.php`, with `require_once('vendor/autoload.php');`.
+
+The code will be something like:
+
+```php
+// mod/network.php
+<?php
+
+function network_content(App $a) {
+       $itemsmanager = new Friendica\ItemsManager();
+       $items = $itemsmanager->getAll();
+
+       // pass $items to template
+       // return result
+}
+```
+
+That's a quite simple example, but look: no `require()`!
+If you need to use a class, you can simply use it and you don't need to do anything else.
+
+Going further: now we have a bunch of `*Manager` classes that cause some code duplication, let's define a `BaseManager` class, where we move all common code between all managers:
+
+```php
+// src/BaseManager.php
+<?php
+namespace Friendica;
+
+class BaseManager {
+       public function thatFunctionEveryManagerUses() { ... }
+}
+```
+
+and then let's change the ItemsManager class to use this code
+
+```php
+// src/ItemsManager.php
+<?php
+namespace Friendica;
+
+class ItemsManager extends BaseManager {
+       public function getAll() { ... }
+       public function getByID($id) { ... }
+}
+```
+
+Even though we didn't explicitly include the `src/BaseManager.php` file, the autoloader will when this class is first defined, because it is referenced as a parent class.
+It works with the "BaseManager" example here and it works when we need to call static methods:
+
+```php
+// src/Dfrn.php
+<?php
+namespace Friendica;
+
+class Dfrn {
+       public static function  mail($item, $owner) { ... }
+}
+```
+
+```php
+// mod/mail.php
+<?php
+
+mail_post($a){
+       ...
+       Friendica\dfrn::mail($item, $owner);
+       ...
+}
+```
+
+If your code is in same namespace as the class you need, you don't need to prepend it:
+
+```php
+// include/delivery.php
+<?php
+
+namespace Friendica;
+
+// this is the same content of current include/delivery.php,
+// but has been declared to be in "Friendica" namespace
+
+[...]
+switch($contact['network']) {
+       case NETWORK_DFRN:
+               if ($mail) {
+                       $item['body'] = ...
+                       $atom = Dfrn::mail($item, $owner);
+               } elseif ($fsuggest) {
+                       $atom = Dfrn::fsuggest($item, $owner);
+                       q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item['id']));
+               } elseif ($relocate)
+                       $atom = Dfrn::relocate($owner, $uid);
+[...]
+```
+
+This is the current code of `include/delivery.php`, and since the code is declared to be in the "Friendica" namespace, you don't need to write it when you need to use the "Dfrn" class.
+But if you want to use classes from another library, you need to use the full namespace, e.g.
+
+```php
+// src/Diaspora.php
+<?php
+
+namespace Friendica;
+
+class Diaspora {
+       public function md2bbcode() {
+               $html = \Michelf\MarkdownExtra::defaultTransform($text);
+       }
+}
+```
+
+if you use that class in many places of the code and you don't want to write the full path to the class every time, you can use the "use" PHP keyword
+
+```php
+// src/Diaspora.php
+<?php
+namespace Friendica;
+
+use \Michelf\MarkdownExtra;
+
+class Diaspora {
+       public function md2bbcode() {
+               $html = MarkdownExtra::defaultTransform($text);
+       }
+}
+```
+
+Note that namespaces are like paths in filesystem, separated by "\", with the first "\" being the global scope.
+You can go deeper if you want to, like:
+
+```
+// src/Network/Dfrn.php
+<?php
+namespace Friendica\Network;
+
+class Dfrn {
+}
+```
+
+Please note that the location of the file defining the class must be placed in the appropriate sub-folders of `src` if the namespace isn't plain `Friendica`.
+
+or
+
+```
+// src/Dba/Mysql
+<?php
+namespace Friendica\Dba;
+
+class Mysql {
+}
+```
+
+So you can think of namespaces as folders in a Unix file system, with global scope as the root ("\").
+
+## Related
+
+* [Using Composer](help/Composer)
+* [How To Move Classes to `src`](help/Developer-How-To-Move-Classes-to-src)
\ No newline at end of file
index 4c61505202c9459d3bd3ff6e776fb1798a52b635..27ff886abe6e70665dc10ac48d9b83c94639e709 100644 (file)
@@ -14,6 +14,7 @@ Database Tables
 | [config](help/database/db_config)                    | main configuration storage                       |
 | [contact](help/database/db_contact)                  | contact table                                    |
 | [conv](help/database/db_conv)                        | private messages                                 |
+| [conversation](help/database/db_conversation)        | Raw data and structure information for messages  |
 | [event](help/database/db_event)                      | Events                                           |
 | [fcontact](help/database/db_fcontact)                | friend suggestion stuff                          |
 | [ffinder](help/database/db_ffinder)                  | friend suggestion stuff                          |
diff --git a/doc/database/db_conversation.md b/doc/database/db_conversation.md
new file mode 100644 (file)
index 0000000..32d030c
--- /dev/null
@@ -0,0 +1,14 @@
+Table conversation
+==================
+
+| Field             | Description                        | Type                | Null | Key | Default             | Extra          |
+|-------------------| ---------------------------------- |---------------------|------|-----|---------------------|----------------|
+| item-uri          | URI of the item                    | varbinary(255)      | NO   | PRI | NULL                |                |
+| reply-to-uri      | URI to which this item is a reply  | varbinary(255)      | NO   |     |                     |                |
+| conversation-uri  | GNU Social conversation URI        | varbinary(255)      | NO   |     |                     |                |
+| conversation-href | GNU Social conversation link       | varbinary(255)      | NO   |     |                     |                |
+| protocol          | The protocol of the item           | tinyint(1) unsigned | NO   |     | 0                   |                |
+| source            | Original source                    | mediumtext          | NO   |     |                     |                |
+| received          | Receiving date                     | datetime            | NO   |     | 0001-01-01          |                |
+
+Return to [database documentation](help/database)
index 740202310c79a8af57429cf370f60591ae616571..db8fb965d415518a6e492d018c09f0dd73626ae1 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, mysql und openssl-Erweiterung
+        - Curl, GD, PDO, MySQLi 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 a6390505553c93d2d171d1ce501d865b5e7dfba7..ba90bf8d2b152f7d17c2edcb7b9daf6f3835d3ba 100644 (file)
@@ -2,7 +2,7 @@
 
 * [Zur Startseite der Hilfe](help)
 
-Wenn du der Administrator einer Friendica Instanz bist, hast du Zugriff auf das so genannte **Admin Panel** in dem du die Friendica Instanz konfigurieren kannst,
+Wenn du der Administrator einer Friendica-Instanz bist, hast du Zugriff auf das so genannte **Admin Panel** in dem du die Friendica-Instanz konfigurieren kannst,
 
 Auf der Startseite des Admin Panels werden die Informationen zu der Instanz zusammengefasst.
 Die erste Zahl gibt die Anzahl von Nachrichten an, die nicht zugestellt werden konnten.
@@ -22,7 +22,7 @@ Die Unterabschnitte des Admin Panels kannst du in der Seitenleiste auswählen.
 
 ## Seite
 
-In diesem Bereich des Admin Panels findest du die Hauptkonfiguration deiner Friendica Instanz.
+In diesem Bereich des Admin Panels findest du die Hauptkonfiguration deiner Friendica-Instanz.
 Er ist in mehrere Unterabschnitte aufgeteilt, wobei die Grundeinstellungen oben auf der Seite zu finden sind.
 
 Da die meisten Konfigurationsoptionen einen Hilfstext im Admin Panel haben, kann und will dieser Artikel nicht alle Einstellungen abdecken.
@@ -130,7 +130,7 @@ Dieses Feature kann z.B. dafür genutzt werden Blogbeiträge zu spiegeln.
 In der Grundeinstellung ist es nicht aktiviert, da es zusätzliche Last auf dem Server verursachen kann.
 Außerdem könnte es durch Nutzer als Spam Verteiler missbraucht werden.
 
-Als Administrator der Friendica Instanz kannst du diese Einstellungen ansonsten nur direkt in der Datenbank vornehmen.
+Als Administrator der Friendica-Instanz kannst du diese Einstellungen ansonsten nur direkt in der Datenbank vornehmen.
 Bevor du das tust solltest du sicherstellen, dass du ein Backup der Datenbank hast und genau weißt was die Änderungen an der Datenbank bewirken, die du vornehmen willst.
 
 ### Erweitert
@@ -183,7 +183,7 @@ Dadurch werden dann die Aufgaben aktiviert, die der cron Job sonst aktivieren w
 
 ## Nutzer
 
-In diesem Abschnitt des Admin Panels kannst du die Nutzer deiner Friendica Instanz moderieren.
+In diesem Abschnitt des Admin Panels kannst du die Nutzer deiner Friendica-Instanz moderieren.
 
 Solltest du für **Registrierungsmethode** die Einstellung "Bedarf Zustimmung" gewählt haben, werden hier zu Beginn der Seite neue Registrationen aufgelistet.
 Als Administrator kannst du hier die Registration akzeptieren oder ablehnen.
@@ -202,12 +202,12 @@ Sie müssen in das `/addon` Verzeichnis kopiert werden.
 Auf der Seite wird eine Liste der verfügbaren Erweiterungen angezeigt.
 Neben den Namen der Erweiterungen wird ein Indikator angezeigt, der anzeigt ob das Addon gerade aktiviert ist oder nicht.
 
-Wenn du die Erweiterungen aktualisiert die du auf deiner Friendica Instanz nutzt könnte es sein, dass sie neu geladen werden müssen, damit die Änderungen aktiviert werden.
+Wenn du die Erweiterungen aktualisiert die du auf deiner Friendica-Instanz nutzt könnte es sein, dass sie neu geladen werden müssen, damit die Änderungen aktiviert werden.
 Um diesen Prozess zu vereinfachen gibt es am Anfang der Seite einen Button um alle aktiven Plugins neu zu laden.
 
 ## Themen
 
-Der Bereich zur Kontrolle der auf der Friendica Instanz verfügbaren Themen funktioniert analog zum Plugins Bereich.
+Der Bereich zur Kontrolle der auf der Friendica-Instanz verfügbaren Themen funktioniert analog zum Plugins Bereich.
 Jedes Theme hat eine extra Seite auf der der aktuelle Status, ein Bildschirmfoto des Themes, zusätzliche Informationen und eventuelle Einstellungen des Themes zu finden sind.
 Genau wie Erweiterungen können Themes in der Übersichtsliste oder der Theme-Seite aktiviert bzw. deaktiviert werden.
 Um ein Standardtheme für die Instanz zu wählen, benutze bitte die *Seiten* Bereich des Admin Panels.
@@ -238,6 +238,12 @@ Aber keine Panik!
 Friendica wird die Beiträge nicht für alle Zeiten in der Warteschlange behalten.
 Nach einiger Zeit werden Knoten als inaktiv identifiziert und Nachrichten an Nutzer dieser Knoten aus der Warteschlange gelöscht.
 
+## Server Blockliste
+
+Auf dieser Seite des Admin Panels können Administratoren einer Friendica-Instanz die komplette Kommunikation (eingehend und ausgehend) mit bestimmten Domains unterbinden.
+Für jede dieser Blockierungen muss ein Grund angegeben werden, welcher auf der Informationsseite [friendica](/friendica) angezeigt wird.
+Der Abgleich der Domainnamen ist exakt, Subdomains werden nicht automatisch ebenfalls blockiert.
+
 ## Federation Statistik
 
 Deine Instanz ist ein Teil eines Netzwerks von Servern dezentraler sozialer Netzwerke, der sogenannten **Federation**.
@@ -258,7 +264,7 @@ Wenn du das dennoch tun musste und die Standardeinstellungen des Apache Servers
 Solltest du einen anderen Webserver verwenden, solltest du sicherstellen, dass der Zugrif zu Dateien mit diesen Endungen nicht möglich ist.
 
 Es gibt fünf Level der Ausführlichkeit mit denen Friendica arbeitet: Normal, Trace, Debug, Data und All.
-Normalerweise solltest du für den Betrieb deiner Friendica Instanz keine Logs benötigen.
+Normalerweise solltest du für den Betrieb deiner Friendica-Instanz keine Logs benötigen.
 Wenn du versuchst einem Problem auf den Grund zu gehen, solltest du das "DEBUG" Level wählen.
 Mit dem "All" Level schreibt Friendica alles in die Logdatei.
 Die Datenmenge der geloggten Daten kann relativ schnell anwachsen, deshalb empfehlen wir das Anlegen von Protokollen nur zu aktivieren wenn es unbedingt nötig ist.
index 6f662cdf151bb13ad620dfc1487290e5b9dd08f7..bb6d8c198178a9002ee0ade07daff13c0ba94d49 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+use Friendica\App;
+use Friendica\Network\Probe;
+
 // Included here for completeness, but this is a very dangerous operation.
 // It is the caller's responsibility to confirm the requestor's intent and
 // authorisation to do this.
@@ -20,29 +23,7 @@ function user_remove($uid) {
                $r[0]['nickname']
        );
 
-       /// @todo Should be done in a background job since this likely will run into a time out
-       // don't delete yet, will be done later when contacts have deleted my stuff
-       // q("DELETE FROM `contact` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `gcign` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `group` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `group_member` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `intro` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `event` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `item` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `item_id` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `mail` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `mailacct` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `manage` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `notify` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `photo` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `attach` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `profile` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `profile_check` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `pconfig` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `search` WHERE `uid` = %d", intval($uid));
-       q("DELETE FROM `spam` WHERE `uid` = %d", intval($uid));
-       // don't delete yet, will be done later when contacts have deleted my stuff
-       // q("DELETE FROM `user` WHERE `uid` = %d", intval($uid));
+       // 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);
 
@@ -89,11 +70,11 @@ function terminate_friendship($user,$self,$contact) {
        /// @TODO Get rid of this, include/datetime.php should care about it by itself
        $a = get_app();
 
-       require_once('include/datetime.php');
+       require_once 'include/datetime.php';
 
        if ($contact['network'] === NETWORK_OSTATUS) {
 
-               require_once('include/ostatus.php');
+               require_once 'include/ostatus.php';
 
                // create an unfollow slap
                $item = array();
@@ -102,14 +83,14 @@ function terminate_friendship($user,$self,$contact) {
                $slap = ostatus::salmon($item, $user);
 
                if ((x($contact,'notify')) && (strlen($contact['notify']))) {
-                       require_once('include/salmon.php');
+                       require_once 'include/salmon.php';
                        slapper($user,$contact['notify'],$slap);
                }
        } elseif ($contact['network'] === NETWORK_DIASPORA) {
-               require_once('include/diaspora.php');
+               require_once 'include/diaspora.php';
                Diaspora::send_unshare($user,$contact);
        } elseif ($contact['network'] === NETWORK_DFRN) {
-               require_once('include/dfrn.php');
+               require_once 'include/dfrn.php';
                dfrn::deliver($user,$contact,'placeholder', 1);
        }
 
@@ -361,7 +342,6 @@ function get_contact_details_by_addr($addr, $uid = -1) {
                                dbesc($addr));
 
        if (!dbm::is_result($r)) {
-               require_once('include/Probe.php');
                $data = Probe::uri($addr);
 
                $profile = get_contact_details_by_url($data['url'], $uid);
@@ -587,7 +567,6 @@ function get_contact($url, $uid = 0, $no_update = false) {
                return 0;
        }
 
-       require_once('include/Probe.php');
        $data = Probe::uri($url);
 
        // Last try in gcontact for unsupported networks
@@ -704,7 +683,7 @@ function get_contact($url, $uid = 0, $no_update = false) {
  */
 function posts_from_gcontact(App $a, $gcontact_id) {
 
-       require_once('include/conversation.php');
+       require_once 'include/conversation.php';
 
        // There are no posts with "uid = 0" with connector networks
        // This speeds up the query a lot
@@ -743,7 +722,7 @@ function posts_from_gcontact(App $a, $gcontact_id) {
  */
 function posts_from_contact_url(App $a, $contact_url) {
 
-       require_once('include/conversation.php');
+       require_once 'include/conversation.php';
 
        // There are no posts with "uid = 0" with connector networks
        // This speeds up the query a lot
@@ -852,4 +831,3 @@ function account_type($contact) {
 
        return $account_type;
 }
-?>
index b0cdc3fe63b556ad6dc0a67a61efd427b0b4622b..9df6ac36c9dab238b3b2d61eb17ddb9b4eef3474 100644 (file)
@@ -81,4 +81,3 @@ class Emailer {
                return $res;
        }
 }
-?>
index c2a20df29faf069bd0b3fc987b33e3d12b918e7f..8f38ed3a38eac9e5f81d1f325c74abab2eeb4b58 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 /**
  * @file include/ForumManager.php
  * @brief ForumManager class with its methods related to forum functionality *
index 611860f9d08b68e9e115dc46d55d9cf6beb96230..7183393801540ae37d40b144ec5b1d70c1feb4ff 100644 (file)
@@ -4,9 +4,10 @@
  * @brief Methods for read and write notifications from/to database
  *  or for formatting notifications
  */
-require_once('include/html2plain.php');
-require_once("include/datetime.php");
-require_once("include/bbcode.php");
+require_once 'include/html2plain.php';
+require_once 'include/probe.php';
+require_once 'include/datetime.php';
+require_once 'include/bbcode.php';
 
 /**
  * @brief Methods for read and write notifications from/to database
@@ -24,7 +25,7 @@ class NotificationsManager {
         *
         * @param array $notes array of note arrays from db
         * @return array Copy of input array with added properties
-        * 
+        *
         * Set some extra properties to note array from db:
         *  - timestamp as int in default TZ
         *  - date_rel : relative date string
@@ -143,8 +144,7 @@ class NotificationsManager {
 
        /**
         * @brief List of pages for the Notifications TabBar
-        * 
-        * @param app $a The 
+        *
         * @return array with with notifications TabBar data
         */
        public function getTabs() {
@@ -191,7 +191,7 @@ class NotificationsManager {
 
        /**
         * @brief Format the notification query in an usable array
-        * 
+        *
         * @param array $notifs The array from the db query
         * @param string $ident The notifications identifier (e.g. network)
         * @return array
@@ -360,7 +360,7 @@ class NotificationsManager {
        }
 
        /**
-        * @brief Total number of network notifications 
+        * @brief Total number of network notifications
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
@@ -388,13 +388,13 @@ class NotificationsManager {
 
        /**
         * @brief Get network notifications
-        * 
+        *
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
         * @param int $start Start the query at this point
         * @param int $limit Maximum number of query results
-        * 
+        *
         * @return array with
         *      string 'ident' => Notification identifier
         *      int 'total' => Total number of available network notifications
@@ -436,7 +436,7 @@ class NotificationsManager {
        }
 
        /**
-        * @brief Total number of system notifications 
+        * @brief Total number of system notifications
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
@@ -460,13 +460,13 @@ class NotificationsManager {
 
        /**
         * @brief Get system notifications
-        * 
+        *
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
         * @param int $start Start the query at this point
         * @param int $limit Maximum number of query results
-        * 
+        *
         * @return array with
         *      string 'ident' => Notification identifier
         *      int 'total' => Total number of available system notifications
@@ -502,7 +502,7 @@ class NotificationsManager {
 
        /**
         * @brief Addional SQL query string for the personal notifications
-        * 
+        *
         * @return string The additional sql query
         */
        private function _personal_sql_extra() {
@@ -520,7 +520,7 @@ class NotificationsManager {
        }
 
        /**
-        * @brief Total number of personal notifications 
+        * @brief Total number of personal notifications
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
@@ -550,13 +550,13 @@ class NotificationsManager {
 
        /**
         * @brief Get personal notifications
-        * 
+        *
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
         * @param int $start Start the query at this point
         * @param int $limit Maximum number of query results
-        * 
+        *
         * @return array with
         *      string 'ident' => Notification identifier
         *      int 'total' => Total number of available personal notifications
@@ -573,13 +573,13 @@ class NotificationsManager {
                        $sql_seen = " AND `item`.`unseen` = 1 ";
 
                $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`,
-                               `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, 
-                               `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` 
+                               `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`,
+                               `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid`
                        FROM `item` INNER JOIN `item` AS `pitem` ON  `pitem`.`id`=`item`.`parent`
                        WHERE `item`.`visible` = 1
                                $sql_extra
                                $sql_seen
-                               AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 
+                               AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
                        ORDER BY `item`.`created` DESC LIMIT %d, %d " ,
                                intval(local_user()),
                                intval($start),
@@ -588,7 +588,7 @@ class NotificationsManager {
 
                if (dbm::is_result($r))
                        $notifs = $this->formatNotifs($r, $ident);
-               
+
                $arr = array (
                        'notifications' => $notifs,
                        'ident' => $ident,
@@ -599,7 +599,7 @@ class NotificationsManager {
        }
 
        /**
-        * @brief Total number of home notifications 
+        * @brief Total number of home notifications
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
@@ -626,13 +626,13 @@ class NotificationsManager {
 
        /**
         * @brief Get home notifications
-        * 
+        *
         * @param int|string $seen
         *      If 0 only include notifications into the query
         *      which aren't marked as "seen"
         * @param int $start Start the query at this point
         * @param int $limit Maximum number of query results
-        * 
+        *
         * @return array with
         *      string 'ident' => Notification identifier
         *      int 'total' => Total number of available home notifications
@@ -673,7 +673,7 @@ class NotificationsManager {
        }
 
        /**
-        * @brief Total number of introductions 
+        * @brief Total number of introductions
         * @param bool $all
         *      If false only include introductions into the query
         *      which aren't marked as ignored
@@ -698,13 +698,13 @@ class NotificationsManager {
 
        /**
         * @brief Get introductions
-        * 
+        *
         * @param bool $all
         *      If false only include introductions into the query
         *      which aren't marked as ignored
         * @param int $start Start the query at this point
         * @param int $limit Maximum number of query results
-        * 
+        *
         * @return array with
         *      string 'ident' => Notification identifier
         *      int 'total' => Total number of available introductions
@@ -749,7 +749,7 @@ class NotificationsManager {
 
        /**
         * @brief Format the notification query in an usable array
-        * 
+        *
         * @param array $intros The array from the db query
         * @return array with the introductions
         */
index 828dce82d7a33088c4bae02e1c350104a6e58114..73419357678418bf70547d8f6b709c54d97446d1 100644 (file)
@@ -4,6 +4,8 @@
  * @brief This file contains the Photo class for image processing
  */
 
+use Friendica\App;
+
 require_once("include/photos.php");
 
 class Photo {
@@ -68,7 +70,9 @@ class Photo {
                                $this->image->destroy();
                                return;
                        }
-                       imagedestroy($this->image);
+                       if (is_resource($this->image)) {
+                               imagedestroy($this->image);
+                       }
                }
        }
 
@@ -324,6 +328,7 @@ class Photo {
                        return;
                }
 
+               // if script dies at this point check memory_limit setting in php.ini
                $this->image  = imagerotate($this->image,$degrees,0);
                $this->width  = imagesx($this->image);
                $this->height = imagesy($this->image);
@@ -620,7 +625,7 @@ class Photo {
 
 
 
-       public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '') {
+       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)
@@ -657,7 +662,8 @@ class Photo {
                                `allow_cid` = '%s',
                                `allow_gid` = '%s',
                                `deny_cid` = '%s',
-                               `deny_gid` = '%s'
+                               `deny_gid` = '%s',
+                               `desc` = '%s'
                                WHERE `id` = %d",
 
                                intval($uid),
@@ -679,12 +685,13 @@ class Photo {
                                dbesc($allow_gid),
                                dbesc($deny_cid),
                                dbesc($deny_gid),
+                               dbesc($desc),
                                intval($x[0]['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`)
-                               VALUES (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s')",
+                               (`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),
@@ -703,7 +710,8 @@ class Photo {
                                dbesc($allow_cid),
                                dbesc($allow_gid),
                                dbesc($deny_cid),
-                               dbesc($deny_gid)
+                               dbesc($deny_gid),
+                               dbesc($desc)
                        );
                }
 
diff --git a/include/Probe.php b/include/Probe.php
deleted file mode 100644 (file)
index f67a821..0000000
+++ /dev/null
@@ -1,1222 +0,0 @@
-<?php
-/**
- * @file include/Probe.php
- * @brief Functions for probing URL
- *
- */
-
-use \Friendica\Core\Config;
-use \Friendica\Core\PConfig;
-
-require_once("include/feed.php");
-require_once('include/email.php');
-require_once('include/network.php');
-
-/**
- * @brief This class contain functions for probing URL
- *
- */
-class Probe {
-
-       private static $baseurl;
-
-       /**
-        * @brief Rearrange the array so that it always has the same order
-        *
-        * @param array $data Unordered data
-        *
-        * @return array Ordered data
-        */
-       private function rearrange_data($data) {
-               $fields = array("name", "nick", "guid", "url", "addr", "alias",
-                               "photo", "community", "keywords", "location", "about",
-                               "batch", "notify", "poll", "request", "confirm", "poco",
-                               "priority", "network", "pubkey", "baseurl");
-
-               $newdata = array();
-               foreach ($fields AS $field)
-                       if (isset($data[$field]))
-                               $newdata[$field] = $data[$field];
-                       else
-                               $newdata[$field] = "";
-
-               // We don't use the "priority" field anymore and replace it with a dummy.
-               $newdata["priority"] = 0;
-
-               return $newdata;
-       }
-
-       /**
-        * @brief Probes for XRD data
-        *
-        * @return array
-        *      'lrdd' => Link to LRDD endpoint
-        *      'lrdd-xml' => Link to LRDD endpoint in XML format
-        *      'lrdd-json' => Link to LRDD endpoint in JSON format
-        */
-       private function xrd($host) {
-
-               // Reset the static variable
-               self::$baseurl = '';
-
-               $ssl_url = "https://".$host."/.well-known/host-meta";
-               $url = "http://".$host."/.well-known/host-meta";
-
-               $xrd_timeout = Config::get('system','xrd_timeout', 20);
-               $redirects = 0;
-
-               $ret = z_fetch_url($ssl_url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $xml = $ret['body'];
-
-               $xrd = parse_xml_string($xml, false);
-
-               if (!is_object($xrd)) {
-                       $ret = z_fetch_url($url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
-                       if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                               return false;
-                       }
-                       $xml = $ret['body'];
-                       $xrd = parse_xml_string($xml, false);
-               }
-               if (!is_object($xrd))
-                       return false;
-
-               $links = xml::element_to_array($xrd);
-               if (!isset($links["xrd"]["link"]))
-                       return false;
-
-               $xrd_data = array();
-
-               foreach ($links["xrd"]["link"] AS $value => $link) {
-                       if (isset($link["@attributes"]))
-                               $attributes = $link["@attributes"];
-                       elseif ($value == "@attributes")
-                               $attributes = $link;
-                       else
-                               continue;
-
-                       if (($attributes["rel"] == "lrdd") AND
-                               ($attributes["type"] == "application/xrd+xml"))
-                               $xrd_data["lrdd-xml"] = $attributes["template"];
-                       elseif (($attributes["rel"] == "lrdd") AND
-                               ($attributes["type"] == "application/json"))
-                               $xrd_data["lrdd-json"] = $attributes["template"];
-                       elseif ($attributes["rel"] == "lrdd")
-                               $xrd_data["lrdd"] = $attributes["template"];
-               }
-
-               self::$baseurl = "http://".$host;
-
-               return $xrd_data;
-       }
-
-       /**
-        * @brief Perform Webfinger lookup and return DFRN data
-        *
-        * Given an email style address, perform webfinger lookup and
-        * return the resulting DFRN profile URL, or if no DFRN profile URL
-        * is located, returns an OStatus subscription template (prefixed
-        * with the string 'stat:' to identify it as on OStatus template).
-        * If this isn't an email style address just return $webbie.
-        * Return an empty string if email-style addresses but webfinger fails,
-        * or if the resultant personal XRD doesn't contain a supported
-        * subscription/friend-request attribute.
-        *
-        * amended 7/9/2011 to return an hcard which could save potentially loading
-        * a lengthy content page to scrape dfrn attributes
-        *
-        * @param string $webbie Address that should be probed
-        * @param string $hcard Link to the hcard - is returned by reference
-        *
-        * @return string profile link
-        */
-
-       public static function webfinger_dfrn($webbie, &$hcard) {
-
-               $profile_link = '';
-
-               $links = self::lrdd($webbie);
-               logger('webfinger_dfrn: '.$webbie.':'.print_r($links,true), LOGGER_DATA);
-               if (count($links)) {
-                       foreach ($links as $link) {
-                               if ($link['@attributes']['rel'] === NAMESPACE_DFRN)
-                                       $profile_link = $link['@attributes']['href'];
-                               if (($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) AND ($profile_link == ""))
-                                       $profile_link = 'stat:'.$link['@attributes']['template'];
-                               if ($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
-                                       $hcard = $link['@attributes']['href'];
-                       }
-               }
-               return $profile_link;
-       }
-
-       /**
-        * @brief Check an URI for LRDD data
-        *
-        * this is a replacement for the "lrdd" function in include/network.php.
-        * It isn't used in this class and has some redundancies in the code.
-        * When time comes we can check the existing calls for "lrdd" if we can rework them.
-        *
-        * @param string $uri Address that should be probed
-        *
-        * @return array uri data
-        */
-       public static function lrdd($uri) {
-
-               $lrdd = self::xrd($uri);
-
-               if (!$lrdd) {
-                       $parts = @parse_url($uri);
-                       if (!$parts)
-                               return array();
-
-                       $host = $parts["host"];
-
-                       $path_parts = explode("/", trim($parts["path"], "/"));
-
-                       $nick = array_pop($path_parts);
-
-                       do {
-                               $lrdd = self::xrd($host);
-                               $host .= "/".array_shift($path_parts);
-                       } while (!$lrdd AND (sizeof($path_parts) > 0));
-               }
-
-               if (!$lrdd)
-                       return array();
-
-               foreach ($lrdd AS $key => $link) {
-                       if ($webfinger)
-                               continue;
-
-                       if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json")))
-                               continue;
-
-                       $path = str_replace('{uri}', urlencode($uri), $link);
-                       $webfinger = self::webfinger($path);
-
-                       if (!$webfinger AND (strstr($uri, "@"))) {
-                               $path = str_replace('{uri}', urlencode("acct:".$uri), $link);
-                               $webfinger = self::webfinger($path);
-                       }
-
-                       // Special treatment for Mastodon
-                       // Problem is that Mastodon uses an URL format like http://domain.tld/@nick
-                       // But the webfinger for this format fails.
-                       if (!$webfinger AND isset($nick)) {
-                               // Mastodon uses a "@" as prefix for usernames in their url format
-                               $nick = ltrim($nick, '@');
-
-                               $addr = $nick."@".$host;
-
-                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
-                               $webfinger = self::webfinger($path);
-                       }
-               }
-
-               if (!is_array($webfinger["links"]))
-                       return false;
-
-               $data = array();
-
-               foreach ($webfinger["links"] AS $link)
-                       $data[] = array("@attributes" => $link);
-
-               if (is_array($webfinger["aliases"]))
-                       foreach ($webfinger["aliases"] AS $alias)
-                               $data[] = array("@attributes" =>
-                                                       array("rel" => "alias",
-                                                               "href" => $alias));
-
-               return $data;
-       }
-
-       /**
-        * @brief Fetch information (protocol endpoints and user information) about a given uri
-        *
-        * @param string $uri Address that should be probed
-        * @param string $network Test for this specific network
-        * @param integer $uid User ID for the probe (only used for mails)
-        * @param boolean $cache Use cached values?
-        *
-        * @return array uri data
-        */
-       public static function uri($uri, $network = "", $uid = 0, $cache = true) {
-
-               if ($cache) {
-                       $result = Cache::get("probe_url:".$network.":".$uri);
-                       if (!is_null($result)) {
-                               return $result;
-                       }
-               }
-
-               if ($uid == 0)
-                       $uid = local_user();
-
-               $data = self::detect($uri, $network, $uid);
-
-               if (!isset($data["url"]))
-                       $data["url"] = $uri;
-
-               if ($data["photo"] != "")
-                       $data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"]));
-               else
-                       $data["photo"] = App::get_baseurl().'/images/person-175.jpg';
-
-               if (!isset($data["name"]) OR ($data["name"] == "")) {
-                       if (isset($data["nick"]))
-                               $data["name"] = $data["nick"];
-
-                       if ($data["name"] == "")
-                               $data["name"] = $data["url"];
-               }
-
-               if (!isset($data["nick"]) OR ($data["nick"] == "")) {
-                       $data["nick"] = strtolower($data["name"]);
-
-                       if (strpos($data['nick'], ' '))
-                               $data['nick'] = trim(substr($data['nick'], 0, strpos($data['nick'], ' ')));
-               }
-
-               if (self::$baseurl != "") {
-                       $data["baseurl"] = self::$baseurl;
-               }
-
-               if (!isset($data["network"])) {
-                       $data["network"] = NETWORK_PHANTOM;
-               }
-
-               $data = self::rearrange_data($data);
-
-               // Only store into the cache if the value seems to be valid
-               if (!in_array($data['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) {
-                       Cache::set("probe_url:".$network.":".$uri, $data, CACHE_DAY);
-
-                       /// @todo temporary fix - we need a real contact update function that updates only changing fields
-                       /// The biggest problem is the avatar picture that could have a reduced image size.
-                       /// It should only be updated if the existing picture isn't existing anymore.
-                       if (($data['network'] != NETWORK_FEED) AND ($mode == PROBE_NORMAL) AND
-                               $data["name"] AND $data["nick"] AND $data["url"] AND $data["addr"] AND $data["poll"])
-                               q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `addr` = '%s',
-                                               `notify` = '%s', `poll` = '%s', `alias` = '%s', `success_update` = '%s'
-                                       WHERE `nurl` = '%s' AND NOT `self` AND `uid` = 0",
-                                       dbesc($data["name"]),
-                                       dbesc($data["nick"]),
-                                       dbesc($data["url"]),
-                                       dbesc($data["addr"]),
-                                       dbesc($data["notify"]),
-                                       dbesc($data["poll"]),
-                                       dbesc($data["alias"]),
-                                       dbesc(datetime_convert()),
-                                       dbesc(normalise_link($data['url']))
-                       );
-               }
-
-               return $data;
-       }
-
-       /**
-        * @brief Fetch information (protocol endpoints and user information) about a given uri
-        *
-        * This function is only called by the "uri" function that adds caching and rearranging of data.
-        *
-        * @param string $uri Address that should be probed
-        * @param string $network Test for this specific network
-        * @param integer $uid User ID for the probe (only used for mails)
-        *
-        * @return array uri data
-        */
-       private function detect($uri, $network, $uid) {
-               $parts = parse_url($uri);
-
-               if (isset($parts["scheme"]) AND isset($parts["host"]) AND isset($parts["path"])) {
-
-                       /// @todo: Ports?
-                       $host = $parts["host"];
-
-                       if ($host == 'twitter.com') {
-                               return array("network" => NETWORK_TWITTER);
-                       }
-                       $lrdd = self::xrd($host);
-
-                       $path_parts = explode("/", trim($parts["path"], "/"));
-
-                       while (!$lrdd AND (sizeof($path_parts) > 1)) {
-                               $host .= "/".array_shift($path_parts);
-                               $lrdd = self::xrd($host);
-                       }
-                       if (!$lrdd) {
-                               return self::feed($uri);
-                       }
-                       $nick = array_pop($path_parts);
-
-                       // Mastodon uses a "@" as prefix for usernames in their url format
-                       $nick = ltrim($nick, '@');
-
-                       $addr = $nick."@".$host;
-               } elseif (strstr($uri, '@')) {
-                       // If the URI starts with "mailto:" then jump directly to the mail detection
-                       if (strpos($url,'mailto:') !== false) {
-                               $uri = str_replace('mailto:', '', $url);
-                               return self::mail($uri, $uid);
-                       }
-
-                       if ($network == NETWORK_MAIL) {
-                               return self::mail($uri, $uid);
-                       }
-                       // Remove "acct:" from the URI
-                       $uri = str_replace('acct:', '', $uri);
-
-                       $host = substr($uri,strpos($uri, '@') + 1);
-                       $nick = substr($uri,0, strpos($uri, '@'));
-
-                       if (strpos($uri, '@twitter.com')) {
-                               return array("network" => NETWORK_TWITTER);
-                       }
-                       $lrdd = self::xrd($host);
-
-                       if (!$lrdd) {
-                               return self::mail($uri, $uid);
-                       }
-                       $addr = $uri;
-               } else {
-                       return false;
-               }
-
-               $webfinger = false;
-
-               /// @todo Do we need the prefix "acct:" or "acct://"?
-
-               foreach ($lrdd AS $key => $link) {
-                       if ($webfinger) {
-                               continue;
-                       }
-                       if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json"))) {
-                               continue;
-                       }
-                       // At first try it with the given uri
-                       $path = str_replace('{uri}', urlencode($uri), $link);
-                       $webfinger = self::webfinger($path);
-
-                       // We cannot be sure that the detected address was correct, so we don't use the values
-                       if ($webfinger AND ($uri != $addr)) {
-                               $nick = "";
-                               $addr = "";
-                       }
-
-                       // Try webfinger with the address (user@domain.tld)
-                       if (!$webfinger) {
-                               $path = str_replace('{uri}', urlencode($addr), $link);
-                               $webfinger = self::webfinger($path);
-                       }
-
-                       // Mastodon needs to have it with "acct:"
-                       if (!$webfinger) {
-                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
-                               $webfinger = self::webfinger($path);
-                       }
-               }
-               if (!$webfinger) {
-                       return self::feed($uri);
-               }
-
-               $result = false;
-
-               logger("Probing ".$uri, LOGGER_DEBUG);
-
-               if (in_array($network, array("", NETWORK_DFRN)))
-                       $result = self::dfrn($webfinger);
-               if ((!$result AND ($network == "")) OR ($network == NETWORK_DIASPORA))
-                       $result = self::diaspora($webfinger);
-               if ((!$result AND ($network == "")) OR ($network == NETWORK_OSTATUS))
-                       $result = self::ostatus($webfinger);
-               if ((!$result AND ($network == "")) OR ($network == NETWORK_PUMPIO))
-                       $result = self::pumpio($webfinger);
-               if ((!$result AND ($network == "")) OR ($network == NETWORK_FEED))
-                       $result = self::feed($uri);
-               else {
-                       // We overwrite the detected nick with our try if the previois routines hadn't detected it.
-                       // Additionally it is overwritten when the nickname doesn't make sense (contains spaces).
-                       if ((!isset($result["nick"]) OR ($result["nick"] == "") OR (strstr($result["nick"], " "))) AND ($nick != ""))
-                               $result["nick"] = $nick;
-
-                       if ((!isset($result["addr"]) OR ($result["addr"] == "")) AND ($addr != ""))
-                               $result["addr"] = $addr;
-               }
-
-               logger($uri." is ".$result["network"], LOGGER_DEBUG);
-
-               if (!isset($result["baseurl"]) OR ($result["baseurl"] == "")) {
-                       $pos = strpos($result["url"], $host);
-                       if ($pos)
-                               $result["baseurl"] = substr($result["url"], 0, $pos).$host;
-               }
-
-               return $result;
-       }
-
-       /**
-        * @brief Perform a webfinger request.
-        *
-        * For details see RFC 7033: <https://tools.ietf.org/html/rfc7033>
-        *
-        * @param string $url Address that should be probed
-        *
-        * @return array webfinger data
-        */
-       private function webfinger($url) {
-
-               $xrd_timeout = Config::get('system','xrd_timeout', 20);
-               $redirects = 0;
-
-               $ret = z_fetch_url($url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $data = $ret['body'];
-
-               $xrd = parse_xml_string($data, false);
-
-               if (!is_object($xrd)) {
-                       // If it is not XML, maybe it is JSON
-                       $webfinger = json_decode($data, true);
-
-                       if (!isset($webfinger["links"]))
-                               return false;
-
-                       return $webfinger;
-               }
-
-               $xrd_arr = xml::element_to_array($xrd);
-               if (!isset($xrd_arr["xrd"]["link"]))
-                       return false;
-
-               $webfinger = array();
-
-               if (isset($xrd_arr["xrd"]["subject"]))
-                       $webfinger["subject"] = $xrd_arr["xrd"]["subject"];
-
-               if (isset($xrd_arr["xrd"]["alias"]))
-                       $webfinger["aliases"] = $xrd_arr["xrd"]["alias"];
-
-               $webfinger["links"] = array();
-
-               foreach ($xrd_arr["xrd"]["link"] AS $value => $data) {
-                       if (isset($data["@attributes"]))
-                               $attributes = $data["@attributes"];
-                       elseif ($value == "@attributes")
-                               $attributes = $data;
-                       else
-                               continue;
-
-                       $webfinger["links"][] = $attributes;
-               }
-               return $webfinger;
-       }
-
-       /**
-        * @brief Poll the Friendica specific noscrape page.
-        *
-        * "noscrape" is a faster alternative to fetch the data from the hcard.
-        * This functionality was originally created for the directory.
-        *
-        * @param string $noscrape Link to the noscrape page
-        * @param array $data The already fetched data
-        *
-        * @return array noscrape data
-        */
-       private function poll_noscrape($noscrape, $data) {
-               $ret = z_fetch_url($noscrape);
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $content = $ret['body'];
-               if (!$content) {
-                       return false;
-               }
-
-               $json = json_decode($content, true);
-               if (!is_array($json))
-                       return false;
-
-               if (isset($json["fn"]))
-                       $data["name"] = $json["fn"];
-
-               if (isset($json["addr"]))
-                       $data["addr"] = $json["addr"];
-
-               if (isset($json["nick"]))
-                       $data["nick"] = $json["nick"];
-
-               if (isset($json["comm"]))
-                       $data["community"] = $json["comm"];
-
-               if (isset($json["tags"])) {
-                       $keywords = implode(" ", $json["tags"]);
-                       if ($keywords != "")
-                               $data["keywords"] = $keywords;
-               }
-
-               $location = formatted_location($json);
-               if ($location)
-                       $data["location"] = $location;
-
-               if (isset($json["about"]))
-                       $data["about"] = $json["about"];
-
-               if (isset($json["key"]))
-                       $data["pubkey"] = $json["key"];
-
-               if (isset($json["photo"]))
-                       $data["photo"] = $json["photo"];
-
-               if (isset($json["dfrn-request"]))
-                       $data["request"] = $json["dfrn-request"];
-
-               if (isset($json["dfrn-confirm"]))
-                       $data["confirm"] = $json["dfrn-confirm"];
-
-               if (isset($json["dfrn-notify"]))
-                       $data["notify"] = $json["dfrn-notify"];
-
-               if (isset($json["dfrn-poll"]))
-                       $data["poll"] = $json["dfrn-poll"];
-
-               return $data;
-       }
-
-       /**
-        * @brief Check for valid DFRN data
-        *
-        * @param array $data DFRN data
-        *
-        * @return int Number of errors
-        */
-       public static function valid_dfrn($data) {
-               $errors = 0;
-               if(!isset($data['key']))
-                       $errors ++;
-               if(!isset($data['dfrn-request']))
-                       $errors ++;
-               if(!isset($data['dfrn-confirm']))
-                       $errors ++;
-               if(!isset($data['dfrn-notify']))
-                       $errors ++;
-               if(!isset($data['dfrn-poll']))
-                       $errors ++;
-               return $errors;
-       }
-
-       /**
-        * @brief Fetch data from a DFRN profile page and via "noscrape"
-        *
-        * @param string $profile Link to the profile page
-        *
-        * @return array profile data
-        */
-       public static function profile($profile) {
-
-               $data = array();
-
-               logger("Check profile ".$profile, LOGGER_DEBUG);
-
-               // Fetch data via noscrape - this is faster
-               $noscrape = str_replace(array("/hcard/", "/profile/"), "/noscrape/", $profile);
-               $data = self::poll_noscrape($noscrape, $data);
-
-               if (!isset($data["notify"]) OR !isset($data["confirm"]) OR
-                       !isset($data["request"]) OR !isset($data["poll"]) OR
-                       !isset($data["poco"]) OR !isset($data["name"]) OR
-                       !isset($data["photo"]))
-                       $data = self::poll_hcard($profile, $data, true);
-
-               $prof_data = array();
-               $prof_data["addr"] = $data["addr"];
-               $prof_data["nick"] = $data["nick"];
-               $prof_data["dfrn-request"] = $data["request"];
-               $prof_data["dfrn-confirm"] = $data["confirm"];
-               $prof_data["dfrn-notify"] = $data["notify"];
-               $prof_data["dfrn-poll"] = $data["poll"];
-               $prof_data["dfrn-poco"] = $data["poco"];
-               $prof_data["photo"] = $data["photo"];
-               $prof_data["fn"] = $data["name"];
-               $prof_data["key"] = $data["pubkey"];
-
-               logger("Result for profile ".$profile.": ".print_r($prof_data, true), LOGGER_DEBUG);
-
-               return $prof_data;
-       }
-
-       /**
-        * @brief Check for DFRN contact
-        *
-        * @param array $webfinger Webfinger data
-        *
-        * @return array DFRN data
-        */
-       private function dfrn($webfinger) {
-
-               $hcard = "";
-               $data = array();
-               foreach ($webfinger["links"] AS $link) {
-                       if (($link["rel"] == NAMESPACE_DFRN) AND ($link["href"] != ""))
-                               $data["network"] = NETWORK_DFRN;
-                       elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != ""))
-                               $data["poll"] = $link["href"];
-                       elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND
-                               ($link["type"] == "text/html") AND ($link["href"] != ""))
-                               $data["url"] = $link["href"];
-                       elseif (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != ""))
-                               $hcard = $link["href"];
-                       elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != ""))
-                               $data["poco"] = $link["href"];
-                       elseif (($link["rel"] == "http://webfinger.net/rel/avatar") AND ($link["href"] != ""))
-                               $data["photo"] = $link["href"];
-
-                       elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != ""))
-                               $data["baseurl"] = trim($link["href"], '/');
-                       elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != ""))
-                               $data["guid"] = $link["href"];
-                       elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) {
-                               $data["pubkey"] = base64_decode($link["href"]);
-
-                               //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA"))
-                               if (strstr($data["pubkey"], 'RSA '))
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
-                       }
-               }
-
-               if (!isset($data["network"]) OR ($hcard == ""))
-                       return false;
-
-               // Fetch data via noscrape - this is faster
-               $noscrape = str_replace("/hcard/", "/noscrape/", $hcard);
-               $data = self::poll_noscrape($noscrape, $data);
-
-               if (isset($data["notify"]) AND isset($data["confirm"]) AND isset($data["request"]) AND
-                       isset($data["poll"]) AND isset($data["name"]) AND isset($data["photo"]))
-                       return $data;
-
-               $data = self::poll_hcard($hcard, $data, true);
-
-               return $data;
-       }
-
-       /**
-        * @brief Poll the hcard page (Diaspora and Friendica specific)
-        *
-        * @param string $hcard Link to the hcard page
-        * @param array $data The already fetched data
-        * @param boolean $dfrn Poll DFRN specific data
-        *
-        * @return array hcard data
-        */
-       private function poll_hcard($hcard, $data, $dfrn = false) {
-               $ret = z_fetch_url($hcard);
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $content = $ret['body'];
-               if (!$content) {
-                       return false;
-               }
-
-               $doc = new DOMDocument();
-               if (!@$doc->loadHTML($content))
-                       return false;
-
-               $xpath = new DomXPath($doc);
-
-               $vcards = $xpath->query("//div[contains(concat(' ', @class, ' '), ' vcard ')]");
-               if (!is_object($vcards))
-                       return false;
-
-               if ($vcards->length > 0) {
-                       $vcard = $vcards->item(0);
-
-                       // We have to discard the guid from the hcard in favour of the guid from lrdd
-                       // Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does.
-                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */
-                       if (($search->length > 0) AND ($data["guid"] == ""))
-                               $data["guid"] = $search->item(0)->nodeValue;
-
-                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' nickname ')]", $vcard); // */
-                       if ($search->length > 0)
-                               $data["nick"] = $search->item(0)->nodeValue;
-
-                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' fn ')]", $vcard); // */
-                       if ($search->length > 0)
-                               $data["name"] = $search->item(0)->nodeValue;
-
-                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' searchable ')]", $vcard); // */
-                       if ($search->length > 0)
-                               $data["searchable"] = $search->item(0)->nodeValue;
-
-                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' key ')]", $vcard); // */
-                       if ($search->length > 0) {
-                               $data["pubkey"] = $search->item(0)->nodeValue;
-                               if (strstr($data["pubkey"], 'RSA '))
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
-                       }
-
-                       $search = $xpath->query("//*[@id='pod_location']", $vcard); // */
-                       if ($search->length > 0)
-                               $data["baseurl"] = trim($search->item(0)->nodeValue, "/");
-               }
-
-               $avatar = array();
-               $photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */
-               foreach ($photos AS $photo) {
-                       $attr = array();
-                       foreach ($photo->attributes as $attribute) {
-                               $attr[$attribute->name] = trim($attribute->value);
-                       }
-
-                       if (isset($attr["src"]) AND isset($attr["width"])) {
-                               $avatar[$attr["width"]] = $attr["src"];
-                       }
-
-                       // We don't have a width. So we just take everything that we got.
-                       // This is a Hubzilla workaround which doesn't send a width.
-                       if ((sizeof($avatar) == 0) AND isset($attr["src"])) {
-                               $avatar[] = $attr["src"];
-                       }
-               }
-
-               if (sizeof($avatar)) {
-                       ksort($avatar);
-                       $data["photo"] = array_pop($avatar);
-               }
-
-               if ($dfrn) {
-                       // Poll DFRN specific data
-                       $search = $xpath->query("//link[contains(concat(' ', @rel), ' dfrn-')]");
-                       if ($search->length > 0) {
-                               foreach ($search AS $link) {
-                                       //$data["request"] = $search->item(0)->nodeValue;
-                                       $attr = array();
-                                       foreach ($link->attributes as $attribute)
-                                               $attr[$attribute->name] = trim($attribute->value);
-
-                                       $data[substr($attr["rel"], 5)] = $attr["href"];
-                               }
-                       }
-
-                       // Older Friendica versions had used the "uid" field differently than newer versions
-                       if ($data["nick"] == $data["guid"])
-                               unset($data["guid"]);
-               }
-
-
-               return $data;
-       }
-
-       /**
-        * @brief Check for Diaspora contact
-        *
-        * @param array $webfinger Webfinger data
-        *
-        * @return array Diaspora data
-        */
-       private function diaspora($webfinger) {
-
-               $hcard = "";
-               $data = array();
-               foreach ($webfinger["links"] AS $link) {
-                       if (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != ""))
-                               $hcard = $link["href"];
-                       elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != ""))
-                               $data["baseurl"] = trim($link["href"], '/');
-                       elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != ""))
-                               $data["guid"] = $link["href"];
-                       elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND
-                               ($link["type"] == "text/html") AND ($link["href"] != ""))
-                               $data["url"] = $link["href"];
-                       elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != ""))
-                               $data["poll"] = $link["href"];
-                       elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != ""))
-                               $data["poco"] = $link["href"];
-                       elseif (($link["rel"] == "salmon") AND ($link["href"] != ""))
-                               $data["notify"] = $link["href"];
-                       elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) {
-                               $data["pubkey"] = base64_decode($link["href"]);
-
-                               //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA"))
-                               if (strstr($data["pubkey"], 'RSA '))
-                                       $data["pubkey"] = rsatopem($data["pubkey"]);
-                       }
-               }
-
-               if (!isset($data["url"]) OR ($hcard == ""))
-                       return false;
-
-               if (is_array($webfinger["aliases"]))
-                       foreach ($webfinger["aliases"] AS $alias)
-                               if (normalise_link($alias) != normalise_link($data["url"]) AND !strstr($alias, "@"))
-                                       $data["alias"] = $alias;
-
-               // Fetch further information from the hcard
-               $data = self::poll_hcard($hcard, $data);
-
-               if (!$data)
-                       return false;
-
-               if (isset($data["url"]) AND isset($data["guid"]) AND isset($data["baseurl"]) AND
-                       isset($data["pubkey"]) AND ($hcard != "")) {
-                       $data["network"] = NETWORK_DIASPORA;
-
-                       // The Diaspora handle must always be lowercase
-                       $data["addr"] = strtolower($data["addr"]);
-
-                       // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it
-                       $data["notify"] = $data["baseurl"]."/receive/users/".$data["guid"];
-                       $data["batch"] = $data["baseurl"]."/receive/public";
-               } else
-                       return false;
-
-               return $data;
-       }
-
-       /**
-        * @brief Check for OStatus contact
-        *
-        * @param array $webfinger Webfinger data
-        *
-        * @return array OStatus data
-        */
-       private function ostatus($webfinger) {
-               $data = array();
-               if (is_array($webfinger["aliases"])) {
-                       foreach ($webfinger["aliases"] AS $alias) {
-                               if (strstr($alias, "@")) {
-                                       $data["addr"] = str_replace('acct:', '', $alias);
-                               }
-                       }
-               }
-
-               if (is_string($webfinger["subject"]) AND strstr($webfinger["subject"], "@")) {
-                       $data["addr"] = str_replace('acct:', '', $webfinger["subject"]);
-               }
-               $pubkey = "";
-               foreach ($webfinger["links"] AS $link) {
-                       if (($link["rel"] == "http://webfinger.net/rel/profile-page") AND
-                               ($link["type"] == "text/html") AND ($link["href"] != "")) {
-                               $data["url"] = $link["href"];
-                       } elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) {
-                               $data["notify"] = $link["href"];
-                       } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) {
-                               $data["poll"] = $link["href"];
-                       } elseif (($link["rel"] == "magic-public-key") AND ($link["href"] != "")) {
-                               $pubkey = $link["href"];
-
-                               if (substr($pubkey, 0, 5) === 'data:') {
-                                       if (strstr($pubkey, ',')) {
-                                               $pubkey = substr($pubkey, strpos($pubkey, ',') + 1);
-                                       } else {
-                                               $pubkey = substr($pubkey, 5);
-                                       }
-                               } elseif (normalise_link($pubkey) == 'http://') {
-                                       $ret = z_fetch_url($pubkey);
-                                       if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                                               return false;
-                                       }
-                                       $pubkey = $ret['body'];
-                               }
-
-                               $key = explode(".", $pubkey);
-
-                               if (sizeof($key) >= 3) {
-                                       $m = base64url_decode($key[1]);
-                                       $e = base64url_decode($key[2]);
-                                       $data["pubkey"] = metopem($m,$e);
-                               }
-                       }
-               }
-
-               if (isset($data["notify"]) AND isset($data["pubkey"]) AND
-                       isset($data["poll"]) AND isset($data["url"])) {
-                       $data["network"] = NETWORK_OSTATUS;
-               } else {
-                       return false;
-               }
-               // Fetch all additional data from the feed
-               $ret = z_fetch_url($data["poll"]);
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $feed = $ret['body'];
-               $feed_data = feed_import($feed,$dummy1,$dummy2, $dummy3, true);
-               if (!$feed_data) {
-                       return false;
-               }
-               if ($feed_data["header"]["author-name"] != "") {
-                       $data["name"] = $feed_data["header"]["author-name"];
-               }
-               if ($feed_data["header"]["author-nick"] != "") {
-                       $data["nick"] = $feed_data["header"]["author-nick"];
-               }
-               if ($feed_data["header"]["author-avatar"] != "") {
-                       $data["photo"] = ostatus::fix_avatar($feed_data["header"]["author-avatar"], $data["url"]);
-               }
-               if ($feed_data["header"]["author-id"] != "") {
-                       $data["alias"] = $feed_data["header"]["author-id"];
-               }
-               if ($feed_data["header"]["author-location"] != "") {
-                       $data["location"] = $feed_data["header"]["author-location"];
-               }
-               if ($feed_data["header"]["author-about"] != "") {
-                       $data["about"] = $feed_data["header"]["author-about"];
-               }
-               // OStatus has serious issues when the the url doesn't fit (ssl vs. non ssl)
-               // So we take the value that we just fetched, although the other one worked as well
-               if ($feed_data["header"]["author-link"] != "") {
-                       $data["url"] = $feed_data["header"]["author-link"];
-               }
-               /// @todo Fetch location and "about" from the feed as well
-               return $data;
-       }
-
-       /**
-        * @brief Fetch data from a pump.io profile page
-        *
-        * @param string $profile Link to the profile page
-        *
-        * @return array profile data
-        */
-       private function pumpio_profile_data($profile) {
-
-               $doc = new DOMDocument();
-               if (!@$doc->loadHTMLFile($profile))
-                       return false;
-
-               $xpath = new DomXPath($doc);
-
-               $data = array();
-
-               // This is ugly - but pump.io doesn't seem to know a better way for it
-               $data["name"] = trim($xpath->query("//h1[@class='media-header']")->item(0)->nodeValue);
-               $pos = strpos($data["name"], chr(10));
-               if ($pos)
-                       $data["name"] = trim(substr($data["name"], 0, $pos));
-
-               $avatar = $xpath->query("//img[@class='img-rounded media-object']")->item(0);
-               if ($avatar)
-                       foreach ($avatar->attributes as $attribute)
-                               if ($attribute->name == "src")
-                                       $data["photo"] = trim($attribute->value);
-
-               $data["location"] = $xpath->query("//p[@class='location']")->item(0)->nodeValue;
-               $data["about"] = $xpath->query("//p[@class='summary']")->item(0)->nodeValue;
-
-               return $data;
-       }
-
-       /**
-        * @brief Check for pump.io contact
-        *
-        * @param array $webfinger Webfinger data
-        *
-        * @return array pump.io data
-        */
-       private function pumpio($webfinger) {
-
-               $data = array();
-               foreach ($webfinger["links"] AS $link) {
-                       if (($link["rel"] == "http://webfinger.net/rel/profile-page") AND
-                               ($link["type"] == "text/html") AND ($link["href"] != ""))
-                               $data["url"] = $link["href"];
-                       elseif (($link["rel"] == "activity-inbox") AND ($link["href"] != ""))
-                               $data["notify"] = $link["href"];
-                       elseif (($link["rel"] == "activity-outbox") AND ($link["href"] != ""))
-                               $data["poll"] = $link["href"];
-                       elseif (($link["rel"] == "dialback") AND ($link["href"] != ""))
-                               $data["dialback"] = $link["href"];
-               }
-               if (isset($data["poll"]) AND isset($data["notify"]) AND
-                       isset($data["dialback"]) AND isset($data["url"])) {
-
-                       // by now we use these fields only for the network type detection
-                       // So we unset all data that isn't used at the moment
-                       unset($data["dialback"]);
-
-                       $data["network"] = NETWORK_PUMPIO;
-               } else
-                       return false;
-
-               $profile_data = self::pumpio_profile_data($data["url"]);
-
-               if (!$profile_data)
-                       return false;
-
-               $data = array_merge($data, $profile_data);
-
-               return $data;
-       }
-
-       /**
-        * @brief Check page for feed link
-        *
-        * @param string $url Page link
-        *
-        * @return string feed link
-        */
-       private function get_feed_link($url) {
-               $doc = new DOMDocument();
-
-               if (!@$doc->loadHTMLFile($url))
-                       return false;
-
-               $xpath = new DomXPath($doc);
-
-               //$feeds = $xpath->query("/html/head/link[@type='application/rss+xml']");
-               $feeds = $xpath->query("/html/head/link[@type='application/rss+xml' and @rel='alternate']");
-               if (!is_object($feeds))
-                       return false;
-
-               if ($feeds->length == 0)
-                       return false;
-
-               $feed_url = "";
-
-               foreach ($feeds AS $feed) {
-                       $attr = array();
-                       foreach ($feed->attributes as $attribute)
-                       $attr[$attribute->name] = trim($attribute->value);
-
-                       if ($feed_url == "")
-                               $feed_url = $attr["href"];
-               }
-
-               return $feed_url;
-       }
-
-       /**
-        * @brief Check for feed contact
-        *
-        * @param string $url Profile link
-        * @param boolean $probe Do a probe if the page contains a feed link
-        *
-        * @return array feed data
-        */
-       private function feed($url, $probe = true) {
-               $ret = z_fetch_url($url);
-               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
-                       return false;
-               }
-               $feed = $ret['body'];
-               $feed_data = feed_import($feed, $dummy1, $dummy2, $dummy3, true);
-
-               if (!$feed_data) {
-                       if (!$probe)
-                               return false;
-
-                       $feed_url = self::get_feed_link($url);
-
-                       if (!$feed_url)
-                               return false;
-
-                       return self::feed($feed_url, false);
-               }
-
-               if ($feed_data["header"]["author-name"] != "")
-                       $data["name"] = $feed_data["header"]["author-name"];
-
-               if ($feed_data["header"]["author-nick"] != "")
-                       $data["nick"] = $feed_data["header"]["author-nick"];
-
-               if ($feed_data["header"]["author-avatar"] != "")
-                       $data["photo"] = $feed_data["header"]["author-avatar"];
-
-               if ($feed_data["header"]["author-id"] != "")
-                       $data["alias"] = $feed_data["header"]["author-id"];
-
-               $data["url"] = $url;
-               $data["poll"] = $url;
-
-               if ($feed_data["header"]["author-link"] != "")
-                       $data["baseurl"] = $feed_data["header"]["author-link"];
-               else
-                       $data["baseurl"] = $data["url"];
-
-               $data["network"] = NETWORK_FEED;
-
-               return $data;
-       }
-
-       /**
-        * @brief Check for mail contact
-        *
-        * @param string $uri Profile link
-        * @param integer $uid User ID
-        *
-        * @return array mail data
-        */
-       private function mail($uri, $uid) {
-
-               if (!validate_email($uri))
-                       return false;
-
-               $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid));
-
-               $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid));
-
-               if (dbm::is_result($x) && dbm::is_result($r)) {
-                       $mailbox = construct_mailbox_name($r[0]);
-                       $password = '';
-                       openssl_private_decrypt(hex2bin($r[0]['pass']), $password,$x[0]['prvkey']);
-                       $mbox = email_connect($mailbox,$r[0]['user'], $password);
-                       if(!mbox)
-                               return false;
-               }
-
-               $msgs = email_poll($mbox, $uri);
-               logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG);
-
-               if (!count($msgs))
-                       return false;
-
-               $data = array();
-
-               $data["addr"] = $uri;
-               $data["network"] = NETWORK_MAIL;
-               $data["name"] = substr($uri, 0, strpos($uri,'@'));
-               $data["nick"] = $data["name"];
-               $data["photo"] = avatar_img($uri);
-
-               $phost = substr($uri, strpos($uri,'@') + 1);
-               $data["url"] = 'http://'.$phost."/".$data["nick"];
-               $data["notify"] = 'smtp '.random_string();
-               $data["poll"] = 'email '.random_string();
-
-               $x = email_msg_meta($mbox, $msgs[0]);
-               if(stristr($x[0]->from, $uri))
-                       $adr = imap_rfc822_parse_adrlist($x[0]->from, '');
-               elseif(stristr($x[0]->to, $uri))
-                       $adr = imap_rfc822_parse_adrlist($x[0]->to, '');
-               if(isset($adr)) {
-                       foreach($adr as $feadr) {
-                               if((strcasecmp($feadr->mailbox, $data["name"]) == 0)
-                                       &&(strcasecmp($feadr->host, $phost) == 0)
-                                       && (strlen($feadr->personal))) {
-
-                                       $personal = imap_mime_header_decode($feadr->personal);
-                                       $data["name"] = "";
-                                       foreach($personal as $perspart)
-                                               if ($perspart->charset != "default")
-                                                       $data["name"] .= iconv($perspart->charset, 'UTF-8//IGNORE', $perspart->text);
-                                               else
-                                                       $data["name"] .= $perspart->text;
-
-                                       $data["name"] = notags($data["name"]);
-                               }
-                       }
-               }
-               imap_close($mbox);
-
-               return $data;
-       }
-}
-?>
diff --git a/include/Scrape.php b/include/Scrape.php
deleted file mode 100644 (file)
index bb9af60..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-require_once('include/Probe.php');
-
-/**
- *
- * Probe a network address to discover what kind of protocols we need to communicate with it.
- *
- * Warning: this function is a bit touchy and there are some subtle dependencies within the logic flow.
- * Edit with care.
- *
- */
-
-/**
- *
- * PROBE_DIASPORA has a bias towards returning Diaspora information
- * while PROBE_NORMAL has a bias towards dfrn/zot - in the case where
- * an address (such as a Friendica address) supports more than one type
- * of network.
- *
- */
-
-define('PROBE_NORMAL',   0);
-define('PROBE_DIASPORA', 1);
-
-function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
-
-       if ($mode == PROBE_DIASPORA)
-               $network = NETWORK_DIASPORA;
-       else
-               $network = "";
-
-       $data = Probe::uri($url, $network);
-
-       return $data;
-}
index d67b92d8b00f60a4e38ab0664510adb794b336ae..f4de32f8f8db4f3609594461e4575bb091d9f98c 100644 (file)
@@ -5,6 +5,8 @@
  * @brief This file contains the Smilies class which contains functions to handle smiles
  */
 
+use Friendica\App;
+
 /**
  * This class contains functions to handle smiles
  */
@@ -13,13 +15,13 @@ class Smilies {
 
        /**
         * @brief Function to list all smilies
-        * 
+        *
         * Get an array of all smilies, both internal and from addons.
-        * 
+        *
         * @return array
         *      'texts' => smilie shortcut
         *      'icons' => icon in html
-        * 
+        *
         * @hook smilie ('texts' => smilies texts array, 'icons' => smilies html array)
         */
        public static function get_list() {
@@ -64,41 +66,41 @@ class Smilies {
                );
 
                $icons = array(
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" title="&lt;3" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;/3" title="&lt;/3" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;\\3" title="&lt;\\3" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-smile.gif" alt=":-)" title=":-)" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-wink.gif" alt=";-)" title=";-)" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-frown.gif" alt=":-(" title=":-(" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" title=":-P" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-p" title=":-P" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\" title=":-\" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\" title=":-\" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" title=":-x" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" title=":-X" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-laughing.gif" alt=":-D" title=":-D"  />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt="8-|" title="8-|" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt="8-O" title="8-O" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-surprised.gif" alt=":-O" title="8-O" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-thumbsup.gif" alt="\\o/" title="\\o/" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="o.O" title="o.O" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="O.o" title="O.o" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="o_O" title="o_O" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-Oo.gif" alt="O_o" title="O_o" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-cry.gif" alt=":\'(" title=":\'("/>',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-foot-in-mouth.gif" alt=":-!" title=":-!" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-undecided.gif" alt=":-/" title=":-/" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-embarassed.gif" alt=":-[" title=":-[" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-cool.gif" alt="8-)" title="8-)" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/beer_mug.gif" alt=":beer" title=":beer" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/beer_mug.gif" alt=":homebrew" title=":homebrew" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/coffee.gif" alt=":coffee" title=":coffee" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-facepalm.gif" alt=":facepalm" title=":facepalm" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/like.gif" alt=":like" title=":like" />',
-               '<img class="smiley" src="' . app::get_baseurl() . '/images/dislike.gif" alt=":dislike" title=":dislike" />',
-               '<a href="http://friendica.com">~friendica <img class="smiley" src="' . app::get_baseurl() . '/images/friendica-16.png" alt="~friendica" title="~friendica" /></a>',
-               '<a href="http://redmatrix.me/">red<img class="smiley" src="' . app::get_baseurl() . '/images/rm-16.png" alt="red#" title="red#" />matrix</a>',
-               '<a href="http://redmatrix.me/">red<img class="smiley" src="' . app::get_baseurl() . '/images/rm-16.png" alt="red#matrix" title="red#matrix" />matrix</a>'
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" title="&lt;3" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;/3" title="&lt;/3" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-brokenheart.gif" alt="&lt;\\3" title="&lt;\\3" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-smile.gif" alt=":-)" title=":-)" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-wink.gif" alt=";-)" title=";-)" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-frown.gif" alt=":-(" title=":-(" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" title=":-P" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-p" title=":-P" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\" title=":-\" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-kiss.gif" alt=":-\" title=":-\" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" title=":-x" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" title=":-X" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-laughing.gif" alt=":-D" title=":-D"  />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-surprised.gif" alt="8-|" title="8-|" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-surprised.gif" alt="8-O" title="8-O" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-surprised.gif" alt=":-O" title="8-O" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-thumbsup.gif" alt="\\o/" title="\\o/" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-Oo.gif" alt="o.O" title="o.O" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-Oo.gif" alt="O.o" title="O.o" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-Oo.gif" alt="o_O" title="o_O" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-Oo.gif" alt="O_o" title="O_o" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-cry.gif" alt=":\'(" title=":\'("/>',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-foot-in-mouth.gif" alt=":-!" title=":-!" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-undecided.gif" alt=":-/" title=":-/" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-embarassed.gif" alt=":-[" title=":-[" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-cool.gif" alt="8-)" title="8-)" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/beer_mug.gif" alt=":beer" title=":beer" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/beer_mug.gif" alt=":homebrew" title=":homebrew" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/coffee.gif" alt=":coffee" title=":coffee" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-facepalm.gif" alt=":facepalm" title=":facepalm" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/like.gif" alt=":like" title=":like" />',
+               '<img class="smiley" src="' . App::get_baseurl() . '/images/dislike.gif" alt=":dislike" title=":dislike" />',
+               '<a href="http://friendica.com">~friendica <img class="smiley" src="' . App::get_baseurl() . '/images/friendica-16.png" alt="~friendica" title="~friendica" /></a>',
+               '<a href="http://redmatrix.me/">red<img class="smiley" src="' . App::get_baseurl() . '/images/rm-16.png" alt="red#" title="red#" />matrix</a>',
+               '<a href="http://redmatrix.me/">red<img class="smiley" src="' . App::get_baseurl() . '/images/rm-16.png" alt="red#matrix" title="red#matrix" />matrix</a>'
                );
 
                $params = array('texts' => $texts, 'icons' => $icons);
@@ -121,7 +123,7 @@ class Smilies {
         *
         * @param string $s
         * @param boolean $sample
-        * 
+        *
         * @return string HML Output of the Smilie
         */
        public static function replace($s, $sample = false) {
@@ -166,7 +168,7 @@ class Smilies {
         *
         * @param string $x
         * @return string HTML Output
-        * 
+        *
         * @todo: Rework because it doesn't work correctly
         */
        private function preg_heart($x) {
@@ -174,7 +176,7 @@ class Smilies {
                        return $x[0];
                $t = '';
                for($cnt = 0; $cnt < strlen($x[1]); $cnt ++)
-                       $t .= '<img class="smiley" src="' . app::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" />';
+                       $t .= '<img class="smiley" src="' . App::get_baseurl() . '/images/smiley-heart.gif" alt="&lt;3" />';
                $r =  str_replace($x[0],$t,$x[0]);
                return $r;
        }
index f57af575afa3091124e3dff1716d6b288c6c62fe..c7c6bb206aaf5a6d12ba1940792e9657586ee90e 100644 (file)
@@ -4,6 +4,8 @@
  * @file include/acl_selectors.php
  */
 
+use Friendica\App;
+
 require_once "include/contact_selectors.php";
 require_once "include/contact_widgets.php";
 require_once "include/DirSearch.php";
@@ -543,7 +545,7 @@ function acl_lookup(App $a, $out_type = 'json') {
 
        if ($type == '') {
 
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
                        AND NOT (`network` IN ('%s', '%s'))
                        $sql_extra2
@@ -552,7 +554,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                        dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET)
                );
        } elseif ($type == 'c') {
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
                        AND NOT (`network` IN ('%s'))
                        $sql_extra2
@@ -562,7 +564,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                );
        }
        elseif ($type == 'm') {
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact`
                        WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
                        AND `network` IN ('%s','%s','%s')
                        $sql_extra2
@@ -573,7 +575,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                        dbesc(NETWORK_DIASPORA)
                );
        } elseif ($type == 'a') {
-               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
+               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
                        WHERE `uid` = %d AND `pending` = 0
                        $sql_extra2
                        ORDER BY `name` ASC ",
@@ -617,6 +619,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                                'network' => $g['network'],
                                'link'    => $g['url'],
                                'nick'    => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']),
+                               'addr'    => htmlentities(($g['addr']) ? $g['addr'] : $g['url']),
                                'forum'   => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0),
                        );
                }
@@ -661,6 +664,7 @@ function acl_lookup(App $a, $out_type = 'json') {
                                                'network' => $contact['network'],
                                                'link'    => $contact['url'],
                                                'nick'    => htmlentities($contact['nick'] ? : $contact['addr']),
+                                               'addr'    => htmlentities(($contact['addr']) ? $contact['addr'] : $contact['url']),
                                                'forum'   => $contact['forum']
                                        );
                                }
index 97c09c20a907acf8dc41c2e052bd8bc239f936e3..67e191725897aca3b4ff89aad97038f7c4af82f8 100644 (file)
@@ -6,7 +6,8 @@
  * @todo Automatically detect if incoming data is HTML or BBCode
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/HTTPExceptions.php';
 require_once 'include/bbcode.php';
@@ -525,6 +526,15 @@ $called_api = null;
                        }
                }
 
+               if (is_null($user) && x($_GET, 'profileurl')) {
+                       $user = dbesc(normalise_link($_GET['profileurl']));
+                       $nick = $user;
+                       $extra_query = "AND `contact`.`nurl` = '%s' ";
+                       if (api_user() !== false) {
+                               $extra_query .= "AND `contact`.`uid`=".intval(api_user());
+                       }
+               }
+
                if (is_null($user) AND ($a->argc > (count($called_api) - 1)) AND (count($called_api) > 0)) {
                        $argid = count($called_api);
                        list($user, $null) = explode(".", $a->argv[$argid]);
@@ -1400,6 +1410,7 @@ $called_api = null;
 
        /// @TODO move to top of file or somewhere better
        api_register_func('api/users/show','api_users_show');
+       api_register_func('api/externalprofile/show','api_users_show');
 
        function api_users_search($type) {
 
@@ -3276,14 +3287,117 @@ $called_api = null;
        api_register_func('api/oauth/request_token', 'api_oauth_request_token', false);
        api_register_func('api/oauth/access_token', 'api_oauth_access_token', false);
 
-       function api_fr_photos_list($type) {
+
+       /**
+        * @brief delete a complete photoalbum with all containing photos from database through api
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_fr_photoalbum_delete($type) {
+               if (api_user() === false) {
+                       throw new ForbiddenException();
+               }
+               // input params
+               $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : "");
+
+               // we do not allow calls without album string
+               if ($album == "") {
+                       throw new BadRequestException("no albumname specified");
+               }
+               // check if album is existing
+               $r = q("SELECT DISTINCT `resource-id` FROM `photo` WHERE `uid` = %d AND `album` = '%s'",
+                               intval(api_user()),
+                               dbesc($album));
+               if (!dbm::is_result($r))
+                       throw new BadRequestException("album not available");
+
+               // function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore
+               // to the user and the contacts of the users (drop_items() performs the federation of the deletion to other networks
+               foreach ($r as $rr) {
+                       $photo_item = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'",
+                                               intval(local_user()),
+                                               dbesc($rr['resource-id'])
+                                               );
+
+                       if (!dbm::is_result($photo_item)) {
+                               throw new InternalServerErrorException("problem with deleting items occured");
+                       }
+                       drop_item($photo_item[0]['id'],false);
+               }
+
+               // now let's delete all photos from the album
+               $result = q("DELETE FROM `photo` WHERE `uid` = %d AND `album` = '%s'",
+                               intval(api_user()),
+                               dbesc($album));
+
+               // return success of deletion or error message
+               if ($result) {
+                       $answer = array('result' => 'deleted', 'message' => 'album `' . $album . '` with all containing photos has been deleted.');
+                       return api_format_data("photoalbum_delete", $type, array('$result' => $answer));
+               } else {
+                       throw new InternalServerErrorException("unknown error - deleting from database failed");
+               }
+
+       }
+
+       /**
+        * @brief update the name of the album for all photos of an album
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_fr_photoalbum_update($type) {
                if (api_user() === false) {
                        throw new ForbiddenException();
                }
+               // input params
+               $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : "");
+               $album_new = (x($_REQUEST,'album_new') ? $_REQUEST['album_new'] : "");
+
+               // we do not allow calls without album string
+               if ($album == "") {
+                       throw new BadRequestException("no albumname specified");
+               }
+               if ($album_new == "") {
+                       throw new BadRequestException("no new albumname specified");
+               }
+               // check if album is existing
+               $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `album` = '%s'",
+                               intval(api_user()),
+                               dbesc($album));
+               if (!dbm::is_result($r)) {
+                       throw new BadRequestException("album not available");
+               }
+               // now let's update all photos to the albumname
+               $result = q("UPDATE `photo` SET `album` = '%s' WHERE `uid` = %d AND `album` = '%s'",
+                               dbesc($album_new),
+                               intval(api_user()),
+                               dbesc($album));
+
+               // return success of updating or error message
+               if ($result) {
+                       $answer = array('result' => 'updated', 'message' => 'album `' . $album . '` with all containing photos has been renamed to `' . $album_new . '`.');
+                       return api_format_data("photoalbum_update", $type, array('$result' => $answer));
+               } else {
+                       throw new InternalServerErrorException("unknown error - updating in database failed");
+               }
+       }
+
 
-               $r = q("SELECT `resource-id`, MAX(`scale`) AS `scale`, `album`, `filename`, `type`
-                               FROM `photo`
-                               WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`, `album`, `filename`, `type`",
+       /**
+        * @brief list all photos of the authenticated user
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_fr_photos_list($type) {
+               if (api_user() === false) {
+                       throw new ForbiddenException();
+               }
+               $r = q("SELECT `resource-id`, MAX(scale) AS `scale`, `album`, `filename`, `type`, MAX(`created`) AS `created`,
+                               MAX(`edited`) AS `edited`, MAX(`desc`) AS `desc` FROM `photo`
+                               WHERE `uid` = %d AND `album` != 'Contact Photos' GROUP BY `resource-id`",
                        intval(local_user())
                );
                $typetoext = array(
@@ -3291,7 +3405,7 @@ $called_api = null;
                        'image/png' => 'png',
                        'image/gif' => 'gif'
                );
-               $data = array('photo' => array());
+               $data = array('photo'=>array());
                if (dbm::is_result($r)) {
                        foreach ($r as $rr) {
                                $photo = array();
@@ -3300,6 +3414,9 @@ $called_api = null;
                                $photo['filename'] = $rr['filename'];
                                $photo['type'] = $rr['type'];
                                $thumb = App::get_baseurl() . "/photo/" . $rr['resource-id'] . "-" . $rr['scale'] . "." . $typetoext[$rr['type']];
+                               $photo['created'] = $rr['created'];
+                               $photo['edited'] = $rr['edited'];
+                               $photo['desc'] = $rr['desc'];
 
                                if ($type == "xml") {
                                        $data['photo'][] = array("@attributes" => $photo, "1" => $thumb);
@@ -3312,26 +3429,563 @@ $called_api = null;
                return api_format_data("photos", $type, $data);
        }
 
+       /**
+        * @brief upload a new photo or change an existing photo
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_fr_photo_create_update($type) {
+               if (api_user() === false) {
+                       throw new ForbiddenException();
+               }
+               // input params
+               $photo_id = (x($_REQUEST, 'photo_id') ? $_REQUEST['photo_id'] : null);
+               $desc = (x($_REQUEST, 'desc') ? $_REQUEST['desc'] : (array_key_exists('desc', $_REQUEST) ? "" : null)); // extra check necessary to distinguish between 'not provided' and 'empty string'
+               $album = (x($_REQUEST,'album') ? $_REQUEST['album'] : null);
+               $album_new = (x($_REQUEST,'album_new') ? $_REQUEST['album_new'] : null);
+               $allow_cid = (x($_REQUEST, 'allow_cid') ? $_REQUEST['allow_cid'] : (array_key_exists('allow_cid', $_REQUEST) ? " " : null));
+               $deny_cid = (x($_REQUEST, 'deny_cid') ? $_REQUEST['deny_cid'] : (array_key_exists('deny_cid', $_REQUEST) ? " " : null));
+               $allow_gid = (x($_REQUEST, 'allow_gid') ? $_REQUEST['allow_gid'] : (array_key_exists('allow_gid', $_REQUEST) ? " " : null));
+               $deny_gid = (x($_REQUEST, 'deny_gid') ? $_REQUEST['deny_gid'] : (array_key_exists('deny_gid', $_REQUEST) ? " " : null));
+               $visibility = (x($_REQUEST, 'visibility') ? (($_REQUEST['visibility'] == "true" || $_REQUEST['visibility'] == 1) ? true : false) : false);
+
+               // do several checks on input parameters
+               // we do not allow calls without album string
+               if ($album == null) {
+                       throw new BadRequestException("no albumname specified");
+               }
+               // if photo_id == null --> we are uploading a new photo
+               if ($photo_id == null) {
+                       $mode = "create";
+
+                       // error if no media posted in create-mode
+                       if (!x($_FILES,'media')) {
+                               // Output error
+                               throw new BadRequestException("no media data submitted");
+                       }
+
+                       // album_new will be ignored in create-mode
+                       $album_new = "";
+               } else {
+                       $mode = "update";
+
+                       // check if photo is existing in database
+                       $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'",
+                                       intval(api_user()),
+                                       dbesc($photo_id),
+                                       dbesc($album));
+                       if (!dbm::is_result($r)) {
+                               throw new BadRequestException("photo not available");
+                       }
+               }
+
+               // checks on acl strings provided by clients
+               $acl_input_error = false;
+               $acl_input_error |= check_acl_input($allow_cid);
+               $acl_input_error |= check_acl_input($deny_cid);
+               $acl_input_error |= check_acl_input($allow_gid);
+               $acl_input_error |= check_acl_input($deny_gid);
+               if ($acl_input_error) {
+                       throw new BadRequestException("acl data invalid");
+               }
+               // now let's upload the new media in create-mode
+               if ($mode == "create") {
+                       $media = $_FILES['media'];
+                       $data = save_media_to_database("photo", $media, $type, $album, trim($allow_cid), trim($deny_cid), trim($allow_gid), trim($deny_gid), $desc, $visibility);
+
+                       // return success of updating or error message
+                       if (!is_null($data)) {
+                               return api_format_data("photo_create", $type, $data);
+                       } else {
+                               throw new InternalServerErrorException("unknown error - uploading photo failed, see Friendica log for more information");
+                       }
+               }
+
+               // now let's do the changes in update-mode
+               if ($mode == "update") {
+                       $sql_extra = "";
+
+                       if (!is_null($desc)) {
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`desc` = '$desc'";
+                       }
+
+                       if (!is_null($album_new)) {
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`album` = '$album_new'";
+                       }
+
+                       if (!is_null($allow_cid)) {
+                               $allow_cid = trim($allow_cid);
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`allow_cid` = '$allow_cid'";
+                       }
+
+                       if (!is_null($deny_cid)) {
+                               $deny_cid = trim($deny_cid);
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`deny_cid` = '$deny_cid'";
+                       }
+
+                       if (!is_null($allow_gid)) {
+                               $allow_gid = trim($allow_gid);
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`allow_gid` = '$allow_gid'";
+                       }
+
+                       if (!is_null($deny_gid)) {
+                               $deny_gid = trim($deny_gid);
+                               $sql_extra .= (($sql_extra != "") ? " ," : "") . "`deny_gid` = '$deny_gid'";
+                       }
+
+                       $result = false;
+                       if ($sql_extra != "") {
+                               $nothingtodo = false;
+                               $result = q("UPDATE `photo` SET %s, `edited`='%s' WHERE `uid` = %d AND `resource-id` = '%s' AND `album` = '%s'",
+                                               $sql_extra,
+                                               datetime_convert(),   // update edited timestamp
+                                               intval(api_user()),
+                                               dbesc($photo_id),
+                                               dbesc($album));
+                       } else {
+                               $nothingtodo = true;
+                       }
+
+                       if (x($_FILES,'media')) {
+                               $nothingtodo = false;
+                               $media = $_FILES['media'];
+                               $data = save_media_to_database("photo", $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, 0, $visibility, $photo_id);
+                               if (!is_null($data)) {
+                                       return api_format_data("photo_update", $type, $data);
+                               }
+                       }
+
+                       // return success of updating or error message
+                       if ($result) {
+                               $answer = array('result' => 'updated', 'message' => 'Image id `' . $photo_id . '` has been updated.');
+                               return api_format_data("photo_update", $type, array('$result' => $answer));
+                       } else {
+                               if ($nothingtodo) {
+                                       $answer = array('result' => 'cancelled', 'message' => 'Nothing to update for image id `' . $photo_id . '`.');
+                                       return api_format_data("photo_update", $type, array('$result' => $answer));
+                               }
+                               throw new InternalServerErrorException("unknown error - update photo entry in database failed");
+                       }
+               }
+               throw new InternalServerErrorException("unknown error - this error on uploading or updating a photo should never happen");
+       }
+
+
+       /**
+        * @brief delete a single photo from the database through api
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_fr_photo_delete($type) {
+               if (api_user() === false) {
+                       throw new ForbiddenException();
+               }
+               // input params
+               $photo_id = (x($_REQUEST, 'photo_id') ? $_REQUEST['photo_id'] : null);
+
+               // do several checks on input parameters
+               // we do not allow calls without photo id
+               if ($photo_id == null) {
+                       throw new BadRequestException("no photo_id specified");
+               }
+               // check if photo is existing in database
+               $r = q("SELECT `id` FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'",
+                               intval(api_user()),
+                               dbesc($photo_id)
+                       );
+               if (!dbm::is_result($r)) {
+                       throw new BadRequestException("photo not available");
+               }
+               // now we can perform on the deletion of the photo
+               $result = q("DELETE FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'",
+                               intval(api_user()),
+                               dbesc($photo_id));
+
+               // return success of deletion or error message
+               if ($result) {
+                       // retrieve the id of the parent element (the photo element)
+                       $photo_item = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'",
+                               intval(local_user()),
+                               dbesc($photo_id)
+                               );
+
+                       if (!dbm::is_result($photo_item)) {
+                               throw new InternalServerErrorException("problem with deleting items occured");
+                       }
+                       // function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore
+                       // to the user and the contacts of the users (drop_items() do all the necessary magic to avoid orphans in database and federate deletion)
+                       drop_item($photo_item[0]['id'], false);
+
+                       $answer = array('result' => 'deleted', 'message' => 'photo with id `' . $photo_id . '` has been deleted from server.');
+                       return api_format_data("photo_delete", $type, array('$result' => $answer));
+               } else {
+                       throw new InternalServerErrorException("unknown error on deleting photo from database table");
+               }
+       }
+
+
+       /**
+        * @brief returns the details of a specified photo id, if scale is given, returns the photo data in base 64
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
        function api_fr_photo_detail($type) {
                if (api_user() === false) {
                        throw new ForbiddenException();
-               } elseif (!x($_REQUEST, 'photo_id')) {
+               }
+               if (!x($_REQUEST, 'photo_id')) {
                        throw new BadRequestException("No photo id.");
                }
 
                $scale = (x($_REQUEST, 'scale') ? intval($_REQUEST['scale']) : false);
-               $scale_sql = ($scale === false ? "" : sprintf("AND `scale`=%d",intval($scale)));
-               $data_sql = ($scale === false ? "" : "ANY_VALUE(`data`) AS data`,");
-
-               $r = q("SELECT %s ANY_VALUE(`resource-id`) AS `resource-id`, ANY_VALUE(`created`) AS `created`,
-                               ANY_VALUE(`edited`) AS `edited`, ANY_VALUE(`title`) AS `title`, ANY_VALUE(`desc`) AS `desc`,
-                               ANY_VALUE(`album`) AS `album`, ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`type`) AS `type`,
-                               ANY_VALUE(`height`) AS `height`, ANY_VALUE(`width`) AS `width`, ANY_VALUE(`datasize`) AS `datasize`,
-                               ANY_VALUE(`profile`) AS `profile`, min(`scale`) as minscale, max(`scale`) as maxscale
-                               FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' %s",
+               $photo_id = $_REQUEST['photo_id'];
+
+               // prepare json/xml output with data from database for the requested photo
+               $data = prepare_photo_data($type, $scale, $photo_id);
+
+               return api_format_data("photo_detail", $type, $data);
+       }
+
+
+       /**
+        * @brief updates the profile image for the user (either a specified profile or the default profile)
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_account_update_profile_image($type) {
+               if (api_user() === false) {
+                       throw new ForbiddenException();
+               }
+               // input params
+               $profileid = (x($_REQUEST, 'profile_id') ? $_REQUEST['profile_id'] : 0);
+
+               // error if image data is missing
+               if (!x($_FILES, 'image')) {
+                       throw new BadRequestException("no media data submitted");
+               }
+
+               // check if specified profile id is valid
+               if ($profileid != 0) {
+                       $r = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `id` = %d",
+                               intval(api_user()),
+                               intval($profileid));
+                       // error message if specified profile id is not in database
+                       if (!dbm::is_result($r)) {
+                               throw new BadRequestException("profile_id not available");
+                       }
+                       $is_default_profile = $r['profile'];
+               } else {
+                       $is_default_profile = 1;
+               }
+
+               // get mediadata from image or media (Twitter call api/account/update_profile_image provides image)
+               $media = null;
+               if (x($_FILES, 'image')) {
+                       $media = $_FILES['image'];
+               } elseif (x($_FILES, 'media')) {
+                       $media = $_FILES['media'];
+               }
+               // save new profile image
+               $data = save_media_to_database("profileimage", $media, $type, t('Profile Photos'), "", "", "", "", "", $is_default_profile);
+
+               // get filetype
+               if (is_array($media['type'])) {
+                       $filetype = $media['type'][0];
+               } else {
+                       $filetype = $media['type'];
+               }
+               if ($filetype == "image/jpeg") {
+                       $fileext = "jpg";
+               } elseif ($filetype == "image/png") {
+                       $fileext = "png";
+               }
+               // change specified profile or all profiles to the new resource-id
+               if ($is_default_profile) {
+                       $r = q("UPDATE `photo` SET `profile` = 0 WHERE `profile` = 1 AND `resource-id` != '%s' AND `uid` = %d",
+                               dbesc($data['photo']['id']),
+                               intval(local_user())
+                       );
+
+                       $r = q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s'  WHERE `self` AND `uid` = %d",
+                               dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-4.' . $fileext),
+                               dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-5.' . $fileext),
+                               dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-6.' . $fileext),
+                               intval(local_user())
+                       );
+               } else {
+                       $r = q("UPDATE `profile` SET `photo` = '%s', `thumb` = '%s' WHERE `id` = %d AND `uid` = %d",
+                               dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-4.' . $filetype),
+                               dbesc(App::get_baseurl() . '/photo/' . $data['photo']['id'] . '-5.' . $filetype),
+                               intval($_REQUEST['profile']),
+                               intval(local_user())
+                                       );
+               }
+
+               // we'll set the updated profile-photo timestamp even if it isn't the default profile,
+               // so that browsers will do a cache update unconditionally
+
+               $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
+                       dbesc(datetime_convert()),
+                       intval(local_user())
+               );
+
+               // Update global directory in background
+               //$user = api_get_user(get_app());
+               $url = App::get_baseurl() . '/profile/' . get_app()->user['nickname'];
+               if ($url && strlen(get_config('system', 'directory'))) {
+                       proc_run(PRIORITY_LOW, "include/directory.php", $url);
+               }
+
+               require_once 'include/profile_update.php';
+               profile_change();
+
+               // output for client
+               if ($data) {
+                       return api_account_verify_credentials($type);
+               } else {
+                       // SaveMediaToDatabase failed for some reason
+                       throw new InternalServerErrorException("image upload failed");
+               }
+       }
+
+       // place api-register for photoalbum calls before 'api/friendica/photo', otherwise this function is never reached
+       api_register_func('api/friendica/photoalbum/delete', 'api_fr_photoalbum_delete', true, API_METHOD_DELETE);
+       api_register_func('api/friendica/photoalbum/update', 'api_fr_photoalbum_update', true, API_METHOD_POST);
+       api_register_func('api/friendica/photos/list', 'api_fr_photos_list', true);
+       api_register_func('api/friendica/photo/create', 'api_fr_photo_create_update', true, API_METHOD_POST);
+       api_register_func('api/friendica/photo/update', 'api_fr_photo_create_update', true, API_METHOD_POST);
+       api_register_func('api/friendica/photo/delete', 'api_fr_photo_delete', true, API_METHOD_DELETE);
+       api_register_func('api/friendica/photo', 'api_fr_photo_detail', true);
+       api_register_func('api/account/update_profile_image', 'api_account_update_profile_image', true, API_METHOD_POST);
+
+
+       function check_acl_input($acl_string) {
+               if ($acl_string == null || $acl_string == " ") {
+                       return false;
+               }
+               $contact_not_found = false;
+
+               // split <x><y><z> into array of cid's
+               preg_match_all("/<[A-Za-z0-9]+>/", $acl_string, $array);
+
+               // check for each cid if it is available on server
+               $cid_array = $array[0];
+               foreach ($cid_array as $cid) {
+                       $cid = str_replace("<", "", $cid);
+                       $cid = str_replace(">", "", $cid);
+                       $contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d",
+                                                       intval($cid),
+                                                       intval(api_user()));
+                       $contact_not_found |= !dbm::is_result($contact);
+               }
+               return $contact_not_found;
+       }
+
+       function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, $profile = 0, $visibility = false, $photo_id = null) {
+               $visitor   = 0;
+               $src = "";
+               $filetype = "";
+               $filename = "";
+               $filesize = 0;
+
+               if (is_array($media)) {
+                       if (is_array($media['tmp_name'])) {
+                               $src = $media['tmp_name'][0];
+                       } else {
+                               $src = $media['tmp_name'];
+                       }
+                       if (is_array($media['name'])) {
+                               $filename = basename($media['name'][0]);
+                       } else {
+                               $filename = basename($media['name']);
+                       }
+                       if (is_array($media['size'])) {
+                               $filesize = intval($media['size'][0]);
+                       } else {
+                               $filesize = intval($media['size']);
+                       }
+                       if (is_array($media['type'])) {
+                               $filetype = $media['type'][0];
+                       } else {
+                               $filetype = $media['type'];
+                       }
+               }
+
+               if ($filetype == "") {
+                       $filetype=guess_image_type($filename);
+               }
+               $imagedata = getimagesize($src);
+               if ($imagedata) {
+                       $filetype = $imagedata['mime'];
+               }
+               logger("File upload src: " . $src . " - filename: " . $filename .
+                       " - size: " . $filesize . " - type: " . $filetype, LOGGER_DEBUG);
+
+               // check if there was a php upload error
+               if ($filesize == 0 && $media['error'] == 1) {
+                       throw new InternalServerErrorException("image size exceeds PHP config settings, file was rejected by server");
+               }
+               // check against max upload size within Friendica instance
+               $maximagesize = get_config('system', 'maximagesize');
+               if (($maximagesize) && ($filesize > $maximagesize)) {
+                       $formattedBytes = formatBytes($maximagesize);
+                       throw new InternalServerErrorException("image size exceeds Friendica config setting (uploaded size: $formattedBytes)");
+               }
+
+               // create Photo instance with the data of the image
+               $imagedata = @file_get_contents($src);
+               $ph = new Photo($imagedata, $filetype);
+               if (! $ph->is_valid()) {
+                       throw new InternalServerErrorException("unable to process image data");
+               }
+
+               // check orientation of image
+               $ph->orient($src);
+               @unlink($src);
+
+               // check max length of images on server
+               $max_length = get_config('system', 'max_image_length');
+               if (! $max_length) {
+                       $max_length = MAX_IMAGE_LENGTH;
+               }
+               if ($max_length > 0) {
+                       $ph->scaleImage($max_length);
+                       logger("File upload: Scaling picture to new size " . $max_length, LOGGER_DEBUG);
+               }
+               $width = $ph->getWidth();
+               $height = $ph->getHeight();
+
+               // create a new resource-id if not already provided
+               $hash = ($photo_id == null) ? photo_new_resource() : $photo_id;
+
+               if ($mediatype == "photo") {
+                       // upload normal image (scales 0, 1, 2)
+                       logger("photo upload: starting new photo upload", LOGGER_DEBUG);
+
+                       $r =$ph->store(local_user(), $visitor, $hash, $filename, $album, 0, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                       if (! $r) {
+                               logger("photo upload: image upload with scale 0 (original size) failed");
+                       }
+                       if($width > 640 || $height > 640) {
+                               $ph->scaleImage(640);
+                               $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 1, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                               if (! $r) {
+                                       logger("photo upload: image upload with scale 1 (640x640) failed");
+                               }
+                       }
+
+                       if ($width > 320 || $height > 320) {
+                               $ph->scaleImage(320);
+                               $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 2, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                               if (! $r) {
+                                       logger("photo upload: image upload with scale 2 (320x320) failed");
+                               }
+                       }
+                       logger("photo upload: new photo upload ended", LOGGER_DEBUG);
+               } elseif ($mediatype == "profileimage") {
+                       // upload profile image (scales 4, 5, 6)
+                       logger("photo upload: starting new profile image upload", LOGGER_DEBUG);
+
+                       if ($width > 175 || $height > 175) {
+                               $ph->scaleImage(175);
+                               $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 4, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                               if (! $r) {
+                                       logger("photo upload: profile image upload with scale 4 (175x175) failed");
+                               }
+                       }
+
+                       if ($width > 80 || $height > 80) {
+                               $ph->scaleImage(80);
+                               $r = $ph->store(local_user(),$visitor, $hash, $filename, $album, 5, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                               if (! $r) {
+                                       logger("photo upload: profile image upload with scale 5 (80x80) failed");
+                               }
+                       }
+
+                       if ($width > 48 || $height > 48) {
+                               $ph->scaleImage(48);
+                               $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 6, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
+                               if (! $r) {
+                                       logger("photo upload: profile image upload with scale 6 (48x48) failed");
+                               }
+                       }
+                       $ph->__destruct();
+                       logger("photo upload: new profile image upload ended", LOGGER_DEBUG);
+               }
+
+               if ($r) {
+                       // create entry in 'item'-table on new uploads to enable users to comment/like/dislike the photo
+                       if ($photo_id == null && $mediatype == "photo") {
+                               post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility);
+                       }
+                       // on success return image data in json/xml format (like /api/friendica/photo does when no scale is given)
+                       return prepare_photo_data($type, false, $hash);
+               } else {
+                       throw new InternalServerErrorException("image upload failed");
+               }
+       }
+
+       function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility = false) {
+               // get data about the api authenticated user
+               $uri = item_new_uri(get_app()->get_hostname(), intval(api_user()));
+               $owner_record = q("SELECT * FROM `contact` WHERE `uid`= %d AND `self` LIMIT 1", intval(api_user()));
+
+               $arr = array();
+               $arr['guid']          = get_guid(32);
+               $arr['uid']           = intval(api_user());
+               $arr['uri']           = $uri;
+               $arr['parent-uri']    = $uri;
+               $arr['type']          = 'photo';
+               $arr['wall']          = 1;
+               $arr['resource-id']   = $hash;
+               $arr['contact-id']    = $owner_record[0]['id'];
+               $arr['owner-name']    = $owner_record[0]['name'];
+               $arr['owner-link']    = $owner_record[0]['url'];
+               $arr['owner-avatar']  = $owner_record[0]['thumb'];
+               $arr['author-name']   = $owner_record[0]['name'];
+               $arr['author-link']   = $owner_record[0]['url'];
+               $arr['author-avatar'] = $owner_record[0]['thumb'];
+               $arr['title']         = "";
+               $arr['allow_cid']     = $allow_cid;
+               $arr['allow_gid']     = $allow_gid;
+               $arr['deny_cid']      = $deny_cid;
+               $arr['deny_gid']      = $deny_gid;
+               $arr['last-child']    = 1;
+               $arr['visible']       = $visibility;
+               $arr['origin']        = 1;
+
+               $typetoext = array(
+                               'image/jpeg' => 'jpg',
+                               'image/png' => 'png',
+                               'image/gif' => 'gif'
+                               );
+
+               // adds link to the thumbnail scale photo
+               $arr['body'] = '[url=' . App::get_baseurl() . '/photos/' . $owner_record[0]['name'] . '/image/' . $hash . ']'
+                                       . '[img]' . App::get_baseurl() . '/photo/' . $hash . '-' . "2" . '.'. $typetoext[$filetype] . '[/img]'
+                                       . '[/url]';
+
+               // do the magic for storing the item in the database and trigger the federation to other contacts
+               item_store($arr);
+       }
+
+       function prepare_photo_data($type, $scale, $photo_id) {
+               $scale_sql = ($scale === false ? "" : sprintf("and scale=%d", intval($scale)));
+               $data_sql = ($scale === false ? "" : "data, ");
+
+               // added allow_cid, allow_gid, deny_cid, deny_gid to output as string like stored in database
+               // clients needs to convert this in their way for further processing
+               $r = q("SELECT %s `resource-id`, `created`, `edited`, `title`, `desc`, `album`, `filename`,
+                                               `type`, `height`, `width`, `datasize`, `profile`, `allow_cid`, `deny_cid`, `allow_gid`, `deny_gid`,
+                                           MIN(`scale`) AS `minscale`, MAX(`scale`) AS `maxscale`
+                               FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' %s GROUP BY `resource-id`",
                        $data_sql,
                        intval(local_user()),
-                       dbesc($_REQUEST['photo_id']),
+                       dbesc($photo_id),
                        $scale_sql
                );
 
@@ -3341,6 +3995,7 @@ $called_api = null;
                        'image/gif' => 'gif'
                );
 
+               // prepare output data for photo
                if (dbm::is_result($r)) {
                        $data = array('photo' => $r[0]);
                        $data['photo']['id'] = $data['photo']['resource-id'];
@@ -3353,13 +4008,16 @@ $called_api = null;
                                $data['photo']['links'] = array();
                                for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) {
                                        $data['photo']['links'][$k . ":link"]["@attributes"] = array("type" => $data['photo']['type'],
-                                               "scale" => $k,
-                                               "href" => App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]);
+                                                                                       "scale" => $k,
+                                                                                       "href" => App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']]);
                                }
                        } else {
                                $data['photo']['link'] = array();
+                               // when we have profile images we could have only scales from 4 to 6, but index of array always needs to start with 0
+                               $i = 0;
                                for ($k = intval($data['photo']['minscale']); $k <= intval($data['photo']['maxscale']); $k++) {
-                                       $data['photo']['link'][$k] = App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']];
+                                       $data['photo']['link'][$i] = App::get_baseurl() . "/photo/" . $data['photo']['resource-id'] . "-" . $k . "." . $typetoext[$data['photo']['type']];
+                                       $i++;
                                }
                        }
                        unset($data['photo']['resource-id']);
@@ -3370,12 +4028,53 @@ $called_api = null;
                        throw new NotFoundException();
                }
 
-               return api_format_data("photo_detail", $type, $data);
-       }
+               // retrieve item element for getting activities (like, dislike etc.) related to photo
+               $item = q("SELECT * FROM `item` WHERE `uid` = %d AND `resource-id` = '%s' AND `type` = 'photo'",
+                       intval(local_user()),
+                       dbesc($photo_id)
+               );
+               $data['photo']['friendica_activities'] = api_format_items_activities($item[0], $type);
 
-       api_register_func('api/friendica/photos/list', 'api_fr_photos_list', true);
-       api_register_func('api/friendica/photo', 'api_fr_photo_detail', true);
+               // retrieve comments on photo
+               $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`,
+                       `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+                       `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
+                       `contact`.`id` AS `cid`
+                       FROM `item`
+                       STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
+                               AND (NOT `contact`.`blocked` OR `contact`.`pending`)
+                       WHERE `item`.`parent` = %d AND `item`.`visible`
+                       AND NOT `item`.`moderated` AND NOT `item`.`deleted`
+                       AND `item`.`uid` = %d AND (`item`.`verb`='%s' OR `type`='photo')",
+                       intval($item[0]['parent']),
+                       intval(api_user()),
+                       dbesc(ACTIVITY_POST)
+               );
 
+               // prepare output of comments
+               $commentData = api_format_items($r, api_get_user(get_app()), false, $type);
+               $comments = array();
+               if ($type == "xml") {
+                       $k = 0;
+                       foreach ($commentData as $comment) {
+                               $comments[$k++ . ":comment"] = $comment;
+                       }
+               } else {
+                       foreach ($commentData as $comment) {
+                               $comments[] = $comment;
+                       }
+               }
+               $data['photo']['friendica_comments'] = $comments;
+
+               // include info if rights on photo and rights on item are mismatching
+               $rights_mismatch = $data['photo']['allow_cid'] != $item[0]['allow_cid'] ||
+                       $data['photo']['deny_cid'] != $item[0]['deny_cid'] ||
+                       $data['photo']['allow_gid'] != $item[0]['allow_gid'] ||
+                       $data['photo']['deny_cid'] != $item[0]['deny_cid'];
+               $data['photo']['rights_mismatch'] = $rights_mismatch;
+
+               return $data;
+       }
 
 
        /**
@@ -4299,7 +4998,6 @@ friendships/exists
 friendships/show
 account/update_location
 account/update_profile_background_image
-account/update_profile_image
 blocks/create
 blocks/destroy
 friendica/profile/update
index c1a6120dbbcf6258e66458b2950ef5bb63c29724..5dfe9d3e062aa7865ab5a9f8db87412d438b986f 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once('include/security.php');
 require_once('include/datetime.php');
index 8ee3af8e2be23148342d2eb84bcffb6707ba8da4..9211c5baf091b782119b5da50382ad3e8f7a16b6 100755 (executable)
@@ -32,6 +32,8 @@
  *
  */
 
+use Friendica\App;
+
 if (sizeof($_SERVER["argv"]) == 0)
        die();
 
@@ -47,8 +49,9 @@ require_once("boot.php");
 
 global $a, $db;
 
-if (is_null($a))
-       $a = new App;
+if (is_null($a)) {
+       $a = new App(dirname(__DIR__));
+}
 
 if (is_null($db)) {
        @include(".htconfig.php");
@@ -332,4 +335,3 @@ class exAuth {
                        fclose($this->rLogFile);
        }
 }
-?>
index a07a583538e4ac5e88b1613ff765c50837c83846..80ee1b50dcc0b505f338ee79f1257287ba023f5a 100644 (file)
@@ -1,12 +1,15 @@
 <?php
 
+use Friendica\App;
+use Friendica\Network\Probe;
+
 use League\HTMLToMarkdown\HtmlConverter;
 
-require_once "include/oembed.php";
-require_once "include/event.php";
-require_once "library/markdown.php";
-require_once "include/html2bbcode.php";
-require_once "include/bbcode.php";
+require_once 'include/oembed.php';
+require_once 'include/event.php';
+require_once 'library/markdown.php';
+require_once 'include/html2bbcode.php';
+require_once 'include/bbcode.php';
 
 /**
  * @brief Callback function to replace a Diaspora style mention in a mention for Friendica
index 2715334e46b0712f39aa5e2f514eedc81599c81c..9a43cdb305e140222650bcfdd9dd97f307da934b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
-use \Friendica\Core\Config;
+
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/oembed.php';
 require_once 'include/event.php';
@@ -53,18 +55,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
        }
 
        if ($simplehtml == 7) {
-               $title2 = $data["title"];
-
-               $test1 = trim(html_entity_decode($data["text"],ENT_QUOTES,'UTF-8'));
-               $test2 = trim(html_entity_decode($data["title"],ENT_QUOTES,'UTF-8'));
-
-               // If the link description is similar to the text above then don't add the link description
-               if (($data["title"] != "") AND ((strpos($test1,$test2) !== false) OR
-                       (similar_text($test1,$test2) / strlen($data["title"])) > 0.9)) {
-                       $title2 = $data["url"];
-               }
-               $text = sprintf('<a href="%s" title="%s" class="attachment" rel="nofollow external">%s</a><br />',
-                               $data["url"], $data["title"], $title2);
+               $text = style_url_for_mastodon($data["url"]);
        } elseif (($simplehtml != 4) AND ($simplehtml != 0)) {
                $text = sprintf('<a href="%s" target="_blank">%s</a><br>', $data["url"], $data["title"]);
        } else {
@@ -168,6 +159,54 @@ function cleancss($input) {
        return $cleaned;
 }
 
+/**
+ * @brief Converts [url] BBCodes in a format that looks fine on Mastodon. (callback function)
+ * @param array $match Array with the matching values
+ * @return string reformatted link including HTML codes
+ */
+function bb_style_url($match) {
+        $url = $match[1];
+
+       if (isset($match[2]) AND ($match[1] != $match[2])) {
+               return $match[0];
+       }
+
+        $parts = parse_url($url);
+        if (!isset($parts['scheme'])) {
+                return $match[0];
+        }
+
+       return style_url_for_mastodon($url);
+}
+
+/**
+ * @brief Converts [url] BBCodes in a format that looks fine on Mastodon and GNU Social.
+ * @param string $url URL that is about to be reformatted
+ * @return string reformatted link including HTML codes
+ */
+function style_url_for_mastodon($url) {
+        $styled_url = $url;
+
+        $parts = parse_url($url);
+        $scheme = $parts['scheme'].'://';
+        $styled_url = str_replace($scheme, '', $styled_url);
+
+        $html = '<a href="%s" class="attachment" rel="nofollow noopener" target="_blank">'.
+                 '<span class="invisible">%s</span>';
+
+        if (strlen($styled_url) > 30) {
+                $html .= '<span class="ellipsis">%s</span>'.
+                        '<span class="invisible">%s</span></a>';
+
+                $ellipsis = substr($styled_url, 0, 30);
+                $rest = substr($styled_url, 30);
+                return sprintf($html, $url, $scheme, $ellipsis, $rest);
+        } else {
+                $html .= '%s</a>';
+                return sprintf($html, $url, $scheme, $styled_url);
+        }
+}
+
 function stripcode_br_cb($s) {
        return '[code]' . str_replace('<br />', '', $s[1]) . '[/code]';
 }
@@ -940,7 +979,14 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
        // 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) {
                if (!$forplaintext) {
-                       $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="_blank">$2</a>', $Text);
+                       if ($simplehtml != 7) {
+                               $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="_blank">$2</a>', $Text);
+                       } else {
+                               $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2[/url]', $Text);
+
+                               $Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text);
+                               $Text = preg_replace_callback("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", 'bb_style_url', $Text);
+                       }
                } else {
                        $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism", " $1 ", $Text);
                        $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text);
index 98799bcf40ff904c70c7b08910b72005b221be63..b56906c54492d95033e073df544ab61505b6029a 100644 (file)
@@ -5,8 +5,8 @@
  * @brief Class for storing data for a short time
  */
 
-use \Friendica\Core\Config;
-use \Friendica\Core\PConfig;
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
 
 class Cache {
        /**
@@ -121,9 +121,9 @@ class Cache {
 
        /**
         * @brief Put data in the cache according to the key
-        * 
+        *
         * The input $value can have multiple formats.
-        * 
+        *
         * @param string $key The key to the cached data
         * @param mixed $valie The value that is about to be stored
         * @param integer $duration The cache lifespan
index 557d08c28874aaed1a0dff85d46883fb46a504f1..01ee90f421b538a9e3231e57c67e7f8f38087965 100644 (file)
@@ -1,6 +1,7 @@
 <?php /** @file */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once('boot.php');
 
@@ -11,7 +12,7 @@ function cli_startup() {
        global $a, $db;
 
        if (is_null($a)) {
-               $a = new App;
+               $a = new App(dirname(__DIR__));
        }
 
        if (is_null($db)) {
index c51db4ec7b1f7fc9f550bdf3818014553a5e9ec1..1c8b119bcc989ee8be13fa656198d09abc7a83fc 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * @file include/config.php
- * 
+ *
  *  @brief (Deprecated) Arbitrary configuration storage
  * Note:
  * Please do not store booleans - convert to 0/1 integer values
@@ -12,8 +12,8 @@
  * configurations need to be fixed as of 10/08/2011.
  */
 
-use \Friendica\Core\Config;
-use \Friendica\Core\PConfig;
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
 
 /**
  * @brief (Deprecated) Loads all configuration values of family into a cached storage.
index 5dd3a8bb4b163996d597902adff6f99b741f07a3..db077b420ff32ca441690fcd4c6431b08b9c1b22 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function follow_widget($value = "") {
 
        return replace_macros(get_markup_template('follow.tpl'), array(
index 64204c696fd7afbb99635001e03cace994a98a60..27f9578ed8009b9f7bfc3fe8ff0df801a2c64cd3 100644 (file)
@@ -1,9 +1,10 @@
 <?php
 
+use Friendica\App;
+
 require_once "include/bbcode.php";
 require_once "include/acl_selectors.php";
 
-
 /*
  * Note: the code in 'item_extract_images' and 'item_redir_and_replace_images'
  * is identical to the code in mod/message.php for 'item_extract_images' and
index 98db23f9effb1cd14aad0263d6e63941e359b07c..29222de5e76cf8b497f9236721136f7956072c4f 100644 (file)
@@ -17,4 +17,3 @@ function create_shadowentry_run($argv, $argc) {
 
        add_shadow_entry($message_id);
 }
-?>
index c4299dd4c2eea874671b6fc0df4baf69ad2daf01..bac9c8a3d8827e40b678dde262aeaeedbd3e9120 100644 (file)
@@ -1,5 +1,6 @@
 <?php
-use \Friendica\Core\Config;
+
+use Friendica\Core\Config;
 
 function cron_run(&$argv, &$argc){
        global $a;
index a519dee22433650e5839d6e4ed71e53f06dcd408..2c378aa39c059b71822238573f4de3bd25fafca7 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function cronhooks_run(&$argv, &$argc) {
        global $a;
index 79ee32bb37f0224f4be80e76b0a2ea1fba160c01..53316e464f7c591141361ce29047fac075229459 100644 (file)
@@ -1,17 +1,19 @@
 <?php
-use \Friendica\Core\Config;
+
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Network\Probe;
 
 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');
-       require_once('include/user.php');
-       require_once('include/socgraph.php');
-       require_once('include/Probe.php');
+       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';
+       require_once 'include/user.php';
+       require_once 'include/socgraph.php';
 
        // No parameter set? So return
        if ($argc <= 1) {
@@ -108,12 +110,11 @@ function cron_expire_and_remove_users() {
                AND `account_expires_on` > '%s'
                AND `account_expires_on` < UTC_TIMESTAMP()", dbesc(NULL_DATE));
 
-       // delete user and contact records for recently removed accounts
+       // delete user records for recently removed accounts
        $r = q("SELECT * FROM `user` WHERE `account_removed` AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
        if (dbm::is_result($r)) {
                foreach ($r as $user) {
-                       q("DELETE FROM `contact` WHERE `uid` = %d", intval($user['uid']));
-                       q("DELETE FROM `user` WHERE `uid` = %d", intval($user['uid']));
+                       dba::delete('user', array('uid' => $user['uid']));
                }
        }
 }
index a840aa0a58492a6f49ce34d794d6b841d614e68c..3578698240053115ea3c5f9738ee98deb082bdd0 100644 (file)
@@ -4,7 +4,7 @@
  * @brief Some functions for date and time related tasks.
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 /**
  * @brief Two-level sort for timezones.
@@ -34,7 +34,7 @@ function timezone_cmp($a, $b) {
 
 /**
  * @brief Emit a timezone selector grouped (primarily) by continent
- * 
+ *
  * @param string $current Timezone
  * @return string Parsed HTML output
  */
@@ -81,17 +81,17 @@ function select_timezone($current = 'America/Los_Angeles') {
 
 /**
  * @brief Generating a Timezone selector
- * 
+ *
  * Return a select using 'field_select_raw' template, with timezones
  * groupped (primarily) by continent
  * arguments follow convetion as other field_* template array:
  * 'name', 'label', $value, 'help'
- * 
+ *
  * @param string $name Name of the selector
  * @param string $label Label for the selector
  * @param string $current Timezone
  * @param string $help Help text
- * 
+ *
  * @return string Parsed HTML
  */
 function field_timezone($name='timezone', $label='', $current = 'America/Los_Angeles', $help){
@@ -114,7 +114,7 @@ function field_timezone($name='timezone', $label='', $current = 'America/Los_Ang
  * @param string $s Some parseable date/time string
  * @param string $fmt Output format recognised from php's DateTime class
  *   http://www.php.net/manual/en/datetime.format.php
- * 
+ *
  * @return string Formatted date according to given format
  */
 function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") {
@@ -212,7 +212,7 @@ function dob($dob) {
 
 /**
  * @brief Returns a date selector
- * 
+ *
  * @param string $format
  *  Format string, e.g. 'ymd' or 'mdy'. Not currently supported
  * @param string $min
@@ -223,7 +223,7 @@ function dob($dob) {
  *  Unix timestamp of default date
  * @param string $id
  *  ID and name of datetimepicker (defaults to "datetimepicker")
- * 
+ *
  * @return string Parsed HTML output.
  */
 function datesel($format, $min, $max, $default, $id = 'datepicker') {
@@ -232,7 +232,7 @@ function datesel($format, $min, $max, $default, $id = 'datepicker') {
 
 /**
  * @brief Returns a time selector
- * 
+ *
  * @param string $format
  *  Format string, e.g. 'ymd' or 'mdy'. Not currently supported
  * @param $h
@@ -241,7 +241,7 @@ function datesel($format, $min, $max, $default, $id = 'datepicker') {
  *  Already selected minute
  * @param string $id
  *  ID and name of datetimepicker (defaults to "timepicker")
- * 
+ *
  * @return string Parsed HTML output.
  */
 function timesel($format, $h, $m, $id = 'timepicker') {
@@ -270,7 +270,7 @@ function timesel($format, $h, $m, $id = 'timepicker') {
  * @param $maxfrom
  *  set maximum date from picker with id $maxfrom (none by default)
  * @param bool $required default false
- * 
+ *
  * @return string Parsed HTML output.
  *
  * @todo Once browser support is better this could probably be replaced with
@@ -417,7 +417,7 @@ function relative_date($posted_date, $format = null) {
  * @param string $dob Date of Birth
  * @param string $owner_tz (optional) Timezone of the person of interest
  * @param string $viewer_tz (optional) Timezone of the person viewing
- * 
+ *
  * @return int Age in years
  */
 function age($dob, $owner_tz = '', $viewer_tz = '') {
@@ -452,7 +452,7 @@ function age($dob, $owner_tz = '', $viewer_tz = '') {
  *
  * @param int $y Year
  * @param int $m Month (1=January, 12=December)
- * 
+ *
  * @return int Number of days in the given month
  */
 function get_dim($y, $m) {
@@ -477,7 +477,7 @@ function get_dim($y, $m) {
  *
  * @param int $y Year
  * @param int $m Month (1=January, 12=December)
- * 
+ *
  * @return string day 0 = Sunday through 6 = Saturday
  */
 function get_first_dim($y,$m) {
@@ -498,7 +498,7 @@ function get_first_dim($y,$m) {
  * @param int $m Month
  * @param bool $links (default false)
  * @param string $class
- * 
+ *
  * @return string
  *
  * @todo Provide (prev,next) links, define class variations for different size calendars
index 5066dcd56d8f53e7f0f3c0a02037d4fdb62983b9..3af8522516c64ca9f4306cdff9b836f02302bfac 100644 (file)
@@ -10,6 +10,7 @@ require_once('include/datetime.php');
  * 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.
  */
 
 class dba {
@@ -21,12 +22,24 @@ class dba {
        public  $connected = false;
        public  $error = false;
        private $_server_info = '';
+       private static $in_transaction = false;
+       private static $dbo;
+       private static $relation = array();
 
-       function __construct($server, $user, $pass, $db, $install = false) {
+       function __construct($serveraddr, $user, $pass, $db, $install = false) {
                $a = get_app();
 
                $stamp1 = microtime(true);
 
+               $serveraddr = trim($serveraddr);
+
+               $serverdata = explode(':', $serveraddr);
+               $server = $serverdata[0];
+
+               if (count($serverdata) > 1) {
+                       $port = trim($serverdata[1]);
+               }
+
                $server = trim($server);
                $user = trim($user);
                $pass = trim($pass);
@@ -52,6 +65,11 @@ class dba {
                if (class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) {
                        $this->driver = 'pdo';
                        $connect = "mysql:host=".$server.";dbname=".$db;
+
+                       if (isset($port)) {
+                               $connect .= ";port=".$port;
+                       }
+
                        if (isset($a->config["system"]["db_charset"])) {
                                $connect .= ";charset=".$a->config["system"]["db_charset"];
                        }
@@ -61,7 +79,7 @@ class dba {
                        }
                } elseif (class_exists('mysqli')) {
                        $this->driver = 'mysqli';
-                       $this->db = @new mysqli($server,$user,$pass,$db);
+                       $this->db = @new mysqli($server, $user, $pass, $db, $port);
                        if (!mysqli_connect_errno()) {
                                $this->connected = true;
 
@@ -71,8 +89,8 @@ class dba {
                        }
                } elseif (function_exists('mysql_connect')) {
                        $this->driver = 'mysql';
-                       $this->db = mysql_connect($server,$user,$pass);
-                       if ($this->db && mysql_select_db($db,$this->db)) {
+                       $this->db = mysql_connect($serveraddr, $user, $pass);
+                       if ($this->db && mysql_select_db($db, $this->db)) {
                                $this->connected = true;
 
                                if (isset($a->config["system"]["db_charset"])) {
@@ -93,6 +111,8 @@ class dba {
                        }
                }
                $a->save_timestamp($stamp1, "network");
+
+               self::$dbo = $this;
        }
 
        /**
@@ -131,30 +151,6 @@ class dba {
                return $r[0]['db'];
        }
 
-       /**
-        * @brief Returns the number of rows
-        *
-        * @return integer
-        */
-       public function num_rows() {
-               if (!$this->result) {
-                       return 0;
-               }
-
-               switch ($this->driver) {
-                       case 'pdo':
-                               $rows = $this->result->rowCount();
-                               break;
-                       case 'mysqli':
-                               $rows = $this->result->num_rows;
-                               break;
-                       case 'mysql':
-                               $rows = mysql_num_rows($this->result);
-                               break;
-               }
-               return $rows;
-       }
-
        /**
         * @brief Analyze a database query and log this if some conditions are met.
         *
@@ -249,7 +245,7 @@ class dba {
                                break;
                }
                $stamp2 = microtime(true);
-               $duration = (float)($stamp2-$stamp1);
+               $duration = (float)($stamp2 - $stamp1);
 
                $a->save_timestamp($stamp1, "database");
 
@@ -379,41 +375,6 @@ class dba {
                return($r);
        }
 
-       public function qfetch() {
-               $x = false;
-
-               if ($this->result) {
-                       switch ($this->driver) {
-                               case 'pdo':
-                                       $x = $this->result->fetch(PDO::FETCH_ASSOC);
-                                       break;
-                               case 'mysqli':
-                                       $x = $this->result->fetch_array(MYSQLI_ASSOC);
-                                       break;
-                               case 'mysql':
-                                       $x = mysql_fetch_array($this->result, MYSQL_ASSOC);
-                                       break;
-                       }
-               }
-               return($x);
-       }
-
-       public function qclose() {
-               if ($this->result) {
-                       switch ($this->driver) {
-                               case 'pdo':
-                                       $this->result->closeCursor();
-                                       break;
-                               case 'mysqli':
-                                       $this->result->free_result();
-                                       break;
-                               case 'mysql':
-                                       mysql_free_result($this->result);
-                                       break;
-                       }
-               }
-       }
-
        public function dbg($dbg) {
                $this->debug = $dbg;
        }
@@ -497,6 +458,708 @@ class dba {
                }
                return $sql;
        }
+
+       /**
+        * @brief Replaces the ? placeholders with the parameters in the $args array
+        *
+        * @param string $sql SQL query
+        * @param array $args The parameters that are to replace the ? placeholders
+        * @return string The replaced SQL query
+        */
+       static private function replace_parameters($sql, $args) {
+               $offset = 0;
+               foreach ($args AS $param => $value) {
+                       if (is_int($args[$param]) OR is_float($args[$param])) {
+                               $replace = intval($args[$param]);
+                       } else {
+                               $replace = "'".self::$dbo->escape($args[$param])."'";
+                       }
+
+                       $pos = strpos($sql, '?', $offset);
+                       if ($pos !== false) {
+                               $sql = substr_replace($sql, $replace, $pos, 1);
+                       }
+                       $offset = $pos + strlen($replace);
+               }
+               return $sql;
+       }
+
+       /**
+        * @brief Executes a prepared statement that returns data
+        * @usage Example: $r = p("SELECT * FROM `item` WHERE `guid` = ?", $guid);
+        * @param string $sql SQL statement
+        * @return object statement object
+        */
+       static public function p($sql) {
+               $a = get_app();
+
+               $stamp1 = microtime(true);
+
+               $args = func_get_args();
+               unset($args[0]);
+
+               // When the second function parameter is an array then use this as the parameter array
+               if ((count($args) > 0) AND (is_array($args[1]))) {
+                       $params = $args[1];
+               } else {
+                       $params = $args;
+               }
+
+               // Renumber the array keys to be sure that they fit
+               $i = 0;
+               $args = array();
+               foreach ($params AS $param) {
+                       $args[++$i] = $param;
+               }
+
+               if (!self::$dbo OR !self::$dbo->connected) {
+                       return false;
+               }
+
+               if (substr_count($sql, '?') != count($args)) {
+                       // Question: Should we continue or stop the query here?
+                       logger('Parameter mismatch. Query "'.$sql.'" - Parameters '.print_r($args, true), LOGGER_DEBUG);
+               }
+
+               $sql = self::$dbo->any_value_fallback($sql);
+
+               if (x($a->config,'system') && x($a->config['system'], 'db_callstack')) {
+                       $sql = "/*".$a->callstack()." */ ".$sql;
+               }
+
+               self::$dbo->error = '';
+               self::$dbo->errorno = 0;
+
+               switch (self::$dbo->driver) {
+                       case 'pdo':
+                               if (!$stmt = self::$dbo->db->prepare($sql)) {
+                                       $errorInfo = self::$dbo->db->errorInfo();
+                                       self::$dbo->error = $errorInfo[2];
+                                       self::$dbo->errorno = $errorInfo[1];
+                                       $retval = false;
+                                       break;
+                               }
+
+                               foreach ($args AS $param => $value) {
+                                       $stmt->bindParam($param, $args[$param]);
+                               }
+
+                               if (!$stmt->execute()) {
+                                       $errorInfo = $stmt->errorInfo();
+                                       self::$dbo->error = $errorInfo[2];
+                                       self::$dbo->errorno = $errorInfo[1];
+                                       $retval = false;
+                               } else {
+                                       $retval = $stmt;
+                               }
+                               break;
+                       case 'mysqli':
+                               $stmt = self::$dbo->db->stmt_init();
+
+                               if (!$stmt->prepare($sql)) {
+                                       self::$dbo->error = $stmt->error;
+                                       self::$dbo->errorno = $stmt->errno;
+                                       $retval = false;
+                                       break;
+                               }
+
+                               $params = '';
+                               $values = array();
+                               foreach ($args AS $param => $value) {
+                                       if (is_int($args[$param])) {
+                                               $params .= 'i';
+                                       } elseif (is_float($args[$param])) {
+                                               $params .= 'd';
+                                       } elseif (is_string($args[$param])) {
+                                               $params .= 's';
+                                       } else {
+                                               $params .= 'b';
+                                       }
+                                       $values[] = &$args[$param];
+                               }
+
+                               if (count($values) > 0) {
+                                       array_unshift($values, $params);
+                                       call_user_func_array(array($stmt, 'bind_param'), $values);
+                               }
+
+                               if (!$stmt->execute()) {
+                                       self::$dbo->error = self::$dbo->db->error;
+                                       self::$dbo->errorno = self::$dbo->db->errno;
+                                       $retval = false;
+                               } else {
+                                       $stmt->store_result();
+                                       $retval = $stmt;
+                               }
+                               break;
+                       case 'mysql':
+                               // For the old "mysql" functions we cannot use prepared statements
+                               $retval = mysql_query(self::replace_parameters($sql, $args), self::$dbo->db);
+                               if (mysql_errno(self::$dbo->db)) {
+                                       self::$dbo->error = mysql_error(self::$dbo->db);
+                                       self::$dbo->errorno = mysql_errno(self::$dbo->db);
+                               }
+                               break;
+               }
+
+               if (self::$dbo->errorno != 0) {
+                       logger('DB Error '.self::$dbo->errorno.': '.self::$dbo->error."\n".
+                               $a->callstack(8))."\n".self::replace_parameters($sql, $args);
+               }
+
+               $a->save_timestamp($stamp1, 'database');
+
+               if (x($a->config,'system') && x($a->config['system'], 'db_log')) {
+
+                       $stamp2 = microtime(true);
+                       $duration = (float)($stamp2 - $stamp1);
+
+                       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(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND);
+                       }
+               }
+               return $retval;
+       }
+
+       /**
+        * @brief Executes a prepared statement like UPDATE or INSERT that doesn't return data
+        *
+        * @param string $sql SQL statement
+        * @return boolean Was the query successfull? False is returned only if an error occurred
+        */
+       static public function e($sql) {
+               $a = get_app();
+
+               $stamp = microtime(true);
+
+               $args = func_get_args();
+
+               $stmt = call_user_func_array('self::p', $args);
+
+               if (is_bool($stmt)) {
+                       $retval = $stmt;
+               } elseif (is_object($stmt)) {
+                       $retval = true;
+               } else {
+                       $retval = false;
+               }
+
+               self::close($stmt);
+
+               $a->save_timestamp($stamp, "database_write");
+
+               return $retval;
+       }
+
+       /**
+        * @brief Check if data exists
+        *
+        * @param string $sql SQL statement
+        * @return boolean Are there rows for that query?
+        */
+       static public function exists($sql) {
+               $args = func_get_args();
+
+               $stmt = call_user_func_array('self::p', $args);
+
+               if (is_bool($stmt)) {
+                       $retval = $stmt;
+               } else {
+                       $retval = (self::num_rows($stmt) > 0);
+               }
+
+               self::close($stmt);
+
+               return $retval;
+       }
+
+       /**
+        * @brief Fetches the first row
+        *
+        * @param string $sql SQL statement
+        * @return array first row of query
+        */
+       static public function fetch_first($sql) {
+               $args = func_get_args();
+
+               $stmt = call_user_func_array('self::p', $args);
+
+               if (is_bool($stmt)) {
+                       $retval = $stmt;
+               } else {
+                       $retval = self::fetch($stmt);
+               }
+
+               self::close($stmt);
+
+               return $retval;
+       }
+
+       /**
+        * @brief Returns the number of rows of a statement
+        *
+        * @param object Statement object
+        * @return int Number of rows
+        */
+       static public function num_rows($stmt) {
+               switch (self::$dbo->driver) {
+                       case 'pdo':
+                               return $stmt->rowCount();
+                       case 'mysqli':
+                               return $stmt->num_rows;
+                       case 'mysql':
+                               return mysql_num_rows($stmt);
+               }
+               return 0;
+       }
+
+       /**
+        * @brief Fetch a single row
+        *
+        * @param object $stmt statement object
+        * @return array current row
+        */
+       static public function fetch($stmt) {
+               if (!is_object($stmt)) {
+                       return false;
+               }
+
+               switch (self::$dbo->driver) {
+                       case 'pdo':
+                               return $stmt->fetch(PDO::FETCH_ASSOC);
+                       case 'mysqli':
+                               // This code works, but is slow
+
+                               // Bind the result to a result array
+                               $cols = array();
+
+                               $cols_num = array();
+                               for ($x = 0; $x < $stmt->field_count; $x++) {
+                                       $cols[] = &$cols_num[$x];
+                               }
+
+                               call_user_func_array(array($stmt, 'bind_result'), $cols);
+
+                               if (!$stmt->fetch()) {
+                                       return false;
+                               }
+
+                               // The slow part:
+                               // We need to get the field names for the array keys
+                               // It seems that there is no better way to do this.
+                               $result = $stmt->result_metadata();
+                               $fields = $result->fetch_fields();
+
+                               $columns = array();
+                               foreach ($cols_num AS $param => $col) {
+                                       $columns[$fields[$param]->name] = $col;
+                               }
+                               return $columns;
+                       case 'mysql':
+                               return mysql_fetch_array(self::$dbo->result, MYSQL_ASSOC);
+               }
+       }
+
+       /**
+        * @brief Insert a row into a table
+        *
+        * @param string $table Table name
+        * @param array $param parameter array
+        *
+        * @return boolean was the insert successfull?
+        */
+       static public function insert($table, $param) {
+               $sql = "INSERT INTO `".self::$dbo->escape($table)."` (`".implode("`, `", array_keys($param))."`) VALUES (".
+                       substr(str_repeat("?, ", count($param)), 0, -2).");";
+
+               return self::e($sql, $param);
+       }
+
+       /**
+        * @brief Starts a transaction
+        *
+        * @return boolean Was the command executed successfully?
+        */
+       static public function transaction() {
+               if (!self::e('COMMIT')) {
+                       return false;
+               }
+               if (!self::e('START TRANSACTION')) {
+                       return false;
+               }
+               self::$in_transaction = true;
+               return true;
+       }
+
+       /**
+        * @brief Does a commit
+        *
+        * @return boolean Was the command executed successfully?
+        */
+       static public function commit() {
+               if (!self::e('COMMIT')) {
+                       return false;
+               }
+               self::$in_transaction = false;
+               return true;
+       }
+
+       /**
+        * @brief Does a rollback
+        *
+        * @return boolean Was the command executed successfully?
+        */
+       static public function rollback() {
+               if (!self::e('ROLLBACK')) {
+                       return false;
+               }
+               self::$in_transaction = false;
+               return true;
+       }
+
+       /**
+        * @brief Build the array with the table relations
+        *
+        * The array is build from the database definitions in dbstructure.php
+        *
+        * This process must only be started once, since the value is cached.
+        */
+       static private function build_relation_data() {
+               $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;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * @brief Delete a row from a table
+        *
+        * @param string $table Table name
+        * @param array $param parameter array
+        * @param boolean $in_process Internal use: Only do a commit after the last delete
+        * @param array $callstack Internal use: prevent endless loops
+        *
+        * @return boolean|array was the delete successfull? When $in_process is set: deletion data
+        */
+       static public function delete($table, $param, $in_process = false, &$callstack = array()) {
+
+               $commands = array();
+
+               // Create a key for the loop prevention
+               $key = $table.':'.implode(':', array_keys($param)).':'.implode(':', $param);
+
+               // We quit when this key already exists in the callstack.
+               if (isset($callstack[$key])) {
+                       return $commands;
+               }
+
+               $callstack[$key] = true;
+
+               $table = self::$dbo->escape($table);
+
+               $commands[$key] = array('table' => $table, 'param' => $param);
+
+               // To speed up the whole process we cache the table relations
+               if (count(self::$relation) == 0) {
+                       self::build_relation_data();
+               }
+
+               // Is there a relation entry for the table?
+               if (isset(self::$relation[$table])) {
+                       // We only allow a simple "one field" relation.
+                       $field = array_keys(self::$relation[$table])[0];
+                       $rel_def = array_values(self::$relation[$table])[0];
+
+                       // Create a key for preventing double queries
+                       $qkey = $field.'-'.$table.':'.implode(':', array_keys($param)).':'.implode(':', $param);
+
+                       // When the search field is the relation field, we don't need to fetch the rows
+                       // This is useful when the leading record is already deleted in the frontend but the rest is done in the backend
+                       if ((count($param) == 1) AND ($field == array_keys($param)[0])) {
+                               foreach ($rel_def AS $rel_table => $rel_fields) {
+                                       foreach ($rel_fields AS $rel_field) {
+                                               $retval = self::delete($rel_table, array($rel_field => array_values($param)[0]), true, $callstack);
+                                               $commands = array_merge($commands, $retval);
+                                       }
+                               }
+                       // We quit when this key already exists in the callstack.
+                       } elseif (!isset($callstack[$qkey])) {
+
+                               $callstack[$qkey] = true;
+
+                               // Fetch all rows that are to be deleted
+                               $sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `".
+                               implode("` = ? AND `", array_keys($param))."` = ?";
+
+                               $data = self::p($sql, $param);
+                               while ($row = self::fetch($data)) {
+                                       // Now we accumulate the delete commands
+                                       $retval = self::delete($table, array($field => $row[$field]), true, $callstack);
+                                       $commands = array_merge($commands, $retval);
+                               }
+
+                               // Since we had split the delete command we don't need the original command anymore
+                               unset($commands[$key]);
+                       }
+               }
+
+               if (!$in_process) {
+                       // Now we finalize the process
+                       $do_transaction = !self::$in_transaction;
+
+                       if ($do_transaction) {
+                               self::transaction();
+                       }
+
+                       $compacted = array();
+                       $counter = array();
+                       foreach ($commands AS $command) {
+                               if (count($command['param']) > 1) {
+                                       $sql = "DELETE FROM `".$command['table']."` WHERE `".
+                                               implode("` = ? AND `", array_keys($command['param']))."` = ?";
+
+                                       logger(dba::replace_parameters($sql, $command['param']), LOGGER_DATA);
+
+                                       if (!self::e($sql, $command['param'])) {
+                                               if ($do_transaction) {
+                                                       self::rollback();
+                                               }
+                                               return false;
+                                       }
+                               } else {
+                                       $key_table = $command['table'];
+                                       $key_param = array_keys($command['param'])[0];
+                                       $value = array_values($command['param'])[0];
+
+                                       // Split the SQL queries in chunks of 100 values
+                                       // We do the $i stuff here to make the code better readable
+                                       $i = $counter[$key_table][$key_param];
+                                       if (count($compacted[$key_table][$key_param][$i]) > 100) {
+                                               ++$i;
+                                       }
+
+                                       $compacted[$key_table][$key_param][$i][$value] = $value;
+                                       $counter[$key_table][$key_param] = $i;
+                               }
+                       }
+                       foreach ($compacted AS $table => $values) {
+                               foreach ($values AS $field => $field_value_list) {
+                                       foreach ($field_value_list AS $field_values) {
+                                               $sql = "DELETE FROM `".$table."` WHERE `".$field."` IN (".
+                                                       substr(str_repeat("?, ", count($field_values)), 0, -2).");";
+
+                                               logger(dba::replace_parameters($sql, $field_values), LOGGER_DATA);
+
+                                               if (!self::e($sql, $field_values)) {
+                                                       if ($do_transaction) {
+                                                               self::rollback();
+                                                       }
+                                                       return false;
+                                               }
+                                       }
+                               }
+                       }
+                       if ($do_transaction) {
+                               self::commit();
+                       }
+                       return true;
+               }
+
+               return $commands;
+       }
+
+       /**
+        * @brief Updates rows
+        *
+        * Updates rows in the database. When $old_fields is set to an array,
+        * the system will only do an update if the fields in that array changed.
+        *
+        * Attention:
+        * Only the values in $old_fields are compared.
+        * This is an intentional behaviour.
+        *
+        * Example:
+        * We include the timestamp field in $fields but not in $old_fields.
+        * Then the row will only get the new timestamp when the other fields had changed.
+        *
+        * When $old_fields is set to a boolean value the system will do this compare itself.
+        * When $old_fields is set to "true" the system will do an insert if the row doesn't exists.
+        *
+        * Attention:
+        * Only set $old_fields to a boolean value when you are sure that you will update a single row.
+        * When you set $old_fields to "true" then $fields must contain all relevant fields!
+        *
+        * @param string $table Table name
+        * @param array $fields contains the fields that are updated
+        * @param array $condition condition array with the key values
+        * @param array|boolean $old_fields array with the old field values that are about to be replaced
+        *
+        * @return boolean was the update successfull?
+        */
+       static public function update($table, $fields, $condition, $old_fields = array()) {
+
+               /** @todo We may use MySQL specific functions here:
+                * INSERT INTO `config` (`cat`, `k`, `v`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'"
+                * But I think that it doesn't make sense here.
+               */
+
+               $table = self::$dbo->escape($table);
+
+               if (is_bool($old_fields)) {
+                       $sql = "SELECT * FROM `".$table."` WHERE `".
+                       implode("` = ? AND `", array_keys($condition))."` = ? LIMIT 1";
+
+                       $params = array();
+                       foreach ($condition AS $value) {
+                               $params[] = $value;
+                       }
+
+                       $do_insert = $old_fields;
+
+                       $old_fields = self::fetch_first($sql, $params);
+                       if (is_bool($old_fields)) {
+                               if ($do_insert) {
+                                       return self::insert($table, $fields);
+                               }
+                               $old_fields = array();
+                       }
+               }
+
+               $do_update = (count($old_fields) == 0);
+
+               foreach ($old_fields AS $fieldname => $content) {
+                       if (isset($fields[$fieldname])) {
+                               if ($fields[$fieldname] == $content) {
+                                       unset($fields[$fieldname]);
+                               } else {
+                                       $do_update = true;
+                               }
+                       }
+               }
+
+               if (!$do_update OR (count($fields) == 0)) {
+                       return true;
+               }
+
+               $sql = "UPDATE `".$table."` SET `".
+                       implode("` = ?, `", array_keys($fields))."` = ? WHERE `".
+                       implode("` = ? AND `", array_keys($condition))."` = ?";
+
+               $params = array();
+               foreach ($fields AS $value) {
+                       $params[] = $value;
+               }
+               foreach ($condition AS $value) {
+                       $params[] = $value;
+               }
+
+               return self::e($sql, $params);
+       }
+
+       /**
+        * @brief Select rows from a table
+        *
+        * @param string $table Table name
+        * @param array $fields array of selected fields
+        * @param array $condition array of fields for condition
+        * @param array $params array of several parameters
+        *
+        * @return boolean|object If "limit" is equal "1" only a single row is returned, else a query object is returned
+        *
+        * Example:
+        * $table = "item";
+        * $fields = array("id", "uri", "uid", "network");
+        * $condition = array("uid" => 1, "network" => 'dspr');
+        * $params = array("order" => array("id", "received" => true), "limit" => 1);
+        *
+        * $data = dba::select($table, $fields, $condition, $params);
+        */
+       static public function select($table, $fields = array(), $condition = array(), $params = array()) {
+               if ($table == '') {
+                       return false;
+               }
+
+               if (count($fields) > 0) {
+                       $select_fields = "`".implode("`, `", array_values($fields))."`";
+               } else {
+                       $select_fields = "*";
+               }
+
+               if (count($condition) > 0) {
+                       $condition_string = " WHERE `".implode("` = ? AND `", array_keys($condition))."` = ?";
+               } else {
+                       $condition_string = "";
+               }
+
+               $param_string = '';
+               $single_row = false;
+
+               if (isset($params['order'])) {
+                       $param_string .= " ORDER BY ";
+                       foreach ($params['order'] AS $fields => $order) {
+                               if (!is_int($fields)) {
+                                       $param_string .= "`".$fields."` ".($order ? "DESC" : "ASC").", ";
+                               } else {
+                                       $param_string .= "`".$order."`, ";
+                               }
+                       }
+                       $param_string = substr($param_string, 0, -2);
+               }
+
+               if (isset($params['limit'])) {
+                       if (is_int($params['limit'])) {
+                               $param_string .= " LIMIT ".$params['limit'];
+                               $single_row =($params['limit'] == 1);
+                       }
+               }
+
+               $sql = "SELECT ".$select_fields." FROM `".$table."`".$condition_string.$param_string;
+
+               $result = self::p($sql, $condition);
+
+               if (is_bool($result) OR !$single_row) {
+                       return $result;
+               } else {
+                       $row = self::fetch($result);
+                       self::close($result);
+                       return $row;
+               }
+       }
+
+       /**
+        * @brief Closes the current statement
+        *
+        * @param object $stmt statement object
+        * @return boolean was the close successfull?
+        */
+       static public function close($stmt) {
+               if (!is_object($stmt)) {
+                       return false;
+               }
+
+               switch (self::$dbo->driver) {
+                       case 'pdo':
+                               return $stmt->closeCursor();
+                       case 'mysqli':
+                               return $stmt->free_result();
+                               return $stmt->close();
+                       case 'mysql':
+                               return mysql_free_result($stmt);
+               }
+       }
 }
 
 function printable($s) {
index 56692fbb3957fed20695f557fd2556c07720d81f..4549d7a0ceb5ba5b8cdb8bcb65d777fae190a7d9 100644 (file)
@@ -1,8 +1,11 @@
 <?php
 
+use DDDBL\DataObjectPool;
+use DDDBL\Queue;
+
 require_once('include/datetime.php');
 
-$objDDDBLResultHandler = new \DDDBL\DataObjectPool('Result-Handler');
+$objDDDBLResultHandler = new DataObjectPool('Result-Handler');
 
 /**
   * create handler, which returns just the PDOStatement object
@@ -10,11 +13,11 @@ $objDDDBLResultHandler = new \DDDBL\DataObjectPool('Result-Handler');
   * big result-sets
   *
   **/
-$cloPDOStatementResultHandler = function(\DDDBL\Queue $objQueue) {
+$cloPDOStatementResultHandler = function(Queue $objQueue) {
 
   $objPDO = $objQueue->getState()->get('PDOStatement');
   $objQueue->getState()->update(array('result' => $objPDO));
-  
+
   # delete handler which closes the PDOStatement-cursor
   # this will be done manual if using this handler
   $objQueue->deleteHandler(QUEUE_CLOSE_CURSOR_POSITION);
@@ -29,12 +32,12 @@ $objDDDBLResultHandler->add('PDOStatement', array('HANDLER' => $cloPDOStatementR
  *
  * 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 
+ * 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.
  *
  */
-if (! class_exists('dba')) { 
+
+if (! class_exists('dba')) {
 class dba {
 
        private $debug = 0;
@@ -45,9 +48,9 @@ class dba {
 
        function __construct($server,$user,$pass,$db,$install = false) {
                $a = get_app();
-    
+
     # work around, to store the database - configuration in DDDBL
-    $objDataObjectPool = new \DDDBL\DataObjectPool('Database-Definition');
+    $objDataObjectPool = new DataObjectPool('Database-Definition');
     $objDataObjectPool->add('DEFAULT', array('CONNECTION' => "mysql:host=$server;dbname=$db",
                                              'USER'       => $user,
                                              'PASS'       => $pass,
@@ -78,13 +81,13 @@ class dba {
                }
 
     # etablish connection to database and store PDO object
-    \DDDBL\connect();
-    $this->db = \DDDBL\getDB();
-    
-    if (\DDDBL\isConnected()) {
+    DDDBL\connect();
+    $this->db = DDDBL\getDB();
+
+    if (DDDBL\isConnected()) {
       $this->connected = true;
     }
-  
+
                if (! $this->connected) {
                        $this->db = null;
                        if (! $install)
@@ -102,12 +105,12 @@ class dba {
                $a = get_app();
 
     $strHandler = (true === $onlyquery) ? 'PDOStatement' : 'MULTI';
-    
+
     $strQueryAlias = md5($sql);
     $strSQLType    = strtoupper(strstr($sql, ' ', true));
-    
-    $objPreparedQueryPool = new \DDDBL\DataObjectPool('Query-Definition');
-    
+
+    $objPreparedQueryPool = new DataObjectPool('Query-Definition');
+
     # check if query do not exists till now, if so create its definition
     if (!$objPreparedQueryPool->exists($strQueryAlias))
       $objPreparedQueryPool->add($strQueryAlias, array('QUERY'   => $sql,
@@ -121,14 +124,14 @@ class dba {
                $stamp1 = microtime(true);
 
     try {
-      $r = \DDDBL\get($strQueryAlias);
-      
+      $r = DDDBL\get($strQueryAlias);
+
       # bad workaround to emulate the bizzare behavior of mysql_query
       if (in_array($strSQLType, array('INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'SET')))
         $result = true;
       $intErrorCode = false;
-        
-    } catch (\Exception $objException) {
+
+    } catch (Exception $objException) {
       $result = false;
       $intErrorCode = $objPreparedQueryPool->get($strQueryAlias)->get('PDOStatement')->errorCode();
     }
@@ -166,7 +169,7 @@ class dba {
                                $mesg = 'true';
                        else {
         # this needs fixing, but is a bug itself
-                               #$mesg = mysql_num_rows($result) . ' results' . EOL; 
+                               #$mesg = mysql_num_rows($result) . ' results' . EOL;
                        }
 
                        $str =  'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg
@@ -190,13 +193,13 @@ class dba {
 
                if (isset($result) AND (($result === true) || ($result === false)))
                        return $result;
-    
+
                if ($onlyquery) {
                        $this->result = $r;       # this will store an PDOStatement Object in result
       $this->result->execute(); # execute the Statement, to get its result
                        return true;
                }
-    
+
                //$a->save_timestamp($stamp1, "database");
 
                if ($this->debug)
@@ -212,7 +215,7 @@ class dba {
     return $this->result->fetch();
 
        }
-  
+
        public function qclose() {
                if ($this->result)
       return $this->result->closeCursor();
@@ -228,13 +231,13 @@ class dba {
       # this workaround is needed, because quote creates "'" and the beginning and the end
       # of the string, which is correct. but until now the queries set this delimiter manually,
       # so we must remove them from here and wait until everything uses prepared statements
-      return mb_substr($strQuoted, 1, mb_strlen($strQuoted) - 2); 
+      return mb_substr($strQuoted, 1, mb_strlen($strQuoted) - 2);
                }
        }
 
        function __destruct() {
-               if ($this->db) 
-                 \DDDBL\disconnect();
+               if ($this->db)
+                 DDDBL\disconnect();
        }
 }}
 
@@ -248,14 +251,14 @@ function printable($s) {
 }}
 
 // Procedural functions
-if (! function_exists('dbg')) { 
+if (! function_exists('dbg')) {
 function dbg($state) {
        global $db;
        if ($db)
        $db->dbg($state);
 }}
 
-if (! function_exists('dbesc')) { 
+if (! function_exists('dbesc')) {
 function dbesc($str) {
        global $db;
        if ($db && $db->connected)
@@ -271,7 +274,7 @@ function dbesc($str) {
 // Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
 //                   'user', 1);
 
-if (! function_exists('q')) { 
+if (! function_exists('q')) {
 function q($sql) {
 
        global $db;
@@ -288,12 +291,12 @@ function q($sql) {
 
        /**
         *
-        * This will happen occasionally trying to store the 
-        * session data after abnormal program termination 
+        * This will happen occasionally trying to store the
+        * session data after abnormal program termination
         *
         */
        logger('dba: no database: ' . print_r($args,true));
-       return false; 
+       return false;
 
 }}
 
@@ -303,7 +306,7 @@ function q($sql) {
  *
  */
 
-if (! function_exists('dbq')) { 
+if (! function_exists('dbq')) {
 function dbq($sql) {
 
        global $db;
@@ -315,10 +318,10 @@ function dbq($sql) {
 }}
 
 
-// Caller is responsible for ensuring that any integer arguments to 
+// 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. 
+// SQL injection vectors. All integer array elements should be specifically
+// cast to int to avoid trouble.
 
 
 if (! function_exists('dbesc_array_cb')) {
index bff4ff2a24946a9246513306add33c8fdedafe72..36f4f46e535c63d81c933ed171e7a1c0f31f4d05 100644 (file)
@@ -4,7 +4,7 @@
  * @brief The script is called from time to time to clean the database entries and remove orphaned data.
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function dbclean_run(&$argv, &$argc) {
        if (!Config::get('system', 'dbclean', false)) {
@@ -18,13 +18,11 @@ function dbclean_run(&$argv, &$argc) {
        }
 
        if ($stage == 0) {
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 1);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 2);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 3);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 4);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 5);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 6);
-               proc_run(PRIORITY_LOW, 'include/dbclean.php', 7);
+               for ($i = 1; $i <= 7; $i++) {
+                       if (!Config::get('system', 'finished-dbclean-'.$i)) {
+                               proc_run(PRIORITY_LOW, 'include/dbclean.php', $i);
+                       }
+               }
        } else {
                remove_orphans($stage);
        }
@@ -41,99 +39,136 @@ function remove_orphans($stage = 0) {
        // We split the deletion in many small tasks
        $limit = 1000;
 
-       if (($stage == 1) OR ($stage == 0)) {
+       if ($stage == 1) {
                logger("Deleting old global item entries from item table without user copy");
-               if ($db->q("SELECT `id` FROM `item` WHERE `uid` = 0
+               $r = dba::p("SELECT `id` FROM `item` WHERE `uid` = 0
                                AND NOT EXISTS (SELECT `guid` FROM `item` AS `i` WHERE `item`.`guid` = `i`.`guid` AND `i`.`uid` != 0)
-                               AND `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+                               AND `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found global item orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `item` WHERE `id` = %d", intval($orphan["id"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('item', array('id' => $orphan["id"]));
                        }
-               }
-               $db->qclose();
-               logger("Done deleting old global item entries from item table without user copy");
-       }
+               } else {
+                       logger("No global item orphans found");
 
-       if (($stage == 2) OR ($stage == 0)) {
+               }
+               dba::close($r);
+               logger("Done deleting ".$count." old global item entries from item table without user copy");
+
+               // We will eventually set this value when we found a good way to delete these items in another way.
+               // if ($count < $limit) {
+               //      Config::set('system', 'finished-dbclean-1', true);
+               // }
+       } elseif ($stage == 2) {
                logger("Deleting items without parents");
-               if ($db->q("SELECT `id` FROM `item` WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `id` FROM `item` WHERE NOT EXISTS (SELECT `id` FROM `item` AS `i` WHERE `item`.`parent` = `i`.`id`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found item orphans without parents: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `item` WHERE `id` = %d", intval($orphan["id"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('item', array('id' => $orphan["id"]));
                        }
+               } else {
+                       logger("No item orphans without parents found");
                }
-               $db->qclose();
-               logger("Done deleting items without parents");
-       }
+               dba::close($r);
+               logger("Done deleting ".$count." items without parents");
 
-       if (($stage == 3) OR ($stage == 0)) {
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-2', true);
+               }
+       } elseif ($stage == 3) {
                logger("Deleting orphaned data from thread table");
-               if ($db->q("SELECT `iid` FROM `thread` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `iid` FROM `thread` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `thread`.`iid`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found thread orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `thread` WHERE `iid` = %d", intval($orphan["iid"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('thread', array('iid' => $orphan["iid"]));
                        }
+               } else {
+                       logger("No thread orphans found");
                }
-               $db->qclose();
-               logger("Done deleting orphaned data from thread table");
-       }
+               dba::close($r);
+               logger("Done deleting ".$count." orphaned data from thread table");
 
-       if (($stage == 4) OR ($stage == 0)) {
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-3', true);
+               }
+       } elseif ($stage == 4) {
                logger("Deleting orphaned data from notify table");
-               if ($db->q("SELECT `iid` FROM `notify` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `iid` FROM `notify` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `notify`.`iid`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found notify orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `notify` WHERE `iid` = %d", intval($orphan["iid"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('notify', array('iid' => $orphan["iid"]));
                        }
+               } else {
+                       logger("No notify orphans found");
                }
-               $db->qclose();
-               logger("Done deleting orphaned data from notify table");
-       }
+               dba::close($r);
+               logger("Done deleting ".$count." orphaned data from notify table");
 
-       if (($stage == 5) OR ($stage == 0)) {
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-4', true);
+               }
+       } elseif ($stage == 5) {
                logger("Deleting orphaned data from notify-threads table");
-               if ($db->q("SELECT `id` FROM `notify-threads` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `id` FROM `notify-threads` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`parent` = `notify-threads`.`master-parent-item`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found notify-threads orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `notify-threads` WHERE `id` = %d", intval($orphan["id"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('notify-threads', array('id' => $orphan["id"]));
                        }
+               } else {
+                       logger("No notify-threads orphans found");
                }
-               $db->qclose();
-               logger("Done deleting orphaned data from notify-threads table");
-       }
-
+               dba::close($r);
+               logger("Done deleting ".$count." orphaned data from notify-threads table");
 
-       if (($stage == 6) OR ($stage == 0)) {
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-5', true);
+               }
+       } elseif ($stage == 6) {
                logger("Deleting orphaned data from sign table");
-               if ($db->q("SELECT `iid` FROM `sign` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `iid` FROM `sign` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found sign orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `sign` WHERE `iid` = %d", intval($orphan["iid"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('sign', array('iid' => $orphan["iid"]));
                        }
+               } else {
+                       logger("No sign orphans found");
                }
-               $db->qclose();
-               logger("Done deleting orphaned data from sign table");
-       }
+               dba::close($r);
+               logger("Done deleting ".$count." orphaned data from sign table");
 
-
-       if (($stage == 7) OR ($stage == 0)) {
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-6', true);
+               }
+       } elseif ($stage == 7) {
                logger("Deleting orphaned data from term table");
-               if ($db->q("SELECT `oid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) LIMIT ".intval($limit), true)) {
-                       $count = $db->num_rows();
+               $r = dba::p("SELECT `oid` FROM `term` WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `term`.`oid`) LIMIT ".intval($limit));
+               $count = dba::num_rows($r);
+               if ($count > 0) {
                        logger("found term orphans: ".$count);
-                       while ($orphan = $db->qfetch()) {
-                               q("DELETE FROM `term` WHERE `oid` = %d", intval($orphan["oid"]));
+                       while ($orphan = dba::fetch($r)) {
+                               dba::delete('term', array('oid' => $orphan["oid"]));
                        }
+               } else {
+                       logger("No term orphans found");
+               }
+               dba::close($r);
+               logger("Done deleting ".$count." orphaned data from term table");
+
+               if ($count < $limit) {
+                       Config::set('system', 'finished-dbclean-7', true);
                }
-               $db->qclose();
-               logger("Done deleting orphaned data from term table");
        }
 
        // Call it again if not all entries were purged
@@ -142,4 +177,3 @@ function remove_orphans($stage = 0) {
        }
 
 }
-?>
index d28d49d63b4b53647392f5d6c928fdba5b76d3bf..db50dae89c95eefe8796aeb4ddd835491278b75e 100644 (file)
@@ -2,6 +2,7 @@
 /**
  * @brief This class contain functions for the database management
  *
+ * This class contains functions that doesn't need to know if pdo, mysqli or whatever is used.
  */
 class dbm {
        /**
@@ -47,6 +48,11 @@ class dbm {
                if (is_bool($array)) {
                        return $array;
                }
+
+               if (is_object($array)) {
+                       return true;
+               }
+
                return (is_array($array) && count($array) > 0);
        }
 
@@ -104,4 +110,3 @@ class dbm {
                return date('Y-m-d H:i:s', $timestamp);
        }
 }
-?>
index 0d5c10f98dcf7ac110080b520850c9828e4de311..6a14220c241bcdef90757555074e3a0a000da964 100644 (file)
@@ -1,19 +1,45 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("boot.php");
 require_once("include/text.php");
 
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
+/*
+ * Converts all tables from MyISAM to InnoDB
+ */
+function convert_to_innodb() {
+       global $db;
+
+       $r = q("SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `engine` = 'MyISAM' AND `table_schema` = '%s'",
+               dbesc($db->database_name()));
+
+       if (!dbm::is_result($r)) {
+               echo t('There are no tables on MyISAM.')."\n";
+               return;
+       }
+
+       foreach ($r AS $table) {
+               $sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME']));
+               echo $sql."\n";
+
+               $result = @$db->q($sql);
+               if (!dbm::is_result($result)) {
+                       print_update_error($db, $sql);
+               }
+       }
+}
+
 /*
  * send the email and do what is needed to do on update fails
  *
  * @param update_id            (int) number of failed update
  * @param error_message        (str) error message
  */
-function update_fail($update_id, $error_message){
+function update_fail($update_id, $error_message) {
        //send the administrators an e-mail
        $admin_mail_list = "'".implode("','", array_map(dbesc, explode(",", str_replace(" ", "", $a->config['admin_email']))))."'";
        $adminlist = q("SELECT uid, language, email FROM user WHERE email IN (%s)",
@@ -95,10 +121,6 @@ function table_structure($table) {
 
        if (dbm::is_result($indexes))
                foreach ($indexes AS $index) {
-                       if ($index["Index_type"] == "FULLTEXT") {
-                               continue;
-                       }
-
                        if ($index['Key_name'] != 'PRIMARY' && $index['Non_unique'] == '0' && !isset($indexdata[$index["Key_name"]])) {
                                $indexdata[$index["Key_name"]] = array('UNIQUE');
                        }
@@ -279,6 +301,9 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                        // Compare the field definition
                                        $field_definition = $database[$name]["fields"][$fieldname];
 
+                                       // Remove the relation data that is used for the referential integrity
+                                       unset($parameters['relation']);
+
                                        // We change the collation after the indexes had been changed.
                                        // This is done to avoid index length problems.
                                        // So here we always ensure that there is no need to change it.
@@ -374,6 +399,14 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                $sql3 .= ";";
                        }
 
+                       $field_list = '';
+                       if ($is_unique && $ignore == '') {
+                               foreach ($structure['fields'] AS $fieldname => $parameters) {
+                                       $field_list .= 'ANY_VALUE(`' . $fieldname . '`),';
+                               }
+                               $field_list = rtrim($field_list, ',');
+                       }
+
                        if ($verbose) {
                                // Ensure index conversion to unique removes duplicates
                                if ($is_unique) {
@@ -390,7 +423,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                        if ($ignore != "") {
                                                echo "SET session old_alter_table=0;\n";
                                        } else {
-                                               echo "INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";\n";
+                                               echo "INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";\n";
                                                echo "DROP TABLE `".$name."`;\n";
                                                echo "RENAME TABLE `".$temp_name."` TO `".$name."`;\n";
                                        }
@@ -421,7 +454,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
                                        if ($ignore != "") {
                                                $db->q("SET session old_alter_table=0;");
                                        } else {
-                                               $r = $db->q("INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";");
+                                               $r = $db->q("INSERT INTO `".$temp_name."` SELECT ".$field_list." FROM `".$name."`".$group_by.";");
                                                if (!dbm::is_result($r)) {
                                                        $errors .= print_update_error($db, $sql3);
                                                        return $errors;
@@ -460,7 +493,7 @@ function db_field_command($parameters, $create = true) {
        if ($parameters["not null"])
                $fieldstruct .= " NOT NULL";
 
-       if (isset($parameters["default"])){
+       if (isset($parameters["default"])) {
                if (strpos(strtolower($parameters["type"]),"int")!==false) {
                        $fieldstruct .= " DEFAULT ".$parameters["default"];
                } else {
@@ -487,7 +520,7 @@ function db_create_table($name, $fields, $verbose, $action, $indexes=null) {
        $primary_keys = array();
        foreach ($fields AS $fieldname => $field) {
                $sql_rows[] = "`".dbesc($fieldname)."` ".db_field_command($field);
-               if (x($field,'primary') and $field['primary']!=''){
+               if (x($field,'primary') and $field['primary']!='') {
                        $primary_keys[] = $fieldname;
                }
        }
@@ -606,7 +639,7 @@ function db_definition() {
        $database["attach"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "hash" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
                                        "filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "filetype" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
@@ -626,7 +659,7 @@ function db_definition() {
        $database["auth_codes"] = array(
                        "fields" => array(
                                        "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
-                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
+                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")),
                                        "redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
                                        "expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "scope" => array("type" => "varchar(250)", "not null" => "1", "default" => ""),
@@ -667,7 +700,7 @@ function db_definition() {
                                        "redirect_uri" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
                                        "name" => array("type" => "text"),
                                        "icon" => array("type" => "text"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("client_id"),
@@ -688,7 +721,7 @@ function db_definition() {
        $database["contact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "remote_self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@@ -777,7 +810,7 @@ function db_definition() {
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
                                        "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
                                        "recips" => array("type" => "text"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
@@ -788,12 +821,27 @@ function db_definition() {
                                        "uid" => array("uid"),
                                        )
                        );
+       $database["conversation"] = array(
+                       "fields" => array(
+                                       "item-uri" => array("type" => "varbinary(255)", "not null" => "1", "primary" => "1"),
+                                       "reply-to-uri" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
+                                       "conversation-uri" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
+                                       "conversation-href" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
+                                       "protocol" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
+                                       "source" => array("type" => "mediumtext"),
+                                       "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
+                                       ),
+                       "indexes" => array(
+                                       "PRIMARY" => array("item-uri"),
+                                       "conversation-uri" => array("conversation-uri"),
+                                       )
+                       );
        $database["event"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
                                        "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
@@ -839,15 +887,15 @@ function db_definition() {
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
                                        "addr" => array("addr(32)"),
-                                       "url" => array("url"),
+                                       "url" => array("UNIQUE", "url(190)"),
                                        )
                        );
        $database["ffinder"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
+                                       "fid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -868,8 +916,8 @@ function db_definition() {
        $database["fsuggest"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -884,8 +932,8 @@ function db_definition() {
        $database["gcign"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -924,7 +972,7 @@ function db_definition() {
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
-                                       "nurl" => array("nurl(64)"),
+                                       "nurl" => array("UNIQUE", "nurl(190)"),
                                        "name" => array("name(64)"),
                                        "nick" => array("nick(32)"),
                                        "addr" => array("addr(64)"),
@@ -935,10 +983,10 @@ function db_definition() {
        $database["glink"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
+                                       "zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
                                        "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        ),
                        "indexes" => array(
@@ -950,7 +998,7 @@ function db_definition() {
        $database["group"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "visible" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "deleted" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -963,9 +1011,9 @@ function db_definition() {
        $database["group_member"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "gid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("group" => "id")),
+                                       "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -994,7 +1042,7 @@ function db_definition() {
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
-                                       "nurl" => array("nurl(32)"),
+                                       "nurl" => array("UNIQUE", "nurl(190)"),
                                        )
                        );
        $database["hook"] = array(
@@ -1013,9 +1061,9 @@ function db_definition() {
        $database["intro"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "fid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "fid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("fcontact" => "id")),
+                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "note" => array("type" => "text"),
@@ -1030,16 +1078,16 @@ function db_definition() {
                        );
        $database["item"] = array(
                        "fields" => array(
-                                       "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
+                                       "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => array("thread" => "iid")),
                                        "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
+                                       "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
                                        "type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "wall" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "gravity" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
-                                       "parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "parent" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
                                        "parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "extid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "thr-parent" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1048,11 +1096,11 @@ function db_definition() {
                                        "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "changed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
-                                       "owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "owner-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "owner-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "owner-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "author-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "author-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "author-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "author-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1067,7 +1115,7 @@ function db_definition() {
                                        "postopts" => array("type" => "text"),
                                        "plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("event" => "id")),
                                        "tag" => array("type" => "mediumtext"),
                                        "attach" => array("type" => "mediumtext"),
                                        "inform" => array("type" => "mediumtext"),
@@ -1113,6 +1161,7 @@ function db_definition() {
                                        "uid_parenturi" => array("uid","parent-uri(190)"),
                                        "uid_contactid_created" => array("uid","contact-id","created"),
                                        "authorid_created" => array("author-id","created"),
+                                       "ownerid" => array("owner-id"),
                                        "uid_uri" => array("uid", "uri(190)"),
                                        "resource-id" => array("resource-id"),
                                        "contactid_allowcid_allowpid_denycid_denygid" => array("contact-id","allow_cid(10)","allow_gid(10)","deny_cid(10)","deny_gid(10)"), //
@@ -1128,8 +1177,8 @@ function db_definition() {
        $database["item_id"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "service" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
@@ -1155,13 +1204,13 @@ function db_definition() {
        $database["mail"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
                                        "from-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "from-photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "from-url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
+                                       "contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => array("contact" => "id")),
+                                       "convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("conv" => "id")),
                                        "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "body" => array("type" => "mediumtext"),
                                        "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@@ -1178,12 +1227,13 @@ function db_definition() {
                                        "convid" => array("convid"),
                                        "uri" => array("uri(64)"),
                                        "parent-uri" => array("parent-uri(64)"),
+                                       "contactid" => array("contact-id"),
                                        )
                        );
        $database["mailacct"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "port" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "ssltype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
@@ -1203,8 +1253,8 @@ function db_definition() {
        $database["manage"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "mid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "mid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1221,10 +1271,10 @@ function db_definition() {
                                        "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "msg" => array("type" => "mediumtext"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
-                                       "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "parent" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
+                                       "parent" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
                                        "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "otype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
@@ -1242,10 +1292,10 @@ function db_definition() {
        $database["notify-threads"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
-                                       "master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "notify-id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("notify" => "id")),
+                                       "master-parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
                                        "parent-item" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "receiver-uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1278,7 +1328,7 @@ function db_definition() {
        $database["pconfig"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "cat" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
                                        "k" => array("type" => "varbinary(255)", "not null" => "1", "default" => ""),
                                        "v" => array("type" => "mediumtext"),
@@ -1291,8 +1341,8 @@ function db_definition() {
        $database["photo"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
                                        "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
@@ -1315,6 +1365,7 @@ function db_definition() {
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
+                                       "contactid" => array("contact-id"),
                                        "uid_contactid" => array("uid", "contact-id"),
                                        "uid_profile" => array("uid", "profile"),
                                        "uid_album_scale_created" => array("uid", "album(32)", "scale", "created"),
@@ -1325,7 +1376,7 @@ function db_definition() {
        $database["poll"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "q0" => array("type" => "text"),
                                        "q1" => array("type" => "text"),
                                        "q2" => array("type" => "text"),
@@ -1345,7 +1396,7 @@ function db_definition() {
        $database["poll_result"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "poll_id" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("poll" => "id")),
                                        "choice" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        ),
                        "indexes" => array(
@@ -1368,7 +1419,7 @@ function db_definition() {
        $database["profile"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "profile-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "is-default" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "hide-friends" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@@ -1418,8 +1469,8 @@ function db_definition() {
        $database["profile_check"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "cid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "dfrn_id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "sec" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "expire" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
@@ -1431,7 +1482,7 @@ function db_definition() {
        $database["push_subscriber"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "callback_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "topic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "nickname" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1446,7 +1497,7 @@ function db_definition() {
        $database["queue"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "last" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
@@ -1467,7 +1518,7 @@ function db_definition() {
                                        "id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
                                        "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
-                                       "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "language" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
                                        "note" => array("type" => "text"),
@@ -1479,7 +1530,7 @@ function db_definition() {
        $database["search"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        ),
                        "indexes" => array(
@@ -1503,7 +1554,7 @@ function db_definition() {
        $database["sign"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
                                        "signed_text" => array("type" => "mediumtext"),
                                        "signature" => array("type" => "text"),
                                        "signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1516,7 +1567,7 @@ function db_definition() {
        $database["spam"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        "spam" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "ham" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1533,7 +1584,7 @@ function db_definition() {
        $database["term"] = array(
                        "fields" => array(
                                        "tid" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
-                                       "oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "oid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("item" => "id")),
                                        "otype" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"),
                                        "type" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"),
                                        "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@@ -1543,7 +1594,7 @@ function db_definition() {
                                        "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
                                        "aid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("tid"),
@@ -1555,12 +1606,12 @@ function db_definition() {
                        );
        $database["thread"] = array(
                        "fields" => array(
-                                       "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1"),
-                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
-                                       "contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
-                                       "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
-                                       "owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
-                                       "author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
+                                       "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => array("item" => "id")),
+                                       "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
+                                       "contact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
+                                       "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("gcontact" => "id")),
+                                       "owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
+                                       "author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0", "relation" => array("contact" => "id")),
                                        "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
                                        "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE),
@@ -1588,6 +1639,9 @@ function db_definition() {
                                        "uid_network_created" => array("uid","network","created"),
                                        "uid_contactid_commented" => array("uid","contact-id","commented"),
                                        "uid_contactid_created" => array("uid","contact-id","created"),
+                                       "contactid" => array("contact-id"),
+                                       "ownerid" => array("owner-id"),
+                                       "authorid" => array("author-id"),
                                        "uid_created" => array("uid","created"),
                                        "uid_commented" => array("uid","commented"),
                                        "uid_wall_created" => array("uid","wall","created"),
@@ -1597,10 +1651,10 @@ function db_definition() {
                        "fields" => array(
                                        "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
                                        "secret" => array("type" => "text"),
-                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
+                                       "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => array("clients" => "client_id")),
                                        "expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
                                        "scope" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
-                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
+                                       "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0", "relation" => array("user" => "uid")),
                                        ),
                        "indexes" => array(
                                        "PRIMARY" => array("id"),
@@ -1691,8 +1745,8 @@ function db_definition() {
 function dbstructure_run(&$argv, &$argc) {
        global $a, $db;
 
-       if (is_null($a)){
-               $a = new App;
+       if (is_null($a)) {
+               $a = new App(dirname(__DIR__));
        }
 
        if (is_null($db)) {
@@ -1730,6 +1784,9 @@ function dbstructure_run(&$argv, &$argc) {
                        case "dumpsql":
                                print_structure(db_definition());
                                return;
+                       case "toinnodb":
+                               convert_to_innodb();
+                               return;
                }
        }
 
@@ -1741,11 +1798,12 @@ function dbstructure_run(&$argv, &$argc) {
        echo "dryrun            show database update schema queries without running them\n";
        echo "update            update database schema\n";
        echo "dumpsql           dump database schema\n";
+       echo "toinnodb  convert all tables from MyISAM to InnoDB\n";
        return;
 
 }
 
-if (array_search(__file__,get_included_files())===0){
+if (array_search(__file__,get_included_files())===0) {
        dbstructure_run($_SERVER["argv"],$_SERVER["argc"]);
        killme();
 }
index 725eca737045865d85ff2ec2ecf55ecbad250b68..799ca262c837b4229b80b3b464bd3bf5f6ac1624 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function dbupdate_run(&$argv, &$argc) {
        global $a;
index faa1cad6745d45667f4a3e393006f92f6a06772d..098e423d170d9d6efb8dd7e3903fb6e6cc307e36 100644 (file)
@@ -1,21 +1,22 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
-require_once('include/queue_fn.php');
-require_once('include/html2plain.php');
-require_once('include/Scrape.php');
-require_once('include/diaspora.php');
-require_once('include/ostatus.php');
-require_once('include/dfrn.php');
+require_once 'include/queue_fn.php';
+require_once 'include/html2plain.php';
+require_once 'include/probe.php';
+require_once 'include/diaspora.php';
+require_once 'include/ostatus.php';
+require_once 'include/dfrn.php';
 
 function delivery_run(&$argv, &$argc){
        global $a;
 
-       require_once('include/datetime.php');
-       require_once('include/items.php');
-       require_once('include/bbcode.php');
-       require_once('include/email.php');
+       require_once 'include/datetime.php';
+       require_once 'include/items.php';
+       require_once 'include/bbcode.php';
+       require_once 'include/email.php';
 
        if ($argc < 3) {
                return;
@@ -165,7 +166,7 @@ function delivery_run(&$argv, &$argc){
                $public_message = true;
 
                if (!($mail || $fsuggest || $relocate)) {
-                       require_once('include/group.php');
+                       require_once 'include/group.php';
 
                        $parent = $items[0];
 
index ddebf1e9bf60210d575a337a7e38f976b8472340..7e4d7af2bcceabe423bbe911fab8739b9eca6b2b 100644 (file)
@@ -7,6 +7,8 @@
  * https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
  */
 
+use Friendica\App;
+
 require_once("include/Contact.php");
 require_once("include/ostatus.php");
 require_once("include/enotify.php");
@@ -370,7 +372,7 @@ class dfrn {
                $ext = Photo::supportedTypes();
 
                foreach ($rp as $p) {
-                       $photos[$p['scale']] = app::get_baseurl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']];
+                       $photos[$p['scale']] = App::get_baseurl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']];
                }
 
                unset($rp, $ext);
@@ -431,7 +433,7 @@ class dfrn {
                $root->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS);
                $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
 
-               xml::add_element($doc, $root, "id", app::get_baseurl()."/profile/".$owner["nick"]);
+               xml::add_element($doc, $root, "id", App::get_baseurl()."/profile/".$owner["nick"]);
                xml::add_element($doc, $root, "title", $owner["name"]);
 
                $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION);
@@ -448,13 +450,13 @@ class dfrn {
                        // DFRN itself doesn't uses this. But maybe someone else wants to subscribe to the public feed.
                        ostatus::hublinks($doc, $root);
 
-                       $attributes = array("rel" => "salmon", "href" => app::get_baseurl()."/salmon/".$owner["nick"]);
+                       $attributes = array("rel" => "salmon", "href" => App::get_baseurl()."/salmon/".$owner["nick"]);
                        xml::add_element($doc, $root, "link", "", $attributes);
 
-                       $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-replies", "href" => app::get_baseurl()."/salmon/".$owner["nick"]);
+                       $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-replies", "href" => App::get_baseurl()."/salmon/".$owner["nick"]);
                        xml::add_element($doc, $root, "link", "", $attributes);
 
-                       $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-mention", "href" => app::get_baseurl()."/salmon/".$owner["nick"]);
+                       $attributes = array("rel" => "http://salmon-protocol.org/ns/salmon-mention", "href" => App::get_baseurl()."/salmon/".$owner["nick"]);
                        xml::add_element($doc, $root, "link", "", $attributes);
                }
 
@@ -511,7 +513,7 @@ class dfrn {
                }
 
                xml::add_element($doc, $author, "name", $owner["name"], $attributes);
-               xml::add_element($doc, $author, "uri", app::get_baseurl().'/profile/'.$owner["nickname"], $attributes);
+               xml::add_element($doc, $author, "uri", App::get_baseurl().'/profile/'.$owner["nickname"], $attributes);
                xml::add_element($doc, $author, "dfrn:handle", $owner["addr"], $attributes);
 
                $attributes = array("rel" => "photo", "type" => "image/jpeg",
@@ -812,11 +814,33 @@ class dfrn {
                        $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));
                        $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
                        $attributes = array("ref" => $parent_item, "type" => "text/html",
-                                               "href" => app::get_baseurl().'/display/'.$parent[0]['guid'],
+                                               "href" => App::get_baseurl().'/display/'.$parent[0]['guid'],
                                                "dfrn:diaspora_guid" => $parent[0]['guid']);
                        xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes);
                }
 
+               // Add conversation data. This is used for OStatus
+               $conversation_href = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"];
+               $conversation_uri = $conversation_href;
+
+               if (isset($parent_item)) {
+                       $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $item['parent-uri']);
+                       if (dbm::is_result($r)) {
+                               if ($r['conversation-uri'] != '') {
+                                       $conversation_uri = $r['conversation-uri'];
+                               }
+                               if ($r['conversation-href'] != '') {
+                                       $conversation_href = $r['conversation-href'];
+                               }
+                       }
+               }
+
+               $attributes = array(
+                               "href" => $conversation_href,
+                               "ref" => $conversation_uri);
+
+               xml::add_element($doc, $entry, "ostatus:conversation", $conversation_uri, $attributes);
+
                xml::add_element($doc, $entry, "id", $item["uri"]);
                xml::add_element($doc, $entry, "title", $item["title"]);
 
@@ -832,7 +856,7 @@ class dfrn {
 
                // We save this value in "plink". Maybe we should read it from there as well?
                xml::add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html",
-                                                               "href" => app::get_baseurl()."/display/".$item["guid"]));
+                                                               "href" => App::get_baseurl()."/display/".$item["guid"]));
 
                // "comment-allow" is some old fashioned stuff for old Friendica versions.
                // It is included in the rewritten code for completeness
@@ -2209,12 +2233,16 @@ class dfrn {
         * @param array $importer Record of the importer user mixed with contact of the content
         * @todo Add type-hints
         */
-       private static function process_entry($header, $xpath, $entry, $importer) {
+       private static function process_entry($header, $xpath, $entry, $importer, $xml) {
 
                logger("Processing entries");
 
                $item = $header;
 
+               $item["protocol"] = PROTOCOL_DFRN;
+
+               $item["source"] = $xml;
+
                // Get the uri
                $item["uri"] = $xpath->query("atom:id/text()", $entry)->item(0)->nodeValue;
 
@@ -2373,6 +2401,20 @@ class dfrn {
                        self::parse_links($links, $item);
                }
 
+               $item['conversation-uri'] = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+
+               $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;
+                               }
+                       }
+               }
+
                // Is it a reply or a top level posting?
                $item["parent-uri"] = $item["uri"];
 
@@ -2801,7 +2843,7 @@ class dfrn {
                if (!$sort_by_date) {
                        $entries = $xpath->query("/atom:feed/atom:entry");
                        foreach ($entries AS $entry) {
-                               self::process_entry($header, $xpath, $entry, $importer);
+                               self::process_entry($header, $xpath, $entry, $importer, $xml);
                        }
                } else {
                        $newentries = array();
@@ -2815,7 +2857,7 @@ class dfrn {
                        ksort($newentries);
 
                        foreach ($newentries AS $entry) {
-                               self::process_entry($header, $xpath, $entry, $importer);
+                               self::process_entry($header, $xpath, $entry, $importer, $xml);
                        }
                }
                logger("Import done for user " . $importer["uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
index b8eff62b1130f2a25ecd1503d043d130240b8704..820f8bd8967d73ed997653e2c1a0aff1e8368f5e 100644 (file)
@@ -8,11 +8,12 @@
  * This will change in the future.
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/items.php';
 require_once 'include/bb2diaspora.php';
-require_once 'include/Scrape.php';
+require_once 'include/probe.php';
 require_once 'include/Contact.php';
 require_once 'include/Photo.php';
 require_once 'include/socgraph.php';
@@ -187,7 +188,80 @@ class Diaspora {
        }
 
        /**
-        * @brief: Decodes incoming Diaspora message
+        * @brief: Decodes incoming Diaspora message in the new format
+        *
+        * @param array $importer Array of the importer user
+        * @param string $raw raw post message
+        *
+        * @return array
+        * 'message' -> decoded Diaspora XML message
+        * 'author' -> author diaspora handle
+        * 'key' -> author public key (converted to pkcs#8)
+        */
+       public static function decode_raw($importer, $raw) {
+               $data = json_decode($raw);
+
+               // Is it a private post? Then decrypt the outer Salmon
+               if (is_object($data)) {
+                       $encrypted_aes_key_bundle = base64_decode($data->aes_key);
+                       $ciphertext = base64_decode($data->encrypted_magic_envelope);
+
+                       $outer_key_bundle = '';
+                       @openssl_private_decrypt($encrypted_aes_key_bundle, $outer_key_bundle, $importer['prvkey']);
+                       $j_outer_key_bundle = json_decode($outer_key_bundle);
+
+                       if (!is_object($j_outer_key_bundle)) {
+                               logger('Outer Salmon did not verify. Discarding.');
+                               http_status_exit(400);
+                       }
+
+                       $outer_iv = base64_decode($j_outer_key_bundle->iv);
+                       $outer_key = base64_decode($j_outer_key_bundle->key);
+
+                       $xml = diaspora::aes_decrypt($outer_key, $outer_iv, $ciphertext);
+               } else {
+                       $xml = $raw;
+               }
+
+               $basedom = parse_xml_string($xml);
+
+               if (!is_object($basedom)) {
+                       logger('Received data does not seem to be an XML. Discarding.');
+                       http_status_exit(400);
+               }
+
+               $base = $basedom->children(NAMESPACE_SALMON_ME);
+
+               // Not sure if this cleaning is needed
+               $data = str_replace(array(" ", "\t", "\r", "\n"), array("", "", "", ""), $base->data);
+
+               // Build the signed data
+               $type = $base->data[0]->attributes()->type[0];
+               $encoding = $base->encoding;
+               $alg = $base->alg;
+               $signed_data = $data.'.'.base64url_encode($type).'.'.base64url_encode($encoding).'.'.base64url_encode($alg);
+
+               // This is the signature
+               $signature = base64url_decode($base->sig);
+
+               // Get the senders' public key
+               $key_id = $base->sig[0]->attributes()->key_id[0];
+               $author_addr = base64_decode($key_id);
+               $key = diaspora::key($author_addr);
+
+               $verify = rsa_verify($signed_data, $signature, $key);
+               if (!$verify) {
+                       logger('Message did not verify. Discarding.');
+                       http_status_exit(400);
+               }
+
+               return array('message' => (string)base64url_decode($base->data),
+                               'author' => unxmlify($author_addr),
+                               'key' => (string)$key);
+       }
+
+       /**
+        * @brief: Decodes incoming Diaspora message in the deprecated format
         *
         * @param array $importer Array of the importer user
         * @param string $xml urldecoded Diaspora salmon
@@ -202,9 +276,10 @@ class Diaspora {
                $public = false;
                $basedom = parse_xml_string($xml);
 
-               if (!is_object($basedom))
+               if (!is_object($basedom)) {
+                       logger("XML is not parseable.");
                        return false;
-
+               }
                $children = $basedom->children('https://joindiaspora.com/protocol');
 
                if ($children->header) {
@@ -333,6 +408,24 @@ class Diaspora {
                        return false;
                }
 
+               if (!($postdata = self::valid_posting($msg))) {
+                       logger("Invalid posting");
+                       return false;
+               }
+
+               $fields = $postdata['fields'];
+
+               // Is it a an action (comment, like, ...) for our own post?
+               if (isset($fields->parent_guid) AND !$postdata["relayed"]) {
+                       $guid = notags(unxmlify($fields->parent_guid));
+                       $importer = self::importer_for_guid($guid);
+                       if (is_array($importer)) {
+                               logger("delivering to origin: ".$importer["name"]);
+                               $message_id = self::dispatch($importer, $msg, $fields);
+                               return $message_id;
+                       }
+               }
+
                // Now distribute it to the followers
                $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN
                        (SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s')
@@ -344,18 +437,14 @@ class Diaspora {
                if (dbm::is_result($r)) {
                        foreach ($r as $rr) {
                                logger("delivering to: ".$rr["username"]);
-                               self::dispatch($rr,$msg);
+                               self::dispatch($rr, $msg, $fields);
                        }
+               } elseif (!Config::get('system', 'relay_subscribe', false)) {
+                       logger("Unwanted message from ".$msg["author"]." send by ".$_SERVER["REMOTE_ADDR"]." with ".$_SERVER["HTTP_USER_AGENT"].": ".print_r($msg, true), LOGGER_DEBUG);
                } else {
-                       $social_relay = (bool)Config::get('system', 'relay_subscribe', false);
-
                        // Use a dummy importer to import the data for the public copy
-                       if ($social_relay) {
-                               $importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
-                               $message_id = self::dispatch($importer,$msg);
-                       } else {
-                               logger("Unwanted message from ".$msg["author"]." send by ".$_SERVER["REMOTE_ADDR"]." with ".$_SERVER["HTTP_USER_AGENT"].": ".print_r($msg, true), LOGGER_DEBUG);
-                       }
+                       $importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
+                       $message_id = self::dispatch($importer, $msg, $fields);
                }
 
                return $message_id;
@@ -366,18 +455,23 @@ class Diaspora {
         *
         * @param array $importer Array of the importer user
         * @param array $msg The post that will be dispatched
+        * @param object $fields SimpleXML object that contains the message
         *
         * @return int The message id of the generated message, "true" or "false" if there was an error
         */
-       public static function dispatch($importer, $msg) {
+       public static function dispatch($importer, $msg, $fields = null) {
 
                // The sender is the handle of the contact that sent the message.
                // This will often be different with relayed messages (for example "like" and "comment")
                $sender = $msg["author"];
 
-               if (!self::valid_posting($msg, $fields)) {
-                       logger("Invalid posting");
-                       return false;
+               // This is only needed for private postings since this is already done for public ones before
+               if (is_null($fields)) {
+                       if (!($postdata = self::valid_posting($msg))) {
+                               logger("Invalid posting");
+                               return false;
+                       }
+                       $fields = $postdata['fields'];
                }
 
                $type = $fields->getName();
@@ -439,11 +533,10 @@ class Diaspora {
         * It also does the conversion between the old and the new diaspora format.
         *
         * @param array $msg Array with the XML, the sender handle and the sender signature
-        * @param object $fields SimpleXML object that contains the posting when it is valid
         *
-        * @return bool Is the posting valid?
+        * @return bool|array If the posting is valid then an array with an SimpleXML object is returned
         */
-       private static function valid_posting($msg, &$fields) {
+       private static function valid_posting($msg) {
 
                $data = parse_xml_string($msg["message"], false);
 
@@ -484,32 +577,38 @@ class Diaspora {
                foreach ($element->children() AS $fieldname => $entry) {
                        if ($oldXML) {
                                // Translation for the old XML structure
-                               if ($fieldname == "diaspora_handle")
+                               if ($fieldname == "diaspora_handle") {
                                        $fieldname = "author";
-
-                               if ($fieldname == "participant_handles")
+                               }
+                               if ($fieldname == "participant_handles") {
                                        $fieldname = "participants";
-
+                               }
                                if (in_array($type, array("like", "participation"))) {
-                                       if ($fieldname == "target_type")
+                                       if ($fieldname == "target_type") {
                                                $fieldname = "parent_type";
+                                       }
                                }
-
-                               if ($fieldname == "sender_handle")
+                               if ($fieldname == "sender_handle") {
                                        $fieldname = "author";
-
-                               if ($fieldname == "recipient_handle")
+                               }
+                               if ($fieldname == "recipient_handle") {
                                        $fieldname = "recipient";
-
-                               if ($fieldname == "root_diaspora_id")
+                               }
+                               if ($fieldname == "root_diaspora_id") {
                                        $fieldname = "root_author";
-
+                               }
+                               if ($type == "status_message") {
+                                       if ($fieldname == "raw_message") {
+                                               $fieldname = "text";
+                                       }
+                               }
                                if ($type == "retraction") {
-                                       if ($fieldname == "post_guid")
+                                       if ($fieldname == "post_guid") {
                                                $fieldname = "target_guid";
-
-                                       if ($fieldname == "type")
+                                       }
+                                       if ($fieldname == "type") {
                                                $fieldname = "target_type";
+                                       }
                                }
                        }
 
@@ -538,9 +637,9 @@ class Diaspora {
                        }
 
                // Only some message types have signatures. So we quit here for the other types.
-               if (!in_array($type, array("comment", "message", "like")))
-                       return true;
-
+               if (!in_array($type, array("comment", "like"))) {
+                       return array("fields" => $fields, "relayed" => false);
+               }
                // No author_signature? This is a must, so we quit.
                if (!isset($author_signature)) {
                        logger("No author signature for type ".$type." - Message: ".$msg["message"], LOGGER_DEBUG);
@@ -548,12 +647,16 @@ class Diaspora {
                }
 
                if (isset($parent_author_signature)) {
+                       $relayed = true;
+
                        $key = self::key($msg["author"]);
 
                        if (!rsa_verify($signed_data, $parent_author_signature, $key, "sha256")) {
                                logger("No valid parent author signature for parent author ".$msg["author"]. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$parent_author_signature, LOGGER_DEBUG);
                                return false;
                        }
+               } else {
+                       $relayed = false;
                }
 
                $key = self::key($fields->author);
@@ -561,8 +664,9 @@ class Diaspora {
                if (!rsa_verify($signed_data, $author_signature, $key, "sha256")) {
                        logger("No valid author signature for author ".$fields->author. " in type ".$type." - signed data: ".$signed_data." - Message: ".$msg["message"]." - Signature ".$author_signature, LOGGER_DEBUG);
                        return false;
-               } else
-                       return true;
+               } else {
+                       return array("fields" => $fields, "relayed" => $relayed);
+               }
        }
 
        /**
@@ -591,7 +695,7 @@ class Diaspora {
         *
         * @return array the queried data
         */
-       private static function person_by_handle($handle) {
+       public static function person_by_handle($handle) {
 
                $r = q("SELECT * FROM `fcontact` WHERE `network` = '%s' AND `addr` = '%s' LIMIT 1",
                        dbesc(NETWORK_DIASPORA),
@@ -828,17 +932,20 @@ class Diaspora {
                        logger("defining user ".$contact["nick"]." as friend");
                }
 
-               if (($contact["blocked"]) || ($contact["readonly"]) || ($contact["archive"]))
+               // We don't seem to like that person
+               if ($contact["blocked"] || $contact["readonly"] || $contact["archive"]) {
                        return false;
-               if ($contact["rel"] == CONTACT_IS_SHARING || $contact["rel"] == CONTACT_IS_FRIEND)
+               // We are following this person? Then it is okay
+               } elseif (($contact["rel"] == CONTACT_IS_SHARING) || ($contact["rel"] == CONTACT_IS_FRIEND)) {
                        return true;
-               if ($contact["rel"] == CONTACT_IS_FOLLOWER)
-                       if (($importer["page-flags"] == PAGE_COMMUNITY) OR $is_comment)
-                               return true;
-
-               // Messages for the global users are always accepted
-               if ($importer["uid"] == 0)
+               // Is it a post to a community? That's good
+               } elseif (($contact["rel"] == CONTACT_IS_FOLLOWER) && ($importer["page-flags"] == PAGE_COMMUNITY)) {
+                       return true;
+               }
+               // Messages for the global users and comments are always accepted
+               if (($importer["uid"] == 0) || $is_comment) {
                        return true;
+               }
 
                return false;
        }
@@ -856,7 +963,12 @@ class Diaspora {
                $contact = self::contact_by_handle($importer["uid"], $handle);
                if (!$contact) {
                        logger("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found");
-                       return false;
+                       // If a contact isn't found, we accept it anyway if it is a comment
+                       if ($is_comment) {
+                               return $importer;
+                       } else {
+                               return false;
+                       }
                }
 
                if (!self::post_allow($importer, $contact, $is_comment)) {
@@ -1111,9 +1223,9 @@ class Diaspora {
                        $cid = $r[0]["id"];
                        $network = $r[0]["network"];
 
-                       // We are receiving content from a user that is about to be terminated
+                       // We are receiving content from a user that possibly is about to be terminated
                        // This means the user is vital, so we remove a possible termination date.
-                       unmark_for_death($contact);
+                       unmark_for_death($r[0]);
                } else {
                        $cid = $contact["id"];
                        $network = NETWORK_DIASPORA;
@@ -1227,6 +1339,26 @@ class Diaspora {
                }
        }
 
+       /**
+        * @brief Find the best importer for a comment, like, ...
+        *
+        * @param string $guid The guid of the item
+        *
+        * @return array|boolean the origin owner of that post - or false
+        */
+       private static function importer_for_guid($guid) {
+               $item = dba::fetch_first("SELECT `uid` FROM `item` WHERE `origin` AND `guid` = ? LIMIT 1", $guid);
+
+               if (dbm::is_result($item)) {
+                       logger("Found user ".$item['uid']." as owner of item ".$guid, LOGGER_DEBUG);
+                       $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `self` AND `uid` = ?", $item['uid']);
+                       if (dbm::is_result($contact)) {
+                               return $contact;
+                       }
+               }
+               return false;
+       }
+
        /**
         * @brief Processes an incoming comment
         *
@@ -1238,10 +1370,10 @@ class Diaspora {
         * @return int The message id of the generated comment or "false" if there was an error
         */
        private static function receive_comment($importer, $sender, $data, $xml) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $parent_guid = notags(unxmlify($data->parent_guid));
                $text = unxmlify($data->text);
-               $author = notags(unxmlify($data->author));
 
                if (isset($data->created_at)) {
                        $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
@@ -1308,7 +1440,9 @@ class Diaspora {
                }
 
                $datarray["object-type"] = ACTIVITY_OBJ_COMMENT;
-               $datarray["object"] = $xml;
+
+               $datarray["protocol"] = PROTOCOL_DIASPORA;
+               $datarray["source"] = $xml;
 
                $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at;
 
@@ -1354,16 +1488,9 @@ class Diaspora {
         * @return bool "true" if it was successful
         */
        private static function receive_conversation_message($importer, $contact, $data, $msg, $mesg, $conversation) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $subject = notags(unxmlify($data->subject));
-               $author = notags(unxmlify($data->author));
-
-               $msg_guid = notags(unxmlify($mesg->guid));
-               $msg_parent_guid = notags(unxmlify($mesg->parent_guid));
-               $msg_parent_author_signature = notags(unxmlify($mesg->parent_author_signature));
-               $msg_author_signature = notags(unxmlify($mesg->author_signature));
-               $msg_text = unxmlify($mesg->text);
-               $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at)));
 
                // "diaspora_handle" is the element name from the old version
                // "author" is the element name from the new version
@@ -1375,7 +1502,10 @@ class Diaspora {
                        return false;
                }
 
+               $msg_guid = notags(unxmlify($mesg->guid));
                $msg_conversation_guid = notags(unxmlify($mesg->conversation_guid));
+               $msg_text = unxmlify($mesg->text);
+               $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at)));
 
                if ($msg_conversation_guid != $guid) {
                        logger("message conversation guid does not belong to the current conversation.");
@@ -1385,44 +1515,11 @@ class Diaspora {
                $body = diaspora2bb($msg_text);
                $message_uri = $msg_author.":".$msg_guid;
 
-               $author_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid;
+               $person = self::person_by_handle($msg_author);
 
-               $author_signature = base64_decode($msg_author_signature);
-
-               if (strcasecmp($msg_author,$msg["author"]) == 0) {
-                       $person = $contact;
-                       $key = $msg["key"];
-               } else {
-                       $person = self::person_by_handle($msg_author);
-
-                       if (is_array($person) && x($person, "pubkey")) {
-                               $key = $person["pubkey"];
-                       } else {
-                               logger("unable to find author details");
-                                       return false;
-                       }
-               }
-
-               if (!rsa_verify($author_signed_data, $author_signature, $key, "sha256")) {
-                       logger("verification failed.");
-                       return false;
-               }
-
-               if ($msg_parent_author_signature) {
-                       $owner_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid;
-
-                       $parent_author_signature = base64_decode($msg_parent_author_signature);
-
-                       $key = $msg["key"];
-
-                       if (!rsa_verify($owner_signed_data, $parent_author_signature, $key, "sha256")) {
-                               logger("owner verification failed.");
-                               return false;
-                       }
-               }
-
-               $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' LIMIT 1",
-                       dbesc($message_uri)
+               $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($msg_guid),
+                       intval($importer["uid"])
                );
                if (dbm::is_result($r)) {
                        logger("duplicate message already delivered.", LOGGER_DEBUG);
@@ -1479,10 +1576,10 @@ class Diaspora {
         * @return bool Success
         */
        private static function receive_conversation($importer, $msg, $data) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $subject = notags(unxmlify($data->subject));
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
-               $author = notags(unxmlify($data->author));
                $participants = notags(unxmlify($data->participants));
 
                $messages = $data->message;
@@ -1587,11 +1684,11 @@ class Diaspora {
         * @return int The message id of the generated like or "false" if there was an error
         */
        private static function receive_like($importer, $sender, $data) {
-               $positive = notags(unxmlify($data->positive));
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $parent_type = notags(unxmlify($data->parent_type));
                $parent_guid = notags(unxmlify($data->parent_guid));
-               $author = notags(unxmlify($data->author));
+               $parent_type = notags(unxmlify($data->parent_type));
+               $positive = notags(unxmlify($data->positive));
 
                // likes on comments aren't supported by Diaspora - only on posts
                // But maybe this will be supported in the future, so we will accept it.
@@ -1628,6 +1725,8 @@ class Diaspora {
 
                $datarray = array();
 
+               $datarray["protocol"] = PROTOCOL_DIASPORA;
+
                $datarray["uid"] = $importer["uid"];
                $datarray["contact-id"] = $author_contact["cid"];
                $datarray["network"]  = $author_contact["network"];
@@ -1684,12 +1783,11 @@ class Diaspora {
         * @return bool Success?
         */
        private static function receive_message($importer, $data) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $parent_guid = notags(unxmlify($data->parent_guid));
+               $conversation_guid = notags(unxmlify($data->conversation_guid));
                $text = unxmlify($data->text);
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
-               $author = notags(unxmlify($data->author));
-               $conversation_guid = notags(unxmlify($data->conversation_guid));
 
                $contact = self::allowed_contact_by_handle($importer, $author, true);
                if (!$contact) {
@@ -1717,8 +1815,8 @@ class Diaspora {
                        return false;
                }
 
-               $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
-                       dbesc($message_uri),
+               $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($guid),
                        intval($importer["uid"])
                );
                if (dbm::is_result($r)) {
@@ -1744,7 +1842,7 @@ class Diaspora {
                        0,
                        1,
                        dbesc($message_uri),
-                       dbesc($author.":".$parent_guid),
+                       dbesc($author.":".$conversation["guid"]),
                        dbesc($created_at)
                );
 
@@ -1813,9 +1911,9 @@ class Diaspora {
                $name = unxmlify($data->first_name).((strlen($data->last_name)) ? " ".unxmlify($data->last_name) : "");
                $image_url = unxmlify($data->image_url);
                $birthday = unxmlify($data->birthday);
-               $location = diaspora2bb(unxmlify($data->location));
-               $about = diaspora2bb(unxmlify($data->bio));
                $gender = unxmlify($data->gender);
+               $about = diaspora2bb(unxmlify($data->bio));
+               $location = diaspora2bb(unxmlify($data->location));
                $searchable = (unxmlify($data->searchable) == "true");
                $nsfw = (unxmlify($data->nsfw) == "true");
                $tags = unxmlify($data->tag_string);
@@ -1919,6 +2017,7 @@ class Diaspora {
                        if ($self && $contact["rel"] == CONTACT_IS_FOLLOWER) {
 
                                $arr = array();
+                               $arr["protocol"] = PROTOCOL_DIASPORA;
                                $arr["uri"] = $arr["parent-uri"] = item_new_uri($a->get_hostname(), $importer["uid"]);
                                $arr["uid"] = $importer["uid"];
                                $arr["contact-id"] = $self[0]["id"];
@@ -2234,12 +2333,13 @@ class Diaspora {
         * @return int the message id
         */
        private static function receive_reshare($importer, $data, $xml) {
+               $author = notags(unxmlify($data->author));
+               $guid = notags(unxmlify($data->guid));
+               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
                $root_author = notags(unxmlify($data->root_author));
                $root_guid = notags(unxmlify($data->root_guid));
-               $guid = notags(unxmlify($data->guid));
-               $author = notags(unxmlify($data->author));
+               /// @todo handle unprocessed property "provider_display_name"
                $public = notags(unxmlify($data->public));
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
 
                $contact = self::allowed_contact_by_handle($importer, $author, false);
                if (!$contact) {
@@ -2278,7 +2378,8 @@ class Diaspora {
                $datarray["verb"] = ACTIVITY_POST;
                $datarray["gravity"] = GRAVITY_PARENT;
 
-               $datarray["object"] = $xml;
+               $datarray["protocol"] = PROTOCOL_DIASPORA;
+               $datarray["source"] = $xml;
 
                $prefix = share_header($original_item["author-name"], $original_item["author-link"], $original_item["author-avatar"],
                                        $original_item["guid"], $original_item["created"], $orig_url);
@@ -2313,9 +2414,9 @@ class Diaspora {
         * @return bool success
         */
        private static function item_retraction($importer, $contact, $data) {
-               $target_type = notags(unxmlify($data->target_type));
-               $target_guid = notags(unxmlify($data->target_guid));
                $author = notags(unxmlify($data->author));
+               $target_guid = notags(unxmlify($data->target_guid));
+               $target_type = notags(unxmlify($data->target_type));
 
                $person = self::person_by_handle($author);
                if (!is_array($person)) {
@@ -2323,11 +2424,16 @@ class Diaspora {
                        return false;
                }
 
+               if (!isset($contact["url"])) {
+                       $contact["url"] = $person["url"];
+               }
+
                $r = q("SELECT `id`, `parent`, `parent-uri`, `author-link` FROM `item` WHERE `guid` = '%s' AND `uid` = %d AND NOT `file` LIKE '%%[%%' LIMIT 1",
                        dbesc($target_guid),
                        intval($importer["uid"])
                );
                if (!$r) {
+                       logger("Target guid ".$target_guid." was not found for user ".$importer["uid"]);
                        return false;
                }
 
@@ -2373,7 +2479,7 @@ class Diaspora {
                $target_type = notags(unxmlify($data->target_type));
 
                $contact = self::contact_by_handle($importer["uid"], $sender);
-               if (!$contact) {
+               if (!$contact AND (in_array($target_type, array("Contact", "Person")))) {
                        logger("cannot find contact for sender: ".$sender." and user ".$importer["uid"]);
                        return false;
                }
@@ -2386,7 +2492,7 @@ class Diaspora {
                        case "Post": // "Post" will be supported in a future version
                        case "Reshare":
                        case "StatusMessage":
-                               return self::item_retraction($importer, $contact, $data);;
+                               return self::item_retraction($importer, $contact, $data);
 
                        case "Contact":
                        case "Person":
@@ -2412,19 +2518,13 @@ class Diaspora {
         * @return int The message id of the newly created item
         */
        private static function receive_status_message($importer, $data, $xml) {
-               $raw_message = unxmlify($data->raw_message);
-               $guid = notags(unxmlify($data->guid));
                $author = notags(unxmlify($data->author));
-               $public = notags(unxmlify($data->public));
+               $guid = notags(unxmlify($data->guid));
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $public = notags(unxmlify($data->public));
+               $text = unxmlify($data->text);
                $provider_display_name = notags(unxmlify($data->provider_display_name));
 
-               /// @todo enable support for polls
-               //if ($data->poll) {
-               //      foreach ($data->poll AS $poll)
-               //              print_r($poll);
-               //      die("poll!\n");
-               //}
                $contact = self::allowed_contact_by_handle($importer, $author, false);
                if (!$contact) {
                        return false;
@@ -2442,7 +2542,7 @@ class Diaspora {
                        }
                }
 
-               $body = diaspora2bb($raw_message);
+               $body = diaspora2bb($text);
 
                $datarray = array();
 
@@ -2463,6 +2563,15 @@ class Diaspora {
                        }
                }
 
+               /// @todo enable support for polls
+               //if ($data->poll) {
+               //      foreach ($data->poll AS $poll)
+               //              print_r($poll);
+               //      die("poll!\n");
+               //}
+
+               /// @todo enable support for events
+
                $datarray["uid"] = $importer["uid"];
                $datarray["contact-id"] = $contact["id"];
                $datarray["network"] = NETWORK_DIASPORA;
@@ -2481,7 +2590,8 @@ class Diaspora {
                $datarray["verb"] = ACTIVITY_POST;
                $datarray["gravity"] = GRAVITY_PARENT;
 
-               $datarray["object"] = $xml;
+               $datarray["protocol"] = PROTOCOL_DIASPORA;
+               $datarray["source"] = $xml;
 
                $datarray["body"] = self::replace_people_guid($body, $contact["url"]);
 
@@ -3711,4 +3821,3 @@ class Diaspora {
                return true;
        }
 }
-?>
index 41a3dd784c0b1876807ab81a9d9e06cd83098843..e507a939f8cd36ef37e3ed7cceec44bd49253b99 100644 (file)
@@ -1,9 +1,9 @@
 <?php
-/// @TODO no longer used?
-use \Friendica\Core\Config;
+
+use Friendica\Core\Config;
 
 function directory_run(&$argv, &$argc){
-       $dir = get_config('system', 'directory');
+       $dir = Config::get('system', 'directory');
 
        if (!strlen($dir)) {
                return;
index ff97b0e592913a6b1bdce9bba502d6e461497eef..e71c26fc180da224e2594f2fb71a6c80b2e04809 100644 (file)
@@ -1,9 +1,10 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
-require_once('include/socgraph.php');
-require_once('include/datetime.php');
+require_once 'include/probe.php';
+require_once 'include/socgraph.php';
+require_once 'include/datetime.php';
 
 function discover_poco_run(&$argv, &$argc) {
 
index f86174bd40109826025f5fe96f7b57a6f9e6087c..08129da1a51ee20fd3d1e6aec2dff68376b133b2 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once('include/Emailer.php');
 require_once('include/email.php');
 require_once('include/bbcode.php');
@@ -482,9 +485,7 @@ function notification($params) {
                );
                if ($p && (count($p) > 1)) {
                        for ($d = 1; $d < count($p); $d ++) {
-                               q("DELETE FROM `notify` WHERE `id` = %d",
-                                       intval($p[$d]['id'])
-                               );
+                               dba::delete('notify', array('id' => $p[$d]['id']));
                        }
 
                        // only continue on if we stored the first one
index 64b1ebddc3c4a4008ce11e2f4c82c5050063622a..089fe705dbbe1b10a6ee68f7e22e01d00787e82c 100644 (file)
@@ -4,6 +4,8 @@
  * @brief functions specific to event handling
  */
 
+use Friendica\App;
+
 require_once 'include/bbcode.php';
 require_once 'include/map.php';
 require_once 'include/datetime.php';
@@ -81,74 +83,6 @@ function format_event_html($ev, $simple = false) {
        return $o;
 }
 
-/*
-@TODO old-lost code found?
-function parse_event($h) {
-
-       require_once('include/Scrape.php');
-       require_once('include/html2bbcode');
-
-       $h = '<html><body>' . $h . '</body></html>';
-
-       $ret = array();
-
-
-       try {
-               $dom = HTML5_Parser::parse($h);
-       } catch (DOMException $e) {
-               logger('parse_event: parse error: ' . $e);
-       }
-
-       if (! $dom)
-               return $ret;
-
-       $items = $dom->getElementsByTagName('*');
-
-       foreach ($items as $item) {
-               if (attribute_contains($item->getAttribute('class'), 'vevent')) {
-                       $level2 = $item->getElementsByTagName('*');
-                       foreach ($level2 as $x) {
-                               if (attribute_contains($x->getAttribute('class'),'dtstart') && $x->getAttribute('title')) {
-                                       $ret['start'] = $x->getAttribute('title');
-                                       if (! strpos($ret['start'],'Z'))
-                                               $ret['adjust'] = true;
-                               }
-                               if (attribute_contains($x->getAttribute('class'),'dtend') && $x->getAttribute('title'))
-                                       $ret['finish'] = $x->getAttribute('title');
-
-                               if (attribute_contains($x->getAttribute('class'),'description'))
-                                       $ret['desc'] = $x->textContent;
-                               if (attribute_contains($x->getAttribute('class'),'location'))
-                                       $ret['location'] = $x->textContent;
-                       }
-               }
-       }
-
-       // sanitise
-
-       if ((x($ret,'desc')) && ((strpos($ret['desc'],'<') !== false) || (strpos($ret['desc'],'>') !== false))) {
-               $config = HTMLPurifier_Config::createDefault();
-               $config->set('Cache.DefinitionImpl', null);
-               $purifier = new HTMLPurifier($config);
-               $ret['desc'] = html2bbcode($purifier->purify($ret['desc']));
-       }
-
-       if ((x($ret,'location')) && ((strpos($ret['location'],'<') !== false) || (strpos($ret['location'],'>') !== false))) {
-               $config = HTMLPurifier_Config::createDefault();
-               $config->set('Cache.DefinitionImpl', null);
-               $purifier = new HTMLPurifier($config);
-               $ret['location'] = html2bbcode($purifier->purify($ret['location']));
-       }
-
-       if (x($ret,'start'))
-               $ret['start'] = datetime_convert('UTC','UTC',$ret['start']);
-       if (x($ret,'finish'))
-               $ret['finish'] = datetime_convert('UTC','UTC',$ret['finish']);
-
-       return $ret;
-}
-*/
-
 function format_event_bbcode($ev) {
 
        $o = '';
@@ -535,7 +469,7 @@ function get_event_strings() {
  *
  * @param array $dates Array of possibly duplicated events
  * @return array Cleaned events
- * 
+ *
  * @todo We should replace this with a separate update function if there is some time left
  */
 function event_remove_duplicates($dates) {
index 098125a79864efb3315fe75ebd2319b6eca5a0de..73bffb20dce37a89e88714afdf7611634da2b8c4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function expire_run(&$argv, &$argc){
        global $a;
@@ -10,8 +10,13 @@ function expire_run(&$argv, &$argc){
        require_once('include/Contact.php');
 
        // physically remove anything that has been deleted for more than two months
-
-       $r = q("DELETE FROM `item` WHERE `deleted` = 1 AND `changed` < UTC_TIMESTAMP() - INTERVAL 60 DAY");
+       $r = dba::p("SELECT `id` FROM `item` WHERE `deleted` AND `changed` < UTC_TIMESTAMP() - INTERVAL 60 DAY");
+       if (dbm::is_result($r)) {
+               while ($row = dba::fetch($r)) {
+                       dba::delete('item', array('id' => $row['id']));
+               }
+               dba::close($r);
+       }
 
        // make this optional as it could have a performance impact on large sites
 
index 32044e663e7113f8eda3834ef986579de5378df9..cfef6d4ad03deb12b562840dfec395a827601eb9 100644 (file)
@@ -366,4 +366,3 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
                return array("header" => $author, "items" => $items);
        }
 }
-?>
index c20a6d832d6898b3356eef1f705cc27a77d392ca..0ac0078c859272b99f0db46b26d8c04866cd9193 100644 (file)
@@ -47,4 +47,3 @@ function update_files_for_items() {
                create_files_from_item($message["id"]);
        }
 }
-?>
index 30451910772295fb824e8ac66b127b51100182e5..cdeac6db2a5bbe97861ad13a3cde5a5bf612fb42 100644 (file)
@@ -1,11 +1,14 @@
 <?php
-require_once("include/Scrape.php");
-require_once("include/socgraph.php");
-require_once('include/group.php');
-require_once('include/salmon.php');
-require_once('include/ostatus.php');
-require_once("include/Photo.php");
-require_once('include/diaspora.php');
+
+use Friendica\App;
+
+require_once 'include/probe.php';
+require_once 'include/socgraph.php';
+require_once 'include/group.php';
+require_once 'include/salmon.php';
+require_once 'include/ostatus.php';
+require_once 'include/Photo.php';
+require_once 'include/diaspora.php';
 
 function update_contact($id) {
        /*
@@ -82,6 +85,11 @@ function new_contact($uid,$url,$interactive = false) {
                return $result;
        }
 
+       if (blocked_url($url)) {
+               $result['message'] = t('Blocked domain');
+               return $result;
+       }
+
        if (! $url) {
                $result['message'] = t('Connect URL missing.');
                return $result;
index e79cc64764a3265211bf4f4458cbaeb39e77aff8..8e9ebd1227eed389ca1abcda3fd8ab789e7385eb 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
-require_once('include/Scrape.php');
-require_once('include/socgraph.php');
-require_once('include/datetime.php');
+require_once 'include/probe.php';
+require_once 'include/socgraph.php';
+require_once 'include/datetime.php';
 
 function gprobe_run(&$argv, &$argc){
        if ($argc != 2) {
index c14629b895ed52bff01ab0f8b5788fdf55bdd736..1deab951958ac3a6750ac956a2289af6be3581e5 100644 (file)
@@ -325,4 +325,3 @@ function html2bbcode($message)
 
        return $message;
 }
-?>
index dc2cb137c49358e986f513860c5dda7d8f2b049e..ed338ce71002672c6fbf217941e98eba125efc96 100644 (file)
@@ -233,4 +233,3 @@ function html2plain($html, $wraplength = 75, $compact = false)
 
        return(trim($message));
 }
-?>
index 1fea5b25d659880ed1e07cb4c501f53c364b4d62..3ab25cdc45724e68e1cba99869f7ceeb23ec2954 100644 (file)
@@ -3,10 +3,12 @@
  * @file include/identity.php
  */
 
-require_once('include/ForumManager.php');
-require_once('include/bbcode.php');
-require_once("mod/proxy.php");
-require_once('include/cache.php');
+use Friendica\App;
+
+require_once 'include/ForumManager.php';
+require_once 'include/bbcode.php';
+require_once 'mod/proxy.php';
+require_once 'include/cache.php';
 
 /**
  *
@@ -83,9 +85,9 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array()) {
 
        $a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one
 
-       $theme_info_file = "view/theme/".current_theme()."/theme.php";
-       if (file_exists($theme_info_file)){
-               require_once($theme_info_file);
+       $theme_info_file = "view/theme/" . current_theme() . "/theme.php";
+       if (file_exists($theme_info_file)) {
+               require_once $theme_info_file;
        }
 
        if (! (x($a->page,'aside')))
@@ -370,7 +372,7 @@ function profile_sidebar($profile, $block = 0) {
        else
                $diaspora = false;
 
-       if (!$block){
+       if (!$block) {
                $contact_block = contact_block();
 
                if (is_array($a->profile) AND !$a->profile['hide-friends']) {
@@ -535,13 +537,13 @@ function get_birthdays() {
 
 function get_events() {
 
-       require_once('include/bbcode.php');
+       require_once 'include/bbcode.php';
 
        $a = get_app();
 
-       if (! local_user() || $a->is_mobile || $a->is_tablet)
+       if (! local_user() || $a->is_mobile || $a->is_tablet) {
                return $o;
-
+       }
 
 //             $mobile_detect = new Mobile_Detect();
 //             $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
@@ -564,12 +566,14 @@ function get_events() {
                $now = strtotime('now');
                $istoday = false;
                foreach ($r as $rr) {
-                       if (strlen($rr['name']))
+                       if (strlen($rr['name'])) {
                                $total ++;
+                       }
 
                        $strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start'],'Y-m-d');
-                       if ($strt === datetime_convert('UTC',$a->timezone,'now','Y-m-d'))
+                       if ($strt === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) {
                                $istoday = true;
+                       }
                }
                $classtoday = (($istoday) ? 'event-today' : '');
 
@@ -578,12 +582,14 @@ function get_events() {
                foreach ($r as &$rr) {
                        $title = strip_tags(html_entity_decode(bbcode($rr['summary']),ENT_QUOTES,'UTF-8'));
 
-                       if (strlen($title) > 35)
+                       if (strlen($title) > 35) {
                                $title = substr($title,0,32) . '... ';
+                       }
 
                        $description = substr(strip_tags(bbcode($rr['desc'])),0,32) . '... ';
-                       if (! $description)
+                       if (! $description) {
                                $description = t('[No description]');
+                       }
 
                        $strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']);
 
@@ -630,7 +636,9 @@ function advanced_profile(App $a) {
 
                $profile['fullname'] = array( t('Full Name:'), $a->profile['name'] ) ;
 
-               if ($a->profile['gender']) $profile['gender'] = array( t('Gender:'),  $a->profile['gender'] );
+               if ($a->profile['gender']) {
+                       $profile['gender'] = array( t('Gender:'),  $a->profile['gender'] );
+               }
 
                if (($a->profile['dob']) && ($a->profile['dob'] > '0001-01-01')) {
                        $year_bd_format = t('j F, Y');
@@ -645,10 +653,13 @@ function advanced_profile(App $a) {
 
                }
 
-               if ($age = age($a->profile['dob'],$a->profile['timezone'],''))  $profile['age'] = array( t('Age:'), $age );
-
+               if ($age = age($a->profile['dob'],$a->profile['timezone'],'')) {
+                       $profile['age'] = array( t('Age:'), $age );
+               }
 
-               if ($a->profile['marital']) $profile['marital'] = array( t('Status:'), $a->profile['marital']);
+               if ($a->profile['marital']) {
+                       $profile['marital'] = array( t('Status:'), $a->profile['marital']);
+               }
 
                /// @TODO Maybe use x() here, plus below?
                if ($a->profile['with']) {
@@ -751,7 +762,7 @@ function advanced_profile(App $a) {
        return '';
 }
 
-function profile_tabs($a, $is_owner=False, $nickname=Null){
+function profile_tabs($a, $is_owner=False, $nickname=Null) {
        //echo "<pre>"; var_dump($a->user); killme();
 
        if (is_null($nickname)) {
@@ -768,7 +779,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                array(
                        'label'=>t('Status'),
                        'url' => $url,
-                       'sel' => ((!isset($tab) && $a->argv[0]=='profile')?'active':''),
+                       'sel' => ((!isset($tab) && $a->argv[0]=='profile') ? 'active' : ''),
                        'title' => t('Status Messages and Posts'),
                        'id' => 'status-tab',
                        'accesskey' => 'm',
@@ -776,7 +787,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                array(
                        'label' => t('Profile'),
                        'url'   => $url.'/?tab=profile',
-                       'sel'   => ((isset($tab) && $tab=='profile')?'active':''),
+                       'sel'   => ((isset($tab) && $tab=='profile') ? 'active' : ''),
                        'title' => t('Profile Details'),
                        'id' => 'profile-tab',
                        'accesskey' => 'r',
@@ -784,7 +795,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                array(
                        'label' => t('Photos'),
                        'url'   => App::get_baseurl() . '/photos/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='photos')?'active':''),
+                       'sel'   => ((!isset($tab) && $a->argv[0]=='photos') ? 'active' : ''),
                        'title' => t('Photo Albums'),
                        'id' => 'photo-tab',
                        'accesskey' => 'h',
@@ -792,7 +803,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                array(
                        'label' => t('Videos'),
                        'url'   => App::get_baseurl() . '/videos/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='videos')?'active':''),
+                       'sel'   => ((!isset($tab) && $a->argv[0]=='videos') ? 'active' : ''),
                        'title' => t('Videos'),
                        'id' => 'video-tab',
                        'accesskey' => 'v',
@@ -804,7 +815,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                        $tabs[] = array(
                                'label' => t('Events'),
                                'url'   => App::get_baseurl() . '/events',
-                               'sel'   =>((!isset($tab) && $a->argv[0]=='events')?'active':''),
+                               'sel'   =>((!isset($tab) && $a->argv[0]=='events') ? 'active' : ''),
                                'title' => t('Events and Calendar'),
                                'id' => 'events-tab',
                                'accesskey' => 'e',
@@ -815,18 +826,18 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                $tabs[] = array(
                                'label' => t('Events'),
                                'url'   => App::get_baseurl() . '/cal/' . $nickname,
-                               'sel'   =>((!isset($tab) && $a->argv[0]=='cal')?'active':''),
+                               'sel'   =>((!isset($tab) && $a->argv[0]=='cal') ? 'active' : ''),
                                'title' => t('Events and Calendar'),
                                'id' => 'events-tab',
                                'accesskey' => 'e',
                        );
        }
 
-       if ($is_owner){
+       if ($is_owner) {
                $tabs[] = array(
                        'label' => t('Personal Notes'),
                        'url'   => App::get_baseurl() . '/notes',
-                       'sel'   =>((!isset($tab) && $a->argv[0]=='notes')?'active':''),
+                       'sel'   =>((!isset($tab) && $a->argv[0]=='notes') ? 'active' : ''),
                        'title' => t('Only You Can See This'),
                        'id' => 'notes-tab',
                        'accesskey' => 't',
@@ -837,7 +848,7 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
                $tabs[] = array(
                        'label' => t('Contacts'),
                        'url'   => App::get_baseurl() . '/viewcontacts/' . $nickname,
-                       'sel'   => ((!isset($tab) && $a->argv[0]=='viewcontacts')?'active':''),
+                       'sel'   => ((!isset($tab) && $a->argv[0]=='viewcontacts') ? 'active' : ''),
                        'title' => t('Contacts'),
                        'id' => 'viewcontacts-tab',
                        'accesskey' => 'k',
@@ -853,8 +864,9 @@ function profile_tabs($a, $is_owner=False, $nickname=Null){
 }
 
 function get_my_url() {
-       if (x($_SESSION,'my_url'))
+       if (x($_SESSION, 'my_url')) {
                return $_SESSION['my_url'];
+       }
        return false;
 }
 
@@ -866,33 +878,31 @@ function zrl_init(App $a) {
                // The check fetches the cached value from gprobe to reduce the load for this system
                $urlparts = parse_url($tmp_str);
 
-               $result = Cache::get("gprobe:".$urlparts["host"]);
-               if (!is_null($result)) {
-                       if (in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM))) {
-                               logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
-                               return;
-                       }
+               $result = Cache::get("gprobe:" . $urlparts["host"]);
+               if ((!is_null($result)) && (in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM)))) {
+                       logger("DDoS attempt detected for " . $urlparts["host"] . " by " . $_SERVER["REMOTE_ADDR"] . ". server data: " . print_r($_SERVER, true), LOGGER_DEBUG);
+                       return;
                }
 
-               proc_run(PRIORITY_LOW, 'include/gprobe.php',bin2hex($tmp_str));
+               proc_run(PRIORITY_LOW, 'include/gprobe.php', bin2hex($tmp_str));
                $arr = array('zrl' => $tmp_str, 'url' => $a->cmd);
-               call_hooks('zrl_init',$arr);
+               call_hooks('zrl_init', $arr);
        }
 }
 
-function zrl($s,$force = false) {
+function zrl($s, $force = false) {
        if (! strlen($s)) {
                return $s;
        }
-       if ((! strpos($s,'/profile/')) && (! $force)) {
+       if ((! strpos($s, '/profile/')) && (! $force)) {
                return $s;
        }
-       if ($force && substr($s,-1,1) !== '/') {
+       if ($force && substr($s, -1, 1) !== '/') {
                $s = $s . '/';
        }
-       $achar = strpos($s,'?') ? '&' : '?';
+       $achar = strpos($s, '?') ? '&' : '?';
        $mine = get_my_url();
-       if ($mine and ! link_compare($mine,$s)) {
+       if ($mine && ! link_compare($mine, $s)) {
                return $s . $achar . 'zrl=' . urlencode($mine);
        }
        return $s;
@@ -914,10 +924,8 @@ function zrl($s,$force = false) {
  */
 function get_theme_uid() {
        $uid = (($_REQUEST['puid']) ? intval($_REQUEST['puid']) : 0);
-       if (local_user()) {
-               if ((get_pconfig(local_user(),'system','always_my_theme')) || (! $uid)) {
-                       return local_user();
-               }
+       if ((local_user()) && ((get_pconfig(local_user(),'system','always_my_theme')) || (! $uid))) {
+               return local_user();
        }
 
        return $uid;
index 2500e08d54ad78c5407d3a9405b7bc6631ab324e..c36b842b4b149b638a62063ab1287b3d5a496145 100644 (file)
@@ -4,7 +4,8 @@
  * @file include/items.php
  */
 
-use \Friendica\ParseUrl;
+use Friendica\App;
+use Friendica\ParseUrl;
 
 require_once 'include/bbcode.php';
 require_once 'include/oembed.php';
@@ -339,7 +340,7 @@ function add_page_info_to_body($body, $texturl = false, $no_photos = false) {
  * Adds a "lang" specification in a "postopts" element of given $arr,
  * if possible and not already present.
  * Expects "body" element to exist in $arr.
- * 
+ *
  * @todo Add a parameter to request forcing override
  */
 function item_add_language_opt(&$arr) {
@@ -410,7 +411,70 @@ function uri_to_guid($uri, $host = "") {
        return $guid_prefix.$host_hash;
 }
 
-/// @TODO Maybe $arr must be called-by-reference? This function modifies it
+/**
+ * @brief Store the conversation data
+ *
+ * @param array $arr Item array with conversation data
+ * @return array Item array with removed conversation data
+ */
+function store_conversation($arr) {
+       if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
+               $conversation = array('item-uri' => $arr['uri'], 'received' => dbm::date());
+
+               if (isset($arr['parent-uri']) AND ($arr['parent-uri'] != $arr['uri'])) {
+                       $conversation['reply-to-uri'] = $arr['parent-uri'];
+               }
+               if (isset($arr['thr-parent']) AND ($arr['thr-parent'] != $arr['uri'])) {
+                       $conversation['reply-to-uri'] = $arr['thr-parent'];
+               }
+
+               if (isset($arr['conversation-uri'])) {
+                       $conversation['conversation-uri'] = $arr['conversation-uri'];
+               }
+
+               if (isset($arr['conversation-href'])) {
+                       $conversation['conversation-href'] = $arr['conversation-href'];
+               }
+
+               if (isset($arr['protocol'])) {
+                       $conversation['protocol'] = $arr['protocol'];
+               }
+
+               if (isset($arr['source'])) {
+                       $conversation['source'] = $arr['source'];
+               }
+
+               $old_conv = dba::fetch_first("SELECT `item-uri`, `reply-to-uri`, `conversation-uri`, `conversation-href`, `protocol`, `source`
+                               FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
+               if (dbm::is_result($old_conv)) {
+                       // Don't update when only the source has changed.
+                       // Only do this when there had been no source before.
+                       if ($old_conv['source'] != '') {
+                               unset($old_conv['source']);
+                       }
+                       // Update structure data all the time but the source only when its from a better protocol.
+                       if (($old_conv['protocol'] < $conversation['protocol']) AND ($old_conv['protocol'] != 0)) {
+                               unset($conversation['protocol']);
+                               unset($conversation['source']);
+                       }
+                       if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']), $old_conv)) {
+                               logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
+                       }
+               } else {
+                       if (!dba::insert('conversation', $conversation)) {
+                               logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
+                       }
+               }
+       }
+
+       unset($arr['conversation-uri']);
+       unset($arr['conversation-href']);
+       unset($arr['protocol']);
+       unset($arr['source']);
+
+       return $arr;
+}
+
 /// @TODO add type-hint array
 function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) {
 
@@ -423,6 +487,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                $arr['origin'] = 1;
                $arr['last-child'] = 1;
                $arr['network'] = NETWORK_DFRN;
+               $arr['protocol'] = PROTOCOL_DFRN;
 
                // We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri.
                // In difference to the call to "uri_to_guid" several lines below we add the hash of our own host.
@@ -436,6 +501,23 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                }
        }
 
+       if ($notify) {
+               $guid_prefix = "";
+       } elseif ((trim($arr['guid']) == "") AND (trim($arr['plink']) != "")) {
+               $arr['guid'] = uri_to_guid($arr['plink']);
+       } elseif ((trim($arr['guid']) == "") AND (trim($arr['uri']) != "")) {
+               $arr['guid'] = uri_to_guid($arr['uri']);
+       } else {
+               $parsed = parse_url($arr["author-link"]);
+               $guid_prefix = hash("crc32", $parsed["host"]);
+       }
+
+       $arr['guid']          = ((x($arr, 'guid'))          ? notags(trim($arr['guid']))          : get_guid(32, $guid_prefix));
+       $arr['uri']           = ((x($arr, 'uri'))           ? notags(trim($arr['uri']))           : item_new_uri($a->get_hostname(), $uid, $arr['guid']));
+
+       // Store conversation data
+       $arr = store_conversation($arr);
+
        /*
         * If a Diaspora signature structure was passed in, pull it out of the
         * item array and set it aside for later storage.
@@ -517,20 +599,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
 
        item_add_language_opt($arr);
 
-       if ($notify) {
-               $guid_prefix = "";
-       } elseif ((trim($arr['guid']) == "") AND (trim($arr['plink']) != "")) {
-               $arr['guid'] = uri_to_guid($arr['plink']);
-       } elseif ((trim($arr['guid']) == "") AND (trim($arr['uri']) != "")) {
-               $arr['guid'] = uri_to_guid($arr['uri']);
-       } else {
-               $parsed = parse_url($arr["author-link"]);
-               $guid_prefix = hash("crc32", $parsed["host"]);
-       }
-
        $arr['wall']          = ((x($arr, 'wall'))          ? intval($arr['wall'])                : 0);
-       $arr['guid']          = ((x($arr, 'guid'))          ? notags(trim($arr['guid']))          : get_guid(32, $guid_prefix));
-       $arr['uri']           = ((x($arr, 'uri'))           ? notags(trim($arr['uri']))           : item_new_uri($a->get_hostname(), $uid, $arr['guid']));
        $arr['extid']         = ((x($arr, 'extid'))         ? notags(trim($arr['extid']))         : '');
        $arr['author-name']   = ((x($arr, 'author-name'))   ? trim($arr['author-name'])   : '');
        $arr['author-link']   = ((x($arr, 'author-link'))   ? notags(trim($arr['author-link']))   : '');
@@ -690,6 +759,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
        item_body_set_hashtags($arr);
 
        $arr['thr-parent'] = $arr['parent-uri'];
+
        if ($arr['parent-uri'] === $arr['uri']) {
                $parent_id = 0;
                $parent_deleted = 0;
@@ -882,8 +952,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
 
        logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
 
-       q("COMMIT");
-       q("START TRANSACTION;");
+       dba::transaction();
 
        $r = dbq("INSERT INTO `item` (`"
                        . implode("`, `", array_keys($arr))
@@ -905,7 +974,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                }
        } else {
                // This can happen - for example - if there are locking timeouts.
-               q("ROLLBACK");
+               dba::rollback();
 
                // Store the data into a spool file so that we can try again later.
 
@@ -930,7 +999,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
        if ($current_post == 0) {
                // This is one of these error messages that never should occur.
                logger("couldn't find created item - we better quit now.");
-               q("ROLLBACK");
+               dba::rollback();
                return 0;
        }
 
@@ -945,7 +1014,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
        if (!dbm::is_result($r)) {
                // This shouldn't happen, since COUNT always works when the database connection is there.
                logger("We couldn't count the stored entries. Very strange ...");
-               q("ROLLBACK");
+               dba::rollback();
                return 0;
        }
 
@@ -954,13 +1023,13 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                logger('Duplicated post occurred. uri = ' . $arr['uri'] . ' uid = ' . $arr['uid']);
 
                // Yes, we could do a rollback here - but we are having many users with MyISAM.
-               q("DELETE FROM `item` WHERE `id` = %d", intval($current_post));
-               q("COMMIT");
+               dba::delete('item', array('id' => $current_post));
+               dba::commit();
                return 0;
        } elseif ($r[0]["entries"] == 0) {
                // This really should never happen since we quit earlier if there were problems.
                logger("Something is terribly wrong. We haven't found our created entry.");
-               q("ROLLBACK");
+               dba::rollback();
                return 0;
        }
 
@@ -1040,7 +1109,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
                update_thread($parent_id);
        }
 
-       q("COMMIT");
+       dba::commit();
 
        /*
         * Due to deadlock issues with the "term" table we are doing these steps after the commit.
@@ -1309,10 +1378,7 @@ function tag_deliver($uid, $item_id) {
                        // mmh.. no mention.. community page or private group... no wall.. no origin.. top-post (not a comment)
                        // delete it!
                        logger("tag_deliver: no-mention top-level post to communuty or private group. delete.");
-                       q("DELETE FROM item WHERE id = %d and uid = %d",
-                               intval($item_id),
-                               intval($uid)
-                       );
+                       dba::delete('item', array('id' => $item_id));
                        return true;
                }
                return;
@@ -2168,23 +2234,6 @@ function drop_item($id, $interactive = true) {
                        // ignore the result
                }
 
-
-               // clean up item_id and sign meta-data tables
-
-               /*
-               /// @TODO Old code - caused very long queries and warning entries in the mysql logfiles:
-
-               $r = q("DELETE FROM item_id where iid in (select id from item where parent = %d and uid = %d)",
-                       intval($item['id']),
-                       intval($item['uid'])
-               );
-
-               $r = q("DELETE FROM sign where iid in (select id from item where parent = %d and uid = %d)",
-                       intval($item['id']),
-                       intval($item['uid'])
-               );
-               */
-
                // The new code splits the queries since the mysql optimizer really has bad problems with subqueries
 
                // Creating list of parents
index a53b90c0398ce11f215ad1b9d660eb6fbf0c2c01..4f26002719dcb1fabd5f143dddfce320d7ee3d3b 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once("include/diaspora.php");
 
 /**
index a48b0ad342e1353b1b3b816e50bf0d5fc4c4cffb..64f6319ef1990aba4f30e2a67b75e829f84cd8a3 100644 (file)
@@ -2,9 +2,9 @@
 
 // Provide some ability to lock a PHP function so that multiple processes
 // can't run the function concurrently
-if(! function_exists('lock_function')) {
+if (! function_exists('lock_function')) {
 function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
-       if( $wait_sec == 0 )
+       if ( $wait_sec == 0 )
                $wait_sec = 2;  // don't let the user pick a value that's likely to crash the system
 
        $got_lock = false;
@@ -16,7 +16,7 @@ function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
                        dbesc($fn_name)
                );
 
-               if((dbm::is_result($r)) AND (!$r[0]['locked'] OR (strtotime($r[0]['created']) < time() - 3600))) {
+               if ((dbm::is_result($r)) AND (!$r[0]['locked'] OR (strtotime($r[0]['created']) < time() - 3600))) {
                        q("UPDATE `locks` SET `locked` = 1, `created` = '%s' WHERE `name` = '%s'",
                                dbesc(datetime_convert()),
                                dbesc($fn_name)
@@ -34,10 +34,10 @@ function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
 
                q("UNLOCK TABLES");
 
-               if(($block) && (! $got_lock))
+               if (($block) && (! $got_lock))
                        sleep($wait_sec);
 
-       } while(($block) && (! $got_lock) && ((time() - $start) < $timeout));
+       } while (($block) && (! $got_lock) && ((time() - $start) < $timeout));
 
        logger('lock_function: function ' . $fn_name . ' with blocking = ' . $block . ' got_lock = ' . $got_lock . ' time = ' . (time() - $start), LOGGER_DEBUG);
 
@@ -45,28 +45,29 @@ function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
 }}
 
 
-if(! function_exists('block_on_function_lock')) {
+if (! function_exists('block_on_function_lock')) {
 function block_on_function_lock($fn_name, $wait_sec = 2, $timeout = 30) {
-       if( $wait_sec == 0 )
+       if ( $wait_sec == 0 )
                $wait_sec = 2;  // don't let the user pick a value that's likely to crash the system
 
        $start = time();
 
        do {
                $r = q("SELECT locked FROM locks WHERE name = '%s' LIMIT 1",
-                               dbesc($fn_name)
-                    );
+                       dbesc($fn_name)
+               );
 
-               if (dbm::is_result($r) && $r[0]['locked'])
+               if (dbm::is_result($r) && $r[0]['locked']) {
                        sleep($wait_sec);
+               }
 
-       } while(dbm::is_result($r) && $r[0]['locked'] && ((time() - $start) < $timeout));
+       } while (dbm::is_result($r) && $r[0]['locked'] && ((time() - $start) < $timeout));
 
        return;
 }}
 
 
-if(! function_exists('unlock_function')) {
+if (! function_exists('unlock_function')) {
 function unlock_function($fn_name) {
        $r = q("UPDATE `locks` SET `locked` = 0, `created` = '%s' WHERE `name` = '%s'",
                        dbesc(NULL_DATE),
index 3d5d4d33ab97daaafe07576260ecc7a77c7dfcab..7a62af8c93bc34eb94ac9c37b986ad211e2514e5 100644 (file)
@@ -1,17 +1,16 @@
 <?php
 
-       // send a private message
-
-
+// send a private message
 
+use Friendica\App;
 
 function send_message($recipient=0, $body='', $subject='', $replyto=''){
 
        $a = get_app();
 
-       if(! $recipient) return -1;
+       if (! $recipient) return -1;
 
-       if(! strlen($subject))
+       if (! strlen($subject))
                $subject = t('[no subject]');
 
        $me = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
@@ -22,7 +21,7 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){
                        intval(local_user())
        );
 
-       if(! (count($me) && (count($contact)))) {
+       if (! (count($me) && (count($contact)))) {
                return -2;
        }
 
@@ -34,7 +33,7 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){
 
        // look for any existing conversation structure
 
-       if(strlen($replyto)) {
+       if (strlen($replyto)) {
                $reply = true;
                $r = q("select convid from mail where uid = %d and ( uri = '%s' or `parent-uri` = '%s' ) limit 1",
                        intval(local_user()),
@@ -45,7 +44,7 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){
                        $convid = $r[0]['convid'];
        }
 
-       if(! $convid) {
+       if (! $convid) {
 
                // create a new conversation
 
@@ -78,12 +77,12 @@ function send_message($recipient=0, $body='', $subject='', $replyto=''){
                        $convid = $r[0]['id'];
        }
 
-       if(! $convid) {
+       if (! $convid) {
                logger('send message: conversation not found.');
                return -4;
        }
 
-       if(! strlen($replyto)) {
+       if (! strlen($replyto)) {
                $replyto = $convuri;
        }
 
@@ -175,7 +174,7 @@ function send_wallmessage($recipient='', $body='', $subject='', $replyto=''){
        $convid = 0;
        $reply = false;
 
-       require_once('include/Scrape.php');
+       require_once 'include/probe.php';
 
        $me = probe_url($replyto);
 
index 3b5ed5487de87d1837cba6c4c7db3259b572244f..9e8ebed790ef23ef274a41528a93078c6cdb6165 100644 (file)
@@ -154,7 +154,7 @@ function removelinebreak($message)
        $lines = array();
        $lineno = 0;
 
-       foreach($arrbody as $i => $line) {
+       foreach ($arrbody as $i => $line) {
                $currquotelevel = 0;
                $currline = $line;
                while ((strlen($currline)>0) and ((substr($currline, 0, 1) == '>')
@@ -187,7 +187,7 @@ function removelinebreak($message)
                                (substr(trim($nextline), 0, 7) == 'http://') or
                                (substr(trim($nextline), 0, 8) == 'https://'));
 
-               if (!$specialchars) 
+               if (!$specialchars)
                        $specialchars = ((substr(rtrim($line), -1) == '-') or
                                        (substr(rtrim($line), -1) == '=') or
                                        (substr(rtrim($line), -1) == '*') or
@@ -222,4 +222,3 @@ function removelinebreak($message)
        return(implode("\n", $lines));
 
 }
-?>
index fe4c50818ea583c3e02768b8b4ead0866fdb9422..3c7c932e28f6b5214214d2be10177dcb06125a9f 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function nav(App $a) {
 
        /*
@@ -8,7 +10,7 @@ function nav(App $a) {
         *
         */
 
-       if(!(x($a->page,'nav')))
+       if (!(x($a->page,'nav')))
                $a->page['nav'] = '';
 
        $a->page['htmlhead'] .= replace_macros(get_markup_template('nav_head.tpl'), array());
@@ -86,9 +88,9 @@ function nav_info(App $a)
                $nav['usermenu'][] = array('notes/', t('Personal notes'), '', t('Your personal notes'));
 
                // user info
-               $r = q("SELECT `micro` FROM `contact` WHERE `uid` = %d AND `self` = 1", intval($a->user['uid']));
+               $r = dba::select('contact', array('micro'), array('uid' => $a->user['uid'], 'self' => true), array('limit' => 1));
                $userinfo = array(
-                       'icon' => (dbm::is_result($r) ? $a->remove_baseurl($r[0]['micro']) : 'images/person-48.jpg'),
+                       'icon' => (dbm::is_result($r) ? $a->remove_baseurl($r['micro']) : 'images/person-48.jpg'),
                        'name' => $a->user['username'],
                );
        } else {
@@ -136,7 +138,7 @@ function nav_info(App $a)
 
        if (strlen(get_config('system', 'singleuser'))) {
                $gdir = get_config('system', 'directory');
-               if(strlen($gdir)) {
+               if (strlen($gdir)) {
                        $gdirpath = zrl($gdir, true);
                }
        } elseif (get_config('system', 'community_page_style') == CP_USERS_ON_SERVER) {
index f9d35c52c34557d387f09eb490b23aa3358119b2..7d8cf36118a0363444edbebeca1eeb1647554ba6 100644 (file)
@@ -4,10 +4,11 @@
  * @file include/network.php
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Network\Probe;
 
 require_once("include/xml.php");
-require_once('include/Probe.php');
 
 /**
  * @brief Curl wrapper
@@ -62,23 +63,27 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
  *    string 'header' => HTTP headers
  *    string 'body' => fetched content
  */
-function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
-
-       $ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => "");
-
+function z_fetch_url($url, $binary = false, &$redirects = 0, $opts = array()) {
+       $ret = array('return_code' => 0, 'success' => false, 'header' => '', 'body' => '');
 
        $stamp1 = microtime(true);
 
        $a = get_app();
 
+       if (blocked_url($url)) {
+               logger('z_fetch_url: domain of ' . $url . ' is blocked', LOGGER_DATA);
+               return $ret;
+       }
+
        $ch = @curl_init($url);
-       if(($redirects > 8) || (! $ch)) {
+
+       if (($redirects > 8) || (!$ch)) {
                return $ret;
        }
 
        @curl_setopt($ch, CURLOPT_HEADER, true);
 
-       if(x($opts,"cookiejar")) {
+       if (x($opts, "cookiejar")) {
                curl_setopt($ch, CURLOPT_COOKIEJAR, $opts["cookiejar"]);
                curl_setopt($ch, CURLOPT_COOKIEFILE, $opts["cookiejar"]);
        }
@@ -87,52 +92,61 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
 //     @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 //     @curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
 
-       if (x($opts,'accept_content')){
-               curl_setopt($ch,CURLOPT_HTTPHEADER, array (
-                       "Accept: " . $opts['accept_content']
+       if (x($opts, 'accept_content')) {
+               curl_setopt($ch, CURLOPT_HTTPHEADER, array(
+                       'Accept: ' . $opts['accept_content']
                ));
        }
 
-       @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
+       @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        @curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
 
        $range = intval(Config::get('system', 'curl_range_bytes', 0));
+
        if ($range > 0) {
-               @curl_setopt($ch, CURLOPT_RANGE, '0-'.$range);
+               @curl_setopt($ch, CURLOPT_RANGE, '0-' . $range);
        }
 
-       if(x($opts,'headers')){
+       if (x($opts, 'headers')) {
                @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
        }
-       if(x($opts,'nobody')){
+
+       if (x($opts, 'nobody')) {
                @curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
        }
-       if(x($opts,'timeout')){
+
+       if (x($opts, 'timeout')) {
                @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
        } else {
-               $curl_time = intval(get_config('system','curl_timeout'));
+               $curl_time = intval(get_config('system', 'curl_timeout'));
                @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
        }
 
        // by default we will allow self-signed certs
        // but you can override this
 
-       $check_cert = get_config('system','verifyssl');
+       $check_cert = get_config('system', 'verifyssl');
        @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+
        if ($check_cert) {
                @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        }
 
-       $prx = get_config('system','proxy');
-       if(strlen($prx)) {
+       $proxy = get_config('system', 'proxy');
+
+       if (strlen($proxy)) {
                @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
-               @curl_setopt($ch, CURLOPT_PROXY, $prx);
-               $prxusr = @get_config('system','proxyuser');
-               if(strlen($prxusr))
-                       @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
+               @curl_setopt($ch, CURLOPT_PROXY, $proxy);
+               $proxyuser = @get_config('system', 'proxyuser');
+
+               if (strlen($proxyuser)) {
+                       @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
+               }
+       }
+
+       if ($binary) {
+               @curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        }
-       if($binary)
-               @curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
 
        $a->set_curl_code(0);
 
@@ -140,8 +154,9 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
        // if it throws any errors.
 
        $s = @curl_exec($ch);
+
        if (curl_errno($ch) !== CURLE_OK) {
-               logger('fetch_url error fetching '.$url.': '.curl_error($ch), LOGGER_NORMAL);
+               logger('fetch_url error fetching ' . $url . ': ' . curl_error($ch), LOGGER_NORMAL);
        }
 
        $ret['errno'] = curl_errno($ch);
@@ -150,136 +165,150 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
        $curl_info = @curl_getinfo($ch);
 
        $http_code = $curl_info['http_code'];
-       logger('fetch_url '.$url.': '.$http_code." ".$s, LOGGER_DATA);
+       logger('fetch_url ' . $url . ': ' . $http_code . " " . $s, LOGGER_DATA);
        $header = '';
 
        // Pull out multiple headers, e.g. proxy and continuation headers
        // allow for HTTP/2.x without fixing code
 
-       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
-               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+       while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/', $base)) {
+               $chunk = substr($base, 0, strpos($base,"\r\n\r\n") + 4);
                $header .= $chunk;
-               $base = substr($base,strlen($chunk));
+               $base = substr($base, strlen($chunk));
        }
 
        $a->set_curl_code($http_code);
        $a->set_curl_content_type($curl_info['content_type']);
        $a->set_curl_headers($header);
 
-       if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
-               $new_location_info = @parse_url($curl_info["redirect_url"]);
-               $old_location_info = @parse_url($curl_info["url"]);
+       if ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
+               $new_location_info = @parse_url($curl_info['redirect_url']);
+               $old_location_info = @parse_url($curl_info['url']);
 
-               $newurl = $curl_info["redirect_url"];
+               $newurl = $curl_info['redirect_url'];
 
-               if (($new_location_info["path"] == "") AND ($new_location_info["host"] != ""))
-                       $newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"];
+               if (($new_location_info['path'] == '') AND ( $new_location_info['host'] != '')) {
+                       $newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path'];
+               }
 
                $matches = array();
+
                if (preg_match('/(Location:|URI:)(.*?)\n/i', $header, $matches)) {
                        $newurl = trim(array_pop($matches));
                }
-               if(strpos($newurl,'/') === 0)
+               if (strpos($newurl,'/') === 0) {
                        $newurl = $old_location_info["scheme"]."://".$old_location_info["host"].$newurl;
+               }
+
                if (filter_var($newurl, FILTER_VALIDATE_URL)) {
                        $redirects++;
                        @curl_close($ch);
-                       return z_fetch_url($newurl,$binary, $redirects, $opts);
+                       return z_fetch_url($newurl, $binary, $redirects, $opts);
                }
        }
 
-
        $a->set_curl_code($http_code);
        $a->set_curl_content_type($curl_info['content_type']);
 
-       $body = substr($s,strlen($header));
-
-
+       $body = substr($s, strlen($header));
 
        $rc = intval($http_code);
        $ret['return_code'] = $rc;
        $ret['success'] = (($rc >= 200 && $rc <= 299) ? true : false);
        $ret['redirect_url'] = $url;
-       if(! $ret['success']) {
+
+       if (!$ret['success']) {
                $ret['error'] = curl_error($ch);
                $ret['debug'] = $curl_info;
                logger('z_fetch_url: error: ' . $url . ': ' . $ret['error'], LOGGER_DEBUG);
-               logger('z_fetch_url: debug: ' . print_r($curl_info,true), LOGGER_DATA);
+               logger('z_fetch_url: debug: ' . print_r($curl_info, true), LOGGER_DATA);
        }
-       $ret['body'] = substr($s,strlen($header));
+
+       $ret['body'] = substr($s, strlen($header));
        $ret['header'] = $header;
-       if(x($opts,'debug')) {
+
+       if (x($opts, 'debug')) {
                $ret['debug'] = $curl_info;
        }
+
        @curl_close($ch);
 
-       $a->save_timestamp($stamp1, "network");
+       $a->save_timestamp($stamp1, 'network');
 
        return($ret);
-
 }
 
-// post request to $url. $params is an array of post variables.
-
 /**
- * @brief Post request to $url
+ * @brief Send POST request to $url
  *
  * @param string $url URL to post
- * @param mixed $params
+ * @param mixed $params array of POST variables
  * @param string $headers HTTP headers
  * @param integer $redirects Recursion counter for internal use - default = 0
  * @param integer $timeout The timeout in seconds, default system config value or 60 seconds
  *
  * @return string The content
  */
-function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0) {
+function post_url($url, $params, $headers = null, &$redirects = 0, $timeout = 0) {
        $stamp1 = microtime(true);
 
+       if (blocked_url($url)) {
+               logger('post_url: domain of ' . $url . ' is blocked', LOGGER_DATA);
+               return false;
+       }
+
        $a = get_app();
        $ch = curl_init($url);
-       if(($redirects > 8) || (! $ch))
+
+       if (($redirects > 8) || (!$ch)) {
                return false;
+       }
 
-       logger("post_url: start ".$url, LOGGER_DATA);
+       logger('post_url: start ' . $url, LOGGER_DATA);
 
        curl_setopt($ch, CURLOPT_HEADER, true);
-       curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
-       curl_setopt($ch, CURLOPT_POST,1);
-       curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
+       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+       curl_setopt($ch, CURLOPT_POST, 1);
+       curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
 
-       if(intval($timeout)) {
+       if (intval($timeout)) {
                curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
-       }
-       else {
-               $curl_time = intval(get_config('system','curl_timeout'));
+       } else {
+               $curl_time = intval(get_config('system', 'curl_timeout'));
                curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
        }
 
-       if(defined('LIGHTTPD')) {
-               if(!is_array($headers)) {
+       if (defined('LIGHTTPD')) {
+               if (!is_array($headers)) {
                        $headers = array('Expect:');
                } else {
-                       if(!in_array('Expect:', $headers)) {
+                       if (!in_array('Expect:', $headers)) {
                                array_push($headers, 'Expect:');
                        }
                }
        }
-       if($headers)
+
+       if ($headers) {
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+       }
 
-       $check_cert = get_config('system','verifyssl');
+       $check_cert = get_config('system', 'verifyssl');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+
        if ($check_cert) {
                @curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        }
-       $prx = get_config('system','proxy');
-       if(strlen($prx)) {
+
+       $proxy = get_config('system', 'proxy');
+
+       if (strlen($proxy)) {
                curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
-               curl_setopt($ch, CURLOPT_PROXY, $prx);
-               $prxusr = get_config('system','proxyuser');
-               if(strlen($prxusr))
-                       curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
+               curl_setopt($ch, CURLOPT_PROXY, $proxy);
+               $proxyuser = get_config('system', 'proxyuser');
+               if (strlen($proxyuser)) {
+                       curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyuser);
+               }
        }
 
        $a->set_curl_code(0);
@@ -293,44 +322,48 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0)
        $curl_info = curl_getinfo($ch);
        $http_code = $curl_info['http_code'];
 
-       logger("post_url: result ".$http_code." - ".$url, LOGGER_DATA);
+       logger('post_url: result ' . $http_code . ' - ' . $url, LOGGER_DATA);
 
        $header = '';
 
        // Pull out multiple headers, e.g. proxy and continuation headers
        // allow for HTTP/2.x without fixing code
 
-       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
-               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+       while (preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/', $base)) {
+               $chunk = substr($base, 0, strpos($base, "\r\n\r\n") + 4);
                $header .= $chunk;
-               $base = substr($base,strlen($chunk));
+               $base = substr($base, strlen($chunk));
        }
 
-       if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
+       if ($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
                $matches = array();
                preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
                $newurl = trim(array_pop($matches));
-               if(strpos($newurl,'/') === 0)
+
+               if (strpos($newurl, '/') === 0) {
                        $newurl = $old_location_info["scheme"] . "://" . $old_location_info["host"] . $newurl;
+               }
+
                if (filter_var($newurl, FILTER_VALIDATE_URL)) {
                        $redirects++;
-                       logger("post_url: redirect ".$url." to ".$newurl);
-                       return post_url($newurl,$params, $headers, $redirects, $timeout);
-                       //return fetch_url($newurl,false,$redirects,$timeout);
+                       logger('post_url: redirect ' . $url . ' to ' . $newurl);
+                       return post_url($newurl, $params, $headers, $redirects, $timeout);
                }
        }
+
        $a->set_curl_code($http_code);
-       $body = substr($s,strlen($header));
+
+       $body = substr($s, strlen($header));
 
        $a->set_curl_headers($header);
 
        curl_close($ch);
 
-       $a->save_timestamp($stamp1, "network");
+       $a->save_timestamp($stamp1, 'network');
 
-       logger("post_url: end ".$url, LOGGER_DATA);
+       logger('post_url: end ' . $url, LOGGER_DATA);
 
-       return($body);
+       return $body;
 }
 
 // Generic XML return
@@ -341,7 +374,7 @@ function xml_status($st, $message = '') {
 
        $xml_message = ((strlen($message)) ? "\t<message>" . xmlify($message) . "</message>\r\n" : '');
 
-       if($st)
+       if ($st)
                logger('xml_status returning non_zero: ' . $st . " message=" . $message);
 
        header( "Content-type: text/xml" );
@@ -369,12 +402,12 @@ function xml_status($st, $message = '') {
  */
 function http_status_exit($val, $description = array()) {
        $err = '';
-       if($val >= 400) {
+       if ($val >= 400) {
                $err = 'Error';
                if (!isset($description["title"]))
                        $description["title"] = $err." ".$val;
        }
-       if($val >= 200 && $val < 300)
+       if ($val >= 200 && $val < 300)
                $err = 'OK';
 
        logger('http_status_exit ' . $val);
@@ -400,20 +433,20 @@ function http_status_exit($val, $description = array()) {
  * @return boolean True if it's a valid URL, fals if something wrong with it
  */
 function validate_url(&$url) {
-       if(get_config('system','disable_url_validation'))
+       if (get_config('system','disable_url_validation'))
                return true;
 
        // no naked subdomains (allow localhost for tests)
-       if(strpos($url,'.') === false && strpos($url,'/localhost/') === false)
+       if (strpos($url,'.') === false && strpos($url,'/localhost/') === false)
                return false;
 
-       if(substr($url,0,4) != 'http')
+       if (substr($url,0,4) != 'http')
                $url = 'http://' . $url;
 
        /// @TODO Really supress function outcomes? Why not find them + debug them?
        $h = @parse_url($url);
 
-       if((is_array($h)) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) {
+       if ((is_array($h)) && (dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) {
                return true;
        }
 
@@ -428,14 +461,14 @@ function validate_url(&$url) {
  */
 function validate_email($addr) {
 
-       if(get_config('system','disable_email_validation'))
+       if (get_config('system','disable_email_validation'))
                return true;
 
-       if(! strpos($addr,'@'))
+       if (! strpos($addr,'@'))
                return false;
        $h = substr($addr,strpos($addr,'@') + 1);
 
-       if(($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) {
+       if (($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) {
                return true;
        }
        return false;
@@ -454,30 +487,31 @@ function allowed_url($url) {
 
        $h = @parse_url($url);
 
-       if(! $h) {
+       if (! $h) {
                return false;
        }
 
-       $str_allowed = get_config('system','allowed_sites');
-       if(! $str_allowed)
+       $str_allowed = Config::get('system', 'allowed_sites');
+       if (! $str_allowed) {
                return true;
+       }
 
        $found = false;
 
        $host = strtolower($h['host']);
 
        // always allow our own site
-
-       if($host == strtolower($_SERVER['SERVER_NAME']))
+       if ($host == strtolower($_SERVER['SERVER_NAME'])) {
                return true;
+       }
 
        $fnmatch = function_exists('fnmatch');
-       $allowed = explode(',',$str_allowed);
+       $allowed = explode(',', $str_allowed);
 
-       if(count($allowed)) {
-               foreach($allowed as $a) {
+       if (count($allowed)) {
+               foreach ($allowed as $a) {
                        $pat = strtolower(trim($a));
-                       if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) {
+                       if (($fnmatch && fnmatch($pat, $host)) || ($pat == $host)) {
                                $found = true;
                                break;
                        }
@@ -486,6 +520,36 @@ function allowed_url($url) {
        return $found;
 }
 
+/**
+ * Checks if the provided url domain is on the domain blocklist.
+ * Returns true if it is or malformed URL, false if not.
+ *
+ * @param string $url The url to check the domain from
+ * @return boolean
+ */
+function blocked_url($url) {
+       $h = @parse_url($url);
+
+       if (! $h) {
+               return true;
+       }
+
+       $domain_blocklist = Config::get('system', 'blocklist', array());
+       if (! $domain_blocklist) {
+               return false;
+       }
+
+       $host = strtolower($h['host']);
+
+       foreach ($domain_blocklist as $domain_block) {
+               if (strtolower($domain_block['domain']) == $host) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
 /**
  * @brief Check if email address is allowed to register here.
  *
@@ -497,24 +561,25 @@ function allowed_url($url) {
  */
 function allowed_email($email) {
 
-
        $domain = strtolower(substr($email,strpos($email,'@') + 1));
-       if(! $domain)
+       if (! $domain) {
                return false;
+       }
 
        $str_allowed = get_config('system','allowed_email');
-       if(! $str_allowed)
+       if (! $str_allowed) {
                return true;
+       }
 
        $found = false;
 
        $fnmatch = function_exists('fnmatch');
        $allowed = explode(',',$str_allowed);
 
-       if(count($allowed)) {
-               foreach($allowed as $a) {
+       if (count($allowed)) {
+               foreach ($allowed as $a) {
                        $pat = strtolower(trim($a));
-                       if(($fnmatch && fnmatch($pat,$domain)) || ($pat == $domain)) {
+                       if (($fnmatch && fnmatch($pat,$domain)) || ($pat == $domain)) {
                                $found = true;
                                break;
                        }
@@ -543,8 +608,8 @@ function avatar_img($email) {
 
 function parse_xml_string($s,$strict = true) {
        /// @todo Move this function to the xml class
-       if($strict) {
-               if(! strstr($s,'<?xml'))
+       if ($strict) {
+               if (! strstr($s,'<?xml'))
                        return false;
                $s2 = substr($s,strpos($s,'<?xml'));
        }
@@ -658,22 +723,7 @@ function fix_contact_ssl_policy(&$contact,$new_policy) {
        }
 
        if ($ssl_changed) {
-               q("UPDATE `contact` SET
-                       `url` = '%s',
-                       `request` = '%s',
-                       `notify` = '%s',
-                       `poll` = '%s',
-                       `confirm` = '%s',
-                       `poco` = '%s'
-                       WHERE `id` = %d LIMIT 1",
-                       dbesc($contact['url']),
-                       dbesc($contact['request']),
-                       dbesc($contact['notify']),
-                       dbesc($contact['poll']),
-                       dbesc($contact['confirm']),
-                       dbesc($contact['poco']),
-                       intval($contact['id'])
-               );
+               dba::update('contact', $contact, array('id' => $contact['id']));
        }
 }
 
index 370611b4eb438aaf69509aee01622e80d15436a9..4f9b34d014df60ec649462625a755922ab47a839 100644 (file)
@@ -1,13 +1,14 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
-require_once('include/queue_fn.php');
-require_once('include/html2plain.php');
-require_once('include/Scrape.php');
-require_once('include/diaspora.php');
-require_once('include/ostatus.php');
-require_once('include/salmon.php');
+require_once 'include/queue_fn.php';
+require_once 'include/html2plain.php';
+require_once 'include/probe.php';
+require_once 'include/diaspora.php';
+require_once 'include/ostatus.php';
+require_once 'include/salmon.php';
 
 /*
  * This file was at one time responsible for doing all deliveries, but this caused
@@ -45,10 +46,10 @@ require_once('include/salmon.php');
 function notifier_run(&$argv, &$argc){
        global $a;
 
-       require_once('include/datetime.php');
-       require_once('include/items.php');
-       require_once('include/bbcode.php');
-       require_once('include/email.php');
+       require_once 'include/datetime.php';
+       require_once 'include/items.php';
+       require_once 'include/bbcode.php';
+       require_once 'include/email.php';
 
        if ($argc < 3) {
                return;
@@ -138,7 +139,7 @@ function notifier_run(&$argv, &$argc){
                if (!$r) {
                        return;
                }
-               require_once('include/Contact.php');
+               require_once 'include/Contact.php';
                foreach ($r as $contact) {
                        terminate_friendship($user, $self, $contact);
                }
@@ -222,7 +223,7 @@ function notifier_run(&$argv, &$argc){
 
                $slap = ostatus::salmon($target_item,$owner);
 
-               require_once('include/group.php');
+               require_once 'include/group.php';
 
                $parent = $items[0];
 
index 3d4533d3e0061da5a4a8e1af01d9c2d0629ee82a..9e2be68c776cc61e57f8dbc531fcdd404438c449 100644 (file)
@@ -5,6 +5,8 @@
  *
  */
 
+use Friendica\App;
+
 define('REQUEST_TOKEN_DURATION', 300);
 define('ACCESS_TOKEN_DURATION', 31536000);
 
@@ -61,13 +63,13 @@ class FKOAuthDataStore extends OAuthDataStore {
                logger(__function__.":".$consumer.", ". $callback);
                $key = $this->gen_token();
                $sec = $this->gen_token();
-               
+
                if ($consumer->key){
                        $k = $consumer->key;
                } else {
                        $k = $consumer;
                }
-               
+
                $r = q("INSERT INTO tokens (id, secret, client_id, scope, expires) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d)",
                                dbesc($key),
                                dbesc($sec),
@@ -80,19 +82,19 @@ class FKOAuthDataStore extends OAuthDataStore {
 
   function new_access_token($token, $consumer, $verifier = null) {
     logger(__function__.":".$token.", ". $consumer.", ". $verifier);
-    
+
     // return a new access token attached to this consumer
     // for the user associated with this token if the request token
     // is authorized
     // should also invalidate the request token
-    
+
     $ret=Null;
-    
+
     // get user for this verifier
     $uverifier = get_config("oauth", $verifier);
     logger(__function__.":".$verifier.",".$uverifier);
     if (is_null($verifier) || ($uverifier!==false)){
-               
+
                $key = $this->gen_token();
                $sec = $this->gen_token();
                $r = q("INSERT INTO tokens (id, secret, client_id, scope, expires, uid) VALUES ('%s','%s','%s','%s', UNIX_TIMESTAMP()+%d, %d)",
@@ -103,13 +105,13 @@ class FKOAuthDataStore extends OAuthDataStore {
                                intval(ACCESS_TOKEN_DURATION),
                                intval($uverifier));
                if ($r)
-                       $ret = new OAuthToken($key,$sec);               
+                       $ret = new OAuthToken($key,$sec);
        }
-               
-               
+
+
        q("DELETE FROM tokens WHERE id='%s'", $token->key);
-       
-       
+
+
        if (!is_null($ret) && $uverifier!==false){
                del_config("oauth", $verifier);
        /*      $apps = get_pconfig($uverifier, "oauth", "apps");
@@ -117,9 +119,9 @@ class FKOAuthDataStore extends OAuthDataStore {
                $apps[] = $consumer->key;
                set_pconfig($uverifier, "oauth", "apps", $apps);*/
        }
-               
+
     return $ret;
-    
+
   }
 }
 
@@ -155,7 +157,7 @@ class FKOAuth1 extends OAuthServer {
                //notice( t("Welcome back ") . $record['username'] . EOL);
                $a->user = $record;
 
-               if(strlen($a->user['timezone'])) {
+               if (strlen($a->user['timezone'])) {
                        date_default_timezone_set($a->user['timezone']);
                        $a->timezone = $a->user['timezone'];
                }
@@ -172,9 +174,9 @@ class FKOAuth1 extends OAuthServer {
                        intval($_SESSION['uid'])
                );
 
-               call_hooks('logged_in', $a->user);              
+               call_hooks('logged_in', $a->user);
        }
-       
+
 }
 /*
 class FKOAuth2 extends OAuth2 {
@@ -190,13 +192,13 @@ class FKOAuth2 extends OAuth2 {
                        dbesc($client_secret),
                        dbesc($redirect_uri)
                );
-                 
+
                return $r;
        }
 
        protected function checkClientCredentials($client_id, $client_secret = NULL) {
                $client_secret = $this->db_secret($client_secret);
-               
+
                $r = q("SELECT pw FROM clients WHERE client_id = '%s'",
                        dbesc($client_id));
 
@@ -218,21 +220,21 @@ class FKOAuth2 extends OAuth2 {
        protected function getAccessToken($oauth_token) {
                $r = q("SELECT client_id, expires, scope FROM tokens WHERE id = '%s'",
                                dbesc($oauth_token));
-       
+
                if (dbm::is_result($r))
                        return $r[0];
                return null;
        }
 
 
-       
+
        protected function setAccessToken($oauth_token, $client_id, $expires, $scope = NULL) {
                $r = q("INSERT INTO tokens (id, client_id, expires, scope) VALUES ('%s', '%s', %d, '%s')",
                                dbesc($oauth_token),
                                dbesc($client_id),
                                intval($expires),
                                dbesc($scope));
-                               
+
                return $r;
        }
 
@@ -246,23 +248,23 @@ class FKOAuth2 extends OAuth2 {
        protected function getAuthCode($code) {
                $r = q("SELECT id, client_id, redirect_uri, expires, scope FROM auth_codes WHERE id = '%s'",
                                dbesc($code));
-               
+
                if (dbm::is_result($r))
                        return $r[0];
                return null;
        }
 
        protected function setAuthCode($code, $client_id, $redirect_uri, $expires, $scope = NULL) {
-               $r = q("INSERT INTO auth_codes 
-                                       (id, client_id, redirect_uri, expires, scope) VALUES 
+               $r = q("INSERT INTO auth_codes
+                                       (id, client_id, redirect_uri, expires, scope) VALUES
                                        ('%s', '%s', '%s', %d, '%s')",
                                dbesc($code),
                                dbesc($client_id),
                                dbesc($redirect_uri),
                                intval($expires),
                                dbesc($scope));
-               return $r;        
-       }       
-       
+               return $r;
+       }
+
 }
 */
index 0b8b713667e7aa1faede525a5a08db1b07b03c0b..d28a97e322046690eee01300199ceca9891090c4 100755 (executable)
@@ -4,8 +4,9 @@
  * @file include/oembed.php
  */
 
-use \Friendica\ParseUrl;
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\ParseUrl;
+use Friendica\Core\Config;
 
 function oembed_replacecb($matches){
        $embedurl=$matches[1];
@@ -303,9 +304,11 @@ function oembed_html2bbcode($text) {
                $entries = $xpath->query("//span[$xattr]");
 
                $xattr = "@rel='oembed'";//oe_build_xpath("rel","oembed");
-               foreach($entries as $e) {
+               foreach ($entries as $e) {
                        $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;
-                       if(!is_null($href)) $e->parentNode->replaceChild(new DOMText("[embed]".$href."[/embed]"), $e);
+                       if (!is_null($href)) {
+                               $e->parentNode->replaceChild(new DOMText("[embed]".$href."[/embed]"), $e);
+                       }
                }
                return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) );
        } else {
index 5227b61a1ab118a3066247d631b7b8677776c584..cf5a1f576a9b45238d2a1986d7fb98dab06a9c46 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 require_once('include/follow.php');
 
@@ -170,7 +170,7 @@ function onepoll_run(&$argv, &$argc){
                // But this may be our first communication, so set the writable flag if it isn't set already.
 
                if (! intval($contact['writable'])) {
-                       q("update contact set writable = 1 where id = %d", intval($contact['id']));
+                       q("UPDATE `contact` SET `writable` = 1 WHERE `id` = %d", intval($contact['id']));
                }
 
                $url = $contact['poll'] . '?dfrn_id=' . $idtosend
@@ -437,16 +437,18 @@ function onepoll_run(&$argv, &$argc){
                                                if ($raw_refs) {
                                                        $refs_arr = explode(' ', $raw_refs);
                                                        if (count($refs_arr)) {
-                                                               for($x = 0; $x < count($refs_arr); $x ++)
+                                                               for ($x = 0; $x < count($refs_arr); $x ++) {
                                                                        $refs_arr[$x] = "'" . msgid2iri(str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x]))) . "'";
+                                                               }
                                                        }
                                                        $qstr = implode(',',$refs_arr);
                                                        $r = q("SELECT `uri` , `parent-uri` FROM `item` USE INDEX (`uid_uri`) WHERE `uri` IN ($qstr) AND `uid` = %d LIMIT 1",
                                                                intval($importer_uid)
                                                        );
-                                                       if (dbm::is_result($r))
+                                                       if (dbm::is_result($r)) {
                                                                $datarray['parent-uri'] = $r[0]['parent-uri'];  // Set the parent as the top-level item
-       //                                                      $datarray['parent-uri'] = $r[0]['uri'];
+                                                               //$datarray['parent-uri'] = $r[0]['uri'];
+                                                       }
                                                }
 
                                                // Decoding the header
@@ -611,14 +613,17 @@ function onepoll_run(&$argv, &$argc){
                consume_feed($xml,$importer,$contact,$hub,1,2);
 
                $hubmode = 'subscribe';
-               if ($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly'])
+               if ($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly']) {
                        $hubmode = 'unsubscribe';
+               }
 
-               if (($contact['network'] === NETWORK_OSTATUS ||  $contact['network'] == NETWORK_FEED) && (! $contact['hub-verify']))
+               if (($contact['network'] === NETWORK_OSTATUS ||  $contact['network'] == NETWORK_FEED) && (! $contact['hub-verify'])) {
                        $hub_update = true;
+               }
 
-               if ($force)
+               if ($force) {
                        $hub_update = true;
+               }
 
                logger("Contact ".$contact['id']." returned hub: ".$hub." Network: ".$contact['network']." Relation: ".$contact['rel']." Update: ".$hub_update);
 
index c1d730eb130c4980c263a302ddc231a020636679..a1da94f6a77fa915cafc613e147fb93e18fa1d54 100644 (file)
@@ -3,20 +3,24 @@
  * @file include/ostatus.php
  */
 
-require_once("include/Contact.php");
-require_once("include/threads.php");
-require_once("include/html2bbcode.php");
-require_once("include/bbcode.php");
-require_once("include/items.php");
-require_once("mod/share.php");
-require_once("include/enotify.php");
-require_once("include/socgraph.php");
-require_once("include/Photo.php");
-require_once("include/Scrape.php");
-require_once("include/follow.php");
-require_once("include/api.php");
-require_once("mod/proxy.php");
-require_once("include/xml.php");
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Network\Probe;
+
+require_once 'include/Contact.php';
+require_once 'include/threads.php';
+require_once 'include/html2bbcode.php';
+require_once 'include/bbcode.php';
+require_once 'include/items.php';
+require_once 'mod/share.php';
+require_once 'include/enotify.php';
+require_once 'include/socgraph.php';
+require_once 'include/Photo.php';
+require_once 'include/probe.php';
+require_once 'include/follow.php';
+require_once 'include/api.php';
+require_once 'mod/proxy.php';
+require_once 'include/xml.php';
 
 /**
  * @brief This class contain functions for the OStatus protocol
@@ -27,42 +31,6 @@ class ostatus {
        const OSTATUS_DEFAULT_POLL_TIMEFRAME = 1440; // given in minutes
        const OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS = 14400; // given in minutes
 
-       /**
-        * @brief Mix two paths together to possibly fix missing parts
-        *
-        * @param string $avatar Path to the avatar
-        * @param string $base Another path that is hopefully complete
-        *
-        * @return string fixed avatar path
-        */
-       public static function fix_avatar($avatar, $base) {
-               $base_parts = parse_url($base);
-
-               // Remove all parts that could create a problem
-               unset($base_parts['path']);
-               unset($base_parts['query']);
-               unset($base_parts['fragment']);
-
-               $avatar_parts = parse_url($avatar);
-
-               // Now we mix them
-               $parts = array_merge($base_parts, $avatar_parts);
-
-               // And put them together again
-               $scheme   = isset($parts['scheme']) ? $parts['scheme'] . '://' : '';
-               $host     = isset($parts['host']) ? $parts['host'] : '';
-               $port     = isset($parts['port']) ? ':' . $parts['port'] : '';
-               $path     = isset($parts['path']) ? $parts['path'] : '';
-               $query    = isset($parts['query']) ? '?' . $parts['query'] : '';
-               $fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : '';
-
-               $fixed = $scheme.$host.$port.$path.$query.$fragment;
-
-               logger('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA);
-
-               return $fixed;
-       }
-
        /**
         * @brief Fetches author data
         *
@@ -79,46 +47,72 @@ class ostatus {
                $author = array();
                $author["author-link"] = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue;
                $author["author-name"] = $xpath->evaluate('atom:author/atom:name/text()', $context)->item(0)->nodeValue;
+               $addr = $xpath->evaluate('atom:author/atom:email/text()', $context)->item(0)->nodeValue;
 
                $aliaslink = $author["author-link"];
 
                $alternate = $xpath->query("atom:author/atom:link[@rel='alternate']", $context)->item(0)->attributes;
-               if (is_object($alternate))
-                       foreach($alternate AS $attributes)
-                               if ($attributes->name == "href")
+               if (is_object($alternate)) {
+                       foreach ($alternate AS $attributes) {
+                               if (($attributes->name == "href") AND ($attributes->textContent != "")) {
                                        $author["author-link"] = $attributes->textContent;
+                               }
+                       }
+               }
 
-               $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));
-               if ($r) {
-                       $contact = $r[0];
-                       $author["contact-id"] = $r[0]["id"];
-               } else
-                       $author["contact-id"] = $contact["id"];
+               $author["contact-id"] = $contact["id"];
+
+               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));
+
+                       if (dbm::is_result($r)) {
+                               $contact = $r[0];
+                               $author["contact-id"] = $r[0]["id"];
+                               $author["author-link"] = $r[0]["url"];
+                       }
+               } elseif ($addr != "") {
+                       // Should not happen
+                       $contact = dba::fetch_first("SELECT * FROM `contact` WHERE `uid` = ? AND `addr` = ? AND `network` != ?",
+                                       $importer["uid"], $addr, NETWORK_STATUSNET);
+
+                       if (dbm::is_result($contact)) {
+                               $author["contact-id"] = $contact["id"];
+                               $author["author-link"] = $contact["url"];
+                       }
+               }
 
                $avatarlist = array();
                $avatars = $xpath->query("atom:author/atom:link[@rel='avatar']", $context);
-               foreach($avatars AS $avatar) {
+               foreach ($avatars AS $avatar) {
                        $href = "";
                        $width = 0;
-                       foreach($avatar->attributes AS $attributes) {
-                               if ($attributes->name == "href")
+                       foreach ($avatar->attributes AS $attributes) {
+                               if ($attributes->name == "href") {
                                        $href = $attributes->textContent;
-                               if ($attributes->name == "width")
+                               }
+                               if ($attributes->name == "width") {
                                        $width = $attributes->textContent;
+                               }
                        }
-                       if (($width > 0) AND ($href != ""))
+                       if (($width > 0) AND ($href != "")) {
                                $avatarlist[$width] = $href;
+                       }
                }
                if (count($avatarlist) > 0) {
                        krsort($avatarlist);
-                       $author["author-avatar"] = self::fix_avatar(current($avatarlist), $author["author-link"]);
+                       $author["author-avatar"] = Probe::fixAvatar(current($avatarlist), $author["author-link"]);
                }
 
                $displayname = $xpath->evaluate('atom:author/poco:displayName/text()', $context)->item(0)->nodeValue;
-               if ($displayname != "")
+               if ($displayname != "") {
                        $author["author-name"] = $displayname;
+               }
 
                $author["owner-name"] = $author["author-name"];
                $author["owner-link"] = $author["author-link"];
@@ -312,8 +306,10 @@ class ostatus {
 
                if ($first_child == "feed") {
                        $entries = $xpath->query('/atom:feed/atom:entry');
+                       $header["protocol"] = PROTOCOL_OSTATUS_FEED;
                } else {
                        $entries = $xpath->query('/atom:entry');
+                       $header["protocol"] = PROTOCOL_OSTATUS_SALMON;
                }
                $conversation = "";
                $conversationlist = array();
@@ -370,7 +366,7 @@ class ostatus {
                        } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) {
                                $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue;
                        }
-                       $item["object"] = $xml;
+                       $item["source"] = $xml;
 
                        /// @TODO
                        /// Delete a message
@@ -418,6 +414,19 @@ class ostatus {
                        $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
                        $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue;
                        $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+                       $item['conversation-uri'] = $conversation;
+
+                       $conv = $xpath->query('ostatus:conversation', $entry);
+                       if (is_object($conv->item(0))) {
+                               foreach ($conv->item(0)->attributes AS $attributes) {
+                                       if ($attributes->name == "ref") {
+                                               $item['conversation-uri'] = $attributes->textContent;
+                                       }
+                                       if ($attributes->name == "href") {
+                                               $item['conversation-href'] = $attributes->textContent;
+                                       }
+                               }
+                       }
 
                        $related = "";
 
@@ -443,7 +452,7 @@ class ostatus {
                                        foreach ($category->attributes AS $attributes) {
                                                if ($attributes->name == "term") {
                                                        $term = $attributes->textContent;
-                                                       if(strlen($item["tag"])) {
+                                                       if (strlen($item["tag"])) {
                                                                $item["tag"] .= ',';
                                                        }
                                                        $item["tag"] .= "#[url=".App::get_baseurl()."/search?tag=".$term."]".$term."[/url]";
@@ -471,6 +480,10 @@ class ostatus {
                                                                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'];
@@ -897,6 +910,8 @@ class ostatus {
                        ($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) {
                        $item_stored = item_store($item, $all_threads);
                        return $item_stored;
+               } elseif (count($item) > 0) {
+                       $item = store_conversation($item);
                }
 
                // Get the parent
@@ -1137,6 +1152,7 @@ class ostatus {
                                continue;
                        }
 
+                       /// @TODO One statment is okay (until if () )
                        $arr = array();
                        $arr["network"] = $details["network"];
                        $arr["uri"] = $single_conv->id;
@@ -1153,13 +1169,17 @@ class ostatus {
                                $arr["owner-name"] = $single_conv->actor->portablecontacts_net->displayName;
 
                        $arr["owner-link"] = $actor;
-                       $arr["owner-avatar"] = self::fix_avatar($single_conv->actor->image->url, $arr["owner-link"]);
+                       $arr["owner-avatar"] = Probe::fixAvatar($single_conv->actor->image->url, $arr["owner-link"]);
 
                        $arr["author-name"] = $arr["owner-name"];
                        $arr["author-link"] = $arr["owner-link"];
                        $arr["author-avatar"] = $arr["owner-avatar"];
                        $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->content));
 
+                       if (isset($single_conv->status_net->conversation)) {
+                               $arr['conversation-uri'] = $single_conv->status_net->conversation;
+                       }
+
                        if (isset($single_conv->status_net->notice_info->source))
                                $arr["app"] = strip_tags($single_conv->status_net->notice_info->source);
                        elseif (isset($single_conv->statusnet->notice_info->source))
@@ -1172,7 +1192,9 @@ class ostatus {
                                $arr["app"] = "OStatus";
 
 
-                       $arr["object"] = json_encode($single_conv);
+                       $arr["source"] = json_encode($single_conv);
+                       $arr["protocol"] = PROTOCOL_GS_CONVERSATION;
+
                        $arr["verb"] = $parent["verb"];
                        $arr["visible"] = $parent["visible"];
                        $arr["location"] = $single_conv->location->displayName;
@@ -1212,7 +1234,7 @@ class ostatus {
                                        $arr["author-name"] = $single_conv->object->actor->contact->displayName;
                                }
                                $arr["author-link"] = $single_conv->object->actor->url;
-                               $arr["author-avatar"] = self::fix_avatar($single_conv->object->actor->image->url, $arr["author-link"]);
+                               $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]);
 
                                $arr["app"] = $single_conv->object->provider->displayName."#";
                                //$arr["verb"] = $single_conv->object->verb;
@@ -1404,6 +1426,7 @@ class ostatus {
                $root->setAttribute("xmlns:poco", NAMESPACE_POCO);
                $root->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS);
                $root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
+               $root->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON);
 
                $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION);
                xml::add_element($doc, $root, "generator", FRIENDICA_PLATFORM, $attributes);
@@ -1542,14 +1565,16 @@ class ostatus {
         */
        private function add_author($doc, $owner) {
 
-               $r = q("SELECT `homepage` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"]));
+               $r = q("SELECT `homepage`, `publish` FROM `profile` WHERE `uid` = %d AND `is-default` LIMIT 1", intval($owner["uid"]));
                if ($r)
                        $profile = $r[0];
 
                $author = $doc->createElement("author");
+               xml::add_element($doc, $author, "id", $owner["url"]);
                xml::add_element($doc, $author, "activity:object-type", ACTIVITY_OBJ_PERSON);
                xml::add_element($doc, $author, "uri", $owner["url"]);
-               xml::add_element($doc, $author, "name", $owner["name"]);
+               xml::add_element($doc, $author, "name", $owner["nick"]);
+               xml::add_element($doc, $author, "email", $owner["addr"]);
                xml::add_element($doc, $author, "summary", bbcode($owner["about"], false, false, 7));
 
                $attributes = array("rel" => "alternate", "type" => "text/html", "href" => $owner["url"]);
@@ -1596,6 +1621,9 @@ class ostatus {
                        xml::add_element($doc, $author, "statusnet:profile_info", "", array("local_id" => $owner["uid"]));
                }
 
+               if ($profile["publish"]) {
+                       xml::add_element($doc, $author, "mastodon:scope", "public");
+               }
                return $author;
        }
 
@@ -1769,7 +1797,7 @@ class ostatus {
                self::entry_content($doc, $as_object, $repeated_item, $owner, "", "", false);
 
                $author = self::add_author($doc, $contact);
-                $as_object->appendChild($author);
+               $as_object->appendChild($author);
 
                $as_object2 = $doc->createElement("activity:object");
 
@@ -1991,6 +2019,7 @@ class ostatus {
                        $entry->setAttribute("xmlns:poco", NAMESPACE_POCO);
                        $entry->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS);
                        $entry->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
+                       $entry->setAttribute("xmlns:mastodon", NAMESPACE_MASTODON);
 
                        $author = self::add_author($doc, $owner);
                        $entry->appendChild($author);
@@ -2057,39 +2086,54 @@ class ostatus {
                        $parent = q("SELECT `guid`, `author-link`, `owner-link` FROM `item` WHERE `id` = %d", intval($item["parent"]));
                        $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
 
+                       $thrparent = q("SELECT `guid`, `author-link`, `owner-link`, `plink` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
+                                       intval($owner["uid"]),
+                                       dbesc($parent_item));
+                       if ($thrparent) {
+                               $mentioned[$thrparent[0]["author-link"]] = $thrparent[0]["author-link"];
+                               $mentioned[$thrparent[0]["owner-link"]] = $thrparent[0]["owner-link"];
+                               $parent_plink = $thrparent[0]["plink"];
+                       } else {
+                               $mentioned[$parent[0]["author-link"]] = $parent[0]["author-link"];
+                               $mentioned[$parent[0]["owner-link"]] = $parent[0]["owner-link"];
+                               $parent_plink = App::get_baseurl()."/display/".$parent[0]["guid"];
+                       }
+
                        $attributes = array(
                                        "ref" => $parent_item,
-                                       "type" => "text/html",
-                                       "href" => App::get_baseurl()."/display/".$parent[0]["guid"]);
+                                       "href" => $parent_plink);
                        xml::add_element($doc, $entry, "thr:in-reply-to", "", $attributes);
 
                        $attributes = array(
                                        "rel" => "related",
-                                       "href" => App::get_baseurl()."/display/".$parent[0]["guid"]);
+                                       "href" => $parent_plink);
                        xml::add_element($doc, $entry, "link", "", $attributes);
+               }
 
-                       $mentioned[$parent[0]["author-link"]] = $parent[0]["author-link"];
-                       $mentioned[$parent[0]["owner-link"]] = $parent[0]["owner-link"];
+               if (intval($item["parent"]) > 0) {
+                       $conversation_href = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"];
+                       $conversation_uri = $conversation_href;
 
-                       $thrparent = q("SELECT `guid`, `author-link`, `owner-link` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
-                                       intval($owner["uid"]),
-                                       dbesc($parent_item));
-                       if ($thrparent) {
-                               $mentioned[$thrparent[0]["author-link"]] = $thrparent[0]["author-link"];
-                               $mentioned[$thrparent[0]["owner-link"]] = $thrparent[0]["owner-link"];
+                       if (isset($parent_item)) {
+                               $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $parent_item);
+                               if (dbm::is_result($r)) {
+                                       if ($r['conversation-uri'] != '') {
+                                               $conversation_uri = $r['conversation-uri'];
+                                       }
+                                       if ($r['conversation-href'] != '') {
+                                               $conversation_href = $r['conversation-href'];
+                                       }
+                               }
                        }
-               }
 
-               if (intval($item["parent"]) > 0) {
-                       $conversation = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"];
-                       xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation));
+                       xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation_href));
 
                        $attributes = array(
-                                       "href" => $conversation,
+                                       "href" => $conversation_href,
                                        "local_id" => $item["parent"],
-                                       "ref" => $conversation);
+                                       "ref" => $conversation_uri);
 
-                       xml::add_element($doc, $entry, "ostatus:conversation", $conversation, $attributes);
+                       xml::add_element($doc, $entry, "ostatus:conversation", $conversation_uri, $attributes);
                }
 
                $tags = item_getfeedtags($item);
@@ -2127,6 +2171,7 @@ class ostatus {
                        xml::add_element($doc, $entry, "link", "", array("rel" => "mentioned",
                                                                        "ostatus:object-type" => "http://activitystrea.ms/schema/1.0/collection",
                                                                        "href" => "http://activityschema.org/collection/public"));
+                       xml::add_element($doc, $entry, "mastodon:scope", "public");
                }
 
                if(count($tags))
@@ -2156,7 +2201,7 @@ class ostatus {
        /**
         * @brief Creates the XML feed for a given nickname
         *
-        * @param app $a The application class
+        * @param App $a The application class
         * @param string $owner_nick Nickname of the feed owner
         * @param string $last_update Date of the last update
         *
@@ -2173,7 +2218,7 @@ class ostatus {
 
                $owner = $r[0];
 
-               if(!strlen($last_update))
+               if (!strlen($last_update))
                        $last_update = 'now -30 days';
 
                $check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s');
@@ -2218,6 +2263,9 @@ class ostatus {
                $root = self::add_header($doc, $owner);
 
                foreach ($items AS $item) {
+                       if (Config::get('system', 'ostatus_debug')) {
+                               $item['body'] .= '🍼';
+                       }
                        $entry = self::entry($doc, $item, $owner);
                        $root->appendChild($entry);
                }
@@ -2238,6 +2286,10 @@ class ostatus {
                $doc = new DOMDocument('1.0', 'utf-8');
                $doc->formatOutput = true;
 
+               if (Config::get('system', 'ostatus_debug')) {
+                       $item['body'] .= '🐟';
+               }
+
                $entry = self::entry($doc, $item, $owner, true);
 
                $doc->appendChild($entry);
@@ -2245,4 +2297,3 @@ class ostatus {
                return(trim($doc->saveXML()));
        }
 }
-?>
index b42dcec119c76ca02af9e738627df22e2db60fb4..9b541e8e3c77f6fe1cc3bd776a0490145af3ffe7 100644 (file)
@@ -10,7 +10,7 @@
  *
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 require_once("include/dba.php");
 
index e872532a481ae78dd882f5532c6fb36a8fb77c6f..38cda3f2bab189399d1c437f33fa10fa27be788e 100644 (file)
@@ -4,8 +4,8 @@
  * @brief Functions related to photo handling.
  */
 
-use \Friendica\Core\Config;
-use \Friendica\Core\PConfig;
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
 
 function getGps($exifCoord, $hemi) {
        $degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
index 3093e149aeb869acc2c35ca0a49e9087642e7cb6..dda6b3e9c130827c3469e5ef650bd15177bdb7bf 100644 (file)
@@ -38,4 +38,3 @@ class pidfile {
                        return(posix_kill(file_get_contents($this->_file), SIGTERM));
        }
 }
-?>
index 6ab4ec77d6c9120adcd6213e65b40d2b02d13246..215d9f3db726a2e722a2da8f67400462c61fd08c 100644 (file)
@@ -4,7 +4,8 @@
  * @file include/plaintext.php
  */
 
-use \Friendica\ParseUrl;
+use Friendica\App;
+use Friendica\ParseUrl;
 
 require_once("include/Photo.php");
 require_once("include/bbcode.php");
@@ -431,4 +432,3 @@ function plaintext(App $a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2
 
        return($post);
 }
-?>
index 83f6f1ab9502a1f5b34e8c0039169b0d007d959a..336b213aa3491324db2582196159a628822dbdb3 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 /**
  * @file include/plugin.php
- * 
+ *
  * @brief Some functions to handle addons and themes.
  */
 
+use Friendica\App;
 
 /**
  * @brief uninstalls an addon.
@@ -164,7 +165,7 @@ function register_hook($hook,$file,$function,$priority=0) {
 
 /**
  * @brief unregisters a hook.
- * 
+ *
  * @param string $hook the name of the hook
  * @param string $file the name of the file that hooks into
  * @param string $function the name of the function that the hook called
@@ -325,7 +326,7 @@ function get_plugin_info($plugin){
 
 /**
  * @brief Parse theme comment in search of theme infos.
- * 
+ *
  * like
  * \code
  * ..* Name: My Theme
@@ -545,11 +546,11 @@ function upgrade_bool_message($bbcode = false) {
 
 /**
  * @brief Get the full path to relevant theme files by filename
- * 
+ *
  * This function search in the theme directory (and if not present in global theme directory)
  * if there is a directory with the file extension and  for a file with the given
- * filename. 
- * 
+ * filename.
+ *
  * @param string $file Filename
  * @param string $root Full root path
  * @return string Path to the file or empty string if the file isn't found
index 5560b3340e6209fc4ab82c97ecd3619bc9840afc..ae249ffe46ddc41f8be766534fdfbaa7b4e1c696 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+
+use Friendica\App;
+use Friendica\Core\Config;
+
 if (!file_exists("boot.php") AND (sizeof($_SERVER["argv"]) != 0)) {
        $directory = dirname($_SERVER["argv"][0]);
 
@@ -10,15 +14,13 @@ if (!file_exists("boot.php") AND (sizeof($_SERVER["argv"]) != 0)) {
        chdir($directory);
 }
 
-use \Friendica\Core\Config;
-
 require_once("boot.php");
 
 function poller_run($argv, $argc){
        global $a, $db;
 
-       if(is_null($a)) {
-               $a = new App;
+       if (is_null($a)) {
+               $a = new App(dirname(__DIR__));
        }
 
        if(is_null($db)) {
@@ -41,6 +43,10 @@ function poller_run($argv, $argc){
 
        $a->start_process();
 
+       if ($a->min_memory_reached()) {
+               return;
+       }
+
        if (poller_max_connections_reached()) {
                return;
        }
@@ -67,6 +73,11 @@ function poller_run($argv, $argc){
 
        while ($r = poller_worker_process()) {
 
+               // Check free memory
+               if ($a->min_memory_reached()) {
+                       return;
+               }
+
                // Count active workers and compare them with a maximum value that depends on the load
                if (poller_too_much_workers()) {
                        return;
@@ -80,7 +91,6 @@ function poller_run($argv, $argc){
                if (time() > ($starttime + 3600))
                        return;
        }
-
 }
 
 /**
@@ -111,14 +121,10 @@ function poller_execute($queue) {
                return false;
        }
 
-       $upd = q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = %d WHERE `id` = %d AND `pid` = 0",
-               dbesc(datetime_convert()),
-               intval($mypid),
-               intval($queue["id"]));
-
-       if (!$upd) {
+       if (!dba::update('workerqueue', array('executed' => datetime_convert(), 'pid' => $mypid),
+                       array('id' => $queue["id"], 'pid' => 0))) {
                logger("Couldn't update queue entry ".$queue["id"]." - skip this execution", LOGGER_DEBUG);
-               q("COMMIT");
+               dba::commit();
                return true;
        }
 
@@ -126,18 +132,18 @@ function poller_execute($queue) {
        $id = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
        if (!$id) {
                logger("Queue item ".$queue["id"]." vanished - skip this execution", LOGGER_DEBUG);
-               q("COMMIT");
+               dba::commit();
                return true;
        } elseif ((strtotime($id[0]["executed"]) <= 0) OR ($id[0]["pid"] == 0)) {
                logger("Entry for queue item ".$queue["id"]." wasn't stored - skip this execution", LOGGER_DEBUG);
-               q("COMMIT");
+               dba::commit();
                return true;
        } elseif ($id[0]["pid"] != $mypid) {
                logger("Queue item ".$queue["id"]." is to be executed by process ".$id[0]["pid"]." and not by me (".$mypid.") - skip this execution", LOGGER_DEBUG);
-               q("COMMIT");
+               dba::commit();
                return true;
        }
-       q("COMMIT");
+       dba::commit();
 
        $argv = json_decode($queue["parameter"]);
 
@@ -146,7 +152,7 @@ function poller_execute($queue) {
 
        if (!validate_include($include)) {
                logger("Include file ".$argv[0]." is not valid!");
-               q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
+               dba::delete('workerqueue', array('id' => $queue["id"]));
                return true;
        }
 
@@ -158,7 +164,7 @@ function poller_execute($queue) {
 
                poller_exec_function($queue, $funcname, $argv);
 
-               q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
+               dba::delete('workerqueue', array('id' => $queue["id"]));
        } else {
                logger("Function ".$funcname." does not exist");
        }
@@ -366,8 +372,8 @@ function poller_kill_stale_workers() {
 
        foreach ($r AS $pid) {
                if (!posix_kill($pid["pid"], 0)) {
-                       q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = 0 WHERE `pid` = %d",
-                               dbesc(NULL_DATE), intval($pid["pid"]));
+                       dba::update('workerqueue', array('executed' => NULL_DATE, 'pid' => 0),
+                                       array('pid' => $pid["pid"]));
                } else {
                        // Kill long running processes
 
@@ -391,12 +397,9 @@ function poller_kill_stale_workers() {
                                // We killed the stale process.
                                // To avoid a blocking situation we reschedule the process at the beginning of the queue.
                                // Additionally we are lowering the priority.
-                               q("UPDATE `workerqueue` SET `executed` = '%s', `created` = '%s',
-                                                       `priority` = %d, `pid` = 0 WHERE `pid` = %d",
-                                       dbesc(NULL_DATE),
-                                       dbesc(datetime_convert()),
-                                       intval(PRIORITY_NEGLIGIBLE),
-                                       intval($pid["pid"]));
+                               dba::update('workerqueue',
+                                               array('executed' => NULL_DATE, 'created' => datetime_convert(), 'priority' => PRIORITY_NEGLIGIBLE, 'pid' => 0),
+                                               array('pid' => $pid["pid"]));
                        } else {
                                logger("Worker process ".$pid["pid"]." (".implode(" ", $argv).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG);
                        }
@@ -548,7 +551,7 @@ function poller_passing_slow(&$highest_priority) {
  */
 function poller_worker_process() {
 
-       q("START TRANSACTION;");
+       dba::transaction();
 
        // Check if we should pass some low priority process
        $highest_priority = 0;
@@ -678,4 +681,3 @@ if (array_search(__file__,get_included_files())===0){
 
        killme();
 }
-?>
index f9649961d9ca0d087d6b9a8eeea1dde591ac7305..9d18b27b4f3c16a8d42ea52372e1eecf33eb2c40 100644 (file)
@@ -258,5 +258,3 @@ function post_update_1206() {
        logger("Done", LOGGER_DEBUG);
        return true;
 }
-
-?>
diff --git a/include/probe.php b/include/probe.php
new file mode 100644 (file)
index 0000000..8cf703b
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+use Friendica\Network\Probe;
+
+/**
+ *
+ * PROBE_DIASPORA has a bias towards returning Diaspora information
+ * while PROBE_NORMAL has a bias towards dfrn/zot - in the case where
+ * an address (such as a Friendica address) supports more than one type
+ * of network.
+ *
+ */
+define('PROBE_NORMAL',   0);
+define('PROBE_DIASPORA', 1);
+
+/**
+ * @brief Probes a network address to discover what kind of protocols we need to communicate with it.
+ *
+ * Warning: this function is a bit touchy and there are some subtle dependencies within the logic flow.
+ * Edit with care.
+ *
+ * @deprecated Use Friendica\Network\Probe instead
+ *
+ * @see Friendica\Network\Probe::uri()
+ *
+ * @param string $url Any URI
+ * @param int $mode One of the PROBE_* constants
+ * @return array Same data array returned by Friendica\Network\Probe::uri()
+ */
+function probe_url($url, $mode = PROBE_NORMAL) {
+
+       if ($mode == PROBE_DIASPORA) {
+               $network = NETWORK_DIASPORA;
+       } else {
+               $network = '';
+       }
+
+       $data = Probe::uri($url, $network);
+
+       return $data;
+}
index 3641bbcf74fc3d16f98ed67b13a687119e31739a..24d7b6963792eebde36b51b18288cb0d561d1288 100644 (file)
@@ -1,5 +1,7 @@
 <?php
-use \Friendica\Core\Config;
+
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once('include/items.php');
 require_once('include/ostatus.php');
@@ -33,6 +35,9 @@ function handle_pubsubhubbub($id) {
        else
                $rr = $r[0];
 
+       /// @todo Check server status with poco_check_server()
+       // Before this can be done we need a way to safely detect the server url.
+
        logger("Generate feed of user ".$rr['nickname']." to ".$rr['callback_url']." - last updated ".$rr['last_update'], LOGGER_DEBUG);
 
        $params = ostatus::feed($a, $rr['nickname'], $rr['last_update']);
index c0c73cda61b7f7b75370ac655521cae0f018729d..b21bf676bae999e7f80e9a120f4f8de206853555 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 require_once('include/queue_fn.php');
 require_once('include/dfrn.php');
index 2a6d28370a3910cbb4a34fc470526fb48a20eb16..4473fa99befbdd659af74d789df48109d7518d3a 100644 (file)
@@ -129,4 +129,3 @@ function removetofu($message)
 
        return($message);
 }
-?>
index 76e30a6eaca2325950db232bfd119fda8f765d38..36f982b12cd6f76b5293ee6cb4344e6656f5188b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function auto_redir(App $a, $contact_nick) {
 
        // prevent looping
index 68bf2adfeaa103c22f3849dd30dc3e997a4741d0..92f712255771bb05537801b2451b3533448ca89b 100644 (file)
@@ -4,7 +4,7 @@
  * @brief Removes orphaned data from deleted contacts
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function remove_contact_run($argv, $argc) {
        if ($argc != 2) {
@@ -14,19 +14,11 @@ function remove_contact_run($argv, $argc) {
        $id = intval($argv[1]);
 
        // Only delete if the contact doesn't exist (anymore)
-       $r = q("SELECT `id` FROM `contact` WHERE `id` = %d", intval($id));
+       $r = dba::select('contact', array('id'), array('id' => $id), array('limit' => 1));
        if (dbm::is_result($r)) {
                return;
        }
 
-       q("DELETE FROM `item` WHERE `contact-id` = %d", intval($id));
-
-       q("DELETE FROM `photo` WHERE `contact-id` = %d", intval($id));
-
-       q("DELETE FROM `mail` WHERE `contact-id` = %d", intval($id));
-
-       q("DELETE FROM `event` WHERE `cid` = %d", intval($id));
-
-       q("DELETE FROM `queue` WHERE `cid` = %d", intval($id));
+       // Now we delete all the depending table entries
+       dba::delete('contact', array('id' => $id));
 }
-?>
index 79fd4c10d9ee884e4f9bdd14f835bf7984d49822..6e08d0aaf2bac22516ef3dd38864665b144cb7f8 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
-require_once('include/crypto.php');
-require_once('include/Probe.php');
+use Friendica\Network\Probe;
+
+require_once 'include/crypto.php';
 
 function get_salmon_key($uri, $keyhash) {
        $ret = array();
index 05371f71ca55d1a44559480ffc2c350197cc3add..09ac03c35e9cbfe2cfd64c96b04bda169b90ccf8 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 /**
  * @brief Calculate the hash that is needed for the "Friendica" cookie
  *
index 5b0a1b94b0af3f9b530a36db860163d576f71667..756f220ec823d67a4265738b2b624fb6baec6d34 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("boot.php");
 require_once("include/threads.php");
@@ -9,7 +10,7 @@ function shadowupdate_run(&$argv, &$argc){
        global $a, $db;
 
        if (is_null($a)) {
-               $a = new App;
+               $a = new App(dirname(__DIR__));
        }
 
        if (is_null($db)) {
index a39eca5e86fe9ec39628a60b04cccb255ccec7b4..fbac08cc9736b080bb394ac2b643055a49c072e3 100644 (file)
@@ -1,20 +1,22 @@
 <?php
 /**
  * @file include/socgraph.php
- * 
+ *
  * @todo Move GNU Social URL schemata (http://server.tld/user/number) to http://server.tld/username
  * @todo Fetch profile data from profile page for Redmatrix users
  * @todo Detect if it is a forum
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Network\Probe;
 
-require_once('include/datetime.php');
-require_once("include/Scrape.php");
-require_once("include/network.php");
-require_once("include/html2bbcode.php");
-require_once("include/Contact.php");
-require_once("include/Photo.php");
+require_once 'include/datetime.php';
+require_once 'include/probe.php';
+require_once 'include/network.php';
+require_once 'include/html2bbcode.php';
+require_once 'include/Contact.php';
+require_once 'include/Photo.php';
 
 /**
  * @brief Fetch POCO data
@@ -888,9 +890,9 @@ function poco_fetch_nodeinfo($server_url) {
 function poco_detect_server_type($body) {
        $server = false;
 
-       $doc = new \DOMDocument();
+       $doc = new DOMDocument();
        @$doc->loadHTML($body);
-       $xpath = new \DomXPath($doc);
+       $xpath = new DomXPath($doc);
 
        $list = $xpath->query("//meta[@name]");
 
@@ -1008,6 +1010,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
        if (dbm::is_result($servers) AND ($orig_server_url == $server_url) AND
                ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT)) {
                logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
+               dba::p("UPDATE `gserver` SET `last_failure` = ? WHERE `nurl` = ?", datetime_convert(), normalise_link($server_url));
                return false;
        }
 
@@ -1022,6 +1025,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
                // Quit if there is a timeout
                if ($serverret['errno'] == CURLE_OPERATION_TIMEDOUT) {
                        logger("Connection to server ".$server_url." timed out.", LOGGER_DEBUG);
+                       dba::p("UPDATE `gserver` SET `last_failure` = ? WHERE `nurl` = ?", datetime_convert(), normalise_link($server_url));
                        return false;
                }
 
@@ -1031,12 +1035,10 @@ function poco_check_server($server_url, $network = "", $force = false) {
        if (!$serverret["success"] OR ($serverret["body"] == "") OR (sizeof($xmlobj) == 0) OR !is_object($xmlobj)) {
                // Workaround for bad configured servers (known nginx problem)
                if (!in_array($serverret["debug"]["http_code"], array("403", "404"))) {
-                       $last_failure = datetime_convert();
                        $failure = true;
                }
                $possible_failure = true;
-       } elseif ($network == NETWORK_DIASPORA)
-               $last_contact = datetime_convert();
+       }
 
        // If the server has no possible failure we reset the cached data
        if (!$possible_failure) {
@@ -1054,8 +1056,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        $data = json_decode($serverret["body"]);
                        if (isset($data->totalResults)) {
                                $poco = $server_url."/poco";
-                               $last_contact = datetime_convert();
-
                                $server = poco_detect_poco_data($data);
                                if ($server) {
                                        $platform = $server['platform'];
@@ -1072,7 +1072,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                $serverret = z_fetch_url($server_url);
 
                if (!$serverret["success"] OR ($serverret["body"] == "")) {
-                       $last_failure = datetime_convert();
                        $failure = true;
                } else {
                        $server = poco_detect_server_type($serverret["body"]);
@@ -1081,7 +1080,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                                $network = $server['network'];
                                $version = $server['version'];
                                $site_name = $server['site_name'];
-                               $last_contact = datetime_convert();
                        }
 
                        $lines = explode("\n",$serverret["header"]);
@@ -1095,15 +1093,11 @@ function poco_check_server($server_url, $network = "", $force = false) {
                                                $network = NETWORK_DIASPORA;
                                                $versionparts = explode("-", $version);
                                                $version = $versionparts[0];
-                                               $last_contact = datetime_convert();
                                        }
 
                                        if(stristr($line,'Server: Mastodon')) {
                                                $platform = "Mastodon";
                                                $network = NETWORK_OSTATUS;
-                                               // Mastodon doesn't reveal version numbers
-                                               $version = "";
-                                               $last_contact = datetime_convert();
                                        }
                                }
                        }
@@ -1122,7 +1116,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]);
                        $version = trim($version, '"');
                        $network = NETWORK_OSTATUS;
-                       $last_contact = datetime_convert();
                }
 
                // Test for GNU Social
@@ -1134,7 +1127,19 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]);
                        $version = trim($version, '"');
                        $network = NETWORK_OSTATUS;
-                       $last_contact = datetime_convert();
+               }
+
+               // Test for Mastodon
+               $serverret = z_fetch_url($server_url."/api/v1/instance");
+               if ($serverret["success"] AND ($serverret["body"] != '')) {
+                       $data = json_decode($serverret["body"]);
+                       if (isset($data->version)) {
+                               $platform = "Mastodon";
+                               $version = $data->version;
+                               $site_name = $data->title;
+                               $info = $data->description;
+                               $network = NETWORK_OSTATUS;
+                       }
                }
        }
 
@@ -1144,8 +1149,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                if ($serverret["success"]) {
                        $data = json_decode($serverret["body"]);
                        if (isset($data->site->server)) {
-                               $last_contact = datetime_convert();
-
                                if (isset($data->site->platform)) {
                                        $platform = $data->site->platform->PLATFORM_NAME;
                                        $version = $data->site->platform->STD_VERSION;
@@ -1192,7 +1195,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                }
        }
 
-
        // Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix
        if (!$failure) {
                $serverret = z_fetch_url($server_url."/statistics.json");
@@ -1220,9 +1222,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        } else {
                                $register_policy = REGISTER_CLOSED;
                        }
-
-                       if (isset($data->version))
-                               $last_contact = datetime_convert();
                }
        }
 
@@ -1247,8 +1246,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        if (isset($server['site_name'])) {
                                $site_name = $server['site_name'];
                        }
-
-                       $last_contact = datetime_convert();
                }
        }
 
@@ -1264,7 +1261,6 @@ function poco_check_server($server_url, $network = "", $force = false) {
                        $data = json_decode($serverret["body"]);
 
                        if (isset($data->version)) {
-                               $last_contact = datetime_convert();
                                $network = NETWORK_DFRN;
 
                                $noscrape = $data->no_scrape_url;
@@ -1290,13 +1286,14 @@ function poco_check_server($server_url, $network = "", $force = false) {
        }
 
        if ($possible_failure AND !$failure) {
-               $last_failure = datetime_convert();
                $failure = true;
        }
 
        if ($failure) {
                $last_contact = $orig_last_contact;
+               $last_failure = datetime_convert();
        } else {
+               $last_contact = datetime_convert();
                $last_failure = $orig_last_failure;
        }
 
@@ -1430,7 +1427,7 @@ function common_friends_zcid($uid,$zcid,$start = 0, $limit = 9999,$shuffle = fal
        $r = q("SELECT `gcontact`.*
                FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id`
                where `glink`.`zcid` = %d
-               and `gcontact`.`nurl` in (select nurl from contact where uid = %d and self = 0 and blocked = 0 and hidden = 0 ) 
+               and `gcontact`.`nurl` in (select nurl from contact where uid = %d and self = 0 and blocked = 0 and hidden = 0 )
                $sql_extra limit %d, %d",
                intval($zcid),
                intval($uid),
@@ -2345,4 +2342,3 @@ function poco_serverlist() {
        }
        return $r;
 }
-?>
index f64b39e4b687bda0e0b42434ed88c2872367c463..2b21e41965eea15b494ef2a53786c5a7b529c39d 100644 (file)
@@ -4,7 +4,7 @@
  * @brief Posts items that wer spooled because they couldn't be posted.
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 require_once("include/items.php");
 
@@ -55,4 +55,3 @@ function spool_post_run($argv, $argc) {
                }
        }
 }
-?>
index 0a094384782bb4358af16ac28811182ade537a84..6067f3f4b93c58b2c41308412fbf18b4f9a264c2 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 function create_tags_from_item($itemid) {
        $profile_base = App::get_baseurl();
        $profile_data = parse_url($profile_base);
@@ -111,12 +114,11 @@ function create_tags_from_itemuri($itemuri, $uid) {
 }
 
 function update_items() {
-       global $db;
 
-        $messages = $db->q("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''", true);
+       $messages = dba::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''");
 
-        logger("fetched messages: ".count($messages));
-        while ($message = $db->qfetch()) {
+       logger("fetched messages: ".dba::num_rows($messages));
+       while ($message = dba::fetch($messages)) {
 
                if ($message["uid"] == 0) {
                        $global = true;
@@ -135,15 +137,14 @@ function update_items() {
                        intval($global), intval(TERM_OBJ_POST), intval($message["oid"]));
        }
 
-        $db->qclose();
+       dba::close($messages);
 
-       $messages = $db->q("SELECT `guid` FROM `item` WHERE `uid` = 0", true);
+       $messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0");
 
-       logger("fetched messages: ".count($messages));
-       while ($message = $db->qfetch()) {
+       logger("fetched messages: ".dba::num_rows($messages));
+       while ($message = dba::fetch(messages)) {
                q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message["guid"]));
        }
 
-       $db->qclose();
+       dba::close($messages);
 }
-?>
index 2919989331f9e8775b467eda8d9487aeaef5fbec..c9babba940f8f06e31770f638407bb5a3839b169 100644 (file)
@@ -1,12 +1,13 @@
 <?php
 
+use Friendica\App;
+
 require_once("include/template_processor.php");
 require_once("include/friendica_smarty.php");
 require_once("include/Smilies.php");
 require_once("include/map.php");
 require_once("mod/proxy.php");
 
-
 if(! function_exists('replace_macros')) {
 /**
  * This is our template processor
@@ -753,6 +754,72 @@ function logger($msg, $level = 0) {
        $a->save_timestamp($stamp1, "file");
 }}
 
+/**
+ * @brief An alternative logger for development.
+ * Works largely as logger() but allows developers
+ * to isolate particular elements they are targetting
+ * personally without background noise
+ *
+ * log levels:
+ * LOGGER_NORMAL (default)
+ * LOGGER_TRACE
+ * LOGGER_DEBUG
+ * LOGGER_DATA
+ * LOGGER_ALL
+ *
+ * @global App $a
+ * @global dba $db
+ * @global array $LOGGER_LEVELS
+ * @param string $msg
+ * @param int $level
+ */
+
+function dlogger($msg, $level = 0) {
+       $a = get_app();
+       global $db;
+
+       // turn off logger in install mode
+       if (
+               $a->module == 'install'
+               || ! ($db && $db->connected)
+       ) {
+               return;
+       }
+
+       $logfile = get_config('system','dlogfile');
+
+       if (! $logfile) {
+               return;
+       }
+
+       if (count($LOGGER_LEVELS) == 0) {
+               foreach (get_defined_constants() as $k => $v) {
+                       if (substr($k, 0, 7) == "LOGGER_") {
+                               $LOGGER_LEVELS[$v] = substr($k, 7, 7);
+                       }
+               }
+       }
+
+       $process_id = session_id();
+
+       if ($process_id == '') {
+               $process_id = get_app()->process_id;
+       }
+
+       $callers = debug_backtrace();
+       $logline = sprintf("%s@\t%s:\t%s:\t%s\t%s\t%s\n",
+                       datetime_convert(),
+                       $process_id,
+                       basename($callers[0]['file']),
+                       $callers[0]['line'],
+                       $callers[1]['function'],
+                       $msg
+               );
+
+       $stamp1 = microtime(true);
+       @file_put_contents($logfile, $logline, FILE_APPEND);
+       $a->save_timestamp($stamp1, "file");
+}
 
 if(! function_exists('activity_match')) {
 /**
index c214cf264487a6f89ddecab8248e7b81909ed5b8..b0ba54684062022b0a28c7b05e88003cc0455cfc 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 function add_thread($itemid, $onlyshadow = false) {
        $items = q("SELECT `uid`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`,
                        `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `gcontact-id`,
@@ -242,28 +245,24 @@ function delete_thread($itemid, $itemuri = "") {
                                intval($item["uid"])
                        );
                if (!dbm::is_result($r)) {
-                       $r = q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = 0",
-                               dbesc($itemuri)
-                       );
+                       dba::delete('item', array('uri' => $itemuri, 'uid' => 0));
                        logger("delete_thread: Deleted shadow for item ".$itemuri." - ".print_r($result, true), LOGGER_DEBUG);
                }
        }
 }
 
 function update_threads() {
-       global $db;
-
        logger("update_threads: start");
 
-       $messages = $db->q("SELECT `id` FROM `item` WHERE `id` = `parent`", true);
+       $messages = dba::p("SELECT `id` FROM `item` WHERE `id` = `parent`");
 
-       logger("update_threads: fetched messages: ".count($messages));
+       logger("update_threads: fetched messages: ".dba::num_rows($messages));
 
-       while ($message = $db->qfetch()) {
+       while ($message = dba::fetch($messages)) {
                add_thread($message["id"]);
                add_shadow_thread($message["id"]);
        }
-       $db->qclose();
+       dba::close($messages);
 }
 
 function update_threads_mention() {
@@ -283,18 +282,15 @@ function update_threads_mention() {
 
 
 function update_shadow_copy() {
-       global $db;
-
        logger("start");
 
-       $messages = $db->q(sprintf("SELECT `iid` FROM `thread` WHERE `uid` != 0 AND `network` IN ('', '%s', '%s', '%s')
-                                       AND `visible` AND NOT `deleted` AND NOT `moderated` AND NOT `private` ORDER BY `created`",
-                               NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS), true);
+       $messages = dba::p("SELECT `iid` FROM `thread` WHERE `uid` != 0 AND `network` IN ('', ?, ?, ?)
+                               AND `visible` AND NOT `deleted` AND NOT `moderated` AND NOT `private` ORDER BY `created`",
+                               NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS);
 
-       logger("fetched messages: ".count($messages));
-       while ($message = $db->qfetch())
+       logger("fetched messages: ".dba::num_rows($messages));
+       while ($message = dba::fetch($messages))
                add_shadow_thread($message["iid"]);
 
-       $db->qclose();
+       dba::close($messages);
 }
-?>
index 4cc5b6c04b3f14d17b87c6c9d254968f4bdd54fc..b27f9dc12607d52ed20402915de4947955c8548f 100644 (file)
-<?php\r
-\r
-/**\r
- * import account file exported from mod/uexport\r
- * args:\r
- *  $a       App     Friendica App Class\r
- *  $file   Array   array from $_FILES\r
- */\r
-require_once("include/Photo.php");\r
-define("IMPORT_DEBUG", False);\r
-\r
-function last_insert_id() {\r
-       global $db;\r
-\r
-       if (IMPORT_DEBUG)\r
-               return 1;\r
-\r
-       return $db->insert_id();\r
-}\r
-\r
-function last_error() {\r
-       global $db;\r
-       return $db->error;\r
-}\r
-\r
-/**\r
- * Remove columns from array $arr that aren't in table $table\r
- *\r
- * @param string $table Table name\r
- * @param array &$arr Column=>Value array from json (by ref)\r
- */\r
-function check_cols($table, &$arr) {\r
-       $query = sprintf("SHOW COLUMNS IN `%s`", dbesc($table));\r
-       logger("uimport: $query", LOGGER_DEBUG);\r
-       $r = q($query);\r
-       $tcols = array();\r
-       // get a plain array of column names\r
-       foreach ($r as $tcol) {\r
-               $tcols[] = $tcol['Field'];\r
-       }\r
-       // remove inexistent columns\r
-       foreach ($arr as $icol => $ival) {\r
-               if (!in_array($icol, $tcols)) {\r
-                       unset($arr[$icol]);\r
-               }\r
-       }\r
-}\r
-\r
-/**\r
- * Import data into table $table\r
- *\r
- * @param string $table Table name\r
- * @param array $arr Column=>Value array from json\r
- */\r
-function db_import_assoc($table, $arr) {\r
-       if (isset($arr['id']))\r
-               unset($arr['id']);\r
-       check_cols($table, $arr);\r
-       $cols = implode("`,`", array_map('dbesc', array_keys($arr)));\r
-       $vals = implode("','", array_map('dbesc', array_values($arr)));\r
-       $query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')";\r
-       logger("uimport: $query", LOGGER_TRACE);\r
-       if (IMPORT_DEBUG)\r
-               return true;\r
-       return q($query);\r
-}\r
-\r
-function import_cleanup($newuid) {\r
-       q("DELETE FROM `user` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `contact` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `profile` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `photo` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `group` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `group_member` WHERE uid = %d", $newuid);\r
-       q("DELETE FROM `pconfig` WHERE uid = %d", $newuid);\r
-}\r
-\r
-function import_account(App $a, $file) {\r
-       logger("Start user import from " . $file['tmp_name']);\r
-       /*\r
-         STEPS\r
-         1. checks\r
-         2. replace old baseurl with new baseurl\r
-         3. import data (look at user id and contacts id)\r
-         4. archive non-dfrn contacts\r
-         5. send message to dfrn contacts\r
-        */\r
-\r
-       $account = json_decode(file_get_contents($file['tmp_name']), true);\r
-       if ($account === null) {\r
-               notice(t("Error decoding account file"));\r
-               return;\r
-       }\r
-\r
-\r
-       if (!x($account, 'version')) {\r
-               notice(t("Error! No version data in file! This is not a Friendica account file?"));\r
-               return;\r
-       }\r
-\r
-       /*\r
-       // this is not required as we remove columns in json not in current db schema\r
-       if ($account['schema'] != DB_UPDATE_VERSION) {\r
-               notice(t("Error! I can't import this file: DB schema version is not compatible."));\r
-               return;\r
-       }\r
-       */\r
-\r
-       // check for username\r
-       $r = q("SELECT uid FROM user WHERE nickname='%s'", $account['user']['nickname']);\r
-       if ($r === false) {\r
-               logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               notice(t('Error! Cannot check nickname'));\r
-               return;\r
-       }\r
-       if (dbm::is_result($r) > 0) {\r
-               notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));\r
-               return;\r
-       }\r
-       // check if username matches deleted account\r
-       $r = q("SELECT id FROM userd WHERE username='%s'", $account['user']['nickname']);\r
-       if ($r === false) {\r
-               logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               notice(t('Error! Cannot check nickname'));\r
-               return;\r
-       }\r
-       if (dbm::is_result($r) > 0) {\r
-               notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));\r
-               return;\r
-       }\r
-\r
-       $oldbaseurl = $account['baseurl'];\r
-       $newbaseurl = App::get_baseurl();\r
-       $olduid = $account['user']['uid'];\r
-\r
-        unset($account['user']['uid']);\r
-        unset($account['user']['account_expired']);\r
-        unset($account['user']['account_expires_on']);\r
-        unset($account['user']['expire_notification_sent']);\r
-       foreach ($account['user'] as $k => &$v) {\r
-               $v = str_replace($oldbaseurl, $newbaseurl, $v);\r
-       }\r
-\r
-\r
-       // import user\r
-       $r = db_import_assoc('user', $account['user']);\r
-       if ($r === false) {\r
-               //echo "<pre>"; var_dump($r, $query, mysql_error()); killme();\r
-               logger("uimport:insert user : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               notice(t("User creation error"));\r
-               return;\r
-       }\r
-       $newuid = last_insert_id();\r
-       //~ $newuid = 1;\r
-\r
-       // Generate a new guid for the account. Otherwise there will be problems with diaspora\r
-       q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d",\r
-               dbesc(generate_user_guid()), intval($newuid));\r
-\r
-       foreach ($account['profile'] as &$profile) {\r
-               foreach ($profile as $k => &$v) {\r
-                       $v = str_replace($oldbaseurl, $newbaseurl, $v);\r
-                       foreach (array("profile", "avatar") as $k)\r
-                               $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);\r
-               }\r
-               $profile['uid'] = $newuid;\r
-               $r = db_import_assoc('profile', $profile);\r
-               if ($r === false) {\r
-                       logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-                       info(t("User profile creation error"));\r
-                       import_cleanup($newuid);\r
-                       return;\r
-               }\r
-       }\r
-\r
-       $errorcount = 0;\r
-       foreach ($account['contact'] as &$contact) {\r
-               if ($contact['uid'] == $olduid && $contact['self'] == '1') {\r
-                       foreach ($contact as $k => &$v) {\r
-                               $v = str_replace($oldbaseurl, $newbaseurl, $v);\r
-                               foreach (array("profile", "avatar", "micro") as $k)\r
-                                       $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);\r
-                       }\r
-               }\r
-               if ($contact['uid'] == $olduid && $contact['self'] == '0') {\r
-                       // set contacts 'avatar-date' to NULL_DATE to let poller to update urls\r
-                       $contact["avatar-date"] = NULL_DATE;\r
-\r
-\r
-                       switch ($contact['network']) {\r
-                               case NETWORK_DFRN:\r
-                                       //  send relocate message (below)\r
-                                       break;\r
-                               case NETWORK_ZOT:\r
-                                       /// @TODO handle zot network\r
-                                       break;\r
-                               case NETWORK_MAIL2:\r
-                                       /// @TODO ?\r
-                                       break;\r
-                               case NETWORK_FEED:\r
-                               case NETWORK_MAIL:\r
-                                       // Nothing to do\r
-                                       break;\r
-                               default:\r
-                                       // archive other contacts\r
-                                       $contact['archive'] = "1";\r
-                       }\r
-               }\r
-               $contact['uid'] = $newuid;\r
-               $r = db_import_assoc('contact', $contact);\r
-               if ($r === false) {\r
-                       logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-                       $errorcount++;\r
-               } else {\r
-                       $contact['newid'] = last_insert_id();\r
-               }\r
-       }\r
-       if ($errorcount > 0) {\r
-               notice(sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount));\r
-       }\r
-\r
-       foreach ($account['group'] as &$group) {\r
-               $group['uid'] = $newuid;\r
-               $r = db_import_assoc('group', $group);\r
-               if ($r === false) {\r
-                       logger("uimport:insert group " . $group['name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               } else {\r
-                       $group['newid'] = last_insert_id();\r
-               }\r
-       }\r
-\r
-       foreach ($account['group_member'] as &$group_member) {\r
-               $group_member['uid'] = $newuid;\r
-\r
-               $import = 0;\r
-               foreach ($account['group'] as $group) {\r
-                       if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {\r
-                               $group_member['gid'] = $group['newid'];\r
-                               $import++;\r
-                               break;\r
-                       }\r
-               }\r
-               foreach ($account['contact'] as $contact) {\r
-                       if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {\r
-                               $group_member['contact-id'] = $contact['newid'];\r
-                               $import++;\r
-                               break;\r
-                       }\r
-               }\r
-               if ($import == 2) {\r
-                       $r = db_import_assoc('group_member', $group_member);\r
-                       if ($r === false) {\r
-                               logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-                       }\r
-               }\r
-       }\r
-\r
-\r
-\r
-\r
-\r
-       foreach ($account['photo'] as &$photo) {\r
-               $photo['uid'] = $newuid;\r
-               $photo['data'] = hex2bin($photo['data']);\r
-\r
-               $p = new Photo($photo['data'], $photo['type']);\r
-               $r = $p->store(\r
-                               $photo['uid'], $photo['contact-id'], //0\r
-                               $photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], //1\r
-                               $photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid']\r
-               );\r
-\r
-               if ($r === false) {\r
-                       logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               }\r
-       }\r
-\r
-       foreach ($account['pconfig'] as &$pconfig) {\r
-               $pconfig['uid'] = $newuid;\r
-               $r = db_import_assoc('pconfig', $pconfig);\r
-               if ($r === false) {\r
-                       logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);\r
-               }\r
-       }\r
-\r
-       // send relocate messages\r
-       proc_run(PRIORITY_HIGH, 'include/notifier.php', 'relocate', $newuid);\r
-\r
-       info(t("Done. You can now login with your username and password"));\r
-       goaway(App::get_baseurl() . "/login");\r
-}\r
+<?php
+
+use Friendica\App;
+
+require_once("include/Photo.php");
+define("IMPORT_DEBUG", False);
+
+function last_insert_id() {
+       global $db;
+
+       if (IMPORT_DEBUG) {
+               return 1;
+       }
+
+       return $db->insert_id();
+}
+
+function last_error() {
+       global $db;
+       return $db->error;
+}
+
+/**
+ * Remove columns from array $arr that aren't in table $table
+ *
+ * @param string $table Table name
+ * @param array &$arr Column=>Value array from json (by ref)
+ */
+function check_cols($table, &$arr) {
+       $query = sprintf("SHOW COLUMNS IN `%s`", dbesc($table));
+       logger("uimport: $query", LOGGER_DEBUG);
+       $r = q($query);
+       $tcols = array();
+       // get a plain array of column names
+       foreach ($r as $tcol) {
+               $tcols[] = $tcol['Field'];
+       }
+       // remove inexistent columns
+       foreach ($arr as $icol => $ival) {
+               if (!in_array($icol, $tcols)) {
+                       unset($arr[$icol]);
+               }
+       }
+}
+
+/**
+ * Import data into table $table
+ *
+ * @param string $table Table name
+ * @param array $arr Column=>Value array from json
+ */
+function db_import_assoc($table, $arr) {
+       if (isset($arr['id']))
+               unset($arr['id']);
+       check_cols($table, $arr);
+       $cols = implode("`,`", array_map('dbesc', array_keys($arr)));
+       $vals = implode("','", array_map('dbesc', array_values($arr)));
+       $query = "INSERT INTO `$table` (`$cols`) VALUES ('$vals')";
+       logger("uimport: $query", LOGGER_TRACE);
+       if (IMPORT_DEBUG) {
+               return true;
+       }
+       return q($query);
+}
+
+/**
+ * @brief Import account file exported from mod/uexport
+ *
+ * @param App $a Friendica App Class
+ * @param array $file array from $_FILES
+ */
+function import_account(App $a, $file) {
+       logger("Start user import from " . $file['tmp_name']);
+       /*
+         STEPS
+         1. checks
+         2. replace old baseurl with new baseurl
+         3. import data (look at user id and contacts id)
+         4. archive non-dfrn contacts
+         5. send message to dfrn contacts
+        */
+
+       $account = json_decode(file_get_contents($file['tmp_name']), true);
+       if ($account === null) {
+               notice(t("Error decoding account file"));
+               return;
+       }
+
+
+       if (!x($account, 'version')) {
+               notice(t("Error! No version data in file! This is not a Friendica account file?"));
+               return;
+       }
+
+       /*
+        * @TODO Old-lost code?
+       // this is not required as we remove columns in json not in current db schema
+       if ($account['schema'] != DB_UPDATE_VERSION) {
+               notice(t("Error! I can't import this file: DB schema version is not compatible."));
+               return;
+       }
+       */
+
+       // check for username
+       $r = q("SELECT uid FROM user WHERE nickname='%s'", $account['user']['nickname']);
+       if ($r === false) {
+               logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
+               notice(t('Error! Cannot check nickname'));
+               return;
+       }
+       if (dbm::is_result($r) > 0) {
+               notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
+               return;
+       }
+       // check if username matches deleted account
+       $r = q("SELECT id FROM userd WHERE username='%s'", $account['user']['nickname']);
+       if ($r === false) {
+               logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
+               notice(t('Error! Cannot check nickname'));
+               return;
+       }
+       if (dbm::is_result($r) > 0) {
+               notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
+               return;
+       }
+
+       $oldbaseurl = $account['baseurl'];
+       $newbaseurl = App::get_baseurl();
+       $olduid = $account['user']['uid'];
+
+       unset($account['user']['uid']);
+       unset($account['user']['account_expired']);
+       unset($account['user']['account_expires_on']);
+       unset($account['user']['expire_notification_sent']);
+
+       foreach ($account['user'] as $k => &$v) {
+               $v = str_replace($oldbaseurl, $newbaseurl, $v);
+       }
+
+       // import user
+       $r = db_import_assoc('user', $account['user']);
+       if ($r === false) {
+               //echo "<pre>"; var_dump($r, $query, mysql_error()); killme();
+               logger("uimport:insert user : ERROR : " . last_error(), LOGGER_NORMAL);
+               notice(t("User creation error"));
+               return;
+       }
+       $newuid = last_insert_id();
+       //~ $newuid = 1;
+
+       // Generate a new guid for the account. Otherwise there will be problems with diaspora
+       q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d",
+               dbesc(generate_user_guid()), intval($newuid));
+
+       foreach ($account['profile'] as &$profile) {
+               foreach ($profile as $k => &$v) {
+                       $v = str_replace($oldbaseurl, $newbaseurl, $v);
+                       foreach (array("profile", "avatar") as $k) {
+                               $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
+                       }
+               }
+               $profile['uid'] = $newuid;
+               $r = db_import_assoc('profile', $profile);
+               if ($r === false) {
+                       logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+                       info(t("User profile creation error"));
+                       dba::delete('user', array('uid' => $newuid));
+                       return;
+               }
+       }
+
+       $errorcount = 0;
+       foreach ($account['contact'] as &$contact) {
+               if ($contact['uid'] == $olduid && $contact['self'] == '1') {
+                       foreach ($contact as $k => &$v) {
+                               $v = str_replace($oldbaseurl, $newbaseurl, $v);
+                               foreach (array("profile", "avatar", "micro") as $k) {
+                                       $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
+                               }
+                       }
+               }
+               if ($contact['uid'] == $olduid && $contact['self'] == '0') {
+                       // set contacts 'avatar-date' to NULL_DATE to let poller to update urls
+                       $contact["avatar-date"] = NULL_DATE;
+
+                       switch ($contact['network']) {
+                               case NETWORK_DFRN:
+                                       //  send relocate message (below)
+                                       break;
+                               case NETWORK_ZOT:
+                                       /// @TODO handle zot network
+                                       break;
+                               case NETWORK_MAIL2:
+                                       /// @TODO ?
+                                       break;
+                               case NETWORK_FEED:
+                               case NETWORK_MAIL:
+                                       // Nothing to do
+                                       break;
+                               default:
+                                       // archive other contacts
+                                       $contact['archive'] = "1";
+                       }
+               }
+               $contact['uid'] = $newuid;
+               $r = db_import_assoc('contact', $contact);
+               if ($r === false) {
+                       logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+                       $errorcount++;
+               } else {
+                       $contact['newid'] = last_insert_id();
+               }
+       }
+       if ($errorcount > 0) {
+               notice(sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount));
+       }
+
+       foreach ($account['group'] as &$group) {
+               $group['uid'] = $newuid;
+               $r = db_import_assoc('group', $group);
+               if ($r === false) {
+                       logger("uimport:insert group " . $group['name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+               } else {
+                       $group['newid'] = last_insert_id();
+               }
+       }
+
+       foreach ($account['group_member'] as &$group_member) {
+               $group_member['uid'] = $newuid;
+
+               $import = 0;
+               foreach ($account['group'] as $group) {
+                       if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {
+                               $group_member['gid'] = $group['newid'];
+                               $import++;
+                               break;
+                       }
+               }
+               foreach ($account['contact'] as $contact) {
+                       if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {
+                               $group_member['contact-id'] = $contact['newid'];
+                               $import++;
+                               break;
+                       }
+               }
+               if ($import == 2) {
+                       $r = db_import_assoc('group_member', $group_member);
+                       if ($r === false) {
+                               logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+                       }
+               }
+       }
+
+       foreach ($account['photo'] as &$photo) {
+               $photo['uid'] = $newuid;
+               $photo['data'] = hex2bin($photo['data']);
+
+               $p = new Photo($photo['data'], $photo['type']);
+               $r = $p->store(
+                               $photo['uid'], $photo['contact-id'], //0
+                               $photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], //1
+                               $photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid']
+               );
+
+               if ($r === false) {
+                       logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+               }
+       }
+
+       foreach ($account['pconfig'] as &$pconfig) {
+               $pconfig['uid'] = $newuid;
+               $r = db_import_assoc('pconfig', $pconfig);
+               if ($r === false) {
+                       logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
+               }
+       }
+
+       // send relocate messages
+       proc_run(PRIORITY_HIGH, 'include/notifier.php', 'relocate', $newuid);
+
+       info(t("Done. You can now login with your username and password"));
+       goaway(App::get_baseurl() . "/login");
+}
index 883a22989508eb4080c114f09472e030065adee0..d283bd268931093d08ad4237b6fb0051257f99f9 100644 (file)
@@ -1,11 +1,11 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 function update_gcontact_run(&$argv, &$argc) {
        global $a;
 
-       require_once 'include/Scrape.php';
+       require_once 'include/probe.php';
        require_once 'include/socgraph.php';
 
        logger('update_gcontact: start');
index 973d6b8b1f808b3bbd46ccd0675885d6e8e62ae0..08719cd7c135feb9f27090f984c801f46c9f47b2 100644 (file)
@@ -226,9 +226,7 @@ function create_user($arr) {
        );
        if ((dbm::is_result($r)) && (count($r) > 1) && $newuid) {
                $result['message'] .= t('Nickname is already registered. Please choose another.') . EOL;
-               q("DELETE FROM `user` WHERE `uid` = %d",
-                       intval($newuid)
-               );
+               dba::delete('user', array('uid' => $newuid));
                return $result;
        }
 
@@ -248,8 +246,7 @@ function create_user($arr) {
                if ($r === false) {
                        $result['message'] .=  t('An error occurred creating your default profile. Please try again.') . EOL;
                        // Start fresh next time.
-                       $r = q("DELETE FROM `user` WHERE `uid` = %d",
-                               intval($newuid));
+                       dba::delete('user', array('uid' => $newuid));
                        return $result;
                }
 
index ebc65cdb018904f550ccda6c6e1cd21ff2c8bca1..2b26eb90f0caad691e99605471e24863cc640e9a 100644 (file)
--- a/index.php
+++ b/index.php
  *
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
-require_once('boot.php');
-require_once('object/BaseObject.php');
+require_once 'boot.php';
+require_once 'object/BaseObject.php';
 
-$a = new App;
+$a = new App(__DIR__);
 BaseObject::set_app($a);
 
 // We assume that the index.php is called by a frontend process
@@ -73,7 +74,7 @@ if (!$install) {
                exit();
        }
 
-       require_once("include/session.php");
+       require_once 'include/session.php';
        load_hooks();
        call_hooks('init_1');
 
@@ -112,9 +113,11 @@ if (!$a->is_backend()) {
  */
 if (x($_SESSION,'authenticated') && !x($_SESSION,'language')) {
        // we didn't loaded user data yet, but we need user language
-       $r = q("SELECT language FROM user WHERE uid=%d", intval($_SESSION['uid']));
+       $r = dba::select('user', array('language'), array('uid' => $_SESSION['uid']), array('limit' => 1));
        $_SESSION['language'] = $lang;
-       if (dbm::is_result($r)) $_SESSION['language'] = $r[0]['language'];
+       if (dbm::is_result($r)) {
+               $_SESSION['language'] = $r['language'];
+       }
 }
 
 if ((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
@@ -174,6 +177,10 @@ if (! x($_SESSION,'sysmsg_info')) {
        $_SESSION['sysmsg_info'] = array();
 }
 
+// Array for informations about last received items
+if (! x($_SESSION,'last_updated')) {
+       $_SESSION['last_updated'] = array();
+}
 /*
  * check_config() is responsible for running update scripts. These automatically
  * update the DB schema whenever we push a new one out. It also checks to see if
@@ -482,7 +489,7 @@ header("X-Friendica-Version: " . FRIENDICA_VERSION);
 header("Content-type: text/html; charset=utf-8");
 
 /*
- * We use $_GET["mode"] for special page templates. So we will check if we have 
+ * We use $_GET["mode"] for special page templates. So we will check if we have
  * to load another page template than the default one.
  * The page templates are located in /view/php/ or in the theme directory.
  */
index 3ed9fa30f9f2b23ae3007dda2348b0c9bb963abd..58dde55a6ddd5f8057563e12b83f5cf8fc4556ee 100644 (file)
@@ -78,22 +78,26 @@ function contact_format(item) {
 }
 
 function editor_replace(item) {
-       if(typeof item.replace !== 'undefined') {
+       if (typeof item.replace !== 'undefined') {
                return '$1$2' + item.replace;
        }
 
+       if (typeof item.addr !== 'undefined') {
+               return '$1$2' + item.addr + ' ';
+       }
+
        // $2 ensures that prefix (@,@!) is preserved
        var id = item.id;
 
        // don't add the id if it is empty (the id empty eg. if there are unknow contacts in thread)
-       if(id.length < 1)
+       if (id.length < 1) {
                return '$1$2' + item.nick.replace(' ', '') + ' ';
-
+       }
        // 16 chars of hash should be enough. Full hash could be used if it can be done in a visually appealing way.
        // 16 chars is also the minimum length in the backend (otherwise it's interpreted as a local id).
-       if(id.length > 16)
+       if (id.length > 16) {
                id = item.id.substring(0,16);
-
+       }
        return '$1$2' + item.nick.replace(' ', '') + '+' + id + ' ';
 }
 
index 622d7fd93f647e9838e29af57f3649b8f5f02828..45c1da494cc785da79f753ea3546a6705c1847ff 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("mod/hostxrd.php");
 require_once("mod/nodeinfo.php");
index 892b59655f01dea4cab10ca8e2b9fbe7d036ebac..5e98ed32b61da5d21eff1c5c8e8f4c0cca0bcaf2 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 
-require_once('include/Scrape.php');
+use Friendica\App;
+
+require_once 'include/probe.php';
 
 function acctlink_init(App $a) {
 
index 9220bc77a9097198aed0bc2c5b7e3800eaf245a7..e04a3fbc7e1d243727ae7a13a6d973497de15005 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /* ACL selector json backend */
 
+use Friendica\App;
+
 require_once 'include/acl_selectors.php';
 
 function acl_init(App $a) {
index c57e7f3545d510bf0b6eccf73207491a7df51a1c..d9f2d95760d3449b71f550887e0ff00dd85e3113 100644 (file)
@@ -6,7 +6,8 @@
  * @brief Friendica admin
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("include/enotify.php");
 require_once("include/text.php");
@@ -109,6 +110,9 @@ function admin_post(App $a) {
                        case 'dbsync':
                                admin_page_dbsync_post($a);
                                break;
+                       case 'blocklist':
+                               admin_page_blocklist_post($a);
+                               break;
                }
        }
 
@@ -166,6 +170,7 @@ function admin_content(App $a) {
                'features' =>   array("admin/features/", t("Additional features") , "features"),
                'dbsync' =>     array("admin/dbsync/", t('DB updates'), "dbsync"),
                'queue'  =>     array("admin/queue/", t('Inspect Queue'), "queue"),
+               'blocklist' => array("admin/blocklist/", t('Server Blocklist'), "blocklist"),
                'federation' => array("admin/federation/", t('Federation Statistics'), "federation"),
        );
 
@@ -236,6 +241,9 @@ function admin_content(App $a) {
                        case 'federation':
                                $o = admin_page_federation($a);
                                break;
+                       case 'blocklist':
+                               $o = admin_page_blocklist($a);
+                               break;
                        default:
                                notice(t("Item not found."));
                }
@@ -252,6 +260,94 @@ function admin_content(App $a) {
        }
 }
 
+/**
+ * @brief Subpage to modify the server wide block list via the admin panel.
+ *
+ * This function generates the subpage of the admin panel to allow the
+ * modification of the node wide block/black list to block entire
+ * remote servers from communication with this node. The page allows
+ * adding, removing and editing of entries from the blocklist.
+ *
+ * @param App $a
+ * @return string
+ */
+function admin_page_blocklist(App $a) {
+       $blocklist = Config::get('system', 'blocklist');
+       $blocklistform = array();
+       if (is_array($blocklist)) {
+               foreach($blocklist as $id => $b) {
+                       $blocklistform[] = array(
+                               'domain' => array("domain[$id]", t('Blocked domain'), $b['domain'], '', t('The blocked domain'), 'required', '', ''),
+                               'reason' => array("reason[$id]", t("Reason for the block"), $b['reason'], t('The reason why you blocked this domain.').'('.$b['domain'].')', 'required', '', ''),
+                               'delete' => array("delete[$id]", t("Delete domain").' ('.$b['domain'].')', False , t("Check to delete this entry from the blocklist"))
+                       );
+               }
+       }
+       $t = get_markup_template("admin_blocklist.tpl");
+       return replace_macros($t, array(
+               '$title' => t('Administration'),
+               '$page' => t('Server Blocklist'),
+               '$intro' => t('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.'),
+               '$public' => t('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.'),
+               '$addtitle' => t('Add new entry to block list'),
+               '$newdomain' => array('newentry_domain', t('Server Domain'), '', t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''),
+               '$newreason' => array('newentry_reason', t('Block reason'), '', t('The reason why you blocked this domain.'), 'required', '', ''),
+               '$submit' => t('Add Entry'),
+               '$savechanges' => t('Save changes to the blocklist'),
+               '$currenttitle' => t('Current Entries in the Blocklist'),
+               '$thurl' => t('Blocked domain'),
+               '$threason' => t('Reason for the block'),
+               '$delentry' => t('Delete entry from blocklist'),
+               '$entries' => $blocklistform,
+               '$baseurl' => App::get_baseurl(true),
+               '$confirm_delete' => t('Delete entry from blocklist?'),
+               '$form_security_token'  => get_form_security_token("admin_blocklist")
+       ));
+}
+
+/**
+ * @brief Process send data from Admin Blocklist Page
+ *
+ * @param App $a
+ */
+function admin_page_blocklist_post(App $a) {
+       if (!x($_POST,"page_blocklist_save") && (!x($_POST['page_blocklist_edit']))) {
+               return;
+       }
+
+       check_form_security_token_redirectOnErr('/admin/blocklist', 'admin_blocklist');
+
+       if (x($_POST['page_blocklist_save'])) {
+               //  Add new item to blocklist
+               $blocklist = get_config('system', 'blocklist');
+               $blocklist[] = array(
+                       'domain' => notags(trim($_POST['newentry_domain'])),
+                       'reason' => notags(trim($_POST['newentry_reason']))
+               );
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Server added to blocklist.').EOL);
+       } else {
+               // Edit the entries from blocklist
+               $blocklist = array();
+               foreach ($_POST['domain'] as $id => $domain) {
+                       // Trimming whitespaces as well as any lingering slashes
+                       $domain = notags(trim($domain, "\x00..\x1F/"));
+                       $reason = notags(trim($_POST['reason'][$id]));
+                       if (!x($_POST['delete'][$id])) {
+                               $blocklist[] = array(
+                                       'domain' => $domain,
+                                       'reason' => $reason
+                               );
+                       }
+               }
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Site blocklist updated.').EOL);
+       }
+       goaway('admin/blocklist');
+
+       return; // NOTREACHED
+}
+
 /**
  * @brief Subpage with some stats about "the federation" network
  *
@@ -447,7 +543,7 @@ function admin_page_summary(App $a) {
        $warningtext = array();
        if (dbm::is_result($r)) {
                $showwarning = true;
-               $warningtext[] = sprintf(t('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 <tt>convert_innodb.sql</tt> in the <tt>/util</tt> directory of your Friendica installation.<br />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
+               $warningtext[] = sprintf(t('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 />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
        }
        // MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements
        if ((version_compare($db->server_info(), '5.7.4') >= 0) AND
@@ -636,6 +732,7 @@ function admin_page_site_post(App $a) {
        $timeout                =       ((x($_POST,'timeout'))                  ? intval(trim($_POST['timeout']))               : 60);
        $maxloadavg             =       ((x($_POST,'maxloadavg'))               ? intval(trim($_POST['maxloadavg']))            : 50);
        $maxloadavg_frontend    =       ((x($_POST,'maxloadavg_frontend'))      ? intval(trim($_POST['maxloadavg_frontend']))   : 50);
+       $min_memory             =       ((x($_POST,'min_memory'))               ? intval(trim($_POST['min_memory']))            : 0);
        $optimize_max_tablesize =       ((x($_POST,'optimize_max_tablesize'))   ? intval(trim($_POST['optimize_max_tablesize'])): 100);
        $optimize_fragmentation =       ((x($_POST,'optimize_fragmentation'))   ? intval(trim($_POST['optimize_fragmentation'])): 30);
        $poco_completion        =       ((x($_POST,'poco_completion'))          ? intval(trim($_POST['poco_completion']))       : false);
@@ -721,6 +818,7 @@ function admin_page_site_post(App $a) {
        set_config('system','ssl_policy',$ssl_policy);
        set_config('system','maxloadavg',$maxloadavg);
        set_config('system','maxloadavg_frontend',$maxloadavg_frontend);
+       set_config('system','min_memory',$min_memory);
        set_config('system','optimize_max_tablesize',$optimize_max_tablesize);
        set_config('system','optimize_fragmentation',$optimize_fragmentation);
        set_config('system','poco_completion',$poco_completion);
@@ -1018,6 +1116,7 @@ function admin_page_site(App $a) {
                '$timeout'              => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
                '$maxloadavg'           => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
                '$maxloadavg_frontend'  => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")),
+               '$min_memory'           => array('min_memory', t("Minimal Memory"), ((intval(get_config('system','min_memory')) > 0)?get_config('system','min_memory'):0), t("Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated).")),
                '$optimize_max_tablesize'=> array('optimize_max_tablesize', t("Maximum table size for optimization"), $optimize_max_tablesize, t("Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it.")),
                '$optimize_fragmentation'=> array('optimize_fragmentation', t("Minimum level of fragmentation"), ((intval(get_config('system','optimize_fragmentation')) > 0)?get_config('system','optimize_fragmentation'):30), t("Minimum fragmenation level to start the automatic optimization - default value is 30%.")),
 
index f51070bbe86d472216892b3685cc34fb19680520..fe3013a7c4af5fef7bef783e1fcaa151ac2aded5 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/socgraph.php');
 require_once('include/Contact.php');
 require_once('include/contact_selectors.php');
index 5f9f97e3f13507c12e1d0bf2d40043b3185b652f..0eb295a816058a771a8ab18e51995a9cdd0bb182 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 
+use Friendica\App;
+
 function amcd_content(App $a) {
-//header("Content-type: text/json");
-echo <<< EOT
+       echo <<< JSON
 {
   "version":1,
   "sessionstatus":{
@@ -44,6 +45,6 @@ echo <<< EOT
     }
   }
 }
-EOT;
-killme();
+JSON;
+       killme();
 }
\ No newline at end of file
index 3916636cfd32f02bbdbdbfa1d28d4a1251db792a..cd5d5241f86c8faa231407c51b9e6540ce17ac7e 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/api.php');
 
 function oauth_get_client($request){
@@ -106,8 +108,6 @@ function api_content(App $a) {
                        '$no'   => t('No'),
                ));
 
-               //echo "<pre>"; var_dump($app); killme();
-
                return $o;
        }
 
index 199ce0f9188021b27e93d99391d5e2d9103d5774..0c0df76544ed6ca2a3fb97e05653bef278593a45 100644 (file)
@@ -1,25 +1,25 @@
 <?php
 
-function apps_content(App $a) {
-    $privateaddons = get_config('config','private_addons');
-      if ($privateaddons === "1") {
-       if((! (local_user())))  {
-       info( t("You must be logged in to use addons. "));
-      return;};
-}
+use Friendica\App;
 
-      $title = t('Applications');
+function apps_content(App $a) {
+       $privateaddons = get_config('config', 'private_addons');
+       if ($privateaddons === "1") {
+               if (! local_user()) {
+                       info(t('You must be logged in to use addons. '));
+                       return;
+               };
+       }
 
-       if(count($a->apps)==0)
-               notice( t('No installed applications.') . EOL);
+       $title = t('Applications');
 
+       if (count($a->apps) == 0) {
+               notice(t('No installed applications.') . EOL);
+       }
 
-       $tpl = get_markup_template("apps.tpl");
+       $tpl = get_markup_template('apps.tpl');
        return replace_macros($tpl, array(
                '$title' => $title,
                '$apps' => $a->apps,
        ));
-
-
-
 }
index dd7154dfe1a61033c370e3ea9cd8fea02111d26d..6155a3f99e9853c723acd623c64a375367eeb9b0 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 
 function attach_init(App $a) {
index f71863bdedaf2253720fb6b3d90ac8aeb8957ac0..0e38dc5750ab41e5ae456418e3f0fa46ca2531c2 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once 'include/bbcode.php';
 require_once 'library/markdown.php';
 require_once 'include/bb2diaspora.php';
index c4ef8457044ed64913eb15f3af0c385a69f5c74d..f7dd256775c4e478a79d62ec4f37646f15aa213f 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/conversation.php');
 require_once('include/items.php');
 
index 7398426bc3dc5256370f1e2dbff7f7b5c3a2ecb1..cd884e50e4b000b02f62512048cd73e7afa43909 100644 (file)
@@ -6,6 +6,8 @@
  *     of the profile owner
  */
 
+use Friendica\App;
+
 require_once('include/event.php');
 require_once('include/redir.php');
 
index 3c5df6e38ba12a861c3fba117ff786d6a9d111e4..030bea4d31849c068a8969c8929fae21530ff421 100644 (file)
@@ -4,6 +4,7 @@
  * General purpose landing page for plugins/addons
  */
 
+use Friendica\App;
 
 function cb_init(App $a) {
        call_hooks('cb_init');
index 5a40663f9eb6445e48f44d5c4e82ac08639e9dc9..87e305e68d0b9ffc09f5d3914dbc215f73a9cfc7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/socgraph.php');
 require_once('include/Contact.php');
 require_once('include/contact_selectors.php');
index 45326e291d01236b304b53e5614cefe8591e2778..5c71667bdcc197c0c83dd1909c2a405e0a70e747 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 function community_init(App $a) {
        if (! local_user()) {
@@ -9,7 +10,6 @@ function community_init(App $a) {
        }
 }
 
-
 function community_content(App $a, $update = 0) {
 
        $o = '';
index 5c4cd79868ef63a43a3c1c40a74a05204c7f9cf9..2a44e2889655d33254819aefe2a711391c5f6232 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/group.php');
 
 function contactgroup_content(App $a) {
-
-
        if (! local_user()) {
                killme();
        }
index f2500099c3f44689b37f67b4faf3afb7320ce3dd..21a4f7446aca19c319a328012f5626222649a816 100644 (file)
@@ -1,11 +1,14 @@
 <?php
 
-require_once('include/Contact.php');
-require_once('include/socgraph.php');
-require_once('include/contact_selectors.php');
-require_once('include/Scrape.php');
-require_once('mod/proxy.php');
-require_once('include/Photo.php');
+use Friendica\App;
+use Friendica\Network\Probe;
+
+require_once 'include/Contact.php';
+require_once 'include/socgraph.php';
+require_once 'include/contact_selectors.php';
+require_once 'include/probe.php';
+require_once 'mod/proxy.php';
+require_once 'include/Photo.php';
 
 function contacts_init(App $a) {
        if (! local_user()) {
@@ -25,8 +28,8 @@ function contacts_init(App $a) {
                }
        }
 
-       require_once('include/group.php');
-       require_once('include/contact_widgets.php');
+       require_once 'include/group.php';
+       require_once 'include/contact_widgets.php';
 
        if ($_GET['nets'] == "all") {
                $_GET['nets'] = "";
@@ -260,7 +263,7 @@ function _contact_update_profile($contact_id) {
        if ($uid != local_user())
                return;
 
-       $data = probe_url($r[0]["url"]);
+       $data = Probe::uri($r[0]["url"], "", 0, false);
 
        // "Feed" or "Unknown" is mostly a sign of communication problems
        if ((in_array($data["network"], array(NETWORK_FEED, NETWORK_PHANTOM))) AND ($data["network"] != $r[0]["network"]))
@@ -496,7 +499,7 @@ function contacts_content(App $a) {
                        '$baseurl' => App::get_baseurl(true),
                ));
 
-               require_once('include/contact_selectors.php');
+               require_once 'include/contact_selectors.php';
 
                $tpl = get_markup_template("contact_edit.tpl");
 
@@ -828,7 +831,7 @@ function contacts_content(App $a) {
  *
  * Available Pages are 'Status', 'Profile', 'Contacts' and 'Common Friends'
  *
- * @param app $a
+ * @param App $a
  * @param int $contact_id The ID of the contact
  * @param int $active_tab 1 if tab should be marked as active
  *
index 43f3fc2ba686e9acfb39d119c114262a4700a95c..a8c3130333aa6770d7e63f42227702e65c0f50d6 100644 (file)
@@ -15,6 +15,7 @@
 // fast - e.g. one or two milliseconds to fetch parent items for the current content,
 // and 10-20 milliseconds to fetch all the child items.
 
+use Friendica\App;
 
 function content_content(App $a, $update = 0) {
 
index f5c34b6105037f094f0098701c4b1a876252853f..e0e834388fdaf602d4567229a3a9758faa508521 100644 (file)
@@ -1,20 +1,23 @@
 <?php
+
 /**
  * Show a credits page for all the developers who helped with the project
  * (only contributors to the git repositories for friendica core and the
  * addons repository will be listed though ATM)
  */
 
-function credits_content (App $a) {
-    /* fill the page with credits */
-    $f = fopen('util/credits.txt','r');
-    $names = fread($f, filesize('util/credits.txt'));
-    $arr = explode("\n", htmlspecialchars($names));
-    fclose($f);
-    $tpl = get_markup_template('credits.tpl');
-    return replace_macros( $tpl, array(
-       '$title'                => t('Credits'),
-       '$thanks'               => t('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!'),
-       '$names'         => $arr,
-    ));
+use Friendica\App;
+
+function credits_content(App $a) {
+       /* fill the page with credits */
+       $f = fopen('util/credits.txt', 'r');
+       $names = fread($f, filesize('util/credits.txt'));
+       $arr = explode("\n", htmlspecialchars($names));
+       fclose($f);
+       $tpl = get_markup_template('credits.tpl');
+       return replace_macros($tpl, array(
+               '$title'  => t('Credits'),
+               '$thanks' => t('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!'),
+               '$names'  => $arr,
+       ));
 }
index 902a129303972a7e18b7c426f84aff37231c5fc8..59ac620a374cf1dc4730ef3b1455b3e198ce2182 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once("include/contact_selectors.php");
 require_once("mod/contacts.php");
 
index 4212ec9b132a4b8ff1a4d4e72d746a9074906ecb..e99734a33b32f14509d075f53212cf52b661adcc 100644 (file)
@@ -1,11 +1,13 @@
 <?php
+
+use Friendica\App;
+
 require_once('mod/settings.php');
 
 function delegate_init(App $a) {
        return settings_init($a);
 }
 
-
 function delegate_content(App $a) {
 
        if (! local_user()) {
index 001fa446891b28eaf205b763d8168dff26005a1f..897e85ecb60af2198db78cb6e66c271bbcc95536 100644 (file)
  *    https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_confirmation.png
  */
 
-require_once('include/enotify.php');
-require_once('include/group.php');
-require_once('include/Probe.php');
+use Friendica\App;
+use Friendica\Network\Probe;
+
+require_once 'include/enotify.php';
+require_once 'include/group.php';
 
 function dfrn_confirm_post(App $a, $handsfree = null) {
 
@@ -152,7 +154,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                         * worried about key leakage than anybody cracking it.
                         *
                         */
-                       require_once('include/crypto.php');
+                       require_once 'include/crypto.php';
 
                        $res = new_keypair(4096);
 
@@ -317,7 +319,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                 *
                 */
 
-               require_once('include/Photo.php');
+               require_once 'include/Photo.php';
 
                update_contact_avatar($contact['photo'],$uid,$contact_id);
 
@@ -433,7 +435,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                if ((isset($new_relation) && $new_relation == CONTACT_IS_FRIEND)) {
 
                        if (($contact) && ($contact['network'] === NETWORK_DIASPORA)) {
-                               require_once('include/diaspora.php');
+                               require_once 'include/diaspora.php';
                                $ret = Diaspora::send_share($user[0],$r[0]);
                                logger('share returns: ' . $ret);
                        }
@@ -446,7 +448,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
 
                        if((dbm::is_result($r)) && ($r[0]['hide-friends'] == 0) && ($activity) && (! $hidden)) {
 
-                               require_once('include/items.php');
+                               require_once 'include/items.php';
 
                                $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                                        intval($uid)
@@ -670,7 +672,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
                        $photo = App::get_baseurl() . '/images/person-175.jpg';
                }
 
-               require_once("include/Photo.php");
+               require_once 'include/Photo.php';
 
                update_contact_avatar($photo,$local_uid,$dfrn_record);
 
@@ -750,7 +752,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) {
 
                        if((dbm::is_result($r)) && ($r[0]['hide-friends'] == 0)) {
 
-                               require_once('include/items.php');
+                               require_once 'include/items.php';
 
                                $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                                        intval($local_uid)
index b42ef9b70a82cee1bc669945d2bd8c3c9fba0a27..44e016599e486862c0d4493499ba10e331838e33 100644 (file)
@@ -5,6 +5,9 @@
  * @brief The dfrn notify endpoint
  * @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
  */
+
+use Friendica\App;
+
 require_once('include/items.php');
 require_once('include/dfrn.php');
 require_once('include/event.php');
index 506f9f162f2159dc1cd8fc75229cff93d11f202c..91fa49618a7713bdd443be67b5a0591fe1043b3f 100644 (file)
@@ -1,12 +1,12 @@
 <?php
+
+use Friendica\App;
+
 require_once('include/items.php');
 require_once('include/auth.php');
 require_once('include/dfrn.php');
 
-
 function dfrn_poll_init(App $a) {
-
-
        $dfrn_id         = ((x($_GET,'dfrn_id'))         ? $_GET['dfrn_id']              : '');
        $type            = ((x($_GET,'type'))            ? $_GET['type']                 : 'data');
        $last_update     = ((x($_GET,'last_update'))     ? $_GET['last_update']          : '');
index f3875ed8e40939d8a0672c97fa312f53dcc07446..4efb4119e1c7df065ec6c29fd0091f00b1533149 100644 (file)
  *    https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_request.png
  */
 
-require_once('include/enotify.php');
-require_once('include/Scrape.php');
-require_once('include/Probe.php');
-require_once('include/group.php');
+use Friendica\App;
+use Friendica\Network\Probe;
+
+require_once 'include/enotify.php';
+require_once 'include/probe.php';
+require_once 'include/group.php';
 
 function dfrn_request_init(App $a) {
 
@@ -131,7 +133,7 @@ function dfrn_request_post(App $a) {
                                                if (! x($parms,'photo')) {
                                                        notice( t('Warning: profile location has no profile photo.') . EOL );
                                                }
-                                               $invalid = Probe::valid_dfrn($parms);
+                                               $invalid = Probe::validDfrn($parms);
                                                if ($invalid) {
                                                        notice( sprintf( tt("%d required parameter was not found at the given location",
                                                                                                "%d required parameters were not found at the given location",
@@ -453,7 +455,7 @@ function dfrn_request_post(App $a) {
                        $network = $data["network"];
 
                        // Canonicalise email-style profile locator
-                       $url = Probe::webfinger_dfrn($url,$hcard);
+                       $url = Probe::webfingerDfrn($url,$hcard);
 
                        if (substr($url,0,5) === 'stat:') {
 
@@ -514,8 +516,11 @@ function dfrn_request_post(App $a) {
                                        return; // NOTREACHED
                                }
 
-
-                               require_once('include/Scrape.php');
+                               if (blocked_url($url)) {
+                                       notice( t('Blocked domain') . EOL);
+                                       goaway(App::get_baseurl() . '/' . $a->cmd);
+                                       return; // NOTREACHED
+                               }
 
                                $parms = Probe::profile(($hcard) ? $hcard : $url);
 
@@ -530,7 +535,7 @@ function dfrn_request_post(App $a) {
                                        if (! x($parms,'photo')) {
                                                notice( t('Warning: profile location has no profile photo.') . EOL );
                                        }
-                                       $invalid = Probe::valid_dfrn($parms);
+                                       $invalid = Probe::validDfrn($parms);
                                        if ($invalid) {
                                                notice( sprintf( tt("%d required parameter was not found at the given location",
                                                                                        "%d required parameters were not found at the given location",
@@ -760,7 +765,7 @@ function dfrn_request_content(App $a) {
                                }
 
                                if($auto_confirm) {
-                                       require_once('mod/dfrn_confirm.php');
+                                       require_once 'mod/dfrn_confirm.php';
                                        $handsfree = array(
                                                'uid'      => $r[0]['uid'],
                                                'node'     => $r[0]['nickname'],
index ba48bb3926c737a91e03587fa9fc3c008c8be8f8..cb0b1f4cd115d18af37ba4bbd55faf796d02132c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function directory_init(App $a) {
        $a->set_pager_itemspage(60);
 
@@ -9,24 +11,18 @@ function directory_init(App $a) {
                $a->page['aside'] .= findpeople_widget();
 
                $a->page['aside'] .= follow_widget();
-
        }
        else {
                unset($_SESSION['theme']);
                unset($_SESSION['mobile-theme']);
        }
-
-
 }
 
-
 function directory_post(App $a) {
        if(x($_POST,'search'))
                $a->data['search'] = $_POST['search'];
 }
 
-
-
 function directory_content(App $a) {
        global $db;
 
index c5844d13dfa742689c0e202a7a9cd92a9772fd68..a64a804ba8d40dfbec5e45deafb7d3ed70c751bf 100644 (file)
@@ -1,9 +1,13 @@
 <?php
-require_once('include/contact_widgets.php');
-require_once('include/socgraph.php');
-require_once('include/Contact.php');
-require_once('include/contact_selectors.php');
-require_once('mod/contacts.php');
+
+use Friendica\App;
+
+require_once 'include/contact_widgets.php';
+require_once 'include/probe.php';
+require_once 'include/socgraph.php';
+require_once 'include/Contact.php';
+require_once 'include/contact_selectors.php';
+require_once 'mod/contacts.php';
 
 function dirfind_init(App $a) {
 
@@ -21,8 +25,6 @@ function dirfind_init(App $a) {
        $a->page['aside'] .= follow_widget();
 }
 
-
-
 function dirfind_content(App $a, $prefix = "") {
 
        $community = false;
index 1f1fd112048f63e31077448ebde723341f39bdf9..ca6809eba14c6fb9b34c359d2f4db172ce83417f 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function display_init(App $a) {
 
        if ((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
@@ -106,7 +108,6 @@ function display_init(App $a) {
        }
 
        profile_load($a, $nick, 0, $profiledata);
-
 }
 
 function display_fetchauthor($a, $item) {
index f3746317a14ba25e7cf70b9fd2aa8b2c0f925480..c0d903d0c3f8fda06541739af9cd7cc9c6eb41b6 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/acl_selectors.php');
 
 function editpost_content(App $a) {
index 60e7b9f39076bf40c7b361afc05ebe9e987b7d5b..876727608d033937ea542cefcd79570b3188d11b 100644 (file)
@@ -3,6 +3,9 @@
  * @file mod/events.php
  * @brief The events module
  */
+
+use Friendica\App;
+
 require_once 'include/bbcode.php';
 require_once 'include/datetime.php';
 require_once 'include/event.php';
index 9a0e9244c1cbb617511187d7273f58f853e077db..21b9b2e7b416605842ee36378cb24a0d9587247a 100644 (file)
@@ -5,6 +5,8 @@
  * @author             Fabio Comuni <fabrixxm@kirgroup.com>
  */
 
+use Friendica\App;
+
 require_once('include/Photo.php');
 
 /**
index b87fc0e8e025248ada5f1d5bb7fc32dc89153d47..0afd7af1070a9e33ce9d217a7be50b7f289aea38 100644 (file)
@@ -2,6 +2,9 @@
 /*
 This file is part of the Diaspora protocol. It is used for fetching single public posts.
 */
+
+use Friendica\App;
+
 require_once("include/crypto.php");
 require_once("include/diaspora.php");
 require_once("include/xml.php");
index 47c4aa5e4cbc6fc05139174415d2f5485a97f7fb..6259879de2ae9d6d31ad8ac722b9a4747e77ca88 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
 
-
 function filer_content(App $a) {
 
        if (! local_user()) {
index 7dd7df2f5ad47fadf6d74702732b757866841903..71e0af08d4543fd77607e9c1836e72ff4a716b06 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function filerm_content(App $a) {
 
        if (! local_user()) {
index 6e1f9069472040cf56b51ad262bbc2f31467235f..45e017f088dd6f58f7de895c54d19d240a382c55 100644 (file)
@@ -1,9 +1,11 @@
 <?php
 
-require_once('include/Scrape.php');
-require_once('include/follow.php');
-require_once('include/Contact.php');
-require_once('include/contact_selectors.php');
+use Friendica\App;
+
+require_once 'include/probe.php';
+require_once 'include/follow.php';
+require_once 'include/Contact.php';
+require_once 'include/contact_selectors.php';
 
 function follow_content(App $a) {
 
index f613dfd39cef05e171db82c410fc75be35714507..bbfdbfe09688e7c651b1b00f9089b1b6e19566a7 100644 (file)
@@ -1,57 +1,61 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 function friendica_init(App $a) {
-       if ($a->argv[1]=="json"){
+       if ($a->argv[1] == "json"){
                $register_policy = Array('REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN');
 
                $sql_extra = '';
-               if(x($a->config,'admin_nickname')) {
-                       $sql_extra = sprintf(" AND nickname = '%s' ",dbesc($a->config['admin_nickname']));
+               if (x($a->config,'admin_nickname')) {
+                       $sql_extra = sprintf(" AND `nickname` = '%s' ", dbesc($a->config['admin_nickname']));
                }
-               if (isset($a->config['admin_email']) && $a->config['admin_email']!=''){
-                       $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
+               if (isset($a->config['admin_email']) && $a->config['admin_email']!='') {
+                       $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
 
-                       //$r = q("SELECT username, nickname FROM user WHERE email='%s' $sql_extra", dbesc($a->config['admin_email']));
-                       $r = q("SELECT username, nickname FROM user WHERE email='%s' $sql_extra", dbesc($adminlist[0]));
+                       $r = q("SELECT `username`, `nickname` FROM `user` WHERE `email` = '%s' $sql_extra", dbesc($adminlist[0]));
                        $admin = array(
                                'name' => $r[0]['username'],
-                               'profile'=> App::get_baseurl().'/profile/'.$r[0]['nickname'],
+                               'profile'=> App::get_baseurl() . '/profile/' . $r[0]['nickname'],
                        );
                } else {
                        $admin = false;
                }
 
                $visible_plugins = array();
-               if(is_array($a->plugins) && count($a->plugins)) {
-                       $r = q("select * from addon where hidden = 0");
-                       if (dbm::is_result($r))
-                               foreach($r as $rr)
+               if (is_array($a->plugins) && count($a->plugins)) {
+                       $r = q("SELECT * FROM `addon` WHERE `hidden` = 0");
+                       if (dbm::is_result($r)) {
+                               foreach($r as $rr) {
                                        $visible_plugins[] = $rr['name'];
+                               }
+                       }
                }
 
                Config::load('feature_lock');
                $locked_features = array();
-               if(is_array($a->config['feature_lock']) && count($a->config['feature_lock'])) {
-                       foreach($a->config['feature_lock'] as $k => $v) {
-                               if($k === 'config_loaded')
+               if (is_array($a->config['feature_lock']) && count($a->config['feature_lock'])) {
+                       foreach ($a->config['feature_lock'] as $k => $v) {
+                               if ($k === 'config_loaded') {
                                        continue;
+                               }
+
                                $locked_features[$k] = intval($v);
                        }
                }
 
                $data = Array(
-                       'version' => FRIENDICA_VERSION,
-                       'url' => z_root(),
-                       'plugins' => $visible_plugins,
+                       'version'         => FRIENDICA_VERSION,
+                       'url'             => z_root(),
+                       'plugins'         => $visible_plugins,
                        'locked_features' => $locked_features,
                        'register_policy' =>  $register_policy[$a->config['register_policy']],
-                       'admin' => $admin,
-                       'site_name' => $a->config['sitename'],
-                       'platform' => FRIENDICA_PLATFORM,
-                       'info' => ((x($a->config,'info')) ? $a->config['info'] : ''),
-                       'no_scrape_url' => App::get_baseurl().'/noscrape'
+                       'admin'           => $admin,
+                       'site_name'       => $a->config['sitename'],
+                       'platform'        => FRIENDICA_PLATFORM,
+                       'info'            => ((x($a->config,'info')) ? $a->config['info'] : ''),
+                       'no_scrape_url'   => App::get_baseurl().'/noscrape'
                );
 
                echo json_encode($data);
@@ -59,53 +63,63 @@ function friendica_init(App $a) {
        }
 }
 
-
-
 function friendica_content(App $a) {
-
-       $o = '';
-       $o .= '<h3>Friendica</h3>';
-
-
-       $o .= '<p></p><p>';
-
-       $o .= t('This is Friendica, version') . ' ' . FRIENDICA_VERSION . ' ';
-       $o .= t('running at web location') . ' ' . z_root() . '</p><p>';
-
-       $o .= t('Please visit <a href="http://friendica.com">Friendica.com</a> to learn more about the Friendica project.') . '</p><p>';
-
-       $o .= t('Bug reports and issues: please visit') . ' ' . '<a href="https://github.com/friendica/friendica/issues?state=open">'.t('the bugtracker at github').'</a></p><p>';
-       $o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendica - dot com') . '</p>';
-
-       $o .= '<p></p>';
+       $o = '<h1>Friendica</h1>' . PHP_EOL;
+       $o .= '<p>';
+       $o .= t('This is Friendica, version') . ' <strong>' . FRIENDICA_VERSION . '</strong> ';
+       $o .= t('running at web location') . ' ' . z_root();
+       $o .= '</p>' . PHP_EOL;
+
+       $o .= '<p>';
+       $o .= t('Please visit <a href="http://friendica.com">Friendica.com</a> to learn more about the Friendica project.') . PHP_EOL;
+       $o .= '</p>' . PHP_EOL;
+
+       $o .= '<p>';
+       $o .= t('Bug reports and issues: please visit') . ' ' . '<a href="https://github.com/friendica/friendica/issues?state=open">'.t('the bugtracker at github').'</a>';
+       $o .= '</p>' . PHP_EOL;
+       $o .= '<p>';
+       $o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendica - dot com');
+       $o .= '</p>' . PHP_EOL;
 
        $visible_plugins = array();
-       if(is_array($a->plugins) && count($a->plugins)) {
-               $r = q("select * from addon where hidden = 0");
-               if (dbm::is_result($r))
-                       foreach($r as $rr)
+       if (is_array($a->plugins) && count($a->plugins)) {
+               $r = q("SELECT * FROM `addon` WHERE `hidden` = 0");
+               if (dbm::is_result($r)) {
+                       foreach($r as $rr) {
                                $visible_plugins[] = $rr['name'];
+                       }
+               }
        }
 
-
-       if(count($visible_plugins)) {
-               $o .= '<p>' . t('Installed plugins/addons/apps:') . '</p>';
+       if (count($visible_plugins)) {
+               $o .= '<p>' . t('Installed plugins/addons/apps:') . '</p>' . PHP_EOL;
                $sorted = $visible_plugins;
                $s = '';
                sort($sorted);
-               foreach($sorted as $p) {
-                       if(strlen($p)) {
-                               if(strlen($s)) $s .= ', ';
+               foreach ($sorted as $p) {
+                       if (strlen($p)) {
+                               if (strlen($s)) {
+                                       $s .= ', ';
+                               }
                                $s .= $p;
                        }
                }
-               $o .= '<div style="margin-left: 25px; margin-right: 25px;">' . $s . '</div>';
+               $o .= '<div style="margin-left: 25px; margin-right: 25px;">' . $s . '</div>' . PHP_EOL;
+       } else {
+               $o .= '<p>' . t('No installed plugins/addons/apps') . '</p>' . PHP_EOL;
+       }
+
+       $blocklist = Config::get('system', 'blocklist');
+       if (count($blocklist)) {
+               $o .= '<div id="about_blocklist"><p>' . t('On this server the following remote servers are blocked.') . '</p>' . PHP_EOL;
+               $o .= '<table class="table"><thead><tr><th>' . t('Blocked domain') . '</th><th>' . t('Reason for the block') . '</th></thead><tbody>' . PHP_EOL;
+               foreach ($blocklist as $b) {
+                       $o .= '<tr><td>' . $b['domain'] .'</td><td>' . $b['reason'] . '</td></tr>' . PHP_EOL;
+               }
+               $o .= '</tbody></table></div>' . PHP_EOL;
        }
-       else
-               $o .= '<p>' . t('No installed plugins/addons/apps') . '</p>';
 
        call_hooks('about_hook', $o);
 
        return $o;
-
 }
index b3d5439712f5e7e9b9b1410ddee75cc056bf6d1e..32ed63b4c20ae75ed3207ab99df74b541848b500 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function fsuggest_post(App $a) {
 
index 2042c765f86acf86bfe29c219871d312c9580480..c01d1cf550c193f77a4f2d981584abdd92fe4f79 100644 (file)
@@ -1,38 +1,39 @@
 <?php
+/**
+ * @file mod/group.php
+ * @brief The group module (create and rename contact groups, add and
+ *     remove contacts to the contact groups
+ */
 
-function validate_members(&$item) {
-       $item = intval($item);
-}
+use Friendica\App;
 
 function group_init(App $a) {
-       if(local_user()) {
-               require_once('include/group.php');
-               $a->page['aside'] = group_side('contacts','group','extended',(($a->argc > 1) ? intval($a->argv[1]) : 0));
+       if (local_user()) {
+               require_once 'include/group.php';
+               $a->page['aside'] = group_side('contacts', 'group', 'extended', (($a->argc > 1) ? intval($a->argv[1]) : 0));
        }
 }
 
-
-
 function group_post(App $a) {
 
        if (! local_user()) {
-               notice( t('Permission denied.') . EOL);
+               notice(t('Permission denied.') . EOL);
                return;
        }
 
-       if(($a->argc == 2) && ($a->argv[1] === 'new')) {
+       if (($a->argc == 2) && ($a->argv[1] === 'new')) {
                check_form_security_token_redirectOnErr('/group/new', 'group_edit');
 
                $name = notags(trim($_POST['groupname']));
-               $r = group_add(local_user(),$name);
+               $r = group_add(local_user(), $name);
                if ($r) {
-                       info( t('Group created.') . EOL );
-                       $r = group_byname(local_user(),$name);
+                       info(t('Group created.') . EOL);
+                       $r = group_byname(local_user(), $name);
                        if ($r) {
                                goaway(App::get_baseurl() . '/group/' . $r);
                        }
                } else {
-                       notice( t('Could not create group.') . EOL );
+                       notice(t('Could not create group.') . EOL);
                }
                goaway(App::get_baseurl() . '/group');
                return; // NOTREACHED
@@ -46,7 +47,7 @@ function group_post(App $a) {
                        intval(local_user())
                );
                if (! dbm::is_result($r)) {
-                       notice( t('Group not found.') . EOL );
+                       notice(t('Group not found.') . EOL);
                        goaway(App::get_baseurl() . '/contacts');
                        return; // NOTREACHED
                }
@@ -60,7 +61,7 @@ function group_post(App $a) {
                        );
 
                        if ($r) {
-                               info( t('Group name changed.') . EOL );
+                               info(t('Group name changed.') . EOL);
                        }
                }
 
@@ -73,17 +74,19 @@ function group_content(App $a) {
        $change = false;
 
        if (! local_user()) {
-               notice( t('Permission denied') . EOL);
+               notice(t('Permission denied') . EOL);
                return;
        }
 
        // Switch to text mode interface if we have more than 'n' contacts or group members
 
-       $switchtotext = get_pconfig(local_user(),'system','groupedit_image_limit');
-       if($switchtotext === false)
-               $switchtotext = get_config('system','groupedit_image_limit');
-       if($switchtotext === false)
+       $switchtotext = get_pconfig(local_user(), 'system', 'groupedit_image_limit');
+       if ($switchtotext === false) {
+               $switchtotext = get_config('system', 'groupedit_image_limit');
+       }
+       if ($switchtotext === false) {
                $switchtotext = 400;
+       }
 
        $tpl = get_markup_template('group_edit.tpl');
 
@@ -92,7 +95,6 @@ function group_content(App $a) {
        );
 
        if (($a->argc == 2) && ($a->argv[1] === 'new')) {
-
                return replace_macros($tpl, $context + array(
                        '$title' => t('Create a group of contacts/friends.'),
                        '$gname' => array('groupname', t('Group Name: '), '', ''),
@@ -115,13 +117,13 @@ function group_content(App $a) {
                        $result = null;
 
                        if (dbm::is_result($r)) {
-                               $result = group_rmv(local_user(),$r[0]['name']);
+                               $result = group_rmv(local_user(), $r[0]['name']);
                        }
 
                        if ($result) {
-                               info( t('Group removed.') . EOL);
+                               info(t('Group removed.') . EOL);
                        } else {
-                               notice( t('Unable to remove group.') . EOL);
+                               notice(t('Unable to remove group.') . EOL);
                        }
                }
                goaway(App::get_baseurl() . '/group');
@@ -135,66 +137,75 @@ function group_content(App $a) {
                        intval($a->argv[2]),
                        intval(local_user())
                );
-               if (dbm::is_result($r))
+               if (dbm::is_result($r)) {
                        $change = intval($a->argv[2]);
+               }
        }
 
        if (($a->argc > 1) && (intval($a->argv[1]))) {
+               require_once 'include/acl_selectors.php';
+               require_once 'mod/contacts.php';
 
-               require_once('include/acl_selectors.php');
                $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1",
                        intval($a->argv[1]),
                        intval(local_user())
                );
+
                if (! dbm::is_result($r)) {
-                       notice( t('Group not found.') . EOL );
+                       notice(t('Group not found.') . EOL);
                        goaway(App::get_baseurl() . '/contacts');
                }
+
                $group = $r[0];
                $members = group_get_members($group['id']);
                $preselected = array();
-               if(count($members))     {
-                       foreach($members as $member)
+               $entry = array();
+               $id = 0;
+
+               if (count($members)) {
+                       foreach ($members as $member) {
                                $preselected[] = $member['id'];
+                       }
                }
 
-               if($change) {
-                       if(in_array($change,$preselected)) {
-                               group_rmv_member(local_user(),$group['name'],$change);
-                       }
-                       else {
-                               group_add_member(local_user(),$group['name'],$change);
+               if ($change) {
+                       if (in_array($change, $preselected)) {
+                               group_rmv_member(local_user(), $group['name'], $change);
+                       } else {
+                               group_add_member(local_user(), $group['name'], $change);
                        }
 
                        $members = group_get_members($group['id']);
                        $preselected = array();
-                       if(count($members))     {
-                               foreach($members as $member)
+                       if (count($members)) {
+                               foreach ($members as $member) {
                                        $preselected[] = $member['id'];
+                               }
                        }
                }
 
-
                $drop_tpl = get_markup_template('group_drop.tpl');
                $drop_txt = replace_macros($drop_tpl, array(
                        '$id' => $group['id'],
-                       '$delete' => t('Delete'),
+                       '$delete' => t('Delete Group'),
                        '$form_security_token' => get_form_security_token("group_drop"),
                ));
 
 
                $context = $context + array(
                        '$title' => t('Group Editor'),
-                       '$gname' => array('groupname', t('Group Name: '),$group['name'], ''),
+                       '$gname' => array('groupname', t('Group Name: '), $group['name'], ''),
                        '$gid' => $group['id'],
                        '$drop' => $drop_txt,
                        '$form_security_token' => get_form_security_token('group_edit'),
+                       '$edit_name' => t('Edit Group Name')
                );
 
        }
 
-       if(! isset($group))
+       if (! isset($group)) {
                return;
+       }
 
        $groupeditor = array(
                'label_members' => t('Members'),
@@ -205,14 +216,24 @@ function group_content(App $a) {
        );
 
        $sec_token = addslashes(get_form_security_token('group_member_change'));
-       $textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false);
-       foreach($members as $member) {
-               if($member['url']) {
-                       $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . ',\'' . $sec_token . '\'); return true;';
-                       $groupeditor['members'][] = micropro($member,true,'mpgroup', $textmode);
+
+       // Format the data of the group members
+       foreach ($members as $member) {
+               if ($member['url']) {
+                       $entry = _contact_detail_for_template($member);
+                       $entry['label'] = 'members';
+                       $entry['photo_menu'] = '';
+                       $entry['change_member'] = array(
+                               'title'     => t("Remove Contact"),
+                               'gid'       => $group['id'],
+                               'cid'       => $member['id'],
+                               'sec_token' => $sec_token
+                       );
+
+                       $groupeditor['members'][] = $entry;
+               } else {
+                       group_rmv_member(local_user(), $group['name'], $member['id']);
                }
-               else
-                       group_rmv_member(local_user(),$group['name'],$member['id']);
        }
 
        $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked` AND NOT `pending` AND NOT `self` ORDER BY `name` ASC",
@@ -220,11 +241,20 @@ function group_content(App $a) {
        );
 
        if (dbm::is_result($r)) {
-               $textmode = (($switchtotext && (count($r) > $switchtotext)) ? true : false);
-               foreach($r as $member) {
-                       if(! in_array($member['id'],$preselected)) {
-                               $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . ',\'' . $sec_token . '\'); return true;';
-                               $groupeditor['contacts'][] = micropro($member,true,'mpall', $textmode);
+               // Format the data of the contacts who aren't in the contact group
+               foreach ($r as $member) {
+                       if (! in_array($member['id'], $preselected)) {
+                               $entry = _contact_detail_for_template($member);
+                               $entry['label'] = 'contacts';
+                               $entry['photo_menu'] = '';
+                               $entry['change_member'] = array(
+                                       'title'     => t("Add Contact"),
+                                       'gid'       => $group['id'],
+                                       'cid'       => $member['id'],
+                                       'sec_token' => $sec_token
+                               );
+
+                               $groupeditor['contacts'][] = $entry;
                        }
                }
        }
@@ -232,7 +262,11 @@ function group_content(App $a) {
        $context['$groupeditor'] = $groupeditor;
        $context['$desc'] = t('Click on a contact to add or remove.');
 
-       if($change) {
+       // If there are to many contacts we could provide an alternative view mode
+       $total = count($groupeditor['members']) + count($groupeditor['contacts']);
+       $context['$shortmode'] = (($switchtotext && ($total > $switchtotext)) ? true : false);
+
+       if ($change) {
                $tpl = get_markup_template('groupeditor.tpl');
                echo replace_macros($tpl, $context);
                killme();
index 07eb291510653b3d4fd1add4e7b413bba2315dc8..229939a4a347991050c3402c68c65bd54115ffdc 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function hcard_init(App $a) {
 
        $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
index c380aa39138267de91eca27a5c2919e3d5f36fab..1d5c831ef45ba32dab6297d22fcac25e8d609207 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once('library/markdown.php');
 
 if (!function_exists('load_doc_file')) {
@@ -87,7 +90,7 @@ function help_content(App $a) {
                for($k=0;$k<$lastlevel; $k++) $toc.="</ul>";
                $html = implode("\n",$lines);
 
-               $a->page['aside'] = $toc.$a->page['aside'];
+               $a->page['aside'] = '<section class="help-aside-wrapper">' . $toc . $a->page['aside'] . '</section>';
        }
 
        $html = "
index b1708d80a2f02e36fe78b650841581508323a316..bd77a840d0db221cca2c04043c2f2719e95f8814 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 if(! function_exists('home_init')) {
 function home_init(App $a) {
 
index 27dc349db2df12977e428b9cedee672be9e8b281..c9f870a08c1d3235c4c3431cee64d33cfb7f203f 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/crypto.php');
 
 function hostxrd_init(App $a) {
index 65b03f2b9470f96163c9f3b67cc819548df0a092..5c9ef61fc9ec409b0ceeb46394798d494244f47f 100644 (file)
@@ -8,6 +8,8 @@
  * License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3)
  */
 
+use Friendica\App;
+
 require_once("include/socgraph.php");
 require_once("include/Contact.php");
 
@@ -15,6 +17,7 @@ function hovercard_init(App $a) {
        // Just for testing purposes
        $_GET["mode"] = "minimal";
 }
+
 function hovercard_content() {
        $profileurl     =       (x($_REQUEST,'profileurl')      ? $_REQUEST['profileurl']       : "");
        $datatype       =       (x($_REQUEST,'datatype')        ?$_REQUEST['datatype']          : "json");
@@ -38,9 +41,9 @@ function hovercard_content() {
        // the real url (nurl)
        if(local_user() && strpos($profileurl, "redir/") === 0) {
                $cid = intval(substr($profileurl, 6));
-               $r = q("SELECT `nurl`, `self`  FROM `contact` WHERE `id` = '%d' LIMIT 1", intval($cid));
-               $profileurl = ($r[0]["nurl"] ? $r[0]["nurl"] : "");
-               $self = ($r[0]["self"] ? $r[0]["self"] : "");
+               $r = dba::select('contact', array('nurl', 'self'), array('id' => $cid), array('limit' => 1));
+               $profileurl = ($r["nurl"] ? $r["nurl"] : "");
+               $self = ($r["self"] ? $r["self"] : "");
        }
 
        // if it's the url containing https it should be converted to http
index 0065d51c58e3b8386b53ac93ea095d1ceca5b76d..a7c3ba6e1d37fdf3bb30263019b70274739bd8a1 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function ignored_init(App $a) {
 
index 8854723b767adb46985200c077fcf16f2d189e84..aa891dba752b390c495702afa61bb8b93d2d33b8 100755 (executable)
@@ -1,13 +1,15 @@
 <?php
-require_once "include/Photo.php";
 
-$install_wizard_pass=1;
+use Friendica\App;
+
+require_once "include/Photo.php";
 
+$install_wizard_pass = 1;
 
 function install_init(App $a) {
 
        // $baseurl/install/testrwrite to test if rewite in .htaccess is working
-       if ($a->argc==2 && $a->argv[1]=="testrewrite") {
+       if ($a->argc == 2 && $a->argv[1] == "testrewrite") {
                echo "ok";
                killme();
        }
@@ -18,7 +20,7 @@ function install_init(App $a) {
        $a->theme['stylesheet'] = App::get_baseurl()."/view/install/style.css";
 
        global $install_wizard_pass;
-       if (x($_POST,'pass')) {
+       if (x($_POST, 'pass')) {
                $install_wizard_pass = intval($_POST['pass']);
        }
 
@@ -43,27 +45,8 @@ function install_post(App $a) {
                        require_once("include/dba.php");
                        unset($db);
                        $db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
-                       /*if(get_db_errno()) {
-                               unset($db);
-                               $db = new dba($dbhost, $dbuser, $dbpass, '', true);
-
-                               if(! get_db_errno()) {
-                                       $r = q("CREATE DATABASE '%s' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci",
-                                                       dbesc($dbdata)
-                                       );
-                                       if ($r) {
-                                               unset($db);
-                                               $db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
-                                       } else {
-                                               $a->data['db_create_failed']=true;
-                                       }
-                               } else {
-                                       $a->data['db_conn_failed']=true;
-                                       return;
-                               }
-                       }*/
-                       if (get_db_errno()) {
-                               $a->data['db_conn_failed']=true;
+                       if (!$db->connected) {
+                               $a->data['db_conn_failed'] = true;
                        }
 
                        return;
@@ -117,14 +100,6 @@ function install_post(App $a) {
        }
 }
 
-function get_db_errno() {
-       if (class_exists('mysqli')) {
-               return mysqli_connect_errno();
-       } else {
-               return mysql_errno();
-       }
-}
-
 function install_content(App $a) {
 
        global $install_wizard_pass, $db;
@@ -134,30 +109,30 @@ function install_content(App $a) {
 
 
 
-       if (x($a->data,'db_conn_failed')) {
+       if (x($a->data, 'db_conn_failed')) {
                $install_wizard_pass = 2;
-               $wizard_status =  t('Could not connect to database.');
+               $wizard_status = t('Could not connect to database.');
        }
-       if (x($a->data,'db_create_failed')) {
+       if (x($a->data, 'db_create_failed')) {
                $install_wizard_pass = 2;
-               $wizard_status =  t('Could not create table.');
+               $wizard_status = t('Could not create table.');
        }
 
-       $db_return_text="";
-       if (x($a->data,'db_installed')) {
+       $db_return_text = "";
+       if (x($a->data, 'db_installed')) {
                $txt = '<p style="font-size: 130%;">';
                $txt .= t('Your Friendica site database has been installed.') . EOL;
                $db_return_text .= $txt;
        }
 
-       if (x($a->data,'db_failed')) {
+       if (x($a->data, 'db_failed')) {
                $txt = t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
-               $txt .= t('Please see the file "INSTALL.txt".') . EOL ."<hr>" ;
-               $txt .= "<pre>".$a->data['db_failed'] . "</pre>". EOL ;
+               $txt .= t('Please see the file "INSTALL.txt".') . EOL ."<hr>";
+               $txt .= "<pre>".$a->data['db_failed'] . "</pre>". EOL;
                $db_return_text .= $txt;
        }
 
-       if($db && $db->connected) {
+       if ($db && $db->connected) {
                $r = q("SELECT COUNT(*) as `total` FROM `user`");
                if (dbm::is_result($r) && $r[0]['total']) {
                        $tpl = get_markup_template('install.tpl');
@@ -170,11 +145,11 @@ function install_content(App $a) {
                }
        }
 
-       if (x($a->data,'txt') && strlen($a->data['txt'])) {
+       if (x($a->data, 'txt') && strlen($a->data['txt'])) {
                $db_return_text .= manual_config($a);
        }
 
-       if ($db_return_text!="") {
+       if ($db_return_text != "") {
                $tpl = get_markup_template('install.tpl');
                return replace_macros($tpl, array(
                        '$title' => $install_title,
@@ -183,7 +158,7 @@ function install_content(App $a) {
                ));
        }
 
-       switch ($install_wizard_pass){
+       switch ($install_wizard_pass) {
                case 1: { // System check
 
 
@@ -199,7 +174,7 @@ function install_content(App $a) {
 
                        check_keys($checks);
 
-                       if (x($_POST,'phpath')) {
+                       if (x($_POST, 'phpath')) {
                                $phpath = notags(trim($_POST['phpath']));
                        }
 
@@ -208,7 +183,7 @@ function install_content(App $a) {
                        check_htaccess($checks);
 
                        /// @TODO Maybe move this out?
-                       function check_passed($v, $c){
+                       function check_passed($v, $c) {
                                if ($c['required']) {
                                        $v = $v && $c['status'];
                                }
@@ -235,7 +210,7 @@ function install_content(App $a) {
 
                case 2: { // Database config
 
-                       $dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
+                       $dbhost = ((x($_POST, 'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
                        $dbuser = notags(trim($_POST['dbuser']));
                        $dbpass = notags(trim($_POST['dbpass']));
                        $dbdata = notags(trim($_POST['dbdata']));
@@ -273,14 +248,14 @@ function install_content(App $a) {
                }; break;
                case 3: { // Site settings
                        require_once('include/datetime.php');
-                       $dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
+                       $dbhost = ((x($_POST, 'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
                        $dbuser = notags(trim($_POST['dbuser']));
                        $dbpass = notags(trim($_POST['dbpass']));
                        $dbdata = notags(trim($_POST['dbdata']));
                        $phpath = notags(trim($_POST['phpath']));
 
                        $adminmail = notags(trim($_POST['adminmail']));
-                       $timezone = ((x($_POST,'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles');
+                       $timezone = ((x($_POST, 'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles');
                        /* Installed langs */
                        $lang_choices = get_available_languages();
 
@@ -322,7 +297,7 @@ function install_content(App $a) {
  * required : boolean
  * help                : string optional
  */
-function check_add(&$checks, $title, $status, $required, $help){
+function check_add(&$checks, $title, $status, $required, $help) {
        $checks[] = array(
                'title' => $title,
                'status' => $status,
@@ -333,7 +308,7 @@ function check_add(&$checks, $title, $status, $required, $help){
 
 function check_php(&$phpath, &$checks) {
        $passed = $passed2 = $passed3 = false;
-       if (strlen($phpath)){
+       if (strlen($phpath)) {
                $passed = file_exists($phpath);
        } else {
                $phpath = trim(shell_exec('which php'));
@@ -342,24 +317,24 @@ function check_php(&$phpath, &$checks) {
        $help = "";
        if (!$passed) {
                $help .= t('Could not find a command line version of PHP in the web server PATH.'). EOL;
-               $help .= t("If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>") . EOL ;
-               $help .= EOL . EOL ;
+               $help .= t("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>") . EOL;
+               $help .= EOL . EOL;
                $tpl = get_markup_template('field_input.tpl');
                $help .= replace_macros($tpl, array(
                        '$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable. You can leave this blank to continue the installation.')),
                ));
-               $phpath="";
+               $phpath = "";
        }
 
        check_add($checks, t('Command line PHP').($passed?" (<tt>$phpath</tt>)":""), $passed, false, $help);
 
-       if($passed) {
+       if ($passed) {
                $cmd = "$phpath -v";
                $result = trim(shell_exec($cmd));
-               $passed2 = ( strpos($result, "(cli)") !== false );
+               $passed2 = ( strpos($result, "(cli)") !== false);
                list($result) = explode("\n", $result);
                $help = "";
-               if(!$passed2) {
+               if (!$passed2) {
                        $help .= t('PHP executable is not the php cli binary (could be cgi-fgci version)'). EOL;
                        $help .= t('Found PHP version: ')."<tt>$result</tt>";
                }
@@ -373,7 +348,7 @@ function check_php(&$phpath, &$checks) {
                $result = trim(shell_exec($cmd));
                $passed3 = $result == $str;
                $help = "";
-               if(!$passed3) {
+               if (!$passed3) {
                        $help .= t('The command line version of PHP on your system does not have "register_argc_argv" enabled.'). EOL;
                        $help .= t('This is required for message delivery to work.');
                }
@@ -413,12 +388,12 @@ function check_funcs(&$checks) {
        check_add($ck_funcs, t('libCurl PHP module'), true, true, "");
        check_add($ck_funcs, t('GD graphics PHP module'), true, true, "");
        check_add($ck_funcs, t('OpenSSL PHP module'), true, true, "");
-       check_add($ck_funcs, t('mysqli PHP module'), true, true, "");
+       check_add($ck_funcs, t('PDO or MySQLi PHP module'), true, true, "");
        check_add($ck_funcs, t('mb_string PHP module'), true, true, "");
        check_add($ck_funcs, t('XML PHP module'), true, true, "");
        check_add($ck_funcs, t('iconv module'), true, true, "");
 
-       if (function_exists('apache_get_modules')){
+       if (function_exists('apache_get_modules')) {
                if (! in_array('mod_rewrite',apache_get_modules())) {
                        check_add($ck_funcs, t('Apache mod_rewrite module'), false, true, t('Error: Apache webserver mod-rewrite module is required but not installed.'));
                } else {
@@ -426,29 +401,33 @@ function check_funcs(&$checks) {
                }
        }
 
-       if (! function_exists('curl_init')){
-               $ck_funcs[0]['status']= false;
-               $ck_funcs[0]['help']= t('Error: libCURL PHP module required but not installed.');
+       if (! function_exists('curl_init')) {
+               $ck_funcs[0]['status'] = false;
+               $ck_funcs[0]['help'] = t('Error: libCURL PHP module required but not installed.');
        }
-       if (! function_exists('imagecreatefromjpeg')){
-               $ck_funcs[1]['status']= false;
-               $ck_funcs[1]['help']= t('Error: GD graphics PHP module with JPEG support required but not installed.');
+       if (! function_exists('imagecreatefromjpeg')) {
+               $ck_funcs[1]['status'] = false;
+               $ck_funcs[1]['help'] = t('Error: GD graphics PHP module with JPEG support required but not installed.');
        }
        if (! function_exists('openssl_public_encrypt')) {
-               $ck_funcs[2]['status']= false;
-               $ck_funcs[2]['help']= t('Error: openssl PHP module required but not installed.');
+               $ck_funcs[2]['status'] = false;
+               $ck_funcs[2]['help'] = t('Error: openssl PHP module required but not installed.');
+       }
+       if (! function_exists('mysqli_connect') && !class_exists('pdo')) {
+               $ck_funcs[3]['status'] = false;
+               $ck_funcs[3]['help'] = t('Error: PDO or MySQLi PHP module required but not installed.');
        }
-       if (! function_exists('mysqli_connect')){
-               $ck_funcs[3]['status']= false;
-               $ck_funcs[3]['help']= t('Error: mysqli PHP module required but not installed.');
+       if (!function_exists('mysqli_connect') && class_exists('pdo') && !in_array('mysql', PDO::getAvailableDrivers())) {
+               $ck_funcs[3]['status'] = false;
+               $ck_funcs[3]['help'] = t('Error: The MySQL driver for PDO is not installed.');
        }
-       if (! function_exists('mb_strlen')){
-               $ck_funcs[4]['status']= false;
-               $ck_funcs[4]['help']= t('Error: mb_string PHP module required but not installed.');
+       if (! function_exists('mb_strlen')) {
+               $ck_funcs[4]['status'] = false;
+               $ck_funcs[4]['help'] = t('Error: mb_string PHP module required but not installed.');
        }
-       if (! function_exists('iconv_strlen')){
-               $ck_funcs[7]['status']= false;
-               $ck_funcs[7]['help']= t('Error: iconv PHP module required but not installed.');
+       if (! function_exists('iconv_strlen')) {
+               $ck_funcs[7]['status'] = false;
+               $ck_funcs[7]['help'] = t('Error: iconv PHP module required but not installed.');
        }
 
        $checks = array_merge($checks, $ck_funcs);
@@ -467,9 +446,9 @@ function check_htconfig(&$checks) {
        $status = true;
        $help = "";
        if ((file_exists('.htconfig.php') && !is_writable('.htconfig.php')) ||
-               (!file_exists('.htconfig.php') && !is_writable('.')) ) {
+               (!file_exists('.htconfig.php') && !is_writable('.'))) {
 
-               $status=false;
+               $status = false;
                $help = t('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.') .EOL;
                $help .= t('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.').EOL;
                $help .= t('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.').EOL;
@@ -483,9 +462,9 @@ function check_htconfig(&$checks) {
 function check_smarty3(&$checks) {
        $status = true;
        $help = "";
-       if (!is_writable('view/smarty3') ) {
+       if (!is_writable('view/smarty3')) {
 
-               $status=false;
+               $status = false;
                $help = t('Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') .EOL;
                $help .= t('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.').EOL;
                $help .= t('Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder.').EOL;
@@ -502,11 +481,11 @@ function check_htaccess(&$checks) {
        if (function_exists('curl_init')) {
                $test = fetch_url(App::get_baseurl()."/install/testrewrite");
 
-               if ($test!="ok") {
+               if ($test != "ok") {
                        $test = fetch_url(normalise_link(App::get_baseurl()."/install/testrewrite"));
                }
 
-               if ($test!="ok") {
+               if ($test != "ok") {
                        $status = false;
                        $help = t('Url rewrite in .htaccess is not working. Check your server configuration.');
                }
@@ -539,15 +518,15 @@ function check_imagik(&$checks) {
 }
 
 function manual_config(App $a) {
-       $data = htmlentities($a->data['txt'],ENT_COMPAT,'UTF-8');
+       $data = htmlentities($a->data['txt'],ENT_COMPAT, 'UTF-8');
        $o = t('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.');
        $o .= "<textarea rows=\"24\" cols=\"80\" >$data</textarea>";
        return $o;
 }
 
-function load_database_rem($v, $i){
+function load_database_rem($v, $i) {
        $l = trim($i);
-       if (strlen($l)>1 && ($l[0]=="-" || ($l[0]=="/" && $l[1]=="*"))){
+       if (strlen($l)>1 && ($l[0] == "-" || ($l[0] == "/" && $l[1] == "*"))) {
                return $v;
        } else  {
                return $v."\n".$i;
@@ -559,18 +538,6 @@ function load_database($db) {
        require_once("include/dbstructure.php");
        $errors = update_structure(false, true);
 
-/*     $str = file_get_contents('database.sql');
-       $arr = explode(';',$str);
-       $errors = false;
-       foreach($arr as $a) {
-               if(strlen(trim($a))) {
-                       $r = @$db->q(trim($a));
-                       if(false === $r) {
-                               $errors .=  t('Errors encountered creating database tables.') . $a . EOL;
-                       }
-               }
-       }*/
-
        return $errors;
 }
 
@@ -584,5 +551,3 @@ function what_next() {
                .t("Go to your new Friendica node <a href='$baseurl/register'>registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.")
                ."</p>";
 }
-
-
index f5c60e1ed393713c30e87c7f526492f135cb3ddd..67cd23de745ea34979ac245c17b79edbc2c26c2a 100644 (file)
@@ -7,6 +7,8 @@
  *
  */
 
+use Friendica\App;
+
 require_once('include/email.php');
 
 function invite_post(App $a) {
index 8bf922d97c6b11164d7bdaa31d1daaf5ffd11476..f696a96a7ee7d1c10d4965325cfe01a344a6d200 100644 (file)
@@ -15,6 +15,8 @@
  * posting categories go through item_store() instead of this function.
  */
 
+use Friendica\App;
+
 require_once 'include/crypto.php';
 require_once 'include/enotify.php';
 require_once 'include/email.php';
@@ -23,7 +25,7 @@ require_once 'include/files.php';
 require_once 'include/threads.php';
 require_once 'include/text.php';
 require_once 'include/items.php';
-require_once 'include/Scrape.php';
+require_once 'include/probe.php';
 require_once 'include/diaspora.php';
 require_once 'include/Contact.php';
 
@@ -142,7 +144,6 @@ function item_post(App $a) {
                                $parent_contact = get_contact_details_by_url($thrparent[0]["author-link"]);
 
                                if (!isset($parent_contact["nick"])) {
-                                       require_once 'include/Scrape.php';
                                        $probed_contact = probe_url($thrparent[0]["author-link"]);
                                        if ($probed_contact["network"] != NETWORK_FEED) {
                                                $parent_contact = $probed_contact;
@@ -723,6 +724,18 @@ function item_post(App $a) {
        $datarray['last-child'] = 1;
        $datarray['visible'] = 1;
 
+       $datarray['protocol'] = PROTOCOL_DFRN;
+
+       $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $datarray['parent-uri']);
+       if (dbm::is_result($r)) {
+               if ($r['conversation-uri'] != '') {
+                       $datarray['conversation-uri'] = $r['conversation-uri'];
+               }
+               if ($r['conversation-href'] != '') {
+                       $datarray['conversation-href'] = $r['conversation-href'];
+               }
+       }
+
        if ($orig_post) {
                $datarray['edit'] = true;
        }
@@ -762,6 +775,8 @@ function item_post(App $a) {
        // Fill the cache field
        put_item_in_cache($datarray);
 
+       $datarray = store_conversation($datarray);
+
        if ($orig_post) {
                $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `attach` = '%s', `file` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d",
                        dbesc($datarray['title']),
@@ -794,8 +809,7 @@ function item_post(App $a) {
                $post_id = 0;
        }
 
-       q("COMMIT");
-       q("START TRANSACTION;");
+       dba::transaction();
 
        $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,
                                        `owner-name`,`owner-link`,`owner-avatar`, `owner-id`,
@@ -885,7 +899,7 @@ function item_post(App $a) {
        }
 
        if ($post_id == 0) {
-               q("COMMIT");
+               dba::commit();
                logger('mod_item: unable to retrieve post that was just stored.');
                notice(t('System error. Post not saved.') . EOL);
                goaway($return_path);
@@ -1011,7 +1025,7 @@ function item_post(App $a) {
                update_thread($parent, true);
        }
 
-       q("COMMIT");
+       dba::commit();
 
        create_tags_from_item($post_id);
        create_files_from_item($post_id);
@@ -1090,7 +1104,6 @@ function item_content(App $a) {
  * @return boolean true if replaced, false if not replaced
  */
 function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "") {
-       require_once 'include/Scrape.php';
        require_once 'include/socgraph.php';
 
        $replaced = false;
index 1f6a233f3dc26599f8a37152ea71f0fef276952b..c542a540abce6a3ae174d844c8c9f67b4768d082 100755 (executable)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
index 535308903153af6d3cf81ef4d310ccc8705034db..c32f67976bd4ff37a0003663be40ed74fcfe658f 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
-require_once('include/datetime.php');
+use Friendica\App;
 
+require_once('include/datetime.php');
 
 function localtime_post(App $a) {
 
index 38a308634e772467381468fe322dd76840cd980a..48227cc1eaf47aa0d973e71a621f34e134f71ebf 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function lockview_content(App $a) {
 
index 8fd28c72304c9015a3261635d7a2dd5b558026e7..09f1f5d5cc2062d25b0b5ad7a5b05c401ce521dd 100644 (file)
@@ -1,13 +1,19 @@
 <?php
 
+use Friendica\App;
+
 function login_content(App $a) {
-       if(x($_SESSION,'theme'))
+       if (x($_SESSION, 'theme')) {
                unset($_SESSION['theme']);
-       if(x($_SESSION,'mobile-theme'))
+       }
+
+       if (x($_SESSION, 'mobile-theme')) {
                unset($_SESSION['mobile-theme']);
+       }
 
-       if(local_user())
+       if (local_user()) {
                goaway(z_root());
-       return login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
+       }
 
+       return login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
 }
index 455a9b1e2eed697580cd17fb8e4dcfe2b53da43d..37ef3e2f82f6a461bc78d7a38381309a35d67486 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/email.php');
 require_once('include/enotify.php');
 require_once('include/text.php');
index c4839de79213503490372d9881fd8900850827d2..2258fc5ce29337029df97a8fe60389d0659cc5f0 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 function maintenance_content(App $a) {
 
index e85561acfb350fc3d64f462efe8d4d929ae50556..a6ab32c2d8428c713398dc61b6f816d504826b57 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
-require_once("include/text.php");
+use Friendica\App;
 
+require_once("include/text.php");
 
 function manage_post(App $a) {
 
index 6dc0d10a21f5d3340862f54e0fd33615be65b83e..d38dcb8d922026143e32996e04d5552d04c06b2f 100644 (file)
@@ -1,26 +1,26 @@
 <?php
-    use Friendica\Core\Config;
 
-    function manifest_content(App $a) {
+use Friendica\App;
+use Friendica\Core\Config;
 
-               $tpl = get_markup_template('manifest.tpl');
+function manifest_content(App $a) {
 
-               header('Content-type: application/manifest+json');
+       $tpl = get_markup_template('manifest.tpl');
 
-               $touch_icon = Config::get('system', 'touch_icon', 'images/friendica-128.png');
-               if ($touch_icon == '') {
-                       $touch_icon = 'images/friendica-128.png';
-               }
+       header('Content-type: application/manifest+json');
 
-               $o = replace_macros($tpl, array(
-                       '$baseurl' => App::get_baseurl(),
-                       '$touch_icon' => $touch_icon,
-                       '$title' => Config::get('config', 'sitename', 'Friendica'),
-               ));
+       $touch_icon = Config::get('system', 'touch_icon', 'images/friendica-128.png');
+       if ($touch_icon == '') {
+               $touch_icon = 'images/friendica-128.png';
+       }
 
-               echo $o;
+       $o = replace_macros($tpl, array(
+               '$baseurl' => App::get_baseurl(),
+               '$touch_icon' => $touch_icon,
+               '$title' => Config::get('config', 'sitename', 'Friendica'),
+       ));
 
-               killme();
+       echo $o;
 
-       }
-?>
+       killme();
+}
index 44f5141ad889e10df007195db88874743dfb1fff..4119bf8e84315c8b8cbeed8b0dd0c337edf36820 100644 (file)
@@ -1,5 +1,8 @@
 <?php
-include_once('include/text.php');
+
+use Friendica\App;
+
+require_once('include/text.php');
 require_once('include/socgraph.php');
 require_once('include/contact_widgets.php');
 require_once('mod/proxy.php');
index beaa7b1df666af66b426d01f821f0b790f7765d8..76f675f19be2955be49762bcccb127c9fccd7397 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/acl_selectors.php');
 require_once('include/message.php');
 require_once('include/Smilies.php');
@@ -349,7 +351,7 @@ function message_content(App $a) {
 
                $o .= $header;
 
-               $r = q("SELECT count(*) AS `total` FROM `mail`, ANY_VALUE(`created`) AS `created`
+               $r = q("SELECT count(*) AS `total`, ANY_VALUE(`created`) AS `created` FROM `mail`
                        WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `created` DESC",
                        intval(local_user())
                );
index 4cc9522479c182767b60a013ade77205863f0287..3c5d1e35818bfc11658e20cf289d18324bd25d6d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('library/asn1.php');
 
 function modexp_init(App $a) {
index e80a7f0976e6550ac60c20e6b48db9fe63856472..c693e7cdc980872949842a11634544ee60ee143b 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
 
-
 function mood_init(App $a) {
 
        if (! local_user()) {
index 277242afff803f19eecc1241600f849b75ccafdf..460b9c303919074332576f861e48b770370368a2 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function msearch_post(App $a) {
 
        $perpage = (($_POST['n']) ? $_POST['n'] : 80);
index be1b522e9cba1b20d851f1a0ceb03254230c9729..31b20e8913769bb56671ae58a1af37e606ec6475 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once("include/nav.php");
 
 function navigation_content(App $a) {
index db4bb91309d84b874850432c7461104c74ba62b6..0d37d4d2e25db10b2a0e4afe46992f507580da16 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 function network_init(App $a) {
        if (! local_user()) {
                notice( t('Permission denied.') . EOL);
@@ -792,7 +795,7 @@ function network_content(App $a, $update = 0) {
 /**
  * @brief Get the network tabs menu
  *
- * @param app $a The global App
+ * @param App $a The global App
  * @return string Html of the networktab
  */
 function network_tabs(App $a) {
index a5e41f1e2444204dd95e174b3390b83eaf59b248..f470327cded444638b9d1eb092f82bde91bcf82e 100644 (file)
@@ -1,83 +1,54 @@
 <?php
 
-function newmember_content(App $a) {
+use Friendica\App;
 
+function newmember_content(App $a) {
 
        $o = '<h1>' . t('Welcome to Friendica') . '</h1>';
-
        $o .= '<h3>' . t('New Member Checklist') . '</h3>';
-
        $o .= '<div style="font-size: 120%;">';
-
        $o .= t('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.');
-
        $o .= '<h4>' . t('Getting Started') . '</h4>';
-
        $o .= '<ul>';
-
        $o .= '<li> ' . '<a target="newmember" href="help/guide">' . t('Friendica Walk-Through') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '</ul>';
-
        $o .= '<h4>' . t('Settings') . '</h4>';
-
        $o .= '<ul>';
-
        $o .= '<li>' . '<a target="newmember" href="settings">' . t('Go to Your Settings') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '<li>' . t('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.') . '</li>' . EOL;
-
        $o .= '</ul>';
-
        $o .= '<h4>' . t('Profile') . '</h4>';
-
        $o .= '<ul>';
-
        $o .= '<li>' . '<a target="newmember" href="profile_photo">' . t('Upload Profile Photo') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '<li>' . '<a target="newmember" href="profiles">' . t('Edit Your Profile') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '<li>' . '<a target="newmember" href="profiles">' . t('Profile Keywords') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '</ul>';
-
        $o .= '<h4>' . t('Connecting') . '</h4>';
-
        $o .= '<ul>';
 
-    $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
+       $mail_disabled = ((function_exists('imap_open') && (!get_config('system', 'imap_disabled'))) ? 0 : 1);
 
-       if(! $mail_disabled)
+       if (!$mail_disabled) {
                $o .= '<li>' . '<a target="newmember" href="settings/connectors">' . t('Importing Emails') . '</a><br />' . t('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') . '</li>' . EOL;
+       }
 
        $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Go to Your Contacts Page') . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '<li>' . '<a target="newmember" href="directory">' . t("Go to Your Site's Directory") . '</a><br />' . t('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.') . '</li>' . EOL;
-
        $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Finding New People') . '</a><br />' . t("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.") . '</li>' . EOL;
-
        $o .= '</ul>';
-
        $o .= '<h4>' . t('Groups') . '</h4>';
-
        $o .= '<ul>';
-
        $o .= '<li>' . '<a target="newmember" href="contacts">' . t('Group Your Contacts') . '</a><br />' . t('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.') . '</li>' . EOL;
 
-       if(get_config('system', 'newuser_private')) {
+       if (get_config('system', 'newuser_private')) {
                $o .= '<li>' . '<a target="newmember" href="help/Groups-and-Privacy">' . t("Why Aren't My Posts Public?") . '</a><br />' . t("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.") . '</li>' . EOL;
        }
 
        $o .= '</ul>';
-
        $o .= '<h4>' . t('Getting Help') . '</h4>';
-
        $o .= '<ul>';
-
        $o .= '<li>' . '<a target="newmember" href="help">' . t('Go to the Help Section') . '</a><br />' . t('Our <strong>help</strong> pages may be consulted for detail on other program features and resources.') . '</li>' . EOL;
-
        $o .= '</ul>';
-
        $o .= '</div>';
 
        return $o;
index 7f010cee416afbf5e75b8b63ead69ccb51a2b7b5..5d8e8f2a20f434f0bb74e7f0b49431da206aba8e 100644 (file)
@@ -5,7 +5,8 @@
  * Documentation: http://nodeinfo.diaspora.software/schema.html
 */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/plugin.php';
 
@@ -251,5 +252,3 @@ function nodeinfo_cron() {
         logger('cron_end');
        Config::set('nodeinfo', 'last_calucation', time());
 }
-
-?>
index 11b7bdc7aa486c0e512dee4782c159a97090fc24..ecbfb9176e1397be548ec5ddb3be1bf8620194fd 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/Contact.php');
 require_once('include/socgraph.php');
 require_once('include/contact_selectors.php');
index 83ab71ce15884f90cb423172f638eab0e6dba000..a269d7369af90b21ff7f518528afb75caf898e43 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function noscrape_init(App $a) {
 
        if($a->argc > 1)
index c7cfe8d70f1a2d3e13f98249785b6fcf9073a7b1..835627586cada10d58b75113a1783e4a852f4386 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function notes_init(App $a) {
 
        if (! local_user()) {
index b7029397b5f145c55970dbbb9ff4803b64d35b78..1114b9a5a452ed4eec5a5a70048c4ab8755623c3 100644 (file)
@@ -1,20 +1,21 @@
 <?php
-       /* identi.ca -> friendica items permanent-url compatibility */
 
-       function notice_init(App $a) {
-               $id = $a->argv[1];
-               $r = q("SELECT user.nickname FROM user LEFT JOIN item ON item.uid=user.uid WHERE item.id=%d",
-                               intval($id)
-                               );
-               if (dbm::is_result($r)){
-                       $nick = $r[0]['nickname'];
-                       $url = App::get_baseurl()."/display/$nick/$id";
-                       goaway($url);
-               } else {
-                       $a->error = 404;
-                       notice( t('Item not found.') . EOL);
+/* identi.ca -> friendica items permanent-url compatibility */
 
-               }
-               return;
+use Friendica\App;
 
+function notice_init(App $a) {
+
+       $id = $a->argv[1];
+       $r = q("SELECT `user`.`nickname` FROM `user` LEFT JOIN `item` ON `item`.`uid` = `user`.`uid` WHERE `item`.`id` = %d", intval($id));
+       if (dbm::is_result($r)) {
+               $nick = $r[0]['nickname'];
+               $url = App::get_baseurl() . "/display/$nick/$id";
+               goaway($url);
+       } else {
+               $a->error = 404;
+               notice(t('Item not found.') . EOL);
        }
+
+       return;
+}
index bab5fd6274e4ed2c5e47cb849f1195747377beea..396361e91b5bda012716767d3c2f677a8d2c6e29 100644 (file)
@@ -5,6 +5,8 @@
  * @brief The notifications module
  */
 
+use Friendica\App;
+
 require_once("include/NotificationsManager.php");
 require_once("include/contact_selectors.php");
 require_once("include/network.php");
@@ -223,6 +225,12 @@ function notifications_content(App $a) {
 
                                        $header .= " (".network_to_name($it['network'], $it['url']).")";
 
+                                       if ($it['network'] != NETWORK_DIASPORA) {
+                                               $discard = t('Discard');
+                                       } else {
+                                               $discard = '';
+                                       }
+
                                        $notif_content[] = replace_macros($tpl, array(
                                                '$header' => htmlentities($header),
                                                '$str_notifytype' => t('Notification type: '),
@@ -255,7 +263,7 @@ function notifications_content(App $a) {
                                                '$approve' => t('Approve'),
                                                '$note' => $it['note'],
                                                '$ignore' => t('Ignore'),
-                                               '$discard' => t('Discard'),
+                                               '$discard' => $discard,
 
                                        ));
                                        break;
index 0026f5ca6eb6f66556c35326966604e81d6f9899..e3806819342b12dcf67c8cd6c73ea7f2d48b9c5b 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once('include/NotificationsManager.php');
 
 function notify_init(App $a) {
index 7770c62fb0300356dd26476090638e32d88c16c2..3266ad963e110a0956a69a36844252e13f2f0397 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once("include/oembed.php");
 
 function oembed_content(App $a) {
index 4f2d7e0eb8449e97a0c48f8e1332367b05f46d97..930caac7e459f2e2a19aa92d46d4fe2266780c7d 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 function oexchange_init(App $a) {
 
        if (($a->argc > 1) && ($a->argv[1] === 'xrd')) {
index b45cd97975e3f7b838b3eb2283cafcd74a4d9f3c..5707b1b72891cc7e28874869aeabc48110a15a8f 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 
+use Friendica\App;
 
 require_once('library/openid.php');
 
-
 function openid_content(App $a) {
 
        $noid = get_config('system','no_openid');
@@ -73,10 +73,10 @@ function openid_content(App $a) {
                                                $first = notags(trim($v));
                                        }
                                        if($k === 'namePerson') {
-                                               $args .= '&username=' . notags(trim($v));
+                                               $args .= '&username=' . urlencode(notags(trim($v)));
                                        }
                                        if ($k === 'contact/email') {
-                                               $args .= '&email=' . notags(trim($v));
+                                               $args .= '&email=' . urlencode(notags(trim($v)));
                                        }
                                        if ($k === 'media/image/aspect11') {
                                                $photosq = bin2hex(trim($v));
@@ -87,22 +87,22 @@ function openid_content(App $a) {
                                }
                        }
                        if ($nick) {
-                               $args .= '&nickname=' . $nick;
+                               $args .= '&nickname=' . urlencode($nick);
                        }
                        elseif ($first) {
-                               $args .= '&nickname=' . $first;
+                               $args .= '&nickname=' . urlencode($first);
                        }
 
                        if ($photosq) {
-                               $args .= '&photo=' . $photosq;
+                               $args .= '&photo=' . urlencode($photosq);
                        }
                        elseif ($photo) {
-                               $args .= '&photo=' . $photo;
+                               $args .= '&photo=' . urlencode($photo);
                        }
 
-                       $args .= '&openid_url=' . notags(trim($authid));
+                       $args .= '&openid_url=' . urlencode(notags(trim($authid)));
 
-                       goaway(App::get_baseurl() . '/register' . $args);
+                       goaway(App::get_baseurl() . '/register?' . $args);
 
                        // NOTREACHED
                }
index a599ddc1eddadfea648c9d755ed7a6ca1783a6a8..dc7adeb05c264eb98e627c5745bf64725d4b76e3 100644 (file)
@@ -1,18 +1,19 @@
 <?php
-    function opensearch_content(App $a) {
 
-               $tpl = get_markup_template('opensearch.tpl');
+use Friendica\App;
 
-               header("Content-type: application/opensearchdescription+xml");
+function opensearch_content(App $a) {
 
-               $o = replace_macros($tpl, array(
-                       '$baseurl' => App::get_baseurl(),
-                       '$nodename' => $a->get_hostname(),
-               ));
+       $tpl = get_markup_template('opensearch.tpl');
 
-               echo $o;
+       header("Content-type: application/opensearchdescription+xml");
 
-               killme();
+       $o = replace_macros($tpl, array(
+               '$baseurl' => App::get_baseurl(),
+               '$nodename' => $a->get_hostname(),
+       ));
 
-       }
-?>
\ No newline at end of file
+       echo $o;
+
+       killme();
+}
index a9f7c3a909111ed329904b990807db31b1355bda..0b399acf29475cb6e00edcc67ba2060b3ce76d0c 100644 (file)
@@ -1,7 +1,9 @@
 <?php
 
-require_once('include/Scrape.php');
-require_once('include/follow.php');
+use Friendica\App;
+
+require_once 'include/probe.php';
+require_once 'include/follow.php';
 
 function ostatus_subscribe_content(App $a) {
 
index 3cd7a9eb7d4676b7c631014e581d50a9eab17943..f66dd43a23e41a0c74e35a79b8ba3baec3fb90dc 100644 (file)
--- a/mod/p.php
+++ b/mod/p.php
@@ -2,6 +2,9 @@
 /*
 This file is part of the Diaspora protocol. It is used for fetching single public posts.
 */
+
+use Friendica\App;
+
 require_once("include/diaspora.php");
 
 function p_init($a){
index 77529714f20f56a83cadcee7e075be5b8d07b2aa..4fe9256349fe9a863509984d77995fd13c7e7945 100644 (file)
@@ -10,7 +10,8 @@
  * @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
 */
 
-use \Friendica\ParseUrl;
+use Friendica\App;
+use Friendica\ParseUrl;
 
 require_once("include/items.php");
 
index 6562599ca3cf0ccc5b19e997b2734fcbdd408e0d..7506834cf502b27513371e42ec4dc6831adbd8de 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/Photo.php');
 
index a22f919c89f70168a7e8a6fad8b712e481d66f9f..bf21b3437a3d625c9c388a5921dd5146cc37e088 100644 (file)
@@ -1,4 +1,9 @@
 <?php
+
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Network\Probe;
+
 require_once 'include/Photo.php';
 require_once 'include/photos.php';
 require_once 'include/items.php';
@@ -8,9 +13,6 @@ require_once 'include/security.php';
 require_once 'include/redir.php';
 require_once 'include/tags.php';
 require_once 'include/threads.php';
-require_once 'include/Probe.php';
-
-use \Friendica\Core\Config;
 
 function photos_init(App $a) {
 
@@ -980,9 +982,9 @@ function photos_content(App $a) {
                return;
        }
 
-       require_once('include/bbcode.php');
-       require_once('include/security.php');
-       require_once('include/conversation.php');
+       require_once 'include/bbcode.php';
+       require_once 'include/security.php';
+       require_once 'include/conversation.php';
 
        if (! x($a->data,'user')) {
                notice( t('No photos selected') . EOL );
index ba496a70bd87bdbbe7d00f6431077c8be192eabe..17180c74ee98dc0bdcdbe454ec4eeb7af2befd91 100644 (file)
@@ -1,5 +1,8 @@
 <?php
-require_once("include/datetime.php");
+
+use Friendica\App;
+
+require_once('include/datetime.php');
 require_once('include/bbcode.php');
 require_once('include/ForumManager.php');
 require_once('include/group.php');
@@ -305,8 +308,18 @@ function ping_init(App $a)
 
                // sort notifications by $[]['date']
                $sort_function = function($a, $b) {
-                       $adate = date($a['date']);
-                       $bdate = date($b['date']);
+                       $adate = strtotime($a['date']);
+                       $bdate = strtotime($b['date']);
+
+                       // Unseen messages are kept at the top
+                       // The value 31536000 means one year. This should be enough :-)
+                       if (!$a['seen']) {
+                               $adate += 31536000;
+                       }
+                       if (!$b['seen']) {
+                               $bdate += 31536000;
+                       }
+
                        if ($adate == $bdate) {
                                return 0;
                        }
index 30648acab67c05159721ab1d4279b9181428d6e0..97f518a1a55cbcc1a8fc02b6f605f5e35a824a17 100644 (file)
@@ -1,13 +1,15 @@
 <?php
+
 // See here for a documentation for portable contacts:
 // https://web.archive.org/web/20160405005550/http://portablecontacts.net/draft-spec.html
 
-function poco_init(App $a) {
-       require_once("include/bbcode.php");
+use Friendica\App;
+use Friendica\Core\Config;
 
+function poco_init(App $a) {
        $system_mode = false;
 
-       if (intval(get_config('system','block_public')) || (get_config('system','block_local_dir'))) {
+       if (intval(Config::get('system', 'block_public')) || (Config::get('system', 'block_local_dir'))) {
                http_status_exit(401);
        }
 
@@ -28,6 +30,7 @@ function poco_init(App $a) {
        $global = false;
 
        if ($a->argc > 1 && $a->argv[1] === '@server') {
+               require_once 'include/socgraph.php';
                // List of all servers that this server knows
                $ret = poco_serverlist();
                header('Content-type: application/json');
@@ -52,16 +55,16 @@ function poco_init(App $a) {
                $cid = intval($a->argv[4]);
        }
 
-       if (!$system_mode AND !$global) {
-               $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`
+       if (! $system_mode AND ! $global) {
+               $users = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`
                        where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1",
                        dbesc($user)
                );
-               if (! dbm::is_result($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) {
+               if (! dbm::is_result($users) || $users[0]['hidewall'] || $users[0]['hide-friends']) {
                        http_status_exit(404);
                }
 
-               $user = $r[0];
+               $user = $users[0];
        }
 
        if ($justme) {
@@ -71,23 +74,23 @@ function poco_init(App $a) {
 //             $sql_extra = " AND `contact`.`self` = 0 ";
 
        if ($cid) {
-               $sql_extra = sprintf(" AND `contact`.`id` = %d ",intval($cid));
+               $sql_extra = sprintf(" AND `contact`.`id` = %d ", intval($cid));
        }
-       if (x($_GET,'updatedSince')) {
-               $update_limit =  date("Y-m-d H:i:s",strtotime($_GET['updatedSince']));
+       if (x($_GET, 'updatedSince')) {
+               $update_limit = date("Y-m-d H:i:s", strtotime($_GET['updatedSince']));
        }
        if ($global) {
-               $r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')",
+               $contacts = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')",
                        dbesc($update_limit),
                        dbesc(NETWORK_DFRN),
                        dbesc(NETWORK_DIASPORA),
                        dbesc(NETWORK_OSTATUS)
                );
        } elseif ($system_mode) {
-               $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1
+               $contacts = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1
                        AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) ");
        } else {
-               $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
+               $contacts = q("SELECT count(*) AS `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
                        AND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`)
                        AND `network` IN ('%s', '%s', '%s', '%s') $sql_extra",
                        intval($user['uid']),
@@ -97,8 +100,8 @@ function poco_init(App $a) {
                        dbesc(NETWORK_STATUSNET)
                );
        }
-       if (dbm::is_result($r)) {
-               $totalResults = intval($r[0]['total']);
+       if (dbm::is_result($contacts)) {
+               $totalResults = intval($contacts[0]['total']);
        } else {
                $totalResults = 0;
        }
@@ -106,11 +109,11 @@ function poco_init(App $a) {
        if (! $startIndex) {
                $startIndex = 0;
        }
-       $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults);
+       $itemsPerPage = ((x($_GET, 'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults);
 
        if ($global) {
                logger("Start global query", LOGGER_DEBUG);
-               $r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND NOT `hide` AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure`
+               $contacts = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND NOT `hide` AND `network` IN ('%s', '%s', '%s') AND `updated` > `last_failure`
                        ORDER BY `updated` DESC LIMIT %d, %d",
                        dbesc($update_limit),
                        dbesc(NETWORK_DFRN),
@@ -121,7 +124,7 @@ function poco_init(App $a) {
                );
        } elseif ($system_mode) {
                logger("Start system mode query", LOGGER_DEBUG);
-               $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`,
+               $contacts = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`,
                                `profile`.`gender` AS `pgender`, `profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`,
                                `profile`.`postal-code` AS `ppostalcode`, `profile`.`country-name` AS `pcountry`, `user`.`account-type`
                        FROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid`
@@ -132,8 +135,8 @@ function poco_init(App $a) {
                        intval($itemsPerPage)
                );
        } else {
-               logger("Start query for user ".$user['nickname'], LOGGER_DEBUG);
-               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
+               logger("Start query for user " . $user['nickname'], LOGGER_DEBUG);
+               $contacts = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
                        AND (`success_update` >= `failure_update` OR `last-item` >= `failure_update`)
                        AND `network` IN ('%s', '%s', '%s', '%s') $sql_extra LIMIT %d, %d",
                        intval($user['uid']),
@@ -148,13 +151,13 @@ function poco_init(App $a) {
        logger("Query done", LOGGER_DEBUG);
 
        $ret = array();
-       if (x($_GET,'sorted')) {
+       if (x($_GET, 'sorted')) {
                $ret['sorted'] = false;
        }
-       if (x($_GET,'filtered')) {
+       if (x($_GET, 'filtered')) {
                $ret['filtered'] = false;
        }
-       if (x($_GET,'updatedSince') AND !$global) {
+       if (x($_GET, 'updatedSince') AND ! $global) {
                $ret['updatedSince'] = false;
        }
        $ret['startIndex']   = (int) $startIndex;
@@ -180,134 +183,135 @@ function poco_init(App $a) {
                'generation' => false
        );
 
-       if ((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) {
+       if ((! x($_GET, 'fields')) || ($_GET['fields'] === '@all')) {
                foreach ($fields_ret as $k => $v) {
                        $fields_ret[$k] = true;
                }
        } else {
-               $fields_req = explode(',',$_GET['fields']);
+               $fields_req = explode(',', $_GET['fields']);
                foreach ($fields_req as $f) {
                        $fields_ret[trim($f)] = true;
                }
        }
 
-       if (is_array($r)) {
-               if (dbm::is_result($r)) {
-                       foreach ($r as $rr) {
-                               if (!isset($rr['generation'])) {
+       if (is_array($contacts)) {
+               if (dbm::is_result($contacts)) {
+                       foreach ($contacts as $contact) {
+                               if (! isset($contact['generation'])) {
                                        if ($global) {
-                                               $rr['generation'] = 3;
+                                               $contact['generation'] = 3;
                                        } elseif ($system_mode) {
-                                               $rr['generation'] = 1;
+                                               $contact['generation'] = 1;
                                        } else {
-                                               $rr['generation'] = 2;
+                                               $contact['generation'] = 2;
                                        }
                                }
 
-                               if (($rr['about'] == "") AND isset($rr['pabout'])) {
-                                       $rr['about'] = $rr['pabout'];
+                               if (($contact['about'] == "") AND isset($contact['pabout'])) {
+                                       $contact['about'] = $contact['pabout'];
                                }
-                               if ($rr['location'] == "") {
-                                       if (isset($rr['plocation'])) {
-                                               $rr['location'] = $rr['plocation'];
+                               if ($contact['location'] == "") {
+                                       if (isset($contact['plocation'])) {
+                                               $contact['location'] = $contact['plocation'];
                                        }
-                                       if (isset($rr['pregion']) AND ($rr['pregion'] != "")) {
-                                               if ($rr['location'] != "") {
-                                                       $rr['location'] .= ", ";
+                                       if (isset($contact['pregion']) AND ( $contact['pregion'] != "")) {
+                                               if ($contact['location'] != "") {
+                                                       $contact['location'] .= ", ";
                                                }
-                                               $rr['location'] .= $rr['pregion'];
+                                               $contact['location'] .= $contact['pregion'];
                                        }
 
-                                       if (isset($rr['pcountry']) AND ($rr['pcountry'] != "")) {
-                                               if ($rr['location'] != "") {
-                                                       $rr['location'] .= ", ";
+                                       if (isset($contact['pcountry']) AND ( $contact['pcountry'] != "")) {
+                                               if ($contact['location'] != "") {
+                                                       $contact['location'] .= ", ";
                                                }
-                                               $rr['location'] .= $rr['pcountry'];
+                                               $contact['location'] .= $contact['pcountry'];
                                        }
                                }
 
-                               if (($rr['gender'] == "") AND isset($rr['pgender'])) {
-                                       $rr['gender'] = $rr['pgender'];
+                               if (($contact['gender'] == "") AND isset($contact['pgender'])) {
+                                       $contact['gender'] = $contact['pgender'];
                                }
-                               if (($rr['keywords'] == "") AND isset($rr['pub_keywords'])) {
-                                       $rr['keywords'] = $rr['pub_keywords'];
+                               if (($contact['keywords'] == "") AND isset($contact['pub_keywords'])) {
+                                       $contact['keywords'] = $contact['pub_keywords'];
                                }
-                               if (isset($rr['account-type'])) {
-                                       $rr['contact-type'] = $rr['account-type'];
+                               if (isset($contact['account-type'])) {
+                                       $contact['contact-type'] = $contact['account-type'];
                                }
-                               $about = Cache::get("about:".$rr['updated'].":".$rr['nurl']);
+                               $about = Cache::get("about:" . $contact['updated'] . ":" . $contact['nurl']);
                                if (is_null($about)) {
-                                       $about = bbcode($rr['about'], false, false);
-                                       Cache::set("about:".$rr['updated'].":".$rr['nurl'],$about);
+                                       require_once 'include/bbcode.php';
+                                       $about = bbcode($contact['about'], false, false);
+                                       Cache::set("about:" . $contact['updated'] . ":" . $contact['nurl'], $about);
                                }
 
                                // Non connected persons can only see the keywords of a Diaspora account
-                               if ($rr['network'] == NETWORK_DIASPORA) {
-                                       $rr['location'] = "";
+                               if ($contact['network'] == NETWORK_DIASPORA) {
+                                       $contact['location'] = "";
                                        $about = "";
-                                       $rr['gender'] = "";
+                                       $contact['gender'] = "";
                                }
 
                                $entry = array();
                                if ($fields_ret['id']) {
-                                       $entry['id'] = (int)$rr['id'];
+                                       $entry['id'] = (int)$contact['id'];
                                }
                                if ($fields_ret['displayName']) {
-                                       $entry['displayName'] = $rr['name'];
+                                       $entry['displayName'] = $contact['name'];
                                }
                                if ($fields_ret['aboutMe']) {
                                        $entry['aboutMe'] = $about;
                                }
                                if ($fields_ret['currentLocation']) {
-                                       $entry['currentLocation'] = $rr['location'];
+                                       $entry['currentLocation'] = $contact['location'];
                                }
                                if ($fields_ret['gender']) {
-                                       $entry['gender'] = $rr['gender'];
+                                       $entry['gender'] = $contact['gender'];
                                }
                                if ($fields_ret['generation']) {
-                                       $entry['generation'] = (int)$rr['generation'];
+                                       $entry['generation'] = (int)$contact['generation'];
                                }
                                if ($fields_ret['urls']) {
-                                       $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile'));
-                                       if ($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) {
-                                               $entry['urls'][] = array('value' => 'acct:' . $rr['addr'], 'type' => 'webfinger');
+                                       $entry['urls'] = array(array('value' => $contact['url'], 'type' => 'profile'));
+                                       if ($contact['addr'] && ($contact['network'] !== NETWORK_MAIL)) {
+                                               $entry['urls'][] = array('value' => 'acct:' . $contact['addr'], 'type' => 'webfinger');
                                        }
                                }
                                if ($fields_ret['preferredUsername']) {
-                                       $entry['preferredUsername'] = $rr['nick'];
+                                       $entry['preferredUsername'] = $contact['nick'];
                                }
                                if ($fields_ret['updated']) {
-                                       if (!$global) {
-                                               $entry['updated'] = $rr['success_update'];
+                                       if (! $global) {
+                                               $entry['updated'] = $contact['success_update'];
 
-                                               if ($rr['name-date'] > $entry['updated']) {
-                                                       $entry['updated'] = $rr['name-date'];
+                                               if ($contact['name-date'] > $entry['updated']) {
+                                                       $entry['updated'] = $contact['name-date'];
                                                }
-                                               if ($rr['uri-date'] > $entry['updated']) {
-                                                       $entry['updated'] = $rr['uri-date'];
+                                               if ($contact['uri-date'] > $entry['updated']) {
+                                                       $entry['updated'] = $contact['uri-date'];
                                                }
-                                               if ($rr['avatar-date'] > $entry['updated']) {
-                                                       $entry['updated'] = $rr['avatar-date'];
+                                               if ($contact['avatar-date'] > $entry['updated']) {
+                                                       $entry['updated'] = $contact['avatar-date'];
                                                }
                                        } else {
-                                               $entry['updated'] = $rr['updated'];
+                                               $entry['updated'] = $contact['updated'];
                                        }
                                        $entry['updated'] = date("c", strtotime($entry['updated']));
                                }
                                if ($fields_ret['photos']) {
-                                       $entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile'));
+                                       $entry['photos'] = array(array('value' => $contact['photo'], 'type' => 'profile'));
                                }
                                if ($fields_ret['network']) {
-                                       $entry['network'] = $rr['network'];
+                                       $entry['network'] = $contact['network'];
                                        if ($entry['network'] == NETWORK_STATUSNET) {
                                                $entry['network'] = NETWORK_OSTATUS;
                                        }
-                                       if (($entry['network'] == "") AND ($rr['self'])) {
+                                       if (($entry['network'] == "") AND ($contact['self'])) {
                                                $entry['network'] = NETWORK_DFRN;
                                        }
                                }
                                if ($fields_ret['tags']) {
-                                       $tags = str_replace(","," ",$rr['keywords']);
+                                       $tags = str_replace(",", " ", $contact['keywords']);
                                        $tags = explode(" ", $tags);
 
                                        $cleaned = array();
@@ -327,23 +331,23 @@ function poco_init(App $a) {
                                        //if (isset($rr['paddress']))
                                        //       $entry['address']['streetAddress'] = $rr['paddress'];
 
-                                       if (isset($rr['plocation'])) {
-                                                $entry['address']['locality'] = $rr['plocation'];
+                                       if (isset($contact['plocation'])) {
+                                               $entry['address']['locality'] = $contact['plocation'];
                                        }
-                                       if (isset($rr['pregion'])) {
-                                                $entry['address']['region'] = $rr['pregion'];
+                                       if (isset($contact['pregion'])) {
+                                               $entry['address']['region'] = $contact['pregion'];
                                        }
                                        // See above
                                        //if (isset($rr['ppostalcode']))
                                        //       $entry['address']['postalCode'] = $rr['ppostalcode'];
 
-                                       if (isset($rr['pcountry'])) {
-                                                $entry['address']['country'] = $rr['pcountry'];
+                                       if (isset($contact['pcountry'])) {
+                                               $entry['address']['country'] = $contact['pcountry'];
                                        }
                                }
 
                                if ($fields_ret['contactType']) {
-                                       $entry['contactType'] = intval($rr['contact-type']);
+                                       $entry['contactType'] = intval($contact['contact-type']);
                                }
                                $ret['entry'][] = $entry;
                        }
@@ -357,7 +361,7 @@ function poco_init(App $a) {
 
        if ($format === 'xml') {
                header('Content-type: text/xml');
-               echo replace_macros(get_markup_template('poco_xml.tpl'),array_xmlify(array('$response' => $ret)));
+               echo replace_macros(get_markup_template('poco_xml.tpl'), array_xmlify(array('$response' => $ret)));
                killme();
        }
        if ($format === 'json') {
index 5161129b31c38f2c9dec070cd98f4b290a75e2fa..83f3bf1c735894fcfd37b058f45975387ad55e09 100644 (file)
@@ -1,7 +1,6 @@
-<?php /** @file */
+<?php
 
 /**
- *
  * Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book
  * This function can be invoked with the required arguments (verb and cid and private and possibly parent) silently via ajax or
  * other web request. You must be logged in and connected to a profile.
  *
  * private creates a private conversation with the recipient. Otherwise your profile's default post privacy is used.
  *
+ * @file mod/poke.php
  */
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
 
-
 function poke_init(App $a) {
 
        if (! local_user()) {
index c8a88e66cd329c5bd853084f638a33a52e29e1fb..bfdc62ab7942706b84485281c98aaef8986a3eb7 100644 (file)
@@ -4,6 +4,7 @@
  * Zot endpoint
  */
 
+use Friendica\App;
 
 require_once('include/salmon.php');
 require_once('include/crypto.php');
index 6dd6b781ac3837e25db989ea261f6650be9d739d..b4eaa0553691a0492142e33fde68dbf65987ca94 100644 (file)
@@ -1,22 +1,24 @@
 <?php
 
+use Friendica\App;
+
 function pretheme_init(App $a) {
 
-       if($_REQUEST['theme']) {
+       if ($_REQUEST['theme']) {
                $theme = $_REQUEST['theme'];
                $info = get_theme_info($theme);
-               if($info) {
+               if ($info) {
                        // unfortunately there will be no translation for this string
                        $desc = $info['description'];
                        $version = $info['version'];
                        $credits = $info['credits'];
-               }
-               else {
+               } else {
                        $desc = '';
                        $version = '';
                        $credits = '';
                }
                echo json_encode(array('img' => get_theme_screenshot($theme), 'desc' => $desc, 'version' => $version, 'credits' => $credits));
        }
+
        killme();
 }
index 8c951a7fcfd62f63f9c3fbe5bda5a02af735ad65..abeccef446555f5f786db535fdb0dd2f7fd2580d 100644 (file)
@@ -1,31 +1,32 @@
 <?php
 
-require_once('include/Scrape.php');
+use Friendica\App;
+
+require_once 'include/probe.php';
 
 function probe_content(App $a) {
 
        if (!local_user()) {
-               http_status_exit(403,
-                               array("title" => t("Public access denied."),
-                                       "description" => t("Only logged in users are permitted to perform a probing.")));
+               http_status_exit(403, array("title" => t("Public access denied."),
+                       "description" => t("Only logged in users are permitted to perform a probing.")));
                killme();
        }
 
        $o .= '<h3>Probe Diagnostic</h3>';
 
        $o .= '<form action="probe" method="get">';
-       $o .= 'Lookup address: <input type="text" style="width: 250px;" name="addr" value="' . $_GET['addr'] .'" />';
+       $o .= 'Lookup address: <input type="text" style="width: 250px;" name="addr" value="' . $_GET['addr'] . '" />';
        $o .= '<input type="submit" name="submit" value="Submit" /></form>';
 
        $o .= '<br /><br />';
 
-       if(x($_GET,'addr')) {
-
+       if (x($_GET, 'addr')) {
                $addr = trim($_GET['addr']);
                $res = probe_url($addr);
                $o .= '<pre>';
-               $o .= str_replace("\n",'<br />',print_r($res,true));
+               $o .= str_replace("\n", '<br />', print_r($res, true));
                $o .= '</pre>';
        }
+
        return $o;
 }
index a83cb076f26b883a04504be31e9a5974e95ed64d..7a11e9bc6b1fe80a261b5328ac77400afecf8bc8 100644 (file)
@@ -1,9 +1,10 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/contact_widgets.php');
 require_once('include/redir.php');
 
-
 function profile_init(App $a) {
 
        if(! x($a->page,'aside'))
@@ -149,6 +150,7 @@ function profile_content(App $a, $update = 0) {
        }
 
        $is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false);
+       $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user();
 
        if ($a->profile['hidewall'] && (! $is_owner) && (! $remote_contact)) {
                notice( t('Access to this profile has been restricted.') . EOL);
@@ -195,9 +197,9 @@ function profile_content(App $a, $update = 0) {
                                'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
                                'profile_uid' => $a->profile['profile_uid'],
                                'acl_data' => ( $is_owner ? construct_acl_data($a, $a->user) : '' ), // For non-Javascript ACL selector
-               );
+                       );
 
-               $o .= status_editor($a,$x);
+                       $o .= status_editor($a,$x);
                }
        }
 
@@ -209,6 +211,16 @@ function profile_content(App $a, $update = 0) {
 
 
        if ($update) {
+               $last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0);
+
+               // If the page user is the owner of the page we should query for unseen
+               // items. Otherwise use a timestamp of the last succesful update request.
+               if ($is_owner || !$last_updated) {
+                       $sql_extra4 = " AND `item`.`unseen`";
+               } else {
+                       $gmupdate = gmdate("Y-m-d H:i:s", $last_updated);
+                       $sql_extra4 = " AND `item`.`received` > '" . $gmupdate . "'";
+               }
 
                $r = q("SELECT distinct(parent) AS `item_id`, `item`.`network` AS `item_network`, `item`.`created`
                        FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
@@ -217,13 +229,18 @@ function profile_content(App $a, $update = 0) {
                        (`item`.`deleted` = 0 OR item.verb = '" . ACTIVITY_LIKE ."'
                        OR item.verb = '" . ACTIVITY_DISLIKE . "' OR item.verb = '" . ACTIVITY_ATTEND . "'
                        OR item.verb = '" . ACTIVITY_ATTENDNO . "' OR item.verb = '" . ACTIVITY_ATTENDMAYBE . "')
-                       AND `item`.`moderated` = 0 and `item`.`unseen` = 1
+                       AND `item`.`moderated` = 0
                        AND `item`.`wall` = 1
+                       $sql_extra4
                        $sql_extra
                        ORDER BY `item`.`created` DESC",
                        intval($a->profile['profile_uid'])
                );
 
+               if (!dbm::is_result($r)) {
+                       return '';
+               }
+
        } else {
                $sql_post_table = "";
 
@@ -283,11 +300,16 @@ function profile_content(App $a, $update = 0) {
                        ORDER BY `thread`.`created` DESC $pager_sql",
                        intval($a->profile['profile_uid'])
                );
+
        }
 
        $parents_arr = array();
        $parents_str = '';
 
+       // Set a time stamp for this page. We will make use of it when we
+       // search for new items (update routine)
+       $_SESSION['last_updated'][$last_updated_key] = time();
+
        if (dbm::is_result($r)) {
                foreach($r as $rr)
                        $parents_arr[] = $rr['item_id'];
index f9bf60cf543605b0322a01903d115669baa3bd24..b2bf6e3b157899a17d1c948d9be0c5b71f3a6e5e 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once("include/Photo.php");
 
 function profile_photo_init(App $a) {
@@ -9,10 +11,8 @@ function profile_photo_init(App $a) {
        }
 
        profile_load($a,$a->user['nickname']);
-
 }
 
-
 function profile_photo_post(App $a) {
 
        if (! local_user()) {
index bd57f106d72c451409324c920ba05c9df0e1a9d0..7d2bceec1ac6b593447a7abd470036610fc9943e 100644 (file)
@@ -1,6 +1,9 @@
 <?php
-require_once("include/Contact.php");
-require_once('include/Probe.php');
+
+use Friendica\App;
+use Friendica\Network\Probe;
+
+require_once 'include/Contact.php';
 
 function profiles_init(App $a) {
 
@@ -501,7 +504,7 @@ function profiles_post(App $a) {
                                proc_run(PRIORITY_LOW, "include/directory.php", $url);
                        }
 
-                       require_once('include/profile_update.php');
+                       require_once 'include/profile_update.php';
                        profile_change();
 
                        // Update the global contact for the user
@@ -526,7 +529,7 @@ function profile_activity($changed, $value) {
                return;
        }
 
-       require_once('include/items.php');
+       require_once 'include/items.php';
 
        $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                intval(local_user())
@@ -620,7 +623,7 @@ function profiles_content(App $a) {
                        return;
                }
 
-               require_once('include/profile_selectors.php');
+               require_once 'include/profile_selectors.php';
 
 
                $a->page['htmlhead'] .= replace_macros(get_markup_template('profed_head.tpl'), array(
index a414d8947bf35369a819b9966239585468889b59..c67a0202e057921882477fbf9d55fcec0d726c60 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function profperm_init(App $a) {
 
        if (! local_user()) {
index 8046e4e9639eabc0fd9331d13792543a60908134..9311e55a96c02e4e6be68b50b323bef4906ba5d3 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 // Based upon "Privacy Image Cache" by Tobias Hößl <https://github.com/CatoTH/>
 
+use Friendica\App;
+
 define('PROXY_DEFAULT_TIME', 86400); // 1 Day
 
 define('PROXY_SIZE_MICRO', 'micro');
index 2ba1958a25050cbce35e075d04d6081aa5d71907..ba5e05b0eec4fd9c8dfb499a86cfbd6b100393bd 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function hub_return($valid,$body) {
 
        if($valid) {
index dceb16ae1f260cf9415e9e7378e54582a35ee182..da2f94748943887d7fe3c3dc8a710ac0ce820209 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function post_var($name) {
        return (x($_POST, $name)) ? notags(trim($_POST[$name])) : '';
 }
@@ -158,5 +160,3 @@ function pubsubhubbub_init(App $a) {
 
        killme();
 }
-
-?>
index 8512bea51e622aaf52ed1dd4d210b4f3815867dc..ba62fce0d7bddc829c884e117f862ef1bb85dcc1 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function qsearch_init(App $a) {
 
        if (! local_user()) {
@@ -48,4 +50,3 @@ function qsearch_init(App $a) {
        echo json_encode((object) $results);
        killme();
 }
-
index d8cffb380ccd46de6552fb72b12cd576b45de058..8d9083ada484019506231cdeaf7c5db6c789a5ca 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function randprof_init(App $a) {
        require_once('include/Contact.php');
index 3563f2d705a487f23b7a3b3652bdf308957f62bb..2873cb971af703286836e10049a2548c9bf039fc 100644 (file)
@@ -4,41 +4,34 @@
  * Diaspora endpoint
  */
 
+use Friendica\App;
 
 require_once('include/salmon.php');
 require_once('include/crypto.php');
 require_once('include/diaspora.php');
 
-
 function receive_post(App $a) {
-
-
-       $enabled = intval(get_config('system','diaspora_enabled'));
-       if(! $enabled) {
+       $enabled = intval(get_config('system', 'diaspora_enabled'));
+       if (!$enabled) {
                logger('mod-diaspora: disabled');
                http_status_exit(500);
        }
 
        $public = false;
 
-       if(($a->argc == 2) && ($a->argv[1] === 'public')) {
+       if (($a->argc == 2) && ($a->argv[1] === 'public')) {
                $public = true;
-       }
-       else {
+       } else {
 
-               if($a->argc != 3 || $a->argv[1] !== 'users')
+               if ($a->argc != 3 || $a->argv[1] !== 'users') {
                        http_status_exit(500);
-
+               }
                $guid = $a->argv[2];
 
-               $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1",
-                       dbesc($guid)
-               );
-               if (! dbm::is_result($r)) {
+               $importer = dba::select('user', array(), array('guid' => $guid, 'account_expired' => false, 'account_removed' => false), array('limit' => 1));
+               if (!dbm::is_result($importer)) {
                        http_status_exit(500);
                }
-
-               $importer = $r[0];
        }
 
        // It is an application/x-www-form-urlencoded
@@ -47,29 +40,34 @@ function receive_post(App $a) {
 
        $xml = urldecode($_POST['xml']);
 
-       logger('mod-diaspora: new salmon ' . $xml, LOGGER_DATA);
-
-       if(! $xml)
-               http_status_exit(500);
-
-       logger('mod-diaspora: message is okay', LOGGER_DEBUG);
+       if (!$xml) {
+               $postdata = file_get_contents("php://input");
+               if ($postdata == '') {
+                       http_status_exit(500);
+               }
 
-       $msg = Diaspora::decode($importer,$xml);
+               logger('mod-diaspora: message is in the new format', LOGGER_DEBUG);
+               $msg = Diaspora::decode_raw($importer, $postdata);
+       } else {
+               logger('mod-diaspora: message is in the old format', LOGGER_DEBUG);
+               $msg = Diaspora::decode($importer, $xml);
+       }
 
        logger('mod-diaspora: decoded', LOGGER_DEBUG);
 
-       logger('mod-diaspora: decoded msg: ' . print_r($msg,true), LOGGER_DATA);
+       logger('mod-diaspora: decoded msg: ' . print_r($msg, true), LOGGER_DATA);
 
-       if(! is_array($msg))
+       if (!is_array($msg)) {
                http_status_exit(500);
+       }
 
        logger('mod-diaspora: dispatching', LOGGER_DEBUG);
 
        $ret = 0;
-       if($public) {
+       if ($public) {
                Diaspora::dispatch_public($msg);
        } else {
-               $ret = Diaspora::dispatch($importer,$msg);
+               $ret = Diaspora::dispatch($importer, $msg);
        }
 
        http_status_exit(($ret) ? $ret : 200);
index 12f53900a7528c8826788aad408b384c23f4d176..366c398867682def7fe2dd0a3694eee81eedd539 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function redir_init(App $a) {
 
        $url = ((x($_GET,'url')) ? $_GET['url'] : '');
index 5e8da4685a0f61d342d180fe68b4d45c0bbfa193..71c13ef396815909c2335eab191f668333397c90 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/enotify.php');
 require_once('include/bbcode.php');
 require_once('include/user.php');
index 1983ca0899ddbf0608b43bcccb601046c355d44b..3c860120882fd0d54f071f9e48b9fa92bec00174 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/enotify.php');
 require_once('include/user.php');
 
@@ -72,27 +74,18 @@ function user_deny($hash) {
                dbesc($hash)
        );
 
-       if(! dbm::is_result($register))
+       if (!dbm::is_result($register)) {
                return false;
+       }
 
        $user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
                intval($register[0]['uid'])
        );
 
-       $r = q("DELETE FROM `user` WHERE `uid` = %d",
-               intval($register[0]['uid'])
-       );
-       $r = q("DELETE FROM `contact` WHERE `uid` = %d",
-               intval($register[0]['uid'])
-       );
-       $r = q("DELETE FROM `profile` WHERE `uid` = %d",
-               intval($register[0]['uid'])
-       );
+       dba::delete('user', array('uid' => $register[0]['uid']));
+       dba::delete('register', array('hash' => $register[0]['hash']));
 
-       $r = q("DELETE FROM `register` WHERE `hash` = '%s'",
-               dbesc($register[0]['hash'])
-       );
-       notice( sprintf(t('Registration revoked for %s'), $user[0]['username']) . EOL);
+       notice(sprintf(t('Registration revoked for %s'), $user[0]['username']) . EOL);
        return true;
 
 }
index 40033624d8889ac330a8be2c7f725febef8e2cfc..639c9be9f457bafcf704ecaa0e23252e5a377bad 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function removeme_post(App $a) {
 
        if (! local_user()) {
index 3e9130e0e8e42a233b5bd5090a383adc3ff599ff..ff4c11a7a4d7b5067a7b7727ea02649aaefa0172 100755 (executable)
@@ -1,7 +1,9 @@
 <?php
 
-require_once('include/Scrape.php');
-require_once('include/follow.php');
+use Friendica\App;
+
+require_once 'include/probe.php';
+require_once 'include/follow.php';
 
 function repair_ostatus_content(App $a) {
 
diff --git a/mod/robots_txt.php b/mod/robots_txt.php
new file mode 100644 (file)
index 0000000..8327329
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @file mod/robots_text.php
+ * @brief Module which returns the default robots.txt
+ * @version 0.1.2
+ */
+
+use Friendica\App;
+
+/**
+ * @brief Return default robots.txt when init
+ * @param App $a
+ * @return void
+ */
+function robots_txt_init(App $a)
+{
+       $allDisalloweds = array(
+               '/settings/',
+               '/admin/',
+               '/message/',
+       );
+
+       header('Content-Type: text/plain');
+       echo 'User-agent: *' . PHP_EOL;
+       foreach ($allDisalloweds as $disallowed) {
+               echo 'Disallow: ' . $disallowed . PHP_EOL;
+       }
+       killme();
+}
index 3b74a143df7d9b32394b81f92d73ce4b2f1ebf85..1417e9646a2825bafc274be396716a5ed8c0d29a 100644 (file)
@@ -1,24 +1,25 @@
 <?php
 
+use Friendica\App;
 
-
-function rsd_xml_content(App $a) {
+function rsd_xml_content(App $a)
+{
        header ("Content-Type: text/xml");
        echo '<?xml version="1.0" encoding="UTF-8"?>
- <rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
-   <service>
-     <engineName>Friendica</engineName>
-     <engineLink>http://friendica.com/</engineLink>
-     <apis>
-       <api name="Twitter" preferred="true" apiLink="'.App::get_baseurl().'/api/" blogID="">
-         <settings>
-           <docs>http://status.net/wiki/TwitterCompatibleAPI</docs>
-           <setting name="OAuth">false</setting>
-         </settings>
-       </api>
-     </apis>
-   </service>
- </rsd>
-       ';
-die();
+<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
+  <service>
+    <engineName>Friendica</engineName>
+    <engineLink>http://friendica.com/</engineLink>
+    <apis>
+      <api name="Twitter" preferred="true" apiLink="'.App::get_baseurl().'/api/" blogID="">
+        <settings>
+          <docs>http://status.net/wiki/TwitterCompatibleAPI</docs>
+          <setting name="OAuth">false</setting>
+        </settings>
+      </api>
+    </apis>
+  </service>
+</rsd>';
+
+       killme();
 }
\ No newline at end of file
index 10b1046b02d1924e9b65d956bcb7191e8e4934d0..f42e05deaa76f207848c1e214ad5854fd78c54a6 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/salmon.php');
 require_once('include/ostatus.php');
 require_once('include/crypto.php');
index a804ca32e0b2e80603a1c5a01ab08c050ae9806a..fd1212ceec2854ae88273e9fc1c5d7f8c7f9bd9b 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once("include/bbcode.php");
 require_once('include/security.php');
 require_once('include/conversation.php');
index a73bcc78fabce3938c021534d5c20c8e52f03873..783d6f306c8593ac7c30d4356ab043d4b335dceb 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function session_content(App $a) {
 
 }
index 1d83251d4b327054c61e481aca3a86ad5361555e..ff05724fed74b2048a9391bac3358be08b956688 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/group.php');
 require_once('include/socgraph.php');
 
index 36a4d5945fcb4cc7b7bb07d8e862324104fa083b..7ddca0f30be8256df542c7c909d500caf51e9f6e 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 function share_init(App $a) {
 
        $post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
index 4d8ab6bcaa55fcdb3dbd2d1929efc01a8296fd63..289ad887f96bf5e5bfa87e92cbfdf0ded9e86264 100644 (file)
@@ -3,19 +3,19 @@
 /**
  * @file mod/smilies.php
  */
+use Friendica\App;
 
 require_once("include/Smilies.php");
 
 function smilies_content(App $a) {
-       if ($a->argv[1]==="json"){
+       if ($a->argv[1] === "json") {
                $tmp = Smilies::get_list();
                $results = array();
-               for($i = 0; $i < count($tmp['texts']); $i++) {
+               for ($i = 0; $i < count($tmp['texts']); $i++) {
                        $results[] = array('text' => $tmp['texts'][$i], 'icon' => $tmp['icons'][$i]);
                }
                json_return_and_die($results);
-       }
-       else {
-               return Smilies::replace('',true);
+       } else {
+               return Smilies::replace('', true);
        }
 }
index 46d3fcff66835644c0b802bfb98db8a8d3a06edf..e1b38cfc4c9133edf547eeb59303ec81f2b24aec 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function starred_init(App $a) {
 
index 07444d2bb525f7facb01e51ba9f77ce6146fde7d..3b9e9c49667e8b396d416b47e6b1dfd6ea705b2e 100644 (file)
@@ -1,27 +1,30 @@
 <?php
+
 /**
  * @file mod/statistics_json.php
  */
 
+use Friendica\App;
+
 require_once("include/plugin.php");
 
 function statistics_json_init(App $a) {
 
-        if (!get_config("system", "nodeinfo")) {
-                http_status_exit(404);
-                killme();
-        }
+       if (!get_config("system", "nodeinfo")) {
+               http_status_exit(404);
+               killme();
+       }
 
        $statistics = array(
-                       "name" => $a->config["sitename"],
-                       "network" => FRIENDICA_PLATFORM,
-                       "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION,
-                       "registrations_open" => ($a->config['register_policy'] != 0),
-                       "total_users" => get_config('nodeinfo','total_users'),
-                       "active_users_halfyear" => get_config('nodeinfo','active_users_halfyear'),
-                       "active_users_monthly" => get_config('nodeinfo','active_users_monthly'),
-                       "local_posts" => get_config('nodeinfo','local_posts')
-                       );
+               "name" => $a->config["sitename"],
+               "network" => FRIENDICA_PLATFORM,
+               "version" => FRIENDICA_VERSION . "-" . DB_UPDATE_VERSION,
+               "registrations_open" => ($a->config['register_policy'] != 0),
+               "total_users" => get_config('nodeinfo', 'total_users'),
+               "active_users_halfyear" => get_config('nodeinfo', 'active_users_halfyear'),
+               "active_users_monthly" => get_config('nodeinfo', 'active_users_monthly'),
+               "local_posts" => get_config('nodeinfo', 'local_posts')
+       );
 
        $statistics["services"] = array();
        $statistics["services"]["appnet"] = plugin_enabled("appnet");
@@ -53,7 +56,7 @@ function statistics_json_init(App $a) {
        $statistics["wordpress"] = $statistics["services"]["wordpress"];
 
        header("Content-Type: application/json");
-       echo json_encode($statistics, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
-       logger("statistics_init: printed ".print_r($statistics, true), LOGGER_DATA);
+       echo json_encode($statistics, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
+       logger("statistics_init: printed " . print_r($statistics, true), LOGGER_DATA);
        killme();
 }
index 646a4230c5f486819100624ddf754231b52814d1..0745fc0eef4948a204f61581aedc7994a0e045c5 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
 
-
 function subthread_content(App $a) {
 
        if(! local_user() && ! remote_user()) {
index dd24fc0a2a3a01a120557f7bf659d638c30440cf..a82dca7945d87614da9f90f4fceccb57d38390a6 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/socgraph.php');
 require_once('include/contact_widgets.php');
 
index 50099ac69ca4e85627748c6b30736a3d4f4f5b32..e6619f9fe2d37a148724da85467a21fcca81176f 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/security.php');
 require_once('include/bbcode.php');
 require_once('include/items.php');
 
-
 function tagger_content(App $a) {
 
        if(! local_user() && ! remote_user()) {
index 2e7f8b97082436e8061998997f0150d666147fcb..ea1ab7909dd851102a1215235f10bb48321bb0eb 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/bbcode.php');
 
 function tagrm_post(App $a) {
index f858d8913e9c26fc2cea16a967439ca139560bf9..12a61152733033bb66de307e19e4748592d6a991 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function toggle_mobile_init(App $a) {
 
        if (isset($_GET['off'])) {
@@ -16,4 +18,3 @@ function toggle_mobile_init(App $a) {
 
        goaway($address);
 }
-
index 77a45f8a39379296d5d8b259432d5a3648aadabc..b00f9bdf927e44188e3b8c8aea2f84a77b08ac75 100644 (file)
@@ -1,7 +1,9 @@
 <?php
 
+use Friendica\App;
+
 function uexport_init(App $a) {
-       if (! local_user()) {
+       if (!local_user()) {
                killme();
        }
 
@@ -9,13 +11,12 @@ function uexport_init(App $a) {
        settings_init($a);
 }
 
-/// @TODO Change space -> tab where wanted
 function uexport_content(App $a) {
 
        if ($a->argc > 1) {
                header("Content-type: application/json");
-               header('Content-Disposition: attachment; filename="'.$a->user['nickname'].'.'.$a->argv[1].'"');
-               switch($a->argv[1]) {
+               header('Content-Disposition: attachment; filename="' . $a->user['nickname'] . '.' . $a->argv[1] . '"');
+               switch ($a->argv[1]) {
                        case "backup":
                                uexport_all($a);
                                killme();
@@ -51,9 +52,9 @@ function _uexport_multirow($query) {
        $result = array();
        $r = q($query);
        if (dbm::is_result($r)) {
-               foreach($r as $rr){
+               foreach ($r as $rr) {
                        $p = array();
-                       foreach($rr as $k => $v) {
+                       foreach ($rr as $k => $v) {
                                $p[$k] = $v;
                        }
                        $result[] = $p;
@@ -66,8 +67,8 @@ function _uexport_row($query) {
        $result = array();
        $r = q($query);
        if (dbm::is_result($r)) {
-               foreach($r as $rr) {
-                       foreach($rr as $k => $v) {
+               foreach ($r as $rr) {
+                       foreach ($rr as $k => $v) {
                                $result[$k] = $v;
                        }
                }
@@ -75,39 +76,38 @@ function _uexport_row($query) {
        return $result;
 }
 
-
-function uexport_account($a){
+function uexport_account($a) {
 
        $user = _uexport_row(
-               sprintf( "SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()) )
+               sprintf("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval(local_user()))
        );
 
        $contact = _uexport_multirow(
-               sprintf( "SELECT * FROM `contact` WHERE `uid` = %d ",intval(local_user()) )
+               sprintf("SELECT * FROM `contact` WHERE `uid` = %d ", intval(local_user()))
        );
 
 
-       $profile =_uexport_multirow(
-               sprintf( "SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()) )
+       $profile = _uexport_multirow(
+               sprintf("SELECT * FROM `profile` WHERE `uid` = %d ", intval(local_user()))
        );
 
        $photo = _uexport_multirow(
-               sprintf( "SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()) )
+               sprintf("SELECT * FROM `photo` WHERE uid = %d AND profile = 1", intval(local_user()))
        );
        foreach ($photo as &$p) {
                $p['data'] = bin2hex($p['data']);
        }
 
        $pconfig = _uexport_multirow(
-               sprintf( "SELECT * FROM `pconfig` WHERE uid = %d",intval(local_user()) )
+               sprintf("SELECT * FROM `pconfig` WHERE uid = %d", intval(local_user()))
        );
 
        $group = _uexport_multirow(
-               sprintf( "SELECT * FROM `group` WHERE uid = %d",intval(local_user()) )
+               sprintf("SELECT * FROM `group` WHERE uid = %d", intval(local_user()))
        );
 
        $group_member = _uexport_multirow(
-               sprintf( "SELECT * FROM `group_member` WHERE uid = %d",intval(local_user()) )
+               sprintf("SELECT * FROM `group_member` WHERE uid = %d", intval(local_user()))
        );
 
        $output = array(
@@ -150,13 +150,8 @@ function uexport_all(App $a) {
                        intval($x),
                        intval(500)
                );
-               /*if (dbm::is_result($r)) {
-                       foreach($r as $rr)
-                               foreach($rr as $k => $v)
-                                       $item[][$k] = $v;
-               }*/
 
                $output = array('item' => $r);
-               echo json_encode($output)."\n";
+               echo json_encode($output) . "\n";
        }
 }
index 336ec1c2dd74e131b4e12af37b22d5ce979023cf..b9bde23880da767783a419a1b485c3430466b268 100644 (file)
@@ -1,75 +1,77 @@
-<?php\r
-/**\r
- * View for user import\r
- * @TODO This file has DOS line endings!\r
- */\r
-\r
-require_once("include/uimport.php");\r
-\r
-function uimport_post(App $a) {\r
-       switch($a->config['register_policy']) {\r
-       case REGISTER_OPEN:\r
-               $blocked = 0;\r
-               $verified = 1;\r
-               break;\r
-\r
-       case REGISTER_APPROVE:\r
-               $blocked = 1;\r
-               $verified = 0;\r
-               break;\r
-\r
-       default:\r
-       case REGISTER_CLOSED:\r
-               if ((! x($_SESSION,'authenticated') && (! x($_SESSION,'administrator')))) {\r
-                       notice( t('Permission denied.') . EOL );\r
-                       return;\r
-               }\r
-               $blocked = 1;\r
-               $verified = 0;\r
-               break;\r
-       }\r
-\r
-       if (x($_FILES,'accountfile')){\r
-               /// @TODO Pass $blocked / $verified, send email to admin on REGISTER_APPROVE\r
-               import_account($a, $_FILES['accountfile']);\r
-               return;\r
-       }\r
-}\r
-\r
-function uimport_content(App $a) {\r
-\r
-       if ((! local_user()) && ($a->config['register_policy'] == REGISTER_CLOSED)) {\r
-               notice("Permission denied." . EOL);\r
-               return;\r
-       }\r
-\r
-       $max_dailies = intval(get_config('system','max_daily_registrations'));\r
-       if ($max_dailies) {\r
-               $r = q("select count(*) as total from user where register_date > UTC_TIMESTAMP - INTERVAL 1 day");\r
-               if ($r && $r[0]['total'] >= $max_dailies) {\r
-                       logger('max daily registrations exceeded.');\r
-                       notice( t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.') . EOL);\r
-                       return;\r
-               }\r
-       }\r
-\r
-\r
-       if (x($_SESSION,'theme')) {\r
-               unset($_SESSION['theme']);\r
-       }\r
-       if (x($_SESSION,'mobile-theme')) {\r
-               unset($_SESSION['mobile-theme']);\r
-       }\r
-\r
-       $tpl = get_markup_template("uimport.tpl");\r
-       return replace_macros($tpl, array(\r
-               '$regbutt' => t('Import'),\r
-               '$import' => array(\r
-               'title' => t("Move account"),\r
-               'intro' => t("You can import an account from another Friendica server."),\r
-               'instruct' => t("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."),\r
-               'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"),\r
-               'field' => array('accountfile', t('Account file'),'<input id="id_accountfile" name="accountfile" type="file">', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')),\r
-               ),\r
-       ));\r
-}\r
+<?php
+
+/**
+ * View for user import
+ */
+
+use Friendica\App;
+
+require_once("include/uimport.php");
+
+function uimport_post(App $a) {
+       switch ($a->config['register_policy']) {
+               case REGISTER_OPEN:
+                       $blocked = 0;
+                       $verified = 1;
+                       break;
+
+               case REGISTER_APPROVE:
+                       $blocked = 1;
+                       $verified = 0;
+                       break;
+
+               default:
+               case REGISTER_CLOSED:
+                       if ((!x($_SESSION, 'authenticated') && (!x($_SESSION, 'administrator')))) {
+                               notice(t('Permission denied.') . EOL);
+                               return;
+                       }
+                       $blocked = 1;
+                       $verified = 0;
+                       break;
+       }
+
+       if (x($_FILES, 'accountfile')) {
+               /// @TODO Pass $blocked / $verified, send email to admin on REGISTER_APPROVE
+               import_account($a, $_FILES['accountfile']);
+               return;
+       }
+}
+
+function uimport_content(App $a) {
+
+       if ((!local_user()) && ($a->config['register_policy'] == REGISTER_CLOSED)) {
+               notice("Permission denied." . EOL);
+               return;
+       }
+
+       $max_dailies = intval(get_config('system', 'max_daily_registrations'));
+       if ($max_dailies) {
+               $r = q("select count(*) as total from user where register_date > UTC_TIMESTAMP - INTERVAL 1 day");
+               if ($r && $r[0]['total'] >= $max_dailies) {
+                       logger('max daily registrations exceeded.');
+                       notice(t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.') . EOL);
+                       return;
+               }
+       }
+
+
+       if (x($_SESSION, 'theme')) {
+               unset($_SESSION['theme']);
+       }
+       if (x($_SESSION, 'mobile-theme')) {
+               unset($_SESSION['mobile-theme']);
+       }
+
+       $tpl = get_markup_template("uimport.tpl");
+       return replace_macros($tpl, array(
+               '$regbutt' => t('Import'),
+               '$import' => array(
+                       'title' => t("Move account"),
+                       'intro' => t("You can import an account from another Friendica server."),
+                       'instruct' => t("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."),
+                       'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"),
+                       'field' => array('accountfile', t('Account file'), '<input id="id_accountfile" name="accountfile" type="file">', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')),
+               ),
+       ));
+}
index 9a39489dcfb822a39143b235b506a0d8c3905fec..f0e96af48c1a519167eeb27c5e8ea7dd683cc18e 100644 (file)
@@ -2,6 +2,8 @@
 
 // See update_profile.php for documentation
 
+use Friendica\App;
+
 require_once("mod/community.php");
 
 function update_community_content(App $a) {
index 86f4db8259f83c4db9fdd580666c91da42060c16..b8538a256bc99ab17eaee30d38c91660d0024358 100644 (file)
@@ -2,6 +2,8 @@
 
 // See update_profile.php for documentation
 
+use Friendica\App;
+
 require_once("mod/display.php");
 require_once("include/group.php");
 
index 869973ace4f07af1b8c2750103849a36f6f85f5d..42172486d83634c2b6e1af4227531fc4dcd1be94 100644 (file)
@@ -2,6 +2,8 @@
 
 // See update_profile.php for documentation
 
+use Friendica\App;
+
 require_once("mod/network.php");
 require_once("include/group.php");
 
index d27cc4ca9672bfcfe1007b2289bfd9bcb14dc71c..9fc886155159b318355ed8e780fbf4a613d080a8 100644 (file)
@@ -5,6 +5,8 @@
  * Purpose: AJAX synchronisation of notes page
  */
 
+use Friendica\App;
+
 require_once("mod/notes.php");
 
 function update_notes_content(App $a) {
index b77a9cdcfc5e4d40755c38bb22172364f9cdb7fb..5b15f06d30360f9f5211abd1a5be0b89e218870a 100644 (file)
@@ -5,6 +5,8 @@
  * Purpose: AJAX synchronisation of profile page
  */
 
+use Friendica\App;
+
 require_once("mod/profile.php");
 
 function update_profile_content(App $a) {
index 269d537854c5467f4fbb9ceef166a15017735168..2ee73c211d438c1787432bebb2069e1f7fe312b2 100644 (file)
@@ -1,11 +1,13 @@
 <?php
+
+use Friendica\App;
+
 require_once('include/items.php');
 require_once('include/acl_selectors.php');
 require_once('include/bbcode.php');
 require_once('include/security.php');
 require_once('include/redir.php');
 
-
 function videos_init(App $a) {
 
        if($a->argc > 1)
index 5912f6cc773f8d398135dcc6072e983e22cffb52..f7bf912fdffea333da38b0ed67236dc98b74962a 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once('include/Contact.php');
 require_once('include/contact_selectors.php');
 
index a3f0affb531971cfc1eb63e06fd02d073ce34b74..09158959065afb264d5fff39b936a78688fabd29 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Friendica\App;
 
 function viewsrc_content(App $a) {
 
index 0fc8b8a6a3aae79a60dc1bf70459de1bde6bed01..8bf1fdbf19d6293b0bada256d2bc4362fc4debae 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/attach.php');
 require_once('include/datetime.php');
 
index d29efecc6ad2319eb86365a7fae727e9fa3f0e36..a35e86a5297a098d75aa9d2a89e861e4bcc9470c 100644 (file)
@@ -3,17 +3,17 @@
 /**
  * @file mod/wall_upload.php
  * @brief Module for uploading a picture to the profile wall
- * 
+ *
  * By default the picture will be stored in the photo album with the name Wall Photos.
  * You can specify a different album by adding an optional query string "album="
  * to the url
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/Photo.php';
 
-
 function wall_upload_post(App $a, $desktopmode = true) {
 
        logger("wall upload: starting new upload", LOGGER_DEBUG);
index ff90e0dbcf510b6ec6c97eaf762578fb19f97f64..72897c0657f77adc057bc738085d91d1bf9e79d2 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/message.php');
 
 function wallmessage_post(App $a) {
index d823bd2dc217b988c8f5d41839ee22f77bfde8a8..d72315a5b51e77c25444fa363885074910f0b7b5 100644 (file)
@@ -1,5 +1,7 @@
 <?php
-require_once("include/Probe.php");
+
+use Friendica\App;
+use Friendica\Network\Probe;
 
 function webfinger_content(App $a) {
 
index 4949b830f4866c4863eb5fe99d363e35e06077a6..62f9bd3dde232d8611a150101b41a78adccd1e0c 100644 (file)
@@ -5,8 +5,8 @@
  */
 require_once("include/poller.php");
 
-use \Friendica\Core\Config;
-use \Friendica\Core\PConfig;
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
 
 function worker_init($a){
 
index 7b812a7f9d94610d804515ba2e454cdf855762b0..bfb889258cf5193ae21e4e4d8eb67df14a374871 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 require_once('include/crypto.php');
 
 function xrd_init(App $a) {
@@ -18,14 +20,12 @@ function xrd_init(App $a) {
                $name = substr($local,0,strpos($local,'@'));
        }
 
-       $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1",
-               dbesc($name)
-       );
+       $r = dba::select('user', array(), array('nickname' => $name), array('limit' => 1));
        if (! dbm::is_result($r)) {
                killme();
        }
 
-       $salmon_key = salmon_key($r[0]['spubkey']);
+       $salmon_key = salmon_key($r['spubkey']);
 
        header('Access-Control-Allow-Origin: *');
        header("Content-type: text/xml");
@@ -33,19 +33,19 @@ function xrd_init(App $a) {
        $tpl = get_markup_template('xrd_diaspora.tpl');
        $dspr = replace_macros($tpl,array(
                '$baseurl' => App::get_baseurl(),
-               '$dspr_guid' => $r[0]['guid'],
-               '$dspr_key' => base64_encode(pemtorsa($r[0]['pubkey']))
+               '$dspr_guid' => $r['guid'],
+               '$dspr_key' => base64_encode(pemtorsa($r['pubkey']))
        ));
 
        $tpl = get_markup_template('xrd_person.tpl');
 
-       $profile_url = App::get_baseurl().'/profile/'.$r[0]['nickname'];
+       $profile_url = App::get_baseurl().'/profile/'.$r['nickname'];
 
        if ($acct) {
                $alias = $profile_url;
        }
        else {
-               $alias = 'acct:'.$r[0]['nickname'].'@'.$a->get_hostname();
+               $alias = 'acct:'.$r['nickname'].'@'.$a->get_hostname();
 
                if ($a->get_path()) {
                        $alias .= '/'.$a->get_path();
@@ -53,25 +53,25 @@ function xrd_init(App $a) {
        }
 
        $o = replace_macros($tpl, array(
-               '$nick'        => $r[0]['nickname'],
+               '$nick'        => $r['nickname'],
                '$accturi'     => $uri,
                '$alias'       => $alias,
                '$profile_url' => $profile_url,
-               '$hcard_url'   => App::get_baseurl() . '/hcard/'         . $r[0]['nickname'],
-               '$atom'        => App::get_baseurl() . '/dfrn_poll/'     . $r[0]['nickname'],
-               '$zot_post'    => App::get_baseurl() . '/post/'          . $r[0]['nickname'],
-               '$poco_url'    => App::get_baseurl() . '/poco/'          . $r[0]['nickname'],
-               '$photo'       => App::get_baseurl() . '/photo/profile/' . $r[0]['uid']      . '.jpg',
+               '$hcard_url'   => App::get_baseurl() . '/hcard/'         . $r['nickname'],
+               '$atom'        => App::get_baseurl() . '/dfrn_poll/'     . $r['nickname'],
+               '$zot_post'    => App::get_baseurl() . '/post/'          . $r['nickname'],
+               '$poco_url'    => App::get_baseurl() . '/poco/'          . $r['nickname'],
+               '$photo'       => App::get_baseurl() . '/photo/profile/' . $r['uid']      . '.jpg',
                '$dspr'        => $dspr,
-               '$salmon'      => App::get_baseurl() . '/salmon/'        . $r[0]['nickname'],
-               '$salmen'      => App::get_baseurl() . '/salmon/'        . $r[0]['nickname'] . '/mention',
+               '$salmon'      => App::get_baseurl() . '/salmon/'        . $r['nickname'],
+               '$salmen'      => App::get_baseurl() . '/salmon/'        . $r['nickname'] . '/mention',
                '$subscribe'   => App::get_baseurl() . '/follow?url={uri}',
                '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key,
-               '$bigkey'      => salmon_key($r[0]['pubkey']),
+               '$bigkey'      => salmon_key($r['pubkey']),
        ));
 
 
-       $arr = array('user' => $r[0], 'xml' => $o);
+       $arr = array('user' => $r, 'xml' => $o);
        call_hooks('personal_xrd', $arr);
 
        echo $arr['xml'];
index 2666dc1de572816a01ec53d4522288392e8c5424..15c7d8dc652dbd0bcc05dcce1ac2ad5db6cc123b 100644 (file)
@@ -14,7 +14,7 @@ class BaseObject {
 
        /**
         * Get the app
-        * 
+        *
         * Same as get_app from boot.php
         */
        public function get_app() {
@@ -33,4 +33,3 @@ class BaseObject {
                self::$app = $app;
        }
 }
-?>
index eb5b3b9b486985fe67bc0c8958cb3f33912293c8..f03b3b1c1bc00cfbada58c7f0a93495d3394bd78 100644 (file)
@@ -164,4 +164,3 @@ class Conversation extends BaseObject {
                return false;
        }
 }
-?>
index b693520b93d8cb2e932af589a6b5da94cb51a46a..9e8b4738e209ed2fa451526c2226bcbf8c428ec0 100644 (file)
@@ -112,7 +112,7 @@ class Item extends BaseObject {
 
                $conv = $this->get_conversation();
 
-               $lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) 
+               $lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
                        || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
                        ? t('Private Message')
                        : false);
@@ -242,17 +242,14 @@ class Item extends BaseObject {
                                        'classundo' => (($item['starred']) ? "" : "hidden"),
                                        'starred'   =>  t('starred'),
                                );
-                               $r = q("SELECT `ignored` FROM `thread` WHERE `uid` = %d AND `iid` = %d LIMIT 1",
-                                       intval($item['uid']),
-                                       intval($item['id'])
-                               );
+                               $r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1));
                                if (dbm::is_result($r)) {
                                        $ignore = array(
                                                'do'        => t("ignore thread"),
                                                'undo'      => t("unignore thread"),
                                                'toggle'    => t("toggle ignore status"),
-                                               'classdo'   => (($r[0]['ignored']) ? "hidden" : ""),
-                                               'classundo' => (($r[0]['ignored']) ? "" : "hidden"),
+                                               'classdo'   => (($r['ignored']) ? "hidden" : ""),
+                                               'classundo' => (($r['ignored']) ? "" : "hidden"),
                                                'ignored'   =>  t('ignored'),
                                        );
                                }
@@ -754,20 +751,20 @@ class Item extends BaseObject {
                                        if ((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) {
 
                                                // The author url doesn't match the owner (typically the contact)
-                                               // and also doesn't match the contact alias. 
-                                               // The name match is a hack to catch several weird cases where URLs are 
+                                               // and also doesn't match the contact alias.
+                                               // The name match is a hack to catch several weird cases where URLs are
                                                // all over the park. It can be tricked, but this prevents you from
                                                // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
-                                               // well that it's the same Bob Smith. 
+                                               // well that it's the same Bob Smith.
 
-                                               // But it could be somebody else with the same name. It just isn't highly likely. 
+                                               // But it could be somebody else with the same name. It just isn't highly likely.
 
 
                                                $this->owner_photo = $this->get_data_value('owner-avatar');
                                                $this->owner_name = $this->get_data_value('owner-name');
                                                $this->wall_to_wall = true;
                                                // If it is our contact, use a friendly redirect link
-                                               if ((link_compare($this->get_data_value('owner-link'),$this->get_data_value('url'))) 
+                                               if ((link_compare($this->get_data_value('owner-link'),$this->get_data_value('url')))
                                                        && ($this->get_data_value('network') === NETWORK_DFRN)) {
                                                        $this->owner_url = $this->get_redirect_url();
                                                } else {
@@ -807,5 +804,3 @@ class Item extends BaseObject {
        }
 
 }
-/// @TODO These are discouraged and should be removed:
-?>
diff --git a/src/App.php b/src/App.php
new file mode 100644 (file)
index 0000000..aaaf6b2
--- /dev/null
@@ -0,0 +1,987 @@
+<?php
+
+namespace Friendica;
+
+use Friendica\Core\Config;
+use Friendica\Core\PConfig;
+
+use Cache;
+use dbm;
+
+use Detection\MobileDetect;
+
+use Exception;
+
+/**
+ *
+ * class: App
+ *
+ * @brief Our main application structure for the life of this page.
+ *
+ * Primarily deals with the URL that got us here
+ * and tries to make some sense of it, and
+ * stores our page contents and config storage
+ * and anything else that might need to be passed around
+ * before we spit the page out.
+ *
+ */
+class App {
+
+       public $module_loaded = false;
+       public $query_string;
+       public $config;
+       public $page;
+       public $profile;
+       public $profile_uid;
+       public $user;
+       public $cid;
+       public $contact;
+       public $contacts;
+       public $page_contact;
+       public $content;
+       public $data = array();
+       public $error = false;
+       public $cmd;
+       public $argv;
+       public $argc;
+       public $module;
+       public $pager;
+       public $strings;
+       public $basepath;
+       public $path;
+       public $hooks;
+       public $timezone;
+       public $interactive = true;
+       public $plugins;
+       public $apps = array();
+       public $identities;
+       public $is_mobile = false;
+       public $is_tablet = false;
+       public $is_friendica_app;
+       public $performance = array();
+       public $callstack = array();
+       public $theme_info = array();
+       public $backend = true;
+       public $nav_sel;
+       public $category;
+       // Allow themes to control internal parameters
+       // by changing App values in theme.php
+
+       public $sourcename = '';
+       public $videowidth = 425;
+       public $videoheight = 350;
+       public $force_max_items = 0;
+       public $theme_thread_allow = true;
+       public $theme_events_in_profile = true;
+
+       /**
+        * @brief An array for all theme-controllable parameters
+        *
+        * Mostly unimplemented yet. Only options 'template_engine' and
+        * beyond are used.
+        */
+       public $theme = array(
+               'sourcename' => '',
+               'videowidth' => 425,
+               'videoheight' => 350,
+               'force_max_items' => 0,
+               'thread_allow' => true,
+               'stylesheet' => '',
+               'template_engine' => 'smarty3',
+       );
+
+       /**
+        * @brief An array of registered template engines ('name'=>'class name')
+        */
+       public $template_engines = array();
+
+       /**
+        * @brief An array of instanced template engines ('name'=>'instance')
+        */
+       public $template_engine_instance = array();
+       public $process_id;
+       private $ldelim = array(
+               'internal' => '',
+               'smarty3' => '{{'
+       );
+       private $rdelim = array(
+               'internal' => '',
+               'smarty3' => '}}'
+       );
+       private $scheme;
+       private $hostname;
+       private $db;
+       private $curl_code;
+       private $curl_content_type;
+       private $curl_headers;
+       private $cached_profile_image;
+       private $cached_profile_picdate;
+       private static $a;
+
+       /**
+        * @brief App constructor.
+        *
+        * @param string $basepath Path to the app base folder
+        */
+       function __construct($basepath) {
+
+               global $default_timezone;
+
+               $hostname = '';
+
+               if (file_exists('.htpreconfig.php')) {
+                       include '.htpreconfig.php';
+               }
+
+               $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC');
+
+               date_default_timezone_set($this->timezone);
+
+               $this->performance['start'] = microtime(true);
+               $this->performance['database'] = 0;
+               $this->performance['database_write'] = 0;
+               $this->performance['network'] = 0;
+               $this->performance['file'] = 0;
+               $this->performance['rendering'] = 0;
+               $this->performance['parser'] = 0;
+               $this->performance['marktime'] = 0;
+               $this->performance['markstart'] = microtime(true);
+
+               $this->callstack['database'] = array();
+               $this->callstack['database_write'] = array();
+               $this->callstack['network'] = array();
+               $this->callstack['file'] = array();
+               $this->callstack['rendering'] = array();
+               $this->callstack['parser'] = array();
+
+               $this->config = array();
+               $this->page = array();
+               $this->pager = array();
+
+               $this->query_string = '';
+
+               $this->process_id = uniqid('log', true);
+
+               startup();
+
+               $this->scheme = 'http';
+
+               if ((x($_SERVER, 'HTTPS') && $_SERVER['HTTPS']) ||
+                       (x($_SERVER, 'HTTP_FORWARDED') && preg_match('/proto=https/', $_SERVER['HTTP_FORWARDED'])) ||
+                       (x($_SERVER, 'HTTP_X_FORWARDED_PROTO') && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
+                       (x($_SERVER, 'HTTP_X_FORWARDED_SSL') && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') ||
+                       (x($_SERVER, 'FRONT_END_HTTPS') && $_SERVER['FRONT_END_HTTPS'] == 'on') ||
+                       (x($_SERVER, 'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) // XXX: reasonable assumption, but isn't this hardcoding too much?
+               ) {
+                       $this->scheme = 'https';
+               }
+
+               if (x($_SERVER, 'SERVER_NAME')) {
+                       $this->hostname = $_SERVER['SERVER_NAME'];
+
+                       if (x($_SERVER, 'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
+                               $this->hostname .= ':' . $_SERVER['SERVER_PORT'];
+                       }
+                       /*
+                        * Figure out if we are running at the top of a domain
+                        * or in a sub-directory and adjust accordingly
+                        */
+
+                       /// @TODO This kind of escaping breaks syntax-highlightning on CoolEdit (Midnight Commander)
+                       $path = trim(dirname($_SERVER['SCRIPT_NAME']), '/\\');
+                       if (isset($path) && strlen($path) && ($path != $this->path)) {
+                               $this->path = $path;
+                       }
+               }
+
+               if ($hostname != '') {
+                       $this->hostname = $hostname;
+               }
+
+               if (! static::directory_usable($basepath, false)) {
+                       throw new Exception('Basepath ' . $basepath . ' isn\'t usable.');
+               }
+
+               $this->basepath = rtrim($basepath, DIRECTORY_SEPARATOR);
+
+               set_include_path(
+                       get_include_path() . PATH_SEPARATOR
+                       . $this->basepath . DIRECTORY_SEPARATOR . 'include' . PATH_SEPARATOR
+                       . $this->basepath . DIRECTORY_SEPARATOR . 'library' . PATH_SEPARATOR
+                       . $this->basepath . DIRECTORY_SEPARATOR . 'library/langdet' . PATH_SEPARATOR
+                       . $this->basepath);
+
+
+               if (is_array($_SERVER['argv']) && $_SERVER['argc'] > 1 && substr(end($_SERVER['argv']), 0, 4) == 'http') {
+                       $this->set_baseurl(array_pop($_SERVER['argv']));
+                       $_SERVER['argc'] --;
+               }
+
+               if ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 9) === 'pagename=') {
+                       $this->query_string = substr($_SERVER['QUERY_STRING'], 9);
+
+                       // removing trailing / - maybe a nginx problem
+                       $this->query_string = ltrim($this->query_string, '/');
+               } elseif ((x($_SERVER, 'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'], 0, 2) === 'q=') {
+                       $this->query_string = substr($_SERVER['QUERY_STRING'], 2);
+
+                       // removing trailing / - maybe a nginx problem
+                       $this->query_string = ltrim($this->query_string, '/');
+               }
+
+               if (x($_GET, 'pagename')) {
+                       $this->cmd = trim($_GET['pagename'], '/\\');
+               } elseif (x($_GET, 'q')) {
+                       $this->cmd = trim($_GET['q'], '/\\');
+               }
+
+               // fix query_string
+               $this->query_string = str_replace($this->cmd . '&', $this->cmd . '?', $this->query_string);
+
+               // unix style "homedir"
+               if (substr($this->cmd, 0, 1) === '~') {
+                       $this->cmd = 'profile/' . substr($this->cmd, 1);
+               }
+
+               // Diaspora style profile url
+               if (substr($this->cmd, 0, 2) === 'u/') {
+                       $this->cmd = 'profile/' . substr($this->cmd, 2);
+               }
+
+               /*
+                * Break the URL path into C style argc/argv style arguments for our
+                * modules. Given "http://example.com/module/arg1/arg2", $this->argc
+                * will be 3 (integer) and $this->argv will contain:
+                *   [0] => 'module'
+                *   [1] => 'arg1'
+                *   [2] => 'arg2'
+                *
+                *
+                * There will always be one argument. If provided a naked domain
+                * URL, $this->argv[0] is set to "home".
+                */
+
+               $this->argv = explode('/', $this->cmd);
+               $this->argc = count($this->argv);
+               if ((array_key_exists('0', $this->argv)) && strlen($this->argv[0])) {
+                       $this->module = str_replace('.', '_', $this->argv[0]);
+                       $this->module = str_replace('-', '_', $this->module);
+               } else {
+                       $this->argc = 1;
+                       $this->argv = array('home');
+                       $this->module = 'home';
+               }
+
+               // See if there is any page number information, and initialise pagination
+               $this->pager['page'] = ((x($_GET, 'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1);
+               $this->pager['itemspage'] = 50;
+               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
+
+               if ($this->pager['start'] < 0) {
+                       $this->pager['start'] = 0;
+               }
+               $this->pager['total'] = 0;
+
+               // Detect mobile devices
+               $mobile_detect = new MobileDetect();
+               $this->is_mobile = $mobile_detect->isMobile();
+               $this->is_tablet = $mobile_detect->isTablet();
+
+               // Friendica-Client
+               $this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == 'Apache-HttpClient/UNAVAILABLE (java 1.4)');
+
+               // Register template engines
+               $dc = get_declared_classes();
+               foreach ($dc as $k) {
+                       if (in_array('ITemplateEngine', class_implements($k))) {
+                               $this->register_template_engine($k);
+                       }
+               }
+
+               self::$a = $this;
+       }
+
+       /**
+        * @brief Returns the base filesystem path of the App
+        *
+        * It first checks for the internal variable, then for DOCUMENT_ROOT and
+        * finally for PWD
+        *
+        * @return string
+        */
+       public static function get_basepath() {
+               if (isset($this)) {
+                       $basepath = $this->basepath;
+               }
+
+               if (! $basepath) {
+                       $basepath = Config::get('system', 'basepath');
+               }
+
+               if (! $basepath && x($_SERVER, 'DOCUMENT_ROOT')) {
+                       $basepath = $_SERVER['DOCUMENT_ROOT'];
+               }
+
+               if (! $basepath && x($_SERVER, 'PWD')) {
+                       $basepath = $_SERVER['PWD'];
+               }
+
+               return $basepath;
+       }
+
+       function get_scheme() {
+               return $this->scheme;
+       }
+
+       /**
+        * @brief Retrieves the Friendica instance base URL
+        *
+        * This function assembles the base URL from multiple parts:
+        * - Protocol is determined either by the request or a combination of
+        * system.ssl_policy and the $ssl parameter.
+        * - Host name is determined either by system.hostname or inferred from request
+        * - Path is inferred from SCRIPT_NAME
+        *
+        * Note: $ssl parameter value doesn't directly correlate with the resulting protocol
+        *
+        * @param bool $ssl Whether to append http or https under SSL_POLICY_SELFSIGN
+        * @return string Friendica server base URL
+        */
+       function get_baseurl($ssl = false) {
+               // Is the function called statically?
+               if (!(isset($this) && get_class($this) == __CLASS__)) {
+                       return self::$a->get_baseurl($ssl);
+               }
+
+               $scheme = $this->scheme;
+
+               if (Config::get('system', 'ssl_policy') == SSL_POLICY_FULL) {
+                       $scheme = 'https';
+               }
+
+               //      Basically, we have $ssl = true on any links which can only be seen by a logged in user
+               //      (and also the login link). Anything seen by an outsider will have it turned off.
+
+               if (Config::get('system', 'ssl_policy') == SSL_POLICY_SELFSIGN) {
+                       if ($ssl) {
+                               $scheme = 'https';
+                       } else {
+                               $scheme = 'http';
+                       }
+               }
+
+               if (Config::get('config', 'hostname') != '') {
+                       $this->hostname = Config::get('config', 'hostname');
+               }
+
+               return $scheme . '://' . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
+       }
+
+       /**
+        * @brief Initializes the baseurl components
+        *
+        * Clears the baseurl cache to prevent inconstistencies
+        *
+        * @param string $url
+        */
+       function set_baseurl($url) {
+               $parsed = @parse_url($url);
+
+               if ($parsed) {
+                       $this->scheme = $parsed['scheme'];
+
+                       $hostname = $parsed['host'];
+                       if (x($parsed, 'port')) {
+                               $hostname .= ':' . $parsed['port'];
+                       }
+                       if (x($parsed, 'path')) {
+                               $this->path = trim($parsed['path'], '\\/');
+                       }
+
+                       if (file_exists('.htpreconfig.php')) {
+                               include '.htpreconfig.php';
+                       }
+
+                       if (Config::get('config', 'hostname') != '') {
+                               $this->hostname = Config::get('config', 'hostname');
+                       }
+
+                       if (!isset($this->hostname) OR ( $this->hostname == '')) {
+                               $this->hostname = $hostname;
+                       }
+               }
+       }
+
+       function get_hostname() {
+               if (Config::get('config', 'hostname') != '') {
+                       $this->hostname = Config::get('config', 'hostname');
+               }
+
+               return $this->hostname;
+       }
+
+       function set_hostname($h) {
+               $this->hostname = $h;
+       }
+
+       function set_path($p) {
+               $this->path = trim(trim($p), '/');
+       }
+
+       function get_path() {
+               return $this->path;
+       }
+
+       function set_pager_total($n) {
+               $this->pager['total'] = intval($n);
+       }
+
+       function set_pager_itemspage($n) {
+               $this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0);
+               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
+       }
+
+       function set_pager_page($n) {
+               $this->pager['page'] = $n;
+               $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage'];
+       }
+
+       function init_pagehead() {
+               $interval = ((local_user()) ? PConfig::get(local_user(), 'system', 'update_interval') : 40000);
+
+               // If the update is 'deactivated' set it to the highest integer number (~24 days)
+               if ($interval < 0) {
+                       $interval = 2147483647;
+               }
+
+               if ($interval < 10000) {
+                       $interval = 40000;
+               }
+
+               // compose the page title from the sitename and the
+               // current module called
+               if (!$this->module == '') {
+                       $this->page['title'] = $this->config['sitename'] . ' (' . $this->module . ')';
+               } else {
+                       $this->page['title'] = $this->config['sitename'];
+               }
+
+               /* put the head template at the beginning of page['htmlhead']
+                * since the code added by the modules frequently depends on it
+                * being first
+                */
+               if (!isset($this->page['htmlhead'])) {
+                       $this->page['htmlhead'] = '';
+               }
+
+               // If we're using Smarty, then doing replace_macros() will replace
+               // any unrecognized variables with a blank string. Since we delay
+               // replacing $stylesheet until later, we need to replace it now
+               // with another variable name
+               if ($this->theme['template_engine'] === 'smarty3') {
+                       $stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
+               } else {
+                       $stylesheet = '$stylesheet';
+               }
+
+               $shortcut_icon = Config::get('system', 'shortcut_icon');
+               if ($shortcut_icon == '') {
+                       $shortcut_icon = 'images/friendica-32.png';
+               }
+
+               $touch_icon = Config::get('system', 'touch_icon');
+               if ($touch_icon == '') {
+                       $touch_icon = 'images/friendica-128.png';
+               }
+
+               // get data wich is needed for infinite scroll on the network page
+               $invinite_scroll = infinite_scroll_data($this->module);
+
+               $tpl = get_markup_template('head.tpl');
+               $this->page['htmlhead'] = replace_macros($tpl, array(
+                               '$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
+                               '$local_user' => local_user(),
+                               '$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
+                               '$delitem' => t('Delete this item?'),
+                               '$showmore' => t('show more'),
+                               '$showfewer' => t('show fewer'),
+                               '$update_interval' => $interval,
+                               '$shortcut_icon' => $shortcut_icon,
+                               '$touch_icon' => $touch_icon,
+                               '$stylesheet' => $stylesheet,
+                               '$infinite_scroll' => $invinite_scroll,
+                       )) . $this->page['htmlhead'];
+       }
+
+       function init_page_end() {
+               if (!isset($this->page['end'])) {
+                       $this->page['end'] = '';
+               }
+               $tpl = get_markup_template('end.tpl');
+               $this->page['end'] = replace_macros($tpl, array(
+                               '$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
+                       )) . $this->page['end'];
+       }
+
+       function set_curl_code($code) {
+               $this->curl_code = $code;
+       }
+
+       function get_curl_code() {
+               return $this->curl_code;
+       }
+
+       function set_curl_content_type($content_type) {
+               $this->curl_content_type = $content_type;
+       }
+
+       function get_curl_content_type() {
+               return $this->curl_content_type;
+       }
+
+       function set_curl_headers($headers) {
+               $this->curl_headers = $headers;
+       }
+
+       function get_curl_headers() {
+               return $this->curl_headers;
+       }
+
+       function get_cached_avatar_image($avatar_image) {
+               return $avatar_image;
+       }
+
+       /**
+        * @brief Removes the baseurl from an url. This avoids some mixed content problems.
+        *
+        * @param string $orig_url
+        *
+        * @return string The cleaned url
+        */
+       function remove_baseurl($orig_url) {
+
+               // Is the function called statically?
+               if (!(isset($this) && get_class($this) == __CLASS__)) {
+                       return self::$a->remove_baseurl($orig_url);
+               }
+
+               // Remove the hostname from the url if it is an internal link
+               $nurl = normalise_link($orig_url);
+               $base = normalise_link($this->get_baseurl());
+               $url = str_replace($base . '/', '', $nurl);
+
+               // if it is an external link return the orignal value
+               if ($url == normalise_link($orig_url)) {
+                       return $orig_url;
+               } else {
+                       return $url;
+               }
+       }
+
+       /**
+        * @brief Register template engine class
+        *
+        * If $name is '', is used class static property $class::$name
+        *
+        * @param string $class
+        * @param string $name
+        */
+       function register_template_engine($class, $name = '') {
+               /// @TODO Really === and not just == ?
+               if ($name === '') {
+                       $v = get_class_vars($class);
+                       if (x($v, 'name'))
+                               $name = $v['name'];
+               }
+               if ($name === '') {
+                       echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
+                       killme();
+               }
+               $this->template_engines[$name] = $class;
+       }
+
+       /**
+        * @brief Return template engine instance.
+        *
+        * If $name is not defined, return engine defined by theme,
+        * or default
+        *
+        * @param strin $name Template engine name
+        * @return object Template Engine instance
+        */
+       function template_engine($name = '') {
+               /// @TODO really type-check included?
+               if ($name !== '') {
+                       $template_engine = $name;
+               } else {
+                       $template_engine = 'smarty3';
+                       if (x($this->theme, 'template_engine')) {
+                               $template_engine = $this->theme['template_engine'];
+                       }
+               }
+
+               if (isset($this->template_engines[$template_engine])) {
+                       if (isset($this->template_engine_instance[$template_engine])) {
+                               return $this->template_engine_instance[$template_engine];
+                       } else {
+                               $class = $this->template_engines[$template_engine];
+                               $obj = new $class;
+                               $this->template_engine_instance[$template_engine] = $obj;
+                               return $obj;
+                       }
+               }
+
+               echo "template engine <tt>$template_engine</tt> is not registered!\n";
+               killme();
+       }
+
+       /**
+        * @brief Returns the active template engine.
+        *
+        * @return string
+        */
+       function get_template_engine() {
+               return $this->theme['template_engine'];
+       }
+
+       function set_template_engine($engine = 'smarty3') {
+               $this->theme['template_engine'] = $engine;
+       }
+
+       function get_template_ldelim($engine = 'smarty3') {
+               return $this->ldelim[$engine];
+       }
+
+       function get_template_rdelim($engine = 'smarty3') {
+               return $this->rdelim[$engine];
+       }
+
+       function save_timestamp($stamp, $value) {
+               if (!isset($this->config['system']['profiler']) || !$this->config['system']['profiler']) {
+                       return;
+               }
+
+               $duration = (float) (microtime(true) - $stamp);
+
+               if (!isset($this->performance[$value])) {
+                       // Prevent ugly E_NOTICE
+                       $this->performance[$value] = 0;
+               }
+
+               $this->performance[$value] += (float) $duration;
+               $this->performance['marktime'] += (float) $duration;
+
+               $callstack = $this->callstack();
+
+               if (!isset($this->callstack[$value][$callstack])) {
+                       // Prevent ugly E_NOTICE
+                       $this->callstack[$value][$callstack] = 0;
+               }
+
+               $this->callstack[$value][$callstack] += (float) $duration;
+       }
+
+       /**
+        * @brief Log active processes into the "process" table
+        */
+       function start_process() {
+               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
+
+               $command = basename($trace[0]['file']);
+
+               $this->remove_inactive_processes();
+
+               q('START TRANSACTION');
+
+               $r = q('SELECT `pid` FROM `process` WHERE `pid` = %d', intval(getmypid()));
+               if (!dbm::is_result($r)) {
+                       q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')", intval(getmypid()), dbesc($command), dbesc(datetime_convert()));
+               }
+               q('COMMIT');
+       }
+
+       /**
+        * @brief Remove inactive processes
+        */
+       function remove_inactive_processes() {
+               q('START TRANSACTION');
+
+               $r = q('SELECT `pid` FROM `process`');
+               if (dbm::is_result($r)) {
+                       foreach ($r AS $process) {
+                               if (!posix_kill($process['pid'], 0)) {
+                                       q('DELETE FROM `process` WHERE `pid` = %d', intval($process['pid']));
+                               }
+                       }
+               }
+               q('COMMIT');
+       }
+
+       /**
+        * @brief Remove the active process from the "process" table
+        */
+       function end_process() {
+               q('DELETE FROM `process` WHERE `pid` = %d', intval(getmypid()));
+       }
+
+       /**
+        * @brief Returns a string with a callstack. Can be used for logging.
+        *
+        * @return string
+        */
+       function callstack($depth = 4) {
+               $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $depth + 2);
+
+               // We remove the first two items from the list since they contain data that we don't need.
+               array_shift($trace);
+               array_shift($trace);
+
+               $callstack = array();
+               foreach ($trace AS $func) {
+                       $callstack[] = $func['function'];
+               }
+
+               return implode(', ', $callstack);
+       }
+
+       function get_useragent() {
+               return
+                       FRIENDICA_PLATFORM . " '" .
+                       FRIENDICA_CODENAME . "' " .
+                       FRIENDICA_VERSION . '-' .
+                       DB_UPDATE_VERSION . '; ' .
+                       $this->get_baseurl();
+       }
+
+       function is_friendica_app() {
+               return $this->is_friendica_app;
+       }
+
+       /**
+        * @brief Checks if the site is called via a backend process
+        *
+        * This isn't a perfect solution. But we need this check very early.
+        * So we cannot wait until the modules are loaded.
+        *
+        * @return bool Is it a known backend?
+        */
+       function is_backend() {
+               static $backends = array();
+               $backends[] = '_well_known';
+               $backends[] = 'api';
+               $backends[] = 'dfrn_notify';
+               $backends[] = 'fetch';
+               $backends[] = 'hcard';
+               $backends[] = 'hostxrd';
+               $backends[] = 'nodeinfo';
+               $backends[] = 'noscrape';
+               $backends[] = 'p';
+               $backends[] = 'poco';
+               $backends[] = 'post';
+               $backends[] = 'proxy';
+               $backends[] = 'pubsub';
+               $backends[] = 'pubsubhubbub';
+               $backends[] = 'receive';
+               $backends[] = 'rsd_xml';
+               $backends[] = 'salmon';
+               $backends[] = 'statistics_json';
+               $backends[] = 'xrd';
+
+               // Check if current module is in backend or backend flag is set
+               return (in_array($this->module, $backends) || $this->backend);
+       }
+
+       /**
+        * @brief Checks if the maximum number of database processes is reached
+        *
+        * @return bool Is the limit reached?
+        */
+       function max_processes_reached() {
+
+               if ($this->is_backend()) {
+                       $process = 'backend';
+                       $max_processes = Config::get('system', 'max_processes_backend');
+                       if (intval($max_processes) == 0) {
+                               $max_processes = 5;
+                       }
+               } else {
+                       $process = 'frontend';
+                       $max_processes = Config::get('system', 'max_processes_frontend');
+                       if (intval($max_processes) == 0) {
+                               $max_processes = 20;
+                       }
+               }
+
+               $processlist = dbm::processlist();
+               if ($processlist['list'] != '') {
+                       logger('Processcheck: Processes: ' . $processlist['amount'] . ' - Processlist: ' . $processlist['list'], LOGGER_DEBUG);
+
+                       if ($processlist['amount'] > $max_processes) {
+                               logger('Processcheck: Maximum number of processes for ' . $process . ' tasks (' . $max_processes . ') reached.', LOGGER_DEBUG);
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * @brief Checks if the minimal memory is reached
+        *
+        * @return bool Is the memory limit reached?
+        */
+       public function min_memory_reached() {
+               $min_memory = Config::get('system', 'min_memory', 0);
+               if ($min_memory == 0) {
+                       return false;
+               }
+
+               if (!is_readable('/proc/meminfo')) {
+                       return false;
+               }
+
+               $memdata = explode("\n", file_get_contents('/proc/meminfo'));
+
+               $meminfo = array();
+               foreach ($memdata as $line) {
+                       list($key, $val) = explode(':', $line);
+                       $meminfo[$key] = (int) trim(str_replace('kB', '', $val));
+                       $meminfo[$key] = (int) ($meminfo[$key] / 1024);
+               }
+
+               if (!isset($meminfo['MemAvailable']) OR ! isset($meminfo['MemFree'])) {
+                       return false;
+               }
+
+               $free = $meminfo['MemAvailable'] + $meminfo['MemFree'];
+
+               $reached = ($free < $min_memory);
+
+               if ($reached) {
+                       logger('Minimal memory reached: ' . $free . '/' . $meminfo['MemTotal'] . ' - limit ' . $min_memory, LOGGER_DEBUG);
+               }
+
+               return $reached;
+       }
+
+       /**
+        * @brief Checks if the maximum load is reached
+        *
+        * @return bool Is the load reached?
+        */
+       function maxload_reached() {
+
+               if ($this->is_backend()) {
+                       $process = 'backend';
+                       $maxsysload = intval(Config::get('system', 'maxloadavg'));
+                       if ($maxsysload < 1) {
+                               $maxsysload = 50;
+                       }
+               } else {
+                       $process = 'frontend';
+                       $maxsysload = intval(Config::get('system', 'maxloadavg_frontend'));
+                       if ($maxsysload < 1) {
+                               $maxsysload = 50;
+                       }
+               }
+
+               $load = current_load();
+               if ($load) {
+                       if (intval($load) > $maxsysload) {
+                               logger('system: load ' . $load . ' for ' . $process . ' tasks (' . $maxsysload . ') too high.');
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       function proc_run($args) {
+
+               if (!function_exists('proc_open')) {
+                       return;
+               }
+
+               // If the last worker fork was less than 10 seconds before then don't fork another one.
+               // This should prevent the forking of masses of workers.
+               $cachekey = 'app:proc_run:started';
+               $result = Cache::get($cachekey);
+
+               if (!is_null($result) AND ( time() - $result) < 10) {
+                       return;
+               }
+
+               // Set the timestamp of the last proc_run
+               Cache::set($cachekey, time(), CACHE_MINUTE);
+
+               array_unshift($args, ((x($this->config, 'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'));
+
+               // add baseurl to args. cli scripts can't construct it
+               $args[] = $this->get_baseurl();
+
+               for ($x = 0; $x < count($args); $x ++) {
+                       $args[$x] = escapeshellarg($args[$x]);
+               }
+
+               $cmdline = implode($args, ' ');
+
+               if ($this->min_memory_reached()) {
+                       return;
+               }
+
+               if (Config::get('system', 'proc_windows')) {
+                       $resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, $this->get_basepath());
+               } else {
+                       $resource = proc_open($cmdline . ' &', array(), $foo, $this->get_basepath());
+               }
+               if (!is_resource($resource)) {
+                       logger('We got no resource for command ' . $cmdline, LOGGER_DEBUG);
+                       return;
+               }
+               proc_close($resource);
+       }
+
+       /**
+        * @brief Returns the system user that is executing the script
+        *
+        * This mostly returns something like "www-data".
+        *
+        * @return string system username
+        */
+       static function systemuser() {
+               if (!function_exists('posix_getpwuid') OR ! function_exists('posix_geteuid')) {
+                       return '';
+               }
+
+               $processUser = posix_getpwuid(posix_geteuid());
+               return $processUser['name'];
+       }
+
+       /**
+        * @brief Checks if a given directory is usable for the system
+        *
+        * @return boolean the directory is usable
+        */
+       static function directory_usable($directory, $check_writable = true) {
+               if ($directory == '') {
+                       logger('Directory is empty. This shouldn\'t happen.', LOGGER_DEBUG);
+                       return false;
+               }
+
+               if (!file_exists($directory)) {
+                       logger('Path "' . $directory . '" does not exist for user ' . self::systemuser(), LOGGER_DEBUG);
+                       return false;
+               }
+               if (is_file($directory)) {
+                       logger('Path "' . $directory . '" is a file for user ' . self::systemuser(), LOGGER_DEBUG);
+                       return false;
+               }
+               if (!is_dir($directory)) {
+                       logger('Path "' . $directory . '" is not a directory for user ' . self::systemuser(), LOGGER_DEBUG);
+                       return false;
+               }
+               if ($check_writable AND !is_writable($directory)) {
+                       logger('Path "' . $directory . '" is not writable for user ' . self::systemuser(), LOGGER_DEBUG);
+                       return false;
+               }
+               return true;
+       }
+}
diff --git a/src/Network/Probe.php b/src/Network/Probe.php
new file mode 100644 (file)
index 0000000..2901ead
--- /dev/null
@@ -0,0 +1,1403 @@
+<?php
+
+namespace Friendica\Network;
+
+/**
+ * @file src/Network/Probe.php
+ * @brief Functions for probing URL
+ *
+ */
+
+use Friendica\App;
+use Friendica\Core\Config;
+
+use dbm;
+use Cache;
+use xml;
+
+use DomXPath;
+use DOMDocument;
+
+require_once 'include/feed.php';
+require_once 'include/email.php';
+require_once 'include/network.php';
+
+/**
+ * @brief This class contain functions for probing URL
+ *
+ */
+class Probe {
+
+       private static $baseurl;
+
+       /**
+        * @brief Rearrange the array so that it always has the same order
+        *
+        * @param array $data Unordered data
+        *
+        * @return array Ordered data
+        */
+       private function rearrangeData($data) {
+               $fields = array("name", "nick", "guid", "url", "addr", "alias",
+                               "photo", "community", "keywords", "location", "about",
+                               "batch", "notify", "poll", "request", "confirm", "poco",
+                               "priority", "network", "pubkey", "baseurl");
+
+               $newdata = array();
+               foreach ($fields as $field) {
+                       if (isset($data[$field])) {
+                               $newdata[$field] = $data[$field];
+                       } else {
+                               $newdata[$field] = "";
+                       }
+               }
+
+               // We don't use the "priority" field anymore and replace it with a dummy.
+               $newdata["priority"] = 0;
+
+               return $newdata;
+       }
+
+       /**
+        * @brief Probes for XRD data
+        *
+        * @param string $host The host part of an url
+        *
+        * @return array
+        *      'lrdd' => Link to LRDD endpoint
+        *      'lrdd-xml' => Link to LRDD endpoint in XML format
+        *      'lrdd-json' => Link to LRDD endpoint in JSON format
+        */
+       private function xrd($host) {
+
+               // Reset the static variable
+               self::$baseurl = '';
+
+               $ssl_url = "https://".$host."/.well-known/host-meta";
+               $url = "http://".$host."/.well-known/host-meta";
+
+               $xrd_timeout = Config::get('system', 'xrd_timeout', 20);
+               $redirects = 0;
+
+               $ret = z_fetch_url($ssl_url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $xml = $ret['body'];
+
+               $xrd = parse_xml_string($xml, false);
+
+               if (!is_object($xrd)) {
+                       $ret = z_fetch_url($url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
+                       if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                               return false;
+                       }
+                       $xml = $ret['body'];
+                       $xrd = parse_xml_string($xml, false);
+               }
+               if (!is_object($xrd)) {
+                       return false;
+               }
+
+               $links = xml::element_to_array($xrd);
+               if (!isset($links["xrd"]["link"])) {
+                       return false;
+               }
+
+               $xrd_data = array();
+
+               foreach ($links["xrd"]["link"] as $value => $link) {
+                       if (isset($link["@attributes"])) {
+                               $attributes = $link["@attributes"];
+                       } elseif ($value == "@attributes") {
+                               $attributes = $link;
+                       } else {
+                               continue;
+                       }
+
+                       if (($attributes["rel"] == "lrdd")
+                               AND ($attributes["type"] == "application/xrd+xml")
+                       ) {
+                               $xrd_data["lrdd-xml"] = $attributes["template"];
+                       } elseif (($attributes["rel"] == "lrdd")
+                               AND ($attributes["type"] == "application/json")
+                       ) {
+                               $xrd_data["lrdd-json"] = $attributes["template"];
+                       } elseif ($attributes["rel"] == "lrdd") {
+                               $xrd_data["lrdd"] = $attributes["template"];
+                       }
+               }
+
+               self::$baseurl = "http://".$host;
+
+               return $xrd_data;
+       }
+
+       /**
+        * @brief Perform Webfinger lookup and return DFRN data
+        *
+        * Given an email style address, perform webfinger lookup and
+        * return the resulting DFRN profile URL, or if no DFRN profile URL
+        * is located, returns an OStatus subscription template (prefixed
+        * with the string 'stat:' to identify it as on OStatus template).
+        * If this isn't an email style address just return $webbie.
+        * Return an empty string if email-style addresses but webfinger fails,
+        * or if the resultant personal XRD doesn't contain a supported
+        * subscription/friend-request attribute.
+        *
+        * amended 7/9/2011 to return an hcard which could save potentially loading
+        * a lengthy content page to scrape dfrn attributes
+        *
+        * @param string $webbie Address that should be probed
+        * @param string $hcard_url Link to the hcard - is returned by reference
+        *
+        * @return string profile link
+        */
+
+       public static function webfingerDfrn($webbie, &$hcard_url) {
+
+               $profile_link = '';
+
+               $links = self::lrdd($webbie);
+               logger('webfingerDfrn: '.$webbie.':'.print_r($links, true), LOGGER_DATA);
+               if (count($links)) {
+                       foreach ($links as $link) {
+                               if ($link['@attributes']['rel'] === NAMESPACE_DFRN) {
+                                       $profile_link = $link['@attributes']['href'];
+                               }
+                               if (($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) AND ($profile_link == "")) {
+                                       $profile_link = 'stat:'.$link['@attributes']['template'];
+                               }
+                               if ($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') {
+                                       $hcard_url = $link['@attributes']['href'];
+                               }
+                       }
+               }
+               return $profile_link;
+       }
+
+       /**
+        * @brief Check an URI for LRDD data
+        *
+        * this is a replacement for the "lrdd" function in include/network.php.
+        * It isn't used in this class and has some redundancies in the code.
+        * When time comes we can check the existing calls for "lrdd" if we can rework them.
+        *
+        * @param string $uri Address that should be probed
+        *
+        * @return array uri data
+        */
+       public static function lrdd($uri) {
+
+               $lrdd = self::xrd($uri);
+               $webfinger = null;
+
+               if (!$lrdd) {
+                       $parts = @parse_url($uri);
+                       if (!$parts) {
+                               return array();
+                       }
+
+                       $host = $parts["host"];
+                       if (isset($parts["port"])) {
+                               $host .= ':'.$parts["port"];
+                       }
+
+                       $path_parts = explode("/", trim($parts["path"], "/"));
+
+                       $nick = array_pop($path_parts);
+
+                       do {
+                               $lrdd = self::xrd($host);
+                               $host .= "/".array_shift($path_parts);
+                       } while (!$lrdd AND (sizeof($path_parts) > 0));
+               }
+
+               if (!$lrdd) {
+                       return array();
+               }
+
+               foreach ($lrdd as $key => $link) {
+                       if ($webfinger) {
+                               continue;
+                       }
+
+                       if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json"))) {
+                               continue;
+                       }
+
+                       $path = str_replace('{uri}', urlencode($uri), $link);
+                       $webfinger = self::webfinger($path);
+
+                       if (!$webfinger AND (strstr($uri, "@"))) {
+                               $path = str_replace('{uri}', urlencode("acct:".$uri), $link);
+                               $webfinger = self::webfinger($path);
+                       }
+
+                       // Special treatment for Mastodon
+                       // Problem is that Mastodon uses an URL format like http://domain.tld/@nick
+                       // But the webfinger for this format fails.
+                       if (!$webfinger AND isset($nick)) {
+                               // Mastodon uses a "@" as prefix for usernames in their url format
+                               $nick = ltrim($nick, '@');
+
+                               $addr = $nick."@".$host;
+
+                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
+                               $webfinger = self::webfinger($path);
+                       }
+               }
+
+               if (!is_array($webfinger["links"])) {
+                       return false;
+               }
+
+               $data = array();
+
+               foreach ($webfinger["links"] as $link) {
+                       $data[] = array("@attributes" => $link);
+               }
+
+               if (is_array($webfinger["aliases"])) {
+                       foreach ($webfinger["aliases"] as $alias) {
+                               $data[] = array("@attributes" =>
+                                                       array("rel" => "alias",
+                                                               "href" => $alias));
+                       }
+               }
+
+               return $data;
+       }
+
+       /**
+        * @brief Fetch information (protocol endpoints and user information) about a given uri
+        *
+        * @param string $uri Address that should be probed
+        * @param string $network Test for this specific network
+        * @param integer $uid User ID for the probe (only used for mails)
+        * @param boolean $cache Use cached values?
+        *
+        * @return array uri data
+        */
+       public static function uri($uri, $network = "", $uid = 0, $cache = true) {
+
+               if ($cache) {
+                       $result = Cache::get("probe_url:".$network.":".$uri);
+                       if (!is_null($result)) {
+                               return $result;
+                       }
+               }
+
+               if ($uid == 0) {
+                       $uid = local_user();
+               }
+
+               $data = self::detect($uri, $network, $uid);
+
+               if (!isset($data["url"])) {
+                       $data["url"] = $uri;
+               }
+
+               if ($data["photo"] != "") {
+                       $data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"]));
+               } else {
+                       $data["photo"] = App::get_baseurl().'/images/person-175.jpg';
+               }
+
+               if (!isset($data["name"]) OR ($data["name"] == "")) {
+                       if (isset($data["nick"])) {
+                               $data["name"] = $data["nick"];
+                       }
+
+                       if ($data["name"] == "") {
+                               $data["name"] = $data["url"];
+                       }
+               }
+
+               if (!isset($data["nick"]) OR ($data["nick"] == "")) {
+                       $data["nick"] = strtolower($data["name"]);
+
+                       if (strpos($data['nick'], ' ')) {
+                               $data['nick'] = trim(substr($data['nick'], 0, strpos($data['nick'], ' ')));
+                       }
+               }
+
+               if (self::$baseurl != "") {
+                       $data["baseurl"] = self::$baseurl;
+               }
+
+               if (!isset($data["network"])) {
+                       $data["network"] = NETWORK_PHANTOM;
+               }
+
+               $data = self::rearrangeData($data);
+
+               // Only store into the cache if the value seems to be valid
+               if (!in_array($data['network'], array(NETWORK_PHANTOM, NETWORK_MAIL))) {
+                       Cache::set("probe_url:".$network.":".$uri, $data, CACHE_DAY);
+
+                       /// @todo temporary fix - we need a real contact update function that updates only changing fields
+                       /// The biggest problem is the avatar picture that could have a reduced image size.
+                       /// It should only be updated if the existing picture isn't existing anymore.
+                       /// We only update the contact when it is no probing for a specific network.
+                       if (($data['network'] != NETWORK_FEED)
+                               AND ($network == "")
+                               AND $data["name"]
+                               AND $data["nick"]
+                               AND $data["url"]
+                               AND $data["addr"]
+                               AND $data["poll"]
+                       ) {
+                               q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `addr` = '%s',
+                                               `notify` = '%s', `poll` = '%s', `alias` = '%s', `success_update` = '%s'
+                                       WHERE `nurl` = '%s' AND NOT `self` AND `uid` = 0",
+                                       dbesc($data["name"]),
+                                       dbesc($data["nick"]),
+                                       dbesc($data["url"]),
+                                       dbesc($data["addr"]),
+                                       dbesc($data["notify"]),
+                                       dbesc($data["poll"]),
+                                       dbesc($data["alias"]),
+                                       dbesc(datetime_convert()),
+                                       dbesc(normalise_link($data['url']))
+                               );
+                       }
+               }
+
+               return $data;
+       }
+
+       /**
+        * @brief Fetch information (protocol endpoints and user information) about a given uri
+        *
+        * This function is only called by the "uri" function that adds caching and rearranging of data.
+        *
+        * @param string $uri Address that should be probed
+        * @param string $network Test for this specific network
+        * @param integer $uid User ID for the probe (only used for mails)
+        *
+        * @return array uri data
+        */
+       private function detect($uri, $network, $uid) {
+               $parts = parse_url($uri);
+
+               if (isset($parts["scheme"]) AND isset($parts["host"]) AND isset($parts["path"])) {
+                       $host = $parts["host"];
+                       if (isset($parts["port"])) {
+                               $host .= ':'.$parts["port"];
+                       }
+
+                       if ($host == 'twitter.com') {
+                               return array("network" => NETWORK_TWITTER);
+                       }
+                       $lrdd = self::xrd($host);
+
+                       $path_parts = explode("/", trim($parts["path"], "/"));
+
+                       while (!$lrdd AND (sizeof($path_parts) > 1)) {
+                               $host .= "/".array_shift($path_parts);
+                               $lrdd = self::xrd($host);
+                       }
+                       if (!$lrdd) {
+                               return self::feed($uri);
+                       }
+                       $nick = array_pop($path_parts);
+
+                       // Mastodon uses a "@" as prefix for usernames in their url format
+                       $nick = ltrim($nick, '@');
+
+                       $addr = $nick."@".$host;
+
+               } elseif (strstr($uri, '@')) {
+                       // If the URI starts with "mailto:" then jump directly to the mail detection
+                       if (strpos($uri, 'mailto:') !== false) {
+                               $uri = str_replace('mailto:', '', $uri);
+                               return self::mail($uri, $uid);
+                       }
+
+                       if ($network == NETWORK_MAIL) {
+                               return self::mail($uri, $uid);
+                       }
+                       // Remove "acct:" from the URI
+                       $uri = str_replace('acct:', '', $uri);
+
+                       $host = substr($uri, strpos($uri, '@') + 1);
+                       $nick = substr($uri, 0, strpos($uri, '@'));
+
+                       if (strpos($uri, '@twitter.com')) {
+                               return array("network" => NETWORK_TWITTER);
+                       }
+                       $lrdd = self::xrd($host);
+
+                       if (!$lrdd) {
+                               return self::mail($uri, $uid);
+                       }
+                       $addr = $uri;
+
+               } else {
+                       return false;
+               }
+
+               $webfinger = false;
+
+               /// @todo Do we need the prefix "acct:" or "acct://"?
+
+               foreach ($lrdd as $key => $link) {
+                       if ($webfinger) {
+                               continue;
+                       }
+                       if (!in_array($key, array("lrdd", "lrdd-xml", "lrdd-json"))) {
+                               continue;
+                       }
+                       // At first try it with the given uri
+                       $path = str_replace('{uri}', urlencode($uri), $link);
+                       $webfinger = self::webfinger($path);
+
+                       // We cannot be sure that the detected address was correct, so we don't use the values
+                       if ($webfinger AND ($uri != $addr)) {
+                               $nick = "";
+                               $addr = "";
+                       }
+
+                       // Try webfinger with the address (user@domain.tld)
+                       if (!$webfinger) {
+                               $path = str_replace('{uri}', urlencode($addr), $link);
+                               $webfinger = self::webfinger($path);
+                       }
+
+                       // Mastodon needs to have it with "acct:"
+                       if (!$webfinger) {
+                               $path = str_replace('{uri}', urlencode("acct:".$addr), $link);
+                               $webfinger = self::webfinger($path);
+                       }
+               }
+               if (!$webfinger) {
+                       return self::feed($uri);
+               }
+
+               $result = false;
+
+               logger("Probing ".$uri, LOGGER_DEBUG);
+
+               if (in_array($network, array("", NETWORK_DFRN))) {
+                       $result = self::dfrn($webfinger);
+               }
+               if ((!$result AND ($network == "")) OR ($network == NETWORK_DIASPORA)) {
+                       $result = self::diaspora($webfinger);
+               }
+               if ((!$result AND ($network == "")) OR ($network == NETWORK_OSTATUS)) {
+                       $result = self::ostatus($webfinger);
+               }
+               if ((!$result AND ($network == "")) OR ($network == NETWORK_PUMPIO)) {
+                       $result = self::pumpio($webfinger);
+               }
+               if ((!$result AND ($network == "")) OR ($network == NETWORK_FEED)) {
+                       $result = self::feed($uri);
+               } else {
+                       // We overwrite the detected nick with our try if the previois routines hadn't detected it.
+                       // Additionally it is overwritten when the nickname doesn't make sense (contains spaces).
+                       if ((!isset($result["nick"]) OR ($result["nick"] == "") OR (strstr($result["nick"], " "))) AND ($nick != "")) {
+                               $result["nick"] = $nick;
+                       }
+
+                       if ((!isset($result["addr"]) OR ($result["addr"] == "")) AND ($addr != "")) {
+                               $result["addr"] = $addr;
+                       }
+               }
+
+               logger($uri." is ".$result["network"], LOGGER_DEBUG);
+
+               if (!isset($result["baseurl"]) OR ($result["baseurl"] == "")) {
+                       $pos = strpos($result["url"], $host);
+                       if ($pos) {
+                               $result["baseurl"] = substr($result["url"], 0, $pos).$host;
+                       }
+               }
+
+               return $result;
+       }
+
+       /**
+        * @brief Perform a webfinger request.
+        *
+        * For details see RFC 7033: <https://tools.ietf.org/html/rfc7033>
+        *
+        * @param string $url Address that should be probed
+        *
+        * @return array webfinger data
+        */
+       private function webfinger($url) {
+
+               $xrd_timeout = Config::get('system', 'xrd_timeout', 20);
+               $redirects = 0;
+
+               $ret = z_fetch_url($url, false, $redirects, array('timeout' => $xrd_timeout, 'accept_content' => 'application/xrd+xml'));
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $data = $ret['body'];
+
+               $xrd = parse_xml_string($data, false);
+
+               if (!is_object($xrd)) {
+                       // If it is not XML, maybe it is JSON
+                       $webfinger = json_decode($data, true);
+
+                       if (!isset($webfinger["links"])) {
+                               return false;
+                       }
+
+                       return $webfinger;
+               }
+
+               $xrd_arr = xml::element_to_array($xrd);
+               if (!isset($xrd_arr["xrd"]["link"])) {
+                       return false;
+               }
+
+               $webfinger = array();
+
+               if (isset($xrd_arr["xrd"]["subject"])) {
+                       $webfinger["subject"] = $xrd_arr["xrd"]["subject"];
+               }
+
+               if (isset($xrd_arr["xrd"]["alias"])) {
+                       $webfinger["aliases"] = $xrd_arr["xrd"]["alias"];
+               }
+
+               $webfinger["links"] = array();
+
+               foreach ($xrd_arr["xrd"]["link"] as $value => $data) {
+                       if (isset($data["@attributes"])) {
+                               $attributes = $data["@attributes"];
+                       } elseif ($value == "@attributes") {
+                               $attributes = $data;
+                       } else {
+                               continue;
+                       }
+
+                       $webfinger["links"][] = $attributes;
+               }
+               return $webfinger;
+       }
+
+       /**
+        * @brief Poll the Friendica specific noscrape page.
+        *
+        * "noscrape" is a faster alternative to fetch the data from the hcard.
+        * This functionality was originally created for the directory.
+        *
+        * @param string $noscrape_url Link to the noscrape page
+        * @param array $data The already fetched data
+        *
+        * @return array noscrape data
+        */
+       private function pollNoscrape($noscrape_url, $data) {
+               $ret = z_fetch_url($noscrape_url);
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $content = $ret['body'];
+               if (!$content) {
+                       return false;
+               }
+
+               $json = json_decode($content, true);
+               if (!is_array($json)) {
+                       return false;
+               }
+
+               if (isset($json["fn"])) {
+                       $data["name"] = $json["fn"];
+               }
+
+               if (isset($json["addr"])) {
+                       $data["addr"] = $json["addr"];
+               }
+
+               if (isset($json["nick"])) {
+                       $data["nick"] = $json["nick"];
+               }
+
+               if (isset($json["comm"])) {
+                       $data["community"] = $json["comm"];
+               }
+
+               if (isset($json["tags"])) {
+                       $keywords = implode(" ", $json["tags"]);
+                       if ($keywords != "") {
+                               $data["keywords"] = $keywords;
+                       }
+               }
+
+               $location = formatted_location($json);
+               if ($location) {
+                       $data["location"] = $location;
+               }
+
+               if (isset($json["about"])) {
+                       $data["about"] = $json["about"];
+               }
+
+               if (isset($json["key"])) {
+                       $data["pubkey"] = $json["key"];
+               }
+
+               if (isset($json["photo"])) {
+                       $data["photo"] = $json["photo"];
+               }
+
+               if (isset($json["dfrn-request"])) {
+                       $data["request"] = $json["dfrn-request"];
+               }
+
+               if (isset($json["dfrn-confirm"])) {
+                       $data["confirm"] = $json["dfrn-confirm"];
+               }
+
+               if (isset($json["dfrn-notify"])) {
+                       $data["notify"] = $json["dfrn-notify"];
+               }
+
+               if (isset($json["dfrn-poll"])) {
+                       $data["poll"] = $json["dfrn-poll"];
+               }
+
+               return $data;
+       }
+
+       /**
+        * @brief Check for valid DFRN data
+        *
+        * @param array $data DFRN data
+        *
+        * @return int Number of errors
+        */
+       public static function validDfrn($data) {
+               $errors = 0;
+               if (!isset($data['key'])) {
+                       $errors ++;
+               }
+               if (!isset($data['dfrn-request'])) {
+                       $errors ++;
+               }
+               if (!isset($data['dfrn-confirm'])) {
+                       $errors ++;
+               }
+               if (!isset($data['dfrn-notify'])) {
+                       $errors ++;
+               }
+               if (!isset($data['dfrn-poll'])) {
+                       $errors ++;
+               }
+               return $errors;
+       }
+
+       /**
+        * @brief Fetch data from a DFRN profile page and via "noscrape"
+        *
+        * @param string $profile_link Link to the profile page
+        *
+        * @return array profile data
+        */
+       public static function profile($profile_link) {
+
+               $data = array();
+
+               logger("Check profile ".$profile_link, LOGGER_DEBUG);
+
+               // Fetch data via noscrape - this is faster
+               $noscrape_url = str_replace(array("/hcard/", "/profile/"), "/noscrape/", $profile_link);
+               $data = self::pollNoscrape($noscrape_url, $data);
+
+               if (!isset($data["notify"])
+                       OR !isset($data["confirm"])
+                       OR !isset($data["request"])
+                       OR !isset($data["poll"])
+                       OR !isset($data["poco"])
+                       OR !isset($data["name"])
+                       OR !isset($data["photo"])
+               ) {
+                       $data = self::pollHcard($profile_link, $data, true);
+               }
+
+               $prof_data = array();
+               $prof_data["addr"]         = $data["addr"];
+               $prof_data["nick"]         = $data["nick"];
+               $prof_data["dfrn-request"] = $data["request"];
+               $prof_data["dfrn-confirm"] = $data["confirm"];
+               $prof_data["dfrn-notify"]  = $data["notify"];
+               $prof_data["dfrn-poll"]    = $data["poll"];
+               $prof_data["dfrn-poco"]    = $data["poco"];
+               $prof_data["photo"]        = $data["photo"];
+               $prof_data["fn"]           = $data["name"];
+               $prof_data["key"]          = $data["pubkey"];
+
+               logger("Result for profile ".$profile_link.": ".print_r($prof_data, true), LOGGER_DEBUG);
+
+               return $prof_data;
+       }
+
+       /**
+        * @brief Check for DFRN contact
+        *
+        * @param array $webfinger Webfinger data
+        *
+        * @return array DFRN data
+        */
+       private function dfrn($webfinger) {
+
+               $hcard_url = "";
+               $data = array();
+               foreach ($webfinger["links"] as $link) {
+                       if (($link["rel"] == NAMESPACE_DFRN) AND ($link["href"] != "")) {
+                               $data["network"] = NETWORK_DFRN;
+                       } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) {
+                               $data["poll"] = $link["href"];
+                       } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND ($link["type"] == "text/html") AND ($link["href"] != "")) {
+                               $data["url"] = $link["href"];
+                       } elseif (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) {
+                               $hcard_url = $link["href"];
+                       } elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) {
+                               $data["poco"] = $link["href"];
+                       } elseif (($link["rel"] == "http://webfinger.net/rel/avatar") AND ($link["href"] != "")) {
+                               $data["photo"] = $link["href"];
+                       } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) {
+                               $data["baseurl"] = trim($link["href"], '/');
+                       } elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) {
+                               $data["guid"] = $link["href"];
+                       } elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) {
+                               $data["pubkey"] = base64_decode($link["href"]);
+
+                               //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA"))
+                               if (strstr($data["pubkey"], 'RSA ')) {
+                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                               }
+                       }
+               }
+
+               if (!isset($data["network"]) OR ($hcard_url == "")) {
+                       return false;
+               }
+
+               // Fetch data via noscrape - this is faster
+               $noscrape_url = str_replace("/hcard/", "/noscrape/", $hcard_url);
+               $data = self::pollNoscrape($noscrape_url, $data);
+
+               if (isset($data["notify"])
+                       AND isset($data["confirm"])
+                       AND isset($data["request"])
+                       AND isset($data["poll"])
+                       AND isset($data["name"])
+                       AND isset($data["photo"])
+               ) {
+                       return $data;
+               }
+
+               $data = self::pollHcard($hcard_url, $data, true);
+
+               return $data;
+       }
+
+       /**
+        * @brief Poll the hcard page (Diaspora and Friendica specific)
+        *
+        * @param string $hcard_url Link to the hcard page
+        * @param array $data The already fetched data
+        * @param boolean $dfrn Poll DFRN specific data
+        *
+        * @return array hcard data
+        */
+       private function pollHcard($hcard_url, $data, $dfrn = false) {
+               $ret = z_fetch_url($hcard_url);
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $content = $ret['body'];
+               if (!$content) {
+                       return false;
+               }
+
+               $doc = new DOMDocument();
+               if (!@$doc->loadHTML($content)) {
+                       return false;
+               }
+
+               $xpath = new DomXPath($doc);
+
+               $vcards = $xpath->query("//div[contains(concat(' ', @class, ' '), ' vcard ')]");
+               if (!is_object($vcards)) {
+                       return false;
+               }
+
+               if ($vcards->length > 0) {
+                       $vcard = $vcards->item(0);
+
+                       // We have to discard the guid from the hcard in favour of the guid from lrdd
+                       // Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does.
+                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */
+                       if (($search->length > 0) AND ($data["guid"] == "")) {
+                               $data["guid"] = $search->item(0)->nodeValue;
+                       }
+
+                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' nickname ')]", $vcard); // */
+                       if ($search->length > 0) {
+                               $data["nick"] = $search->item(0)->nodeValue;
+                       }
+
+                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' fn ')]", $vcard); // */
+                       if ($search->length > 0) {
+                               $data["name"] = $search->item(0)->nodeValue;
+                       }
+
+                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' searchable ')]", $vcard); // */
+                       if ($search->length > 0) {
+                               $data["searchable"] = $search->item(0)->nodeValue;
+                       }
+
+                       $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' key ')]", $vcard); // */
+                       if ($search->length > 0) {
+                               $data["pubkey"] = $search->item(0)->nodeValue;
+                               if (strstr($data["pubkey"], 'RSA ')) {
+                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                               }
+                       }
+
+                       $search = $xpath->query("//*[@id='pod_location']", $vcard); // */
+                       if ($search->length > 0) {
+                               $data["baseurl"] = trim($search->item(0)->nodeValue, "/");
+                       }
+               }
+
+               $avatar = array();
+               $photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */
+               foreach ($photos as $photo) {
+                       $attr = array();
+                       foreach ($photo->attributes as $attribute) {
+                               $attr[$attribute->name] = trim($attribute->value);
+                       }
+
+                       if (isset($attr["src"]) AND isset($attr["width"])) {
+                               $avatar[$attr["width"]] = $attr["src"];
+                       }
+
+                       // We don't have a width. So we just take everything that we got.
+                       // This is a Hubzilla workaround which doesn't send a width.
+                       if ((sizeof($avatar) == 0) AND isset($attr["src"])) {
+                               $avatar[] = $attr["src"];
+                       }
+               }
+
+               if (sizeof($avatar)) {
+                       ksort($avatar);
+                       $data["photo"] = self::fixAvatar(array_pop($avatar), $data["baseurl"]);
+               }
+
+               if ($dfrn) {
+                       // Poll DFRN specific data
+                       $search = $xpath->query("//link[contains(concat(' ', @rel), ' dfrn-')]");
+                       if ($search->length > 0) {
+                               foreach ($search as $link) {
+                                       //$data["request"] = $search->item(0)->nodeValue;
+                                       $attr = array();
+                                       foreach ($link->attributes as $attribute) {
+                                               $attr[$attribute->name] = trim($attribute->value);
+                                       }
+
+                                       $data[substr($attr["rel"], 5)] = $attr["href"];
+                               }
+                       }
+
+                       // Older Friendica versions had used the "uid" field differently than newer versions
+                       if ($data["nick"] == $data["guid"]) {
+                               unset($data["guid"]);
+                       }
+               }
+
+
+               return $data;
+       }
+
+       /**
+        * @brief Check for Diaspora contact
+        *
+        * @param array $webfinger Webfinger data
+        *
+        * @return array Diaspora data
+        */
+       private function diaspora($webfinger) {
+
+               $hcard_url = "";
+               $data = array();
+               foreach ($webfinger["links"] as $link) {
+                       if (($link["rel"] == "http://microformats.org/profile/hcard") AND ($link["href"] != "")) {
+                               $hcard_url = $link["href"];
+                       } elseif (($link["rel"] == "http://joindiaspora.com/seed_location") AND ($link["href"] != "")) {
+                               $data["baseurl"] = trim($link["href"], '/');
+                       } elseif (($link["rel"] == "http://joindiaspora.com/guid") AND ($link["href"] != "")) {
+                               $data["guid"] = $link["href"];
+                       } elseif (($link["rel"] == "http://webfinger.net/rel/profile-page") AND ($link["type"] == "text/html") AND ($link["href"] != "")) {
+                               $data["url"] = $link["href"];
+                       } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) {
+                               $data["poll"] = $link["href"];
+                       } elseif (($link["rel"] == NAMESPACE_POCO) AND ($link["href"] != "")) {
+                               $data["poco"] = $link["href"];
+                       } elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) {
+                               $data["notify"] = $link["href"];
+                       } elseif (($link["rel"] == "diaspora-public-key") AND ($link["href"] != "")) {
+                               $data["pubkey"] = base64_decode($link["href"]);
+
+                               //if (strstr($data["pubkey"], 'RSA ') OR ($link["type"] == "RSA"))
+                               if (strstr($data["pubkey"], 'RSA ')) {
+                                       $data["pubkey"] = rsatopem($data["pubkey"]);
+                               }
+                       }
+               }
+
+               if (!isset($data["url"]) OR ($hcard_url == "")) {
+                       return false;
+               }
+
+               if (is_array($webfinger["aliases"])) {
+                       foreach ($webfinger["aliases"] as $alias) {
+                               if (normalise_link($alias) != normalise_link($data["url"]) AND ! strstr($alias, "@")) {
+                                       $data["alias"] = $alias;
+                               }
+                       }
+               }
+
+               // Fetch further information from the hcard
+               $data = self::pollHcard($hcard_url, $data);
+
+               if (!$data) {
+                       return false;
+               }
+
+               if (isset($data["url"])
+                       AND isset($data["guid"])
+                       AND isset($data["baseurl"])
+                       AND isset($data["pubkey"])
+                       AND ($hcard_url != "")
+               ) {
+                       $data["network"] = NETWORK_DIASPORA;
+
+                       // The Diaspora handle must always be lowercase
+                       $data["addr"] = strtolower($data["addr"]);
+
+                       // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it
+                       $data["notify"] = $data["baseurl"] . "/receive/users/" . $data["guid"];
+                       $data["batch"]  = $data["baseurl"] . "/receive/public";
+               } else {
+                       return false;
+               }
+
+               return $data;
+       }
+
+       /**
+        * @brief Check for OStatus contact
+        *
+        * @param array $webfinger Webfinger data
+        *
+        * @return array OStatus data
+        */
+       private function ostatus($webfinger) {
+               $data = array();
+               if (is_array($webfinger["aliases"])) {
+                       foreach ($webfinger["aliases"] as $alias) {
+                               if (strstr($alias, "@")) {
+                                       $data["addr"] = str_replace('acct:', '', $alias);
+                               }
+                       }
+               }
+
+               if (is_string($webfinger["subject"]) AND strstr($webfinger["subject"], "@")) {
+                       $data["addr"] = str_replace('acct:', '', $webfinger["subject"]);
+               }
+               $pubkey = "";
+               foreach ($webfinger["links"] as $link) {
+                       if (($link["rel"] == "http://webfinger.net/rel/profile-page")
+                               AND ($link["type"] == "text/html")
+                               AND ($link["href"] != "")
+                       ) {
+                               $data["url"] = $link["href"];
+                       } elseif (($link["rel"] == "salmon") AND ($link["href"] != "")) {
+                               $data["notify"] = $link["href"];
+                       } elseif (($link["rel"] == NAMESPACE_FEED) AND ($link["href"] != "")) {
+                               $data["poll"] = $link["href"];
+                       } elseif (($link["rel"] == "magic-public-key") AND ($link["href"] != "")) {
+                               $pubkey = $link["href"];
+
+                               if (substr($pubkey, 0, 5) === 'data:') {
+                                       if (strstr($pubkey, ',')) {
+                                               $pubkey = substr($pubkey, strpos($pubkey, ',') + 1);
+                                       } else {
+                                               $pubkey = substr($pubkey, 5);
+                                       }
+                               } elseif (normalise_link($pubkey) == 'http://') {
+                                       $ret = z_fetch_url($pubkey);
+                                       if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                                               return false;
+                                       }
+                                       $pubkey = $ret['body'];
+                               }
+
+                               $key = explode(".", $pubkey);
+
+                               if (sizeof($key) >= 3) {
+                                       $m = base64url_decode($key[1]);
+                                       $e = base64url_decode($key[2]);
+                                       $data["pubkey"] = metopem($m, $e);
+                               }
+                       }
+               }
+
+               if (isset($data["notify"]) AND isset($data["pubkey"])
+                       AND isset($data["poll"])
+                       AND isset($data["url"])
+               ) {
+                       $data["network"] = NETWORK_OSTATUS;
+               } else {
+                       return false;
+               }
+               // Fetch all additional data from the feed
+               $ret = z_fetch_url($data["poll"]);
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $feed = $ret['body'];
+               $feed_data = feed_import($feed, $dummy1, $dummy2, $dummy3, true);
+               if (!$feed_data) {
+                       return false;
+               }
+               if ($feed_data["header"]["author-name"] != "") {
+                       $data["name"] = $feed_data["header"]["author-name"];
+               }
+               if ($feed_data["header"]["author-nick"] != "") {
+                       $data["nick"] = $feed_data["header"]["author-nick"];
+               }
+               if ($feed_data["header"]["author-avatar"] != "") {
+                       $data["photo"] = self::fixAvatar($feed_data["header"]["author-avatar"], $data["url"]);
+               }
+               if ($feed_data["header"]["author-id"] != "") {
+                       $data["alias"] = $feed_data["header"]["author-id"];
+               }
+               if ($feed_data["header"]["author-location"] != "") {
+                       $data["location"] = $feed_data["header"]["author-location"];
+               }
+               if ($feed_data["header"]["author-about"] != "") {
+                       $data["about"] = $feed_data["header"]["author-about"];
+               }
+               // OStatus has serious issues when the the url doesn't fit (ssl vs. non ssl)
+               // So we take the value that we just fetched, although the other one worked as well
+               if ($feed_data["header"]["author-link"] != "") {
+                       $data["url"] = $feed_data["header"]["author-link"];
+               }
+               /// @todo Fetch location and "about" from the feed as well
+               return $data;
+       }
+
+       /**
+        * @brief Fetch data from a pump.io profile page
+        *
+        * @param string $profile_link Link to the profile page
+        *
+        * @return array profile data
+        */
+       private function pumpioProfileData($profile_link) {
+
+               $doc = new DOMDocument();
+               if (!@$doc->loadHTMLFile($profile_link)) {
+                       return false;
+               }
+
+               $xpath = new DomXPath($doc);
+
+               $data = array();
+
+               // This is ugly - but pump.io doesn't seem to know a better way for it
+               $data["name"] = trim($xpath->query("//h1[@class='media-header']")->item(0)->nodeValue);
+               $pos = strpos($data["name"], chr(10));
+               if ($pos) {
+                       $data["name"] = trim(substr($data["name"], 0, $pos));
+               }
+
+               $avatar = $xpath->query("//img[@class='img-rounded media-object']")->item(0);
+               if ($avatar) {
+                       foreach ($avatar->attributes as $attribute) {
+                               if ($attribute->name == "src") {
+                                       $data["photo"] = trim($attribute->value);
+                               }
+                       }
+               }
+
+               $data["location"] = $xpath->query("//p[@class='location']")->item(0)->nodeValue;
+               $data["about"] = $xpath->query("//p[@class='summary']")->item(0)->nodeValue;
+
+               return $data;
+       }
+
+       /**
+        * @brief Check for pump.io contact
+        *
+        * @param array $webfinger Webfinger data
+        *
+        * @return array pump.io data
+        */
+       private function pumpio($webfinger) {
+
+               $data = array();
+               foreach ($webfinger["links"] as $link) {
+                       if (($link["rel"] == "http://webfinger.net/rel/profile-page")
+                               AND ($link["type"] == "text/html")
+                               AND ($link["href"] != "")
+                       ) {
+                               $data["url"] = $link["href"];
+                       } elseif (($link["rel"] == "activity-inbox") AND ($link["href"] != "")) {
+                               $data["notify"] = $link["href"];
+                       } elseif (($link["rel"] == "activity-outbox") AND ($link["href"] != "")) {
+                               $data["poll"] = $link["href"];
+                       } elseif (($link["rel"] == "dialback") AND ($link["href"] != "")) {
+                               $data["dialback"] = $link["href"];
+                       }
+               }
+               if (isset($data["poll"]) AND isset($data["notify"])
+                       AND isset($data["dialback"])
+                       AND isset($data["url"])
+               ) {
+                       // by now we use these fields only for the network type detection
+                       // So we unset all data that isn't used at the moment
+                       unset($data["dialback"]);
+
+                       $data["network"] = NETWORK_PUMPIO;
+               } else {
+                       return false;
+               }
+
+               $profile_data = self::pumpioProfileData($data["url"]);
+
+               if (!$profile_data) {
+                       return false;
+               }
+
+               $data = array_merge($data, $profile_data);
+
+               return $data;
+       }
+
+       /**
+        * @brief Check page for feed link
+        *
+        * @param string $url Page link
+        *
+        * @return string feed link
+        */
+       private function getFeedLink($url) {
+               $doc = new DOMDocument();
+
+               if (!@$doc->loadHTMLFile($url)) {
+                       return false;
+               }
+
+               $xpath = new DomXPath($doc);
+
+               //$feeds = $xpath->query("/html/head/link[@type='application/rss+xml']");
+               $feeds = $xpath->query("/html/head/link[@type='application/rss+xml' and @rel='alternate']");
+               if (!is_object($feeds)) {
+                       return false;
+               }
+
+               if ($feeds->length == 0) {
+                       return false;
+               }
+
+               $feed_url = "";
+
+               foreach ($feeds as $feed) {
+                       $attr = array();
+                       foreach ($feed->attributes as $attribute) {
+                               $attr[$attribute->name] = trim($attribute->value);
+                       }
+
+                       if ($feed_url == "") {
+                               $feed_url = $attr["href"];
+                       }
+               }
+
+               return $feed_url;
+       }
+
+       /**
+        * @brief Check for feed contact
+        *
+        * @param string $url Profile link
+        * @param boolean $probe Do a probe if the page contains a feed link
+        *
+        * @return array feed data
+        */
+       private function feed($url, $probe = true) {
+               $ret = z_fetch_url($url);
+               if ($ret['errno'] == CURLE_OPERATION_TIMEDOUT) {
+                       return false;
+               }
+               $feed = $ret['body'];
+               $feed_data = feed_import($feed, $dummy1, $dummy2, $dummy3, true);
+
+               if (!$feed_data) {
+                       if (!$probe) {
+                               return false;
+                       }
+
+                       $feed_url = self::getFeedLink($url);
+
+                       if (!$feed_url) {
+                               return false;
+                       }
+
+                       return self::feed($feed_url, false);
+               }
+
+               if ($feed_data["header"]["author-name"] != "") {
+                       $data["name"] = $feed_data["header"]["author-name"];
+               }
+
+               if ($feed_data["header"]["author-nick"] != "") {
+                       $data["nick"] = $feed_data["header"]["author-nick"];
+               }
+
+               if ($feed_data["header"]["author-avatar"] != "") {
+                       $data["photo"] = $feed_data["header"]["author-avatar"];
+               }
+
+               if ($feed_data["header"]["author-id"] != "") {
+                       $data["alias"] = $feed_data["header"]["author-id"];
+               }
+
+               $data["url"] = $url;
+               $data["poll"] = $url;
+
+               if ($feed_data["header"]["author-link"] != "") {
+                       $data["baseurl"] = $feed_data["header"]["author-link"];
+               } else {
+                       $data["baseurl"] = $data["url"];
+               }
+
+               $data["network"] = NETWORK_FEED;
+
+               return $data;
+       }
+
+       /**
+        * @brief Check for mail contact
+        *
+        * @param string $uri Profile link
+        * @param integer $uid User ID
+        *
+        * @return array mail data
+        */
+       private function mail($uri, $uid) {
+
+               if (!validate_email($uri)) {
+                       return false;
+               }
+
+               $x = q("SELECT `prvkey` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid));
+
+               $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval($uid));
+
+               if (dbm::is_result($x) && dbm::is_result($r)) {
+                       $mailbox = construct_mailbox_name($r[0]);
+                       $password = '';
+                       openssl_private_decrypt(hex2bin($r[0]['pass']), $password, $x[0]['prvkey']);
+                       $mbox = email_connect($mailbox, $r[0]['user'], $password);
+                       if (!mbox) {
+                               return false;
+                       }
+               }
+
+               $msgs = email_poll($mbox, $uri);
+               logger('searching '.$uri.', '.count($msgs).' messages found.', LOGGER_DEBUG);
+
+               if (!count($msgs)) {
+                       return false;
+               }
+
+               $phost = substr($uri, strpos($uri, '@') + 1);
+
+               $data = array();
+               $data["addr"]    = $uri;
+               $data["network"] = NETWORK_MAIL;
+               $data["name"]    = substr($uri, 0, strpos($uri, '@'));
+               $data["nick"]    = $data["name"];
+               $data["photo"]   = avatar_img($uri);
+               $data["url"]     = 'http://'.$phost."/".$data["nick"];
+               $data["notify"]  = 'smtp '.random_string();
+               $data["poll"]    = 'email '.random_string();
+
+               $x = email_msg_meta($mbox, $msgs[0]);
+               if (stristr($x[0]->from, $uri)) {
+                       $adr = imap_rfc822_parse_adrlist($x[0]->from, '');
+               } elseif (stristr($x[0]->to, $uri)) {
+                       $adr = imap_rfc822_parse_adrlist($x[0]->to, '');
+               }
+               if (isset($adr)) {
+                       foreach ($adr as $feadr) {
+                               if ((strcasecmp($feadr->mailbox, $data["name"]) == 0)
+                                       &&(strcasecmp($feadr->host, $phost) == 0)
+                                       && (strlen($feadr->personal))
+                               ) {
+                                       $personal = imap_mime_header_decode($feadr->personal);
+                                       $data["name"] = "";
+                                       foreach ($personal as $perspart) {
+                                               if ($perspart->charset != "default") {
+                                                       $data["name"] .= iconv($perspart->charset, 'UTF-8//IGNORE', $perspart->text);
+                                               } else {
+                                                       $data["name"] .= $perspart->text;
+                                               }
+                                       }
+
+                                       $data["name"] = notags($data["name"]);
+                               }
+                       }
+               }
+               imap_close($mbox);
+
+               return $data;
+       }
+
+       /**
+        * @brief Mix two paths together to possibly fix missing parts
+        *
+        * @param string $avatar Path to the avatar
+        * @param string $base Another path that is hopefully complete
+        *
+        * @return string fixed avatar path
+        */
+       public static function fixAvatar($avatar, $base) {
+               $base_parts = parse_url($base);
+
+               // Remove all parts that could create a problem
+               unset($base_parts['path']);
+               unset($base_parts['query']);
+               unset($base_parts['fragment']);
+
+               $avatar_parts = parse_url($avatar);
+
+               // Now we mix them
+               $parts = array_merge($base_parts, $avatar_parts);
+
+               // And put them together again
+               $scheme   = isset($parts['scheme'])   ? $parts['scheme'] . '://' : '';
+               $host     = isset($parts['host'])     ? $parts['host']           : '';
+               $port     = isset($parts['port'])     ? ':' . $parts['port']     : '';
+               $path     = isset($parts['path'])     ? $parts['path']           : '';
+               $query    = isset($parts['query'])    ? '?' . $parts['query']    : '';
+               $fragment = isset($parts['fragment']) ? '#' . $parts['fragment'] : '';
+
+               $fixed = $scheme.$host.$port.$path.$query.$fragment;
+
+               logger('Base: '.$base.' - Avatar: '.$avatar.' - Fixed: '.$fixed, LOGGER_DATA);
+
+               return $fixed;
+       }
+}
index e9ac527a1ad455fe8c9c29b8ba3ee1b987637b2c..e8b58806d987aa5d611f2aa78bbfd00efe0ded1e 100644 (file)
@@ -7,7 +7,12 @@
 
 namespace Friendica;
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
+
+use xml;
+
+use DomXPath;
+use DOMDocument;
 
 require_once("include/network.php");
 require_once("include/Photo.php");
@@ -223,22 +228,22 @@ class ParseUrl {
 
                $body = mb_convert_encoding($body, 'HTML-ENTITIES', "UTF-8");
 
-               $doc = new \DOMDocument();
+               $doc = new DOMDocument();
                @$doc->loadHTML($body);
 
-               \xml::deleteNode($doc, "style");
-               \xml::deleteNode($doc, "script");
-               \xml::deleteNode($doc, "option");
-               \xml::deleteNode($doc, "h1");
-               \xml::deleteNode($doc, "h2");
-               \xml::deleteNode($doc, "h3");
-               \xml::deleteNode($doc, "h4");
-               \xml::deleteNode($doc, "h5");
-               \xml::deleteNode($doc, "h6");
-               \xml::deleteNode($doc, "ol");
-               \xml::deleteNode($doc, "ul");
-
-               $xpath = new \DomXPath($doc);
+               xml::deleteNode($doc, "style");
+               xml::deleteNode($doc, "script");
+               xml::deleteNode($doc, "option");
+               xml::deleteNode($doc, "h1");
+               xml::deleteNode($doc, "h2");
+               xml::deleteNode($doc, "h3");
+               xml::deleteNode($doc, "h4");
+               xml::deleteNode($doc, "h5");
+               xml::deleteNode($doc, "h6");
+               xml::deleteNode($doc, "ol");
+               xml::deleteNode($doc, "ul");
+
+               $xpath = new DomXPath($doc);
 
                $list = $xpath->query("//meta[@content]");
                foreach ($list as $node) {
index 3fb6ac3109daf150c071d7d767b4ecd72a8be5a8..5bc8e0ad3f068e0b4b8fae1d23bf31cfbee736b4 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * tests several functions which are used to prevent xss attacks
- * 
+ *
  * @package test.util
  */
 
@@ -27,31 +27,31 @@ class AntiXSSTest extends PHPUnit_Framework_TestCase {
         */
        public function testXmlify() {
                $text="<tag>I want to break\n this!11!<?hard?></tag>";
-               $xml=xmlify($text); 
+               $xml=xmlify($text);
                $retext=unxmlify($text);
 
                $this->assertEquals($text, $retext);
        }
-       
-       /**\r
-        * xmlify and put in a document\r
-        */\r
-       public function testXmlifyDocument() {\r
-               $tag="<tag>I want to break</tag>";\r
+
+       /**
+        * xmlify and put in a document
+        */
+       public function testXmlifyDocument() {
+               $tag="<tag>I want to break</tag>";
                $xml=xmlify($tag);
-               $text='<text>'.$xml.'</text>'; \r
-               
-               $xml_parser=xml_parser_create(); 
+               $text='<text>'.$xml.'</text>';
+
+               $xml_parser=xml_parser_create();
                //should be possible to parse it
-               $values=array(); $index=array(); 
-               $this->assertEquals(1, xml_parse_into_struct($xml_parser, $text, $values, $index)); 
-               
-               $this->assertEquals(array('TEXT'=>array(0)), 
-                               $index); 
-               $this->assertEquals(array(array('tag'=>'TEXT', 'type'=>'complete', 'level'=>1, 'value'=>$tag)),\r
+               $values=array(); $index=array();
+               $this->assertEquals(1, xml_parse_into_struct($xml_parser, $text, $values, $index));
+
+               $this->assertEquals(array('TEXT'=>array(0)),
+                               $index);
+               $this->assertEquals(array(array('tag'=>'TEXT', 'type'=>'complete', 'level'=>1, 'value'=>$tag)),
                                $values);
-               
-               xml_parser_free($xml_parser); \r
+
+               xml_parser_free($xml_parser);
        }
 
        /**
@@ -68,4 +68,3 @@ class AntiXSSTest extends PHPUnit_Framework_TestCase {
        //get_mentions
        //get_contact_block, bis Zeile 538
 }
-?>
index 8da76336fc318d97134c85046348cc6c1b88a615..e3b1c31b33a5fee9cc01c8c97eb11b6877ef7a3c 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define('UPDATE_VERSION' , 1220);
+define('UPDATE_VERSION' , 1224);
 
 /**
  *
index 163c94bb97a2fd91550a1b22fb38b17014cb3fde..798c81474f013062a2fef8cbde2f8d98e12867c3 100644 (file)
@@ -91,4 +91,3 @@ function add_documentation($line) {
 
        return $block;
 }
-?>
index 31ec44bc0a3204e14eb378d2702b8bfd0637bd2b..92d8aca92c1e924a9782119755ec0ded742b9862 100644 (file)
@@ -43,6 +43,7 @@ Daria Początek
 David
 David Martín Miranda
 David Rabel
+Denis Chenu
 Devlon Duthie
 Diego Souza
 Domovoy
index 266ddcd754f2ac499a88618d93ee267136a98861..4accef3960a390dad4b8c79323e38be99671934b 100644 (file)
@@ -98,4 +98,3 @@ while (true) {
        // Now sleep for 5 minutes
        sleep(300);
 }
-?>
index 32b44e6d006291eba2dabe857a55f57b1b99f408..1e717e98759335166c1c2157db3c95ac4adad609 100644 (file)
@@ -1,14 +1,17 @@
 <?php
+
 /**
-* @package util
-*/
+ * @package util
+ */
+
+use Friendica\App;
 
-/* 
-* require boot.php
-*/
+/*
+ * require boot.php
+ */
 require_once("boot.php");
 
-$a = new App;
+$a = new App(dirname(__DIR__));
 @include(".htconfig.php");
 
 $lang = get_browser_language();
@@ -16,15 +19,15 @@ load_translation_table($lang);
 
 require_once("include/dba.php");
 $db = new dba($db_host, $db_user, $db_pass, $db_data, false);
-        unset($db_host, $db_user, $db_pass, $db_data);
+unset($db_host, $db_user, $db_pass, $db_data);
 
-$build = get_config('system','build');
+$build = get_config('system', 'build');
 
 echo "Old DB VERSION: " . $build . "\n";
 echo "New DB VERSION: " . DB_UPDATE_VERSION . "\n";
 
 
-if($build != DB_UPDATE_VERSION) {
+if ($build != DB_UPDATE_VERSION) {
        echo "Updating database...";
        check_db($a);
        echo "Done\n";
index 614344ab9387bbcafb99ee98c7fe2e5b6c9e23ca..40634e0d89de1d33dee9bd95f7d7d353525721a7 100644 (file)
@@ -1,10 +1,11 @@
 <?php
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once("boot.php");
 
-$a = new App;
+$a = new App(dirname(__DIR__));
 @include(".htconfig.php");
 
 $lang = get_browser_language();
index 4fcfa9b16b1832955e9791dbbfef1159d69e3b4e..3da18ca6b2e8ed86b1d6fdd5cc84612f6145c95b 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-03-20 08:24+0100\n"
+"POT-Creation-Date: 2017-05-03 07:08+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"
@@ -18,154 +18,32 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 
-#: boot.php:976
-msgid "Delete this item?"
-msgstr ""
-
-#: boot.php:977 include/ForumManager.php:119 include/contact_widgets.php:253
-#: include/items.php:2254 mod/content.php:624 object/Item.php:420
-#: view/theme/vier/theme.php:255
-msgid "show more"
-msgstr ""
-
-#: boot.php:978
-msgid "show fewer"
-msgstr ""
-
-#: boot.php:1667
-#, php-format
-msgid "Update %s failed. See error logs."
-msgstr ""
-
-#: boot.php:1779
-msgid "Create a New Account"
-msgstr ""
-
-#: boot.php:1780 include/nav.php:109 mod/register.php:289
-msgid "Register"
-msgstr ""
-
-#: boot.php:1804 include/nav.php:78 view/theme/frio/theme.php:243
-msgid "Logout"
-msgstr ""
-
-#: boot.php:1805 include/nav.php:95 mod/bookmarklet.php:12
-msgid "Login"
-msgstr ""
-
-#: boot.php:1807 mod/lostpass.php:161
-msgid "Nickname or Email: "
-msgstr ""
-
-#: boot.php:1808
-msgid "Password: "
-msgstr ""
-
-#: boot.php:1809
-msgid "Remember me"
-msgstr ""
-
-#: boot.php:1812
-msgid "Or login using OpenID: "
-msgstr ""
-
-#: boot.php:1818
-msgid "Forgot your password?"
-msgstr ""
-
-#: boot.php:1819 mod/lostpass.php:110
-msgid "Password Reset"
-msgstr ""
-
-#: boot.php:1821
-msgid "Website Terms of Service"
-msgstr ""
-
-#: boot.php:1822
-msgid "terms of service"
-msgstr ""
-
-#: boot.php:1824
-msgid "Website Privacy Policy"
-msgstr ""
-
-#: boot.php:1825
-msgid "privacy policy"
-msgstr ""
-
-#: include/Contact.php:387 include/Contact.php:400 include/Contact.php:445
-#: include/conversation.php:970 include/conversation.php:986
-#: mod/allfriends.php:68 mod/directory.php:157 mod/dirfind.php:209
-#: mod/match.php:73 mod/suggest.php:82
-msgid "View Profile"
-msgstr ""
-
-#: include/Contact.php:401 include/contact_widgets.php:32
-#: include/conversation.php:983 mod/allfriends.php:69 mod/contacts.php:610
-#: mod/dirfind.php:210 mod/follow.php:106 mod/match.php:74 mod/suggest.php:83
-msgid "Connect/Follow"
-msgstr ""
-
-#: include/Contact.php:444 include/conversation.php:969
-msgid "View Status"
-msgstr ""
-
-#: include/Contact.php:446 include/conversation.php:971
-msgid "View Photos"
-msgstr ""
-
-#: include/Contact.php:447 include/conversation.php:972
-msgid "Network Posts"
-msgstr ""
-
-#: include/Contact.php:448 include/conversation.php:973
-msgid "View Contact"
-msgstr ""
-
-#: include/Contact.php:449
-msgid "Drop Contact"
-msgstr ""
-
-#: include/Contact.php:450 include/conversation.php:974
-msgid "Send PM"
-msgstr ""
-
-#: include/Contact.php:451 include/conversation.php:978
-msgid "Poke"
-msgstr ""
-
-#: include/Contact.php:828
-msgid "Organisation"
-msgstr ""
-
-#: include/Contact.php:831
-msgid "News"
-msgstr ""
-
-#: include/Contact.php:834
-msgid "Forum"
-msgstr ""
-
-#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1027
-#: view/theme/vier/theme.php:250
+#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1093
+#: view/theme/vier/theme.php:254
 msgid "Forums"
 msgstr ""
 
-#: include/ForumManager.php:116 view/theme/vier/theme.php:252
+#: include/ForumManager.php:116 view/theme/vier/theme.php:256
 msgid "External link to forum"
 msgstr ""
 
+#: include/ForumManager.php:119 include/contact_widgets.php:269
+#: include/items.php:2450 mod/content.php:624 object/Item.php:420
+#: view/theme/vier/theme.php:259 boot.php:1000
+msgid "show more"
+msgstr ""
+
 #: include/NotificationsManager.php:153
 msgid "System"
 msgstr ""
 
-#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:421
+#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:517
 #: view/theme/frio/theme.php:253
 msgid "Network"
 msgstr ""
 
-#: include/NotificationsManager.php:167 mod/network.php:829
-#: mod/profiles.php:695
+#: include/NotificationsManager.php:167 mod/network.php:832
+#: mod/profiles.php:696
 msgid "Personal"
 msgstr ""
 
@@ -231,2771 +109,2513 @@ msgid "New Follower"
 msgstr ""
 
 #: include/Photo.php:1038 include/Photo.php:1054 include/Photo.php:1062
-#: include/Photo.php:1087 include/message.php:146 mod/item.php:462
-#: mod/wall_upload.php:216 mod/wall_upload.php:230 mod/wall_upload.php:237
+#: include/Photo.php:1087 include/message.php:146 mod/wall_upload.php:249
+#: mod/item.php:467
 msgid "Wall Photos"
 msgstr ""
 
-#: include/acl_selectors.php:341
-msgid "Post to Email"
+#: include/delivery.php:427
+msgid "(no subject)"
 msgstr ""
 
-#: include/acl_selectors.php:346
-#, php-format
-msgid "Connectors disabled, since \"%s\" is enabled."
+#: include/delivery.php:439 include/enotify.php:43
+msgid "noreply"
 msgstr ""
 
-#: include/acl_selectors.php:347 mod/settings.php:1188
-msgid "Hide your profile details from unknown viewers?"
+#: include/like.php:27 include/conversation.php:153 include/diaspora.php:1576
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
 msgstr ""
 
-#: include/acl_selectors.php:352
-msgid "Visible to everybody"
+#: include/like.php:31 include/like.php:36 include/conversation.php:156
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
 msgstr ""
 
-#: include/acl_selectors.php:353 view/theme/vier/config.php:108
-msgid "show"
+#: include/like.php:41
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
 msgstr ""
 
-#: include/acl_selectors.php:354 view/theme/vier/config.php:108
-msgid "don't show"
+#: include/like.php:46
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
 msgstr ""
 
-#: include/acl_selectors.php:360 mod/editpost.php:123
-msgid "CC: email addresses"
+#: include/like.php:51
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
 msgstr ""
 
-#: include/acl_selectors.php:361 mod/editpost.php:130
-msgid "Example: bob@example.com, mary@example.com"
+#: include/like.php:178 include/conversation.php:141
+#: include/conversation.php:293 include/text.php:1872 mod/subthread.php:88
+#: mod/tagger.php:62
+msgid "photo"
 msgstr ""
 
-#: include/acl_selectors.php:363 mod/events.php:516 mod/photos.php:1176
-#: mod/photos.php:1558
-msgid "Permissions"
+#: include/like.php:178 include/conversation.php:136
+#: include/conversation.php:146 include/conversation.php:288
+#: include/conversation.php:297 include/diaspora.php:1580 mod/subthread.php:88
+#: mod/tagger.php:62
+msgid "status"
 msgstr ""
 
-#: include/acl_selectors.php:364
-msgid "Close"
+#: include/like.php:180 include/conversation.php:133
+#: include/conversation.php:285 include/text.php:1870
+msgid "event"
 msgstr ""
 
-#: include/api.php:1021
-#, php-format
-msgid "Daily posting limit of %d posts reached. The post was rejected."
+#: include/message.php:15 include/message.php:169
+msgid "[no subject]"
 msgstr ""
 
-#: include/api.php:1041
-#, php-format
-msgid "Weekly posting limit of %d posts reached. The post was rejected."
+#: include/nav.php:35 mod/navigation.php:19
+msgid "Nothing new here"
 msgstr ""
 
-#: include/api.php:1062
-#, php-format
-msgid "Monthly posting limit of %d posts reached. The post was rejected."
+#: include/nav.php:39 mod/navigation.php:23
+msgid "Clear notifications"
 msgstr ""
 
-#: include/auth.php:45
-msgid "Logged out."
+#: include/nav.php:40 include/text.php:1083
+msgid "@name, !forum, #tags, content"
 msgstr ""
 
-#: include/auth.php:116 include/auth.php:178 mod/openid.php:110
-msgid "Login failed."
+#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1867
+msgid "Logout"
 msgstr ""
 
-#: include/auth.php:132 include/user.php:75
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
+#: include/nav.php:78 view/theme/frio/theme.php:243
+msgid "End this session"
 msgstr ""
 
-#: include/auth.php:132 include/user.php:75
-msgid "The error message was:"
+#: include/nav.php:81 include/identity.php:769 mod/contacts.php:645
+#: mod/contacts.php:841 view/theme/frio/theme.php:246
+msgid "Status"
 msgstr ""
 
-#: include/bb2diaspora.php:199 include/event.php:16 mod/localtime.php:12
-msgid "l F d, Y \\@ g:i A"
+#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246
+msgid "Your posts and conversations"
 msgstr ""
 
-#: include/bb2diaspora.php:205 include/event.php:33 include/event.php:51
-#: include/event.php:488
-msgid "Starts:"
+#: include/nav.php:82 include/identity.php:622 include/identity.php:744
+#: include/identity.php:777 mod/contacts.php:647 mod/contacts.php:849
+#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247
+msgid "Profile"
 msgstr ""
 
-#: include/bb2diaspora.php:213 include/event.php:36 include/event.php:57
-#: include/event.php:489
-msgid "Finishes:"
+#: include/nav.php:82 view/theme/frio/theme.php:247
+msgid "Your profile page"
 msgstr ""
 
-#: include/bb2diaspora.php:221 include/event.php:39 include/event.php:63
-#: include/event.php:490 include/identity.php:331 mod/contacts.php:636
-#: mod/directory.php:139 mod/events.php:501 mod/notifications.php:238
-msgid "Location:"
+#: include/nav.php:83 include/identity.php:785 mod/fbrowser.php:31
+#: view/theme/frio/theme.php:248
+msgid "Photos"
 msgstr ""
 
-#: include/bbcode.php:350 include/bbcode.php:1055 include/bbcode.php:1056
-msgid "Image/photo"
+#: include/nav.php:83 view/theme/frio/theme.php:248
+msgid "Your photos"
 msgstr ""
 
-#: include/bbcode.php:467
-#, php-format
-msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
+#: include/nav.php:84 include/identity.php:793 include/identity.php:796
+#: view/theme/frio/theme.php:249
+msgid "Videos"
 msgstr ""
 
-#: include/bbcode.php:1015 include/bbcode.php:1035
-msgid "$1 wrote:"
+#: include/nav.php:84 view/theme/frio/theme.php:249
+msgid "Your videos"
 msgstr ""
 
-#: include/bbcode.php:1064 include/bbcode.php:1065
-msgid "Encrypted content"
+#: include/nav.php:85 include/nav.php:149 include/identity.php:805
+#: include/identity.php:816 mod/cal.php:270 mod/events.php:374
+#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254
+msgid "Events"
 msgstr ""
 
-#: include/bbcode.php:1169
-msgid "Invalid source protocol"
+#: include/nav.php:85 view/theme/frio/theme.php:250
+msgid "Your events"
 msgstr ""
 
-#: include/bbcode.php:1179
-msgid "Invalid link protocol"
+#: include/nav.php:86
+msgid "Personal notes"
 msgstr ""
 
-#: include/contact_selectors.php:32
-msgid "Unknown | Not categorised"
+#: include/nav.php:86
+msgid "Your personal notes"
 msgstr ""
 
-#: include/contact_selectors.php:33
-msgid "Block immediately"
+#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1868
+msgid "Login"
 msgstr ""
 
-#: include/contact_selectors.php:34
-msgid "Shady, spammer, self-marketer"
+#: include/nav.php:95
+msgid "Sign in"
 msgstr ""
 
-#: include/contact_selectors.php:35
-msgid "Known to me, but no opinion"
+#: include/nav.php:105
+msgid "Home Page"
 msgstr ""
 
-#: include/contact_selectors.php:36
-msgid "OK, probably harmless"
+#: include/nav.php:109 mod/register.php:289 boot.php:1844
+msgid "Register"
 msgstr ""
 
-#: include/contact_selectors.php:37
-msgid "Reputable, has my trust"
+#: include/nav.php:109
+msgid "Create an account"
 msgstr ""
 
-#: include/contact_selectors.php:56 mod/admin.php:893
-msgid "Frequently"
+#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:297
+msgid "Help"
 msgstr ""
 
-#: include/contact_selectors.php:57 mod/admin.php:894
-msgid "Hourly"
+#: include/nav.php:115
+msgid "Help and documentation"
 msgstr ""
 
-#: include/contact_selectors.php:58 mod/admin.php:895
-msgid "Twice daily"
+#: include/nav.php:119
+msgid "Apps"
 msgstr ""
 
-#: include/contact_selectors.php:59 mod/admin.php:896
-msgid "Daily"
+#: include/nav.php:119
+msgid "Addon applications, utilities, games"
 msgstr ""
 
-#: include/contact_selectors.php:60
-msgid "Weekly"
+#: include/nav.php:123 include/text.php:1080 mod/search.php:149
+msgid "Search"
 msgstr ""
 
-#: include/contact_selectors.php:61
-msgid "Monthly"
+#: include/nav.php:123
+msgid "Search site content"
 msgstr ""
 
-#: include/contact_selectors.php:76 mod/dfrn_request.php:881
-msgid "Friendica"
+#: include/nav.php:126 include/text.php:1088
+msgid "Full Text"
 msgstr ""
 
-#: include/contact_selectors.php:77
-msgid "OStatus"
+#: include/nav.php:127 include/text.php:1089
+msgid "Tags"
 msgstr ""
 
-#: include/contact_selectors.php:78
-msgid "RSS/Atom"
+#: include/nav.php:128 include/nav.php:192 include/identity.php:838
+#: include/identity.php:841 include/text.php:1090 mod/contacts.php:800
+#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257
+msgid "Contacts"
 msgstr ""
 
-#: include/contact_selectors.php:79 include/contact_selectors.php:86
-#: mod/admin.php:1405 mod/admin.php:1418 mod/admin.php:1431 mod/admin.php:1449
-msgid "Email"
+#: include/nav.php:143 include/nav.php:145 mod/community.php:32
+msgid "Community"
 msgstr ""
 
-#: include/contact_selectors.php:80 mod/dfrn_request.php:883
-#: mod/settings.php:848
-msgid "Diaspora"
+#: include/nav.php:143
+msgid "Conversations on this site"
 msgstr ""
 
-#: include/contact_selectors.php:81
-msgid "Facebook"
+#: include/nav.php:145
+msgid "Conversations on the network"
 msgstr ""
 
-#: include/contact_selectors.php:82
-msgid "Zot!"
+#: include/nav.php:149 include/identity.php:808 include/identity.php:819
+#: view/theme/frio/theme.php:254
+msgid "Events and Calendar"
 msgstr ""
 
-#: include/contact_selectors.php:83
-msgid "LinkedIn"
+#: include/nav.php:152
+msgid "Directory"
 msgstr ""
 
-#: include/contact_selectors.php:84
-msgid "XMPP/IM"
+#: include/nav.php:152
+msgid "People directory"
 msgstr ""
 
-#: include/contact_selectors.php:85
-msgid "MySpace"
+#: include/nav.php:154
+msgid "Information"
 msgstr ""
 
-#: include/contact_selectors.php:87
-msgid "Google+"
+#: include/nav.php:154
+msgid "Information about this friendica instance"
 msgstr ""
 
-#: include/contact_selectors.php:88
-msgid "pump.io"
+#: include/nav.php:158 view/theme/frio/theme.php:253
+msgid "Conversations from your friends"
 msgstr ""
 
-#: include/contact_selectors.php:89
-msgid "Twitter"
+#: include/nav.php:159
+msgid "Network Reset"
 msgstr ""
 
-#: include/contact_selectors.php:90
-msgid "Diaspora Connector"
+#: include/nav.php:159
+msgid "Load Network page with no filters"
 msgstr ""
 
-#: include/contact_selectors.php:91
-msgid "GNU Social"
+#: include/nav.php:166
+msgid "Friend Requests"
 msgstr ""
 
-#: include/contact_selectors.php:92
-msgid "pnut"
+#: include/nav.php:169 mod/notifications.php:96
+msgid "Notifications"
 msgstr ""
 
-#: include/contact_selectors.php:93
-msgid "App.net"
+#: include/nav.php:170
+msgid "See all notifications"
 msgstr ""
 
-#: include/contact_selectors.php:104
-msgid "Hubzilla/Redmatrix"
+#: include/nav.php:171 mod/settings.php:906
+msgid "Mark as seen"
 msgstr ""
 
-#: include/contact_widgets.php:6
-msgid "Add New Contact"
+#: include/nav.php:171
+msgid "Mark all system notifications seen"
 msgstr ""
 
-#: include/contact_widgets.php:7
-msgid "Enter address or web location"
+#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255
+msgid "Messages"
 msgstr ""
 
-#: include/contact_widgets.php:8
-msgid "Example: bob@example.com, http://example.com/barbara"
+#: include/nav.php:175 view/theme/frio/theme.php:255
+msgid "Private mail"
 msgstr ""
 
-#: include/contact_widgets.php:10 include/identity.php:219
-#: mod/allfriends.php:85 mod/dirfind.php:207 mod/match.php:89
-#: mod/suggest.php:101
-msgid "Connect"
+#: include/nav.php:176
+msgid "Inbox"
 msgstr ""
 
-#: include/contact_widgets.php:24
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] ""
-msgstr[1] ""
+#: include/nav.php:177
+msgid "Outbox"
+msgstr ""
 
-#: include/contact_widgets.php:30
-msgid "Find People"
+#: include/nav.php:178 mod/message.php:16
+msgid "New Message"
 msgstr ""
 
-#: include/contact_widgets.php:31
-msgid "Enter name or interest"
+#: include/nav.php:181
+msgid "Manage"
 msgstr ""
 
-#: include/contact_widgets.php:33
-msgid "Examples: Robert Morgenstein, Fishing"
+#: include/nav.php:181
+msgid "Manage other pages"
 msgstr ""
 
-#: include/contact_widgets.php:34 mod/contacts.php:806 mod/directory.php:206
-msgid "Find"
+#: include/nav.php:184 mod/settings.php:81
+msgid "Delegations"
 msgstr ""
 
-#: include/contact_widgets.php:35 mod/suggest.php:114
-#: view/theme/vier/theme.php:198
-msgid "Friend Suggestions"
+#: include/nav.php:184 mod/delegate.php:130
+msgid "Delegate Page Management"
 msgstr ""
 
-#: include/contact_widgets.php:36 view/theme/vier/theme.php:197
-msgid "Similar Interests"
+#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111
+#: mod/admin.php:1618 mod/admin.php:1894 view/theme/frio/theme.php:256
+msgid "Settings"
 msgstr ""
 
-#: include/contact_widgets.php:37
-msgid "Random Profile"
+#: include/nav.php:186 view/theme/frio/theme.php:256
+msgid "Account settings"
 msgstr ""
 
-#: include/contact_widgets.php:38 view/theme/vier/theme.php:199
-msgid "Invite Friends"
+#: include/nav.php:189 include/identity.php:290
+msgid "Profiles"
 msgstr ""
 
-#: include/contact_widgets.php:115
-msgid "Networks"
+#: include/nav.php:189
+msgid "Manage/Edit Profiles"
 msgstr ""
 
-#: include/contact_widgets.php:118
-msgid "All Networks"
+#: include/nav.php:192 view/theme/frio/theme.php:257
+msgid "Manage/edit friends and contacts"
 msgstr ""
 
-#: include/contact_widgets.php:150 include/features.php:104
-msgid "Saved Folders"
+#: include/nav.php:197 mod/admin.php:196
+msgid "Admin"
 msgstr ""
 
-#: include/contact_widgets.php:153 include/contact_widgets.php:187
-msgid "Everything"
+#: include/nav.php:197
+msgid "Site setup and configuration"
 msgstr ""
 
-#: include/contact_widgets.php:184
-msgid "Categories"
+#: include/nav.php:200
+msgid "Navigation"
 msgstr ""
 
-#: include/contact_widgets.php:248
-#, php-format
-msgid "%d contact in common"
-msgid_plural "%d contacts in common"
-msgstr[0] ""
-msgstr[1] ""
+#: include/nav.php:200
+msgid "Site map"
+msgstr ""
 
-#: include/conversation.php:122 include/conversation.php:258
-#: include/like.php:180 include/text.php:1804
-msgid "event"
+#: include/plugin.php:530 include/plugin.php:532
+msgid "Click here to upgrade."
 msgstr ""
 
-#: include/conversation.php:125 include/conversation.php:134
-#: include/conversation.php:261 include/conversation.php:270
-#: include/diaspora.php:1530 include/like.php:178 mod/subthread.php:88
-#: mod/tagger.php:62
-msgid "status"
+#: include/plugin.php:538
+msgid "This action exceeds the limits set by your subscription plan."
 msgstr ""
 
-#: include/conversation.php:130 include/conversation.php:266
-#: include/like.php:178 include/text.php:1806 mod/subthread.php:88
-#: mod/tagger.php:62
-msgid "photo"
+#: include/plugin.php:543
+msgid "This action is not available under your subscription plan."
 msgstr ""
 
-#: include/conversation.php:141 include/diaspora.php:1526 include/like.php:27
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
+#: include/profile_selectors.php:6
+msgid "Male"
 msgstr ""
 
-#: include/conversation.php:144 include/like.php:31 include/like.php:36
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
+#: include/profile_selectors.php:6
+msgid "Female"
 msgstr ""
 
-#: include/conversation.php:147
-#, php-format
-msgid "%1$s attends %2$s's %3$s"
+#: include/profile_selectors.php:6
+msgid "Currently Male"
 msgstr ""
 
-#: include/conversation.php:150
-#, php-format
-msgid "%1$s doesn't attend %2$s's %3$s"
+#: include/profile_selectors.php:6
+msgid "Currently Female"
 msgstr ""
 
-#: include/conversation.php:153
-#, php-format
-msgid "%1$s attends maybe %2$s's %3$s"
+#: include/profile_selectors.php:6
+msgid "Mostly Male"
 msgstr ""
 
-#: include/conversation.php:185 mod/dfrn_confirm.php:478
-#, php-format
-msgid "%1$s is now friends with %2$s"
+#: include/profile_selectors.php:6
+msgid "Mostly Female"
 msgstr ""
 
-#: include/conversation.php:219
-#, php-format
-msgid "%1$s poked %2$s"
+#: include/profile_selectors.php:6
+msgid "Transgender"
 msgstr ""
 
-#: include/conversation.php:239 mod/mood.php:63
-#, php-format
-msgid "%1$s is currently %2$s"
+#: include/profile_selectors.php:6
+msgid "Intersex"
 msgstr ""
 
-#: include/conversation.php:278 mod/tagger.php:95
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
+#: include/profile_selectors.php:6
+msgid "Transsexual"
 msgstr ""
 
-#: include/conversation.php:303
-msgid "post/item"
+#: include/profile_selectors.php:6
+msgid "Hermaphrodite"
 msgstr ""
 
-#: include/conversation.php:304
-#, php-format
-msgid "%1$s marked %2$s's %3$s as favorite"
+#: include/profile_selectors.php:6
+msgid "Neuter"
 msgstr ""
 
-#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629
-#: mod/profiles.php:346
-msgid "Likes"
+#: include/profile_selectors.php:6
+msgid "Non-specific"
 msgstr ""
 
-#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629
-#: mod/profiles.php:350
-msgid "Dislikes"
+#: include/profile_selectors.php:6
+msgid "Other"
 msgstr ""
 
-#: include/conversation.php:588 include/conversation.php:1473
-#: mod/content.php:373 mod/photos.php:1630
-msgid "Attending"
-msgid_plural "Attending"
+#: include/profile_selectors.php:6 include/conversation.php:1547
+msgid "Undecided"
+msgid_plural "Undecided"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630
-msgid "Not attending"
+#: include/profile_selectors.php:23
+msgid "Males"
 msgstr ""
 
-#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630
-msgid "Might attend"
+#: include/profile_selectors.php:23
+msgid "Females"
 msgstr ""
 
-#: include/conversation.php:710 mod/content.php:453 mod/content.php:759
-#: mod/photos.php:1703 object/Item.php:137
-msgid "Select"
+#: include/profile_selectors.php:23
+msgid "Gay"
 msgstr ""
 
-#: include/conversation.php:711 mod/admin.php:1423 mod/contacts.php:816
-#: mod/contacts.php:1015 mod/content.php:454 mod/content.php:760
-#: mod/group.php:181 mod/photos.php:1704 mod/settings.php:744
-#: object/Item.php:138
-msgid "Delete"
+#: include/profile_selectors.php:23
+msgid "Lesbian"
 msgstr ""
 
-#: include/conversation.php:755 mod/content.php:487 mod/content.php:915
-#: mod/content.php:916 object/Item.php:356 object/Item.php:357
-#, php-format
-msgid "View %s's profile @ %s"
+#: include/profile_selectors.php:23
+msgid "No Preference"
 msgstr ""
 
-#: include/conversation.php:767 object/Item.php:344
-msgid "Categories:"
+#: include/profile_selectors.php:23
+msgid "Bisexual"
 msgstr ""
 
-#: include/conversation.php:768 object/Item.php:345
-msgid "Filed under:"
+#: include/profile_selectors.php:23
+msgid "Autosexual"
 msgstr ""
 
-#: include/conversation.php:775 mod/content.php:497 mod/content.php:928
-#: object/Item.php:370
-#, php-format
-msgid "%s from %s"
+#: include/profile_selectors.php:23
+msgid "Abstinent"
 msgstr ""
 
-#: include/conversation.php:791 mod/content.php:513
-msgid "View in context"
+#: include/profile_selectors.php:23
+msgid "Virgin"
 msgstr ""
 
-#: include/conversation.php:793 include/conversation.php:1256
-#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114
-#: mod/message.php:337 mod/message.php:522 mod/photos.php:1592
-#: mod/wallmessage.php:140 object/Item.php:395
-msgid "Please wait"
+#: include/profile_selectors.php:23
+msgid "Deviant"
 msgstr ""
 
-#: include/conversation.php:872
-msgid "remove"
+#: include/profile_selectors.php:23
+msgid "Fetish"
 msgstr ""
 
-#: include/conversation.php:876
-msgid "Delete Selected Items"
+#: include/profile_selectors.php:23
+msgid "Oodles"
 msgstr ""
 
-#: include/conversation.php:968
-msgid "Follow Thread"
+#: include/profile_selectors.php:23
+msgid "Nonsexual"
 msgstr ""
 
-#: include/conversation.php:1100
-#, php-format
-msgid "%s likes this."
+#: include/profile_selectors.php:42
+msgid "Single"
 msgstr ""
 
-#: include/conversation.php:1103
-#, php-format
-msgid "%s doesn't like this."
+#: include/profile_selectors.php:42
+msgid "Lonely"
 msgstr ""
 
-#: include/conversation.php:1106
-#, php-format
-msgid "%s attends."
+#: include/profile_selectors.php:42
+msgid "Available"
 msgstr ""
 
-#: include/conversation.php:1109
-#, php-format
-msgid "%s doesn't attend."
+#: include/profile_selectors.php:42
+msgid "Unavailable"
 msgstr ""
 
-#: include/conversation.php:1112
-#, php-format
-msgid "%s attends maybe."
+#: include/profile_selectors.php:42
+msgid "Has crush"
 msgstr ""
 
-#: include/conversation.php:1122
-msgid "and"
+#: include/profile_selectors.php:42
+msgid "Infatuated"
 msgstr ""
 
-#: include/conversation.php:1128
-#, php-format
-msgid ", and %d other people"
+#: include/profile_selectors.php:42
+msgid "Dating"
 msgstr ""
 
-#: include/conversation.php:1137
-#, php-format
-msgid "<span  %1$s>%2$d people</span> like this"
+#: include/profile_selectors.php:42
+msgid "Unfaithful"
 msgstr ""
 
-#: include/conversation.php:1138
-#, php-format
-msgid "%s like this."
+#: include/profile_selectors.php:42
+msgid "Sex Addict"
 msgstr ""
 
-#: include/conversation.php:1141
-#, php-format
-msgid "<span  %1$s>%2$d people</span> don't like this"
+#: include/profile_selectors.php:42 include/user.php:263 include/user.php:267
+msgid "Friends"
 msgstr ""
 
-#: include/conversation.php:1142
-#, php-format
-msgid "%s don't like this."
+#: include/profile_selectors.php:42
+msgid "Friends/Benefits"
 msgstr ""
 
-#: include/conversation.php:1145
-#, php-format
-msgid "<span  %1$s>%2$d people</span> attend"
+#: include/profile_selectors.php:42
+msgid "Casual"
 msgstr ""
 
-#: include/conversation.php:1146
-#, php-format
-msgid "%s attend."
+#: include/profile_selectors.php:42
+msgid "Engaged"
 msgstr ""
 
-#: include/conversation.php:1149
-#, php-format
-msgid "<span  %1$s>%2$d people</span> don't attend"
+#: include/profile_selectors.php:42
+msgid "Married"
 msgstr ""
 
-#: include/conversation.php:1150
-#, php-format
-msgid "%s don't attend."
+#: include/profile_selectors.php:42
+msgid "Imaginarily married"
 msgstr ""
 
-#: include/conversation.php:1153
-#, php-format
-msgid "<span  %1$s>%2$d people</span> attend maybe"
+#: include/profile_selectors.php:42
+msgid "Partners"
 msgstr ""
 
-#: include/conversation.php:1154
-#, php-format
-msgid "%s anttend maybe."
+#: include/profile_selectors.php:42
+msgid "Cohabiting"
 msgstr ""
 
-#: include/conversation.php:1184 include/conversation.php:1200
-msgid "Visible to <strong>everybody</strong>"
+#: include/profile_selectors.php:42
+msgid "Common law"
 msgstr ""
 
-#: include/conversation.php:1185 include/conversation.php:1201
-#: mod/message.php:271 mod/message.php:278 mod/message.php:418
-#: mod/message.php:425 mod/wallmessage.php:114 mod/wallmessage.php:121
-msgid "Please enter a link URL:"
+#: include/profile_selectors.php:42
+msgid "Happy"
 msgstr ""
 
-#: include/conversation.php:1186 include/conversation.php:1202
-msgid "Please enter a video link/URL:"
+#: include/profile_selectors.php:42
+msgid "Not looking"
 msgstr ""
 
-#: include/conversation.php:1187 include/conversation.php:1203
-msgid "Please enter an audio link/URL:"
+#: include/profile_selectors.php:42
+msgid "Swinger"
 msgstr ""
 
-#: include/conversation.php:1188 include/conversation.php:1204
-msgid "Tag term:"
+#: include/profile_selectors.php:42
+msgid "Betrayed"
 msgstr ""
 
-#: include/conversation.php:1189 include/conversation.php:1205
-#: mod/filer.php:30
-msgid "Save to Folder:"
+#: include/profile_selectors.php:42
+msgid "Separated"
 msgstr ""
 
-#: include/conversation.php:1190 include/conversation.php:1206
-msgid "Where are you right now?"
+#: include/profile_selectors.php:42
+msgid "Unstable"
 msgstr ""
 
-#: include/conversation.php:1191
-msgid "Delete item(s)?"
+#: include/profile_selectors.php:42
+msgid "Divorced"
 msgstr ""
 
-#: include/conversation.php:1237
-msgid "Share"
+#: include/profile_selectors.php:42
+msgid "Imaginarily divorced"
 msgstr ""
 
-#: include/conversation.php:1238 mod/editpost.php:100 mod/message.php:335
-#: mod/message.php:519 mod/wallmessage.php:138
-msgid "Upload photo"
+#: include/profile_selectors.php:42
+msgid "Widowed"
 msgstr ""
 
-#: include/conversation.php:1239 mod/editpost.php:101
-msgid "upload photo"
+#: include/profile_selectors.php:42
+msgid "Uncertain"
 msgstr ""
 
-#: include/conversation.php:1240 mod/editpost.php:102
-msgid "Attach file"
+#: include/profile_selectors.php:42
+msgid "It's complicated"
 msgstr ""
 
-#: include/conversation.php:1241 mod/editpost.php:103
-msgid "attach file"
+#: include/profile_selectors.php:42
+msgid "Don't care"
 msgstr ""
 
-#: include/conversation.php:1242 mod/editpost.php:104 mod/message.php:336
-#: mod/message.php:520 mod/wallmessage.php:139
-msgid "Insert web link"
+#: include/profile_selectors.php:42
+msgid "Ask me"
 msgstr ""
 
-#: include/conversation.php:1243 mod/editpost.php:105
-msgid "web link"
+#: include/security.php:61
+msgid "Welcome "
 msgstr ""
 
-#: include/conversation.php:1244 mod/editpost.php:106
-msgid "Insert video link"
+#: include/security.php:62
+msgid "Please upload a profile photo."
 msgstr ""
 
-#: include/conversation.php:1245 mod/editpost.php:107
-msgid "video link"
+#: include/security.php:65
+msgid "Welcome back "
 msgstr ""
 
-#: include/conversation.php:1246 mod/editpost.php:108
-msgid "Insert audio link"
+#: include/security.php:429
+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/conversation.php:1247 mod/editpost.php:109
-msgid "audio link"
+#: include/uimport.php:91
+msgid "Error decoding account file"
 msgstr ""
 
-#: include/conversation.php:1248 mod/editpost.php:110
-msgid "Set your location"
+#: include/uimport.php:97
+msgid "Error! No version data in file! This is not a Friendica account file?"
 msgstr ""
 
-#: include/conversation.php:1249 mod/editpost.php:111
-msgid "set location"
+#: include/uimport.php:113 include/uimport.php:124
+msgid "Error! Cannot check nickname"
 msgstr ""
 
-#: include/conversation.php:1250 mod/editpost.php:112
-msgid "Clear browser location"
+#: include/uimport.php:117 include/uimport.php:128
+#, php-format
+msgid "User '%s' already exists on this server!"
 msgstr ""
 
-#: include/conversation.php:1251 mod/editpost.php:113
-msgid "clear location"
+#: include/uimport.php:150
+msgid "User creation error"
 msgstr ""
 
-#: include/conversation.php:1253 mod/editpost.php:127
-msgid "Set title"
+#: include/uimport.php:170
+msgid "User profile creation error"
 msgstr ""
 
-#: include/conversation.php:1255 mod/editpost.php:129
-msgid "Categories (comma-separated list)"
-msgstr ""
+#: include/uimport.php:219
+#, php-format
+msgid "%d contact not imported"
+msgid_plural "%d contacts not imported"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/conversation.php:1257 mod/editpost.php:115
-msgid "Permission settings"
+#: include/uimport.php:289
+msgid "Done. You can now login with your username and password"
 msgstr ""
 
-#: include/conversation.php:1258 mod/editpost.php:144
-msgid "permissions"
+#: include/Contact.php:395 include/Contact.php:408 include/Contact.php:453
+#: include/conversation.php:1004 include/conversation.php:1020
+#: mod/allfriends.php:68 mod/directory.php:157 mod/match.php:73
+#: mod/suggest.php:82 mod/dirfind.php:209
+msgid "View Profile"
 msgstr ""
 
-#: include/conversation.php:1266 mod/editpost.php:124
-msgid "Public post"
+#: include/Contact.php:409 include/contact_widgets.php:32
+#: include/conversation.php:1017 mod/allfriends.php:69 mod/contacts.php:610
+#: mod/match.php:74 mod/suggest.php:83 mod/dirfind.php:210 mod/follow.php:106
+msgid "Connect/Follow"
 msgstr ""
 
-#: include/conversation.php:1271 mod/content.php:737 mod/editpost.php:135
-#: mod/events.php:511 mod/photos.php:1613 mod/photos.php:1661
-#: mod/photos.php:1747 object/Item.php:714
-msgid "Preview"
+#: include/Contact.php:452 include/conversation.php:1003
+msgid "View Status"
 msgstr ""
 
-#: include/conversation.php:1275 include/items.php:1983 mod/contacts.php:455
-#: mod/dfrn_request.php:889 mod/editpost.php:138 mod/fbrowser.php:100
-#: mod/fbrowser.php:135 mod/follow.php:124 mod/message.php:209
-#: mod/photos.php:240 mod/photos.php:331 mod/settings.php:682
-#: mod/settings.php:708 mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96
-#: mod/videos.php:132
-msgid "Cancel"
+#: include/Contact.php:454 include/conversation.php:1005
+msgid "View Photos"
 msgstr ""
 
-#: include/conversation.php:1281
-msgid "Post to Groups"
+#: include/Contact.php:455 include/conversation.php:1006
+msgid "Network Posts"
 msgstr ""
 
-#: include/conversation.php:1282
-msgid "Post to Contacts"
+#: include/Contact.php:456 include/conversation.php:1007
+msgid "View Contact"
 msgstr ""
 
-#: include/conversation.php:1283
-msgid "Private post"
+#: include/Contact.php:457
+msgid "Drop Contact"
 msgstr ""
 
-#: include/conversation.php:1288 include/identity.php:259 mod/editpost.php:142
-msgid "Message"
+#: include/Contact.php:458 include/conversation.php:1008
+msgid "Send PM"
 msgstr ""
 
-#: include/conversation.php:1289 mod/editpost.php:143
-msgid "Browser"
+#: include/Contact.php:459 include/conversation.php:1012
+msgid "Poke"
 msgstr ""
 
-#: include/conversation.php:1445
-msgid "View all"
+#: include/Contact.php:840
+msgid "Organisation"
 msgstr ""
 
-#: include/conversation.php:1467
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] ""
-msgstr[1] ""
+#: include/Contact.php:843
+msgid "News"
+msgstr ""
 
-#: include/conversation.php:1470
-msgid "Dislike"
-msgid_plural "Dislikes"
-msgstr[0] ""
-msgstr[1] ""
+#: include/Contact.php:846
+msgid "Forum"
+msgstr ""
 
-#: include/conversation.php:1476
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] ""
-msgstr[1] ""
+#: include/acl_selectors.php:353
+msgid "Post to Email"
+msgstr ""
 
-#: include/conversation.php:1479 include/profile_selectors.php:6
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] ""
-msgstr[1] ""
+#: include/acl_selectors.php:358
+#, php-format
+msgid "Connectors disabled, since \"%s\" is enabled."
+msgstr ""
 
-#: include/datetime.php:58 include/datetime.php:60 mod/profiles.php:697
-msgid "Miscellaneous"
+#: include/acl_selectors.php:359 mod/settings.php:1188
+msgid "Hide your profile details from unknown viewers?"
 msgstr ""
 
-#: include/datetime.php:184 include/identity.php:641
-msgid "Birthday:"
+#: include/acl_selectors.php:365
+msgid "Visible to everybody"
 msgstr ""
 
-#: include/datetime.php:186 mod/profiles.php:720
-msgid "Age: "
+#: include/acl_selectors.php:366 view/theme/vier/config.php:108
+msgid "show"
 msgstr ""
 
-#: include/datetime.php:188
-msgid "YYYY-MM-DD or MM-DD"
+#: include/acl_selectors.php:367 view/theme/vier/config.php:108
+msgid "don't show"
 msgstr ""
 
-#: include/datetime.php:343
-msgid "never"
+#: include/acl_selectors.php:373 mod/editpost.php:123
+msgid "CC: email addresses"
 msgstr ""
 
-#: include/datetime.php:349
-msgid "less than a second ago"
+#: include/acl_selectors.php:374 mod/editpost.php:130
+msgid "Example: bob@example.com, mary@example.com"
 msgstr ""
 
-#: include/datetime.php:352
-msgid "year"
+#: include/acl_selectors.php:376 mod/events.php:508 mod/photos.php:1196
+#: mod/photos.php:1593
+msgid "Permissions"
 msgstr ""
 
-#: include/datetime.php:352
-msgid "years"
+#: include/acl_selectors.php:377
+msgid "Close"
 msgstr ""
 
-#: include/datetime.php:353 include/event.php:481 mod/cal.php:279
-#: mod/events.php:396
-msgid "month"
+#: include/api.php:1089
+#, php-format
+msgid "Daily posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/datetime.php:353
-msgid "months"
+#: include/api.php:1110
+#, php-format
+msgid "Weekly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/datetime.php:354 include/event.php:482 mod/cal.php:280
-#: mod/events.php:397
-msgid "week"
+#: include/api.php:1131
+#, php-format
+msgid "Monthly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/datetime.php:354
-msgid "weeks"
+#: include/auth.php:51
+msgid "Logged out."
 msgstr ""
 
-#: include/datetime.php:355 include/event.php:483 mod/cal.php:281
-#: mod/events.php:398
-msgid "day"
+#: include/auth.php:122 include/auth.php:184 mod/openid.php:110
+msgid "Login failed."
 msgstr ""
 
-#: include/datetime.php:355
-msgid "days"
+#: include/auth.php:138 include/user.php:75
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
 msgstr ""
 
-#: include/datetime.php:356
-msgid "hour"
+#: include/auth.php:138 include/user.php:75
+msgid "The error message was:"
 msgstr ""
 
-#: include/datetime.php:356
-msgid "hours"
+#: include/bb2diaspora.php:230 include/event.php:17 mod/localtime.php:12
+msgid "l F d, Y \\@ g:i A"
 msgstr ""
 
-#: include/datetime.php:357
-msgid "minute"
+#: include/bb2diaspora.php:236 include/event.php:34 include/event.php:54
+#: include/event.php:525
+msgid "Starts:"
 msgstr ""
 
-#: include/datetime.php:357
-msgid "minutes"
+#: include/bb2diaspora.php:244 include/event.php:37 include/event.php:60
+#: include/event.php:526
+msgid "Finishes:"
 msgstr ""
 
-#: include/datetime.php:358
-msgid "second"
+#: include/bb2diaspora.php:253 include/event.php:41 include/event.php:67
+#: include/event.php:527 include/identity.php:336 mod/contacts.php:636
+#: mod/directory.php:139 mod/events.php:493 mod/notifications.php:244
+msgid "Location:"
 msgstr ""
 
-#: include/datetime.php:358
-msgid "seconds"
+#: include/bbcode.php:380 include/bbcode.php:1132 include/bbcode.php:1133
+msgid "Image/photo"
 msgstr ""
 
-#: include/datetime.php:367
+#: include/bbcode.php:497
 #, php-format
-msgid "%1$d %2$s ago"
+msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
 msgstr ""
 
-#: include/datetime.php:585
-#, php-format
-msgid "%s's birthday"
+#: include/bbcode.php:1089 include/bbcode.php:1111
+msgid "$1 wrote:"
 msgstr ""
 
-#: include/datetime.php:586 include/dfrn.php:1131
-#, php-format
-msgid "Happy Birthday %s"
+#: include/bbcode.php:1141 include/bbcode.php:1142
+msgid "Encrypted content"
 msgstr ""
 
-#: include/dba.php:43 include/dba_pdo.php:72
-#, php-format
-msgid "Cannot locate DNS info for database server '%s'"
+#: include/bbcode.php:1257
+msgid "Invalid source protocol"
 msgstr ""
 
-#: include/dbstructure.php:36
-#, 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."
+#: include/bbcode.php:1267
+msgid "Invalid link protocol"
 msgstr ""
 
-#: include/dbstructure.php:41
-#, php-format
-msgid ""
-"The error message is\n"
-"[pre]%s[/pre]"
+#: include/contact_selectors.php:32
+msgid "Unknown | Not categorised"
 msgstr ""
 
-#: include/dbstructure.php:199
-msgid "Errors encountered creating database tables."
+#: include/contact_selectors.php:33
+msgid "Block immediately"
 msgstr ""
 
-#: include/dbstructure.php:333 include/dbstructure.php:341
-#: include/dbstructure.php:349 include/dbstructure.php:354
-#: include/dbstructure.php:359
-msgid "Errors encountered performing database changes."
+#: include/contact_selectors.php:34
+msgid "Shady, spammer, self-marketer"
 msgstr ""
 
-#: include/delivery.php:427
-msgid "(no subject)"
+#: include/contact_selectors.php:35
+msgid "Known to me, but no opinion"
 msgstr ""
 
-#: include/delivery.php:439 include/enotify.php:43
-msgid "noreply"
+#: include/contact_selectors.php:36
+msgid "OK, probably harmless"
 msgstr ""
 
-#: include/dfrn.php:1130
-#, php-format
-msgid "%s\\'s birthday"
+#: include/contact_selectors.php:37
+msgid "Reputable, has my trust"
 msgstr ""
 
-#: include/diaspora.php:2087
-msgid "Sharing notification from Diaspora network"
+#: include/contact_selectors.php:56 mod/admin.php:980
+msgid "Frequently"
 msgstr ""
 
-#: include/diaspora.php:3096
-msgid "Attachments:"
+#: include/contact_selectors.php:57 mod/admin.php:981
+msgid "Hourly"
 msgstr ""
 
-#: include/enotify.php:24
-msgid "Friendica Notification"
+#: include/contact_selectors.php:58 mod/admin.php:982
+msgid "Twice daily"
 msgstr ""
 
-#: include/enotify.php:27
-msgid "Thank You,"
+#: include/contact_selectors.php:59 mod/admin.php:983
+msgid "Daily"
 msgstr ""
 
-#: include/enotify.php:30
-#, php-format
-msgid "%s Administrator"
+#: include/contact_selectors.php:60
+msgid "Weekly"
 msgstr ""
 
-#: include/enotify.php:32
-#, php-format
-msgid "%1$s, %2$s Administrator"
+#: include/contact_selectors.php:61
+msgid "Monthly"
 msgstr ""
 
-#: include/enotify.php:70
-#, php-format
-msgid "%s <!item_type!>"
+#: include/contact_selectors.php:76 mod/dfrn_request.php:886
+msgid "Friendica"
 msgstr ""
 
-#: include/enotify.php:83
-#, php-format
-msgid "[Friendica:Notify] New mail received at %s"
+#: include/contact_selectors.php:77
+msgid "OStatus"
 msgstr ""
 
-#: include/enotify.php:85
-#, php-format
-msgid "%1$s sent you a new private message at %2$s."
+#: include/contact_selectors.php:78
+msgid "RSS/Atom"
 msgstr ""
 
-#: include/enotify.php:86
-#, php-format
-msgid "%1$s sent you %2$s."
+#: include/contact_selectors.php:79 include/contact_selectors.php:86
+#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1534
+msgid "Email"
 msgstr ""
 
-#: include/enotify.php:86
-msgid "a private message"
+#: include/contact_selectors.php:80 mod/dfrn_request.php:888
+#: mod/settings.php:848
+msgid "Diaspora"
 msgstr ""
 
-#: include/enotify.php:88
-#, php-format
-msgid "Please visit %s to view and/or reply to your private messages."
+#: include/contact_selectors.php:81
+msgid "Facebook"
 msgstr ""
 
-#: include/enotify.php:134
-#, php-format
-msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
+#: include/contact_selectors.php:82
+msgid "Zot!"
 msgstr ""
 
-#: include/enotify.php:141
-#, php-format
-msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
+#: include/contact_selectors.php:83
+msgid "LinkedIn"
 msgstr ""
 
-#: include/enotify.php:149
-#, php-format
-msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
+#: include/contact_selectors.php:84
+msgid "XMPP/IM"
 msgstr ""
 
-#: include/enotify.php:159
-#, php-format
-msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
+#: include/contact_selectors.php:85
+msgid "MySpace"
 msgstr ""
 
-#: include/enotify.php:161
-#, php-format
-msgid "%s commented on an item/conversation you have been following."
+#: include/contact_selectors.php:87
+msgid "Google+"
 msgstr ""
 
-#: include/enotify.php:164 include/enotify.php:178 include/enotify.php:192
-#: include/enotify.php:206 include/enotify.php:224 include/enotify.php:238
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
+#: include/contact_selectors.php:88
+msgid "pump.io"
 msgstr ""
 
-#: include/enotify.php:171
-#, php-format
-msgid "[Friendica:Notify] %s posted to your profile wall"
+#: include/contact_selectors.php:89
+msgid "Twitter"
 msgstr ""
 
-#: include/enotify.php:173
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
+#: include/contact_selectors.php:90
+msgid "Diaspora Connector"
 msgstr ""
 
-#: include/enotify.php:174
-#, php-format
-msgid "%1$s posted to [url=%2$s]your wall[/url]"
+#: include/contact_selectors.php:91
+msgid "GNU Social Connector"
 msgstr ""
 
-#: include/enotify.php:185
-#, php-format
-msgid "[Friendica:Notify] %s tagged you"
+#: include/contact_selectors.php:92
+msgid "pnut"
 msgstr ""
 
-#: include/enotify.php:187
-#, php-format
-msgid "%1$s tagged you at %2$s"
+#: include/contact_selectors.php:93
+msgid "App.net"
 msgstr ""
 
-#: include/enotify.php:188
-#, php-format
-msgid "%1$s [url=%2$s]tagged you[/url]."
+#: include/contact_widgets.php:6
+msgid "Add New Contact"
 msgstr ""
 
-#: include/enotify.php:199
-#, php-format
-msgid "[Friendica:Notify] %s shared a new post"
+#: include/contact_widgets.php:7
+msgid "Enter address or web location"
 msgstr ""
 
-#: include/enotify.php:201
-#, php-format
-msgid "%1$s shared a new post at %2$s"
+#: include/contact_widgets.php:8
+msgid "Example: bob@example.com, http://example.com/barbara"
 msgstr ""
 
-#: include/enotify.php:202
-#, php-format
-msgid "%1$s [url=%2$s]shared a post[/url]."
+#: include/contact_widgets.php:10 include/identity.php:224
+#: mod/allfriends.php:85 mod/match.php:89 mod/suggest.php:101
+#: mod/dirfind.php:207
+msgid "Connect"
 msgstr ""
 
-#: include/enotify.php:213
+#: include/contact_widgets.php:24
 #, php-format
-msgid "[Friendica:Notify] %1$s poked you"
-msgstr ""
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/enotify.php:215
-#, php-format
-msgid "%1$s poked you at %2$s"
+#: include/contact_widgets.php:30
+msgid "Find People"
 msgstr ""
 
-#: include/enotify.php:216
-#, php-format
-msgid "%1$s [url=%2$s]poked you[/url]."
+#: include/contact_widgets.php:31
+msgid "Enter name or interest"
 msgstr ""
 
-#: include/enotify.php:231
-#, php-format
-msgid "[Friendica:Notify] %s tagged your post"
+#: include/contact_widgets.php:33
+msgid "Examples: Robert Morgenstein, Fishing"
 msgstr ""
 
-#: include/enotify.php:233
-#, php-format
-msgid "%1$s tagged your post at %2$s"
+#: include/contact_widgets.php:34 mod/contacts.php:806 mod/directory.php:206
+msgid "Find"
 msgstr ""
 
-#: include/enotify.php:234
-#, php-format
-msgid "%1$s tagged [url=%2$s]your post[/url]"
+#: include/contact_widgets.php:35 mod/suggest.php:114
+#: view/theme/vier/theme.php:201
+msgid "Friend Suggestions"
 msgstr ""
 
-#: include/enotify.php:245
-msgid "[Friendica:Notify] Introduction received"
+#: include/contact_widgets.php:36 view/theme/vier/theme.php:200
+msgid "Similar Interests"
 msgstr ""
 
-#: include/enotify.php:247
-#, php-format
-msgid "You've received an introduction from '%1$s' at %2$s"
+#: include/contact_widgets.php:37
+msgid "Random Profile"
 msgstr ""
 
-#: include/enotify.php:248
-#, php-format
-msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
+#: include/contact_widgets.php:38 view/theme/vier/theme.php:202
+msgid "Invite Friends"
 msgstr ""
 
-#: include/enotify.php:252 include/enotify.php:295
-#, php-format
-msgid "You may visit their profile at %s"
+#: include/contact_widgets.php:125
+msgid "Networks"
 msgstr ""
 
-#: include/enotify.php:254
-#, php-format
-msgid "Please visit %s to approve or reject the introduction."
+#: include/contact_widgets.php:128
+msgid "All Networks"
 msgstr ""
 
-#: include/enotify.php:262
-msgid "[Friendica:Notify] A new person is sharing with you"
+#: include/contact_widgets.php:160 include/features.php:104
+msgid "Saved Folders"
 msgstr ""
 
-#: include/enotify.php:264 include/enotify.php:265
-#, php-format
-msgid "%1$s is sharing with you at %2$s"
+#: include/contact_widgets.php:163 include/contact_widgets.php:198
+msgid "Everything"
 msgstr ""
 
-#: include/enotify.php:271
-msgid "[Friendica:Notify] You have a new follower"
+#: include/contact_widgets.php:195
+msgid "Categories"
 msgstr ""
 
-#: include/enotify.php:273 include/enotify.php:274
+#: include/contact_widgets.php:264
 #, php-format
-msgid "You have a new follower at %2$s : %1$s"
-msgstr ""
+msgid "%d contact in common"
+msgid_plural "%d contacts in common"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/enotify.php:285
-msgid "[Friendica:Notify] Friend suggestion received"
+#: include/conversation.php:159
+#, php-format
+msgid "%1$s attends %2$s's %3$s"
 msgstr ""
 
-#: include/enotify.php:287
+#: include/conversation.php:162
 #, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
+msgid "%1$s doesn't attend %2$s's %3$s"
 msgstr ""
 
-#: include/enotify.php:288
+#: include/conversation.php:165
 #, php-format
-msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
+msgid "%1$s attends maybe %2$s's %3$s"
 msgstr ""
 
-#: include/enotify.php:293
-msgid "Name:"
+#: include/conversation.php:198 mod/dfrn_confirm.php:478
+#, php-format
+msgid "%1$s is now friends with %2$s"
 msgstr ""
 
-#: include/enotify.php:294
-msgid "Photo:"
+#: include/conversation.php:239
+#, php-format
+msgid "%1$s poked %2$s"
 msgstr ""
 
-#: include/enotify.php:297
+#: include/conversation.php:260 mod/mood.php:63
 #, php-format
-msgid "Please visit %s to approve or reject the suggestion."
+msgid "%1$s is currently %2$s"
 msgstr ""
 
-#: include/enotify.php:305 include/enotify.php:319
-msgid "[Friendica:Notify] Connection accepted"
+#: include/conversation.php:307 mod/tagger.php:95
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
 msgstr ""
 
-#: include/enotify.php:307 include/enotify.php:321
-#, php-format
-msgid "'%1$s' has accepted your connection request at %2$s"
+#: include/conversation.php:334
+msgid "post/item"
 msgstr ""
 
-#: include/enotify.php:308 include/enotify.php:322
+#: include/conversation.php:335
 #, php-format
-msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
+msgid "%1$s marked %2$s's %3$s as favorite"
 msgstr ""
 
-#: include/enotify.php:312
-msgid ""
-"You are now mutual friends and may exchange status updates, photos, and "
-"email without restriction."
+#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662
+#: mod/profiles.php:340
+msgid "Likes"
 msgstr ""
 
-#: include/enotify.php:314
-#, php-format
-msgid "Please visit %s if you wish to make any changes to this relationship."
+#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662
+#: mod/profiles.php:344
+msgid "Dislikes"
 msgstr ""
 
-#: include/enotify.php:326
-#, php-format
-msgid ""
-"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
-"communication - such as private messaging and some profile interactions. If "
-"this is a celebrity or community page, these settings were applied "
-"automatically."
-msgstr ""
+#: include/conversation.php:615 include/conversation.php:1541
+#: mod/content.php:373 mod/photos.php:1663
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/enotify.php:328
-#, php-format
-msgid ""
-"'%1$s' may choose to extend this into a two-way or more permissive "
-"relationship in the future."
+#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663
+msgid "Not attending"
 msgstr ""
 
-#: include/enotify.php:330
-#, php-format
-msgid "Please visit %s  if you wish to make any changes to this relationship."
+#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663
+msgid "Might attend"
 msgstr ""
 
-#: include/enotify.php:340
-msgid "[Friendica System:Notify] registration request"
+#: include/conversation.php:747 mod/content.php:453 mod/content.php:759
+#: mod/photos.php:1728 object/Item.php:137
+msgid "Select"
 msgstr ""
 
-#: include/enotify.php:342
-#, php-format
-msgid "You've received a registration request from '%1$s' at %2$s"
+#: include/conversation.php:748 mod/contacts.php:816 mod/contacts.php:1015
+#: mod/content.php:454 mod/content.php:760 mod/photos.php:1729
+#: mod/settings.php:744 mod/admin.php:1508 object/Item.php:138
+msgid "Delete"
 msgstr ""
 
-#: include/enotify.php:343
+#: include/conversation.php:791 mod/content.php:487 mod/content.php:915
+#: mod/content.php:916 object/Item.php:356 object/Item.php:357
 #, php-format
-msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
+msgid "View %s's profile @ %s"
 msgstr ""
 
-#: include/enotify.php:347
-#, php-format
-msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
+#: include/conversation.php:803 object/Item.php:344
+msgid "Categories:"
 msgstr ""
 
-#: include/enotify.php:350
-#, php-format
-msgid "Please visit %s to approve or reject the request."
+#: include/conversation.php:804 object/Item.php:345
+msgid "Filed under:"
 msgstr ""
 
-#: include/event.php:442
-msgid "Sun"
+#: include/conversation.php:811 mod/content.php:497 mod/content.php:928
+#: object/Item.php:370
+#, php-format
+msgid "%s from %s"
 msgstr ""
 
-#: include/event.php:443
-msgid "Mon"
+#: include/conversation.php:827 mod/content.php:513
+msgid "View in context"
 msgstr ""
 
-#: include/event.php:444
-msgid "Tue"
+#: include/conversation.php:829 include/conversation.php:1298
+#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114
+#: mod/wallmessage.php:140 mod/message.php:337 mod/message.php:522
+#: mod/photos.php:1627 object/Item.php:395
+msgid "Please wait"
 msgstr ""
 
-#: include/event.php:445
-msgid "Wed"
+#: include/conversation.php:906
+msgid "remove"
 msgstr ""
 
-#: include/event.php:446
-msgid "Thu"
+#: include/conversation.php:910
+msgid "Delete Selected Items"
 msgstr ""
 
-#: include/event.php:447
-msgid "Fri"
+#: include/conversation.php:1002
+msgid "Follow Thread"
 msgstr ""
 
-#: include/event.php:448
-msgid "Sat"
+#: include/conversation.php:1139
+#, php-format
+msgid "%s likes this."
 msgstr ""
 
-#: include/event.php:449 include/text.php:1132 mod/settings.php:981
-msgid "Sunday"
+#: include/conversation.php:1142
+#, php-format
+msgid "%s doesn't like this."
 msgstr ""
 
-#: include/event.php:450 include/text.php:1132 mod/settings.php:981
-msgid "Monday"
+#: include/conversation.php:1145
+#, php-format
+msgid "%s attends."
 msgstr ""
 
-#: include/event.php:451 include/text.php:1132
-msgid "Tuesday"
+#: include/conversation.php:1148
+#, php-format
+msgid "%s doesn't attend."
 msgstr ""
 
-#: include/event.php:452 include/text.php:1132
-msgid "Wednesday"
+#: include/conversation.php:1151
+#, php-format
+msgid "%s attends maybe."
 msgstr ""
 
-#: include/event.php:453 include/text.php:1132
-msgid "Thursday"
+#: include/conversation.php:1162
+msgid "and"
 msgstr ""
 
-#: include/event.php:454 include/text.php:1132
-msgid "Friday"
+#: include/conversation.php:1168
+#, php-format
+msgid ", and %d other people"
 msgstr ""
 
-#: include/event.php:455 include/text.php:1132
-msgid "Saturday"
+#: include/conversation.php:1177
+#, php-format
+msgid "<span  %1$s>%2$d people</span> like this"
 msgstr ""
 
-#: include/event.php:456
-msgid "Jan"
+#: include/conversation.php:1178
+#, php-format
+msgid "%s like this."
 msgstr ""
 
-#: include/event.php:457
-msgid "Feb"
+#: include/conversation.php:1181
+#, php-format
+msgid "<span  %1$s>%2$d people</span> don't like this"
 msgstr ""
 
-#: include/event.php:458
-msgid "Mar"
+#: include/conversation.php:1182
+#, php-format
+msgid "%s don't like this."
 msgstr ""
 
-#: include/event.php:459
-msgid "Apr"
+#: include/conversation.php:1185
+#, php-format
+msgid "<span  %1$s>%2$d people</span> attend"
 msgstr ""
 
-#: include/event.php:460 include/event.php:472 include/text.php:1136
-msgid "May"
+#: include/conversation.php:1186
+#, php-format
+msgid "%s attend."
 msgstr ""
 
-#: include/event.php:461
-msgid "Jun"
+#: include/conversation.php:1189
+#, php-format
+msgid "<span  %1$s>%2$d people</span> don't attend"
 msgstr ""
 
-#: include/event.php:462
-msgid "Jul"
+#: include/conversation.php:1190
+#, php-format
+msgid "%s don't attend."
 msgstr ""
 
-#: include/event.php:463
-msgid "Aug"
+#: include/conversation.php:1193
+#, php-format
+msgid "<span  %1$s>%2$d people</span> attend maybe"
 msgstr ""
 
-#: include/event.php:464
-msgid "Sept"
+#: include/conversation.php:1194
+#, php-format
+msgid "%s anttend maybe."
 msgstr ""
 
-#: include/event.php:465
-msgid "Oct"
+#: include/conversation.php:1223 include/conversation.php:1239
+msgid "Visible to <strong>everybody</strong>"
 msgstr ""
 
-#: include/event.php:466
-msgid "Nov"
+#: include/conversation.php:1224 include/conversation.php:1240
+#: mod/wallmessage.php:114 mod/wallmessage.php:121 mod/message.php:271
+#: mod/message.php:278 mod/message.php:418 mod/message.php:425
+msgid "Please enter a link URL:"
 msgstr ""
 
-#: include/event.php:467
-msgid "Dec"
+#: include/conversation.php:1225 include/conversation.php:1241
+msgid "Please enter a video link/URL:"
 msgstr ""
 
-#: include/event.php:468 include/text.php:1136
-msgid "January"
+#: include/conversation.php:1226 include/conversation.php:1242
+msgid "Please enter an audio link/URL:"
 msgstr ""
 
-#: include/event.php:469 include/text.php:1136
-msgid "February"
+#: include/conversation.php:1227 include/conversation.php:1243
+msgid "Tag term:"
 msgstr ""
 
-#: include/event.php:470 include/text.php:1136
-msgid "March"
+#: include/conversation.php:1228 include/conversation.php:1244
+#: mod/filer.php:30
+msgid "Save to Folder:"
 msgstr ""
 
-#: include/event.php:471 include/text.php:1136
-msgid "April"
+#: include/conversation.php:1229 include/conversation.php:1245
+msgid "Where are you right now?"
 msgstr ""
 
-#: include/event.php:473 include/text.php:1136
-msgid "June"
+#: include/conversation.php:1230
+msgid "Delete item(s)?"
 msgstr ""
 
-#: include/event.php:474 include/text.php:1136
-msgid "July"
+#: include/conversation.php:1279
+msgid "Share"
 msgstr ""
 
-#: include/event.php:475 include/text.php:1136
-msgid "August"
+#: include/conversation.php:1280 mod/editpost.php:100 mod/wallmessage.php:138
+#: mod/message.php:335 mod/message.php:519
+msgid "Upload photo"
 msgstr ""
 
-#: include/event.php:476 include/text.php:1136
-msgid "September"
+#: include/conversation.php:1281 mod/editpost.php:101
+msgid "upload photo"
 msgstr ""
 
-#: include/event.php:477 include/text.php:1136
-msgid "October"
+#: include/conversation.php:1282 mod/editpost.php:102
+msgid "Attach file"
 msgstr ""
 
-#: include/event.php:478 include/text.php:1136
-msgid "November"
+#: include/conversation.php:1283 mod/editpost.php:103
+msgid "attach file"
 msgstr ""
 
-#: include/event.php:479 include/text.php:1136
-msgid "December"
+#: include/conversation.php:1284 mod/editpost.php:104 mod/wallmessage.php:139
+#: mod/message.php:336 mod/message.php:520
+msgid "Insert web link"
 msgstr ""
 
-#: include/event.php:480 mod/cal.php:278 mod/events.php:395
-msgid "today"
+#: include/conversation.php:1285 mod/editpost.php:105
+msgid "web link"
 msgstr ""
 
-#: include/event.php:484
-msgid "all-day"
+#: include/conversation.php:1286 mod/editpost.php:106
+msgid "Insert video link"
 msgstr ""
 
-#: include/event.php:486
-msgid "No events to display"
+#: include/conversation.php:1287 mod/editpost.php:107
+msgid "video link"
 msgstr ""
 
-#: include/event.php:596
-msgid "l, F j"
+#: include/conversation.php:1288 mod/editpost.php:108
+msgid "Insert audio link"
 msgstr ""
 
-#: include/event.php:615
-msgid "Edit event"
+#: include/conversation.php:1289 mod/editpost.php:109
+msgid "audio link"
 msgstr ""
 
-#: include/event.php:637 include/text.php:1534 include/text.php:1541
-msgid "link to source"
+#: include/conversation.php:1290 mod/editpost.php:110
+msgid "Set your location"
 msgstr ""
 
-#: include/event.php:872
-msgid "Export"
+#: include/conversation.php:1291 mod/editpost.php:111
+msgid "set location"
 msgstr ""
 
-#: include/event.php:873
-msgid "Export calendar as ical"
+#: include/conversation.php:1292 mod/editpost.php:112
+msgid "Clear browser location"
 msgstr ""
 
-#: include/event.php:874
-msgid "Export calendar as csv"
+#: include/conversation.php:1293 mod/editpost.php:113
+msgid "clear location"
 msgstr ""
 
-#: include/features.php:65
-msgid "General Features"
+#: include/conversation.php:1295 mod/editpost.php:127
+msgid "Set title"
 msgstr ""
 
-#: include/features.php:67
-msgid "Multiple Profiles"
+#: include/conversation.php:1297 mod/editpost.php:129
+msgid "Categories (comma-separated list)"
 msgstr ""
 
-#: include/features.php:67
-msgid "Ability to create multiple profiles"
+#: include/conversation.php:1299 mod/editpost.php:115
+msgid "Permission settings"
 msgstr ""
 
-#: include/features.php:68
-msgid "Photo Location"
+#: include/conversation.php:1300 mod/editpost.php:144
+msgid "permissions"
 msgstr ""
 
-#: include/features.php:68
-msgid ""
-"Photo metadata is normally stripped. This extracts the location (if present) "
-"prior to stripping metadata and links it to a map."
+#: include/conversation.php:1308 mod/editpost.php:124
+msgid "Public post"
 msgstr ""
 
-#: include/features.php:69
-msgid "Export Public Calendar"
+#: include/conversation.php:1313 mod/content.php:737 mod/editpost.php:135
+#: mod/events.php:503 mod/photos.php:1647 mod/photos.php:1689
+#: mod/photos.php:1769 object/Item.php:714
+msgid "Preview"
 msgstr ""
 
-#: include/features.php:69
-msgid "Ability for visitors to download the public calendar"
+#: include/conversation.php:1317 include/items.php:2167 mod/contacts.php:455
+#: mod/editpost.php:138 mod/fbrowser.php:100 mod/fbrowser.php:135
+#: mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96
+#: mod/dfrn_request.php:894 mod/follow.php:124 mod/message.php:209
+#: mod/photos.php:245 mod/photos.php:337 mod/settings.php:682
+#: mod/settings.php:708 mod/videos.php:132
+msgid "Cancel"
 msgstr ""
 
-#: include/features.php:74
-msgid "Post Composition Features"
+#: include/conversation.php:1323
+msgid "Post to Groups"
 msgstr ""
 
-#: include/features.php:75
-msgid "Post Preview"
+#: include/conversation.php:1324
+msgid "Post to Contacts"
 msgstr ""
 
-#: include/features.php:75
-msgid "Allow previewing posts and comments before publishing them"
+#: include/conversation.php:1325
+msgid "Private post"
 msgstr ""
 
-#: include/features.php:76
-msgid "Auto-mention Forums"
+#: include/conversation.php:1330 include/identity.php:264 mod/editpost.php:142
+msgid "Message"
 msgstr ""
 
-#: include/features.php:76
-msgid ""
-"Add/remove mention when a forum page is selected/deselected in ACL window."
+#: include/conversation.php:1331 mod/editpost.php:143
+msgid "Browser"
 msgstr ""
 
-#: include/features.php:81
-msgid "Network Sidebar Widgets"
+#: include/conversation.php:1513
+msgid "View all"
 msgstr ""
 
-#: include/features.php:82
-msgid "Search by Date"
-msgstr ""
+#: include/conversation.php:1535
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/features.php:82
-msgid "Ability to select posts by date ranges"
-msgstr ""
+#: include/conversation.php:1538
+msgid "Dislike"
+msgid_plural "Dislikes"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/features.php:83 include/features.php:113
-msgid "List Forums"
-msgstr ""
+#: include/conversation.php:1544
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] ""
+msgstr[1] ""
 
-#: include/features.php:83
-msgid "Enable widget to display the forums your are connected with"
+#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:698
+msgid "Miscellaneous"
 msgstr ""
 
-#: include/features.php:84
-msgid "Group Filter"
+#: include/datetime.php:196 include/identity.php:644
+msgid "Birthday:"
 msgstr ""
 
-#: include/features.php:84
-msgid "Enable widget to display Network posts only from selected group"
+#: include/datetime.php:198 mod/profiles.php:721
+msgid "Age: "
 msgstr ""
 
-#: include/features.php:85
-msgid "Network Filter"
+#: include/datetime.php:200
+msgid "YYYY-MM-DD or MM-DD"
 msgstr ""
 
-#: include/features.php:85
-msgid "Enable widget to display Network posts only from selected network"
+#: include/datetime.php:370
+msgid "never"
 msgstr ""
 
-#: include/features.php:86 mod/network.php:199 mod/search.php:34
-msgid "Saved Searches"
+#: include/datetime.php:376
+msgid "less than a second ago"
 msgstr ""
 
-#: include/features.php:86
-msgid "Save search terms for re-use"
+#: include/datetime.php:379
+msgid "year"
 msgstr ""
 
-#: include/features.php:91
-msgid "Network Tabs"
+#: include/datetime.php:379
+msgid "years"
 msgstr ""
 
-#: include/features.php:92
-msgid "Network Personal Tab"
+#: include/datetime.php:380 include/event.php:519 mod/cal.php:279
+#: mod/events.php:384
+msgid "month"
 msgstr ""
 
-#: include/features.php:92
-msgid "Enable tab to display only Network posts that you've interacted on"
+#: include/datetime.php:380
+msgid "months"
 msgstr ""
 
-#: include/features.php:93
-msgid "Network New Tab"
+#: include/datetime.php:381 include/event.php:520 mod/cal.php:280
+#: mod/events.php:385
+msgid "week"
 msgstr ""
 
-#: include/features.php:93
-msgid "Enable tab to display only new Network posts (from the last 12 hours)"
+#: include/datetime.php:381
+msgid "weeks"
 msgstr ""
 
-#: include/features.php:94
-msgid "Network Shared Links Tab"
+#: include/datetime.php:382 include/event.php:521 mod/cal.php:281
+#: mod/events.php:386
+msgid "day"
 msgstr ""
 
-#: include/features.php:94
-msgid "Enable tab to display only Network posts with links in them"
+#: include/datetime.php:382
+msgid "days"
 msgstr ""
 
-#: include/features.php:99
-msgid "Post/Comment Tools"
+#: include/datetime.php:383
+msgid "hour"
 msgstr ""
 
-#: include/features.php:100
-msgid "Multiple Deletion"
+#: include/datetime.php:383
+msgid "hours"
 msgstr ""
 
-#: include/features.php:100
-msgid "Select and delete multiple posts/comments at once"
+#: include/datetime.php:384
+msgid "minute"
 msgstr ""
 
-#: include/features.php:101
-msgid "Edit Sent Posts"
+#: include/datetime.php:384
+msgid "minutes"
 msgstr ""
 
-#: include/features.php:101
-msgid "Edit and correct posts and comments after sending"
+#: include/datetime.php:385
+msgid "second"
 msgstr ""
 
-#: include/features.php:102
-msgid "Tagging"
+#: include/datetime.php:385
+msgid "seconds"
 msgstr ""
 
-#: include/features.php:102
-msgid "Ability to tag existing posts"
+#: include/datetime.php:394
+#, php-format
+msgid "%1$d %2$s ago"
 msgstr ""
 
-#: include/features.php:103
-msgid "Post Categories"
+#: include/datetime.php:620
+#, php-format
+msgid "%s's birthday"
 msgstr ""
 
-#: include/features.php:103
-msgid "Add categories to your posts"
+#: include/datetime.php:621 include/dfrn.php:1252
+#, php-format
+msgid "Happy Birthday %s"
 msgstr ""
 
-#: include/features.php:104
-msgid "Ability to file posts under folders"
-msgstr ""
-
-#: include/features.php:105
-msgid "Dislike Posts"
+#: include/dba_pdo.php:72 include/dba.php:47
+#, php-format
+msgid "Cannot locate DNS info for database server '%s'"
 msgstr ""
 
-#: include/features.php:105
-msgid "Ability to dislike posts/comments"
+#: include/enotify.php:24
+msgid "Friendica Notification"
 msgstr ""
 
-#: include/features.php:106
-msgid "Star Posts"
+#: include/enotify.php:27
+msgid "Thank You,"
 msgstr ""
 
-#: include/features.php:106
-msgid "Ability to mark special posts with a star indicator"
+#: include/enotify.php:30
+#, php-format
+msgid "%s Administrator"
 msgstr ""
 
-#: include/features.php:107
-msgid "Mute Post Notifications"
+#: include/enotify.php:32
+#, php-format
+msgid "%1$s, %2$s Administrator"
 msgstr ""
 
-#: include/features.php:107
-msgid "Ability to mute notifications for a thread"
+#: include/enotify.php:70
+#, php-format
+msgid "%s <!item_type!>"
 msgstr ""
 
-#: include/features.php:112
-msgid "Advanced Profile Settings"
+#: include/enotify.php:83
+#, php-format
+msgid "[Friendica:Notify] New mail received at %s"
 msgstr ""
 
-#: include/features.php:113
-msgid "Show visitors public community forums at the Advanced Profile Page"
+#: include/enotify.php:85
+#, php-format
+msgid "%1$s sent you a new private message at %2$s."
 msgstr ""
 
-#: include/follow.php:81 mod/dfrn_request.php:512
-msgid "Disallowed profile URL."
+#: include/enotify.php:86
+#, php-format
+msgid "%1$s sent you %2$s."
 msgstr ""
 
-#: include/follow.php:86
-msgid "Connect URL missing."
+#: include/enotify.php:86
+msgid "a private message"
 msgstr ""
 
-#: include/follow.php:114
-msgid ""
-"This site is not configured to allow communications with other networks."
+#: include/enotify.php:88
+#, php-format
+msgid "Please visit %s to view and/or reply to your private messages."
 msgstr ""
 
-#: include/follow.php:115 include/follow.php:129
-msgid "No compatible communication protocols or feeds were discovered."
+#: include/enotify.php:134
+#, php-format
+msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
 msgstr ""
 
-#: include/follow.php:127
-msgid "The profile address specified does not provide adequate information."
+#: include/enotify.php:141
+#, php-format
+msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
 msgstr ""
 
-#: include/follow.php:132
-msgid "An author or name was not found."
+#: include/enotify.php:149
+#, php-format
+msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
 msgstr ""
 
-#: include/follow.php:135
-msgid "No browser URL could be matched to this address."
+#: include/enotify.php:159
+#, php-format
+msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
 msgstr ""
 
-#: include/follow.php:138
-msgid ""
-"Unable to match @-style Identity Address with a known protocol or email "
-"contact."
+#: include/enotify.php:161
+#, php-format
+msgid "%s commented on an item/conversation you have been following."
 msgstr ""
 
-#: include/follow.php:139
-msgid "Use mailto: in front of address to force email check."
+#: include/enotify.php:164 include/enotify.php:178 include/enotify.php:192
+#: include/enotify.php:206 include/enotify.php:224 include/enotify.php:238
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
 msgstr ""
 
-#: include/follow.php:145
-msgid ""
-"The profile address specified belongs to a network which has been disabled "
-"on this site."
+#: include/enotify.php:171
+#, php-format
+msgid "[Friendica:Notify] %s posted to your profile wall"
 msgstr ""
 
-#: include/follow.php:150
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
+#: include/enotify.php:173
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
 msgstr ""
 
-#: include/follow.php:251
-msgid "Unable to retrieve contact information."
+#: include/enotify.php:174
+#, php-format
+msgid "%1$s posted to [url=%2$s]your wall[/url]"
 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/enotify.php:185
+#, php-format
+msgid "[Friendica:Notify] %s tagged you"
 msgstr ""
 
-#: include/group.php:210
-msgid "Default privacy group for new contacts"
+#: include/enotify.php:187
+#, php-format
+msgid "%1$s tagged you at %2$s"
 msgstr ""
 
-#: include/group.php:243
-msgid "Everybody"
+#: include/enotify.php:188
+#, php-format
+msgid "%1$s [url=%2$s]tagged you[/url]."
 msgstr ""
 
-#: include/group.php:266
-msgid "edit"
+#: include/enotify.php:199
+#, php-format
+msgid "[Friendica:Notify] %s shared a new post"
 msgstr ""
 
-#: include/group.php:287 mod/newmember.php:61
-msgid "Groups"
+#: include/enotify.php:201
+#, php-format
+msgid "%1$s shared a new post at %2$s"
 msgstr ""
 
-#: include/group.php:289
-msgid "Edit groups"
+#: include/enotify.php:202
+#, php-format
+msgid "%1$s [url=%2$s]shared a post[/url]."
 msgstr ""
 
-#: include/group.php:291
-msgid "Edit group"
+#: include/enotify.php:213
+#, php-format
+msgid "[Friendica:Notify] %1$s poked you"
 msgstr ""
 
-#: include/group.php:292
-msgid "Create a new group"
+#: include/enotify.php:215
+#, php-format
+msgid "%1$s poked you at %2$s"
 msgstr ""
 
-#: include/group.php:293 mod/group.php:98 mod/group.php:188
-msgid "Group Name: "
+#: include/enotify.php:216
+#, php-format
+msgid "%1$s [url=%2$s]poked you[/url]."
 msgstr ""
 
-#: include/group.php:295
-msgid "Contacts not in any group"
+#: include/enotify.php:231
+#, php-format
+msgid "[Friendica:Notify] %s tagged your post"
 msgstr ""
 
-#: include/group.php:297 mod/network.php:200
-msgid "add"
+#: include/enotify.php:233
+#, php-format
+msgid "%1$s tagged your post at %2$s"
 msgstr ""
 
-#: include/identity.php:43
-msgid "Requested account is not available."
+#: include/enotify.php:234
+#, php-format
+msgid "%1$s tagged [url=%2$s]your post[/url]"
 msgstr ""
 
-#: include/identity.php:52 mod/profile.php:21
-msgid "Requested profile is not available."
+#: include/enotify.php:245
+msgid "[Friendica:Notify] Introduction received"
 msgstr ""
 
-#: include/identity.php:96 include/identity.php:314 include/identity.php:737
-msgid "Edit profile"
+#: include/enotify.php:247
+#, php-format
+msgid "You've received an introduction from '%1$s' at %2$s"
 msgstr ""
 
-#: include/identity.php:254
-msgid "Atom feed"
+#: include/enotify.php:248
+#, php-format
+msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
 msgstr ""
 
-#: include/identity.php:285 include/nav.php:189
-msgid "Profiles"
+#: include/enotify.php:252 include/enotify.php:295
+#, php-format
+msgid "You may visit their profile at %s"
 msgstr ""
 
-#: include/identity.php:285
-msgid "Manage/edit profiles"
+#: include/enotify.php:254
+#, php-format
+msgid "Please visit %s to approve or reject the introduction."
 msgstr ""
 
-#: include/identity.php:290 include/identity.php:316 mod/profiles.php:789
-msgid "Change profile photo"
+#: include/enotify.php:262
+msgid "[Friendica:Notify] A new person is sharing with you"
 msgstr ""
 
-#: include/identity.php:291 mod/profiles.php:790
-msgid "Create New Profile"
+#: include/enotify.php:264 include/enotify.php:265
+#, php-format
+msgid "%1$s is sharing with you at %2$s"
 msgstr ""
 
-#: include/identity.php:301 mod/profiles.php:779
-msgid "Profile Image"
+#: include/enotify.php:271
+msgid "[Friendica:Notify] You have a new follower"
 msgstr ""
 
-#: include/identity.php:304 mod/profiles.php:781
-msgid "visible to everybody"
+#: include/enotify.php:273 include/enotify.php:274
+#, php-format
+msgid "You have a new follower at %2$s : %1$s"
 msgstr ""
 
-#: include/identity.php:305 mod/profiles.php:683 mod/profiles.php:782
-msgid "Edit visibility"
+#: include/enotify.php:285
+msgid "[Friendica:Notify] Friend suggestion received"
 msgstr ""
 
-#: include/identity.php:333 include/identity.php:628 mod/directory.php:141
-#: mod/notifications.php:244
-msgid "Gender:"
+#: include/enotify.php:287
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
 msgstr ""
 
-#: include/identity.php:336 include/identity.php:648 mod/directory.php:143
-msgid "Status:"
+#: include/enotify.php:288
+#, php-format
+msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
 msgstr ""
 
-#: include/identity.php:338 include/identity.php:664 mod/directory.php:145
-msgid "Homepage:"
+#: include/enotify.php:293
+msgid "Name:"
 msgstr ""
 
-#: include/identity.php:340 include/identity.php:684 mod/contacts.php:640
-#: mod/directory.php:147 mod/notifications.php:240
-msgid "About:"
+#: include/enotify.php:294
+msgid "Photo:"
 msgstr ""
 
-#: include/identity.php:342 mod/contacts.php:638
-msgid "XMPP:"
+#: include/enotify.php:297
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
 msgstr ""
 
-#: include/identity.php:428 mod/contacts.php:55 mod/notifications.php:252
-msgid "Network:"
+#: include/enotify.php:305 include/enotify.php:319
+msgid "[Friendica:Notify] Connection accepted"
 msgstr ""
 
-#: include/identity.php:457 include/identity.php:547
-msgid "g A l F d"
+#: include/enotify.php:307 include/enotify.php:321
+#, php-format
+msgid "'%1$s' has accepted your connection request at %2$s"
 msgstr ""
 
-#: include/identity.php:458 include/identity.php:548
-msgid "F d"
+#: include/enotify.php:308 include/enotify.php:322
+#, php-format
+msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
 msgstr ""
 
-#: include/identity.php:509 include/identity.php:594
-msgid "[today]"
+#: include/enotify.php:312
+msgid ""
+"You are now mutual friends and may exchange status updates, photos, and "
+"email without restriction."
 msgstr ""
 
-#: include/identity.php:521
-msgid "Birthday Reminders"
+#: include/enotify.php:314
+#, php-format
+msgid "Please visit %s if you wish to make any changes to this relationship."
 msgstr ""
 
-#: include/identity.php:522
-msgid "Birthdays this week:"
+#: include/enotify.php:326
+#, php-format
+msgid ""
+"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
+"communication - such as private messaging and some profile interactions. If "
+"this is a celebrity or community page, these settings were applied "
+"automatically."
 msgstr ""
 
-#: include/identity.php:581
-msgid "[No description]"
+#: include/enotify.php:328
+#, php-format
+msgid ""
+"'%1$s' may choose to extend this into a two-way or more permissive "
+"relationship in the future."
 msgstr ""
 
-#: include/identity.php:605
-msgid "Event Reminders"
+#: include/enotify.php:330
+#, php-format
+msgid "Please visit %s  if you wish to make any changes to this relationship."
 msgstr ""
 
-#: include/identity.php:606
-msgid "Events this week:"
+#: include/enotify.php:340
+msgid "[Friendica System:Notify] registration request"
 msgstr ""
 
-#: include/identity.php:617 include/identity.php:741 include/identity.php:774
-#: include/nav.php:82 mod/contacts.php:647 mod/contacts.php:849
-#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247
-msgid "Profile"
+#: include/enotify.php:342
+#, php-format
+msgid "You've received a registration request from '%1$s' at %2$s"
 msgstr ""
 
-#: include/identity.php:626 mod/settings.php:1286
-msgid "Full Name:"
+#: include/enotify.php:343
+#, php-format
+msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
 msgstr ""
 
-#: include/identity.php:633
-msgid "j F, Y"
+#: include/enotify.php:347
+#, php-format
+msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
 msgstr ""
 
-#: include/identity.php:634
-msgid "j F"
+#: include/enotify.php:350
+#, php-format
+msgid "Please visit %s to approve or reject the request."
 msgstr ""
 
-#: include/identity.php:645
-msgid "Age:"
+#: include/event.php:474
+msgid "all-day"
 msgstr ""
 
-#: include/identity.php:656
-#, php-format
-msgid "for %1$d %2$s"
+#: include/event.php:476
+msgid "Sun"
 msgstr ""
 
-#: include/identity.php:660 mod/profiles.php:702
-msgid "Sexual Preference:"
+#: include/event.php:477
+msgid "Mon"
 msgstr ""
 
-#: include/identity.php:668 mod/profiles.php:729
-msgid "Hometown:"
+#: include/event.php:478
+msgid "Tue"
 msgstr ""
 
-#: include/identity.php:672 mod/contacts.php:642 mod/follow.php:137
-#: mod/notifications.php:242
-msgid "Tags:"
+#: include/event.php:479
+msgid "Wed"
 msgstr ""
 
-#: include/identity.php:676 mod/profiles.php:730
-msgid "Political Views:"
+#: include/event.php:480
+msgid "Thu"
 msgstr ""
 
-#: include/identity.php:680
-msgid "Religion:"
+#: include/event.php:481
+msgid "Fri"
 msgstr ""
 
-#: include/identity.php:688
-msgid "Hobbies/Interests:"
+#: include/event.php:482
+msgid "Sat"
 msgstr ""
 
-#: include/identity.php:692 mod/profiles.php:734
-msgid "Likes:"
+#: include/event.php:484 include/text.php:1198 mod/settings.php:981
+msgid "Sunday"
 msgstr ""
 
-#: include/identity.php:696 mod/profiles.php:735
-msgid "Dislikes:"
+#: include/event.php:485 include/text.php:1198 mod/settings.php:981
+msgid "Monday"
 msgstr ""
 
-#: include/identity.php:700
-msgid "Contact information and Social Networks:"
+#: include/event.php:486 include/text.php:1198
+msgid "Tuesday"
 msgstr ""
 
-#: include/identity.php:704
-msgid "Musical interests:"
+#: include/event.php:487 include/text.php:1198
+msgid "Wednesday"
 msgstr ""
 
-#: include/identity.php:708
-msgid "Books, literature:"
+#: include/event.php:488 include/text.php:1198
+msgid "Thursday"
 msgstr ""
 
-#: include/identity.php:712
-msgid "Television:"
+#: include/event.php:489 include/text.php:1198
+msgid "Friday"
 msgstr ""
 
-#: include/identity.php:716
-msgid "Film/dance/culture/entertainment:"
+#: include/event.php:490 include/text.php:1198
+msgid "Saturday"
 msgstr ""
 
-#: include/identity.php:720
-msgid "Love/Romance:"
+#: include/event.php:492
+msgid "Jan"
 msgstr ""
 
-#: include/identity.php:724
-msgid "Work/employment:"
+#: include/event.php:493
+msgid "Feb"
 msgstr ""
 
-#: include/identity.php:728
-msgid "School/education:"
+#: include/event.php:494
+msgid "Mar"
 msgstr ""
 
-#: include/identity.php:733
-msgid "Forums:"
+#: include/event.php:495
+msgid "Apr"
 msgstr ""
 
-#: include/identity.php:742 mod/events.php:514
-msgid "Basic"
+#: include/event.php:496 include/event.php:509 include/text.php:1202
+msgid "May"
 msgstr ""
 
-#: include/identity.php:743 mod/admin.php:972 mod/contacts.php:878
-#: mod/events.php:515
-msgid "Advanced"
+#: include/event.php:497
+msgid "Jun"
 msgstr ""
 
-#: include/identity.php:766 include/nav.php:81 mod/contacts.php:645
-#: mod/contacts.php:841 view/theme/frio/theme.php:246
-msgid "Status"
+#: include/event.php:498
+msgid "Jul"
 msgstr ""
 
-#: include/identity.php:769 mod/contacts.php:844 mod/follow.php:145
-msgid "Status Messages and Posts"
+#: include/event.php:499
+msgid "Aug"
 msgstr ""
 
-#: include/identity.php:777 mod/contacts.php:852
-msgid "Profile Details"
+#: include/event.php:500
+msgid "Sept"
 msgstr ""
 
-#: include/identity.php:782 include/nav.php:83 mod/fbrowser.php:31
-#: view/theme/frio/theme.php:248
-msgid "Photos"
+#: include/event.php:501
+msgid "Oct"
 msgstr ""
 
-#: include/identity.php:785 mod/photos.php:89
-msgid "Photo Albums"
+#: include/event.php:502
+msgid "Nov"
 msgstr ""
 
-#: include/identity.php:790 include/identity.php:793 include/nav.php:84
-#: view/theme/frio/theme.php:249
-msgid "Videos"
+#: include/event.php:503
+msgid "Dec"
 msgstr ""
 
-#: include/identity.php:802 include/identity.php:813 include/nav.php:85
-#: include/nav.php:149 mod/cal.php:270 mod/events.php:386
-#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254
-msgid "Events"
+#: include/event.php:505 include/text.php:1202
+msgid "January"
 msgstr ""
 
-#: include/identity.php:805 include/identity.php:816 include/nav.php:149
-#: view/theme/frio/theme.php:254
-msgid "Events and Calendar"
+#: include/event.php:506 include/text.php:1202
+msgid "February"
 msgstr ""
 
-#: include/identity.php:824 mod/notes.php:47
-msgid "Personal Notes"
+#: include/event.php:507 include/text.php:1202
+msgid "March"
 msgstr ""
 
-#: include/identity.php:827
-msgid "Only You Can See This"
+#: include/event.php:508 include/text.php:1202
+msgid "April"
 msgstr ""
 
-#: include/identity.php:835 include/identity.php:838 include/nav.php:128
-#: include/nav.php:192 include/text.php:1024 mod/contacts.php:800
-#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257
-msgid "Contacts"
+#: include/event.php:510 include/text.php:1202
+msgid "June"
 msgstr ""
 
-#: include/items.php:1584 mod/dfrn_confirm.php:735 mod/dfrn_request.php:754
-msgid "[Name Withheld]"
+#: include/event.php:511 include/text.php:1202
+msgid "July"
 msgstr ""
 
-#: include/items.php:1939 mod/admin.php:240 mod/admin.php:1480
-#: mod/admin.php:1731 mod/display.php:103 mod/display.php:279
-#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15
-msgid "Item not found."
+#: include/event.php:512 include/text.php:1202
+msgid "August"
 msgstr ""
 
-#: include/items.php:1978
-msgid "Do you really want to delete this item?"
+#: include/event.php:513 include/text.php:1202
+msgid "September"
 msgstr ""
 
-#: include/items.php:1980 mod/api.php:105 mod/contacts.php:452
-#: mod/dfrn_request.php:875 mod/follow.php:113 mod/message.php:206
-#: mod/profiles.php:640 mod/profiles.php:643 mod/profiles.php:669
-#: mod/register.php:245 mod/settings.php:1171 mod/settings.php:1177
-#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193
-#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208
-#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236
-#: mod/settings.php:1237 mod/settings.php:1238 mod/suggest.php:29
-msgid "Yes"
+#: include/event.php:514 include/text.php:1202
+msgid "October"
 msgstr ""
 
-#: include/items.php:2143 index.php:407 mod/allfriends.php:12 mod/api.php:26
-#: mod/api.php:31 mod/attach.php:33 mod/cal.php:299 mod/common.php:18
-#: mod/contacts.php:360 mod/crepair.php:102 mod/delegate.php:12
-#: mod/dfrn_confirm.php:61 mod/dirfind.php:11 mod/display.php:481
-#: mod/editpost.php:10 mod/events.php:195 mod/follow.php:11 mod/follow.php:74
-#: mod/follow.php:158 mod/fsuggest.php:79 mod/group.php:19 mod/invite.php:15
-#: mod/invite.php:103 mod/item.php:193 mod/item.php:205 mod/manage.php:98
-#: mod/message.php:46 mod/message.php:171 mod/mood.php:115 mod/network.php:4
-#: mod/nogroup.php:27 mod/notes.php:23 mod/notifications.php:71
-#: mod/ostatus_subscribe.php:9 mod/photos.php:161 mod/photos.php:1092
-#: mod/poke.php:154 mod/profile_photo.php:19 mod/profile_photo.php:180
-#: mod/profile_photo.php:191 mod/profile_photo.php:204 mod/profiles.php:166
-#: mod/profiles.php:607 mod/register.php:42 mod/regmod.php:113
-#: mod/repair_ostatus.php:9 mod/settings.php:22 mod/settings.php:130
-#: mod/settings.php:668 mod/suggest.php:58 mod/uimport.php:24
-#: mod/viewcontacts.php:46 mod/wall_attach.php:67 mod/wall_attach.php:70
-#: mod/wall_upload.php:77 mod/wall_upload.php:80 mod/wallmessage.php:9
-#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97
-msgid "Permission denied."
+#: include/event.php:515 include/text.php:1202
+msgid "November"
 msgstr ""
 
-#: include/items.php:2248
-msgid "Archives"
+#: include/event.php:516 include/text.php:1202
+msgid "December"
 msgstr ""
 
-#: include/like.php:41
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
+#: include/event.php:518 mod/cal.php:278 mod/events.php:383
+msgid "today"
 msgstr ""
 
-#: include/like.php:46
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
+#: include/event.php:523
+msgid "No events to display"
 msgstr ""
 
-#: include/like.php:51
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
+#: include/event.php:636
+msgid "l, F j"
 msgstr ""
 
-#: include/message.php:15 include/message.php:169
-msgid "[no subject]"
+#: include/event.php:658
+msgid "Edit event"
 msgstr ""
 
-#: include/nav.php:35 mod/navigation.php:19
-msgid "Nothing new here"
+#: include/event.php:659
+msgid "Delete event"
 msgstr ""
 
-#: include/nav.php:39 mod/navigation.php:23
-msgid "Clear notifications"
+#: include/event.php:685 include/text.php:1600 include/text.php:1607
+msgid "link to source"
 msgstr ""
 
-#: include/nav.php:40 include/text.php:1017
-msgid "@name, !forum, #tags, content"
+#: include/event.php:939
+msgid "Export"
 msgstr ""
 
-#: include/nav.php:78 view/theme/frio/theme.php:243
-msgid "End this session"
+#: include/event.php:940
+msgid "Export calendar as ical"
 msgstr ""
 
-#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246
-msgid "Your posts and conversations"
+#: include/event.php:941
+msgid "Export calendar as csv"
 msgstr ""
 
-#: include/nav.php:82 view/theme/frio/theme.php:247
-msgid "Your profile page"
+#: include/features.php:65
+msgid "General Features"
 msgstr ""
 
-#: include/nav.php:83 view/theme/frio/theme.php:248
-msgid "Your photos"
+#: include/features.php:67
+msgid "Multiple Profiles"
 msgstr ""
 
-#: include/nav.php:84 view/theme/frio/theme.php:249
-msgid "Your videos"
+#: include/features.php:67
+msgid "Ability to create multiple profiles"
 msgstr ""
 
-#: include/nav.php:85 view/theme/frio/theme.php:250
-msgid "Your events"
+#: include/features.php:68
+msgid "Photo Location"
 msgstr ""
 
-#: include/nav.php:86
-msgid "Personal notes"
+#: include/features.php:68
+msgid ""
+"Photo metadata is normally stripped. This extracts the location (if present) "
+"prior to stripping metadata and links it to a map."
 msgstr ""
 
-#: include/nav.php:86
-msgid "Your personal notes"
+#: include/features.php:69
+msgid "Export Public Calendar"
 msgstr ""
 
-#: include/nav.php:95
-msgid "Sign in"
+#: include/features.php:69
+msgid "Ability for visitors to download the public calendar"
 msgstr ""
 
-#: include/nav.php:105
-msgid "Home Page"
+#: include/features.php:74
+msgid "Post Composition Features"
 msgstr ""
 
-#: include/nav.php:109
-msgid "Create an account"
+#: include/features.php:75
+msgid "Post Preview"
 msgstr ""
 
-#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:293
-msgid "Help"
+#: include/features.php:75
+msgid "Allow previewing posts and comments before publishing them"
 msgstr ""
 
-#: include/nav.php:115
-msgid "Help and documentation"
+#: include/features.php:76
+msgid "Auto-mention Forums"
 msgstr ""
 
-#: include/nav.php:119
-msgid "Apps"
+#: include/features.php:76
+msgid ""
+"Add/remove mention when a forum page is selected/deselected in ACL window."
 msgstr ""
 
-#: include/nav.php:119
-msgid "Addon applications, utilities, games"
+#: include/features.php:81
+msgid "Network Sidebar Widgets"
 msgstr ""
 
-#: include/nav.php:123 include/text.php:1014 mod/search.php:149
-msgid "Search"
+#: include/features.php:82
+msgid "Search by Date"
 msgstr ""
 
-#: include/nav.php:123
-msgid "Search site content"
+#: include/features.php:82
+msgid "Ability to select posts by date ranges"
 msgstr ""
 
-#: include/nav.php:126 include/text.php:1022
-msgid "Full Text"
+#: include/features.php:83 include/features.php:113
+msgid "List Forums"
 msgstr ""
 
-#: include/nav.php:127 include/text.php:1023
-msgid "Tags"
+#: include/features.php:83
+msgid "Enable widget to display the forums your are connected with"
 msgstr ""
 
-#: include/nav.php:143 include/nav.php:145 mod/community.php:36
-msgid "Community"
+#: include/features.php:84
+msgid "Group Filter"
 msgstr ""
 
-#: include/nav.php:143
-msgid "Conversations on this site"
+#: include/features.php:84
+msgid "Enable widget to display Network posts only from selected group"
 msgstr ""
 
-#: include/nav.php:145
-msgid "Conversations on the network"
+#: include/features.php:85
+msgid "Network Filter"
 msgstr ""
 
-#: include/nav.php:152
-msgid "Directory"
+#: include/features.php:85
+msgid "Enable widget to display Network posts only from selected network"
 msgstr ""
 
-#: include/nav.php:152
-msgid "People directory"
+#: include/features.php:86 mod/network.php:206 mod/search.php:34
+msgid "Saved Searches"
 msgstr ""
 
-#: include/nav.php:154
-msgid "Information"
+#: include/features.php:86
+msgid "Save search terms for re-use"
 msgstr ""
 
-#: include/nav.php:154
-msgid "Information about this friendica instance"
+#: include/features.php:91
+msgid "Network Tabs"
 msgstr ""
 
-#: include/nav.php:158 view/theme/frio/theme.php:253
-msgid "Conversations from your friends"
+#: include/features.php:92
+msgid "Network Personal Tab"
 msgstr ""
 
-#: include/nav.php:159
-msgid "Network Reset"
+#: include/features.php:92
+msgid "Enable tab to display only Network posts that you've interacted on"
 msgstr ""
 
-#: include/nav.php:159
-msgid "Load Network page with no filters"
+#: include/features.php:93
+msgid "Network New Tab"
 msgstr ""
 
-#: include/nav.php:166
-msgid "Friend Requests"
+#: include/features.php:93
+msgid "Enable tab to display only new Network posts (from the last 12 hours)"
 msgstr ""
 
-#: include/nav.php:169 mod/notifications.php:96
-msgid "Notifications"
+#: include/features.php:94
+msgid "Network Shared Links Tab"
 msgstr ""
 
-#: include/nav.php:170
-msgid "See all notifications"
+#: include/features.php:94
+msgid "Enable tab to display only Network posts with links in them"
 msgstr ""
 
-#: include/nav.php:171 mod/settings.php:906
-msgid "Mark as seen"
+#: include/features.php:99
+msgid "Post/Comment Tools"
 msgstr ""
 
-#: include/nav.php:171
-msgid "Mark all system notifications seen"
-msgstr ""
+#: include/features.php:100
+msgid "Multiple Deletion"
+msgstr ""
 
-#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255
-msgid "Messages"
+#: include/features.php:100
+msgid "Select and delete multiple posts/comments at once"
 msgstr ""
 
-#: include/nav.php:175 view/theme/frio/theme.php:255
-msgid "Private mail"
+#: include/features.php:101
+msgid "Edit Sent Posts"
 msgstr ""
 
-#: include/nav.php:176
-msgid "Inbox"
+#: include/features.php:101
+msgid "Edit and correct posts and comments after sending"
 msgstr ""
 
-#: include/nav.php:177
-msgid "Outbox"
+#: include/features.php:102
+msgid "Tagging"
 msgstr ""
 
-#: include/nav.php:178 mod/message.php:16
-msgid "New Message"
+#: include/features.php:102
+msgid "Ability to tag existing posts"
 msgstr ""
 
-#: include/nav.php:181
-msgid "Manage"
+#: include/features.php:103
+msgid "Post Categories"
 msgstr ""
 
-#: include/nav.php:181
-msgid "Manage other pages"
+#: include/features.php:103
+msgid "Add categories to your posts"
 msgstr ""
 
-#: include/nav.php:184 mod/settings.php:81
-msgid "Delegations"
+#: include/features.php:104
+msgid "Ability to file posts under folders"
 msgstr ""
 
-#: include/nav.php:184 mod/delegate.php:130
-msgid "Delegate Page Management"
+#: include/features.php:105
+msgid "Dislike Posts"
 msgstr ""
 
-#: include/nav.php:186 mod/admin.php:1533 mod/admin.php:1809
-#: mod/newmember.php:22 mod/settings.php:111 view/theme/frio/theme.php:256
-msgid "Settings"
+#: include/features.php:105
+msgid "Ability to dislike posts/comments"
 msgstr ""
 
-#: include/nav.php:186 view/theme/frio/theme.php:256
-msgid "Account settings"
+#: include/features.php:106
+msgid "Star Posts"
 msgstr ""
 
-#: include/nav.php:189
-msgid "Manage/Edit Profiles"
+#: include/features.php:106
+msgid "Ability to mark special posts with a star indicator"
 msgstr ""
 
-#: include/nav.php:192 view/theme/frio/theme.php:257
-msgid "Manage/edit friends and contacts"
+#: include/features.php:107
+msgid "Mute Post Notifications"
 msgstr ""
 
-#: include/nav.php:197 mod/admin.php:192
-msgid "Admin"
+#: include/features.php:107
+msgid "Ability to mute notifications for a thread"
 msgstr ""
 
-#: include/nav.php:197
-msgid "Site setup and configuration"
+#: include/features.php:112
+msgid "Advanced Profile Settings"
 msgstr ""
 
-#: include/nav.php:200
-msgid "Navigation"
+#: include/features.php:113
+msgid "Show visitors public community forums at the Advanced Profile Page"
 msgstr ""
 
-#: include/nav.php:200
-msgid "Site map"
+#: include/follow.php:81 mod/dfrn_request.php:512
+msgid "Disallowed profile URL."
 msgstr ""
 
-#: include/network.php:622
-msgid "view full size"
+#: include/follow.php:86 mod/dfrn_request.php:518 mod/friendica.php:114
+#: mod/admin.php:279 mod/admin.php:297
+msgid "Blocked domain"
 msgstr ""
 
-#: include/oembed.php:266
-msgid "Embedded content"
+#: include/follow.php:91
+msgid "Connect URL missing."
 msgstr ""
 
-#: include/oembed.php:274
-msgid "Embedding disabled"
+#: include/follow.php:119
+msgid ""
+"This site is not configured to allow communications with other networks."
 msgstr ""
 
-#: include/ostatus.php:1832
-#, php-format
-msgid "%s is now following %s."
+#: include/follow.php:120 include/follow.php:134
+msgid "No compatible communication protocols or feeds were discovered."
 msgstr ""
 
-#: include/ostatus.php:1833
-msgid "following"
+#: include/follow.php:132
+msgid "The profile address specified does not provide adequate information."
 msgstr ""
 
-#: include/ostatus.php:1836
-#, php-format
-msgid "%s stopped following %s."
+#: include/follow.php:137
+msgid "An author or name was not found."
 msgstr ""
 
-#: include/ostatus.php:1837
-msgid "stopped following"
+#: include/follow.php:140
+msgid "No browser URL could be matched to this address."
 msgstr ""
 
-#: include/photos.php:57 include/photos.php:67 mod/fbrowser.php:40
-#: mod/fbrowser.php:61 mod/photos.php:182 mod/photos.php:1106
-#: mod/photos.php:1231 mod/photos.php:1252 mod/photos.php:1817
-#: mod/photos.php:1829
-msgid "Contact Photos"
+#: include/follow.php:143
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
 msgstr ""
 
-#: include/plugin.php:530 include/plugin.php:532
-msgid "Click here to upgrade."
+#: include/follow.php:144
+msgid "Use mailto: in front of address to force email check."
 msgstr ""
 
-#: include/plugin.php:538
-msgid "This action exceeds the limits set by your subscription plan."
+#: include/follow.php:150
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
 msgstr ""
 
-#: include/plugin.php:543
-msgid "This action is not available under your subscription plan."
+#: include/follow.php:155
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Male"
+#: include/follow.php:256
+msgid "Unable to retrieve contact information."
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Female"
+#: 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/profile_selectors.php:6
-msgid "Currently Male"
+#: include/group.php:210
+msgid "Default privacy group for new contacts"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Currently Female"
+#: include/group.php:243
+msgid "Everybody"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Mostly Male"
+#: include/group.php:266
+msgid "edit"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Mostly Female"
+#: include/group.php:287 mod/newmember.php:61
+msgid "Groups"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Transgender"
+#: include/group.php:289
+msgid "Edit groups"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Intersex"
+#: include/group.php:291
+msgid "Edit group"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Transsexual"
+#: include/group.php:292
+msgid "Create a new group"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Hermaphrodite"
+#: include/group.php:293 mod/group.php:99 mod/group.php:196
+msgid "Group Name: "
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Neuter"
+#: include/group.php:295
+msgid "Contacts not in any group"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Non-specific"
+#: include/group.php:297 mod/network.php:207
+msgid "add"
 msgstr ""
 
-#: include/profile_selectors.php:6
-msgid "Other"
+#: include/identity.php:43
+msgid "Requested account is not available."
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Males"
+#: include/identity.php:52 mod/profile.php:21
+msgid "Requested profile is not available."
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Females"
+#: include/identity.php:96 include/identity.php:319 include/identity.php:740
+msgid "Edit profile"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Gay"
+#: include/identity.php:259
+msgid "Atom feed"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Lesbian"
+#: include/identity.php:290
+msgid "Manage/edit profiles"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "No Preference"
+#: include/identity.php:295 include/identity.php:321 mod/profiles.php:787
+msgid "Change profile photo"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Bisexual"
+#: include/identity.php:296 mod/profiles.php:788
+msgid "Create New Profile"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Autosexual"
+#: include/identity.php:306 mod/profiles.php:777
+msgid "Profile Image"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Abstinent"
+#: include/identity.php:309 mod/profiles.php:779
+msgid "visible to everybody"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Virgin"
+#: include/identity.php:310 mod/profiles.php:684 mod/profiles.php:780
+msgid "Edit visibility"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Deviant"
+#: include/identity.php:338 include/identity.php:633 mod/directory.php:141
+#: mod/notifications.php:250
+msgid "Gender:"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Fetish"
+#: include/identity.php:341 include/identity.php:651 mod/directory.php:143
+msgid "Status:"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Oodles"
+#: include/identity.php:343 include/identity.php:667 mod/directory.php:145
+msgid "Homepage:"
 msgstr ""
 
-#: include/profile_selectors.php:23
-msgid "Nonsexual"
+#: include/identity.php:345 include/identity.php:687 mod/contacts.php:640
+#: mod/directory.php:147 mod/notifications.php:246
+msgid "About:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Single"
+#: include/identity.php:347 mod/contacts.php:638
+msgid "XMPP:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Lonely"
+#: include/identity.php:433 mod/contacts.php:55 mod/notifications.php:258
+msgid "Network:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Available"
+#: include/identity.php:462 include/identity.php:552
+msgid "g A l F d"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Unavailable"
+#: include/identity.php:463 include/identity.php:553
+msgid "F d"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Has crush"
+#: include/identity.php:514 include/identity.php:599
+msgid "[today]"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Infatuated"
+#: include/identity.php:526
+msgid "Birthday Reminders"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Dating"
+#: include/identity.php:527
+msgid "Birthdays this week:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Unfaithful"
+#: include/identity.php:586
+msgid "[No description]"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Sex Addict"
+#: include/identity.php:610
+msgid "Event Reminders"
 msgstr ""
 
-#: include/profile_selectors.php:42 include/user.php:280 include/user.php:284
-msgid "Friends"
+#: include/identity.php:611
+msgid "Events this week:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Friends/Benefits"
+#: include/identity.php:631 mod/settings.php:1286
+msgid "Full Name:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Casual"
+#: include/identity.php:636
+msgid "j F, Y"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Engaged"
+#: include/identity.php:637
+msgid "j F"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Married"
+#: include/identity.php:648
+msgid "Age:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Imaginarily married"
+#: include/identity.php:659
+#, php-format
+msgid "for %1$d %2$s"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Partners"
+#: include/identity.php:663 mod/profiles.php:703
+msgid "Sexual Preference:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Cohabiting"
+#: include/identity.php:671 mod/profiles.php:730
+msgid "Hometown:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Common law"
+#: include/identity.php:675 mod/contacts.php:642 mod/follow.php:137
+#: mod/notifications.php:248
+msgid "Tags:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Happy"
+#: include/identity.php:679 mod/profiles.php:731
+msgid "Political Views:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Not looking"
+#: include/identity.php:683
+msgid "Religion:"
 msgstr ""
 
-#: include/profile_selectors.php:42
-msgid "Swinger"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Betrayed"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Separated"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Unstable"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Divorced"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Imaginarily divorced"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Widowed"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Uncertain"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "It's complicated"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Don't care"
-msgstr ""
-
-#: include/profile_selectors.php:42
-msgid "Ask me"
-msgstr ""
-
-#: include/security.php:61
-msgid "Welcome "
-msgstr ""
-
-#: include/security.php:62
-msgid "Please upload a profile photo."
-msgstr ""
-
-#: include/security.php:65
-msgid "Welcome back "
-msgstr ""
-
-#: include/security.php:429
-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:307
-msgid "newer"
-msgstr ""
-
-#: include/text.php:308
-msgid "older"
-msgstr ""
-
-#: include/text.php:313
-msgid "first"
-msgstr ""
-
-#: include/text.php:314
-msgid "prev"
-msgstr ""
-
-#: include/text.php:348
-msgid "next"
-msgstr ""
-
-#: include/text.php:349
-msgid "last"
-msgstr ""
-
-#: include/text.php:403
-msgid "Loading more entries..."
-msgstr ""
-
-#: include/text.php:404
-msgid "The end"
-msgstr ""
-
-#: include/text.php:889
-msgid "No contacts"
-msgstr ""
-
-#: include/text.php:914
-#, php-format
-msgid "%d Contact"
-msgid_plural "%d Contacts"
-msgstr[0] ""
-msgstr[1] ""
-
-#: include/text.php:927
-msgid "View Contacts"
-msgstr ""
-
-#: include/text.php:1015 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62
-msgid "Save"
-msgstr ""
-
-#: include/text.php:1078
-msgid "poke"
-msgstr ""
-
-#: include/text.php:1078
-msgid "poked"
-msgstr ""
-
-#: include/text.php:1079
-msgid "ping"
-msgstr ""
-
-#: include/text.php:1079
-msgid "pinged"
-msgstr ""
-
-#: include/text.php:1080
-msgid "prod"
-msgstr ""
-
-#: include/text.php:1080
-msgid "prodded"
-msgstr ""
-
-#: include/text.php:1081
-msgid "slap"
-msgstr ""
-
-#: include/text.php:1081
-msgid "slapped"
-msgstr ""
-
-#: include/text.php:1082
-msgid "finger"
-msgstr ""
-
-#: include/text.php:1082
-msgid "fingered"
-msgstr ""
-
-#: include/text.php:1083
-msgid "rebuff"
-msgstr ""
-
-#: include/text.php:1083
-msgid "rebuffed"
-msgstr ""
-
-#: include/text.php:1097
-msgid "happy"
-msgstr ""
-
-#: include/text.php:1098
-msgid "sad"
-msgstr ""
-
-#: include/text.php:1099
-msgid "mellow"
-msgstr ""
-
-#: include/text.php:1100
-msgid "tired"
-msgstr ""
-
-#: include/text.php:1101
-msgid "perky"
-msgstr ""
-
-#: include/text.php:1102
-msgid "angry"
-msgstr ""
-
-#: include/text.php:1103
-msgid "stupified"
-msgstr ""
-
-#: include/text.php:1104
-msgid "puzzled"
-msgstr ""
-
-#: include/text.php:1105
-msgid "interested"
-msgstr ""
-
-#: include/text.php:1106
-msgid "bitter"
-msgstr ""
-
-#: include/text.php:1107
-msgid "cheerful"
-msgstr ""
-
-#: include/text.php:1108
-msgid "alive"
-msgstr ""
-
-#: include/text.php:1109
-msgid "annoyed"
+#: include/identity.php:691
+msgid "Hobbies/Interests:"
 msgstr ""
 
-#: include/text.php:1110
-msgid "anxious"
+#: include/identity.php:695 mod/profiles.php:735
+msgid "Likes:"
 msgstr ""
 
-#: include/text.php:1111
-msgid "cranky"
+#: include/identity.php:699 mod/profiles.php:736
+msgid "Dislikes:"
 msgstr ""
 
-#: include/text.php:1112
-msgid "disturbed"
+#: include/identity.php:703
+msgid "Contact information and Social Networks:"
 msgstr ""
 
-#: include/text.php:1113
-msgid "frustrated"
+#: include/identity.php:707
+msgid "Musical interests:"
 msgstr ""
 
-#: include/text.php:1114
-msgid "motivated"
+#: include/identity.php:711
+msgid "Books, literature:"
 msgstr ""
 
-#: include/text.php:1115
-msgid "relaxed"
+#: include/identity.php:715
+msgid "Television:"
 msgstr ""
 
-#: include/text.php:1116
-msgid "surprised"
+#: include/identity.php:719
+msgid "Film/dance/culture/entertainment:"
 msgstr ""
 
-#: include/text.php:1326 mod/videos.php:384
-msgid "View Video"
+#: include/identity.php:723
+msgid "Love/Romance:"
 msgstr ""
 
-#: include/text.php:1358
-msgid "bytes"
+#: include/identity.php:727
+msgid "Work/employment:"
 msgstr ""
 
-#: include/text.php:1390 include/text.php:1402
-msgid "Click to open/close"
+#: include/identity.php:731
+msgid "School/education:"
 msgstr ""
 
-#: include/text.php:1528
-msgid "View on separate page"
+#: include/identity.php:736
+msgid "Forums:"
 msgstr ""
 
-#: include/text.php:1529
-msgid "view on separate page"
+#: include/identity.php:745 mod/events.php:506
+msgid "Basic"
 msgstr ""
 
-#: include/text.php:1808
-msgid "activity"
+#: include/identity.php:746 mod/contacts.php:878 mod/events.php:507
+#: mod/admin.php:1059
+msgid "Advanced"
 msgstr ""
 
-#: include/text.php:1810 mod/content.php:623 object/Item.php:419
-#: object/Item.php:431
-msgid "comment"
-msgid_plural "comments"
-msgstr[0] ""
-msgstr[1] ""
-
-#: include/text.php:1811
-msgid "post"
+#: include/identity.php:772 mod/contacts.php:844 mod/follow.php:145
+msgid "Status Messages and Posts"
 msgstr ""
 
-#: include/text.php:1979
-msgid "Item filed"
+#: include/identity.php:780 mod/contacts.php:852
+msgid "Profile Details"
 msgstr ""
 
-#: include/uimport.php:91
-msgid "Error decoding account file"
+#: include/identity.php:788 mod/photos.php:93
+msgid "Photo Albums"
 msgstr ""
 
-#: include/uimport.php:97
-msgid "Error! No version data in file! This is not a Friendica account file?"
+#: include/identity.php:827 mod/notes.php:47
+msgid "Personal Notes"
 msgstr ""
 
-#: include/uimport.php:113 include/uimport.php:124
-msgid "Error! Cannot check nickname"
+#: include/identity.php:830
+msgid "Only You Can See This"
 msgstr ""
 
-#: include/uimport.php:117 include/uimport.php:128
-#, php-format
-msgid "User '%s' already exists on this server!"
+#: include/network.php:687
+msgid "view full size"
 msgstr ""
 
-#: include/uimport.php:150
-msgid "User creation error"
+#: include/oembed.php:255
+msgid "Embedded content"
 msgstr ""
 
-#: include/uimport.php:170
-msgid "User profile creation error"
+#: include/oembed.php:263
+msgid "Embedding disabled"
 msgstr ""
 
-#: include/uimport.php:219
-#, php-format
-msgid "%d contact not imported"
-msgid_plural "%d contacts not imported"
-msgstr[0] ""
-msgstr[1] ""
-
-#: include/uimport.php:289
-msgid "Done. You can now login with your username and password"
+#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:40
+#: mod/fbrowser.php:61 mod/photos.php:187 mod/photos.php:1123
+#: mod/photos.php:1256 mod/photos.php:1277 mod/photos.php:1839
+#: mod/photos.php:1853
+msgid "Contact Photos"
 msgstr ""
 
 #: include/user.php:39 mod/settings.php:375
@@ -3026,61 +2646,62 @@ msgstr ""
 msgid "Name too short."
 msgstr ""
 
-#: include/user.php:113
+#: include/user.php:106
 msgid "That doesn't appear to be your full (First Last) name."
 msgstr ""
 
-#: include/user.php:118
+#: include/user.php:111
 msgid "Your email domain is not among those allowed on this site."
 msgstr ""
 
-#: include/user.php:121
+#: include/user.php:114
 msgid "Not a valid email address."
 msgstr ""
 
-#: include/user.php:134
+#: include/user.php:127
 msgid "Cannot use that email."
 msgstr ""
 
-#: include/user.php:140
+#: include/user.php:133
 msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
 msgstr ""
 
-#: include/user.php:147 include/user.php:245
+#: include/user.php:140 include/user.php:228
 msgid "Nickname is already registered. Please choose another."
 msgstr ""
 
-#: include/user.php:157
+#: include/user.php:150
 msgid ""
 "Nickname was once registered here and may not be re-used. Please choose "
 "another."
 msgstr ""
 
-#: include/user.php:173
+#: include/user.php:166
 msgid "SERIOUS ERROR: Generation of security keys failed."
 msgstr ""
 
-#: include/user.php:231
+#: include/user.php:214
 msgid "An error occurred during registration. Please try again."
 msgstr ""
 
-#: include/user.php:256 view/theme/duepuntozero/config.php:43
+#: include/user.php:239 view/theme/duepuntozero/config.php:43
 msgid "default"
 msgstr ""
 
-#: include/user.php:266
+#: include/user.php:249
 msgid "An error occurred creating your default profile. Please try again."
 msgstr ""
 
-#: include/user.php:326 include/user.php:334 include/user.php:342
-#: mod/photos.php:68 mod/photos.php:182 mod/photos.php:768 mod/photos.php:1231
-#: mod/photos.php:1252 mod/photos.php:1839 mod/profile_photo.php:74
-#: mod/profile_photo.php:82 mod/profile_photo.php:90 mod/profile_photo.php:215
-#: mod/profile_photo.php:310 mod/profile_photo.php:320
+#: include/user.php:309 include/user.php:317 include/user.php:325
+#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90
+#: mod/profile_photo.php:215 mod/profile_photo.php:310
+#: mod/profile_photo.php:320 mod/photos.php:71 mod/photos.php:187
+#: mod/photos.php:774 mod/photos.php:1256 mod/photos.php:1277
+#: mod/photos.php:1863
 msgid "Profile Photos"
 msgstr ""
 
-#: include/user.php:417
+#: include/user.php:400
 #, php-format
 msgid ""
 "\n"
@@ -3090,12 +2711,12 @@ msgid ""
 "\t"
 msgstr ""
 
-#: include/user.php:427
+#: include/user.php:410
 #, php-format
 msgid "Registration at %s"
 msgstr ""
 
-#: include/user.php:437
+#: include/user.php:420
 #, php-format
 msgid ""
 "\n"
@@ -3104,7 +2725,7 @@ msgid ""
 "\t"
 msgstr ""
 
-#: include/user.php:441
+#: include/user.php:424
 #, php-format
 msgid ""
 "\n"
@@ -3139,2221 +2760,2110 @@ msgid ""
 "\t\tThank you and welcome to %2$s."
 msgstr ""
 
-#: include/user.php:473 mod/admin.php:1223
+#: include/user.php:456 mod/admin.php:1308
 #, php-format
 msgid "Registration details for %s"
 msgstr ""
 
-#: index.php:248 mod/apps.php:7
-msgid "You must be logged in to use addons. "
-msgstr ""
-
-#: index.php:292 mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48
-#: mod/help.php:53 mod/p.php:16 mod/p.php:43 mod/p.php:52
-msgid "Not Found"
-msgstr ""
-
-#: index.php:295 mod/help.php:56
-msgid "Page not found."
+#: include/dbstructure.php:20
+msgid "There are no tables on MyISAM."
 msgstr ""
 
-#: index.php:406 mod/group.php:76 mod/profperm.php:20
-msgid "Permission denied"
+#: include/dbstructure.php:61
+#, 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 ""
 
-#: index.php:457
-msgid "toggle mobile"
+#: include/dbstructure.php:66
+#, php-format
+msgid ""
+"The error message is\n"
+"[pre]%s[/pre]"
 msgstr ""
 
-#: mod/admin.php:96
-msgid "Theme settings updated."
+#: include/dbstructure.php:190
+#, php-format
+msgid ""
+"\n"
+"Error %d occurred during database update:\n"
+"%s\n"
 msgstr ""
 
-#: mod/admin.php:162 mod/admin.php:967
-msgid "Site"
+#: include/dbstructure.php:193
+msgid "Errors encountered performing database changes: "
 msgstr ""
 
-#: mod/admin.php:163 mod/admin.php:901 mod/admin.php:1413 mod/admin.php:1429
-msgid "Users"
+#: include/dbstructure.php:201
+msgid ": Database update"
 msgstr ""
 
-#: mod/admin.php:164 mod/admin.php:1531 mod/admin.php:1594 mod/settings.php:74
-msgid "Plugins"
+#: include/dbstructure.php:425
+#, php-format
+msgid "%s: updating %s table."
 msgstr ""
 
-#: mod/admin.php:165 mod/admin.php:1807 mod/admin.php:1857
-msgid "Themes"
+#: include/dfrn.php:1251
+#, php-format
+msgid "%s\\'s birthday"
 msgstr ""
 
-#: mod/admin.php:166 mod/settings.php:52
-msgid "Additional features"
+#: include/diaspora.php:2137
+msgid "Sharing notification from Diaspora network"
 msgstr ""
 
-#: mod/admin.php:167
-msgid "DB updates"
+#: include/diaspora.php:3146
+msgid "Attachments:"
 msgstr ""
 
-#: mod/admin.php:168 mod/admin.php:416
-msgid "Inspect Queue"
+#: include/items.php:1738 mod/dfrn_confirm.php:736 mod/dfrn_request.php:759
+msgid "[Name Withheld]"
 msgstr ""
 
-#: mod/admin.php:169 mod/admin.php:382
-msgid "Federation Statistics"
+#: include/items.php:2123 mod/display.php:103 mod/display.php:279
+#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15 mod/admin.php:247
+#: mod/admin.php:1565 mod/admin.php:1816
+msgid "Item not found."
 msgstr ""
 
-#: mod/admin.php:183 mod/admin.php:194 mod/admin.php:1931
-msgid "Logs"
+#: include/items.php:2162
+msgid "Do you really want to delete this item?"
 msgstr ""
 
-#: mod/admin.php:184 mod/admin.php:1999
-msgid "View Logs"
+#: include/items.php:2164 mod/api.php:105 mod/contacts.php:452
+#: mod/suggest.php:29 mod/dfrn_request.php:880 mod/follow.php:113
+#: mod/message.php:206 mod/profiles.php:640 mod/profiles.php:643
+#: mod/profiles.php:670 mod/register.php:245 mod/settings.php:1171
+#: mod/settings.php:1177 mod/settings.php:1184 mod/settings.php:1188
+#: mod/settings.php:1193 mod/settings.php:1198 mod/settings.php:1203
+#: mod/settings.php:1208 mod/settings.php:1234 mod/settings.php:1235
+#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238
+msgid "Yes"
 msgstr ""
 
-#: mod/admin.php:185
-msgid "probe address"
+#: include/items.php:2327 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31
+#: mod/attach.php:33 mod/common.php:18 mod/contacts.php:360
+#: mod/crepair.php:102 mod/delegate.php:12 mod/display.php:481
+#: mod/editpost.php:10 mod/fsuggest.php:79 mod/invite.php:15
+#: mod/invite.php:103 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23
+#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19
+#: mod/profile_photo.php:180 mod/profile_photo.php:191
+#: mod/profile_photo.php:204 mod/regmod.php:113 mod/repair_ostatus.php:9
+#: mod/suggest.php:58 mod/uimport.php:24 mod/viewcontacts.php:46
+#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/wallmessage.php:9
+#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97
+#: mod/cal.php:299 mod/dfrn_confirm.php:61 mod/dirfind.php:11
+#: mod/events.php:185 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158
+#: mod/group.php:19 mod/manage.php:102 mod/message.php:46 mod/message.php:171
+#: mod/network.php:4 mod/photos.php:166 mod/photos.php:1109
+#: mod/profiles.php:168 mod/profiles.php:607 mod/register.php:42
+#: mod/settings.php:22 mod/settings.php:130 mod/settings.php:668
+#: mod/wall_upload.php:101 mod/wall_upload.php:104 mod/item.php:196
+#: mod/item.php:208 mod/notifications.php:71 index.php:407
+msgid "Permission denied."
 msgstr ""
 
-#: mod/admin.php:186
-msgid "check webfinger"
+#: include/items.php:2444
+msgid "Archives"
 msgstr ""
 
-#: mod/admin.php:193
-msgid "Plugin Features"
+#: include/ostatus.php:1947
+#, php-format
+msgid "%s is now following %s."
 msgstr ""
 
-#: mod/admin.php:195
-msgid "diagnostics"
+#: include/ostatus.php:1948
+msgid "following"
 msgstr ""
 
-#: mod/admin.php:196
-msgid "User registrations waiting for confirmation"
+#: include/ostatus.php:1951
+#, php-format
+msgid "%s stopped following %s."
 msgstr ""
 
-#: mod/admin.php:312
-msgid "unknown"
+#: include/ostatus.php:1952
+msgid "stopped following"
 msgstr ""
 
-#: mod/admin.php:375
-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."
+#: include/text.php:307
+msgid "newer"
 msgstr ""
 
-#: mod/admin.php:376
-msgid ""
-"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
-"will improve the data displayed here."
+#: include/text.php:308
+msgid "older"
 msgstr ""
 
-#: mod/admin.php:381 mod/admin.php:415 mod/admin.php:493 mod/admin.php:966
-#: mod/admin.php:1412 mod/admin.php:1530 mod/admin.php:1593 mod/admin.php:1806
-#: mod/admin.php:1856 mod/admin.php:1930 mod/admin.php:1998
-msgid "Administration"
+#: include/text.php:313
+msgid "first"
 msgstr ""
 
-#: mod/admin.php:388
-#, php-format
-msgid "Currently this node is aware of %d nodes from the following platforms:"
+#: include/text.php:314
+msgid "prev"
 msgstr ""
 
-#: mod/admin.php:418
-msgid "ID"
+#: include/text.php:348
+msgid "next"
 msgstr ""
 
-#: mod/admin.php:419
-msgid "Recipient Name"
+#: include/text.php:349
+msgid "last"
 msgstr ""
 
-#: mod/admin.php:420
-msgid "Recipient Profile"
+#: include/text.php:403
+msgid "Loading more entries..."
 msgstr ""
 
-#: mod/admin.php:422
-msgid "Created"
+#: include/text.php:404
+msgid "The end"
 msgstr ""
 
-#: mod/admin.php:423
-msgid "Last Tried"
+#: include/text.php:955
+msgid "No contacts"
 msgstr ""
 
-#: mod/admin.php:424
-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."
+#: include/text.php:980
+#, php-format
+msgid "%d Contact"
+msgid_plural "%d Contacts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/text.php:993
+msgid "View Contacts"
 msgstr ""
 
-#: mod/admin.php:449
-#, 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 <tt>convert_innodb.sql</"
-"tt> in the <tt>/util</tt> directory of your Friendica installation.<br />"
+#: include/text.php:1081 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62
+msgid "Save"
 msgstr ""
 
-#: mod/admin.php:454
-msgid ""
-"You are using a MySQL version which does not support all features that "
-"Friendica uses. You should consider switching to MariaDB."
+#: include/text.php:1144
+msgid "poke"
 msgstr ""
 
-#: mod/admin.php:458 mod/admin.php:1362
-msgid "Normal Account"
+#: include/text.php:1144
+msgid "poked"
 msgstr ""
 
-#: mod/admin.php:459 mod/admin.php:1363
-msgid "Soapbox Account"
+#: include/text.php:1145
+msgid "ping"
 msgstr ""
 
-#: mod/admin.php:460 mod/admin.php:1364
-msgid "Community/Celebrity Account"
+#: include/text.php:1145
+msgid "pinged"
 msgstr ""
 
-#: mod/admin.php:461 mod/admin.php:1365
-msgid "Automatic Friend Account"
+#: include/text.php:1146
+msgid "prod"
 msgstr ""
 
-#: mod/admin.php:462
-msgid "Blog Account"
+#: include/text.php:1146
+msgid "prodded"
 msgstr ""
 
-#: mod/admin.php:463
-msgid "Private Forum"
+#: include/text.php:1147
+msgid "slap"
 msgstr ""
 
-#: mod/admin.php:488
-msgid "Message queues"
+#: include/text.php:1147
+msgid "slapped"
 msgstr ""
 
-#: mod/admin.php:494
-msgid "Summary"
+#: include/text.php:1148
+msgid "finger"
 msgstr ""
 
-#: mod/admin.php:496
-msgid "Registered users"
+#: include/text.php:1148
+msgid "fingered"
 msgstr ""
 
-#: mod/admin.php:498
-msgid "Pending registrations"
+#: include/text.php:1149
+msgid "rebuff"
 msgstr ""
 
-#: mod/admin.php:499
-msgid "Version"
+#: include/text.php:1149
+msgid "rebuffed"
 msgstr ""
 
-#: mod/admin.php:504
-msgid "Active plugins"
+#: include/text.php:1163
+msgid "happy"
 msgstr ""
 
-#: mod/admin.php:529
-msgid "Can not parse base url. Must have at least <scheme>://<domain>"
+#: include/text.php:1164
+msgid "sad"
 msgstr ""
 
-#: mod/admin.php:819
-msgid "RINO2 needs mcrypt php extension to work."
+#: include/text.php:1165
+msgid "mellow"
 msgstr ""
 
-#: mod/admin.php:827
-msgid "Site settings updated."
+#: include/text.php:1166
+msgid "tired"
 msgstr ""
 
-#: mod/admin.php:855 mod/settings.php:943
-msgid "No special theme for mobile devices"
+#: include/text.php:1167
+msgid "perky"
 msgstr ""
 
-#: mod/admin.php:884
-msgid "No community page"
+#: include/text.php:1168
+msgid "angry"
 msgstr ""
 
-#: mod/admin.php:885
-msgid "Public postings from users of this site"
+#: include/text.php:1169
+msgid "stupified"
 msgstr ""
 
-#: mod/admin.php:886
-msgid "Global community page"
+#: include/text.php:1170
+msgid "puzzled"
 msgstr ""
 
-#: mod/admin.php:891 mod/contacts.php:538
-msgid "Never"
+#: include/text.php:1171
+msgid "interested"
 msgstr ""
 
-#: mod/admin.php:892
-msgid "At post arrival"
+#: include/text.php:1172
+msgid "bitter"
 msgstr ""
 
-#: mod/admin.php:900 mod/contacts.php:565
-msgid "Disabled"
+#: include/text.php:1173
+msgid "cheerful"
 msgstr ""
 
-#: mod/admin.php:902
-msgid "Users, Global Contacts"
+#: include/text.php:1174
+msgid "alive"
 msgstr ""
 
-#: mod/admin.php:903
-msgid "Users, Global Contacts/fallback"
+#: include/text.php:1175
+msgid "annoyed"
 msgstr ""
 
-#: mod/admin.php:907
-msgid "One month"
+#: include/text.php:1176
+msgid "anxious"
 msgstr ""
 
-#: mod/admin.php:908
-msgid "Three months"
+#: include/text.php:1177
+msgid "cranky"
 msgstr ""
 
-#: mod/admin.php:909
-msgid "Half a year"
+#: include/text.php:1178
+msgid "disturbed"
 msgstr ""
 
-#: mod/admin.php:910
-msgid "One year"
+#: include/text.php:1179
+msgid "frustrated"
 msgstr ""
 
-#: mod/admin.php:915
-msgid "Multi user instance"
+#: include/text.php:1180
+msgid "motivated"
 msgstr ""
 
-#: mod/admin.php:938
-msgid "Closed"
+#: include/text.php:1181
+msgid "relaxed"
 msgstr ""
 
-#: mod/admin.php:939
-msgid "Requires approval"
+#: include/text.php:1182
+msgid "surprised"
 msgstr ""
 
-#: mod/admin.php:940
-msgid "Open"
+#: include/text.php:1392 mod/videos.php:386
+msgid "View Video"
 msgstr ""
 
-#: mod/admin.php:944
-msgid "No SSL policy, links will track page SSL state"
+#: include/text.php:1424
+msgid "bytes"
 msgstr ""
 
-#: mod/admin.php:945
-msgid "Force all links to use SSL"
+#: include/text.php:1456 include/text.php:1468
+msgid "Click to open/close"
 msgstr ""
 
-#: mod/admin.php:946
-msgid "Self-signed certificate, use SSL for local links only (discouraged)"
+#: include/text.php:1594
+msgid "View on separate page"
 msgstr ""
 
-#: mod/admin.php:968 mod/admin.php:1595 mod/admin.php:1858 mod/admin.php:1932
-#: mod/admin.php:2085 mod/settings.php:681 mod/settings.php:792
-#: mod/settings.php:841 mod/settings.php:908 mod/settings.php:1005
-#: mod/settings.php:1271
-msgid "Save Settings"
+#: include/text.php:1595
+msgid "view on separate page"
 msgstr ""
 
-#: mod/admin.php:969 mod/register.php:272
-msgid "Registration"
+#: include/text.php:1874
+msgid "activity"
 msgstr ""
 
-#: mod/admin.php:970
-msgid "File upload"
+#: include/text.php:1876 mod/content.php:623 object/Item.php:419
+#: object/Item.php:431
+msgid "comment"
+msgid_plural "comments"
+msgstr[0] ""
+msgstr[1] ""
+
+#: include/text.php:1877
+msgid "post"
 msgstr ""
 
-#: mod/admin.php:971
-msgid "Policies"
+#: include/text.php:2045
+msgid "Item filed"
 msgstr ""
 
-#: mod/admin.php:973
-msgid "Auto Discovered Contact Directory"
+#: mod/allfriends.php:46
+msgid "No friends to display."
 msgstr ""
 
-#: mod/admin.php:974
-msgid "Performance"
+#: mod/api.php:76 mod/api.php:102
+msgid "Authorize application connection"
 msgstr ""
 
-#: mod/admin.php:975
-msgid "Worker"
+#: mod/api.php:77
+msgid "Return to your app and insert this Securty Code:"
 msgstr ""
 
-#: mod/admin.php:976
-msgid ""
-"Relocate - WARNING: advanced function. Could make this server unreachable."
+#: mod/api.php:89
+msgid "Please login to continue."
 msgstr ""
 
-#: mod/admin.php:979
-msgid "Site name"
+#: mod/api.php:104
+msgid ""
+"Do you want to authorize this application to access your posts and contacts, "
+"and/or create new posts for you?"
 msgstr ""
 
-#: mod/admin.php:980
-msgid "Host name"
+#: mod/api.php:106 mod/dfrn_request.php:880 mod/follow.php:113
+#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:670
+#: mod/register.php:246 mod/settings.php:1171 mod/settings.php:1177
+#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193
+#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208
+#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236
+#: mod/settings.php:1237 mod/settings.php:1238
+msgid "No"
 msgstr ""
 
-#: mod/admin.php:981
-msgid "Sender Email"
+#: mod/apps.php:7 index.php:254
+msgid "You must be logged in to use addons. "
 msgstr ""
 
-#: mod/admin.php:981
-msgid ""
-"The email address your server shall use to send notification emails from."
+#: mod/apps.php:11
+msgid "Applications"
 msgstr ""
 
-#: mod/admin.php:982
-msgid "Banner/Logo"
+#: mod/apps.php:14
+msgid "No installed applications."
 msgstr ""
 
-#: mod/admin.php:983
-msgid "Shortcut icon"
+#: mod/attach.php:8
+msgid "Item not available."
 msgstr ""
 
-#: mod/admin.php:983
-msgid "Link to an icon that will be used for browsers."
+#: mod/attach.php:20
+msgid "Item was not found."
 msgstr ""
 
-#: mod/admin.php:984
-msgid "Touch icon"
+#: mod/bookmarklet.php:41
+msgid "The post was created"
 msgstr ""
 
-#: mod/admin.php:984
-msgid "Link to an icon that will be used for tablets and mobiles."
+#: mod/common.php:91
+msgid "No contacts in common."
 msgstr ""
 
-#: mod/admin.php:985
-msgid "Additional Info"
+#: mod/common.php:141 mod/contacts.php:871
+msgid "Common Friends"
 msgstr ""
 
-#: mod/admin.php:985
+#: mod/contacts.php:134
 #, php-format
-msgid ""
-"For public servers: you can add additional information here that will be "
-"listed at %s/siteinfo."
-msgstr ""
+msgid "%d contact edited."
+msgid_plural "%d contacts edited."
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/admin.php:986
-msgid "System language"
+#: mod/contacts.php:169 mod/contacts.php:378
+msgid "Could not access contact record."
 msgstr ""
 
-#: mod/admin.php:987
-msgid "System theme"
+#: mod/contacts.php:183
+msgid "Could not locate selected profile."
 msgstr ""
 
-#: mod/admin.php:987
-msgid ""
-"Default system theme - may be over-ridden by user profiles - <a href='#' "
-"id='cnftheme'>change theme settings</a>"
+#: mod/contacts.php:216
+msgid "Contact updated."
 msgstr ""
 
-#: mod/admin.php:988
-msgid "Mobile system theme"
+#: mod/contacts.php:218 mod/dfrn_request.php:593
+msgid "Failed to update contact record."
 msgstr ""
 
-#: mod/admin.php:988
-msgid "Theme for mobile devices"
+#: mod/contacts.php:399
+msgid "Contact has been blocked"
 msgstr ""
 
-#: mod/admin.php:989
-msgid "SSL link policy"
+#: mod/contacts.php:399
+msgid "Contact has been unblocked"
 msgstr ""
 
-#: mod/admin.php:989
-msgid "Determines whether generated links should be forced to use SSL"
+#: mod/contacts.php:410
+msgid "Contact has been ignored"
 msgstr ""
 
-#: mod/admin.php:990
-msgid "Force SSL"
+#: mod/contacts.php:410
+msgid "Contact has been unignored"
 msgstr ""
 
-#: mod/admin.php:990
-msgid ""
-"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
-"to endless loops."
+#: mod/contacts.php:422
+msgid "Contact has been archived"
 msgstr ""
 
-#: mod/admin.php:991
-msgid "Hide help entry from navigation menu"
+#: mod/contacts.php:422
+msgid "Contact has been unarchived"
 msgstr ""
 
-#: mod/admin.php:991
-msgid ""
-"Hides the menu entry for the Help pages from the navigation menu. You can "
-"still access it calling /help directly."
+#: mod/contacts.php:447
+msgid "Drop contact"
 msgstr ""
 
-#: mod/admin.php:992
-msgid "Single user instance"
+#: mod/contacts.php:450 mod/contacts.php:809
+msgid "Do you really want to delete this contact?"
 msgstr ""
 
-#: mod/admin.php:992
-msgid "Make this instance multi-user or single-user for the named user"
+#: mod/contacts.php:469
+msgid "Contact has been removed."
 msgstr ""
 
-#: mod/admin.php:993
-msgid "Maximum image size"
+#: mod/contacts.php:506
+#, php-format
+msgid "You are mutual friends with %s"
 msgstr ""
 
-#: mod/admin.php:993
-msgid ""
-"Maximum size in bytes of uploaded images. Default is 0, which means no "
-"limits."
+#: mod/contacts.php:510
+#, php-format
+msgid "You are sharing with %s"
 msgstr ""
 
-#: mod/admin.php:994
-msgid "Maximum image length"
+#: mod/contacts.php:515
+#, php-format
+msgid "%s is sharing with you"
 msgstr ""
 
-#: mod/admin.php:994
-msgid ""
-"Maximum length in pixels of the longest side of uploaded images. Default is "
-"-1, which means no limits."
+#: mod/contacts.php:535
+msgid "Private communications are not available for this contact."
 msgstr ""
 
-#: mod/admin.php:995
-msgid "JPEG image quality"
+#: mod/contacts.php:538 mod/admin.php:978
+msgid "Never"
 msgstr ""
 
-#: mod/admin.php:995
-msgid ""
-"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
-"100, which is full quality."
+#: mod/contacts.php:542
+msgid "(Update was successful)"
 msgstr ""
 
-#: mod/admin.php:997
-msgid "Register policy"
+#: mod/contacts.php:542
+msgid "(Update was not successful)"
 msgstr ""
 
-#: mod/admin.php:998
-msgid "Maximum Daily Registrations"
+#: mod/contacts.php:544 mod/contacts.php:972
+msgid "Suggest friends"
 msgstr ""
 
-#: mod/admin.php:998
-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."
+#: mod/contacts.php:548
+#, php-format
+msgid "Network type: %s"
 msgstr ""
 
-#: mod/admin.php:999
-msgid "Register text"
+#: mod/contacts.php:561
+msgid "Communications lost with this contact!"
 msgstr ""
 
-#: mod/admin.php:999
-msgid "Will be displayed prominently on the registration page."
+#: mod/contacts.php:564
+msgid "Fetch further information for feeds"
 msgstr ""
 
-#: mod/admin.php:1000
-msgid "Accounts abandoned after x days"
+#: mod/contacts.php:565 mod/admin.php:987
+msgid "Disabled"
 msgstr ""
 
-#: mod/admin.php:1000
-msgid ""
-"Will not waste system resources polling external sites for abandonded "
-"accounts. Enter 0 for no time limit."
+#: mod/contacts.php:565
+msgid "Fetch information"
 msgstr ""
 
-#: mod/admin.php:1001
-msgid "Allowed friend domains"
+#: mod/contacts.php:565
+msgid "Fetch information and keywords"
 msgstr ""
 
-#: mod/admin.php:1001
-msgid ""
-"Comma separated list of domains which are allowed to establish friendships "
-"with this site. Wildcards are accepted. Empty to allow any domains"
+#: mod/contacts.php:583
+msgid "Contact"
 msgstr ""
 
-#: mod/admin.php:1002
-msgid "Allowed email domains"
+#: mod/contacts.php:585 mod/content.php:728 mod/crepair.php:156
+#: mod/fsuggest.php:108 mod/invite.php:142 mod/localtime.php:45
+#: mod/mood.php:138 mod/poke.php:203 mod/events.php:505 mod/manage.php:155
+#: mod/message.php:338 mod/message.php:521 mod/photos.php:1141
+#: mod/photos.php:1271 mod/photos.php:1597 mod/photos.php:1646
+#: mod/photos.php:1688 mod/photos.php:1768 mod/profiles.php:681
+#: mod/install.php:242 mod/install.php:282 object/Item.php:705
+#: view/theme/duepuntozero/config.php:61 view/theme/frio/config.php:64
+#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112
+msgid "Submit"
 msgstr ""
 
-#: mod/admin.php:1002
-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/contacts.php:586
+msgid "Profile Visibility"
 msgstr ""
 
-#: mod/admin.php:1003
-msgid "Block public"
+#: mod/contacts.php:587
+#, php-format
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
 msgstr ""
 
-#: mod/admin.php:1003
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently logged in."
+#: mod/contacts.php:588
+msgid "Contact Information / Notes"
 msgstr ""
 
-#: mod/admin.php:1004
-msgid "Force publish"
+#: mod/contacts.php:589
+msgid "Edit contact notes"
 msgstr ""
 
-#: mod/admin.php:1004
-msgid ""
-"Check to force all profiles on this site to be listed in the site directory."
+#: mod/contacts.php:594 mod/contacts.php:938 mod/nogroup.php:43
+#: mod/viewcontacts.php:102
+#, php-format
+msgid "Visit %s's profile [%s]"
 msgstr ""
 
-#: mod/admin.php:1005
-msgid "Global directory URL"
+#: mod/contacts.php:595
+msgid "Block/Unblock contact"
 msgstr ""
 
-#: mod/admin.php:1005
-msgid ""
-"URL to the global directory. If this is not set, the global directory is "
-"completely unavailable to the application."
+#: mod/contacts.php:596
+msgid "Ignore contact"
 msgstr ""
 
-#: mod/admin.php:1006
-msgid "Allow threaded items"
+#: mod/contacts.php:597
+msgid "Repair URL settings"
 msgstr ""
 
-#: mod/admin.php:1006
-msgid "Allow infinite level threading for items on this site."
+#: mod/contacts.php:598
+msgid "View conversations"
 msgstr ""
 
-#: mod/admin.php:1007
-msgid "Private posts by default for new users"
+#: mod/contacts.php:604
+msgid "Last update:"
 msgstr ""
 
-#: mod/admin.php:1007
-msgid ""
-"Set default post permissions for all new members to the default privacy "
-"group rather than public."
+#: mod/contacts.php:606
+msgid "Update public posts"
 msgstr ""
 
-#: mod/admin.php:1008
-msgid "Don't include post content in email notifications"
+#: mod/contacts.php:608 mod/contacts.php:982
+msgid "Update now"
 msgstr ""
 
-#: mod/admin.php:1008
-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/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
+#: mod/admin.php:1510
+msgid "Unblock"
 msgstr ""
 
-#: mod/admin.php:1009
-msgid "Disallow public access to addons listed in the apps menu."
+#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
+#: mod/admin.php:1509
+msgid "Block"
 msgstr ""
 
-#: mod/admin.php:1009
-msgid ""
-"Checking this box will restrict addons listed in the apps menu to members "
-"only."
+#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
+msgid "Unignore"
 msgstr ""
 
-#: mod/admin.php:1010
-msgid "Don't embed private images in posts"
+#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
+#: mod/notifications.php:60 mod/notifications.php:179
+#: mod/notifications.php:263
+msgid "Ignore"
 msgstr ""
 
-#: mod/admin.php:1010
-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/contacts.php:618
+msgid "Currently blocked"
 msgstr ""
 
-#: mod/admin.php:1011
-msgid "Allow Users to set remote_self"
+#: mod/contacts.php:619
+msgid "Currently ignored"
 msgstr ""
 
-#: mod/admin.php:1011
-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/contacts.php:620
+msgid "Currently archived"
 msgstr ""
 
-#: mod/admin.php:1012
-msgid "Block multiple registrations"
+#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:251
+msgid "Hide this contact from others"
 msgstr ""
 
-#: mod/admin.php:1012
-msgid "Disallow users to register additional accounts for use as pages."
+#: mod/contacts.php:621
+msgid ""
+"Replies/likes to your public posts <strong>may</strong> still be visible"
 msgstr ""
 
-#: mod/admin.php:1013
-msgid "OpenID support"
+#: mod/contacts.php:622
+msgid "Notification for new posts"
 msgstr ""
 
-#: mod/admin.php:1013
-msgid "OpenID support for registration and logins."
+#: mod/contacts.php:622
+msgid "Send a notification of every new post of this contact"
 msgstr ""
 
-#: mod/admin.php:1014
-msgid "Fullname check"
+#: mod/contacts.php:625
+msgid "Blacklisted keywords"
 msgstr ""
 
-#: mod/admin.php:1014
+#: mod/contacts.php:625
 msgid ""
-"Force users to register with a space between firstname and lastname in Full "
-"name, as an antispam measure"
+"Comma separated list of keywords that should not be converted to hashtags, "
+"when \"Fetch information and keywords\" is selected"
 msgstr ""
 
-#: mod/admin.php:1015
-msgid "UTF-8 Regular expressions"
+#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:255
+msgid "Profile URL"
 msgstr ""
 
-#: mod/admin.php:1015
-msgid "Use PHP UTF8 regular expressions"
+#: mod/contacts.php:643
+msgid "Actions"
 msgstr ""
 
-#: mod/admin.php:1016
-msgid "Community Page Style"
+#: mod/contacts.php:646
+msgid "Contact Settings"
 msgstr ""
 
-#: mod/admin.php:1016
-msgid ""
-"Type of community page to show. 'Global community' shows every public "
-"posting from an open distributed network that arrived on this server."
+#: mod/contacts.php:692
+msgid "Suggestions"
 msgstr ""
 
-#: mod/admin.php:1017
-msgid "Posts per user on community page"
+#: mod/contacts.php:695
+msgid "Suggest potential friends"
 msgstr ""
 
-#: mod/admin.php:1017
-msgid ""
-"The maximum number of posts per user on the community page. (Not valid for "
-"'Global Community')"
+#: mod/contacts.php:700 mod/group.php:212
+msgid "All Contacts"
 msgstr ""
 
-#: mod/admin.php:1018
-msgid "Enable OStatus support"
+#: mod/contacts.php:703
+msgid "Show all contacts"
 msgstr ""
 
-#: mod/admin.php:1018
-msgid ""
-"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
-"communications in OStatus are public, so privacy warnings will be "
-"occasionally displayed."
+#: mod/contacts.php:708
+msgid "Unblocked"
 msgstr ""
 
-#: mod/admin.php:1019
-msgid "OStatus conversation completion interval"
+#: mod/contacts.php:711
+msgid "Only show unblocked contacts"
 msgstr ""
 
-#: mod/admin.php:1019
-msgid ""
-"How often shall the poller check for new entries in OStatus conversations? "
-"This can be a very ressource task."
+#: mod/contacts.php:717
+msgid "Blocked"
 msgstr ""
 
-#: mod/admin.php:1020
-msgid "Only import OStatus threads from our contacts"
+#: mod/contacts.php:720
+msgid "Only show blocked contacts"
 msgstr ""
 
-#: mod/admin.php:1020
-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."
+#: mod/contacts.php:726
+msgid "Ignored"
 msgstr ""
 
-#: mod/admin.php:1021
-msgid "OStatus support can only be enabled if threading is enabled."
+#: mod/contacts.php:729
+msgid "Only show ignored contacts"
 msgstr ""
 
-#: mod/admin.php:1023
-msgid ""
-"Diaspora support can't be enabled because Friendica was installed into a sub "
-"directory."
+#: mod/contacts.php:735
+msgid "Archived"
 msgstr ""
 
-#: mod/admin.php:1024
-msgid "Enable Diaspora support"
+#: mod/contacts.php:738
+msgid "Only show archived contacts"
 msgstr ""
 
-#: mod/admin.php:1024
-msgid "Provide built-in Diaspora network compatibility."
+#: mod/contacts.php:744
+msgid "Hidden"
 msgstr ""
 
-#: mod/admin.php:1025
-msgid "Only allow Friendica contacts"
+#: mod/contacts.php:747
+msgid "Only show hidden contacts"
 msgstr ""
 
-#: mod/admin.php:1025
-msgid ""
-"All contacts must use Friendica protocols. All other built-in communication "
-"protocols disabled."
+#: mod/contacts.php:804
+msgid "Search your contacts"
 msgstr ""
 
-#: mod/admin.php:1026
-msgid "Verify SSL"
+#: mod/contacts.php:805 mod/network.php:151 mod/search.php:227
+#, php-format
+msgid "Results for: %s"
 msgstr ""
 
-#: mod/admin.php:1026
-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/contacts.php:812 mod/settings.php:160 mod/settings.php:707
+msgid "Update"
 msgstr ""
 
-#: mod/admin.php:1027
-msgid "Proxy user"
+#: mod/contacts.php:815 mod/contacts.php:1007
+msgid "Archive"
 msgstr ""
 
-#: mod/admin.php:1028
-msgid "Proxy URL"
+#: mod/contacts.php:815 mod/contacts.php:1007
+msgid "Unarchive"
 msgstr ""
 
-#: mod/admin.php:1029
-msgid "Network timeout"
+#: mod/contacts.php:818
+msgid "Batch Actions"
 msgstr ""
 
-#: mod/admin.php:1029
-msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
+#: mod/contacts.php:864
+msgid "View all contacts"
 msgstr ""
 
-#: mod/admin.php:1030
-msgid "Maximum Load Average"
+#: mod/contacts.php:874
+msgid "View all common friends"
 msgstr ""
 
-#: mod/admin.php:1030
-msgid ""
-"Maximum system load before delivery and poll processes are deferred - "
-"default 50."
+#: mod/contacts.php:881
+msgid "Advanced Contact Settings"
 msgstr ""
 
-#: mod/admin.php:1031
-msgid "Maximum Load Average (Frontend)"
+#: mod/contacts.php:915
+msgid "Mutual Friendship"
 msgstr ""
 
-#: mod/admin.php:1031
-msgid "Maximum system load before the frontend quits service - default 50."
+#: mod/contacts.php:919
+msgid "is a fan of yours"
 msgstr ""
 
-#: mod/admin.php:1032
-msgid "Maximum table size for optimization"
+#: mod/contacts.php:923
+msgid "you are a fan of"
 msgstr ""
 
-#: mod/admin.php:1032
-msgid ""
-"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
-"Enter -1 to disable it."
+#: mod/contacts.php:939 mod/nogroup.php:44
+msgid "Edit contact"
 msgstr ""
 
-#: mod/admin.php:1033
-msgid "Minimum level of fragmentation"
+#: mod/contacts.php:993
+msgid "Toggle Blocked status"
 msgstr ""
 
-#: mod/admin.php:1033
-msgid ""
-"Minimum fragmenation level to start the automatic optimization - default "
-"value is 30%."
+#: mod/contacts.php:1001
+msgid "Toggle Ignored status"
 msgstr ""
 
-#: mod/admin.php:1035
-msgid "Periodical check of global contacts"
+#: mod/contacts.php:1009
+msgid "Toggle Archive status"
 msgstr ""
 
-#: mod/admin.php:1035
-msgid ""
-"If enabled, the global contacts are checked periodically for missing or "
-"outdated data and the vitality of the contacts and servers."
+#: mod/contacts.php:1017
+msgid "Delete contact"
 msgstr ""
 
-#: mod/admin.php:1036
-msgid "Days between requery"
+#: mod/content.php:119 mod/network.php:475
+msgid "No such group"
 msgstr ""
 
-#: mod/admin.php:1036
-msgid "Number of days after which a server is requeried for his contacts."
+#: mod/content.php:130 mod/group.php:213 mod/network.php:502
+msgid "Group is empty"
 msgstr ""
 
-#: mod/admin.php:1037
-msgid "Discover contacts from other servers"
+#: mod/content.php:135 mod/network.php:506
+#, php-format
+msgid "Group: %s"
 msgstr ""
 
-#: mod/admin.php:1037
-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'."
+#: mod/content.php:325 object/Item.php:96
+msgid "This entry was edited"
 msgstr ""
 
-#: mod/admin.php:1038
-msgid "Timeframe for fetching global contacts"
+#: mod/content.php:621 object/Item.php:417
+#, php-format
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/content.php:638 mod/photos.php:1429 object/Item.php:117
+msgid "Private Message"
 msgstr ""
 
-#: mod/admin.php:1038
-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/content.php:702 mod/photos.php:1625 object/Item.php:274
+msgid "I like this (toggle)"
 msgstr ""
 
-#: mod/admin.php:1039
-msgid "Search the local directory"
+#: mod/content.php:702 object/Item.php:274
+msgid "like"
 msgstr ""
 
-#: mod/admin.php:1039
-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/content.php:703 mod/photos.php:1626 object/Item.php:275
+msgid "I don't like this (toggle)"
 msgstr ""
 
-#: mod/admin.php:1041
-msgid "Publish server information"
+#: mod/content.php:703 object/Item.php:275
+msgid "dislike"
 msgstr ""
 
-#: mod/admin.php:1041
-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/content.php:705 object/Item.php:278
+msgid "Share this"
 msgstr ""
 
-#: mod/admin.php:1043
-msgid "Use MySQL full text engine"
+#: mod/content.php:705 object/Item.php:278
+msgid "share"
 msgstr ""
 
-#: mod/admin.php:1043
-msgid ""
-"Activates the full text engine. Speeds up search - but can only search for "
-"four and more characters."
+#: mod/content.php:725 mod/photos.php:1643 mod/photos.php:1685
+#: mod/photos.php:1765 object/Item.php:702
+msgid "This is you"
 msgstr ""
 
-#: mod/admin.php:1044
-msgid "Suppress Tags"
+#: mod/content.php:727 mod/content.php:950 mod/photos.php:1645
+#: mod/photos.php:1687 mod/photos.php:1767 object/Item.php:392
+#: object/Item.php:704
+msgid "Comment"
 msgstr ""
 
-#: mod/admin.php:1044
-msgid "Suppress showing a list of hashtags at the end of the posting."
+#: mod/content.php:729 object/Item.php:706
+msgid "Bold"
 msgstr ""
 
-#: mod/admin.php:1045
-msgid "Path to item cache"
+#: mod/content.php:730 object/Item.php:707
+msgid "Italic"
 msgstr ""
 
-#: mod/admin.php:1045
-msgid "The item caches buffers generated bbcode and external images."
+#: mod/content.php:731 object/Item.php:708
+msgid "Underline"
 msgstr ""
 
-#: mod/admin.php:1046
-msgid "Cache duration in seconds"
+#: mod/content.php:732 object/Item.php:709
+msgid "Quote"
 msgstr ""
 
-#: mod/admin.php:1046
-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."
+#: mod/content.php:733 object/Item.php:710
+msgid "Code"
 msgstr ""
 
-#: mod/admin.php:1047
-msgid "Maximum numbers of comments per post"
+#: mod/content.php:734 object/Item.php:711
+msgid "Image"
 msgstr ""
 
-#: mod/admin.php:1047
-msgid "How much comments should be shown for each post? Default value is 100."
+#: mod/content.php:735 object/Item.php:712
+msgid "Link"
 msgstr ""
 
-#: mod/admin.php:1048
-msgid "Temp path"
+#: mod/content.php:736 object/Item.php:713
+msgid "Video"
 msgstr ""
 
-#: mod/admin.php:1048
-msgid ""
-"If you have a restricted system where the webserver can't access the system "
-"temp path, enter another path here."
+#: mod/content.php:746 mod/settings.php:743 object/Item.php:122
+#: object/Item.php:124
+msgid "Edit"
 msgstr ""
 
-#: mod/admin.php:1049
-msgid "Base path to installation"
+#: mod/content.php:772 object/Item.php:238
+msgid "add star"
 msgstr ""
 
-#: mod/admin.php:1049
-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/content.php:773 object/Item.php:239
+msgid "remove star"
 msgstr ""
 
-#: mod/admin.php:1050
-msgid "Disable picture proxy"
+#: mod/content.php:774 object/Item.php:240
+msgid "toggle star status"
 msgstr ""
 
-#: mod/admin.php:1050
-msgid ""
-"The picture proxy increases performance and privacy. It shouldn't be used on "
-"systems with very low bandwith."
+#: mod/content.php:777 object/Item.php:243
+msgid "starred"
 msgstr ""
 
-#: mod/admin.php:1051
-msgid "Only search in tags"
+#: mod/content.php:778 mod/content.php:800 object/Item.php:263
+msgid "add tag"
 msgstr ""
 
-#: mod/admin.php:1051
-msgid "On large systems the text search can slow down the system extremely."
+#: mod/content.php:789 object/Item.php:251
+msgid "ignore thread"
 msgstr ""
 
-#: mod/admin.php:1053
-msgid "New base url"
+#: mod/content.php:790 object/Item.php:252
+msgid "unignore thread"
 msgstr ""
 
-#: mod/admin.php:1053
-msgid ""
-"Change base url for this server. Sends relocate message to all DFRN contacts "
-"of all users."
+#: mod/content.php:791 object/Item.php:253
+msgid "toggle ignore status"
 msgstr ""
 
-#: mod/admin.php:1055
-msgid "RINO Encryption"
+#: mod/content.php:794 mod/ostatus_subscribe.php:73 object/Item.php:256
+msgid "ignored"
 msgstr ""
 
-#: mod/admin.php:1055
-msgid "Encryption layer between nodes."
+#: mod/content.php:805 object/Item.php:141
+msgid "save to folder"
 msgstr ""
 
-#: mod/admin.php:1056
-msgid "Embedly API key"
+#: mod/content.php:853 object/Item.php:212
+msgid "I will attend"
 msgstr ""
 
-#: mod/admin.php:1056
-msgid ""
-"<a href='http://embed.ly'>Embedly</a> is used to fetch additional data for "
-"web pages. This is an optional parameter."
+#: mod/content.php:853 object/Item.php:212
+msgid "I will not attend"
 msgstr ""
 
-#: mod/admin.php:1058
-msgid "Maximum number of parallel workers"
+#: mod/content.php:853 object/Item.php:212
+msgid "I might attend"
 msgstr ""
 
-#: mod/admin.php:1058
-msgid ""
-"On shared hosters set this to 2. On larger systems, values of 10 are great. "
-"Default value is 4."
+#: mod/content.php:917 object/Item.php:358
+msgid "to"
 msgstr ""
 
-#: mod/admin.php:1059
-msgid "Don't use 'proc_open' with the worker"
+#: mod/content.php:918 object/Item.php:360
+msgid "Wall-to-Wall"
 msgstr ""
 
-#: mod/admin.php:1059
-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."
+#: mod/content.php:919 object/Item.php:361
+msgid "via Wall-To-Wall:"
 msgstr ""
 
-#: mod/admin.php:1060
-msgid "Enable fastlane"
+#: mod/credits.php:16
+msgid "Credits"
 msgstr ""
 
-#: mod/admin.php:1060
+#: mod/credits.php:17
 msgid ""
-"When enabed, the fastlane mechanism starts an additional worker if processes "
-"with higher priority are blocked by processes of lower priority."
+"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/admin.php:1061
-msgid "Enable frontend worker"
+#: mod/crepair.php:89
+msgid "Contact settings applied."
 msgstr ""
 
-#: mod/admin.php:1061
-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 yourdomain.tld/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. The worker background process needs to be activated for this."
+#: mod/crepair.php:91
+msgid "Contact update failed."
 msgstr ""
 
-#: mod/admin.php:1091
-msgid "Update has been marked successful"
+#: mod/crepair.php:116 mod/fsuggest.php:21 mod/fsuggest.php:93
+#: mod/dfrn_confirm.php:126
+msgid "Contact not found."
 msgstr ""
 
-#: mod/admin.php:1099
-#, php-format
-msgid "Database structure update %s was successfully applied."
+#: mod/crepair.php:122
+msgid ""
+"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
+"information your communications with this contact may stop working."
 msgstr ""
 
-#: mod/admin.php:1102
-#, php-format
-msgid "Executing of database structure update %s failed with error: %s"
+#: mod/crepair.php:123
+msgid ""
+"Please use your browser 'Back' button <strong>now</strong> if you are "
+"uncertain what to do on this page."
 msgstr ""
 
-#: mod/admin.php:1116
-#, php-format
-msgid "Executing %s failed with error: %s"
+#: mod/crepair.php:136 mod/crepair.php:138
+msgid "No mirroring"
 msgstr ""
 
-#: mod/admin.php:1119
-#, php-format
-msgid "Update %s was successfully applied."
+#: mod/crepair.php:136
+msgid "Mirror as forwarded posting"
 msgstr ""
 
-#: mod/admin.php:1122
-#, php-format
-msgid "Update %s did not return a status. Unknown if it succeeded."
+#: mod/crepair.php:136 mod/crepair.php:138
+msgid "Mirror as my own posting"
 msgstr ""
 
-#: mod/admin.php:1125
-#, php-format
-msgid "There was no additional update function %s that needed to be called."
+#: mod/crepair.php:152
+msgid "Return to contact editor"
 msgstr ""
 
-#: mod/admin.php:1145
-msgid "No failed updates."
+#: mod/crepair.php:154
+msgid "Refetch contact data"
 msgstr ""
 
-#: mod/admin.php:1146
-msgid "Check database structure"
+#: mod/crepair.php:158
+msgid "Remote Self"
 msgstr ""
 
-#: mod/admin.php:1151
-msgid "Failed Updates"
+#: mod/crepair.php:161
+msgid "Mirror postings from this contact"
 msgstr ""
 
-#: mod/admin.php:1152
+#: mod/crepair.php:163
 msgid ""
-"This does not include updates prior to 1139, which did not return a status."
+"Mark this contact as remote_self, this will cause friendica to repost new "
+"entries from this contact."
 msgstr ""
 
-#: mod/admin.php:1153
-msgid "Mark success (if update was manually applied)"
+#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709
+#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1532
+msgid "Name"
 msgstr ""
 
-#: mod/admin.php:1154
-msgid "Attempt to execute this update step automatically"
+#: mod/crepair.php:168
+msgid "Account Nickname"
 msgstr ""
 
-#: mod/admin.php:1188
-#, 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/crepair.php:169
+msgid "@Tagname - overrides Name/Nickname"
 msgstr ""
 
-#: mod/admin.php:1191
-#, 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."
+#: mod/crepair.php:170
+msgid "Account URL"
 msgstr ""
 
-#: mod/admin.php:1235
-#, php-format
-msgid "%s user blocked/unblocked"
-msgid_plural "%s users blocked/unblocked"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/admin.php:1242
-#, php-format
-msgid "%s user deleted"
-msgid_plural "%s users deleted"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/admin.php:1289
-#, php-format
-msgid "User '%s' deleted"
+#: mod/crepair.php:171
+msgid "Friend Request URL"
 msgstr ""
 
-#: mod/admin.php:1297
-#, php-format
-msgid "User '%s' unblocked"
+#: mod/crepair.php:172
+msgid "Friend Confirm URL"
 msgstr ""
 
-#: mod/admin.php:1297
-#, php-format
-msgid "User '%s' blocked"
+#: mod/crepair.php:173
+msgid "Notification Endpoint URL"
 msgstr ""
 
-#: mod/admin.php:1405 mod/admin.php:1418 mod/admin.php:1431 mod/admin.php:1447
-#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709
-msgid "Name"
+#: mod/crepair.php:174
+msgid "Poll/Feed URL"
 msgstr ""
 
-#: mod/admin.php:1405 mod/admin.php:1431
-msgid "Register date"
+#: mod/crepair.php:175
+msgid "New photo from this URL"
 msgstr ""
 
-#: mod/admin.php:1405 mod/admin.php:1431
-msgid "Last login"
+#: mod/delegate.php:101
+msgid "No potential page delegates located."
 msgstr ""
 
-#: mod/admin.php:1405 mod/admin.php:1431
-msgid "Last item"
+#: mod/delegate.php:132
+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/admin.php:1405 mod/settings.php:43
-msgid "Account"
+#: mod/delegate.php:133
+msgid "Existing Page Managers"
 msgstr ""
 
-#: mod/admin.php:1414
-msgid "Add User"
+#: mod/delegate.php:135
+msgid "Existing Page Delegates"
 msgstr ""
 
-#: mod/admin.php:1415
-msgid "select all"
+#: mod/delegate.php:137
+msgid "Potential Delegates"
 msgstr ""
 
-#: mod/admin.php:1416
-msgid "User registrations waiting for confirm"
+#: mod/delegate.php:139 mod/tagrm.php:95
+msgid "Remove"
 msgstr ""
 
-#: mod/admin.php:1417
-msgid "User waiting for permanent deletion"
+#: mod/delegate.php:140
+msgid "Add"
 msgstr ""
 
-#: mod/admin.php:1418
-msgid "Request date"
+#: mod/delegate.php:141
+msgid "No entries."
 msgstr ""
 
-#: mod/admin.php:1419
-msgid "No registrations."
+#: mod/dfrn_poll.php:104 mod/dfrn_poll.php:539
+#, php-format
+msgid "%1$s welcomes %2$s"
 msgstr ""
 
-#: mod/admin.php:1420
-msgid "Note from the user"
+#: mod/directory.php:37 mod/display.php:200 mod/viewcontacts.php:36
+#: mod/community.php:18 mod/dfrn_request.php:804 mod/photos.php:979
+#: mod/probe.php:9 mod/search.php:93 mod/search.php:99 mod/videos.php:198
+#: mod/webfinger.php:8
+msgid "Public access denied."
 msgstr ""
 
-#: mod/admin.php:1421 mod/notifications.php:176 mod/notifications.php:255
-msgid "Approve"
+#: mod/directory.php:199 view/theme/vier/theme.php:199
+msgid "Global Directory"
 msgstr ""
 
-#: mod/admin.php:1422
-msgid "Deny"
+#: mod/directory.php:201
+msgid "Find on this site"
 msgstr ""
 
-#: mod/admin.php:1424 mod/contacts.php:613 mod/contacts.php:813
-#: mod/contacts.php:991
-msgid "Block"
+#: mod/directory.php:203
+msgid "Results for:"
 msgstr ""
 
-#: mod/admin.php:1425 mod/contacts.php:613 mod/contacts.php:813
-#: mod/contacts.php:991
-msgid "Unblock"
+#: mod/directory.php:205
+msgid "Site Directory"
 msgstr ""
 
-#: mod/admin.php:1426
-msgid "Site admin"
+#: mod/directory.php:212
+msgid "No entries (some entries may be hidden)."
 msgstr ""
 
-#: mod/admin.php:1427
-msgid "Account expired"
+#: mod/display.php:328 mod/cal.php:143 mod/profile.php:155
+msgid "Access to this profile has been restricted."
 msgstr ""
 
-#: mod/admin.php:1430
-msgid "New User"
+#: mod/display.php:479
+msgid "Item has been removed."
 msgstr ""
 
-#: mod/admin.php:1431
-msgid "Deleted since"
+#: mod/editpost.php:17 mod/editpost.php:27
+msgid "Item not found"
 msgstr ""
 
-#: mod/admin.php:1436
-msgid ""
-"Selected users will be deleted!\\n\\nEverything these users had posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
+#: mod/editpost.php:32
+msgid "Edit post"
 msgstr ""
 
-#: mod/admin.php:1437
-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/fbrowser.php:132
+msgid "Files"
 msgstr ""
 
-#: mod/admin.php:1447
-msgid "Name of the new user."
+#: mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 mod/help.php:53
+#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:298
+msgid "Not Found"
 msgstr ""
 
-#: mod/admin.php:1448
-msgid "Nickname"
+#: mod/filer.php:30
+msgid "- select -"
 msgstr ""
 
-#: mod/admin.php:1448
-msgid "Nickname of the new user."
+#: mod/fsuggest.php:64
+msgid "Friend suggestion sent."
 msgstr ""
 
-#: mod/admin.php:1449
-msgid "Email address of the new user."
+#: mod/fsuggest.php:98
+msgid "Suggest Friends"
 msgstr ""
 
-#: mod/admin.php:1492
+#: mod/fsuggest.php:100
 #, php-format
-msgid "Plugin %s disabled."
+msgid "Suggest a friend for %s"
 msgstr ""
 
-#: mod/admin.php:1496
-#, php-format
-msgid "Plugin %s enabled."
+#: mod/hcard.php:11
+msgid "No profile"
 msgstr ""
 
-#: mod/admin.php:1507 mod/admin.php:1759
-msgid "Disable"
+#: mod/help.php:41
+msgid "Help:"
 msgstr ""
 
-#: mod/admin.php:1509 mod/admin.php:1761
-msgid "Enable"
+#: mod/help.php:56 index.php:301
+msgid "Page not found."
 msgstr ""
 
-#: mod/admin.php:1532 mod/admin.php:1808
-msgid "Toggle"
+#: mod/home.php:39
+#, php-format
+msgid "Welcome to %s"
 msgstr ""
 
-#: mod/admin.php:1540 mod/admin.php:1817
-msgid "Author: "
+#: mod/invite.php:28
+msgid "Total invitation limit exceeded."
 msgstr ""
 
-#: mod/admin.php:1541 mod/admin.php:1818
-msgid "Maintainer: "
+#: mod/invite.php:51
+#, php-format
+msgid "%s : Not a valid email address."
 msgstr ""
 
-#: mod/admin.php:1596
-msgid "Reload active plugins"
+#: mod/invite.php:76
+msgid "Please join us on Friendica"
 msgstr ""
 
-#: mod/admin.php:1601
-#, 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/invite.php:87
+msgid "Invitation limit exceeded. Please contact your site administrator."
 msgstr ""
 
-#: mod/admin.php:1720
-msgid "No themes found."
+#: mod/invite.php:91
+#, php-format
+msgid "%s : Message delivery failed."
 msgstr ""
 
-#: mod/admin.php:1799
-msgid "Screenshot"
-msgstr ""
+#: mod/invite.php:95
+#, php-format
+msgid "%d message sent."
+msgid_plural "%d messages sent."
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/admin.php:1859
-msgid "Reload active themes"
+#: mod/invite.php:114
+msgid "You have no more invitations available"
 msgstr ""
 
-#: mod/admin.php:1864
+#: mod/invite.php:122
 #, php-format
-msgid "No themes found on the system. They should be paced in %1$s"
+msgid ""
+"Visit %s for a list of public sites that you can join. Friendica members on "
+"other sites can all connect with each other, as well as with members of many "
+"other social networks."
 msgstr ""
 
-#: mod/admin.php:1865
-msgid "[Experimental]"
+#: mod/invite.php:124
+#, php-format
+msgid ""
+"To accept this invitation, please visit and register at %s or any other "
+"public Friendica website."
 msgstr ""
 
-#: mod/admin.php:1866
-msgid "[Unsupported]"
+#: mod/invite.php:125
+#, php-format
+msgid ""
+"Friendica sites all inter-connect to create a huge privacy-enhanced social "
+"web that is owned and controlled by its members. They can also connect with "
+"many traditional social networks. See %s for a list of alternate Friendica "
+"sites you can join."
 msgstr ""
 
-#: mod/admin.php:1890
-msgid "Log settings updated."
+#: mod/invite.php:128
+msgid ""
+"Our apologies. This system is not currently configured to connect with other "
+"public sites or invite members."
 msgstr ""
 
-#: mod/admin.php:1922
-msgid "PHP log currently enabled."
+#: mod/invite.php:134
+msgid "Send invitations"
 msgstr ""
 
-#: mod/admin.php:1924
-msgid "PHP log currently disabled."
+#: mod/invite.php:135
+msgid "Enter email addresses, one per line:"
 msgstr ""
 
-#: mod/admin.php:1933
-msgid "Clear"
+#: mod/invite.php:136 mod/wallmessage.php:135 mod/message.php:332
+#: mod/message.php:515
+msgid "Your message:"
 msgstr ""
 
-#: mod/admin.php:1938
-msgid "Enable Debugging"
+#: mod/invite.php:137
+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/admin.php:1939
-msgid "Log file"
+#: mod/invite.php:139
+msgid "You will need to supply this invitation code: $invite_code"
 msgstr ""
 
-#: mod/admin.php:1939
+#: mod/invite.php:139
 msgid ""
-"Must be writable by web server. Relative to your Friendica top-level "
-"directory."
+"Once you have registered, please connect with me via my profile page at:"
 msgstr ""
 
-#: mod/admin.php:1940
-msgid "Log level"
+#: mod/invite.php:141
+msgid ""
+"For more information about the Friendica project and why we feel it is "
+"important, please visit http://friendica.com"
 msgstr ""
 
-#: mod/admin.php:1943
-msgid "PHP logging"
+#: mod/localtime.php:24
+msgid "Time Conversion"
 msgstr ""
 
-#: mod/admin.php:1944
+#: mod/localtime.php:26
 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."
+"Friendica provides this service for sharing events with other networks and "
+"friends in unknown timezones."
 msgstr ""
 
-#: mod/admin.php:2074 mod/admin.php:2075 mod/settings.php:782
-msgid "Off"
+#: mod/localtime.php:30
+#, php-format
+msgid "UTC time: %s"
 msgstr ""
 
-#: mod/admin.php:2074 mod/admin.php:2075 mod/settings.php:782
-msgid "On"
+#: mod/localtime.php:33
+#, php-format
+msgid "Current timezone: %s"
 msgstr ""
 
-#: mod/admin.php:2075
+#: mod/localtime.php:36
 #, php-format
-msgid "Lock feature %s"
+msgid "Converted localtime: %s"
 msgstr ""
 
-#: mod/admin.php:2083
-msgid "Manage Additional Features"
+#: mod/localtime.php:41
+msgid "Please select your timezone:"
 msgstr ""
 
-#: mod/allfriends.php:46
-msgid "No friends to display."
+#: mod/lockview.php:32 mod/lockview.php:40
+msgid "Remote privacy information not available."
 msgstr ""
 
-#: mod/api.php:76 mod/api.php:102
-msgid "Authorize application connection"
+#: mod/lockview.php:49
+msgid "Visible to:"
 msgstr ""
 
-#: mod/api.php:77
-msgid "Return to your app and insert this Securty Code:"
+#: mod/lostpass.php:19
+msgid "No valid account found."
 msgstr ""
 
-#: mod/api.php:89
-msgid "Please login to continue."
+#: mod/lostpass.php:35
+msgid "Password reset request issued. Check your email."
 msgstr ""
 
-#: mod/api.php:104
+#: mod/lostpass.php:41
+#, php-format
 msgid ""
-"Do you want to authorize this application to access your posts and contacts, "
-"and/or create new posts for you?"
+"\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/api.php:106 mod/dfrn_request.php:875 mod/follow.php:113
-#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:669
-#: mod/register.php:246 mod/settings.php:1171 mod/settings.php:1177
-#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193
-#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208
-#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236
-#: mod/settings.php:1237 mod/settings.php:1238
-msgid "No"
+#: mod/lostpass.php:52
+#, 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/apps.php:11
-msgid "Applications"
+#: mod/lostpass.php:71
+#, php-format
+msgid "Password reset requested at %s"
 msgstr ""
 
-#: mod/apps.php:14
-msgid "No installed applications."
+#: mod/lostpass.php:91
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
 msgstr ""
 
-#: mod/attach.php:8
-msgid "Item not available."
+#: mod/lostpass.php:110 boot.php:1882
+msgid "Password Reset"
 msgstr ""
 
-#: mod/attach.php:20
-msgid "Item was not found."
+#: mod/lostpass.php:111
+msgid "Your password has been reset as requested."
 msgstr ""
 
-#: mod/babel.php:17
-msgid "Source (bbcode) text:"
+#: mod/lostpass.php:112
+msgid "Your new password is"
 msgstr ""
 
-#: mod/babel.php:23
-msgid "Source (Diaspora) text to convert to BBcode:"
+#: mod/lostpass.php:113
+msgid "Save or copy your new password - and then"
 msgstr ""
 
-#: mod/babel.php:31
-msgid "Source input: "
+#: mod/lostpass.php:114
+msgid "click here to login"
 msgstr ""
 
-#: mod/babel.php:35
-msgid "bb2html (raw HTML): "
+#: mod/lostpass.php:115
+msgid ""
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
 msgstr ""
 
-#: mod/babel.php:39
-msgid "bb2html: "
+#: mod/lostpass.php:125
+#, 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/babel.php:43
-msgid "bb2html2bb: "
+#: mod/lostpass.php:131
+#, php-format
+msgid ""
+"\n"
+"\t\t\t\tYour login details are as follows:\n"
+"\n"
+"\t\t\t\tSite Location:\t%1$s\n"
+"\t\t\t\tLogin Name:\t%2$s\n"
+"\t\t\t\tPassword:\t%3$s\n"
+"\n"
+"\t\t\t\tYou may change that password from your account settings page after "
+"logging in.\n"
+"\t\t\t"
 msgstr ""
 
-#: mod/babel.php:47
-msgid "bb2md: "
+#: mod/lostpass.php:147
+#, php-format
+msgid "Your password has been changed at %s"
 msgstr ""
 
-#: mod/babel.php:51
-msgid "bb2md2html: "
+#: mod/lostpass.php:159
+msgid "Forgot your Password?"
 msgstr ""
 
-#: mod/babel.php:55
-msgid "bb2dia2bb: "
+#: mod/lostpass.php:160
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
 msgstr ""
 
-#: mod/babel.php:59
-msgid "bb2md2html2bb: "
+#: mod/lostpass.php:161 boot.php:1870
+msgid "Nickname or Email: "
 msgstr ""
 
-#: mod/babel.php:69
-msgid "Source input (Diaspora format): "
+#: mod/lostpass.php:162
+msgid "Reset"
 msgstr ""
 
-#: mod/babel.php:74
-msgid "diaspora2bb: "
+#: mod/maintenance.php:20
+msgid "System down for maintenance"
 msgstr ""
 
-#: mod/bookmarklet.php:41
-msgid "The post was created"
+#: mod/match.php:35
+msgid "No keywords to match. Please add keywords to your default profile."
 msgstr ""
 
-#: mod/cal.php:143 mod/display.php:328 mod/profile.php:154
-msgid "Access to this profile has been restricted."
+#: mod/match.php:88
+msgid "is interested in:"
 msgstr ""
 
-#: mod/cal.php:271 mod/events.php:387
-msgid "View"
+#: mod/match.php:102
+msgid "Profile Match"
 msgstr ""
 
-#: mod/cal.php:272 mod/events.php:389
-msgid "Previous"
+#: mod/match.php:109 mod/dirfind.php:245
+msgid "No matches"
 msgstr ""
 
-#: mod/cal.php:273 mod/events.php:390 mod/install.php:235
-msgid "Next"
+#: mod/mood.php:134
+msgid "Mood"
 msgstr ""
 
-#: mod/cal.php:282 mod/events.php:399
-msgid "list"
+#: mod/mood.php:135
+msgid "Set your current mood and tell your friends"
 msgstr ""
 
-#: mod/cal.php:292
-msgid "User not found"
+#: mod/newmember.php:6
+msgid "Welcome to Friendica"
 msgstr ""
 
-#: mod/cal.php:308
-msgid "This calendar format is not supported"
+#: mod/newmember.php:8
+msgid "New Member Checklist"
 msgstr ""
 
-#: mod/cal.php:310
-msgid "No exportable data found"
+#: mod/newmember.php:12
+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/cal.php:325
-msgid "calendar"
+#: mod/newmember.php:14
+msgid "Getting Started"
 msgstr ""
 
-#: mod/common.php:91
-msgid "No contacts in common."
+#: mod/newmember.php:18
+msgid "Friendica Walk-Through"
 msgstr ""
 
-#: mod/common.php:141 mod/contacts.php:871
-msgid "Common Friends"
+#: mod/newmember.php:18
+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/community.php:22 mod/dfrn_request.php:799 mod/directory.php:37
-#: mod/display.php:200 mod/photos.php:964 mod/search.php:93 mod/search.php:99
-#: mod/videos.php:198 mod/viewcontacts.php:36
-msgid "Public access denied."
+#: mod/newmember.php:26
+msgid "Go to Your Settings"
 msgstr ""
 
-#: mod/community.php:27
-msgid "Not available."
+#: mod/newmember.php:26
+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/community.php:54 mod/search.php:224
-msgid "No results."
+#: mod/newmember.php:28
+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/contacts.php:134
-#, php-format
-msgid "%d contact edited."
-msgid_plural "%d contacts edited."
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/contacts.php:169 mod/contacts.php:378
-msgid "Could not access contact record."
+#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:700
+msgid "Upload Profile Photo"
 msgstr ""
 
-#: mod/contacts.php:183
-msgid "Could not locate selected profile."
+#: mod/newmember.php:36
+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/contacts.php:216
-msgid "Contact updated."
+#: mod/newmember.php:38
+msgid "Edit Your Profile"
 msgstr ""
 
-#: mod/contacts.php:218 mod/dfrn_request.php:588
-msgid "Failed to update contact record."
+#: mod/newmember.php:38
+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/contacts.php:399
-msgid "Contact has been blocked"
+#: mod/newmember.php:40
+msgid "Profile Keywords"
 msgstr ""
 
-#: mod/contacts.php:399
-msgid "Contact has been unblocked"
+#: mod/newmember.php:40
+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/contacts.php:410
-msgid "Contact has been ignored"
+#: mod/newmember.php:44
+msgid "Connecting"
 msgstr ""
 
-#: mod/contacts.php:410
-msgid "Contact has been unignored"
+#: mod/newmember.php:51
+msgid "Importing Emails"
 msgstr ""
 
-#: mod/contacts.php:422
-msgid "Contact has been archived"
+#: mod/newmember.php:51
+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"
 msgstr ""
 
-#: mod/contacts.php:422
-msgid "Contact has been unarchived"
+#: mod/newmember.php:53
+msgid "Go to Your Contacts Page"
 msgstr ""
 
-#: mod/contacts.php:447
-msgid "Drop contact"
+#: mod/newmember.php:53
+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/contacts.php:450 mod/contacts.php:809
-msgid "Do you really want to delete this contact?"
+#: mod/newmember.php:55
+msgid "Go to Your Site's Directory"
 msgstr ""
 
-#: mod/contacts.php:469
-msgid "Contact has been removed."
+#: mod/newmember.php:55
+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."
 msgstr ""
 
-#: mod/contacts.php:506
-#, php-format
-msgid "You are mutual friends with %s"
+#: mod/newmember.php:57
+msgid "Finding New People"
 msgstr ""
 
-#: mod/contacts.php:510
-#, php-format
-msgid "You are sharing with %s"
+#: mod/newmember.php:57
+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/contacts.php:515
-#, php-format
-msgid "%s is sharing with you"
+#: mod/newmember.php:65
+msgid "Group Your Contacts"
 msgstr ""
 
-#: mod/contacts.php:535
-msgid "Private communications are not available for this contact."
+#: mod/newmember.php:65
+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/contacts.php:542
-msgid "(Update was successful)"
+#: mod/newmember.php:68
+msgid "Why Aren't My Posts Public?"
 msgstr ""
 
-#: mod/contacts.php:542
-msgid "(Update was not successful)"
+#: mod/newmember.php:68
+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/contacts.php:544 mod/contacts.php:972
-msgid "Suggest friends"
+#: mod/newmember.php:73
+msgid "Getting Help"
 msgstr ""
 
-#: mod/contacts.php:548
-#, php-format
-msgid "Network type: %s"
+#: mod/newmember.php:77
+msgid "Go to the Help Section"
 msgstr ""
 
-#: mod/contacts.php:561
-msgid "Communications lost with this contact!"
+#: mod/newmember.php:77
+msgid ""
+"Our <strong>help</strong> pages may be consulted for detail on other program "
+"features and resources."
 msgstr ""
 
-#: mod/contacts.php:564
-msgid "Fetch further information for feeds"
+#: mod/nogroup.php:65
+msgid "Contacts who are not members of a group"
 msgstr ""
 
-#: mod/contacts.php:565
-msgid "Fetch information"
+#: mod/notify.php:65
+msgid "No more system notifications."
 msgstr ""
 
-#: mod/contacts.php:565
-msgid "Fetch information and keywords"
+#: mod/notify.php:69 mod/notifications.php:111
+msgid "System Notifications"
 msgstr ""
 
-#: mod/contacts.php:583
-msgid "Contact"
+#: mod/oexchange.php:21
+msgid "Post successful."
 msgstr ""
 
-#: mod/contacts.php:585 mod/content.php:728 mod/crepair.php:156
-#: mod/events.php:513 mod/fsuggest.php:108 mod/install.php:276
-#: mod/install.php:316 mod/invite.php:142 mod/localtime.php:45
-#: mod/manage.php:145 mod/message.php:338 mod/message.php:521 mod/mood.php:138
-#: mod/photos.php:1124 mod/photos.php:1246 mod/photos.php:1562
-#: mod/photos.php:1612 mod/photos.php:1660 mod/photos.php:1746
-#: mod/poke.php:203 mod/profiles.php:680 object/Item.php:705
-#: view/theme/duepuntozero/config.php:61 view/theme/frio/config.php:64
-#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112
-msgid "Submit"
+#: mod/ostatus_subscribe.php:14
+msgid "Subscribing to OStatus contacts"
 msgstr ""
 
-#: mod/contacts.php:586
-msgid "Profile Visibility"
+#: mod/ostatus_subscribe.php:25
+msgid "No contact provided."
 msgstr ""
 
-#: mod/contacts.php:587
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
+#: mod/ostatus_subscribe.php:31
+msgid "Couldn't fetch information for contact."
 msgstr ""
 
-#: mod/contacts.php:588
-msgid "Contact Information / Notes"
+#: mod/ostatus_subscribe.php:40
+msgid "Couldn't fetch friends for contact."
 msgstr ""
 
-#: mod/contacts.php:589
-msgid "Edit contact notes"
+#: mod/ostatus_subscribe.php:54 mod/repair_ostatus.php:44
+msgid "Done"
 msgstr ""
 
-#: mod/contacts.php:594 mod/contacts.php:938 mod/nogroup.php:43
-#: mod/viewcontacts.php:102
-#, php-format
-msgid "Visit %s's profile [%s]"
+#: mod/ostatus_subscribe.php:68
+msgid "success"
 msgstr ""
 
-#: mod/contacts.php:595
-msgid "Block/Unblock contact"
+#: mod/ostatus_subscribe.php:70
+msgid "failed"
 msgstr ""
 
-#: mod/contacts.php:596
-msgid "Ignore contact"
+#: mod/ostatus_subscribe.php:78 mod/repair_ostatus.php:50
+msgid "Keep this window open until done."
 msgstr ""
 
-#: mod/contacts.php:597
-msgid "Repair URL settings"
+#: mod/p.php:9
+msgid "Not Extended"
 msgstr ""
 
-#: mod/contacts.php:598
-msgid "View conversations"
+#: mod/poke.php:196
+msgid "Poke/Prod"
 msgstr ""
 
-#: mod/contacts.php:604
-msgid "Last update:"
+#: mod/poke.php:197
+msgid "poke, prod or do other things to somebody"
 msgstr ""
 
-#: mod/contacts.php:606
-msgid "Update public posts"
+#: mod/poke.php:198
+msgid "Recipient"
 msgstr ""
 
-#: mod/contacts.php:608 mod/contacts.php:982
-msgid "Update now"
+#: mod/poke.php:199
+msgid "Choose what you wish to do to recipient"
 msgstr ""
 
-#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
-msgid "Unignore"
+#: mod/poke.php:202
+msgid "Make this post private"
 msgstr ""
 
-#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
-#: mod/notifications.php:60 mod/notifications.php:179
-#: mod/notifications.php:257
-msgid "Ignore"
+#: mod/profile_photo.php:44
+msgid "Image uploaded but image cropping failed."
 msgstr ""
 
-#: mod/contacts.php:618
-msgid "Currently blocked"
+#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93
+#: mod/profile_photo.php:323
+#, php-format
+msgid "Image size reduction [%s] failed."
 msgstr ""
 
-#: mod/contacts.php:619
-msgid "Currently ignored"
+#: mod/profile_photo.php:127
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
 msgstr ""
 
-#: mod/contacts.php:620
-msgid "Currently archived"
+#: mod/profile_photo.php:137
+msgid "Unable to process image"
 msgstr ""
 
-#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:245
-msgid "Hide this contact from others"
+#: mod/profile_photo.php:156 mod/photos.php:813 mod/wall_upload.php:181
+#, php-format
+msgid "Image exceeds size limit of %s"
 msgstr ""
 
-#: mod/contacts.php:621
-msgid ""
-"Replies/likes to your public posts <strong>may</strong> still be visible"
+#: mod/profile_photo.php:165 mod/photos.php:854 mod/wall_upload.php:218
+msgid "Unable to process image."
 msgstr ""
 
-#: mod/contacts.php:622
-msgid "Notification for new posts"
+#: mod/profile_photo.php:254
+msgid "Upload File:"
 msgstr ""
 
-#: mod/contacts.php:622
-msgid "Send a notification of every new post of this contact"
+#: mod/profile_photo.php:255
+msgid "Select a profile:"
 msgstr ""
 
-#: mod/contacts.php:625
-msgid "Blacklisted keywords"
+#: mod/profile_photo.php:257
+msgid "Upload"
 msgstr ""
 
-#: mod/contacts.php:625
-msgid ""
-"Comma separated list of keywords that should not be converted to hashtags, "
-"when \"Fetch information and keywords\" is selected"
+#: mod/profile_photo.php:260
+msgid "or"
 msgstr ""
 
-#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:249
-msgid "Profile URL"
+#: mod/profile_photo.php:260
+msgid "skip this step"
 msgstr ""
 
-#: mod/contacts.php:643
-msgid "Actions"
+#: mod/profile_photo.php:260
+msgid "select a photo from your photo albums"
 msgstr ""
 
-#: mod/contacts.php:646
-msgid "Contact Settings"
+#: mod/profile_photo.php:274
+msgid "Crop Image"
 msgstr ""
 
-#: mod/contacts.php:692
-msgid "Suggestions"
+#: mod/profile_photo.php:275
+msgid "Please adjust the image cropping for optimum viewing."
 msgstr ""
 
-#: mod/contacts.php:695
-msgid "Suggest potential friends"
+#: mod/profile_photo.php:277
+msgid "Done Editing"
 msgstr ""
 
-#: mod/contacts.php:700 mod/group.php:202
-msgid "All Contacts"
+#: mod/profile_photo.php:313
+msgid "Image uploaded successfully."
 msgstr ""
 
-#: mod/contacts.php:703
-msgid "Show all contacts"
+#: mod/profile_photo.php:315 mod/photos.php:883 mod/wall_upload.php:257
+msgid "Image upload failed."
 msgstr ""
 
-#: mod/contacts.php:708
-msgid "Unblocked"
+#: mod/profperm.php:20 mod/group.php:76 index.php:406
+msgid "Permission denied"
 msgstr ""
 
-#: mod/contacts.php:711
-msgid "Only show unblocked contacts"
+#: mod/profperm.php:26 mod/profperm.php:57
+msgid "Invalid profile identifier."
 msgstr ""
 
-#: mod/contacts.php:717
-msgid "Blocked"
+#: mod/profperm.php:103
+msgid "Profile Visibility Editor"
 msgstr ""
 
-#: mod/contacts.php:720
-msgid "Only show blocked contacts"
+#: mod/profperm.php:107 mod/group.php:262
+msgid "Click on a contact to add or remove."
 msgstr ""
 
-#: mod/contacts.php:726
-msgid "Ignored"
+#: mod/profperm.php:116
+msgid "Visible To"
 msgstr ""
 
-#: mod/contacts.php:729
-msgid "Only show ignored contacts"
+#: mod/profperm.php:132
+msgid "All Contacts (with secure profile access)"
 msgstr ""
 
-#: mod/contacts.php:735
-msgid "Archived"
+#: mod/regmod.php:58
+msgid "Account approved."
 msgstr ""
 
-#: mod/contacts.php:738
-msgid "Only show archived contacts"
+#: mod/regmod.php:95
+#, php-format
+msgid "Registration revoked for %s"
 msgstr ""
 
-#: mod/contacts.php:744
-msgid "Hidden"
+#: mod/regmod.php:107
+msgid "Please login."
 msgstr ""
 
-#: mod/contacts.php:747
-msgid "Only show hidden contacts"
+#: mod/removeme.php:52 mod/removeme.php:55
+msgid "Remove My Account"
 msgstr ""
 
-#: mod/contacts.php:804
-msgid "Search your contacts"
+#: mod/removeme.php:53
+msgid ""
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
 msgstr ""
 
-#: mod/contacts.php:805 mod/network.php:145 mod/search.php:232
-#, php-format
-msgid "Results for: %s"
+#: mod/removeme.php:54
+msgid "Please enter your password for verification:"
 msgstr ""
 
-#: mod/contacts.php:812 mod/settings.php:160 mod/settings.php:707
-msgid "Update"
+#: mod/repair_ostatus.php:14
+msgid "Resubscribing to OStatus contacts"
 msgstr ""
 
-#: mod/contacts.php:815 mod/contacts.php:1007
-msgid "Archive"
+#: mod/repair_ostatus.php:30
+msgid "Error"
 msgstr ""
 
-#: mod/contacts.php:815 mod/contacts.php:1007
-msgid "Unarchive"
+#: mod/subthread.php:104
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
 msgstr ""
 
-#: mod/contacts.php:818
-msgid "Batch Actions"
+#: mod/suggest.php:27
+msgid "Do you really want to delete this suggestion?"
 msgstr ""
 
-#: mod/contacts.php:864
-msgid "View all contacts"
+#: mod/suggest.php:71
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
 msgstr ""
 
-#: mod/contacts.php:874
-msgid "View all common friends"
+#: mod/suggest.php:84 mod/suggest.php:104
+msgid "Ignore/Hide"
 msgstr ""
 
-#: mod/contacts.php:881
-msgid "Advanced Contact Settings"
+#: mod/tagrm.php:43
+msgid "Tag removed"
 msgstr ""
 
-#: mod/contacts.php:915
-msgid "Mutual Friendship"
+#: mod/tagrm.php:82
+msgid "Remove Item Tag"
 msgstr ""
 
-#: mod/contacts.php:919
-msgid "is a fan of yours"
+#: mod/tagrm.php:84
+msgid "Select a tag to remove: "
 msgstr ""
 
-#: mod/contacts.php:923
-msgid "you are a fan of"
+#: mod/uimport.php:51 mod/register.php:198
+msgid ""
+"This site has exceeded the number of allowed daily account registrations. "
+"Please try again tomorrow."
 msgstr ""
 
-#: mod/contacts.php:939 mod/nogroup.php:44
-msgid "Edit contact"
+#: mod/uimport.php:66 mod/register.php:295
+msgid "Import"
 msgstr ""
 
-#: mod/contacts.php:993
-msgid "Toggle Blocked status"
+#: mod/uimport.php:68
+msgid "Move account"
 msgstr ""
 
-#: mod/contacts.php:1001
-msgid "Toggle Ignored status"
+#: mod/uimport.php:69
+msgid "You can import an account from another Friendica server."
 msgstr ""
 
-#: mod/contacts.php:1009
-msgid "Toggle Archive status"
+#: mod/uimport.php:70
+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/contacts.php:1017
-msgid "Delete contact"
+#: mod/uimport.php:71
+msgid ""
+"This feature is experimental. We can't import contacts from the OStatus "
+"network (GNU Social/Statusnet) or from Diaspora"
 msgstr ""
 
-#: mod/content.php:119 mod/network.php:468
-msgid "No such group"
+#: mod/uimport.php:72
+msgid "Account file"
 msgstr ""
 
-#: mod/content.php:130 mod/group.php:203 mod/network.php:495
-msgid "Group is empty"
+#: mod/uimport.php:72
+msgid ""
+"To export your account, go to \"Settings->Export your personal data\" and "
+"select \"Export account\""
 msgstr ""
 
-#: mod/content.php:135 mod/network.php:499
-#, php-format
-msgid "Group: %s"
+#: mod/update_community.php:19 mod/update_display.php:23
+#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35
+msgid "[Embedded content - reload page to view]"
 msgstr ""
 
-#: mod/content.php:325 object/Item.php:96
-msgid "This entry was edited"
+#: mod/viewcontacts.php:75
+msgid "No contacts."
 msgstr ""
 
-#: mod/content.php:621 object/Item.php:417
-#, php-format
-msgid "%d comment"
-msgid_plural "%d comments"
-msgstr[0] ""
-msgstr[1] ""
+#: mod/viewsrc.php:7
+msgid "Access denied."
+msgstr ""
 
-#: mod/content.php:638 mod/photos.php:1402 object/Item.php:117
-msgid "Private Message"
+#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76
+#: 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."
 msgstr ""
 
-#: mod/content.php:702 mod/photos.php:1590 object/Item.php:274
-msgid "I like this (toggle)"
+#: mod/wall_attach.php:94
+msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
 msgstr ""
 
-#: mod/content.php:702 object/Item.php:274
-msgid "like"
+#: mod/wall_attach.php:94
+msgid "Or - did you try to upload an empty file?"
 msgstr ""
 
-#: mod/content.php:703 mod/photos.php:1591 object/Item.php:275
-msgid "I don't like this (toggle)"
+#: mod/wall_attach.php:105
+#, php-format
+msgid "File exceeds size limit of %s"
 msgstr ""
 
-#: mod/content.php:703 object/Item.php:275
-msgid "dislike"
+#: mod/wall_attach.php:158 mod/wall_attach.php:174
+msgid "File upload failed."
 msgstr ""
 
-#: mod/content.php:705 object/Item.php:278
-msgid "Share this"
+#: mod/wallmessage.php:42 mod/wallmessage.php:106
+#, php-format
+msgid "Number of daily wall messages for %s exceeded. Message failed."
 msgstr ""
 
-#: mod/content.php:705 object/Item.php:278
-msgid "share"
+#: mod/wallmessage.php:50 mod/message.php:60
+msgid "No recipient selected."
 msgstr ""
 
-#: mod/content.php:725 mod/photos.php:1609 mod/photos.php:1657
-#: mod/photos.php:1743 object/Item.php:702
-msgid "This is you"
+#: mod/wallmessage.php:53
+msgid "Unable to check your home location."
 msgstr ""
 
-#: mod/content.php:727 mod/content.php:950 mod/photos.php:1611
-#: mod/photos.php:1659 mod/photos.php:1745 object/Item.php:392
-#: object/Item.php:704
-msgid "Comment"
+#: mod/wallmessage.php:56 mod/message.php:67
+msgid "Message could not be sent."
 msgstr ""
 
-#: mod/content.php:729 object/Item.php:706
-msgid "Bold"
+#: mod/wallmessage.php:59 mod/message.php:70
+msgid "Message collection failure."
 msgstr ""
 
-#: mod/content.php:730 object/Item.php:707
-msgid "Italic"
+#: mod/wallmessage.php:62 mod/message.php:73
+msgid "Message sent."
 msgstr ""
 
-#: mod/content.php:731 object/Item.php:708
-msgid "Underline"
+#: mod/wallmessage.php:80 mod/wallmessage.php:89
+msgid "No recipient."
 msgstr ""
 
-#: mod/content.php:732 object/Item.php:709
-msgid "Quote"
+#: mod/wallmessage.php:126 mod/message.php:322
+msgid "Send Private Message"
 msgstr ""
 
-#: mod/content.php:733 object/Item.php:710
-msgid "Code"
+#: mod/wallmessage.php:127
+#, php-format
+msgid ""
+"If you wish for %s to respond, please check that the privacy settings on "
+"your site allow private mail from unknown senders."
 msgstr ""
 
-#: mod/content.php:734 object/Item.php:711
-msgid "Image"
+#: mod/wallmessage.php:128 mod/message.php:323 mod/message.php:510
+msgid "To:"
 msgstr ""
 
-#: mod/content.php:735 object/Item.php:712
-msgid "Link"
-msgstr ""
-
-#: mod/content.php:736 object/Item.php:713
-msgid "Video"
-msgstr ""
-
-#: mod/content.php:746 mod/settings.php:743 object/Item.php:122
-#: object/Item.php:124
-msgid "Edit"
-msgstr ""
-
-#: mod/content.php:772 object/Item.php:238
-msgid "add star"
-msgstr ""
-
-#: mod/content.php:773 object/Item.php:239
-msgid "remove star"
-msgstr ""
-
-#: mod/content.php:774 object/Item.php:240
-msgid "toggle star status"
-msgstr ""
-
-#: mod/content.php:777 object/Item.php:243
-msgid "starred"
-msgstr ""
-
-#: mod/content.php:778 mod/content.php:800 object/Item.php:263
-msgid "add tag"
-msgstr ""
-
-#: mod/content.php:789 object/Item.php:251
-msgid "ignore thread"
-msgstr ""
-
-#: mod/content.php:790 object/Item.php:252
-msgid "unignore thread"
-msgstr ""
-
-#: mod/content.php:791 object/Item.php:253
-msgid "toggle ignore status"
-msgstr ""
-
-#: mod/content.php:794 mod/ostatus_subscribe.php:73 object/Item.php:256
-msgid "ignored"
-msgstr ""
-
-#: mod/content.php:805 object/Item.php:141
-msgid "save to folder"
-msgstr ""
-
-#: mod/content.php:853 object/Item.php:212
-msgid "I will attend"
-msgstr ""
-
-#: mod/content.php:853 object/Item.php:212
-msgid "I will not attend"
-msgstr ""
-
-#: mod/content.php:853 object/Item.php:212
-msgid "I might attend"
-msgstr ""
-
-#: mod/content.php:917 object/Item.php:358
-msgid "to"
-msgstr ""
-
-#: mod/content.php:918 object/Item.php:360
-msgid "Wall-to-Wall"
-msgstr ""
-
-#: mod/content.php:919 object/Item.php:361
-msgid "via Wall-To-Wall:"
-msgstr ""
-
-#: mod/credits.php:16
-msgid "Credits"
-msgstr ""
-
-#: mod/credits.php:17
-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/crepair.php:89
-msgid "Contact settings applied."
-msgstr ""
-
-#: mod/crepair.php:91
-msgid "Contact update failed."
-msgstr ""
-
-#: mod/crepair.php:116 mod/dfrn_confirm.php:126 mod/fsuggest.php:21
-#: mod/fsuggest.php:93
-msgid "Contact not found."
-msgstr ""
-
-#: mod/crepair.php:122
-msgid ""
-"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect "
-"information your communications with this contact may stop working."
-msgstr ""
-
-#: mod/crepair.php:123
-msgid ""
-"Please use your browser 'Back' button <strong>now</strong> if you are "
-"uncertain what to do on this page."
-msgstr ""
-
-#: mod/crepair.php:136 mod/crepair.php:138
-msgid "No mirroring"
-msgstr ""
-
-#: mod/crepair.php:136
-msgid "Mirror as forwarded posting"
+#: mod/wallmessage.php:129 mod/message.php:328 mod/message.php:512
+msgid "Subject:"
 msgstr ""
 
-#: mod/crepair.php:136 mod/crepair.php:138
-msgid "Mirror as my own posting"
+#: mod/babel.php:16
+msgid "Source (bbcode) text:"
 msgstr ""
 
-#: mod/crepair.php:152
-msgid "Return to contact editor"
+#: mod/babel.php:23
+msgid "Source (Diaspora) text to convert to BBcode:"
 msgstr ""
 
-#: mod/crepair.php:154
-msgid "Refetch contact data"
+#: mod/babel.php:31
+msgid "Source input: "
 msgstr ""
 
-#: mod/crepair.php:158
-msgid "Remote Self"
+#: mod/babel.php:35
+msgid "bb2html (raw HTML): "
 msgstr ""
 
-#: mod/crepair.php:161
-msgid "Mirror postings from this contact"
+#: mod/babel.php:39
+msgid "bb2html: "
 msgstr ""
 
-#: mod/crepair.php:163
-msgid ""
-"Mark this contact as remote_self, this will cause friendica to repost new "
-"entries from this contact."
+#: mod/babel.php:43
+msgid "bb2html2bb: "
 msgstr ""
 
-#: mod/crepair.php:168
-msgid "Account Nickname"
+#: mod/babel.php:47
+msgid "bb2md: "
 msgstr ""
 
-#: mod/crepair.php:169
-msgid "@Tagname - overrides Name/Nickname"
+#: mod/babel.php:51
+msgid "bb2md2html: "
 msgstr ""
 
-#: mod/crepair.php:170
-msgid "Account URL"
+#: mod/babel.php:55
+msgid "bb2dia2bb: "
 msgstr ""
 
-#: mod/crepair.php:171
-msgid "Friend Request URL"
+#: mod/babel.php:59
+msgid "bb2md2html2bb: "
 msgstr ""
 
-#: mod/crepair.php:172
-msgid "Friend Confirm URL"
+#: mod/babel.php:65
+msgid "Source input (Diaspora format): "
 msgstr ""
 
-#: mod/crepair.php:173
-msgid "Notification Endpoint URL"
+#: mod/babel.php:69
+msgid "diaspora2bb: "
 msgstr ""
 
-#: mod/crepair.php:174
-msgid "Poll/Feed URL"
+#: mod/cal.php:271 mod/events.php:375
+msgid "View"
 msgstr ""
 
-#: mod/crepair.php:175
-msgid "New photo from this URL"
+#: mod/cal.php:272 mod/events.php:377
+msgid "Previous"
 msgstr ""
 
-#: mod/delegate.php:101
-msgid "No potential page delegates located."
+#: mod/cal.php:273 mod/events.php:378 mod/install.php:201
+msgid "Next"
 msgstr ""
 
-#: mod/delegate.php:132
-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/cal.php:282 mod/events.php:387
+msgid "list"
 msgstr ""
 
-#: mod/delegate.php:133
-msgid "Existing Page Managers"
+#: mod/cal.php:292
+msgid "User not found"
 msgstr ""
 
-#: mod/delegate.php:135
-msgid "Existing Page Delegates"
+#: mod/cal.php:308
+msgid "This calendar format is not supported"
 msgstr ""
 
-#: mod/delegate.php:137
-msgid "Potential Delegates"
+#: mod/cal.php:310
+msgid "No exportable data found"
 msgstr ""
 
-#: mod/delegate.php:139 mod/tagrm.php:95
-msgid "Remove"
+#: mod/cal.php:325
+msgid "calendar"
 msgstr ""
 
-#: mod/delegate.php:140
-msgid "Add"
+#: mod/community.php:23
+msgid "Not available."
 msgstr ""
 
-#: mod/delegate.php:141
-msgid "No entries."
+#: mod/community.php:50 mod/search.php:219
+msgid "No results."
 msgstr ""
 
-#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:134
-#: mod/profiles.php:180 mod/profiles.php:619
+#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:135
+#: mod/profiles.php:182 mod/profiles.php:619
 msgid "Profile not found."
 msgstr ""
 
@@ -5404,56 +4914,51 @@ msgstr ""
 msgid "Empty site URL was provided or URL could not be decrypted by us."
 msgstr ""
 
-#: mod/dfrn_confirm.php:601
+#: mod/dfrn_confirm.php:602
 msgid "Contact record was not found for you on our site."
 msgstr ""
 
-#: mod/dfrn_confirm.php:615
+#: mod/dfrn_confirm.php:616
 #, php-format
 msgid "Site public key not available in contact record for URL %s."
 msgstr ""
 
-#: mod/dfrn_confirm.php:635
+#: mod/dfrn_confirm.php:636
 msgid ""
 "The ID provided by your system is a duplicate on our system. It should work "
 "if you try again."
 msgstr ""
 
-#: mod/dfrn_confirm.php:646
+#: mod/dfrn_confirm.php:647
 msgid "Unable to set your contact credentials on our system."
 msgstr ""
 
-#: mod/dfrn_confirm.php:708
+#: mod/dfrn_confirm.php:709
 msgid "Unable to update your contact profile details on our system"
 msgstr ""
 
-#: mod/dfrn_confirm.php:780
+#: mod/dfrn_confirm.php:781
 #, php-format
 msgid "%1$s has joined %2$s"
 msgstr ""
 
-#: mod/dfrn_poll.php:104 mod/dfrn_poll.php:539
-#, php-format
-msgid "%1$s welcomes %2$s"
-msgstr ""
-
 #: mod/dfrn_request.php:101
 msgid "This introduction has already been accepted."
 msgstr ""
 
-#: mod/dfrn_request.php:124 mod/dfrn_request.php:523
+#: mod/dfrn_request.php:124 mod/dfrn_request.php:528
 msgid "Profile location is not valid or does not contain profile information."
 msgstr ""
 
-#: mod/dfrn_request.php:129 mod/dfrn_request.php:528
+#: mod/dfrn_request.php:129 mod/dfrn_request.php:533
 msgid "Warning: profile location has no identifiable owner name."
 msgstr ""
 
-#: mod/dfrn_request.php:132 mod/dfrn_request.php:531
+#: mod/dfrn_request.php:132 mod/dfrn_request.php:536
 msgid "Warning: profile location has no profile photo."
 msgstr ""
 
-#: mod/dfrn_request.php:136 mod/dfrn_request.php:535
+#: mod/dfrn_request.php:136 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"
@@ -5510,119 +5015,99 @@ msgstr ""
 msgid "Invalid profile URL."
 msgstr ""
 
-#: mod/dfrn_request.php:609
+#: mod/dfrn_request.php:614
 msgid "Your introduction has been sent."
 msgstr ""
 
-#: mod/dfrn_request.php:651
+#: mod/dfrn_request.php:656
 msgid ""
 "Remote subscription can't be done for your network. Please subscribe "
 "directly on your system."
 msgstr ""
 
-#: mod/dfrn_request.php:672
+#: mod/dfrn_request.php:677
 msgid "Please login to confirm introduction."
 msgstr ""
 
-#: mod/dfrn_request.php:682
+#: mod/dfrn_request.php:687
 msgid ""
 "Incorrect identity currently logged in. Please login to <strong>this</"
 "strong> profile."
 msgstr ""
 
-#: mod/dfrn_request.php:696 mod/dfrn_request.php:713
+#: mod/dfrn_request.php:701 mod/dfrn_request.php:718
 msgid "Confirm"
 msgstr ""
 
-#: mod/dfrn_request.php:708
+#: mod/dfrn_request.php:713
 msgid "Hide this contact"
 msgstr ""
 
-#: mod/dfrn_request.php:711
+#: mod/dfrn_request.php:716
 #, php-format
 msgid "Welcome home %s."
 msgstr ""
 
-#: mod/dfrn_request.php:712
+#: mod/dfrn_request.php:717
 #, php-format
 msgid "Please confirm your introduction/connection request to %s."
 msgstr ""
 
-#: mod/dfrn_request.php:843
+#: mod/dfrn_request.php:848
 msgid ""
 "Please enter your 'Identity Address' from one of the following supported "
 "communications networks:"
 msgstr ""
 
-#: mod/dfrn_request.php:867
+#: 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>."
 msgstr ""
 
-#: mod/dfrn_request.php:872
+#: mod/dfrn_request.php:877
 msgid "Friend/Connection Request"
 msgstr ""
 
-#: mod/dfrn_request.php:873
+#: mod/dfrn_request.php:878
 msgid ""
 "Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
 "testuser@identi.ca"
 msgstr ""
 
-#: mod/dfrn_request.php:874 mod/follow.php:112
+#: mod/dfrn_request.php:879 mod/follow.php:112
 msgid "Please answer the following:"
 msgstr ""
 
-#: mod/dfrn_request.php:875 mod/follow.php:113
+#: mod/dfrn_request.php:880 mod/follow.php:113
 #, php-format
 msgid "Does %s know you?"
 msgstr ""
 
-#: mod/dfrn_request.php:879 mod/follow.php:114
+#: mod/dfrn_request.php:884 mod/follow.php:114
 msgid "Add a personal note:"
 msgstr ""
 
-#: mod/dfrn_request.php:882
+#: mod/dfrn_request.php:887
 msgid "StatusNet/Federated Social Web"
 msgstr ""
 
-#: mod/dfrn_request.php:884
+#: mod/dfrn_request.php:889
 #, php-format
 msgid ""
 " - please do not use this form.  Instead, enter %s into your Diaspora search "
 "bar."
 msgstr ""
 
-#: mod/dfrn_request.php:885 mod/follow.php:120
+#: mod/dfrn_request.php:890 mod/follow.php:120
 msgid "Your Identity Address:"
 msgstr ""
 
-#: mod/dfrn_request.php:888 mod/follow.php:19
+#: mod/dfrn_request.php:893 mod/follow.php:19
 msgid "Submit Request"
 msgstr ""
 
-#: mod/directory.php:199 view/theme/vier/theme.php:196
-msgid "Global Directory"
-msgstr ""
-
-#: mod/directory.php:201
-msgid "Find on this site"
-msgstr ""
-
-#: mod/directory.php:203
-msgid "Results for:"
-msgstr ""
-
-#: mod/directory.php:205
-msgid "Site Directory"
-msgstr ""
-
-#: mod/directory.php:212
-msgid "No entries (some entries may be hidden)."
-msgstr ""
-
 #: mod/dirfind.php:37
 #, php-format
 msgid "People Search - %s"
@@ -5633,80 +5118,64 @@ msgstr ""
 msgid "Forum Search - %s"
 msgstr ""
 
-#: mod/dirfind.php:245 mod/match.php:109
-msgid "No matches"
-msgstr ""
-
-#: mod/display.php:479
-msgid "Item has been removed."
-msgstr ""
-
-#: mod/editpost.php:17 mod/editpost.php:27
-msgid "Item not found"
-msgstr ""
-
-#: mod/editpost.php:32
-msgid "Edit post"
-msgstr ""
-
-#: mod/events.php:100 mod/events.php:102
+#: mod/events.php:93 mod/events.php:95
 msgid "Event can not end before it has started."
 msgstr ""
 
-#: mod/events.php:109 mod/events.php:111
+#: mod/events.php:102 mod/events.php:104
 msgid "Event title and start time are required."
 msgstr ""
 
-#: mod/events.php:388
+#: mod/events.php:376
 msgid "Create New Event"
 msgstr ""
 
-#: mod/events.php:489
+#: mod/events.php:481
 msgid "Event details"
 msgstr ""
 
-#: mod/events.php:490
+#: mod/events.php:482
 msgid "Starting date and Title are required."
 msgstr ""
 
-#: mod/events.php:491 mod/events.php:492
+#: mod/events.php:483 mod/events.php:484
 msgid "Event Starts:"
 msgstr ""
 
-#: mod/events.php:491 mod/events.php:503 mod/profiles.php:708
+#: mod/events.php:483 mod/events.php:495 mod/profiles.php:709
 msgid "Required"
 msgstr ""
 
-#: mod/events.php:493 mod/events.php:509
+#: mod/events.php:485 mod/events.php:501
 msgid "Finish date/time is not known or not relevant"
 msgstr ""
 
-#: mod/events.php:495 mod/events.php:496
+#: mod/events.php:487 mod/events.php:488
 msgid "Event Finishes:"
 msgstr ""
 
-#: mod/events.php:497 mod/events.php:510
+#: mod/events.php:489 mod/events.php:502
 msgid "Adjust for viewer timezone"
 msgstr ""
 
-#: mod/events.php:499
+#: mod/events.php:491
 msgid "Description:"
 msgstr ""
 
-#: mod/events.php:503 mod/events.php:505
+#: mod/events.php:495 mod/events.php:497
 msgid "Title:"
 msgstr ""
 
-#: mod/events.php:506 mod/events.php:507
+#: mod/events.php:498 mod/events.php:499
 msgid "Share this event"
 msgstr ""
 
-#: mod/fbrowser.php:132
-msgid "Files"
+#: mod/events.php:528
+msgid "Failed to remove event"
 msgstr ""
 
-#: mod/filer.php:30
-msgid "- select -"
+#: mod/events.php:530
+msgid "Event removed"
 msgstr ""
 
 #: mod/follow.php:30
@@ -5729,15 +5198,15 @@ msgstr ""
 msgid "Contact added"
 msgstr ""
 
-#: mod/friendica.php:72
+#: mod/friendica.php:68
 msgid "This is Friendica, version"
 msgstr ""
 
-#: mod/friendica.php:73
+#: mod/friendica.php:69
 msgid "running at web location"
 msgstr ""
 
-#: mod/friendica.php:75
+#: mod/friendica.php:73
 msgid ""
 "Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
 "more about the Friendica project."
@@ -5751,31 +5220,26 @@ msgstr ""
 msgid "the bugtracker at github"
 msgstr ""
 
-#: mod/friendica.php:78
+#: mod/friendica.php:80
 msgid ""
 "Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
 "dot com"
 msgstr ""
 
-#: mod/friendica.php:92
+#: mod/friendica.php:94
 msgid "Installed plugins/addons/apps:"
 msgstr ""
 
-#: mod/friendica.php:105
+#: mod/friendica.php:108
 msgid "No installed plugins/addons/apps"
 msgstr ""
 
-#: mod/fsuggest.php:64
-msgid "Friend suggestion sent."
+#: mod/friendica.php:113
+msgid "On this server the following remote servers are blocked."
 msgstr ""
 
-#: mod/fsuggest.php:98
-msgid "Suggest Friends"
-msgstr ""
-
-#: mod/fsuggest.php:100
-#, php-format
-msgid "Suggest a friend for %s"
+#: mod/friendica.php:114 mod/admin.php:280 mod/admin.php:298
+msgid "Reason for the block"
 msgstr ""
 
 #: mod/group.php:29
@@ -5786,7 +5250,7 @@ msgstr ""
 msgid "Could not create group."
 msgstr ""
 
-#: mod/group.php:49 mod/group.php:150
+#: mod/group.php:49 mod/group.php:154
 msgid "Group not found."
 msgstr ""
 
@@ -5794,2882 +5258,3466 @@ msgstr ""
 msgid "Group name changed."
 msgstr ""
 
-#: mod/group.php:91
+#: mod/group.php:93
 msgid "Save Group"
 msgstr ""
 
-#: mod/group.php:97
+#: mod/group.php:98
 msgid "Create a group of contacts/friends."
 msgstr ""
 
-#: mod/group.php:122
+#: mod/group.php:123
 msgid "Group removed."
 msgstr ""
 
-#: mod/group.php:124
+#: mod/group.php:125
 msgid "Unable to remove group."
 msgstr ""
 
-#: mod/group.php:187
+#: mod/group.php:189
+msgid "Delete Group"
+msgstr ""
+
+#: mod/group.php:195
 msgid "Group Editor"
 msgstr ""
 
 #: mod/group.php:200
-msgid "Members"
+msgid "Edit Group Name"
 msgstr ""
 
-#: mod/group.php:233 mod/profperm.php:107
-msgid "Click on a contact to add or remove."
+#: mod/group.php:210
+msgid "Members"
 msgstr ""
 
-#: mod/hcard.php:11
-msgid "No profile"
+#: mod/group.php:226
+msgid "Remove Contact"
 msgstr ""
 
-#: mod/help.php:41
-msgid "Help:"
+#: mod/group.php:250
+msgid "Add Contact"
 msgstr ""
 
-#: mod/home.php:39
-#, php-format
-msgid "Welcome to %s"
+#: mod/manage.php:151
+msgid "Manage Identities and/or Pages"
 msgstr ""
 
-#: mod/install.php:140
-msgid "Friendica Communications Server - Setup"
+#: mod/manage.php:152
+msgid ""
+"Toggle between different identities or community/group pages which share "
+"your account details or which you have been granted \"manage\" permissions"
 msgstr ""
 
-#: mod/install.php:146
-msgid "Could not connect to database."
+#: mod/manage.php:153
+msgid "Select an identity to manage: "
 msgstr ""
 
-#: mod/install.php:150
-msgid "Could not create table."
+#: mod/message.php:64
+msgid "Unable to locate contact information."
 msgstr ""
 
-#: mod/install.php:156
-msgid "Your Friendica site database has been installed."
+#: mod/message.php:204
+msgid "Do you really want to delete this message?"
 msgstr ""
 
-#: mod/install.php:161
-msgid ""
-"You may need to import the file \"database.sql\" manually using phpmyadmin "
-"or mysql."
+#: mod/message.php:224
+msgid "Message deleted."
 msgstr ""
 
-#: mod/install.php:162 mod/install.php:234 mod/install.php:609
-msgid "Please see the file \"INSTALL.txt\"."
+#: mod/message.php:255
+msgid "Conversation removed."
 msgstr ""
 
-#: mod/install.php:174
-msgid "Database already in use."
+#: mod/message.php:364
+msgid "No messages."
 msgstr ""
 
-#: mod/install.php:231
-msgid "System check"
+#: mod/message.php:403
+msgid "Message not available."
 msgstr ""
 
-#: mod/install.php:236
-msgid "Check again"
+#: mod/message.php:477
+msgid "Delete message"
 msgstr ""
 
-#: mod/install.php:255
-msgid "Database connection"
+#: mod/message.php:503 mod/message.php:591
+msgid "Delete conversation"
 msgstr ""
 
-#: mod/install.php:256
+#: mod/message.php:505
 msgid ""
-"In order to install Friendica we need to know how to connect to your "
-"database."
+"No secure communications available. You <strong>may</strong> be able to "
+"respond from the sender's profile page."
 msgstr ""
 
-#: mod/install.php:257
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
+#: mod/message.php:509
+msgid "Send Reply"
 msgstr ""
 
-#: mod/install.php:258
-msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
+#: mod/message.php:561
+#, php-format
+msgid "Unknown sender - %s"
 msgstr ""
 
-#: mod/install.php:262
-msgid "Database Server Name"
+#: mod/message.php:563
+#, php-format
+msgid "You and %s"
 msgstr ""
 
-#: mod/install.php:263
-msgid "Database Login Name"
+#: mod/message.php:565
+#, php-format
+msgid "%s and You"
 msgstr ""
 
-#: mod/install.php:264
-msgid "Database Login Password"
+#: mod/message.php:594
+msgid "D, d M Y - g:i A"
 msgstr ""
 
-#: mod/install.php:264
-msgid "For security reasons the password must not be empty"
+#: mod/message.php:597
+#, php-format
+msgid "%d message"
+msgid_plural "%d messages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: mod/network.php:197 mod/search.php:25
+msgid "Remove term"
 msgstr ""
 
-#: mod/install.php:265
-msgid "Database Name"
+#: mod/network.php:404
+#, 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/network.php:407
+msgid "Messages in this group won't be send to these receivers."
 msgstr ""
 
-#: mod/install.php:266 mod/install.php:307
-msgid "Site administrator email address"
+#: mod/network.php:535
+msgid "Private messages to this person are at risk of public disclosure."
 msgstr ""
 
-#: mod/install.php:266 mod/install.php:307
-msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
+#: mod/network.php:540
+msgid "Invalid contact."
 msgstr ""
 
-#: mod/install.php:270 mod/install.php:310
-msgid "Please select a default timezone for your website"
+#: mod/network.php:813
+msgid "Commented Order"
 msgstr ""
 
-#: mod/install.php:297
-msgid "Site settings"
+#: mod/network.php:816
+msgid "Sort by Comment Date"
 msgstr ""
 
-#: mod/install.php:311
-msgid "System Language:"
+#: mod/network.php:821
+msgid "Posted Order"
 msgstr ""
 
-#: mod/install.php:311
-msgid ""
-"Set the default language for your Friendica installation interface and to "
-"send emails."
+#: mod/network.php:824
+msgid "Sort by Post Date"
 msgstr ""
 
-#: mod/install.php:351
-msgid "Could not find a command line version of PHP in the web server PATH."
+#: mod/network.php:835
+msgid "Posts that mention or involve you"
 msgstr ""
 
-#: mod/install.php:352
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run background polling via cron. See <a href='https://"
-"github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-"
-"poller'>'Setup the poller'</a>"
+#: mod/network.php:843
+msgid "New"
 msgstr ""
 
-#: mod/install.php:356
-msgid "PHP executable path"
+#: mod/network.php:846
+msgid "Activity Stream - by date"
 msgstr ""
 
-#: mod/install.php:356
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
+#: mod/network.php:854
+msgid "Shared Links"
 msgstr ""
 
-#: mod/install.php:361
-msgid "Command line PHP"
+#: mod/network.php:857
+msgid "Interesting Links"
 msgstr ""
 
-#: mod/install.php:370
-msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
+#: mod/network.php:865
+msgid "Starred"
 msgstr ""
 
-#: mod/install.php:371
-msgid "Found PHP version: "
+#: mod/network.php:868
+msgid "Favourite Posts"
 msgstr ""
 
-#: mod/install.php:373
-msgid "PHP cli binary"
+#: mod/openid.php:24
+msgid "OpenID protocol error. No ID returned."
 msgstr ""
 
-#: mod/install.php:384
+#: mod/openid.php:60
 msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
+"Account not found and OpenID registration is not permitted on this site."
 msgstr ""
 
-#: mod/install.php:385
-msgid "This is required for message delivery to work."
+#: mod/photos.php:94 mod/photos.php:1900
+msgid "Recent Photos"
 msgstr ""
 
-#: mod/install.php:387
-msgid "PHP register_argc_argv"
+#: mod/photos.php:97 mod/photos.php:1328 mod/photos.php:1902
+msgid "Upload New Photos"
 msgstr ""
 
-#: mod/install.php:410
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
+#: mod/photos.php:112 mod/settings.php:36
+msgid "everybody"
 msgstr ""
 
-#: mod/install.php:411
-msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
+#: mod/photos.php:176
+msgid "Contact information unavailable"
 msgstr ""
 
-#: mod/install.php:413
-msgid "Generate encryption keys"
+#: mod/photos.php:197
+msgid "Album not found."
 msgstr ""
 
-#: mod/install.php:420
-msgid "libCurl PHP module"
+#: mod/photos.php:230 mod/photos.php:242 mod/photos.php:1272
+msgid "Delete Album"
 msgstr ""
 
-#: mod/install.php:421
-msgid "GD graphics PHP module"
+#: mod/photos.php:240
+msgid "Do you really want to delete this photo album and all its photos?"
 msgstr ""
 
-#: mod/install.php:422
-msgid "OpenSSL PHP module"
+#: mod/photos.php:323 mod/photos.php:334 mod/photos.php:1598
+msgid "Delete Photo"
 msgstr ""
 
-#: mod/install.php:423
-msgid "mysqli PHP module"
+#: mod/photos.php:332
+msgid "Do you really want to delete this photo?"
 msgstr ""
 
-#: mod/install.php:424
-msgid "mb_string PHP module"
+#: mod/photos.php:713
+#, php-format
+msgid "%1$s was tagged in %2$s by %3$s"
 msgstr ""
 
-#: mod/install.php:425
-msgid "mcrypt PHP module"
+#: mod/photos.php:713
+msgid "a photo"
 msgstr ""
 
-#: mod/install.php:426
-msgid "XML PHP module"
+#: mod/photos.php:821
+msgid "Image file is empty."
 msgstr ""
 
-#: mod/install.php:427
-msgid "iconv module"
+#: mod/photos.php:988
+msgid "No photos selected"
 msgstr ""
 
-#: mod/install.php:431 mod/install.php:433
-msgid "Apache mod_rewrite module"
+#: mod/photos.php:1091 mod/videos.php:309
+msgid "Access to this item is restricted."
 msgstr ""
 
-#: mod/install.php:431
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
+#: mod/photos.php:1151
+#, php-format
+msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
 msgstr ""
 
-#: mod/install.php:439
-msgid "Error: libCURL PHP module required but not installed."
+#: mod/photos.php:1188
+msgid "Upload Photos"
 msgstr ""
 
-#: mod/install.php:443
-msgid ""
-"Error: GD graphics PHP module with JPEG support required but not installed."
+#: mod/photos.php:1192 mod/photos.php:1267
+msgid "New album name: "
 msgstr ""
 
-#: mod/install.php:447
-msgid "Error: openssl PHP module required but not installed."
+#: mod/photos.php:1193
+msgid "or existing album name: "
 msgstr ""
 
-#: mod/install.php:451
-msgid "Error: mysqli PHP module required but not installed."
+#: mod/photos.php:1194
+msgid "Do not show a status post for this upload"
 msgstr ""
 
-#: mod/install.php:455
-msgid "Error: mb_string PHP module required but not installed."
+#: mod/photos.php:1205 mod/photos.php:1602 mod/settings.php:1307
+msgid "Show to Groups"
 msgstr ""
 
-#: mod/install.php:459
-msgid "Error: mcrypt PHP module required but not installed."
+#: mod/photos.php:1206 mod/photos.php:1603 mod/settings.php:1308
+msgid "Show to Contacts"
 msgstr ""
 
-#: mod/install.php:463
-msgid "Error: iconv PHP module required but not installed."
+#: mod/photos.php:1207
+msgid "Private Photo"
 msgstr ""
 
-#: mod/install.php:472
-msgid ""
-"If you are using php_cli, please make sure that mcrypt module is enabled in "
-"its config file"
+#: mod/photos.php:1208
+msgid "Public Photo"
 msgstr ""
 
-#: mod/install.php:475
-msgid ""
-"Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 "
-"encryption layer."
+#: mod/photos.php:1278
+msgid "Edit Album"
 msgstr ""
 
-#: mod/install.php:477
-msgid "mcrypt_create_iv() function"
+#: mod/photos.php:1283
+msgid "Show Newest First"
 msgstr ""
 
-#: mod/install.php:485
-msgid "Error, XML PHP module required but not installed."
+#: mod/photos.php:1285
+msgid "Show Oldest First"
 msgstr ""
 
-#: mod/install.php:500
-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/photos.php:1314 mod/photos.php:1885
+msgid "View Photo"
 msgstr ""
 
-#: mod/install.php:501
-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/photos.php:1359
+msgid "Permission denied. Access to this item may be restricted."
 msgstr ""
 
-#: mod/install.php:502
-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/photos.php:1361
+msgid "Photo not available"
 msgstr ""
 
-#: mod/install.php:503
-msgid ""
-"You can alternatively skip this procedure and perform a manual installation. "
-"Please see the file \"INSTALL.txt\" for instructions."
+#: mod/photos.php:1422
+msgid "View photo"
 msgstr ""
 
-#: mod/install.php:506
-msgid ".htconfig.php is writable"
+#: mod/photos.php:1422
+msgid "Edit photo"
 msgstr ""
 
-#: mod/install.php:516
-msgid ""
-"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
-"compiles templates to PHP to speed up rendering."
+#: mod/photos.php:1423
+msgid "Use as profile photo"
 msgstr ""
 
-#: mod/install.php:517
-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/photos.php:1448
+msgid "View Full Size"
 msgstr ""
 
-#: mod/install.php:518
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has "
-"write access to this folder."
+#: mod/photos.php:1538
+msgid "Tags: "
 msgstr ""
 
-#: mod/install.php:519
-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/photos.php:1541
+msgid "[Remove any tag]"
 msgstr ""
 
-#: mod/install.php:522
-msgid "view/smarty3 is writable"
+#: mod/photos.php:1584
+msgid "New album name"
 msgstr ""
 
-#: mod/install.php:538
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
+#: mod/photos.php:1585
+msgid "Caption"
 msgstr ""
 
-#: mod/install.php:540
-msgid "Url rewrite is working"
+#: mod/photos.php:1586
+msgid "Add a Tag"
 msgstr ""
 
-#: mod/install.php:559
-msgid "ImageMagick PHP extension is not installed"
+#: mod/photos.php:1586
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 msgstr ""
 
-#: mod/install.php:561
-msgid "ImageMagick PHP extension is installed"
+#: mod/photos.php:1587
+msgid "Do not rotate"
 msgstr ""
 
-#: mod/install.php:563
-msgid "ImageMagick supports GIF"
+#: mod/photos.php:1588
+msgid "Rotate CW (right)"
 msgstr ""
 
-#: mod/install.php:570
-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/photos.php:1589
+msgid "Rotate CCW (left)"
 msgstr ""
 
-#: mod/install.php:607
-msgid "<h1>What next</h1>"
+#: mod/photos.php:1604
+msgid "Private photo"
 msgstr ""
 
-#: mod/install.php:608
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+#: mod/photos.php:1605
+msgid "Public photo"
 msgstr ""
 
-#: mod/invite.php:28
-msgid "Total invitation limit exceeded."
+#: mod/photos.php:1814
+msgid "Map"
 msgstr ""
 
-#: mod/invite.php:51
-#, php-format
-msgid "%s : Not a valid email address."
+#: mod/photos.php:1891 mod/videos.php:393
+msgid "View Album"
 msgstr ""
 
-#: mod/invite.php:76
-msgid "Please join us on Friendica"
+#: mod/probe.php:10 mod/webfinger.php:9
+msgid "Only logged in users are permitted to perform a probing."
 msgstr ""
 
-#: mod/invite.php:87
-msgid "Invitation limit exceeded. Please contact your site administrator."
+#: mod/profile.php:175
+msgid "Tips for New Members"
 msgstr ""
 
-#: mod/invite.php:91
-#, php-format
-msgid "%s : Message delivery failed."
+#: mod/profiles.php:38
+msgid "Profile deleted."
 msgstr ""
 
-#: mod/invite.php:95
-#, php-format
-msgid "%d message sent."
-msgid_plural "%d messages sent."
-msgstr[0] ""
-msgstr[1] ""
+#: mod/profiles.php:54 mod/profiles.php:90
+msgid "Profile-"
+msgstr ""
 
-#: mod/invite.php:114
-msgid "You have no more invitations available"
+#: mod/profiles.php:73 mod/profiles.php:118
+msgid "New profile created."
 msgstr ""
 
-#: mod/invite.php:122
-#, php-format
-msgid ""
-"Visit %s for a list of public sites that you can join. Friendica members on "
-"other sites can all connect with each other, as well as with members of many "
-"other social networks."
+#: mod/profiles.php:96
+msgid "Profile unavailable to clone."
 msgstr ""
 
-#: mod/invite.php:124
-#, php-format
-msgid ""
-"To accept this invitation, please visit and register at %s or any other "
-"public Friendica website."
+#: mod/profiles.php:192
+msgid "Profile Name is required."
 msgstr ""
 
-#: mod/invite.php:125
-#, php-format
-msgid ""
-"Friendica sites all inter-connect to create a huge privacy-enhanced social "
-"web that is owned and controlled by its members. They can also connect with "
-"many traditional social networks. See %s for a list of alternate Friendica "
-"sites you can join."
+#: mod/profiles.php:332
+msgid "Marital Status"
 msgstr ""
 
-#: mod/invite.php:128
-msgid ""
-"Our apologies. This system is not currently configured to connect with other "
-"public sites or invite members."
+#: mod/profiles.php:336
+msgid "Romantic Partner"
 msgstr ""
 
-#: mod/invite.php:134
-msgid "Send invitations"
+#: mod/profiles.php:348
+msgid "Work/Employment"
 msgstr ""
 
-#: mod/invite.php:135
-msgid "Enter email addresses, one per line:"
+#: mod/profiles.php:351
+msgid "Religion"
 msgstr ""
 
-#: mod/invite.php:136 mod/message.php:332 mod/message.php:515
-#: mod/wallmessage.php:135
-msgid "Your message:"
+#: mod/profiles.php:355
+msgid "Political Views"
 msgstr ""
 
-#: mod/invite.php:137
-msgid ""
-"You are cordially invited to join me and other close friends on Friendica - "
-"and help us to create a better social web."
+#: mod/profiles.php:359
+msgid "Gender"
 msgstr ""
 
-#: mod/invite.php:139
-msgid "You will need to supply this invitation code: $invite_code"
+#: mod/profiles.php:363
+msgid "Sexual Preference"
 msgstr ""
 
-#: mod/invite.php:139
-msgid ""
-"Once you have registered, please connect with me via my profile page at:"
+#: mod/profiles.php:367
+msgid "XMPP"
 msgstr ""
 
-#: mod/invite.php:141
-msgid ""
-"For more information about the Friendica project and why we feel it is "
-"important, please visit http://friendica.com"
+#: mod/profiles.php:371
+msgid "Homepage"
 msgstr ""
 
-#: mod/item.php:118
-msgid "Unable to locate original post."
+#: mod/profiles.php:375 mod/profiles.php:695
+msgid "Interests"
 msgstr ""
 
-#: mod/item.php:336
-msgid "Empty post discarded."
+#: mod/profiles.php:379
+msgid "Address"
 msgstr ""
 
-#: mod/item.php:889
-msgid "System error. Post not saved."
+#: mod/profiles.php:386 mod/profiles.php:691
+msgid "Location"
 msgstr ""
 
-#: mod/item.php:979
-#, php-format
-msgid ""
-"This message was sent to you by %s, a member of the Friendica social network."
+#: mod/profiles.php:471
+msgid "Profile updated."
+msgstr ""
+
+#: mod/profiles.php:564
+msgid " and "
+msgstr ""
+
+#: mod/profiles.php:573
+msgid "public profile"
 msgstr ""
 
-#: mod/item.php:981
+#: mod/profiles.php:576
 #, php-format
-msgid "You may visit them online at %s"
+msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
 msgstr ""
 
-#: mod/item.php:982
-msgid ""
-"Please contact the sender by replying to this post if you do not wish to "
-"receive these messages."
+#: mod/profiles.php:577
+#, php-format
+msgid " - Visit %1$s's %2$s"
 msgstr ""
 
-#: mod/item.php:986
+#: mod/profiles.php:579
 #, php-format
-msgid "%s posted an update."
+msgid "%1$s has an updated %2$s, changing %3$s."
 msgstr ""
 
-#: mod/localtime.php:24
-msgid "Time Conversion"
+#: mod/profiles.php:637
+msgid "Hide contacts and friends:"
 msgstr ""
 
-#: mod/localtime.php:26
-msgid ""
-"Friendica provides this service for sharing events with other networks and "
-"friends in unknown timezones."
+#: mod/profiles.php:642
+msgid "Hide your contact/friend list from viewers of this profile?"
 msgstr ""
 
-#: mod/localtime.php:30
-#, php-format
-msgid "UTC time: %s"
+#: mod/profiles.php:667
+msgid "Show more profile fields:"
 msgstr ""
 
-#: mod/localtime.php:33
-#, php-format
-msgid "Current timezone: %s"
+#: mod/profiles.php:679
+msgid "Profile Actions"
 msgstr ""
 
-#: mod/localtime.php:36
-#, php-format
-msgid "Converted localtime: %s"
+#: mod/profiles.php:680
+msgid "Edit Profile Details"
 msgstr ""
 
-#: mod/localtime.php:41
-msgid "Please select your timezone:"
+#: mod/profiles.php:682
+msgid "Change Profile Photo"
 msgstr ""
 
-#: mod/lockview.php:32 mod/lockview.php:40
-msgid "Remote privacy information not available."
+#: mod/profiles.php:683
+msgid "View this profile"
 msgstr ""
 
-#: mod/lockview.php:49
-msgid "Visible to:"
+#: mod/profiles.php:685
+msgid "Create a new profile using these settings"
 msgstr ""
 
-#: mod/lostpass.php:19
-msgid "No valid account found."
+#: mod/profiles.php:686
+msgid "Clone this profile"
 msgstr ""
 
-#: mod/lostpass.php:35
-msgid "Password reset request issued. Check your email."
+#: mod/profiles.php:687
+msgid "Delete this profile"
 msgstr ""
 
-#: mod/lostpass.php:41
-#, 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/profiles.php:689
+msgid "Basic information"
 msgstr ""
 
-#: mod/lostpass.php:52
-#, 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"
+#: mod/profiles.php:690
+msgid "Profile picture"
 msgstr ""
 
-#: mod/lostpass.php:71
-#, php-format
-msgid "Password reset requested at %s"
+#: mod/profiles.php:692
+msgid "Preferences"
 msgstr ""
 
-#: mod/lostpass.php:91
-msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
+#: mod/profiles.php:693
+msgid "Status information"
 msgstr ""
 
-#: mod/lostpass.php:111
-msgid "Your password has been reset as requested."
+#: mod/profiles.php:694
+msgid "Additional information"
 msgstr ""
 
-#: mod/lostpass.php:112
-msgid "Your new password is"
+#: mod/profiles.php:697
+msgid "Relation"
 msgstr ""
 
-#: mod/lostpass.php:113
-msgid "Save or copy your new password - and then"
+#: mod/profiles.php:701
+msgid "Your Gender:"
 msgstr ""
 
-#: mod/lostpass.php:114
-msgid "click here to login"
+#: mod/profiles.php:702
+msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
 msgstr ""
 
-#: mod/lostpass.php:115
-msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
+#: mod/profiles.php:704
+msgid "Example: fishing photography software"
 msgstr ""
 
-#: mod/lostpass.php:125
-#, 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/profiles.php:709
+msgid "Profile Name:"
 msgstr ""
 
-#: mod/lostpass.php:131
-#, php-format
+#: mod/profiles.php:711
 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"
+"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
+"be visible to anybody using the internet."
+msgstr ""
+
+#: mod/profiles.php:712
+msgid "Your Full Name:"
+msgstr ""
+
+#: mod/profiles.php:713
+msgid "Title/Description:"
+msgstr ""
+
+#: mod/profiles.php:716
+msgid "Street Address:"
+msgstr ""
+
+#: mod/profiles.php:717
+msgid "Locality/City:"
+msgstr ""
+
+#: mod/profiles.php:718
+msgid "Region/State:"
+msgstr ""
+
+#: mod/profiles.php:719
+msgid "Postal/Zip Code:"
+msgstr ""
+
+#: mod/profiles.php:720
+msgid "Country:"
+msgstr ""
+
+#: mod/profiles.php:724
+msgid "Who: (if applicable)"
+msgstr ""
+
+#: mod/profiles.php:724
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr ""
+
+#: mod/profiles.php:725
+msgid "Since [date]:"
+msgstr ""
+
+#: mod/profiles.php:727
+msgid "Tell us about yourself..."
+msgstr ""
+
+#: mod/profiles.php:728
+msgid "XMPP (Jabber) address:"
+msgstr ""
+
+#: mod/profiles.php:728
+msgid ""
+"The XMPP address will be propagated to your contacts so that they can follow "
+"you."
+msgstr ""
+
+#: mod/profiles.php:729
+msgid "Homepage URL:"
+msgstr ""
+
+#: mod/profiles.php:732
+msgid "Religious Views:"
+msgstr ""
+
+#: mod/profiles.php:733
+msgid "Public Keywords:"
+msgstr ""
+
+#: mod/profiles.php:733
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr ""
+
+#: mod/profiles.php:734
+msgid "Private Keywords:"
+msgstr ""
+
+#: mod/profiles.php:734
+msgid "(Used for searching profiles, never shown to others)"
+msgstr ""
+
+#: mod/profiles.php:737
+msgid "Musical interests"
+msgstr ""
+
+#: mod/profiles.php:738
+msgid "Books, literature"
+msgstr ""
+
+#: mod/profiles.php:739
+msgid "Television"
+msgstr ""
+
+#: mod/profiles.php:740
+msgid "Film/dance/culture/entertainment"
+msgstr ""
+
+#: mod/profiles.php:741
+msgid "Hobbies/Interests"
+msgstr ""
+
+#: mod/profiles.php:742
+msgid "Love/romance"
+msgstr ""
+
+#: mod/profiles.php:743
+msgid "Work/employment"
+msgstr ""
+
+#: mod/profiles.php:744
+msgid "School/education"
+msgstr ""
+
+#: mod/profiles.php:745
+msgid "Contact information and Social Networks"
+msgstr ""
+
+#: mod/profiles.php:786
+msgid "Edit/Manage Profiles"
+msgstr ""
+
+#: mod/register.php:93
+msgid ""
+"Registration successful. Please check your email for further instructions."
+msgstr ""
+
+#: mod/register.php:98
+#, 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."
+msgstr ""
+
+#: mod/register.php:105
+msgid "Registration successful."
+msgstr ""
+
+#: mod/register.php:111
+msgid "Your registration can not be processed."
+msgstr ""
+
+#: mod/register.php:160
+msgid "Your registration is pending approval by the site owner."
+msgstr ""
+
+#: mod/register.php:226
+msgid ""
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
+msgstr ""
+
+#: mod/register.php:227
+msgid ""
+"If you are not familiar with OpenID, please leave that field blank and fill "
+"in the rest of the items."
+msgstr ""
+
+#: mod/register.php:228
+msgid "Your OpenID (optional): "
+msgstr ""
+
+#: mod/register.php:242
+msgid "Include your profile in member directory?"
+msgstr ""
+
+#: mod/register.php:267
+msgid "Note for the admin"
+msgstr ""
+
+#: mod/register.php:267
+msgid "Leave a message for the admin, why you want to join this node"
+msgstr ""
+
+#: mod/register.php:268
+msgid "Membership on this site is by invitation only."
+msgstr ""
+
+#: mod/register.php:269
+msgid "Your invitation ID: "
+msgstr ""
+
+#: mod/register.php:272 mod/admin.php:1056
+msgid "Registration"
+msgstr ""
+
+#: mod/register.php:280
+msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
+msgstr ""
+
+#: mod/register.php:281
+msgid "Your Email Address: "
+msgstr ""
+
+#: mod/register.php:283 mod/settings.php:1278
+msgid "New Password:"
+msgstr ""
+
+#: mod/register.php:283
+msgid "Leave empty for an auto generated password."
+msgstr ""
+
+#: mod/register.php:284 mod/settings.php:1279
+msgid "Confirm:"
+msgstr ""
+
+#: mod/register.php:285
+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>'."
+msgstr ""
+
+#: mod/register.php:286
+msgid "Choose a nickname: "
+msgstr ""
+
+#: mod/register.php:296
+msgid "Import your profile to this friendica instance"
+msgstr ""
+
+#: mod/search.php:100
+msgid "Only logged in users are permitted to perform a search."
+msgstr ""
+
+#: mod/search.php:124
+msgid "Too Many Requests"
+msgstr ""
+
+#: mod/search.php:125
+msgid "Only one search per minute is permitted for not logged in users."
+msgstr ""
+
+#: mod/search.php:225
+#, php-format
+msgid "Items tagged with: %s"
+msgstr ""
+
+#: mod/settings.php:43 mod/admin.php:1490
+msgid "Account"
+msgstr ""
+
+#: mod/settings.php:52 mod/admin.php:169
+msgid "Additional features"
+msgstr ""
+
+#: mod/settings.php:60
+msgid "Display"
+msgstr ""
+
+#: mod/settings.php:67 mod/settings.php:890
+msgid "Social Networks"
+msgstr ""
+
+#: mod/settings.php:74 mod/admin.php:167 mod/admin.php:1616 mod/admin.php:1679
+msgid "Plugins"
+msgstr ""
+
+#: mod/settings.php:88
+msgid "Connected apps"
+msgstr ""
+
+#: mod/settings.php:95 mod/uexport.php:45
+msgid "Export personal data"
+msgstr ""
+
+#: mod/settings.php:102
+msgid "Remove account"
+msgstr ""
+
+#: mod/settings.php:157
+msgid "Missing some important data!"
+msgstr ""
+
+#: mod/settings.php:271
+msgid "Failed to connect with email account using the settings provided."
+msgstr ""
+
+#: mod/settings.php:276
+msgid "Email settings updated."
+msgstr ""
+
+#: mod/settings.php:291
+msgid "Features updated"
+msgstr ""
+
+#: mod/settings.php:361
+msgid "Relocate message has been send to your contacts"
+msgstr ""
+
+#: mod/settings.php:380
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr ""
+
+#: mod/settings.php:388
+msgid "Wrong password."
+msgstr ""
+
+#: mod/settings.php:399
+msgid "Password changed."
+msgstr ""
+
+#: mod/settings.php:401
+msgid "Password update failed. Please try again."
+msgstr ""
+
+#: mod/settings.php:481
+msgid " Please use a shorter name."
+msgstr ""
+
+#: mod/settings.php:483
+msgid " Name too short."
+msgstr ""
+
+#: mod/settings.php:492
+msgid "Wrong Password"
+msgstr ""
+
+#: mod/settings.php:497
+msgid " Not valid email."
+msgstr ""
+
+#: mod/settings.php:503
+msgid " Cannot change to that email."
+msgstr ""
+
+#: mod/settings.php:559
+msgid "Private forum has no privacy permissions. Using default privacy group."
+msgstr ""
+
+#: mod/settings.php:563
+msgid "Private forum has no privacy permissions and no default privacy group."
+msgstr ""
+
+#: mod/settings.php:603
+msgid "Settings updated."
+msgstr ""
+
+#: mod/settings.php:680 mod/settings.php:706 mod/settings.php:742
+msgid "Add application"
+msgstr ""
+
+#: mod/settings.php:681 mod/settings.php:792 mod/settings.php:841
+#: mod/settings.php:908 mod/settings.php:1005 mod/settings.php:1271
+#: mod/admin.php:1055 mod/admin.php:1680 mod/admin.php:1943 mod/admin.php:2017
+#: mod/admin.php:2170
+msgid "Save Settings"
+msgstr ""
+
+#: mod/settings.php:684 mod/settings.php:710
+msgid "Consumer Key"
+msgstr ""
+
+#: mod/settings.php:685 mod/settings.php:711
+msgid "Consumer Secret"
+msgstr ""
+
+#: mod/settings.php:686 mod/settings.php:712
+msgid "Redirect"
+msgstr ""
+
+#: mod/settings.php:687 mod/settings.php:713
+msgid "Icon url"
+msgstr ""
+
+#: mod/settings.php:698
+msgid "You can't edit this application."
+msgstr ""
+
+#: mod/settings.php:741
+msgid "Connected Apps"
+msgstr ""
+
+#: mod/settings.php:745
+msgid "Client key starts with"
+msgstr ""
+
+#: mod/settings.php:746
+msgid "No name"
+msgstr ""
+
+#: mod/settings.php:747
+msgid "Remove authorization"
+msgstr ""
+
+#: mod/settings.php:759
+msgid "No Plugin settings configured"
+msgstr ""
+
+#: mod/settings.php:768
+msgid "Plugin Settings"
+msgstr ""
+
+#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160
+msgid "Off"
+msgstr ""
+
+#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160
+msgid "On"
+msgstr ""
+
+#: mod/settings.php:790
+msgid "Additional Features"
+msgstr ""
+
+#: mod/settings.php:800 mod/settings.php:804
+msgid "General Social Media Settings"
+msgstr ""
+
+#: mod/settings.php:810
+msgid "Disable intelligent shortening"
+msgstr ""
+
+#: mod/settings.php:812
+msgid ""
+"Normally the system tries to find the best link to add to shortened posts. "
+"If this option is enabled then every shortened post will always point to the "
+"original friendica post."
+msgstr ""
+
+#: mod/settings.php:818
+msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
+msgstr ""
+
+#: mod/settings.php:820
+msgid ""
+"If you receive a message from an unknown OStatus user, this option decides "
+"what to do. If it is checked, a new contact will be created for every "
+"unknown user."
+msgstr ""
+
+#: mod/settings.php:826
+msgid "Default group for OStatus contacts"
+msgstr ""
+
+#: mod/settings.php:834
+msgid "Your legacy GNU Social account"
+msgstr ""
+
+#: mod/settings.php:836
+msgid ""
+"If you enter your old GNU Social/Statusnet account name here (in the format "
+"user@domain.tld), your contacts will be added automatically. The field will "
+"be emptied when done."
+msgstr ""
+
+#: mod/settings.php:839
+msgid "Repair OStatus subscriptions"
+msgstr ""
+
+#: mod/settings.php:848 mod/settings.php:849
+#, php-format
+msgid "Built-in support for %s connectivity is %s"
+msgstr ""
+
+#: mod/settings.php:848 mod/settings.php:849
+msgid "enabled"
+msgstr ""
+
+#: mod/settings.php:848 mod/settings.php:849
+msgid "disabled"
+msgstr ""
+
+#: mod/settings.php:849
+msgid "GNU Social (OStatus)"
+msgstr ""
+
+#: mod/settings.php:883
+msgid "Email access is disabled on this site."
+msgstr ""
+
+#: mod/settings.php:895
+msgid "Email/Mailbox Setup"
+msgstr ""
+
+#: mod/settings.php:896
+msgid ""
+"If you wish to communicate with email contacts using this service "
+"(optional), please specify how to connect to your mailbox."
+msgstr ""
+
+#: mod/settings.php:897
+msgid "Last successful email check:"
+msgstr ""
+
+#: mod/settings.php:899
+msgid "IMAP server name:"
+msgstr ""
+
+#: mod/settings.php:900
+msgid "IMAP port:"
+msgstr ""
+
+#: mod/settings.php:901
+msgid "Security:"
+msgstr ""
+
+#: mod/settings.php:901 mod/settings.php:906
+msgid "None"
+msgstr ""
+
+#: mod/settings.php:902
+msgid "Email login name:"
+msgstr ""
+
+#: mod/settings.php:903
+msgid "Email password:"
+msgstr ""
+
+#: mod/settings.php:904
+msgid "Reply-to address:"
+msgstr ""
+
+#: mod/settings.php:905
+msgid "Send public posts to all email contacts:"
+msgstr ""
+
+#: mod/settings.php:906
+msgid "Action after import:"
 msgstr ""
 
-#: mod/lostpass.php:147
-#, php-format
-msgid "Your password has been changed at %s"
+#: mod/settings.php:906
+msgid "Move to folder"
 msgstr ""
 
-#: mod/lostpass.php:159
-msgid "Forgot your Password?"
+#: mod/settings.php:907
+msgid "Move to folder:"
 msgstr ""
 
-#: mod/lostpass.php:160
-msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
+#: mod/settings.php:943 mod/admin.php:942
+msgid "No special theme for mobile devices"
 msgstr ""
 
-#: mod/lostpass.php:162
-msgid "Reset"
+#: mod/settings.php:1003
+msgid "Display Settings"
 msgstr ""
 
-#: mod/maintenance.php:20
-msgid "System down for maintenance"
+#: mod/settings.php:1009 mod/settings.php:1032
+msgid "Display Theme:"
 msgstr ""
 
-#: mod/manage.php:141
-msgid "Manage Identities and/or Pages"
+#: mod/settings.php:1010
+msgid "Mobile Theme:"
 msgstr ""
 
-#: mod/manage.php:142
-msgid ""
-"Toggle between different identities or community/group pages which share "
-"your account details or which you have been granted \"manage\" permissions"
+#: mod/settings.php:1011
+msgid "Suppress warning of insecure networks"
 msgstr ""
 
-#: mod/manage.php:143
-msgid "Select an identity to manage: "
+#: mod/settings.php:1011
+msgid ""
+"Should the system suppress the warning that the current group contains "
+"members of networks that can't receive non public postings."
 msgstr ""
 
-#: mod/match.php:35
-msgid "No keywords to match. Please add keywords to your default profile."
+#: mod/settings.php:1012
+msgid "Update browser every xx seconds"
 msgstr ""
 
-#: mod/match.php:88
-msgid "is interested in:"
+#: mod/settings.php:1012
+msgid "Minimum of 10 seconds. Enter -1 to disable it."
 msgstr ""
 
-#: mod/match.php:102
-msgid "Profile Match"
+#: mod/settings.php:1013
+msgid "Number of items to display per page:"
 msgstr ""
 
-#: mod/message.php:60 mod/wallmessage.php:50
-msgid "No recipient selected."
+#: mod/settings.php:1013 mod/settings.php:1014
+msgid "Maximum of 100 items"
 msgstr ""
 
-#: mod/message.php:64
-msgid "Unable to locate contact information."
+#: mod/settings.php:1014
+msgid "Number of items to display per page when viewed from mobile device:"
 msgstr ""
 
-#: mod/message.php:67 mod/wallmessage.php:56
-msgid "Message could not be sent."
+#: mod/settings.php:1015
+msgid "Don't show emoticons"
 msgstr ""
 
-#: mod/message.php:70 mod/wallmessage.php:59
-msgid "Message collection failure."
+#: mod/settings.php:1016
+msgid "Calendar"
 msgstr ""
 
-#: mod/message.php:73 mod/wallmessage.php:62
-msgid "Message sent."
+#: mod/settings.php:1017
+msgid "Beginning of week:"
 msgstr ""
 
-#: mod/message.php:204
-msgid "Do you really want to delete this message?"
+#: mod/settings.php:1018
+msgid "Don't show notices"
 msgstr ""
 
-#: mod/message.php:224
-msgid "Message deleted."
+#: mod/settings.php:1019
+msgid "Infinite scroll"
 msgstr ""
 
-#: mod/message.php:255
-msgid "Conversation removed."
+#: mod/settings.php:1020
+msgid "Automatic updates only at the top of the network page"
 msgstr ""
 
-#: mod/message.php:322 mod/wallmessage.php:126
-msgid "Send Private Message"
+#: mod/settings.php:1021
+msgid "Bandwith Saver Mode"
 msgstr ""
 
-#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:128
-msgid "To:"
+#: mod/settings.php:1021
+msgid ""
+"When enabled, embedded content is not displayed on automatic updates, they "
+"only show on page reload."
 msgstr ""
 
-#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:129
-msgid "Subject:"
+#: mod/settings.php:1023
+msgid "General Theme Settings"
 msgstr ""
 
-#: mod/message.php:364
-msgid "No messages."
+#: mod/settings.php:1024
+msgid "Custom Theme Settings"
 msgstr ""
 
-#: mod/message.php:403
-msgid "Message not available."
+#: mod/settings.php:1025
+msgid "Content Settings"
 msgstr ""
 
-#: mod/message.php:477
-msgid "Delete message"
+#: mod/settings.php:1026 view/theme/duepuntozero/config.php:63
+#: view/theme/frio/config.php:66 view/theme/quattro/config.php:69
+#: view/theme/vier/config.php:114
+msgid "Theme settings"
 msgstr ""
 
-#: mod/message.php:503 mod/message.php:583
-msgid "Delete conversation"
+#: mod/settings.php:1110
+msgid "Account Types"
 msgstr ""
 
-#: mod/message.php:505
-msgid ""
-"No secure communications available. You <strong>may</strong> be able to "
-"respond from the sender's profile page."
+#: mod/settings.php:1111
+msgid "Personal Page Subtypes"
 msgstr ""
 
-#: mod/message.php:509
-msgid "Send Reply"
+#: mod/settings.php:1112
+msgid "Community Forum Subtypes"
 msgstr ""
 
-#: mod/message.php:553
-#, php-format
-msgid "Unknown sender - %s"
+#: mod/settings.php:1119
+msgid "Personal Page"
 msgstr ""
 
-#: mod/message.php:555
-#, php-format
-msgid "You and %s"
+#: mod/settings.php:1120
+msgid "This account is a regular personal profile"
 msgstr ""
 
-#: mod/message.php:557
-#, php-format
-msgid "%s and You"
+#: mod/settings.php:1123
+msgid "Organisation Page"
 msgstr ""
 
-#: mod/message.php:586
-msgid "D, d M Y - g:i A"
+#: mod/settings.php:1124
+msgid "This account is a profile for an organisation"
 msgstr ""
 
-#: mod/message.php:589
-#, php-format
-msgid "%d message"
-msgid_plural "%d messages"
-msgstr[0] ""
-msgstr[1] ""
-
-#: mod/mood.php:134
-msgid "Mood"
+#: mod/settings.php:1127
+msgid "News Page"
 msgstr ""
 
-#: mod/mood.php:135
-msgid "Set your current mood and tell your friends"
+#: mod/settings.php:1128
+msgid "This account is a news account/reflector"
 msgstr ""
 
-#: mod/network.php:190 mod/search.php:25
-msgid "Remove term"
+#: mod/settings.php:1131
+msgid "Community Forum"
 msgstr ""
 
-#: mod/network.php:397
-#, php-format
+#: mod/settings.php:1132
 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] ""
+"This account is a community forum where people can discuss with each other"
+msgstr ""
 
-#: mod/network.php:400
-msgid "Messages in this group won't be send to these receivers."
+#: mod/settings.php:1135
+msgid "Normal Account Page"
 msgstr ""
 
-#: mod/network.php:528
-msgid "Private messages to this person are at risk of public disclosure."
+#: mod/settings.php:1136
+msgid "This account is a normal personal profile"
 msgstr ""
 
-#: mod/network.php:533
-msgid "Invalid contact."
+#: mod/settings.php:1139
+msgid "Soapbox Page"
 msgstr ""
 
-#: mod/network.php:810
-msgid "Commented Order"
+#: mod/settings.php:1140
+msgid "Automatically approve all connection/friend requests as read-only fans"
 msgstr ""
 
-#: mod/network.php:813
-msgid "Sort by Comment Date"
+#: mod/settings.php:1143
+msgid "Public Forum"
 msgstr ""
 
-#: mod/network.php:818
-msgid "Posted Order"
+#: mod/settings.php:1144
+msgid "Automatically approve all contact requests"
 msgstr ""
 
-#: mod/network.php:821
-msgid "Sort by Post Date"
+#: mod/settings.php:1147
+msgid "Automatic Friend Page"
 msgstr ""
 
-#: mod/network.php:832
-msgid "Posts that mention or involve you"
+#: mod/settings.php:1148
+msgid "Automatically approve all connection/friend requests as friends"
 msgstr ""
 
-#: mod/network.php:840
-msgid "New"
+#: mod/settings.php:1151
+msgid "Private Forum [Experimental]"
 msgstr ""
 
-#: mod/network.php:843
-msgid "Activity Stream - by date"
+#: mod/settings.php:1152
+msgid "Private forum - approved members only"
 msgstr ""
 
-#: mod/network.php:851
-msgid "Shared Links"
+#: mod/settings.php:1163
+msgid "OpenID:"
 msgstr ""
 
-#: mod/network.php:854
-msgid "Interesting Links"
+#: mod/settings.php:1163
+msgid "(Optional) Allow this OpenID to login to this account."
 msgstr ""
 
-#: mod/network.php:862
-msgid "Starred"
+#: mod/settings.php:1171
+msgid "Publish your default profile in your local site directory?"
 msgstr ""
 
-#: mod/network.php:865
-msgid "Favourite Posts"
+#: mod/settings.php:1171
+msgid "Your profile may be visible in public."
 msgstr ""
 
-#: mod/newmember.php:6
-msgid "Welcome to Friendica"
+#: mod/settings.php:1177
+msgid "Publish your default profile in the global social directory?"
 msgstr ""
 
-#: mod/newmember.php:8
-msgid "New Member Checklist"
+#: mod/settings.php:1184
+msgid "Hide your contact/friend list from viewers of your default profile?"
 msgstr ""
 
-#: mod/newmember.php:12
+#: mod/settings.php:1188
 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."
+"If enabled, posting public messages to Diaspora and other networks isn't "
+"possible."
 msgstr ""
 
-#: mod/newmember.php:14
-msgid "Getting Started"
+#: mod/settings.php:1193
+msgid "Allow friends to post to your profile page?"
 msgstr ""
 
-#: mod/newmember.php:18
-msgid "Friendica Walk-Through"
+#: mod/settings.php:1198
+msgid "Allow friends to tag your posts?"
 msgstr ""
 
-#: mod/newmember.php:18
-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."
+#: mod/settings.php:1203
+msgid "Allow us to suggest you as a potential friend to new members?"
 msgstr ""
 
-#: mod/newmember.php:26
-msgid "Go to Your Settings"
+#: mod/settings.php:1208
+msgid "Permit unknown people to send you private mail?"
 msgstr ""
 
-#: mod/newmember.php:26
-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/settings.php:1216
+msgid "Profile is <strong>not published</strong>."
+msgstr ""
+
+#: mod/settings.php:1224
+#, php-format
+msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
+msgstr ""
+
+#: mod/settings.php:1231
+msgid "Automatically expire posts after this many days:"
+msgstr ""
+
+#: mod/settings.php:1231
+msgid "If empty, posts will not expire. Expired posts will be deleted"
 msgstr ""
 
-#: mod/newmember.php:28
-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/settings.php:1232
+msgid "Advanced expiration settings"
 msgstr ""
 
-#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:699
-msgid "Upload Profile Photo"
+#: mod/settings.php:1233
+msgid "Advanced Expiration"
 msgstr ""
 
-#: mod/newmember.php:36
-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."
+#: mod/settings.php:1234
+msgid "Expire posts:"
 msgstr ""
 
-#: mod/newmember.php:38
-msgid "Edit Your Profile"
+#: mod/settings.php:1235
+msgid "Expire personal notes:"
 msgstr ""
 
-#: mod/newmember.php:38
-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."
+#: mod/settings.php:1236
+msgid "Expire starred posts:"
 msgstr ""
 
-#: mod/newmember.php:40
-msgid "Profile Keywords"
+#: mod/settings.php:1237
+msgid "Expire photos:"
 msgstr ""
 
-#: mod/newmember.php:40
-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."
+#: mod/settings.php:1238
+msgid "Only expire posts by others:"
 msgstr ""
 
-#: mod/newmember.php:44
-msgid "Connecting"
+#: mod/settings.php:1269
+msgid "Account Settings"
 msgstr ""
 
-#: mod/newmember.php:51
-msgid "Importing Emails"
+#: mod/settings.php:1277
+msgid "Password Settings"
 msgstr ""
 
-#: mod/newmember.php:51
-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"
+#: mod/settings.php:1279
+msgid "Leave password fields blank unless changing"
 msgstr ""
 
-#: mod/newmember.php:53
-msgid "Go to Your Contacts Page"
+#: mod/settings.php:1280
+msgid "Current Password:"
 msgstr ""
 
-#: mod/newmember.php:53
-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."
+#: mod/settings.php:1280 mod/settings.php:1281
+msgid "Your current password to confirm the changes"
 msgstr ""
 
-#: mod/newmember.php:55
-msgid "Go to Your Site's Directory"
+#: mod/settings.php:1281
+msgid "Password:"
 msgstr ""
 
-#: mod/newmember.php:55
-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."
+#: mod/settings.php:1285
+msgid "Basic Settings"
 msgstr ""
 
-#: mod/newmember.php:57
-msgid "Finding New People"
+#: mod/settings.php:1287
+msgid "Email Address:"
 msgstr ""
 
-#: mod/newmember.php:57
-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."
+#: mod/settings.php:1288
+msgid "Your Timezone:"
 msgstr ""
 
-#: mod/newmember.php:65
-msgid "Group Your Contacts"
+#: mod/settings.php:1289
+msgid "Your Language:"
 msgstr ""
 
-#: mod/newmember.php:65
+#: mod/settings.php:1289
 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."
+"Set the language we use to show you friendica interface and to send you "
+"emails"
 msgstr ""
 
-#: mod/newmember.php:68
-msgid "Why Aren't My Posts Public?"
+#: mod/settings.php:1290
+msgid "Default Post Location:"
 msgstr ""
 
-#: mod/newmember.php:68
-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."
+#: mod/settings.php:1291
+msgid "Use Browser Location:"
 msgstr ""
 
-#: mod/newmember.php:73
-msgid "Getting Help"
+#: mod/settings.php:1294
+msgid "Security and Privacy Settings"
 msgstr ""
 
-#: mod/newmember.php:77
-msgid "Go to the Help Section"
+#: mod/settings.php:1296
+msgid "Maximum Friend Requests/Day:"
 msgstr ""
 
-#: mod/newmember.php:77
-msgid ""
-"Our <strong>help</strong> pages may be consulted for detail on other program "
-"features and resources."
+#: mod/settings.php:1296 mod/settings.php:1326
+msgid "(to prevent spam abuse)"
 msgstr ""
 
-#: mod/nogroup.php:65
-msgid "Contacts who are not members of a group"
+#: mod/settings.php:1297
+msgid "Default Post Permissions"
 msgstr ""
 
-#: mod/notifications.php:35
-msgid "Invalid request identifier."
+#: mod/settings.php:1298
+msgid "(click to open/close)"
 msgstr ""
 
-#: mod/notifications.php:44 mod/notifications.php:180
-#: mod/notifications.php:258
-msgid "Discard"
+#: mod/settings.php:1309
+msgid "Default Private Post"
 msgstr ""
 
-#: mod/notifications.php:105
-msgid "Network Notifications"
+#: mod/settings.php:1310
+msgid "Default Public Post"
 msgstr ""
 
-#: mod/notifications.php:111 mod/notify.php:69
-msgid "System Notifications"
+#: mod/settings.php:1314
+msgid "Default Permissions for New Posts"
 msgstr ""
 
-#: mod/notifications.php:117
-msgid "Personal Notifications"
+#: mod/settings.php:1326
+msgid "Maximum private messages per day from unknown people:"
 msgstr ""
 
-#: mod/notifications.php:123
-msgid "Home Notifications"
+#: mod/settings.php:1329
+msgid "Notification Settings"
 msgstr ""
 
-#: mod/notifications.php:152
-msgid "Show Ignored Requests"
+#: mod/settings.php:1330
+msgid "By default post a status message when:"
 msgstr ""
 
-#: mod/notifications.php:152
-msgid "Hide Ignored Requests"
+#: mod/settings.php:1331
+msgid "accepting a friend request"
 msgstr ""
 
-#: mod/notifications.php:164 mod/notifications.php:228
-msgid "Notification type: "
+#: mod/settings.php:1332
+msgid "joining a forum/community"
 msgstr ""
 
-#: mod/notifications.php:167
-#, php-format
-msgid "suggested by %s"
+#: mod/settings.php:1333
+msgid "making an <em>interesting</em> profile change"
 msgstr ""
 
-#: mod/notifications.php:173 mod/notifications.php:246
-msgid "Post a new friend activity"
+#: mod/settings.php:1334
+msgid "Send a notification email when:"
 msgstr ""
 
-#: mod/notifications.php:173 mod/notifications.php:246
-msgid "if applicable"
+#: mod/settings.php:1335
+msgid "You receive an introduction"
 msgstr ""
 
-#: mod/notifications.php:195
-msgid "Claims to be known to you: "
+#: mod/settings.php:1336
+msgid "Your introductions are confirmed"
 msgstr ""
 
-#: mod/notifications.php:196
-msgid "yes"
+#: mod/settings.php:1337
+msgid "Someone writes on your profile wall"
 msgstr ""
 
-#: mod/notifications.php:196
-msgid "no"
+#: mod/settings.php:1338
+msgid "Someone writes a followup comment"
 msgstr ""
 
-#: mod/notifications.php:197 mod/notifications.php:202
-msgid "Shall your connection be bidirectional or not?"
+#: mod/settings.php:1339
+msgid "You receive a private message"
 msgstr ""
 
-#: mod/notifications.php:198 mod/notifications.php:203
-#, 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."
+#: mod/settings.php:1340
+msgid "You receive a friend suggestion"
 msgstr ""
 
-#: mod/notifications.php:199
-#, 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."
+#: mod/settings.php:1341
+msgid "You are tagged in a post"
 msgstr ""
 
-#: mod/notifications.php:204
-#, 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."
+#: mod/settings.php:1342
+msgid "You are poked/prodded/etc. in a post"
 msgstr ""
 
-#: mod/notifications.php:215
-msgid "Friend"
+#: mod/settings.php:1344
+msgid "Activate desktop notifications"
 msgstr ""
 
-#: mod/notifications.php:216
-msgid "Sharer"
+#: mod/settings.php:1344
+msgid "Show desktop popup on new notifications"
 msgstr ""
 
-#: mod/notifications.php:216
-msgid "Subscriber"
+#: mod/settings.php:1346
+msgid "Text-only notification emails"
 msgstr ""
 
-#: mod/notifications.php:266
-msgid "No introductions."
+#: mod/settings.php:1348
+msgid "Send text only notification emails, without the html part"
 msgstr ""
 
-#: mod/notifications.php:307
-msgid "Show unread"
+#: mod/settings.php:1350
+msgid "Advanced Account/Page Type Settings"
 msgstr ""
 
-#: mod/notifications.php:307
-msgid "Show all"
+#: mod/settings.php:1351
+msgid "Change the behaviour of this account for special situations"
 msgstr ""
 
-#: mod/notifications.php:313
-#, php-format
-msgid "No more %s notifications."
+#: mod/settings.php:1354
+msgid "Relocate"
 msgstr ""
 
-#: mod/notify.php:65
-msgid "No more system notifications."
+#: mod/settings.php:1355
+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/oexchange.php:21
-msgid "Post successful."
+#: mod/settings.php:1356
+msgid "Resend relocate message to contacts"
 msgstr ""
 
-#: mod/openid.php:24
-msgid "OpenID protocol error. No ID returned."
+#: mod/uexport.php:37
+msgid "Export account"
 msgstr ""
 
-#: mod/openid.php:60
+#: mod/uexport.php:37
 msgid ""
-"Account not found and OpenID registration is not permitted on this site."
+"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/ostatus_subscribe.php:14
-msgid "Subscribing to OStatus contacts"
+#: mod/uexport.php:38
+msgid "Export all"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:25
-msgid "No contact provided."
+#: mod/uexport.php:38
+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/ostatus_subscribe.php:31
-msgid "Couldn't fetch information for contact."
+#: mod/videos.php:124
+msgid "Do you really want to delete this video?"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:40
-msgid "Couldn't fetch friends for contact."
+#: mod/videos.php:129
+msgid "Delete Video"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:54 mod/repair_ostatus.php:44
-msgid "Done"
+#: mod/videos.php:208
+msgid "No videos selected"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:68
-msgid "success"
+#: mod/videos.php:402
+msgid "Recent Videos"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:70
-msgid "failed"
+#: mod/videos.php:404
+msgid "Upload New Videos"
 msgstr ""
 
-#: mod/ostatus_subscribe.php:78 mod/repair_ostatus.php:50
-msgid "Keep this window open until done."
+#: mod/install.php:106
+msgid "Friendica Communications Server - Setup"
 msgstr ""
 
-#: mod/p.php:9
-msgid "Not Extended"
+#: mod/install.php:112
+msgid "Could not connect to database."
 msgstr ""
 
-#: mod/photos.php:90 mod/photos.php:1876
-msgid "Recent Photos"
+#: mod/install.php:116
+msgid "Could not create table."
 msgstr ""
 
-#: mod/photos.php:93 mod/photos.php:1303 mod/photos.php:1878
-msgid "Upload New Photos"
+#: mod/install.php:122
+msgid "Your Friendica site database has been installed."
 msgstr ""
 
-#: mod/photos.php:107 mod/settings.php:36
-msgid "everybody"
+#: mod/install.php:127
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
 msgstr ""
 
-#: mod/photos.php:171
-msgid "Contact information unavailable"
+#: mod/install.php:128 mod/install.php:200 mod/install.php:547
+msgid "Please see the file \"INSTALL.txt\"."
 msgstr ""
 
-#: mod/photos.php:192
-msgid "Album not found."
+#: mod/install.php:140
+msgid "Database already in use."
 msgstr ""
 
-#: mod/photos.php:225 mod/photos.php:237 mod/photos.php:1247
-msgid "Delete Album"
+#: mod/install.php:197
+msgid "System check"
 msgstr ""
 
-#: mod/photos.php:235
-msgid "Do you really want to delete this photo album and all its photos?"
+#: mod/install.php:202
+msgid "Check again"
 msgstr ""
 
-#: mod/photos.php:317 mod/photos.php:328 mod/photos.php:1563
-msgid "Delete Photo"
+#: mod/install.php:221
+msgid "Database connection"
 msgstr ""
 
-#: mod/photos.php:326
-msgid "Do you really want to delete this photo?"
+#: mod/install.php:222
+msgid ""
+"In order to install Friendica we need to know how to connect to your "
+"database."
 msgstr ""
 
-#: mod/photos.php:705
-#, php-format
-msgid "%1$s was tagged in %2$s by %3$s"
+#: mod/install.php:223
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
 msgstr ""
 
-#: mod/photos.php:705
-msgid "a photo"
+#: mod/install.php:224
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
 msgstr ""
 
-#: mod/photos.php:803 mod/profile_photo.php:156 mod/wall_upload.php:151
-#, php-format
-msgid "Image exceeds size limit of %s"
+#: mod/install.php:228
+msgid "Database Server Name"
 msgstr ""
 
-#: mod/photos.php:811
-msgid "Image file is empty."
+#: mod/install.php:229
+msgid "Database Login Name"
 msgstr ""
 
-#: mod/photos.php:844 mod/profile_photo.php:165 mod/wall_upload.php:186
-msgid "Unable to process image."
+#: mod/install.php:230
+msgid "Database Login Password"
 msgstr ""
 
-#: mod/photos.php:871 mod/profile_photo.php:315 mod/wall_upload.php:219
-msgid "Image upload failed."
+#: mod/install.php:230
+msgid "For security reasons the password must not be empty"
 msgstr ""
 
-#: mod/photos.php:974
-msgid "No photos selected"
+#: mod/install.php:231
+msgid "Database Name"
 msgstr ""
 
-#: mod/photos.php:1074 mod/videos.php:309
-msgid "Access to this item is restricted."
+#: mod/install.php:232 mod/install.php:273
+msgid "Site administrator email address"
 msgstr ""
 
-#: mod/photos.php:1134
-#, php-format
-msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
+#: mod/install.php:232 mod/install.php:273
+msgid ""
+"Your account email address must match this in order to use the web admin "
+"panel."
 msgstr ""
 
-#: mod/photos.php:1168
-msgid "Upload Photos"
+#: mod/install.php:236 mod/install.php:276
+msgid "Please select a default timezone for your website"
 msgstr ""
 
-#: mod/photos.php:1172 mod/photos.php:1242
-msgid "New album name: "
+#: mod/install.php:263
+msgid "Site settings"
 msgstr ""
 
-#: mod/photos.php:1173
-msgid "or existing album name: "
+#: mod/install.php:277
+msgid "System Language:"
 msgstr ""
 
-#: mod/photos.php:1174
-msgid "Do not show a status post for this upload"
+#: mod/install.php:277
+msgid ""
+"Set the default language for your Friendica installation interface and to "
+"send emails."
 msgstr ""
 
-#: mod/photos.php:1185 mod/photos.php:1567 mod/settings.php:1307
-msgid "Show to Groups"
+#: mod/install.php:317
+msgid "Could not find a command line version of PHP in the web server PATH."
 msgstr ""
 
-#: mod/photos.php:1186 mod/photos.php:1568 mod/settings.php:1308
-msgid "Show to Contacts"
+#: mod/install.php:318
+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/photos.php:1187
-msgid "Private Photo"
+#: mod/install.php:322
+msgid "PHP executable path"
 msgstr ""
 
-#: mod/photos.php:1188
-msgid "Public Photo"
+#: mod/install.php:322
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
 msgstr ""
 
-#: mod/photos.php:1254
-msgid "Edit Album"
+#: mod/install.php:327
+msgid "Command line PHP"
 msgstr ""
 
-#: mod/photos.php:1260
-msgid "Show Newest First"
+#: mod/install.php:336
+msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
 msgstr ""
 
-#: mod/photos.php:1262
-msgid "Show Oldest First"
+#: mod/install.php:337
+msgid "Found PHP version: "
 msgstr ""
 
-#: mod/photos.php:1289 mod/photos.php:1861
-msgid "View Photo"
+#: mod/install.php:339
+msgid "PHP cli binary"
 msgstr ""
 
-#: mod/photos.php:1335
-msgid "Permission denied. Access to this item may be restricted."
+#: mod/install.php:350
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
 msgstr ""
 
-#: mod/photos.php:1337
-msgid "Photo not available"
+#: mod/install.php:351
+msgid "This is required for message delivery to work."
 msgstr ""
 
-#: mod/photos.php:1395
-msgid "View photo"
+#: mod/install.php:353
+msgid "PHP register_argc_argv"
 msgstr ""
 
-#: mod/photos.php:1395
-msgid "Edit photo"
+#: mod/install.php:376
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
 msgstr ""
 
-#: mod/photos.php:1396
-msgid "Use as profile photo"
+#: mod/install.php:377
+msgid ""
+"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
+"installation.php\"."
 msgstr ""
 
-#: mod/photos.php:1421
-msgid "View Full Size"
+#: mod/install.php:379
+msgid "Generate encryption keys"
 msgstr ""
 
-#: mod/photos.php:1507
-msgid "Tags: "
+#: mod/install.php:386
+msgid "libCurl PHP module"
 msgstr ""
 
-#: mod/photos.php:1510
-msgid "[Remove any tag]"
+#: mod/install.php:387
+msgid "GD graphics PHP module"
 msgstr ""
 
-#: mod/photos.php:1549
-msgid "New album name"
+#: mod/install.php:388
+msgid "OpenSSL PHP module"
 msgstr ""
 
-#: mod/photos.php:1550
-msgid "Caption"
+#: mod/install.php:389
+msgid "PDO or MySQLi PHP module"
 msgstr ""
 
-#: mod/photos.php:1551
-msgid "Add a Tag"
+#: mod/install.php:390
+msgid "mb_string PHP module"
 msgstr ""
 
-#: mod/photos.php:1551
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+#: mod/install.php:391
+msgid "XML PHP module"
 msgstr ""
 
-#: mod/photos.php:1552
-msgid "Do not rotate"
+#: mod/install.php:392
+msgid "iconv module"
 msgstr ""
 
-#: mod/photos.php:1553
-msgid "Rotate CW (right)"
+#: mod/install.php:396 mod/install.php:398
+msgid "Apache mod_rewrite module"
 msgstr ""
 
-#: mod/photos.php:1554
-msgid "Rotate CCW (left)"
+#: mod/install.php:396
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
 msgstr ""
 
-#: mod/photos.php:1569
-msgid "Private photo"
+#: mod/install.php:404
+msgid "Error: libCURL PHP module required but not installed."
 msgstr ""
 
-#: mod/photos.php:1570
-msgid "Public photo"
+#: mod/install.php:408
+msgid ""
+"Error: GD graphics PHP module with JPEG support required but not installed."
 msgstr ""
 
-#: mod/photos.php:1792
-msgid "Map"
+#: mod/install.php:412
+msgid "Error: openssl PHP module required but not installed."
 msgstr ""
 
-#: mod/photos.php:1867 mod/videos.php:391
-msgid "View Album"
+#: mod/install.php:416
+msgid "Error: PDO or MySQLi PHP module required but not installed."
 msgstr ""
 
-#: mod/ping.php:270
-msgid "{0} wants to be your friend"
+#: mod/install.php:420
+msgid "Error: The MySQL driver for PDO is not installed."
 msgstr ""
 
-#: mod/ping.php:285
-msgid "{0} sent you a message"
+#: mod/install.php:424
+msgid "Error: mb_string PHP module required but not installed."
 msgstr ""
 
-#: mod/ping.php:300
-msgid "{0} requested registration"
+#: mod/install.php:428
+msgid "Error: iconv PHP module required but not installed."
 msgstr ""
 
-#: mod/poke.php:196
-msgid "Poke/Prod"
+#: mod/install.php:438
+msgid "Error, XML PHP module required but not installed."
 msgstr ""
 
-#: mod/poke.php:197
-msgid "poke, prod or do other things to somebody"
+#: mod/install.php:450
+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/poke.php:198
-msgid "Recipient"
+#: mod/install.php:451
+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/poke.php:199
-msgid "Choose what you wish to do to recipient"
+#: mod/install.php:452
+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/poke.php:202
-msgid "Make this post private"
+#: mod/install.php:453
+msgid ""
+"You can alternatively skip this procedure and perform a manual installation. "
+"Please see the file \"INSTALL.txt\" for instructions."
 msgstr ""
 
-#: mod/profile.php:174
-msgid "Tips for New Members"
+#: mod/install.php:456
+msgid ".htconfig.php is writable"
 msgstr ""
 
-#: mod/profile_photo.php:44
-msgid "Image uploaded but image cropping failed."
+#: mod/install.php:466
+msgid ""
+"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
+"compiles templates to PHP to speed up rendering."
 msgstr ""
 
-#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93
-#: mod/profile_photo.php:323
-#, php-format
-msgid "Image size reduction [%s] failed."
+#: mod/install.php:467
+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/profile_photo.php:127
+#: mod/install.php:468
 msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
+"Please ensure that the user that your web server runs as (e.g. www-data) has "
+"write access to this folder."
 msgstr ""
 
-#: mod/profile_photo.php:137
-msgid "Unable to process image"
+#: mod/install.php:469
+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/profile_photo.php:254
-msgid "Upload File:"
+#: mod/install.php:472
+msgid "view/smarty3 is writable"
 msgstr ""
 
-#: mod/profile_photo.php:255
-msgid "Select a profile:"
+#: mod/install.php:488
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
 msgstr ""
 
-#: mod/profile_photo.php:257
-msgid "Upload"
+#: mod/install.php:490
+msgid "Url rewrite is working"
 msgstr ""
 
-#: mod/profile_photo.php:260
-msgid "or"
+#: mod/install.php:509
+msgid "ImageMagick PHP extension is not installed"
 msgstr ""
 
-#: mod/profile_photo.php:260
-msgid "skip this step"
+#: mod/install.php:511
+msgid "ImageMagick PHP extension is installed"
 msgstr ""
 
-#: mod/profile_photo.php:260
-msgid "select a photo from your photo albums"
+#: mod/install.php:513
+msgid "ImageMagick supports GIF"
 msgstr ""
 
-#: mod/profile_photo.php:274
-msgid "Crop Image"
+#: mod/install.php:520
+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/profile_photo.php:275
-msgid "Please adjust the image cropping for optimum viewing."
+#: mod/install.php:545
+msgid "<h1>What next</h1>"
 msgstr ""
 
-#: mod/profile_photo.php:277
-msgid "Done Editing"
+#: mod/install.php:546
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
 msgstr ""
 
-#: mod/profile_photo.php:313
-msgid "Image uploaded successfully."
+#: mod/item.php:116
+msgid "Unable to locate original post."
 msgstr ""
 
-#: mod/profiles.php:38
-msgid "Profile deleted."
+#: mod/item.php:344
+msgid "Empty post discarded."
 msgstr ""
 
-#: mod/profiles.php:56 mod/profiles.php:90
-msgid "Profile-"
+#: mod/item.php:904
+msgid "System error. Post not saved."
 msgstr ""
 
-#: mod/profiles.php:75 mod/profiles.php:118
-msgid "New profile created."
+#: mod/item.php:995
+#, php-format
+msgid ""
+"This message was sent to you by %s, a member of the Friendica social network."
 msgstr ""
 
-#: mod/profiles.php:96
-msgid "Profile unavailable to clone."
+#: mod/item.php:997
+#, php-format
+msgid "You may visit them online at %s"
 msgstr ""
 
-#: mod/profiles.php:190
-msgid "Profile Name is required."
+#: mod/item.php:998
+msgid ""
+"Please contact the sender by replying to this post if you do not wish to "
+"receive these messages."
 msgstr ""
 
-#: mod/profiles.php:338
-msgid "Marital Status"
+#: mod/item.php:1002
+#, php-format
+msgid "%s posted an update."
 msgstr ""
 
-#: mod/profiles.php:342
-msgid "Romantic Partner"
+#: mod/notifications.php:35
+msgid "Invalid request identifier."
 msgstr ""
 
-#: mod/profiles.php:354
-msgid "Work/Employment"
+#: mod/notifications.php:44 mod/notifications.php:180
+#: mod/notifications.php:227
+msgid "Discard"
 msgstr ""
 
-#: mod/profiles.php:357
-msgid "Religion"
+#: mod/notifications.php:105
+msgid "Network Notifications"
 msgstr ""
 
-#: mod/profiles.php:361
-msgid "Political Views"
+#: mod/notifications.php:117
+msgid "Personal Notifications"
 msgstr ""
 
-#: mod/profiles.php:365
-msgid "Gender"
+#: mod/notifications.php:123
+msgid "Home Notifications"
 msgstr ""
 
-#: mod/profiles.php:369
-msgid "Sexual Preference"
+#: mod/notifications.php:152
+msgid "Show Ignored Requests"
 msgstr ""
 
-#: mod/profiles.php:373
-msgid "XMPP"
+#: mod/notifications.php:152
+msgid "Hide Ignored Requests"
 msgstr ""
 
-#: mod/profiles.php:377
-msgid "Homepage"
+#: mod/notifications.php:164 mod/notifications.php:234
+msgid "Notification type: "
 msgstr ""
 
-#: mod/profiles.php:381 mod/profiles.php:694
-msgid "Interests"
+#: mod/notifications.php:167
+#, php-format
+msgid "suggested by %s"
 msgstr ""
 
-#: mod/profiles.php:385
-msgid "Address"
+#: mod/notifications.php:173 mod/notifications.php:252
+msgid "Post a new friend activity"
 msgstr ""
 
-#: mod/profiles.php:392 mod/profiles.php:690
-msgid "Location"
+#: mod/notifications.php:173 mod/notifications.php:252
+msgid "if applicable"
 msgstr ""
 
-#: mod/profiles.php:477
-msgid "Profile updated."
+#: mod/notifications.php:176 mod/notifications.php:261 mod/admin.php:1506
+msgid "Approve"
 msgstr ""
 
-#: mod/profiles.php:565
-msgid " and "
+#: mod/notifications.php:195
+msgid "Claims to be known to you: "
 msgstr ""
 
-#: mod/profiles.php:573
-msgid "public profile"
+#: mod/notifications.php:196
+msgid "yes"
 msgstr ""
 
-#: mod/profiles.php:576
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+#: mod/notifications.php:196
+msgid "no"
 msgstr ""
 
-#: mod/profiles.php:577
-#, php-format
-msgid " - Visit %1$s's %2$s"
+#: mod/notifications.php:197 mod/notifications.php:202
+msgid "Shall your connection be bidirectional or not?"
 msgstr ""
 
-#: mod/profiles.php:580
+#: mod/notifications.php:198 mod/notifications.php:203
 #, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
+msgid ""
+"Accepting %s as a friend allows %s to subscribe to your posts, and you will "
+"also receive updates from them in your news feed."
 msgstr ""
 
-#: mod/profiles.php:637
-msgid "Hide contacts and friends:"
+#: mod/notifications.php:199
+#, 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/profiles.php:642
-msgid "Hide your contact/friend list from viewers of this profile?"
+#: mod/notifications.php:204
+#, 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/profiles.php:666
-msgid "Show more profile fields:"
+#: mod/notifications.php:215
+msgid "Friend"
 msgstr ""
 
-#: mod/profiles.php:678
-msgid "Profile Actions"
+#: mod/notifications.php:216
+msgid "Sharer"
 msgstr ""
 
-#: mod/profiles.php:679
-msgid "Edit Profile Details"
+#: mod/notifications.php:216
+msgid "Subscriber"
 msgstr ""
 
-#: mod/profiles.php:681
-msgid "Change Profile Photo"
+#: mod/notifications.php:272
+msgid "No introductions."
 msgstr ""
 
-#: mod/profiles.php:682
-msgid "View this profile"
+#: mod/notifications.php:313
+msgid "Show unread"
 msgstr ""
 
-#: mod/profiles.php:684
-msgid "Create a new profile using these settings"
+#: mod/notifications.php:313
+msgid "Show all"
 msgstr ""
 
-#: mod/profiles.php:685
-msgid "Clone this profile"
+#: mod/notifications.php:319
+#, php-format
+msgid "No more %s notifications."
 msgstr ""
 
-#: mod/profiles.php:686
-msgid "Delete this profile"
+#: mod/ping.php:270
+msgid "{0} wants to be your friend"
 msgstr ""
 
-#: mod/profiles.php:688
-msgid "Basic information"
+#: mod/ping.php:285
+msgid "{0} sent you a message"
 msgstr ""
 
-#: mod/profiles.php:689
-msgid "Profile picture"
+#: mod/ping.php:300
+msgid "{0} requested registration"
 msgstr ""
 
-#: mod/profiles.php:691
-msgid "Preferences"
+#: mod/admin.php:96
+msgid "Theme settings updated."
 msgstr ""
 
-#: mod/profiles.php:692
-msgid "Status information"
+#: mod/admin.php:165 mod/admin.php:1054
+msgid "Site"
 msgstr ""
 
-#: mod/profiles.php:693
-msgid "Additional information"
+#: mod/admin.php:166 mod/admin.php:988 mod/admin.php:1498 mod/admin.php:1514
+msgid "Users"
 msgstr ""
 
-#: mod/profiles.php:696
-msgid "Relation"
+#: mod/admin.php:168 mod/admin.php:1892 mod/admin.php:1942
+msgid "Themes"
 msgstr ""
 
-#: mod/profiles.php:700
-msgid "Your Gender:"
+#: mod/admin.php:170
+msgid "DB updates"
 msgstr ""
 
-#: mod/profiles.php:701
-msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
+#: mod/admin.php:171 mod/admin.php:512
+msgid "Inspect Queue"
 msgstr ""
 
-#: mod/profiles.php:703
-msgid "Example: fishing photography software"
+#: mod/admin.php:172 mod/admin.php:288
+msgid "Server Blocklist"
 msgstr ""
 
-#: mod/profiles.php:708
-msgid "Profile Name:"
+#: mod/admin.php:173 mod/admin.php:478
+msgid "Federation Statistics"
 msgstr ""
 
-#: mod/profiles.php:710
-msgid ""
-"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
-"be visible to anybody using the internet."
+#: mod/admin.php:187 mod/admin.php:198 mod/admin.php:2016
+msgid "Logs"
 msgstr ""
 
-#: mod/profiles.php:711
-msgid "Your Full Name:"
+#: mod/admin.php:188 mod/admin.php:2084
+msgid "View Logs"
 msgstr ""
 
-#: mod/profiles.php:712
-msgid "Title/Description:"
+#: mod/admin.php:189
+msgid "probe address"
 msgstr ""
 
-#: mod/profiles.php:715
-msgid "Street Address:"
+#: mod/admin.php:190
+msgid "check webfinger"
 msgstr ""
 
-#: mod/profiles.php:716
-msgid "Locality/City:"
+#: mod/admin.php:197
+msgid "Plugin Features"
 msgstr ""
 
-#: mod/profiles.php:717
-msgid "Region/State:"
+#: mod/admin.php:199
+msgid "diagnostics"
 msgstr ""
 
-#: mod/profiles.php:718
-msgid "Postal/Zip Code:"
+#: mod/admin.php:200
+msgid "User registrations waiting for confirmation"
 msgstr ""
 
-#: mod/profiles.php:719
-msgid "Country:"
+#: mod/admin.php:279
+msgid "The blocked domain"
 msgstr ""
 
-#: mod/profiles.php:723
-msgid "Who: (if applicable)"
+#: mod/admin.php:280 mod/admin.php:293
+msgid "The reason why you blocked this domain."
 msgstr ""
 
-#: mod/profiles.php:723
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+#: mod/admin.php:281
+msgid "Delete domain"
 msgstr ""
 
-#: mod/profiles.php:724
-msgid "Since [date]:"
+#: mod/admin.php:281
+msgid "Check to delete this entry from the blocklist"
 msgstr ""
 
-#: mod/profiles.php:726
-msgid "Tell us about yourself..."
+#: mod/admin.php:287 mod/admin.php:477 mod/admin.php:511 mod/admin.php:586
+#: mod/admin.php:1053 mod/admin.php:1497 mod/admin.php:1615 mod/admin.php:1678
+#: mod/admin.php:1891 mod/admin.php:1941 mod/admin.php:2015 mod/admin.php:2083
+msgid "Administration"
 msgstr ""
 
-#: mod/profiles.php:727
-msgid "XMPP (Jabber) address:"
+#: mod/admin.php:289
+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/profiles.php:727
+#: mod/admin.php:290
 msgid ""
-"The XMPP address will be propagated to your contacts so that they can follow "
-"you."
+"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/profiles.php:728
-msgid "Homepage URL:"
+#: mod/admin.php:291
+msgid "Add new entry to block list"
 msgstr ""
 
-#: mod/profiles.php:731
-msgid "Religious Views:"
+#: mod/admin.php:292
+msgid "Server Domain"
 msgstr ""
 
-#: mod/profiles.php:732
-msgid "Public Keywords:"
+#: mod/admin.php:292
+msgid ""
+"The domain of the new server to add to the block list. Do not include the "
+"protocol."
 msgstr ""
 
-#: mod/profiles.php:732
-msgid "(Used for suggesting potential friends, can be seen by others)"
+#: mod/admin.php:293
+msgid "Block reason"
 msgstr ""
 
-#: mod/profiles.php:733
-msgid "Private Keywords:"
+#: mod/admin.php:294
+msgid "Add Entry"
 msgstr ""
 
-#: mod/profiles.php:733
-msgid "(Used for searching profiles, never shown to others)"
+#: mod/admin.php:295
+msgid "Save changes to the blocklist"
 msgstr ""
 
-#: mod/profiles.php:736
-msgid "Musical interests"
+#: mod/admin.php:296
+msgid "Current Entries in the Blocklist"
 msgstr ""
 
-#: mod/profiles.php:737
-msgid "Books, literature"
+#: mod/admin.php:299
+msgid "Delete entry from blocklist"
 msgstr ""
 
-#: mod/profiles.php:738
-msgid "Television"
+#: mod/admin.php:302
+msgid "Delete entry from blocklist?"
 msgstr ""
 
-#: mod/profiles.php:739
-msgid "Film/dance/culture/entertainment"
+#: mod/admin.php:327
+msgid "Server added to blocklist."
 msgstr ""
 
-#: mod/profiles.php:740
-msgid "Hobbies/Interests"
+#: mod/admin.php:343
+msgid "Site blocklist updated."
 msgstr ""
 
-#: mod/profiles.php:741
-msgid "Love/romance"
+#: mod/admin.php:408
+msgid "unknown"
 msgstr ""
 
-#: mod/profiles.php:742
-msgid "Work/employment"
+#: mod/admin.php:471
+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/profiles.php:743
-msgid "School/education"
+#: mod/admin.php:472
+msgid ""
+"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
+"will improve the data displayed here."
 msgstr ""
 
-#: mod/profiles.php:744
-msgid "Contact information and Social Networks"
+#: mod/admin.php:484
+#, php-format
+msgid "Currently this node is aware of %d nodes from the following platforms:"
 msgstr ""
 
-#: mod/profiles.php:788
-msgid "Edit/Manage Profiles"
+#: mod/admin.php:514
+msgid "ID"
 msgstr ""
 
-#: mod/profperm.php:26 mod/profperm.php:57
-msgid "Invalid profile identifier."
+#: mod/admin.php:515
+msgid "Recipient Name"
 msgstr ""
 
-#: mod/profperm.php:103
-msgid "Profile Visibility Editor"
+#: mod/admin.php:516
+msgid "Recipient Profile"
 msgstr ""
 
-#: mod/profperm.php:116
-msgid "Visible To"
+#: mod/admin.php:518
+msgid "Created"
 msgstr ""
 
-#: mod/profperm.php:132
-msgid "All Contacts (with secure profile access)"
+#: mod/admin.php:519
+msgid "Last Tried"
 msgstr ""
 
-#: mod/register.php:93
+#: mod/admin.php:520
 msgid ""
-"Registration successful. Please check your email for further instructions."
+"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/register.php:98
+#: mod/admin.php:545
 #, 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."
+"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/register.php:105
-msgid "Registration successful."
+#: mod/admin.php:550
+msgid ""
+"You are using a MySQL version which does not support all features that "
+"Friendica uses. You should consider switching to MariaDB."
+msgstr ""
+
+#: mod/admin.php:554 mod/admin.php:1447
+msgid "Normal Account"
 msgstr ""
 
-#: mod/register.php:111
-msgid "Your registration can not be processed."
+#: mod/admin.php:555 mod/admin.php:1448
+msgid "Soapbox Account"
 msgstr ""
 
-#: mod/register.php:160
-msgid "Your registration is pending approval by the site owner."
+#: mod/admin.php:556 mod/admin.php:1449
+msgid "Community/Celebrity Account"
 msgstr ""
 
-#: mod/register.php:198 mod/uimport.php:51
-msgid ""
-"This site has exceeded the number of allowed daily account registrations. "
-"Please try again tomorrow."
+#: mod/admin.php:557 mod/admin.php:1450
+msgid "Automatic Friend Account"
 msgstr ""
 
-#: mod/register.php:226
-msgid ""
-"You may (optionally) fill in this form via OpenID by supplying your OpenID "
-"and clicking 'Register'."
+#: mod/admin.php:558
+msgid "Blog Account"
 msgstr ""
 
-#: mod/register.php:227
-msgid ""
-"If you are not familiar with OpenID, please leave that field blank and fill "
-"in the rest of the items."
+#: mod/admin.php:559
+msgid "Private Forum"
 msgstr ""
 
-#: mod/register.php:228
-msgid "Your OpenID (optional): "
+#: mod/admin.php:581
+msgid "Message queues"
 msgstr ""
 
-#: mod/register.php:242
-msgid "Include your profile in member directory?"
+#: mod/admin.php:587
+msgid "Summary"
 msgstr ""
 
-#: mod/register.php:267
-msgid "Note for the admin"
+#: mod/admin.php:589
+msgid "Registered users"
 msgstr ""
 
-#: mod/register.php:267
-msgid "Leave a message for the admin, why you want to join this node"
+#: mod/admin.php:591
+msgid "Pending registrations"
 msgstr ""
 
-#: mod/register.php:268
-msgid "Membership on this site is by invitation only."
+#: mod/admin.php:592
+msgid "Version"
 msgstr ""
 
-#: mod/register.php:269
-msgid "Your invitation ID: "
+#: mod/admin.php:597
+msgid "Active plugins"
 msgstr ""
 
-#: mod/register.php:280
-msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
+#: mod/admin.php:622
+msgid "Can not parse base url. Must have at least <scheme>://<domain>"
 msgstr ""
 
-#: mod/register.php:281
-msgid "Your Email Address: "
+#: mod/admin.php:914
+msgid "Site settings updated."
 msgstr ""
 
-#: mod/register.php:283 mod/settings.php:1278
-msgid "New Password:"
+#: mod/admin.php:971
+msgid "No community page"
 msgstr ""
 
-#: mod/register.php:283
-msgid "Leave empty for an auto generated password."
+#: mod/admin.php:972
+msgid "Public postings from users of this site"
 msgstr ""
 
-#: mod/register.php:284 mod/settings.php:1279
-msgid "Confirm:"
+#: mod/admin.php:973
+msgid "Global community page"
 msgstr ""
 
-#: mod/register.php:285
-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/admin.php:979
+msgid "At post arrival"
 msgstr ""
 
-#: mod/register.php:286
-msgid "Choose a nickname: "
+#: mod/admin.php:989
+msgid "Users, Global Contacts"
 msgstr ""
 
-#: mod/register.php:295 mod/uimport.php:66
-msgid "Import"
+#: mod/admin.php:990
+msgid "Users, Global Contacts/fallback"
 msgstr ""
 
-#: mod/register.php:296
-msgid "Import your profile to this friendica instance"
+#: mod/admin.php:994
+msgid "One month"
 msgstr ""
 
-#: mod/regmod.php:58
-msgid "Account approved."
+#: mod/admin.php:995
+msgid "Three months"
 msgstr ""
 
-#: mod/regmod.php:95
-#, php-format
-msgid "Registration revoked for %s"
+#: mod/admin.php:996
+msgid "Half a year"
 msgstr ""
 
-#: mod/regmod.php:107
-msgid "Please login."
+#: mod/admin.php:997
+msgid "One year"
 msgstr ""
 
-#: mod/removeme.php:52 mod/removeme.php:55
-msgid "Remove My Account"
+#: mod/admin.php:1002
+msgid "Multi user instance"
 msgstr ""
 
-#: mod/removeme.php:53
-msgid ""
-"This will completely remove your account. Once this has been done it is not "
-"recoverable."
+#: mod/admin.php:1025
+msgid "Closed"
 msgstr ""
 
-#: mod/removeme.php:54
-msgid "Please enter your password for verification:"
+#: mod/admin.php:1026
+msgid "Requires approval"
 msgstr ""
 
-#: mod/repair_ostatus.php:14
-msgid "Resubscribing to OStatus contacts"
+#: mod/admin.php:1027
+msgid "Open"
 msgstr ""
 
-#: mod/repair_ostatus.php:30
-msgid "Error"
+#: mod/admin.php:1031
+msgid "No SSL policy, links will track page SSL state"
 msgstr ""
 
-#: mod/search.php:100
-msgid "Only logged in users are permitted to perform a search."
+#: mod/admin.php:1032
+msgid "Force all links to use SSL"
 msgstr ""
 
-#: mod/search.php:124
-msgid "Too Many Requests"
+#: mod/admin.php:1033
+msgid "Self-signed certificate, use SSL for local links only (discouraged)"
 msgstr ""
 
-#: mod/search.php:125
-msgid "Only one search per minute is permitted for not logged in users."
+#: mod/admin.php:1057
+msgid "File upload"
 msgstr ""
 
-#: mod/search.php:230
-#, php-format
-msgid "Items tagged with: %s"
+#: mod/admin.php:1058
+msgid "Policies"
 msgstr ""
 
-#: mod/settings.php:60
-msgid "Display"
+#: mod/admin.php:1060
+msgid "Auto Discovered Contact Directory"
 msgstr ""
 
-#: mod/settings.php:67 mod/settings.php:890
-msgid "Social Networks"
+#: mod/admin.php:1061
+msgid "Performance"
 msgstr ""
 
-#: mod/settings.php:88
-msgid "Connected apps"
+#: mod/admin.php:1062
+msgid "Worker"
 msgstr ""
 
-#: mod/settings.php:95 mod/uexport.php:45
-msgid "Export personal data"
+#: mod/admin.php:1063
+msgid ""
+"Relocate - WARNING: advanced function. Could make this server unreachable."
 msgstr ""
 
-#: mod/settings.php:102
-msgid "Remove account"
+#: mod/admin.php:1066
+msgid "Site name"
 msgstr ""
 
-#: mod/settings.php:157
-msgid "Missing some important data!"
+#: mod/admin.php:1067
+msgid "Host name"
 msgstr ""
 
-#: mod/settings.php:271
-msgid "Failed to connect with email account using the settings provided."
+#: mod/admin.php:1068
+msgid "Sender Email"
 msgstr ""
 
-#: mod/settings.php:276
-msgid "Email settings updated."
+#: mod/admin.php:1068
+msgid ""
+"The email address your server shall use to send notification emails from."
 msgstr ""
 
-#: mod/settings.php:291
-msgid "Features updated"
+#: mod/admin.php:1069
+msgid "Banner/Logo"
 msgstr ""
 
-#: mod/settings.php:361
-msgid "Relocate message has been send to your contacts"
+#: mod/admin.php:1070
+msgid "Shortcut icon"
 msgstr ""
 
-#: mod/settings.php:380
-msgid "Empty passwords are not allowed. Password unchanged."
+#: mod/admin.php:1070
+msgid "Link to an icon that will be used for browsers."
 msgstr ""
 
-#: mod/settings.php:388
-msgid "Wrong password."
+#: mod/admin.php:1071
+msgid "Touch icon"
 msgstr ""
 
-#: mod/settings.php:399
-msgid "Password changed."
+#: mod/admin.php:1071
+msgid "Link to an icon that will be used for tablets and mobiles."
 msgstr ""
 
-#: mod/settings.php:401
-msgid "Password update failed. Please try again."
+#: mod/admin.php:1072
+msgid "Additional Info"
 msgstr ""
 
-#: mod/settings.php:481
-msgid " Please use a shorter name."
+#: mod/admin.php:1072
+#, php-format
+msgid ""
+"For public servers: you can add additional information here that will be "
+"listed at %s/siteinfo."
 msgstr ""
 
-#: mod/settings.php:483
-msgid " Name too short."
+#: mod/admin.php:1073
+msgid "System language"
 msgstr ""
 
-#: mod/settings.php:492
-msgid "Wrong Password"
+#: mod/admin.php:1074
+msgid "System theme"
 msgstr ""
 
-#: mod/settings.php:497
-msgid " Not valid email."
+#: mod/admin.php:1074
+msgid ""
+"Default system theme - may be over-ridden by user profiles - <a href='#' "
+"id='cnftheme'>change theme settings</a>"
 msgstr ""
 
-#: mod/settings.php:503
-msgid " Cannot change to that email."
+#: mod/admin.php:1075
+msgid "Mobile system theme"
 msgstr ""
 
-#: mod/settings.php:559
-msgid "Private forum has no privacy permissions. Using default privacy group."
+#: mod/admin.php:1075
+msgid "Theme for mobile devices"
 msgstr ""
 
-#: mod/settings.php:563
-msgid "Private forum has no privacy permissions and no default privacy group."
+#: mod/admin.php:1076
+msgid "SSL link policy"
 msgstr ""
 
-#: mod/settings.php:603
-msgid "Settings updated."
+#: mod/admin.php:1076
+msgid "Determines whether generated links should be forced to use SSL"
 msgstr ""
 
-#: mod/settings.php:680 mod/settings.php:706 mod/settings.php:742
-msgid "Add application"
+#: mod/admin.php:1077
+msgid "Force SSL"
 msgstr ""
 
-#: mod/settings.php:684 mod/settings.php:710
-msgid "Consumer Key"
+#: mod/admin.php:1077
+msgid ""
+"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
+"to endless loops."
 msgstr ""
 
-#: mod/settings.php:685 mod/settings.php:711
-msgid "Consumer Secret"
+#: mod/admin.php:1078
+msgid "Hide help entry from navigation menu"
 msgstr ""
 
-#: mod/settings.php:686 mod/settings.php:712
-msgid "Redirect"
+#: mod/admin.php:1078
+msgid ""
+"Hides the menu entry for the Help pages from the navigation menu. You can "
+"still access it calling /help directly."
 msgstr ""
 
-#: mod/settings.php:687 mod/settings.php:713
-msgid "Icon url"
+#: mod/admin.php:1079
+msgid "Single user instance"
 msgstr ""
 
-#: mod/settings.php:698
-msgid "You can't edit this application."
+#: mod/admin.php:1079
+msgid "Make this instance multi-user or single-user for the named user"
 msgstr ""
 
-#: mod/settings.php:741
-msgid "Connected Apps"
+#: mod/admin.php:1080
+msgid "Maximum image size"
 msgstr ""
 
-#: mod/settings.php:745
-msgid "Client key starts with"
+#: mod/admin.php:1080
+msgid ""
+"Maximum size in bytes of uploaded images. Default is 0, which means no "
+"limits."
 msgstr ""
 
-#: mod/settings.php:746
-msgid "No name"
+#: mod/admin.php:1081
+msgid "Maximum image length"
 msgstr ""
 
-#: mod/settings.php:747
-msgid "Remove authorization"
+#: mod/admin.php:1081
+msgid ""
+"Maximum length in pixels of the longest side of uploaded images. Default is "
+"-1, which means no limits."
 msgstr ""
 
-#: mod/settings.php:759
-msgid "No Plugin settings configured"
+#: mod/admin.php:1082
+msgid "JPEG image quality"
 msgstr ""
 
-#: mod/settings.php:768
-msgid "Plugin Settings"
+#: mod/admin.php:1082
+msgid ""
+"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
+"100, which is full quality."
 msgstr ""
 
-#: mod/settings.php:790
-msgid "Additional Features"
+#: mod/admin.php:1084
+msgid "Register policy"
 msgstr ""
 
-#: mod/settings.php:800 mod/settings.php:804
-msgid "General Social Media Settings"
+#: mod/admin.php:1085
+msgid "Maximum Daily Registrations"
 msgstr ""
 
-#: mod/settings.php:810
-msgid "Disable intelligent shortening"
+#: mod/admin.php:1085
+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/settings.php:812
-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."
+#: mod/admin.php:1086
+msgid "Register text"
 msgstr ""
 
-#: mod/settings.php:818
-msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
+#: mod/admin.php:1086
+msgid "Will be displayed prominently on the registration page."
 msgstr ""
 
-#: mod/settings.php:820
-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."
+#: mod/admin.php:1087
+msgid "Accounts abandoned after x days"
 msgstr ""
 
-#: mod/settings.php:826
-msgid "Default group for OStatus contacts"
+#: mod/admin.php:1087
+msgid ""
+"Will not waste system resources polling external sites for abandonded "
+"accounts. Enter 0 for no time limit."
 msgstr ""
 
-#: mod/settings.php:834
-msgid "Your legacy GNU Social account"
+#: mod/admin.php:1088
+msgid "Allowed friend domains"
 msgstr ""
 
-#: mod/settings.php:836
+#: mod/admin.php:1088
 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."
+"Comma separated list of domains which are allowed to establish friendships "
+"with this site. Wildcards are accepted. Empty to allow any domains"
 msgstr ""
 
-#: mod/settings.php:839
-msgid "Repair OStatus subscriptions"
+#: mod/admin.php:1089
+msgid "Allowed email domains"
 msgstr ""
 
-#: mod/settings.php:848 mod/settings.php:849
-#, php-format
-msgid "Built-in support for %s connectivity is %s"
+#: mod/admin.php:1089
+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/settings.php:848 mod/settings.php:849
-msgid "enabled"
+#: mod/admin.php:1090
+msgid "Block public"
 msgstr ""
 
-#: mod/settings.php:848 mod/settings.php:849
-msgid "disabled"
+#: mod/admin.php:1090
+msgid ""
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently logged in."
 msgstr ""
 
-#: mod/settings.php:849
-msgid "GNU Social (OStatus)"
+#: mod/admin.php:1091
+msgid "Force publish"
 msgstr ""
 
-#: mod/settings.php:883
-msgid "Email access is disabled on this site."
+#: mod/admin.php:1091
+msgid ""
+"Check to force all profiles on this site to be listed in the site directory."
 msgstr ""
 
-#: mod/settings.php:895
-msgid "Email/Mailbox Setup"
+#: mod/admin.php:1092
+msgid "Global directory URL"
 msgstr ""
 
-#: mod/settings.php:896
+#: mod/admin.php:1092
 msgid ""
-"If you wish to communicate with email contacts using this service "
-"(optional), please specify how to connect to your mailbox."
+"URL to the global directory. If this is not set, the global directory is "
+"completely unavailable to the application."
 msgstr ""
 
-#: mod/settings.php:897
-msgid "Last successful email check:"
+#: mod/admin.php:1093
+msgid "Allow threaded items"
 msgstr ""
 
-#: mod/settings.php:899
-msgid "IMAP server name:"
+#: mod/admin.php:1093
+msgid "Allow infinite level threading for items on this site."
 msgstr ""
 
-#: mod/settings.php:900
-msgid "IMAP port:"
+#: mod/admin.php:1094
+msgid "Private posts by default for new users"
 msgstr ""
 
-#: mod/settings.php:901
-msgid "Security:"
+#: mod/admin.php:1094
+msgid ""
+"Set default post permissions for all new members to the default privacy "
+"group rather than public."
 msgstr ""
 
-#: mod/settings.php:901 mod/settings.php:906
-msgid "None"
+#: mod/admin.php:1095
+msgid "Don't include post content in email notifications"
 msgstr ""
 
-#: mod/settings.php:902
-msgid "Email login name:"
+#: mod/admin.php:1095
+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/settings.php:903
-msgid "Email password:"
+#: mod/admin.php:1096
+msgid "Disallow public access to addons listed in the apps menu."
 msgstr ""
 
-#: mod/settings.php:904
-msgid "Reply-to address:"
+#: mod/admin.php:1096
+msgid ""
+"Checking this box will restrict addons listed in the apps menu to members "
+"only."
 msgstr ""
 
-#: mod/settings.php:905
-msgid "Send public posts to all email contacts:"
+#: mod/admin.php:1097
+msgid "Don't embed private images in posts"
 msgstr ""
 
-#: mod/settings.php:906
-msgid "Action after import:"
+#: mod/admin.php:1097
+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/settings.php:906
-msgid "Move to folder"
+#: mod/admin.php:1098
+msgid "Allow Users to set remote_self"
 msgstr ""
 
-#: mod/settings.php:907
-msgid "Move to folder:"
+#: mod/admin.php:1098
+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/settings.php:1003
-msgid "Display Settings"
+#: mod/admin.php:1099
+msgid "Block multiple registrations"
 msgstr ""
 
-#: mod/settings.php:1009 mod/settings.php:1032
-msgid "Display Theme:"
+#: mod/admin.php:1099
+msgid "Disallow users to register additional accounts for use as pages."
 msgstr ""
 
-#: mod/settings.php:1010
-msgid "Mobile Theme:"
+#: mod/admin.php:1100
+msgid "OpenID support"
 msgstr ""
 
-#: mod/settings.php:1011
-msgid "Suppress warning of insecure networks"
+#: mod/admin.php:1100
+msgid "OpenID support for registration and logins."
 msgstr ""
 
-#: mod/settings.php:1011
-msgid ""
-"Should the system suppress the warning that the current group contains "
-"members of networks that can't receive non public postings."
+#: mod/admin.php:1101
+msgid "Fullname check"
 msgstr ""
 
-#: mod/settings.php:1012
-msgid "Update browser every xx seconds"
+#: mod/admin.php:1101
+msgid ""
+"Force users to register with a space between firstname and lastname in Full "
+"name, as an antispam measure"
 msgstr ""
 
-#: mod/settings.php:1012
-msgid "Minimum of 10 seconds. Enter -1 to disable it."
+#: mod/admin.php:1102
+msgid "Community Page Style"
 msgstr ""
 
-#: mod/settings.php:1013
-msgid "Number of items to display per page:"
+#: mod/admin.php:1102
+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/settings.php:1013 mod/settings.php:1014
-msgid "Maximum of 100 items"
+#: mod/admin.php:1103
+msgid "Posts per user on community page"
 msgstr ""
 
-#: mod/settings.php:1014
-msgid "Number of items to display per page when viewed from mobile device:"
+#: mod/admin.php:1103
+msgid ""
+"The maximum number of posts per user on the community page. (Not valid for "
+"'Global Community')"
 msgstr ""
 
-#: mod/settings.php:1015
-msgid "Don't show emoticons"
+#: mod/admin.php:1104
+msgid "Enable OStatus support"
 msgstr ""
 
-#: mod/settings.php:1016
-msgid "Calendar"
+#: mod/admin.php:1104
+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/settings.php:1017
-msgid "Beginning of week:"
+#: mod/admin.php:1105
+msgid "OStatus conversation completion interval"
 msgstr ""
 
-#: mod/settings.php:1018
-msgid "Don't show notices"
+#: mod/admin.php:1105
+msgid ""
+"How often shall the poller check for new entries in OStatus conversations? "
+"This can be a very ressource task."
 msgstr ""
 
-#: mod/settings.php:1019
-msgid "Infinite scroll"
+#: mod/admin.php:1106
+msgid "Only import OStatus threads from our contacts"
 msgstr ""
 
-#: mod/settings.php:1020
-msgid "Automatic updates only at the top of the network page"
+#: mod/admin.php:1106
+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/settings.php:1021
-msgid "Bandwith Saver Mode"
+#: mod/admin.php:1107
+msgid "OStatus support can only be enabled if threading is enabled."
 msgstr ""
 
-#: mod/settings.php:1021
+#: mod/admin.php:1109
 msgid ""
-"When enabled, embedded content is not displayed on automatic updates, they "
-"only show on page reload."
+"Diaspora support can't be enabled because Friendica was installed into a sub "
+"directory."
 msgstr ""
 
-#: mod/settings.php:1023
-msgid "General Theme Settings"
+#: mod/admin.php:1110
+msgid "Enable Diaspora support"
 msgstr ""
 
-#: mod/settings.php:1024
-msgid "Custom Theme Settings"
+#: mod/admin.php:1110
+msgid "Provide built-in Diaspora network compatibility."
 msgstr ""
 
-#: mod/settings.php:1025
-msgid "Content Settings"
+#: mod/admin.php:1111
+msgid "Only allow Friendica contacts"
 msgstr ""
 
-#: mod/settings.php:1026 view/theme/duepuntozero/config.php:63
-#: view/theme/frio/config.php:66 view/theme/quattro/config.php:69
-#: view/theme/vier/config.php:114
-msgid "Theme settings"
+#: mod/admin.php:1111
+msgid ""
+"All contacts must use Friendica protocols. All other built-in communication "
+"protocols disabled."
 msgstr ""
 
-#: mod/settings.php:1110
-msgid "Account Types"
+#: mod/admin.php:1112
+msgid "Verify SSL"
 msgstr ""
 
-#: mod/settings.php:1111
-msgid "Personal Page Subtypes"
+#: mod/admin.php:1112
+msgid ""
+"If you wish, you can turn on strict certificate checking. This will mean you "
+"cannot connect (at all) to self-signed SSL sites."
 msgstr ""
 
-#: mod/settings.php:1112
-msgid "Community Forum Subtypes"
+#: mod/admin.php:1113
+msgid "Proxy user"
 msgstr ""
 
-#: mod/settings.php:1119
-msgid "Personal Page"
+#: mod/admin.php:1114
+msgid "Proxy URL"
 msgstr ""
 
-#: mod/settings.php:1120
-msgid "This account is a regular personal profile"
+#: mod/admin.php:1115
+msgid "Network timeout"
 msgstr ""
 
-#: mod/settings.php:1123
-msgid "Organisation Page"
+#: mod/admin.php:1115
+msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
 msgstr ""
 
-#: mod/settings.php:1124
-msgid "This account is a profile for an organisation"
+#: mod/admin.php:1116
+msgid "Maximum Load Average"
 msgstr ""
 
-#: mod/settings.php:1127
-msgid "News Page"
+#: mod/admin.php:1116
+msgid ""
+"Maximum system load before delivery and poll processes are deferred - "
+"default 50."
 msgstr ""
 
-#: mod/settings.php:1128
-msgid "This account is a news account/reflector"
+#: mod/admin.php:1117
+msgid "Maximum Load Average (Frontend)"
 msgstr ""
 
-#: mod/settings.php:1131
-msgid "Community Forum"
+#: mod/admin.php:1117
+msgid "Maximum system load before the frontend quits service - default 50."
 msgstr ""
 
-#: mod/settings.php:1132
+#: mod/admin.php:1118
+msgid "Minimal Memory"
+msgstr ""
+
+#: mod/admin.php:1118
 msgid ""
-"This account is a community forum where people can discuss with each other"
+"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - "
+"default 0 (deactivated)."
 msgstr ""
 
-#: mod/settings.php:1135
-msgid "Normal Account Page"
+#: mod/admin.php:1119
+msgid "Maximum table size for optimization"
 msgstr ""
 
-#: mod/settings.php:1136
-msgid "This account is a normal personal profile"
+#: mod/admin.php:1119
+msgid ""
+"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
+"Enter -1 to disable it."
 msgstr ""
 
-#: mod/settings.php:1139
-msgid "Soapbox Page"
+#: mod/admin.php:1120
+msgid "Minimum level of fragmentation"
 msgstr ""
 
-#: mod/settings.php:1140
-msgid "Automatically approve all connection/friend requests as read-only fans"
+#: mod/admin.php:1120
+msgid ""
+"Minimum fragmenation level to start the automatic optimization - default "
+"value is 30%."
 msgstr ""
 
-#: mod/settings.php:1143
-msgid "Public Forum"
+#: mod/admin.php:1122
+msgid "Periodical check of global contacts"
 msgstr ""
 
-#: mod/settings.php:1144
-msgid "Automatically approve all contact requests"
+#: mod/admin.php:1122
+msgid ""
+"If enabled, the global contacts are checked periodically for missing or "
+"outdated data and the vitality of the contacts and servers."
 msgstr ""
 
-#: mod/settings.php:1147
-msgid "Automatic Friend Page"
+#: mod/admin.php:1123
+msgid "Days between requery"
 msgstr ""
 
-#: mod/settings.php:1148
-msgid "Automatically approve all connection/friend requests as friends"
+#: mod/admin.php:1123
+msgid "Number of days after which a server is requeried for his contacts."
 msgstr ""
 
-#: mod/settings.php:1151
-msgid "Private Forum [Experimental]"
+#: mod/admin.php:1124
+msgid "Discover contacts from other servers"
 msgstr ""
 
-#: mod/settings.php:1152
-msgid "Private forum - approved members only"
+#: mod/admin.php:1124
+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'."
 msgstr ""
 
-#: mod/settings.php:1163
-msgid "OpenID:"
+#: mod/admin.php:1125
+msgid "Timeframe for fetching global contacts"
 msgstr ""
 
-#: mod/settings.php:1163
-msgid "(Optional) Allow this OpenID to login to this account."
+#: mod/admin.php:1125
+msgid ""
+"When the discovery is activated, this value defines the timeframe for the "
+"activity of the global contacts that are fetched from other servers."
 msgstr ""
 
-#: mod/settings.php:1171
-msgid "Publish your default profile in your local site directory?"
+#: mod/admin.php:1126
+msgid "Search the local directory"
 msgstr ""
 
-#: mod/settings.php:1177
-msgid "Publish your default profile in the global social directory?"
+#: mod/admin.php:1126
+msgid ""
+"Search the local directory instead of the global directory. When searching "
+"locally, every search will be executed on the global directory in the "
+"background. This improves the search results when the search is repeated."
 msgstr ""
 
-#: mod/settings.php:1184
-msgid "Hide your contact/friend list from viewers of your default profile?"
+#: mod/admin.php:1128
+msgid "Publish server information"
 msgstr ""
 
-#: mod/settings.php:1188
+#: mod/admin.php:1128
 msgid ""
-"If enabled, posting public messages to Diaspora and other networks isn't "
-"possible."
+"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/settings.php:1193
-msgid "Allow friends to post to your profile page?"
+#: mod/admin.php:1130
+msgid "Suppress Tags"
 msgstr ""
 
-#: mod/settings.php:1198
-msgid "Allow friends to tag your posts?"
+#: mod/admin.php:1130
+msgid "Suppress showing a list of hashtags at the end of the posting."
 msgstr ""
 
-#: mod/settings.php:1203
-msgid "Allow us to suggest you as a potential friend to new members?"
+#: mod/admin.php:1131
+msgid "Path to item cache"
 msgstr ""
 
-#: mod/settings.php:1208
-msgid "Permit unknown people to send you private mail?"
+#: mod/admin.php:1131
+msgid "The item caches buffers generated bbcode and external images."
 msgstr ""
 
-#: mod/settings.php:1216
-msgid "Profile is <strong>not published</strong>."
+#: mod/admin.php:1132
+msgid "Cache duration in seconds"
 msgstr ""
 
-#: mod/settings.php:1224
-#, php-format
-msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
+#: mod/admin.php:1132
+msgid ""
+"How long should the cache files be hold? Default value is 86400 seconds (One "
+"day). To disable the item cache, set the value to -1."
 msgstr ""
 
-#: mod/settings.php:1231
-msgid "Automatically expire posts after this many days:"
+#: mod/admin.php:1133
+msgid "Maximum numbers of comments per post"
 msgstr ""
 
-#: mod/settings.php:1231
-msgid "If empty, posts will not expire. Expired posts will be deleted"
+#: mod/admin.php:1133
+msgid "How much comments should be shown for each post? Default value is 100."
 msgstr ""
 
-#: mod/settings.php:1232
-msgid "Advanced expiration settings"
+#: mod/admin.php:1134
+msgid "Temp path"
 msgstr ""
 
-#: mod/settings.php:1233
-msgid "Advanced Expiration"
+#: mod/admin.php:1134
+msgid ""
+"If you have a restricted system where the webserver can't access the system "
+"temp path, enter another path here."
 msgstr ""
 
-#: mod/settings.php:1234
-msgid "Expire posts:"
+#: mod/admin.php:1135
+msgid "Base path to installation"
 msgstr ""
 
-#: mod/settings.php:1235
-msgid "Expire personal notes:"
+#: mod/admin.php:1135
+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/settings.php:1236
-msgid "Expire starred posts:"
+#: mod/admin.php:1136
+msgid "Disable picture proxy"
 msgstr ""
 
-#: mod/settings.php:1237
-msgid "Expire photos:"
+#: mod/admin.php:1136
+msgid ""
+"The picture proxy increases performance and privacy. It shouldn't be used on "
+"systems with very low bandwith."
 msgstr ""
 
-#: mod/settings.php:1238
-msgid "Only expire posts by others:"
+#: mod/admin.php:1137
+msgid "Only search in tags"
 msgstr ""
 
-#: mod/settings.php:1269
-msgid "Account Settings"
+#: mod/admin.php:1137
+msgid "On large systems the text search can slow down the system extremely."
 msgstr ""
 
-#: mod/settings.php:1277
-msgid "Password Settings"
+#: mod/admin.php:1139
+msgid "New base url"
 msgstr ""
 
-#: mod/settings.php:1279
-msgid "Leave password fields blank unless changing"
+#: mod/admin.php:1139
+msgid ""
+"Change base url for this server. Sends relocate message to all DFRN contacts "
+"of all users."
 msgstr ""
 
-#: mod/settings.php:1280
-msgid "Current Password:"
+#: mod/admin.php:1141
+msgid "RINO Encryption"
 msgstr ""
 
-#: mod/settings.php:1280 mod/settings.php:1281
-msgid "Your current password to confirm the changes"
+#: mod/admin.php:1141
+msgid "Encryption layer between nodes."
 msgstr ""
 
-#: mod/settings.php:1281
-msgid "Password:"
+#: mod/admin.php:1143
+msgid "Maximum number of parallel workers"
 msgstr ""
 
-#: mod/settings.php:1285
-msgid "Basic Settings"
+#: mod/admin.php:1143
+msgid ""
+"On shared hosters set this to 2. On larger systems, values of 10 are great. "
+"Default value is 4."
 msgstr ""
 
-#: mod/settings.php:1287
-msgid "Email Address:"
+#: mod/admin.php:1144
+msgid "Don't use 'proc_open' with the worker"
 msgstr ""
 
-#: mod/settings.php:1288
-msgid "Your Timezone:"
+#: mod/admin.php:1144
+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/settings.php:1289
-msgid "Your Language:"
+#: mod/admin.php:1145
+msgid "Enable fastlane"
 msgstr ""
 
-#: mod/settings.php:1289
+#: mod/admin.php:1145
 msgid ""
-"Set the language we use to show you friendica interface and to send you "
-"emails"
+"When enabed, the fastlane mechanism starts an additional worker if processes "
+"with higher priority are blocked by processes of lower priority."
 msgstr ""
 
-#: mod/settings.php:1290
-msgid "Default Post Location:"
+#: mod/admin.php:1146
+msgid "Enable frontend worker"
 msgstr ""
 
-#: mod/settings.php:1291
-msgid "Use Browser Location:"
+#: mod/admin.php:1146
+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 yourdomain.tld/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. The worker background process needs to be activated for this."
 msgstr ""
 
-#: mod/settings.php:1294
-msgid "Security and Privacy Settings"
+#: mod/admin.php:1176
+msgid "Update has been marked successful"
 msgstr ""
 
-#: mod/settings.php:1296
-msgid "Maximum Friend Requests/Day:"
+#: mod/admin.php:1184
+#, php-format
+msgid "Database structure update %s was successfully applied."
 msgstr ""
 
-#: mod/settings.php:1296 mod/settings.php:1326
-msgid "(to prevent spam abuse)"
+#: mod/admin.php:1187
+#, php-format
+msgid "Executing of database structure update %s failed with error: %s"
 msgstr ""
 
-#: mod/settings.php:1297
-msgid "Default Post Permissions"
+#: mod/admin.php:1201
+#, php-format
+msgid "Executing %s failed with error: %s"
 msgstr ""
 
-#: mod/settings.php:1298
-msgid "(click to open/close)"
+#: mod/admin.php:1204
+#, php-format
+msgid "Update %s was successfully applied."
 msgstr ""
 
-#: mod/settings.php:1309
-msgid "Default Private Post"
+#: mod/admin.php:1207
+#, php-format
+msgid "Update %s did not return a status. Unknown if it succeeded."
 msgstr ""
 
-#: mod/settings.php:1310
-msgid "Default Public Post"
+#: mod/admin.php:1210
+#, php-format
+msgid "There was no additional update function %s that needed to be called."
 msgstr ""
 
-#: mod/settings.php:1314
-msgid "Default Permissions for New Posts"
+#: mod/admin.php:1230
+msgid "No failed updates."
 msgstr ""
 
-#: mod/settings.php:1326
-msgid "Maximum private messages per day from unknown people:"
+#: mod/admin.php:1231
+msgid "Check database structure"
 msgstr ""
 
-#: mod/settings.php:1329
-msgid "Notification Settings"
+#: mod/admin.php:1236
+msgid "Failed Updates"
 msgstr ""
 
-#: mod/settings.php:1330
-msgid "By default post a status message when:"
+#: mod/admin.php:1237
+msgid ""
+"This does not include updates prior to 1139, which did not return a status."
 msgstr ""
 
-#: mod/settings.php:1331
-msgid "accepting a friend request"
+#: mod/admin.php:1238
+msgid "Mark success (if update was manually applied)"
 msgstr ""
 
-#: mod/settings.php:1332
-msgid "joining a forum/community"
+#: mod/admin.php:1239
+msgid "Attempt to execute this update step automatically"
 msgstr ""
 
-#: mod/settings.php:1333
-msgid "making an <em>interesting</em> profile change"
+#: mod/admin.php:1273
+#, 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:1276
+#, 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/settings.php:1334
-msgid "Send a notification email when:"
-msgstr ""
+#: mod/admin.php:1320
+#, php-format
+msgid "%s user blocked/unblocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/settings.php:1335
-msgid "You receive an introduction"
-msgstr ""
+#: mod/admin.php:1327
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] ""
+msgstr[1] ""
 
-#: mod/settings.php:1336
-msgid "Your introductions are confirmed"
+#: mod/admin.php:1374
+#, php-format
+msgid "User '%s' deleted"
 msgstr ""
 
-#: mod/settings.php:1337
-msgid "Someone writes on your profile wall"
+#: mod/admin.php:1382
+#, php-format
+msgid "User '%s' unblocked"
 msgstr ""
 
-#: mod/settings.php:1338
-msgid "Someone writes a followup comment"
+#: mod/admin.php:1382
+#, php-format
+msgid "User '%s' blocked"
 msgstr ""
 
-#: mod/settings.php:1339
-msgid "You receive a private message"
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Register date"
 msgstr ""
 
-#: mod/settings.php:1340
-msgid "You receive a friend suggestion"
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Last login"
 msgstr ""
 
-#: mod/settings.php:1341
-msgid "You are tagged in a post"
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Last item"
 msgstr ""
 
-#: mod/settings.php:1342
-msgid "You are poked/prodded/etc. in a post"
+#: mod/admin.php:1499
+msgid "Add User"
 msgstr ""
 
-#: mod/settings.php:1344
-msgid "Activate desktop notifications"
+#: mod/admin.php:1500
+msgid "select all"
 msgstr ""
 
-#: mod/settings.php:1344
-msgid "Show desktop popup on new notifications"
+#: mod/admin.php:1501
+msgid "User registrations waiting for confirm"
 msgstr ""
 
-#: mod/settings.php:1346
-msgid "Text-only notification emails"
+#: mod/admin.php:1502
+msgid "User waiting for permanent deletion"
 msgstr ""
 
-#: mod/settings.php:1348
-msgid "Send text only notification emails, without the html part"
+#: mod/admin.php:1503
+msgid "Request date"
 msgstr ""
 
-#: mod/settings.php:1350
-msgid "Advanced Account/Page Type Settings"
+#: mod/admin.php:1504
+msgid "No registrations."
 msgstr ""
 
-#: mod/settings.php:1351
-msgid "Change the behaviour of this account for special situations"
+#: mod/admin.php:1505
+msgid "Note from the user"
 msgstr ""
 
-#: mod/settings.php:1354
-msgid "Relocate"
+#: mod/admin.php:1507
+msgid "Deny"
 msgstr ""
 
-#: mod/settings.php:1355
-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/admin.php:1511
+msgid "Site admin"
 msgstr ""
 
-#: mod/settings.php:1356
-msgid "Resend relocate message to contacts"
+#: mod/admin.php:1512
+msgid "Account expired"
 msgstr ""
 
-#: mod/subthread.php:104
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
+#: mod/admin.php:1515
+msgid "New User"
 msgstr ""
 
-#: mod/suggest.php:27
-msgid "Do you really want to delete this suggestion?"
+#: mod/admin.php:1516
+msgid "Deleted since"
 msgstr ""
 
-#: mod/suggest.php:71
+#: mod/admin.php:1521
 msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
 msgstr ""
 
-#: mod/suggest.php:84 mod/suggest.php:104
-msgid "Ignore/Hide"
+#: mod/admin.php:1522
+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/tagrm.php:43
-msgid "Tag removed"
+#: mod/admin.php:1532
+msgid "Name of the new user."
 msgstr ""
 
-#: mod/tagrm.php:82
-msgid "Remove Item Tag"
+#: mod/admin.php:1533
+msgid "Nickname"
 msgstr ""
 
-#: mod/tagrm.php:84
-msgid "Select a tag to remove: "
+#: mod/admin.php:1533
+msgid "Nickname of the new user."
 msgstr ""
 
-#: mod/uexport.php:37
-msgid "Export account"
+#: mod/admin.php:1534
+msgid "Email address of the new user."
 msgstr ""
 
-#: mod/uexport.php:37
-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/admin.php:1577
+#, php-format
+msgid "Plugin %s disabled."
 msgstr ""
 
-#: mod/uexport.php:38
-msgid "Export all"
+#: mod/admin.php:1581
+#, php-format
+msgid "Plugin %s enabled."
 msgstr ""
 
-#: mod/uexport.php:38
-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/admin.php:1592 mod/admin.php:1844
+msgid "Disable"
 msgstr ""
 
-#: mod/uimport.php:68
-msgid "Move account"
+#: mod/admin.php:1594 mod/admin.php:1846
+msgid "Enable"
 msgstr ""
 
-#: mod/uimport.php:69
-msgid "You can import an account from another Friendica server."
+#: mod/admin.php:1617 mod/admin.php:1893
+msgid "Toggle"
 msgstr ""
 
-#: mod/uimport.php:70
-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."
+#: mod/admin.php:1625 mod/admin.php:1902
+msgid "Author: "
 msgstr ""
 
-#: mod/uimport.php:71
-msgid ""
-"This feature is experimental. We can't import contacts from the OStatus "
-"network (GNU Social/Statusnet) or from Diaspora"
+#: mod/admin.php:1626 mod/admin.php:1903
+msgid "Maintainer: "
 msgstr ""
 
-#: mod/uimport.php:72
-msgid "Account file"
+#: mod/admin.php:1681
+msgid "Reload active plugins"
 msgstr ""
 
-#: mod/uimport.php:72
+#: mod/admin.php:1686
+#, php-format
 msgid ""
-"To export your account, go to \"Settings->Export your personal data\" and "
-"select \"Export account\""
+"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/update_community.php:19 mod/update_display.php:23
-#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35
-msgid "[Embedded content - reload page to view]"
+#: mod/admin.php:1805
+msgid "No themes found."
 msgstr ""
 
-#: mod/videos.php:124
-msgid "Do you really want to delete this video?"
+#: mod/admin.php:1884
+msgid "Screenshot"
 msgstr ""
 
-#: mod/videos.php:129
-msgid "Delete Video"
+#: mod/admin.php:1944
+msgid "Reload active themes"
 msgstr ""
 
-#: mod/videos.php:208
-msgid "No videos selected"
+#: mod/admin.php:1949
+#, php-format
+msgid "No themes found on the system. They should be paced in %1$s"
 msgstr ""
 
-#: mod/videos.php:400
-msgid "Recent Videos"
+#: mod/admin.php:1950
+msgid "[Experimental]"
 msgstr ""
 
-#: mod/videos.php:402
-msgid "Upload New Videos"
+#: mod/admin.php:1951
+msgid "[Unsupported]"
 msgstr ""
 
-#: mod/viewcontacts.php:75
-msgid "No contacts."
+#: mod/admin.php:1975
+msgid "Log settings updated."
 msgstr ""
 
-#: mod/viewsrc.php:7
-msgid "Access denied."
+#: mod/admin.php:2007
+msgid "PHP log currently enabled."
 msgstr ""
 
-#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76
-#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86
-#: mod/wall_upload.php:122 mod/wall_upload.php:125
-msgid "Invalid request."
+#: mod/admin.php:2009
+msgid "PHP log currently disabled."
 msgstr ""
 
-#: mod/wall_attach.php:94
-msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
+#: mod/admin.php:2018
+msgid "Clear"
 msgstr ""
 
-#: mod/wall_attach.php:94
-msgid "Or - did you try to upload an empty file?"
+#: mod/admin.php:2023
+msgid "Enable Debugging"
 msgstr ""
 
-#: mod/wall_attach.php:105
-#, php-format
-msgid "File exceeds size limit of %s"
+#: mod/admin.php:2024
+msgid "Log file"
 msgstr ""
 
-#: mod/wall_attach.php:158 mod/wall_attach.php:174
-msgid "File upload failed."
+#: mod/admin.php:2024
+msgid ""
+"Must be writable by web server. Relative to your Friendica top-level "
+"directory."
 msgstr ""
 
-#: mod/wallmessage.php:42 mod/wallmessage.php:106
-#, php-format
-msgid "Number of daily wall messages for %s exceeded. Message failed."
+#: mod/admin.php:2025
+msgid "Log level"
 msgstr ""
 
-#: mod/wallmessage.php:53
-msgid "Unable to check your home location."
+#: mod/admin.php:2028
+msgid "PHP logging"
 msgstr ""
 
-#: mod/wallmessage.php:80 mod/wallmessage.php:89
-msgid "No recipient."
+#: mod/admin.php:2029
+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/wallmessage.php:127
+#: mod/admin.php:2160
 #, 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."
+msgid "Lock feature %s"
+msgstr ""
+
+#: mod/admin.php:2168
+msgid "Manage Additional Features"
 msgstr ""
 
 #: object/Item.php:359
@@ -8820,7 +8868,7 @@ msgstr ""
 msgid "Community Pages"
 msgstr ""
 
-#: view/theme/vier/config.php:117 view/theme/vier/theme.php:146
+#: view/theme/vier/config.php:117 view/theme/vier/theme.php:149
 msgid "Community Profiles"
 msgstr ""
 
@@ -8828,22 +8876,75 @@ msgstr ""
 msgid "Help or @NewHere ?"
 msgstr ""
 
-#: view/theme/vier/config.php:119 view/theme/vier/theme.php:385
+#: view/theme/vier/config.php:119 view/theme/vier/theme.php:390
 msgid "Connect Services"
 msgstr ""
 
-#: view/theme/vier/config.php:120 view/theme/vier/theme.php:194
+#: view/theme/vier/config.php:120 view/theme/vier/theme.php:197
 msgid "Find Friends"
 msgstr ""
 
-#: view/theme/vier/config.php:121 view/theme/vier/theme.php:176
+#: view/theme/vier/config.php:121 view/theme/vier/theme.php:179
 msgid "Last users"
 msgstr ""
 
-#: view/theme/vier/theme.php:195
+#: view/theme/vier/theme.php:198
 msgid "Local Directory"
 msgstr ""
 
-#: view/theme/vier/theme.php:286
+#: view/theme/vier/theme.php:290
 msgid "Quick Start"
 msgstr ""
+
+#: index.php:433
+msgid "toggle mobile"
+msgstr ""
+
+#: boot.php:999
+msgid "Delete this item?"
+msgstr ""
+
+#: boot.php:1001
+msgid "show fewer"
+msgstr ""
+
+#: boot.php:1729
+#, php-format
+msgid "Update %s failed. See error logs."
+msgstr ""
+
+#: boot.php:1843
+msgid "Create a New Account"
+msgstr ""
+
+#: boot.php:1871
+msgid "Password: "
+msgstr ""
+
+#: boot.php:1872
+msgid "Remember me"
+msgstr ""
+
+#: boot.php:1875
+msgid "Or login using OpenID: "
+msgstr ""
+
+#: boot.php:1881
+msgid "Forgot your password?"
+msgstr ""
+
+#: boot.php:1884
+msgid "Website Terms of Service"
+msgstr ""
+
+#: boot.php:1885
+msgid "terms of service"
+msgstr ""
+
+#: boot.php:1887
+msgid "Website Privacy Policy"
+msgstr ""
+
+#: boot.php:1888
+msgid "privacy policy"
+msgstr ""
index 2e888008c2e6169f2835233299cf7f3e9edef397..e07f718004b54d428314bac83b02af563b276c59 100644 (file)
 <?php
-       /**
-        * Read strings.php file and create messages.po
-        *
-        * php utils/php2po.php <path/to/strings.php>
-        * 
-        * Output to <path/to/messages.po>
-        */
-        
-       DEFINE("NORM_REGEXP", "|[\\\]|");
-       
-       
-       if(! class_exists('App')) {
-               class TmpA {
-                       public $strings = Array();
-               }
-               $a = new TmpA();
-       }
+/**
+ * Read strings.php file and create messages.po
+ *
+ * php utils/php2po.php <path/to/strings.php>
+ *
+ * Output to <path/to/messages.po>
+ */
 
-       if ($argc<2 || in_array('-h', $argv) || in_array('--h', $argv)) {
-               print "Usage: ".$argv[0]." [-p <n>] <strings.php>\n\n";
-               print "Options:\n";
-               print "p\tNumber of plural forms. Default: 2\n";
-               print "\n";
-               return;
-       }
+use Friendica\App;
 
-       $phpfile = $argv[1];
-       $pofile = dirname($phpfile)."/messages.po";
+DEFINE("NORM_REGEXP", "|[\\\]|");
 
-       if (!file_exists($phpfile)){
-               print "Unable to find '$phpfile'\n";
-               return;
+if(! class_exists('App')) {
+       class TmpA {
+               public $strings = Array();
        }
+       $a = new TmpA();
+}
 
-       // utility functions
-       function startsWith($haystack, $needle) {
-               // search backwards starting from haystack length characters from the end
-               return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
-       }
+if ($argc<2 || in_array('-h', $argv) || in_array('--h', $argv)) {
+       print "Usage: ".$argv[0]." [-p <n>] <strings.php>\n\n";
+       print "Options:\n";
+       print "p\tNumber of plural forms. Default: 2\n";
+       print "\n";
+       return;
+}
+
+$phpfile = $argv[1];
+$pofile = dirname($phpfile)."/messages.po";
+
+if (!file_exists($phpfile)){
+       print "Unable to find '$phpfile'\n";
+       return;
+}
 
+// utility functions
+function startsWith($haystack, $needle) {
+       // search backwards starting from haystack length characters from the end
+       return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
+}
 
-       // start !
-       include_once($phpfile);
-
-       $out  = '';
-       $out .= "# FRIENDICA Distributed Social Network\n";
-       $out .= "# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project\n";
-       $out .= "# This file is distributed under the same license as the Friendica package.\n";
-       $out .= "# \n";
-       $out .= 'msgid ""' ."\n";
-       $out .= 'msgstr ""' ."\n";
-       $out .= '"Project-Id-Version: friendica\n"' ."\n";
-       $out .= '"Report-Msgid-Bugs-To: \n"' ."\n";
-       $out .= '"POT-Creation-Date: '. date("Y-m-d H:i:sO").'\n"' ."\n";
-       $out .= '"MIME-Version: 1.0\n"' ."\n";
-       $out .= '"Content-Type: text/plain; charset=UTF-8\n"' ."\n";
-       $out .= '"Content-Transfer-Encoding: 8bit\n"' ."\n";
-       
-       // search for plural info
-       $lang = "";
-       $lang_logic = "";
-       $lang_pnum = 2;
-       
-       $_idx = array_search('-p', $argv);
-       if ($_idx !== false) {
-               $lang_pnum = $argv[$_idx+1];
+
+// start !
+include_once($phpfile);
+
+$out  = '';
+$out .= "# FRIENDICA Distributed Social Network\n";
+$out .= "# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project\n";
+$out .= "# This file is distributed under the same license as the Friendica package.\n";
+$out .= "# \n";
+$out .= 'msgid ""' ."\n";
+$out .= 'msgstr ""' ."\n";
+$out .= '"Project-Id-Version: friendica\n"' ."\n";
+$out .= '"Report-Msgid-Bugs-To: \n"' ."\n";
+$out .= '"POT-Creation-Date: '. date("Y-m-d H:i:sO").'\n"' ."\n";
+$out .= '"MIME-Version: 1.0\n"' ."\n";
+$out .= '"Content-Type: text/plain; charset=UTF-8\n"' ."\n";
+$out .= '"Content-Transfer-Encoding: 8bit\n"' ."\n";
+
+// search for plural info
+$lang = "";
+$lang_logic = "";
+$lang_pnum = 2;
+
+$_idx = array_search('-p', $argv);
+if ($_idx !== false) {
+       $lang_pnum = $argv[$_idx+1];
+}
+
+$infile = file($phpfile);
+foreach($infile as $l) {
+       $l = trim($l);
+       if  (startsWith($l, 'function string_plural_select_')) {
+               $lang = str_replace( 'function string_plural_select_' , '', str_replace( '($n){','', $l) );
        }
-       
-       $infile = file($phpfile);
-       foreach($infile as $l) {
-               $l = trim($l);
-               if  (startsWith($l, 'function string_plural_select_')) {
-                       $lang = str_replace( 'function string_plural_select_' , '', str_replace( '($n){','', $l) );
-               }
-               if (startsWith($l, 'return')) {
-                       $lang_logic = str_replace( '$', '', trim( str_replace( 'return ' , '',  $l) , ';') );
-                       break;
-               }
+       if (startsWith($l, 'return')) {
+               $lang_logic = str_replace( '$', '', trim( str_replace( 'return ' , '',  $l) , ';') );
+               break;
        }
-       
-       echo "Language: $lang\n";
-       echo "Plural forms: $lang_pnum\n";
-       echo "Plural logic: $lang_logic;\n";
-               
-       $out .= sprintf('"Language: %s\n"', $lang) ."\n";
-       $out .= sprintf('"Plural-Forms: nplurals=%s; plural=%s;\n"', $lang_pnum, $lang_logic)  ."\n";
-       $out .= "\n";
+}
 
-       print "\nLoading base message.po...";
-       
-       // load base messages.po and extract msgids
-       $base_msgids = array();
-       $norm_base_msgids = array();
-       $base_f = file("util/messages.po") or die("No base messages.po\n");
-       $_f = 0; $_mid = ""; $_mids = array();
-       foreach( $base_f as $l) {
-               $l = trim($l);
-               //~ print $l."\n";
-               
-               if (startsWith($l, 'msgstr')) {
-                       if ($_mid != '""') {
-                               $base_msgids[$_mid] =  $_mids;
-                               $norm_base_msgids[preg_replace(NORM_REGEXP, "", $_mid)] = $_mid;
-                               //~ print "\t\t\t".$_mid. print_r($base_msgids[$_mid], true);
-                       }
-                       
-                       $_f = 0;
-                       $_mid = "";
-                       $_mids = array();
-                       
-               }
-               
-               if (startsWith($l, '"') && $_f==2) {
-                       $_mids[count($_mids)-1] .= "\n".$l;
-                       //~ print "\t\t+mids: ".print_t($_mids, true);
-               }
-               if (startsWith($l, 'msgid_plural ')) {
-                       $_f = 2;
-                       $_mids[] = str_replace('msgid_plural ', '' , $l);
-                       //~ print "\t\t mids: ".print_r($_mids, true);
-               }
-               
-               if (startsWith($l, '"') && $_f==1) {
-                       $_mid .= "\n".$l;
-                       $_mids[count($_mids)-1] .= "\n".$l;
-                       //~ print "\t+mid: $_mid \n";
-               }
-               if (startsWith($l, 'msgid ')) {
-                       $_f = 1;
-                       $_mid = str_replace('msgid ', '' , $l);
-                               $_mids = array($_mid);
-                       //~ print "\t mid: $_mid \n";
+echo "Language: $lang\n";
+echo "Plural forms: $lang_pnum\n";
+echo "Plural logic: $lang_logic;\n";
+
+$out .= sprintf('"Language: %s\n"', $lang) ."\n";
+$out .= sprintf('"Plural-Forms: nplurals=%s; plural=%s;\n"', $lang_pnum, $lang_logic)  ."\n";
+$out .= "\n";
+
+print "\nLoading base message.po...";
+
+// load base messages.po and extract msgids
+$base_msgids = array();
+$norm_base_msgids = array();
+$base_f = file("util/messages.po") or die("No base messages.po\n");
+$_f = 0; $_mid = ""; $_mids = array();
+foreach( $base_f as $l) {
+       $l = trim($l);
+       //~ print $l."\n";
+
+       if (startsWith($l, 'msgstr')) {
+               if ($_mid != '""') {
+                       $base_msgids[$_mid] =  $_mids;
+                       $norm_base_msgids[preg_replace(NORM_REGEXP, "", $_mid)] = $_mid;
+                       //~ print "\t\t\t".$_mid. print_r($base_msgids[$_mid], true);
                }
-               //~ print "\t\t\t\t$_f\n\n";
+
+               $_f = 0;
+               $_mid = "";
+               $_mids = array();
+
        }
-       
-       print " done\n";
-       print "Creating '$pofile'...";
-       // create msgid and msgstr 
-       
-       /**
-        * Get a string and retun a message.po ready text
-        * - replace " with \"
-        * - replace tab char with \t
-        * - manage multiline strings
-        */
-       function massage_string($str) {
-               $str = str_replace('\\','\\\\',$str);
-               $str = str_replace('"','\"',$str);
-               $str = str_replace("\t",'\t',$str);
-               $str = str_replace("\n",'\n"'."\n".'"',$str);
-               if (strpos($str, "\n")!==false  && $str[0]!=='"') $str = '"'."\n".$str;
-               $str = preg_replace("|\n([^\"])|", "\n\"$1", $str);
-               return sprintf('"%s"', $str);
+
+       if (startsWith($l, '"') && $_f==2) {
+               $_mids[count($_mids)-1] .= "\n".$l;
+               //~ print "\t\t+mids: ".print_t($_mids, true);
        }
-       
-       function find_original_msgid($str) {
-               global $norm_base_msgids;
-               $norm_str = preg_replace(NORM_REGEXP, "", $str);
-               if (array_key_exists($norm_str, $norm_base_msgids)) {
-                       return $norm_base_msgids[$norm_str];
-               }
-               return $str;
+       if (startsWith($l, 'msgid_plural ')) {
+               $_f = 2;
+               $_mids[] = str_replace('msgid_plural ', '' , $l);
+               //~ print "\t\t mids: ".print_r($_mids, true);
        }
-       
-       $warnings = "";
-       foreach($a->strings as $key=>$str) {
-               $msgid = massage_string($key);
-               
-               if (preg_match("|%[sd0-9](\$[sn])*|", $msgid)) {
-                       $out .= "#, php-format\n";
-               }
-               $msgid = find_original_msgid($msgid);
-               $out .= 'msgid '. $msgid . "\n";
-               
-               if (is_array($str)) {
-                       if (array_key_exists($msgid, $base_msgids) && isset($base_msgids[$msgid][1]))  {
-                               $out .= 'msgid_plural '. $base_msgids[$msgid][1] . "\n";
-                       } else {
-                               $out .= 'msgid_plural '. $msgid . "\n";
-                               $warnings .= "[W] No source plural form for msgid:\n". str_replace("\n","\n\t", $msgid) . "\n\n";
-                       }
-                       foreach ( $str as $n => $msgstr) {
-                               $out .= 'msgstr['.$n.'] '. massage_string($msgstr) . "\n";
-                       }
-               } else {
-                       $out .= 'msgstr '. massage_string($str) . "\n";
-               }
-               
-               $out .= "\n";
-       
+
+       if (startsWith($l, '"') && $_f==1) {
+               $_mid .= "\n".$l;
+               $_mids[count($_mids)-1] .= "\n".$l;
+               //~ print "\t+mid: $_mid \n";
        }
+       if (startsWith($l, 'msgid ')) {
+               $_f = 1;
+               $_mid = str_replace('msgid ', '' , $l);
+                       $_mids = array($_mid);
+               //~ print "\t mid: $_mid \n";
+       }
+       //~ print "\t\t\t\t$_f\n\n";
+}
+
+print " done\n";
+print "Creating '$pofile'...";
+// create msgid and msgstr
+
+/**
+ * Get a string and retun a message.po ready text
+ * - replace " with \"
+ * - replace tab char with \t
+ * - manage multiline strings
+ */
+function massage_string($str) {
+       $str = str_replace('\\','\\\\',$str);
+       $str = str_replace('"','\"',$str);
+       $str = str_replace("\t",'\t',$str);
+       $str = str_replace("\n",'\n"'."\n".'"',$str);
+       if (strpos($str, "\n")!==false  && $str[0]!=='"') $str = '"'."\n".$str;
+       $str = preg_replace("|\n([^\"])|", "\n\"$1", $str);
+       return sprintf('"%s"', $str);
+}
+
+function find_original_msgid($str) {
+       global $norm_base_msgids;
+       $norm_str = preg_replace(NORM_REGEXP, "", $str);
+       if (array_key_exists($norm_str, $norm_base_msgids)) {
+               return $norm_base_msgids[$norm_str];
+       }
+       return $str;
+}
+
+$warnings = "";
+foreach($a->strings as $key=>$str) {
+       $msgid = massage_string($key);
 
-       file_put_contents($pofile, $out);
-       
-       print " done\n";
-       
-       if ($warnings=="") {
-               print "No warnings.\n";
+       if (preg_match("|%[sd0-9](\$[sn])*|", $msgid)) {
+               $out .= "#, php-format\n";
+       }
+       $msgid = find_original_msgid($msgid);
+       $out .= 'msgid '. $msgid . "\n";
+
+       if (is_array($str)) {
+               if (array_key_exists($msgid, $base_msgids) && isset($base_msgids[$msgid][1]))  {
+                       $out .= 'msgid_plural '. $base_msgids[$msgid][1] . "\n";
+               } else {
+                       $out .= 'msgid_plural '. $msgid . "\n";
+                       $warnings .= "[W] No source plural form for msgid:\n". str_replace("\n","\n\t", $msgid) . "\n\n";
+               }
+               foreach ( $str as $n => $msgstr) {
+                       $out .= 'msgstr['.$n.'] '. massage_string($msgstr) . "\n";
+               }
        } else {
-               print $warnings;
+               $out .= 'msgstr '. massage_string($str) . "\n";
        }
-       
+
+       $out .= "\n";
+
+}
+
+file_put_contents($pofile, $out);
+
+print " done\n";
+
+if ($warnings=="") {
+       print "No warnings.\n";
+} else {
+       print $warnings;
+}
old mode 100644 (file)
new mode 100755 (executable)
index d68ac2a..1b84181
@@ -1,59 +1,77 @@
+#!/usr/bin/env php
 <?php
-       // Tired of chasing typos and finding them after a commit.
-       // Run this from cmdline in basedir and quickly see if we've
-       // got any parse errors in our application files.
 
+// Tired of chasing typos and finding them after a commit.
+// Run this from cmdline in basedir and quickly see if we've
+// got any parse errors in our application files.
 
-       error_reporting(E_ERROR | E_WARNING | E_PARSE );
-       ini_set('display_errors', '1');
-       ini_set('log_errors','0');
+use Friendica\App;
 
-       include 'boot.php';
+error_reporting(E_ERROR | E_WARNING | E_PARSE);
+ini_set('display_errors', '1');
+ini_set('log_errors', '0');
 
-       $a = new App();
+include 'boot.php';
 
-       if(x($a->config,'php_path'))
-               $phpath = $a->config['php_path'];
-       else
-               $phpath = 'php';
+$a = new App(dirname(__DIR__));
 
+if (x($a->config, 'php_path')) {
+       $phpath = $a->config['php_path'];
+} else {
+       $phpath = 'php';
+}
 
-       echo "Directory: mod\n";
-       $files = glob('mod/*.php');
-       foreach($files as $file) {
-        passthru("$phpath -l $file", $ret); $ret===0 or die();
-       }
+echo 'Directory: src' . PHP_EOL;
+$Iterator = new RecursiveDirectoryIterator('src');
 
-       echo "Directory: include\n";
-       $files = glob('include/*.php');
-       foreach($files as $file) {
-        passthru("$phpath -l $file", $ret); $ret===0 or die();
+foreach (new RecursiveIteratorIterator($Iterator) as $file) {
+       if (substr($file, -4) === '.php') {
+               passthru("$phpath -l $file", $ret);
+               $ret === 0 or die();
        }
+}
 
-    echo "Directory: object\n";
-       $files = glob('object/*.php');
-       foreach($files as $file) {
-        passthru("$phpath -l $file", $ret); $ret===0 or die();
-       }
+echo "Directory: mod\n";
+$files = glob('mod/*.php');
+foreach ($files as $file) {
+       passthru("$phpath -l $file", $ret);
+       $ret === 0 or die();
+}
 
-       echo "Directory: addon\n";
-       $dirs = glob('addon/*');
+echo "Directory: include\n";
+$files = glob('include/*.php');
+foreach ($files as $file) {
+       passthru("$phpath -l $file", $ret);
+       $ret === 0 or die();
+}
 
-       foreach($dirs as $dir) {
-               $addon = basename($dir);
-               $files = glob($dir . '/' . $addon . '.php');
-               foreach($files as $file) {
-            passthru("$phpath -l $file", $ret); $ret===0 or die();
-               }
-       }
+echo "Directory: object\n";
+$files = glob('object/*.php');
+foreach ($files as $file) {
+       passthru("$phpath -l $file", $ret);
+       $ret === 0 or die();
+}
 
+echo "Directory: addon\n";
+$dirs = glob('addon/*');
 
-       echo "String files\n";
+foreach ($dirs as $dir) {
+       $addon = basename($dir);
+       $files = glob($dir . '/' . $addon . '.php');
+       foreach ($files as $file) {
+               passthru("$phpath -l $file", $ret);
+               $ret === 0 or die();
+       }
+}
 
-       echo 'util/strings.php' . "\n";
-    passthru("$phpath -l util/strings.php", $ret); $ret===0 or die();
+echo "String files\n";
 
-       $files = glob('view/lang/*/strings.php');
-       foreach($files as $file) {
-        passthru("$phpath -l $file", $ret); $ret===0 or die();
-       }
+echo 'util/strings.php' . "\n";
+passthru("$phpath -l util/strings.php", $ret);
+$ret === 0 or die();
+
+$files = glob('view/lang/*/strings.php');
+foreach ($files as $file) {
+       passthru("$phpath -l $file", $ret);
+       $ret === 0 or die();
+}
index 4553da2e249a7f0d40c4027dc132f99411eabcdc..a3f90a0f7f40173586150e8fc3154d5b89d568f4 100644 (file)
@@ -9,8 +9,10 @@ return array(
     'Archive_Tar' => $vendorDir . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
     'Console_Getopt' => $vendorDir . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
     'Detection\\MobileDetect' => $vendorDir . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
+    'Friendica\\App' => $baseDir . '/src/App.php',
     'Friendica\\Core\\Config' => $baseDir . '/src/Core/Config.php',
     'Friendica\\Core\\PConfig' => $baseDir . '/src/Core/PConfig.php',
+    'Friendica\\Network\\Probe' => $baseDir . '/src/Network/Probe.php',
     'Friendica\\ParseUrl' => $baseDir . '/src/ParseUrl.php',
     'HTMLPurifier' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.php',
     'HTMLPurifier_Arborize' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php',
index 37d3c878b4547ab3bdf887becb969b2a2be7c793..2b6416c2ee48acccc1da8355f137d41f2d5ba044 100644 (file)
@@ -53,8 +53,10 @@ class ComposerStaticInitFriendica
         'Archive_Tar' => __DIR__ . '/..' . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
         'Console_Getopt' => __DIR__ . '/..' . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
         'Detection\\MobileDetect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
+        'Friendica\\App' => __DIR__ . '/../..' . '/src/App.php',
         'Friendica\\Core\\Config' => __DIR__ . '/../..' . '/src/Core/Config.php',
         'Friendica\\Core\\PConfig' => __DIR__ . '/../..' . '/src/Core/PConfig.php',
+        'Friendica\\Network\\Probe' => __DIR__ . '/../..' . '/src/Network/Probe.php',
         'Friendica\\ParseUrl' => __DIR__ . '/../..' . '/src/ParseUrl.php',
         'HTMLPurifier' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.php',
         'HTMLPurifier_Arborize' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php',
index e10abddcd00b41ba3e1e143fb2b59935c3e696c9..1d4a52943aeb899102e3a244c3ba0a5955f8ce87 100644 (file)
@@ -11,6 +11,6 @@ return array(
     $vendorDir . '/pear-pear.php.net/Structures_Graph',
     $vendorDir . '/pear-pear.php.net/XML_Util',
     $vendorDir . '/pear-pear.php.net/XML_Parser',
-    $vendorDir . '/pear-pear.php.net/PEAR',
     $vendorDir . '/pear-pear.php.net/Text_Highlighter',
+    $vendorDir . '/pear-pear.php.net/PEAR',
 );
index 45038987b7f513b826b94df7d0684ddf1ddbd220..d6cca604f95f93c7a2e999846279525e42a4da00 100644 (file)
         ],
         "description": "This is an XML parser based on PHPs built-in xml extension.\nIt supports two basic modes of operation: \"func\" and \"event\".  In \"func\" mode, it will look for a function named after each element (xmltag_ELEMENT for start tags and xmltag_ELEMENT_ for end tags), and in \"event\" mode it uses a set of generic callbacks.\n\nSince version 1.2.0 there's a new XML_Parser_Simple class that makes parsing of most XML documents easier, by automatically providing a stack for the elements.\nFurthermore its now possible to split the parser from the handler object, so you do not have to extend XML_Parser anymore in order to parse a document with it."
     },
-    {
-        "name": "pear-pear.php.net/PEAR",
-        "version": "1.10.3",
-        "version_normalized": "1.10.3.0",
-        "dist": {
-            "type": "file",
-            "url": "https://pear.php.net/get/PEAR-1.10.3.tgz",
-            "reference": null,
-            "shasum": null
-        },
-        "require": {
-            "ext-pcre": "*",
-            "ext-xml": "*",
-            "pear-pear.php.net/archive_tar": ">=1.4.0.0",
-            "pear-pear.php.net/console_getopt": ">=1.4.1.0",
-            "pear-pear.php.net/structures_graph": ">=1.1.0.0",
-            "pear-pear.php.net/xml_util": ">=1.3.0.0",
-            "php": ">=5.4.0.0"
-        },
-        "conflict": {
-            "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
-            "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
-        },
-        "replace": {
-            "pear-pear/pear": "== 1.10.3.0"
-        },
-        "type": "pear-library",
-        "installation-source": "dist",
-        "autoload": {
-            "classmap": [
-                ""
-            ]
-        },
-        "include-path": [
-            "/"
-        ],
-        "license": [
-            "New BSD License"
-        ],
-        "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n   and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n   where PHP is running on\n * the System class for quick handling of common operations\n   with files and directories\n * the PEAR base class\n  Features in a nutshell:\n  * full support for channels\n  * pre-download dependency validation\n  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n  * support for optional dependency groups and limited support for sub-packaging\n  * robust dependency support\n  * full dependency validation on uninstall\n  * remote install for hosts with only ftp access - no more problems with\n    restricted host installation\n  * full support for mirroring\n  * support for bundling several packages into a single tarball\n  * support for static dependencies on a url-based package\n  * support for custom file roles and installation tasks"
-    },
     {
         "name": "pear-pear.php.net/Text_Highlighter",
         "version": "0.8.0",
             "html",
             "markdown"
         ]
+    },
+    {
+        "name": "pear-pear.php.net/PEAR",
+        "version": "1.10.4",
+        "version_normalized": "1.10.4.0",
+        "dist": {
+            "type": "file",
+            "url": "https://pear.php.net/get/PEAR-1.10.4.tgz",
+            "reference": null,
+            "shasum": null
+        },
+        "require": {
+            "ext-pcre": "*",
+            "ext-xml": "*",
+            "pear-pear.php.net/archive_tar": ">=1.4.0.0",
+            "pear-pear.php.net/console_getopt": ">=1.4.1.0",
+            "pear-pear.php.net/structures_graph": ">=1.1.0.0",
+            "pear-pear.php.net/xml_util": ">=1.3.0.0",
+            "php": ">=5.4.0.0"
+        },
+        "conflict": {
+            "pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
+            "pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
+        },
+        "replace": {
+            "pear-pear/pear": "== 1.10.4.0"
+        },
+        "type": "pear-library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                ""
+            ]
+        },
+        "include-path": [
+            "/"
+        ],
+        "license": [
+            "New BSD License"
+        ],
+        "description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n   and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n   where PHP is running on\n * the System class for quick handling of common operations\n   with files and directories\n * the PEAR base class\n  Features in a nutshell:\n  * full support for channels\n  * pre-download dependency validation\n  * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n  * support for optional dependency groups and limited support for sub-packaging\n  * robust dependency support\n  * full dependency validation on uninstall\n  * remote install for hosts with only ftp access - no more problems with\n    restricted host installation\n  * full support for mirroring\n  * support for bundling several packages into a single tarball\n  * support for static dependencies on a url-based package\n  * support for custom file roles and installation tasks"
     }
 ]
index 7e8e8d3f8cc3c5bbd774a740c6a14d074236e692..ffa15355cf56fb04369a0f69dbb224143ced02a0 100644 (file)
@@ -86,7 +86,7 @@
  * @author     Gregory Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 7aa3c4ce56756ce27bd9b1e9285a2e87c47c176f..5737f71b155c8432cae5c6938ee023bae65e358d 100644 (file)
@@ -75,7 +75,7 @@ $GLOBALS['_PEAR_error_handler_stack']    = array();
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @see        PEAR_Error
  * @since      Class available since PHP 4.0.2
@@ -170,7 +170,7 @@ class PEAR
             $destructor = "_$classname";
             if (method_exists($this, $destructor)) {
                 global $_PEAR_destructor_object_list;
-                $_PEAR_destructor_object_list[] = &$this;
+                $_PEAR_destructor_object_list[] = $this;
                 if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
                     register_shutdown_function("_PEAR_call_destructors");
                     $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
@@ -598,11 +598,11 @@ class PEAR
     protected static function _throwError($object, $message = null, $code = null, $userinfo = null)
     {
         if ($object !== null) {
-            $a = &$object->raiseError($message, $code, null, null, $userinfo);
+            $a = $object->raiseError($message, $code, null, null, $userinfo);
             return $a;
         }
 
-        $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
+        $a = PEAR::raiseError($message, $code, null, null, $userinfo);
         return $a;
     }
 
@@ -823,7 +823,7 @@ function _PEAR_call_destructors()
  * @author     Gregory Beaver <cellog@php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/manual/en/core.pear.pear-error.php
  * @see        PEAR::raiseError(), PEAR::throwError()
  * @since      Class available since PHP 4.0.2
index 9df3b9eac927612f9d044641eaaaa9dfbd9f6deb..d69bc14f1c23ea4ff16a45e06dbbca9541ada99b 100644 (file)
@@ -33,7 +33,7 @@ require_once 'System.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since PHP 4.0.2
  * @see        http://pear.php.net/manual/en/core.ppm.pear-builder.php
@@ -385,7 +385,7 @@ class PEAR_Builder extends PEAR_Common
         if (!file_exists($build_dir) || !is_dir($build_dir) || !chdir($build_dir)) {
             return $this->raiseError("could not chdir to $build_dir");
         }
-        putenv('PHP_PEAR_VERSION=1.10.3');
+        putenv('PHP_PEAR_VERSION=1.10.4');
         foreach ($to_run as $cmd) {
             $err = $this->_runCommand($cmd, $callback);
             if (PEAR::isError($err)) {
index 9e990d1348a6145050490eb9854cb08fc1278014..d81deb43a1ffa04e802966444c503612e8d5e571 100644 (file)
@@ -145,7 +145,7 @@ $GLOBALS['_PEAR_CHANNELS_MIRROR_TYPES'] =  array('server');
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 56376add6456b16c3d314ea9c9f6cf7da19b2a6c..01bb7f3fbe1495b8f33084b4a3dbd37d12b30e5a 100644 (file)
@@ -25,7 +25,7 @@ require_once 'PEAR/ChannelFile.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 39823c674b03dbc0bbcdd0eb7f7aeeec4a4608a0..411f7a49b2d2a55105657aeba190d422d610788e 100644 (file)
@@ -93,7 +93,7 @@ $GLOBALS['_PEAR_Command_objects'] = array();
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index fa2b22bf52e2eaa1f5d2ad4d0a17db71d1d967e6..fecfd875ef864cc4b9255e864e8c5b0b0b468433 100644 (file)
@@ -29,7 +29,7 @@ require_once 'PEAR/Command/Channels.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  * @deprecated since 1.8.0alpha1
index 3bb99454d79e12820f003257b7b6b3f11bf420c6..aecc90d8b26ac2317553ba6da1db651b629e0d03 100644 (file)
@@ -30,7 +30,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index b9286370ab390b798756f512147fd39223274457..fa190d39c28e4b397394e96c37793a9735843182 100644 (file)
@@ -31,7 +31,7 @@ define('PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS', -500);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 41384ef0b3383dbac859c0be76aa69c68a559f39..8d972b6f1bfae8dba7ecd936d5129ad65415547c 100644 (file)
@@ -28,7 +28,7 @@ require_once 'PEAR.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 63efb07be317c36db0dd0ab7bd3b3e49fcd26417..18dd61451a6f56c8c19dab23e3c4a1f21ab3fc81 100644 (file)
@@ -28,7 +28,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index a1d3a7023ff6c2a0d3b1ffa6451d2faa7884f8eb..42c1f558678d8cd47ab1c52b22e78040cbd03584 100644 (file)
@@ -29,7 +29,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
@@ -717,8 +717,7 @@ Run post-installation scripts in package <package>, if any exist.
                 $pkg = &$param->getPackageFile();
                 if ($info->getCode() != PEAR_INSTALLER_NOBINARY) {
                     if (!($info = $pkg->installBinary($this->installer))) {
-                        $this->ui->outputData('ERROR: ' .$oldinfo->getMessage());
-                        continue;
+                        return $this->raiseError('ERROR: ' .$oldinfo->getMessage());
                     }
 
                     // we just installed a different package than requested,
index 473c6286753547ce2293e6f6813358ce599a3840..616417cb3a84dccd14c2b04ffe10dc23f5097f30 100644 (file)
@@ -26,7 +26,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Alexander Merz <alexmerz@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.2.0
  */
index 25125fd982d80f84873b13aca6665168e36e9e96..8847112e60e0fe30a1ccdf1f809365b6b273ce86 100644 (file)
@@ -31,7 +31,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 8ac3fcb6b19e9abbcee2ddef385281e45b5bd4b0..7a7bd81c0b027dc9463028b47921298bd41b6069 100644 (file)
@@ -26,7 +26,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  2005-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.1
  */
index 3a78b033028d4b0eb83e6d20e184a5d549494621..b5423c762ef68ce14b3115dbe2fb08af27b0987b 100644 (file)
@@ -28,7 +28,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index c0a8e92a8ef4fa058eff80bd851de4e29f1057d0..817b7332857233fade6ce7d82bb8c1b012ed8bec 100644 (file)
@@ -30,7 +30,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 69c72c4aa31c93c2bc043f3c837f56312915516d..0f6c8dc24e0e53b2e0ff4e79955daab1d6c95782 100644 (file)
@@ -30,7 +30,7 @@ require_once 'PEAR/Command/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 1c4f79ceb13e13c697988149957a8e0024b34898..0b00b00bc511178be2cdceb253b360841ec9c13a 100644 (file)
@@ -117,7 +117,7 @@ $GLOBALS['_PEAR_Common_script_phases'] = array('pre-install', 'post-install', 'p
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  * @deprecated This class will disappear, and its components will be spread
index d9b4d273ce295c307998c2edf83c243c7d307549..e86c5013419904b225f9a040c324de92bdb2a65b 100644 (file)
@@ -264,7 +264,7 @@ if (getenv('PHP_PEAR_SIG_KEYDIR')) {
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 77646f1f95c24ca5a7154ddcada7380131ef907f..b142883b3214c971518962c16cccb7070bf7fbcd 100644 (file)
@@ -30,7 +30,7 @@ require_once 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -540,7 +540,7 @@ class PEAR_Dependency2
      */
     function getPEARVersion()
     {
-        return '1.10.3';
+        return '1.10.4';
     }
 
     function validatePearinstallerDependency($dep)
index 5421929a2b99fe5f94238945906cb194703b49d9..0d48613acdce3247564eae76d27223a48ea69db2 100644 (file)
@@ -29,7 +29,7 @@ $GLOBALS['_PEAR_DEPENDENCYDB_INSTANCE'] = array();
  * @author     Tomas V.V.Cox <cox@idec.net.com>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 15f26bceff94e6406e1eba14adec4813bc2508e5..a498f134b9ebfa9a62588b2d7c94caa0e8ef7914 100644 (file)
@@ -39,7 +39,7 @@ define('PEAR_INSTALLER_ERROR_NO_PREF_STATE', 2);
  * @author     Martin Jansen <mj@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.0
  */
@@ -1635,7 +1635,7 @@ class PEAR_Downloader extends PEAR_Common
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.10.3/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.10.4/PHP/" . PHP_VERSION . "\r\n";
 
         if ($object !== null) { // only pass in authentication for non-static calls
             $username = $config->get('username', null, $channel);
index 925c0ecd56080829f1c4e4196d42ac532a075bda..42b35b5b6864cc9bf8d90f3fc75f95fd965c94e2 100644 (file)
@@ -49,7 +49,7 @@ define('PEAR_DOWNLOADER_PACKAGE_PHPVERSION', -1004);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index b4412744a1de836f4ee4aa87a2921fca43f13814..53eda7c3df18efe4a611d516dc2b50445884bad0 100644 (file)
@@ -131,7 +131,7 @@ define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2);
  * $local_stack = new PEAR_ErrorStack('MyPackage');
  * </code>
  * @author     Greg Beaver <cellog@php.net>
- * @version    1.10.3
+ * @version    1.10.4
  * @package    PEAR_ErrorStack
  * @category   Debugging
  * @copyright  2004-2008 Greg Beaver
index d83950b13af22239a060b9629c8f2a2d7ee38b11..d0e84dc1fa9627fdbe6bb03c4f2a4104acaab296 100644 (file)
@@ -88,7 +88,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.3
  *
index bd002c374b22089c80d376b94b089f6dafd2d8f2..a9d9b73cc32f13028b668ea6488f3247470ee221 100644 (file)
@@ -38,7 +38,7 @@ $GLOBALS['_PEAR_FRONTEND_SINGLETON'] = null;
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 4e68c065afc55943f88cfea3251b5a7a7ce36ae1..5e83216edb63cdfa6e26f41d4d6a745c66020365 100644 (file)
@@ -26,7 +26,7 @@ require_once 'PEAR/Frontend.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index acaaa7fd002a24116ada1544164f6477d2ed3610..b96b8e011a448ef3d92567f365cf9e2e0b2fc485 100644 (file)
@@ -35,7 +35,7 @@ define('PEAR_INSTALLER_NOBINARY', -240);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index 58b661bbf4515033ea5f42f6c6ef374a8ac37716..0ca3bac637b5fa53cd28a54bd022409f15bbfbcb 100644 (file)
@@ -24,7 +24,7 @@ require_once 'PEAR/XMLParser.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 5b75c44ccd4b1abf1dfdd65c69e99b6444a848f3..eb126b62dfafb3c9e4184a710971996dd3f2ab0b 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.7.0
  */
index 3e15d87789e58310819c4961393f30887653e46f..1bd8f78cc717fd9506b049af9b646adf6fee1e64 100644 (file)
@@ -23,7 +23,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2006 The PHP Group
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 75acfef80e510dee144430f534a8dba1163c118f..ad2957780937f3e7e4feca59e045eec9dcdcfcc4 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 9374990c4cd3e459a44077fd780d9fb75a8f636d..31c069fed6643bc2acab7a08ec70704782150ca7 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 6cd4d2b0a12c5ae8093caf5b43f7eff8fde84e27..71d07d42240f0649033da4fd722eda9e21fa7325 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 68b79366a6737e4cda8f938867a086f7e7aab1c0..91a586b3a837cfc3b60472bdba3957b5878e012c 100644 (file)
@@ -20,7 +20,7 @@
  * @author     Hannes Magnusson <bjori@php.net>
  * @copyright  2011 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.10.0
  */
index 6a7a937dec0d557fbfcae86f3710eabe9c337b2d..e07743ab8f68fcc477920810bd7da30f3c072480 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 387fdb3f5352be19d99b4aefb1f43fbee865273b..907b101145da00c69d4d0826109ff672673d05b6 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index c92f2cf0b481f557e2eaee5eaf68d599cd876805..aaa9622e51701dcfcea6224b0a805a2cc92d3af4 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 87133af46c93350a5cd8c06dbfa5986c62420cec..b21450fe53f91d1fd77b4c384fb7ebf3041dde30 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index e211c1e8f76a217f98ace93df95d989bb6fb5987..043cd360a3fae1a69e9ebf243a0f163d6716955d 100644 (file)
@@ -19,7 +19,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  2007-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.7.0
  */
index 21d26b6df4e17faa44e84f764d469afb6b336316..d73671dd50f8d8e031ece79a03a897db8c60ac56 100644 (file)
@@ -34,7 +34,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_PACKAGEVERSION', 2);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 707781c30d6f2343595a589fd41c23d71a59c128..5e379f85b70ef37b8b4d96d91fd18adb643beddd 100644 (file)
@@ -28,7 +28,7 @@ require_once 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -45,7 +45,7 @@ class PEAR_PackageFile_Generator_v1
 
     function getPackagerVersion()
     {
-        return '1.10.3';
+        return '1.10.4';
     }
 
     /**
@@ -196,7 +196,7 @@ class PEAR_PackageFile_Generator_v1
             );
         $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
         $ret .= "<!DOCTYPE package SYSTEM \"http://pear.php.net/dtd/package-1.0\">\n";
-        $ret .= "<package version=\"1.0\" packagerversion=\"1.10.3\">\n" .
+        $ret .= "<package version=\"1.0\" packagerversion=\"1.10.4\">\n" .
 " <name>$pkginfo[package]</name>";
         if (isset($pkginfo['extends'])) {
             $ret .= "\n<extends>$pkginfo[extends]</extends>";
index 1c97296b73cfed42a482c61ef27d432e4b14549a..a44a9c5a5b84dcfab1bd040d945d1675c6e90477 100644 (file)
@@ -30,7 +30,7 @@ require_once 'XML/Util.php';
  * @author     Stephan Schmidt (original XML_Serializer code)
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -112,7 +112,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
      */
     function getPackagerVersion()
     {
-        return '1.10.3';
+        return '1.10.4';
     }
 
     /**
@@ -397,7 +397,7 @@ http://pear.php.net/dtd/package-2.0.xsd',
             $this->options['beautifyFilelist'] = true;
         }
 
-        $arr['attribs']['packagerversion'] = '1.10.3';
+        $arr['attribs']['packagerversion'] = '1.10.4';
         if ($this->serialize($arr, $options)) {
             return $this->_serializedData . "\n";
         }
index 6bb3276eeb5a429d05fa36b6b0a0d4138aeae1f0..d9d19f6549c77d62ea9101fd660a289a7ae081fe 100644 (file)
@@ -274,7 +274,7 @@ define('PEAR_PACKAGEFILE_ERROR_INVALID_FILENAME', 52);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 248997a6ab600066c622f992509d8fb222ece0c0..ab2f539b42ced135109e90dd050cd26c908b1e09 100644 (file)
@@ -22,7 +22,7 @@ require_once 'PEAR/ErrorStack.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -1668,7 +1668,7 @@ class PEAR_PackageFile_v2
                     if ($dtype == 'pearinstaller' && $nopearinstaller) {
                         continue;
                     }
-                    if (!isset($deps[0])) {
+                    if ((is_array($deps) && !isset($deps[0])) || !is_array($deps)) {
                         $deps = array($deps);
                     }
                     foreach ($deps as $dep) {
index f7c8921e1d1c91a7228ac0d5baeda41442936b38..a6b01d57b8005bf036eb4324b4d11612d331dc47 100644 (file)
@@ -20,7 +20,7 @@
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  * @access private
@@ -111,8 +111,8 @@ class PEAR_PackageFile_v2_Validator
               isset($test['dependencies']['required']) &&
               isset($test['dependencies']['required']['pearinstaller']) &&
               isset($test['dependencies']['required']['pearinstaller']['min']) &&
-              '1.10.3' != '@package' . '_version@' &&
-              version_compare('1.10.3',
+              '1.10.4' != '@package' . '_version@' &&
+              version_compare('1.10.4',
                 $test['dependencies']['required']['pearinstaller']['min'], '<')
         ) {
             $this->_pearVersionTooLow($test['dependencies']['required']['pearinstaller']['min']);
@@ -1350,7 +1350,7 @@ class PEAR_PackageFile_v2_Validator
         $this->_stack->push(__FUNCTION__, 'error',
             array('version' => $version),
             'This package.xml requires PEAR version %version% to parse properly, we are ' .
-            'version 1.10.3');
+            'version 1.10.4');
     }
 
     function _invalidTagOrder($oktags, $actual, $root)
index c52ff4f3caa7883dc66423cd930480ac984a7f39..3346639b8bc4cdefec845adb2d6f5823650dea5d 100644 (file)
@@ -22,7 +22,7 @@ require_once 'PEAR/PackageFile/v2.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a8
  */
index 713bc708ccee3f9b34ce10cda5f491611e9ef75d..f92565bd5f7ad030d36fc72232b0a588166ec7d4 100644 (file)
@@ -30,7 +30,7 @@ require_once 'System.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 0.1
  */
index aec7cf2340cef7d963f32820d53d23101acb1377..419b7fbfa92591283ace63ba6a165f7fc7bb1ec8 100644 (file)
@@ -28,7 +28,7 @@ require_once 'PEAR/Proxy.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
@@ -384,7 +384,7 @@ class PEAR_REST
         }
 
         $request .= $ifmodifiedsince .
-            "User-Agent: PEAR/1.10.3/PHP/" . PHP_VERSION . "\r\n";
+            "User-Agent: PEAR/1.10.4/PHP/" . PHP_VERSION . "\r\n";
 
         $username = $this->config->get('username', null, $channel);
         $password = $this->config->get('password', null, $channel);
index ac0aeab3abcf56ac5dbd17b391b019aaa5b171c1..040371cdba423df11456212a3d4b6e89a50f9ea9 100644 (file)
@@ -26,7 +26,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
index a7e713ac4e58c0634f9a688433ccbafbc6b30387..e2d3875fd0be57c81cd1a17fd5aa0cb82278a222 100644 (file)
@@ -26,7 +26,7 @@ require_once 'PEAR/REST.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.3
  */
index 6469fd30dd96fd12674b6debc158a63541eb5e79..0509897b8db80f294aa4883b802d5903a603eb47 100644 (file)
@@ -27,7 +27,7 @@ require_once 'PEAR/REST/10.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a12
  */
index c599c61ee551a570844e9ca7d7c653fa33dd0dbd..5588f23f4d9e8b32226e08c67f1c779c49580b69 100644 (file)
@@ -36,7 +36,7 @@ define('PEAR_REGISTRY_ERROR_CHANNEL_FILE', -6);
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 271ef86bd50546c1531892713a38991b363c56eb..95797665e677001c3ec3a9efb6604011b1e39492 100644 (file)
@@ -37,7 +37,7 @@ putenv("PHP_PEAR_RUNTESTS=1");
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.3.3
  */
index e433c3e267aa2f4494820d347801bbeac913bea6..3ae59159bd35f326aa0ecdaeef8c177acc14c619 100644 (file)
@@ -47,7 +47,7 @@ define('PEAR_TASK_PACKAGEANDINSTALL', 3);
  * @author    Greg Beaver <cellog@php.net>
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license.php New BSD License
- * @version   Release: 1.10.3
+ * @version   Release: 1.10.4
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  * @abstract
index 457ac28f6e0d0df0fcf9e8ee5ee9979b2165e872..154952f4f0ddedee237e020eecf9e2cff534f953 100644 (file)
@@ -27,7 +27,7 @@ require_once 'PEAR/Task/Common.php';
  * @author    Greg Beaver <cellog@php.net>
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license.php New BSD License
- * @version   Release: 1.10.3
+ * @version   Release: 1.10.4
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  */
index 10f5e7b26e022ff4d3fb5fc8c5a75a965592dd6f..7aa699bb30df5014d124a1ee72aa4cae1f696aad 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Task/Postinstallscript.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
index 1ea71bfe531b8e408a0655ddd95e7af27ce664b9..a5fc779ef179ef92ce82d79bf5658f0364db2874 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index a2ffc24b1dc8d110ce6a051b0fe301286bc7bc4c..6080146463e593e014bcbe92d797770f26c923ae 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Task/Replace.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
index 3b1d84c9a37bb910616a258f54263fcecb65bfac..5bf2ac0518894972841ec5c1e24abb1e1ddf5202 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Task/Common.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 7e98f218456ebc8654bab8a48c10575c7d2aeb5e..7316ba05fb4125d24b25349e2d75c0024abe2f36 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Task/Unixeol.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a10
  */
index e0f2f26d8c50d6d5ab52bee4abe41db5359212ba..190f21381ceb7c98cf8be03d8fd8f02d82ade091 100644 (file)
@@ -24,7 +24,7 @@ require_once 'PEAR/Task/Common.php';
  * @author    Greg Beaver <cellog@php.net>
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license.php New BSD License
- * @version   Release: 1.10.3
+ * @version   Release: 1.10.4
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  */
index 2f10c5eb23a9305f0ff6a81a293700480758b93e..4ef537b7ca9887a9a7560e9faeff29d5896e5d32 100644 (file)
@@ -24,7 +24,7 @@ require_once 'PEAR/Task/Windowseol.php';
  * @author    Greg Beaver <cellog@php.net>
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license.php New BSD License
- * @version   Release: 1.10.3
+ * @version   Release: 1.10.4
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a10
  */
index 0dc7433c1c1a564b4f1e6c1b3226abe5921dc630..4b98b3ad5284aff740e699dce8f37a07f8ee6c24 100644 (file)
@@ -31,7 +31,7 @@ require_once 'PEAR/Validator/PECL.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a1
  */
index 157cda3271aed3d23c21eff553cc0f985eff6b07..44bfb4f48bd57eab25d3646247af6cbd0cdb9b08 100644 (file)
@@ -23,7 +23,7 @@ require_once 'PEAR/Validate.php';
  * @author     Greg Beaver <cellog@php.net>
  * @copyright  1997-2009 The Authors
  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
- * @version    Release: 1.10.3
+ * @version    Release: 1.10.4
  * @link       http://pear.php.net/package/PEAR
  * @since      Class available since Release 1.4.0a5
  */
index 85b10a72a6b089ebc2459ee3591886066ee399e5..f0fa553d3c4b2bee61a5c8e7a9eb07f37191bedf 100644 (file)
@@ -22,7 +22,7 @@
  * @author    Stephan Schmidt (original XML_Unserializer code)
  * @copyright 1997-2009 The Authors
  * @license   http://opensource.org/licenses/bsd-license New BSD License
- * @version   Release: 1.10.3
+ * @version   Release: 1.10.4
  * @link      http://pear.php.net/package/PEAR
  * @since     Class available since Release 1.4.0a1
  */
index 3184f46948abc8e5f555d0e70004c8b65eafadf2..146346b57afbf58b26009e6e966fef20632b6fd0 100644 (file)
@@ -50,7 +50,7 @@ $GLOBALS['_System_temp_files'] = array();
 * @author     Tomas V.V. Cox <cox@idecnet.com>
 * @copyright  1997-2006 The PHP Group
 * @license    http://opensource.org/licenses/bsd-license.php New BSD License
-* @version    Release: 1.10.3
+* @version    Release: 1.10.4
 * @link       http://pear.php.net/package/PEAR
 * @since      Class available since Release 0.1
 * @static
index e089c818e72c990c18a8e999ae0af1105890cea8..60cb9769bfe4f39341032b54b83ed2dc7c8f774b 100644 (file)
@@ -41,7 +41,7 @@ ob_implicit_flush(true);
 $_PEAR_PHPDIR = '#$%^&*';
 set_error_handler('error_handler');
 
-$pear_package_version = "1.10.3";
+$pear_package_version = "1.10.4";
 
 require_once 'PEAR.php';
 require_once 'PEAR/Frontend.php';
index 7d89df233b3197afb1af19c0523a55a425c93176..2cd3d1d5ef01a8c22ecf9274844a8485035ea8d3 100644 (file)
@@ -4,7 +4,7 @@
 # 
 # Translators:
 # Andreas H., 2015
-# Andreas H., 2015-2016
+# Andreas H., 2015-2017
 # Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2011
 # David Rabel <david.rabel@noresoft.com>, 2016
 # Erkan Yilmaz <erkan77@gmail.com>, 2011
@@ -35,8 +35,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: friendica\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-03-03 10:29+0100\n"
-"PO-Revision-Date: 2017-03-05 11:30+0000\n"
+"POT-Creation-Date: 2017-05-03 07:08+0200\n"
+"PO-Revision-Date: 2017-05-05 05:43+0000\n"
 "Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
 "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
 "MIME-Version: 1.0\n"
@@ -45,252 +45,18 @@ msgstr ""
 "Language: de\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: include/profile_selectors.php:6
-msgid "Male"
-msgstr "Männlich"
-
-#: include/profile_selectors.php:6
-msgid "Female"
-msgstr "Weiblich"
-
-#: include/profile_selectors.php:6
-msgid "Currently Male"
-msgstr "Momentan männlich"
-
-#: include/profile_selectors.php:6
-msgid "Currently Female"
-msgstr "Momentan weiblich"
-
-#: include/profile_selectors.php:6
-msgid "Mostly Male"
-msgstr "Hauptsächlich männlich"
-
-#: include/profile_selectors.php:6
-msgid "Mostly Female"
-msgstr "Hauptsächlich weiblich"
-
-#: include/profile_selectors.php:6
-msgid "Transgender"
-msgstr "Transgender"
-
-#: include/profile_selectors.php:6
-msgid "Intersex"
-msgstr "Intersex"
-
-#: include/profile_selectors.php:6
-msgid "Transsexual"
-msgstr "Transsexuell"
-
-#: include/profile_selectors.php:6
-msgid "Hermaphrodite"
-msgstr "Hermaphrodit"
-
-#: include/profile_selectors.php:6
-msgid "Neuter"
-msgstr "Neuter"
-
-#: include/profile_selectors.php:6
-msgid "Non-specific"
-msgstr "Nicht spezifiziert"
-
-#: include/profile_selectors.php:6
-msgid "Other"
-msgstr "Andere"
-
-#: include/profile_selectors.php:6 include/conversation.php:1478
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] "Unentschieden"
-msgstr[1] "Unentschieden"
-
-#: include/profile_selectors.php:23
-msgid "Males"
-msgstr "Männer"
-
-#: include/profile_selectors.php:23
-msgid "Females"
-msgstr "Frauen"
-
-#: include/profile_selectors.php:23
-msgid "Gay"
-msgstr "Schwul"
-
-#: include/profile_selectors.php:23
-msgid "Lesbian"
-msgstr "Lesbisch"
-
-#: include/profile_selectors.php:23
-msgid "No Preference"
-msgstr "Keine Vorlieben"
-
-#: include/profile_selectors.php:23
-msgid "Bisexual"
-msgstr "Bisexuell"
-
-#: include/profile_selectors.php:23
-msgid "Autosexual"
-msgstr "Autosexual"
-
-#: include/profile_selectors.php:23
-msgid "Abstinent"
-msgstr "Abstinent"
-
-#: include/profile_selectors.php:23
-msgid "Virgin"
-msgstr "Jungfrauen"
-
-#: include/profile_selectors.php:23
-msgid "Deviant"
-msgstr "Deviant"
-
-#: include/profile_selectors.php:23
-msgid "Fetish"
-msgstr "Fetish"
-
-#: include/profile_selectors.php:23
-msgid "Oodles"
-msgstr "Oodles"
-
-#: include/profile_selectors.php:23
-msgid "Nonsexual"
-msgstr "Nonsexual"
-
-#: include/profile_selectors.php:42
-msgid "Single"
-msgstr "Single"
-
-#: include/profile_selectors.php:42
-msgid "Lonely"
-msgstr "Einsam"
-
-#: include/profile_selectors.php:42
-msgid "Available"
-msgstr "Verfügbar"
-
-#: include/profile_selectors.php:42
-msgid "Unavailable"
-msgstr "Nicht verfügbar"
-
-#: include/profile_selectors.php:42
-msgid "Has crush"
-msgstr "verknallt"
-
-#: include/profile_selectors.php:42
-msgid "Infatuated"
-msgstr "verliebt"
-
-#: include/profile_selectors.php:42
-msgid "Dating"
-msgstr "Dating"
-
-#: include/profile_selectors.php:42
-msgid "Unfaithful"
-msgstr "Untreu"
-
-#: include/profile_selectors.php:42
-msgid "Sex Addict"
-msgstr "Sexbesessen"
-
-#: include/profile_selectors.php:42 include/user.php:280 include/user.php:284
-msgid "Friends"
-msgstr "Kontakte"
-
-#: include/profile_selectors.php:42
-msgid "Friends/Benefits"
-msgstr "Freunde/Zuwendungen"
-
-#: include/profile_selectors.php:42
-msgid "Casual"
-msgstr "Casual"
-
-#: include/profile_selectors.php:42
-msgid "Engaged"
-msgstr "Verlobt"
-
-#: include/profile_selectors.php:42
-msgid "Married"
-msgstr "Verheiratet"
-
-#: include/profile_selectors.php:42
-msgid "Imaginarily married"
-msgstr "imaginär verheiratet"
-
-#: include/profile_selectors.php:42
-msgid "Partners"
-msgstr "Partner"
-
-#: include/profile_selectors.php:42
-msgid "Cohabiting"
-msgstr "zusammenlebend"
-
-#: include/profile_selectors.php:42
-msgid "Common law"
-msgstr "wilde Ehe"
-
-#: include/profile_selectors.php:42
-msgid "Happy"
-msgstr "Glücklich"
-
-#: include/profile_selectors.php:42
-msgid "Not looking"
-msgstr "Nicht auf der Suche"
-
-#: include/profile_selectors.php:42
-msgid "Swinger"
-msgstr "Swinger"
-
-#: include/profile_selectors.php:42
-msgid "Betrayed"
-msgstr "Betrogen"
-
-#: include/profile_selectors.php:42
-msgid "Separated"
-msgstr "Getrennt"
-
-#: include/profile_selectors.php:42
-msgid "Unstable"
-msgstr "Unstabil"
-
-#: include/profile_selectors.php:42
-msgid "Divorced"
-msgstr "Geschieden"
-
-#: include/profile_selectors.php:42
-msgid "Imaginarily divorced"
-msgstr "imaginär geschieden"
-
-#: include/profile_selectors.php:42
-msgid "Widowed"
-msgstr "Verwitwet"
-
-#: include/profile_selectors.php:42
-msgid "Uncertain"
-msgstr "Unsicher"
-
-#: include/profile_selectors.php:42
-msgid "It's complicated"
-msgstr "Ist kompliziert"
-
-#: include/profile_selectors.php:42
-msgid "Don't care"
-msgstr "Ist mir nicht wichtig"
-
-#: include/profile_selectors.php:42
-msgid "Ask me"
-msgstr "Frag mich"
-
-#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1027
-#: view/theme/vier/theme.php:250
+#: include/ForumManager.php:114 include/nav.php:131 include/text.php:1093
+#: view/theme/vier/theme.php:254
 msgid "Forums"
 msgstr "Foren"
 
-#: include/ForumManager.php:116 view/theme/vier/theme.php:252
+#: include/ForumManager.php:116 view/theme/vier/theme.php:256
 msgid "External link to forum"
 msgstr "Externer Link zum Forum"
 
-#: include/ForumManager.php:119 include/contact_widgets.php:253
-#: include/items.php:2254 mod/content.php:624 object/Item.php:447
-#: view/theme/vier/theme.php:255 boot.php:971
+#: include/ForumManager.php:119 include/contact_widgets.php:269
+#: include/items.php:2450 mod/content.php:624 object/Item.php:420
+#: view/theme/vier/theme.php:259 boot.php:1000
 msgid "show more"
 msgstr "mehr anzeigen"
 
@@ -298,13 +64,13 @@ msgstr "mehr anzeigen"
 msgid "System"
 msgstr "System"
 
-#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:412
+#: include/NotificationsManager.php:160 include/nav.php:158 mod/admin.php:517
 #: view/theme/frio/theme.php:253
 msgid "Network"
 msgstr "Netzwerk"
 
-#: include/NotificationsManager.php:167 mod/profiles.php:695
-#: mod/network.php:846
+#: include/NotificationsManager.php:167 mod/network.php:832
+#: mod/profiles.php:696
 msgid "Personal"
 msgstr "Persönlich"
 
@@ -370,8415 +136,8611 @@ msgid "New Follower"
 msgstr "Neuer Bewunderer"
 
 #: include/Photo.php:1038 include/Photo.php:1054 include/Photo.php:1062
-#: include/Photo.php:1087 include/message.php:146 mod/item.php:462
-#: mod/wall_upload.php:216 mod/wall_upload.php:230 mod/wall_upload.php:237
+#: include/Photo.php:1087 include/message.php:146 mod/wall_upload.php:249
+#: mod/item.php:467
 msgid "Wall Photos"
 msgstr "Pinnwand-Bilder"
 
-#: include/auth.php:45
-msgid "Logged out."
-msgstr "Abgemeldet."
-
-#: include/auth.php:116 include/auth.php:177 mod/openid.php:110
-msgid "Login failed."
-msgstr "Anmeldung fehlgeschlagen."
-
-#: include/auth.php:131 include/user.php:75
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
-msgstr "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast."
+#: include/delivery.php:427
+msgid "(no subject)"
+msgstr "(kein Betreff)"
 
-#: include/auth.php:131 include/user.php:75
-msgid "The error message was:"
-msgstr "Die Fehlermeldung lautete:"
+#: include/delivery.php:439 include/enotify.php:43
+msgid "noreply"
+msgstr "noreply"
 
-#: include/bbcode.php:350 include/bbcode.php:1055 include/bbcode.php:1056
-msgid "Image/photo"
-msgstr "Bild/Foto"
+#: include/like.php:27 include/conversation.php:153 include/diaspora.php:1576
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
+msgstr "%1$s mag %2$ss %3$s"
 
-#: include/bbcode.php:467
+#: include/like.php:31 include/like.php:36 include/conversation.php:156
 #, php-format
-msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
-msgstr "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
-
-#: include/bbcode.php:1015 include/bbcode.php:1035
-msgid "$1 wrote:"
-msgstr "$1 hat geschrieben:"
-
-#: include/bbcode.php:1064 include/bbcode.php:1065
-msgid "Encrypted content"
-msgstr "Verschlüsselter Inhalt"
-
-#: include/bbcode.php:1167
-msgid "Invalid source protocol"
-msgstr "Ungültiges Quell-Protokoll"
-
-#: include/bbcode.php:1177
-msgid "Invalid link protocol"
-msgstr "Ungültiges Link-Protokoll"
+msgid "%1$s doesn't like %2$s's %3$s"
+msgstr "%1$s mag %2$ss %3$s nicht"
 
-#: include/dba_pdo.php:72 include/dba.php:56
+#: include/like.php:41
 #, php-format
-msgid "Cannot locate DNS info for database server '%s'"
-msgstr "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln."
-
-#: include/enotify.php:24
-msgid "Friendica Notification"
-msgstr "Friendica-Benachrichtigung"
-
-#: include/enotify.php:27
-msgid "Thank You,"
-msgstr "Danke,"
+msgid "%1$s is attending %2$s's %3$s"
+msgstr "%1$s nimmt an %2$ss %3$s teil."
 
-#: include/enotify.php:30
+#: include/like.php:46
 #, php-format
-msgid "%s Administrator"
-msgstr "der Administrator von %s"
+msgid "%1$s is not attending %2$s's %3$s"
+msgstr "%1$s nimmt nicht an %2$ss %3$s teil."
 
-#: include/enotify.php:32
+#: include/like.php:51
 #, php-format
-msgid "%1$s, %2$s Administrator"
-msgstr "%1$s, %2$s Administrator"
+msgid "%1$s may attend %2$s's %3$s"
+msgstr "%1$s nimmt eventuell an %2$ss %3$s teil."
 
-#: include/enotify.php:43 include/delivery.php:482
-msgid "noreply"
-msgstr "noreply"
+#: include/like.php:178 include/conversation.php:141
+#: include/conversation.php:293 include/text.php:1872 mod/subthread.php:88
+#: mod/tagger.php:62
+msgid "photo"
+msgstr "Foto"
 
-#: include/enotify.php:70
-#, php-format
-msgid "%s <!item_type!>"
-msgstr "%s <!item_type!>"
+#: include/like.php:178 include/conversation.php:136
+#: include/conversation.php:146 include/conversation.php:288
+#: include/conversation.php:297 include/diaspora.php:1580 mod/subthread.php:88
+#: mod/tagger.php:62
+msgid "status"
+msgstr "Status"
 
-#: include/enotify.php:83
-#, php-format
-msgid "[Friendica:Notify] New mail received at %s"
-msgstr "[Friendica-Meldung] Neue Nachricht erhalten von %s"
+#: include/like.php:180 include/conversation.php:133
+#: include/conversation.php:285 include/text.php:1870
+msgid "event"
+msgstr "Event"
 
-#: include/enotify.php:85
-#, php-format
-msgid "%1$s sent you a new private message at %2$s."
-msgstr "%1$s hat Dir eine neue private Nachricht auf %2$s geschickt."
+#: include/message.php:15 include/message.php:169
+msgid "[no subject]"
+msgstr "[kein Betreff]"
 
-#: include/enotify.php:86
-#, php-format
-msgid "%1$s sent you %2$s."
-msgstr "%1$s schickte Dir %2$s."
+#: include/nav.php:35 mod/navigation.php:19
+msgid "Nothing new here"
+msgstr "Keine Neuigkeiten"
 
-#: include/enotify.php:86
-msgid "a private message"
-msgstr "eine private Nachricht"
+#: include/nav.php:39 mod/navigation.php:23
+msgid "Clear notifications"
+msgstr "Bereinige Benachrichtigungen"
 
-#: include/enotify.php:88
-#, php-format
-msgid "Please visit %s to view and/or reply to your private messages."
-msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten."
+#: include/nav.php:40 include/text.php:1083
+msgid "@name, !forum, #tags, content"
+msgstr "@name, !forum, #tags, content"
 
-#: include/enotify.php:134
-#, php-format
-msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
-msgstr "%1$s kommentierte [url=%2$s]a %3$s[/url]"
+#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1867
+msgid "Logout"
+msgstr "Abmelden"
 
-#: include/enotify.php:141
-#, php-format
-msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
-msgstr "%1$s kommentierte [url=%2$s]%3$ss %4$s[/url]"
+#: include/nav.php:78 view/theme/frio/theme.php:243
+msgid "End this session"
+msgstr "Diese Sitzung beenden"
 
-#: include/enotify.php:149
-#, php-format
-msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
-msgstr "%1$s kommentierte [url=%2$s]Deinen %3$s[/url]"
+#: include/nav.php:81 include/identity.php:769 mod/contacts.php:645
+#: mod/contacts.php:841 view/theme/frio/theme.php:246
+msgid "Status"
+msgstr "Status"
 
-#: include/enotify.php:159
-#, php-format
-msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
-msgstr "[Friendica-Meldung] Kommentar zum Beitrag #%1$d von %2$s"
+#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246
+msgid "Your posts and conversations"
+msgstr "Deine Beiträge und Unterhaltungen"
 
-#: include/enotify.php:161
-#, php-format
-msgid "%s commented on an item/conversation you have been following."
-msgstr "%s hat einen Beitrag kommentiert, dem Du folgst."
+#: include/nav.php:82 include/identity.php:622 include/identity.php:744
+#: include/identity.php:777 mod/contacts.php:647 mod/contacts.php:849
+#: mod/newmember.php:32 mod/profperm.php:105 view/theme/frio/theme.php:247
+msgid "Profile"
+msgstr "Profil"
 
-#: include/enotify.php:164 include/enotify.php:178 include/enotify.php:192
-#: include/enotify.php:206 include/enotify.php:224 include/enotify.php:238
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
-msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren."
+#: include/nav.php:82 view/theme/frio/theme.php:247
+msgid "Your profile page"
+msgstr "Deine Profilseite"
 
-#: include/enotify.php:171
-#, php-format
-msgid "[Friendica:Notify] %s posted to your profile wall"
-msgstr "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben"
+#: include/nav.php:83 include/identity.php:785 mod/fbrowser.php:31
+#: view/theme/frio/theme.php:248
+msgid "Photos"
+msgstr "Bilder"
 
-#: include/enotify.php:173
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
-msgstr "%1$s schrieb auf %2$s auf Deine Pinnwand"
+#: include/nav.php:83 view/theme/frio/theme.php:248
+msgid "Your photos"
+msgstr "Deine Fotos"
 
-#: include/enotify.php:174
-#, php-format
-msgid "%1$s posted to [url=%2$s]your wall[/url]"
-msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet"
+#: include/nav.php:84 include/identity.php:793 include/identity.php:796
+#: view/theme/frio/theme.php:249
+msgid "Videos"
+msgstr "Videos"
 
-#: include/enotify.php:185
-#, php-format
-msgid "[Friendica:Notify] %s tagged you"
-msgstr "[Friendica-Meldung] %s hat Dich erwähnt"
+#: include/nav.php:84 view/theme/frio/theme.php:249
+msgid "Your videos"
+msgstr "Deine Videos"
 
-#: include/enotify.php:187
-#, php-format
-msgid "%1$s tagged you at %2$s"
-msgstr "%1$s erwähnte Dich auf %2$s"
+#: include/nav.php:85 include/nav.php:149 include/identity.php:805
+#: include/identity.php:816 mod/cal.php:270 mod/events.php:374
+#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254
+msgid "Events"
+msgstr "Veranstaltungen"
 
-#: include/enotify.php:188
-#, php-format
-msgid "%1$s [url=%2$s]tagged you[/url]."
-msgstr "%1$s [url=%2$s]erwähnte Dich[/url]."
+#: include/nav.php:85 view/theme/frio/theme.php:250
+msgid "Your events"
+msgstr "Deine Ereignisse"
 
-#: include/enotify.php:199
-#, php-format
-msgid "[Friendica:Notify] %s shared a new post"
-msgstr "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt"
+#: include/nav.php:86
+msgid "Personal notes"
+msgstr "Persönliche Notizen"
 
-#: include/enotify.php:201
-#, php-format
-msgid "%1$s shared a new post at %2$s"
-msgstr "%1$s hat einen neuen Beitrag auf %2$s geteilt"
+#: include/nav.php:86
+msgid "Your personal notes"
+msgstr "Deine persönlichen Notizen"
 
-#: include/enotify.php:202
-#, php-format
-msgid "%1$s [url=%2$s]shared a post[/url]."
-msgstr "%1$s [url=%2$s]hat einen Beitrag geteilt[/url]."
+#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1868
+msgid "Login"
+msgstr "Anmeldung"
 
-#: include/enotify.php:213
-#, php-format
-msgid "[Friendica:Notify] %1$s poked you"
-msgstr "[Friendica-Meldung] %1$s hat Dich angestupst"
+#: include/nav.php:95
+msgid "Sign in"
+msgstr "Anmelden"
 
-#: include/enotify.php:215
-#, php-format
-msgid "%1$s poked you at %2$s"
-msgstr "%1$s hat Dich auf %2$s angestupst"
+#: include/nav.php:105
+msgid "Home Page"
+msgstr "Homepage"
 
-#: include/enotify.php:216
-#, php-format
-msgid "%1$s [url=%2$s]poked you[/url]."
-msgstr "%1$s [url=%2$s]hat Dich angestupst[/url]."
+#: include/nav.php:109 mod/register.php:289 boot.php:1844
+msgid "Register"
+msgstr "Registrieren"
 
-#: include/enotify.php:231
-#, php-format
-msgid "[Friendica:Notify] %s tagged your post"
-msgstr "[Friendica-Meldung] %s hat Deinen Beitrag getaggt"
+#: include/nav.php:109
+msgid "Create an account"
+msgstr "Nutzerkonto erstellen"
 
-#: include/enotify.php:233
-#, php-format
-msgid "%1$s tagged your post at %2$s"
-msgstr "%1$s erwähnte Deinen Beitrag auf %2$s"
+#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:297
+msgid "Help"
+msgstr "Hilfe"
 
-#: include/enotify.php:234
-#, php-format
-msgid "%1$s tagged [url=%2$s]your post[/url]"
-msgstr "%1$s erwähnte [url=%2$s]Deinen Beitrag[/url]"
+#: include/nav.php:115
+msgid "Help and documentation"
+msgstr "Hilfe und Dokumentation"
 
-#: include/enotify.php:245
-msgid "[Friendica:Notify] Introduction received"
-msgstr "[Friendica-Meldung] Kontaktanfrage erhalten"
+#: include/nav.php:119
+msgid "Apps"
+msgstr "Apps"
 
-#: include/enotify.php:247
-#, php-format
-msgid "You've received an introduction from '%1$s' at %2$s"
-msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten"
+#: include/nav.php:119
+msgid "Addon applications, utilities, games"
+msgstr "Addon Anwendungen, Dienstprogramme, Spiele"
 
-#: include/enotify.php:248
-#, php-format
-msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
-msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten."
+#: include/nav.php:123 include/text.php:1080 mod/search.php:149
+msgid "Search"
+msgstr "Suche"
 
-#: include/enotify.php:252 include/enotify.php:295
-#, php-format
-msgid "You may visit their profile at %s"
-msgstr "Hier kannst Du das Profil betrachten: %s"
+#: include/nav.php:123
+msgid "Search site content"
+msgstr "Inhalt der Seite durchsuchen"
 
-#: include/enotify.php:254
-#, php-format
-msgid "Please visit %s to approve or reject the introduction."
-msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen."
+#: include/nav.php:126 include/text.php:1088
+msgid "Full Text"
+msgstr "Volltext"
 
-#: include/enotify.php:262
-msgid "[Friendica:Notify] A new person is sharing with you"
-msgstr "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir"
+#: include/nav.php:127 include/text.php:1089
+msgid "Tags"
+msgstr "Tags"
 
-#: include/enotify.php:264 include/enotify.php:265
-#, php-format
-msgid "%1$s is sharing with you at %2$s"
-msgstr "%1$s teilt mit Dir auf %2$s"
+#: include/nav.php:128 include/nav.php:192 include/identity.php:838
+#: include/identity.php:841 include/text.php:1090 mod/contacts.php:800
+#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257
+msgid "Contacts"
+msgstr "Kontakte"
 
-#: include/enotify.php:271
-msgid "[Friendica:Notify] You have a new follower"
-msgstr "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf "
+#: include/nav.php:143 include/nav.php:145 mod/community.php:32
+msgid "Community"
+msgstr "Gemeinschaft"
 
-#: include/enotify.php:273 include/enotify.php:274
-#, php-format
-msgid "You have a new follower at %2$s : %1$s"
-msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s"
+#: include/nav.php:143
+msgid "Conversations on this site"
+msgstr "Unterhaltungen auf dieser Seite"
 
-#: include/enotify.php:285
-msgid "[Friendica:Notify] Friend suggestion received"
-msgstr "[Friendica-Meldung] Kontaktvorschlag erhalten"
+#: include/nav.php:145
+msgid "Conversations on the network"
+msgstr "Unterhaltungen im Netzwerk"
 
-#: include/enotify.php:287
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
-msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten"
+#: include/nav.php:149 include/identity.php:808 include/identity.php:819
+#: view/theme/frio/theme.php:254
+msgid "Events and Calendar"
+msgstr "Ereignisse und Kalender"
 
-#: include/enotify.php:288
-#, php-format
-msgid ""
-"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
-msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten."
+#: include/nav.php:152
+msgid "Directory"
+msgstr "Verzeichnis"
 
-#: include/enotify.php:293
-msgid "Name:"
-msgstr "Name:"
+#: include/nav.php:152
+msgid "People directory"
+msgstr "Nutzerverzeichnis"
 
-#: include/enotify.php:294
-msgid "Photo:"
-msgstr "Foto:"
+#: include/nav.php:154
+msgid "Information"
+msgstr "Information"
 
-#: include/enotify.php:297
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
-msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."
+#: include/nav.php:154
+msgid "Information about this friendica instance"
+msgstr "Informationen zu dieser Friendica Instanz"
 
-#: include/enotify.php:305 include/enotify.php:319
-msgid "[Friendica:Notify] Connection accepted"
-msgstr "[Friendica-Benachrichtigung] Kontaktanfrage bestätigt"
+#: include/nav.php:158 view/theme/frio/theme.php:253
+msgid "Conversations from your friends"
+msgstr "Unterhaltungen Deiner Kontakte"
 
-#: include/enotify.php:307 include/enotify.php:321
-#, php-format
-msgid "'%1$s' has accepted your connection request at %2$s"
-msgstr "'%1$s' hat Deine Kontaktanfrage auf  %2$s bestätigt"
+#: include/nav.php:159
+msgid "Network Reset"
+msgstr "Netzwerk zurücksetzen"
 
-#: include/enotify.php:308 include/enotify.php:322
-#, php-format
-msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
-msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert."
+#: include/nav.php:159
+msgid "Load Network page with no filters"
+msgstr "Netzwerk-Seite ohne Filter laden"
 
-#: include/enotify.php:312
-msgid ""
-"You are now mutual friends and may exchange status updates, photos, and "
-"email without restriction."
-msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und Emails ohne Einschränkungen austauschen."
+#: include/nav.php:166
+msgid "Friend Requests"
+msgstr "Kontaktanfragen"
 
-#: include/enotify.php:314
-#, php-format
-msgid "Please visit %s if you wish to make any changes to this relationship."
-msgstr "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst."
+#: include/nav.php:169 mod/notifications.php:96
+msgid "Notifications"
+msgstr "Benachrichtigungen"
 
-#: include/enotify.php:326
-#, php-format
-msgid ""
-"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
-"communication - such as private messaging and some profile interactions. If "
-"this is a celebrity or community page, these settings were applied "
-"automatically."
-msgstr "'%1$s' hat sich entschieden Dich als \"Fan\" zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen."
+#: include/nav.php:170
+msgid "See all notifications"
+msgstr "Alle Benachrichtigungen anzeigen"
 
-#: include/enotify.php:328
-#, php-format
-msgid ""
-"'%1$s' may choose to extend this into a two-way or more permissive "
-"relationship in the future."
-msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. "
+#: include/nav.php:171 mod/settings.php:906
+msgid "Mark as seen"
+msgstr "Als gelesen markieren"
 
-#: include/enotify.php:330
-#, php-format
-msgid "Please visit %s  if you wish to make any changes to this relationship."
-msgstr "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst."
+#: include/nav.php:171
+msgid "Mark all system notifications seen"
+msgstr "Markiere alle Systembenachrichtigungen als gelesen"
 
-#: include/enotify.php:340
-msgid "[Friendica System:Notify] registration request"
-msgstr "[Friendica System:Benachrichtigung] Registrationsanfrage"
+#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255
+msgid "Messages"
+msgstr "Nachrichten"
 
-#: include/enotify.php:342
-#, php-format
-msgid "You've received a registration request from '%1$s' at %2$s"
-msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten"
+#: include/nav.php:175 view/theme/frio/theme.php:255
+msgid "Private mail"
+msgstr "Private E-Mail"
 
-#: include/enotify.php:343
-#, php-format
-msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
-msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten."
+#: include/nav.php:176
+msgid "Inbox"
+msgstr "Eingang"
 
-#: include/enotify.php:347
-#, php-format
-msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
-msgstr "Kompletter Name:\t%1$s\\nURL der Seite:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
+#: include/nav.php:177
+msgid "Outbox"
+msgstr "Ausgang"
 
-#: include/enotify.php:350
-#, php-format
-msgid "Please visit %s to approve or reject the request."
-msgstr "Bitte besuche %s um die Anfrage zu bearbeiten."
+#: include/nav.php:178 mod/message.php:16
+msgid "New Message"
+msgstr "Neue Nachricht"
 
-#: include/follow.php:81 mod/dfrn_request.php:512
-msgid "Disallowed profile URL."
-msgstr "Nicht erlaubte Profil-URL."
+#: include/nav.php:181
+msgid "Manage"
+msgstr "Verwalten"
 
-#: include/follow.php:86
-msgid "Connect URL missing."
-msgstr "Connect-URL fehlt"
+#: include/nav.php:181
+msgid "Manage other pages"
+msgstr "Andere Seiten verwalten"
 
-#: include/follow.php:114
-msgid ""
-"This site is not configured to allow communications with other networks."
-msgstr "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann."
+#: include/nav.php:184 mod/settings.php:81
+msgid "Delegations"
+msgstr "Delegationen"
 
-#: include/follow.php:115 include/follow.php:129
-msgid "No compatible communication protocols or feeds were discovered."
-msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."
+#: include/nav.php:184 mod/delegate.php:130
+msgid "Delegate Page Management"
+msgstr "Delegiere das Management für die Seite"
 
-#: include/follow.php:127
-msgid "The profile address specified does not provide adequate information."
-msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
+#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111
+#: mod/admin.php:1618 mod/admin.php:1894 view/theme/frio/theme.php:256
+msgid "Settings"
+msgstr "Einstellungen"
 
-#: include/follow.php:132
-msgid "An author or name was not found."
-msgstr "Es wurde kein Autor oder Name gefunden."
+#: include/nav.php:186 view/theme/frio/theme.php:256
+msgid "Account settings"
+msgstr "Kontoeinstellungen"
 
-#: include/follow.php:135
-msgid "No browser URL could be matched to this address."
-msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden."
+#: include/nav.php:189 include/identity.php:290
+msgid "Profiles"
+msgstr "Profile"
 
-#: include/follow.php:138
-msgid ""
-"Unable to match @-style Identity Address with a known protocol or email "
-"contact."
-msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."
+#: include/nav.php:189
+msgid "Manage/Edit Profiles"
+msgstr "Profile Verwalten/Editieren"
 
-#: include/follow.php:139
-msgid "Use mailto: in front of address to force email check."
-msgstr "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."
+#: include/nav.php:192 view/theme/frio/theme.php:257
+msgid "Manage/edit friends and contacts"
+msgstr " Kontakte verwalten/editieren"
 
-#: include/follow.php:145
-msgid ""
-"The profile address specified belongs to a network which has been disabled "
-"on this site."
-msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."
+#: include/nav.php:197 mod/admin.php:196
+msgid "Admin"
+msgstr "Administration"
 
-#: include/follow.php:150
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
-msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können."
+#: include/nav.php:197
+msgid "Site setup and configuration"
+msgstr "Einstellungen der Seite und Konfiguration"
 
-#: include/follow.php:251
-msgid "Unable to retrieve contact information."
-msgstr "Konnte die Kontaktinformationen nicht empfangen."
+#: include/nav.php:200
+msgid "Navigation"
+msgstr "Navigation"
 
-#: 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 "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen."
+#: include/nav.php:200
+msgid "Site map"
+msgstr "Sitemap"
 
-#: include/group.php:210
-msgid "Default privacy group for new contacts"
-msgstr "Voreingestellte Gruppe für neue Kontakte"
+#: include/plugin.php:530 include/plugin.php:532
+msgid "Click here to upgrade."
+msgstr "Zum Upgraden hier klicken."
 
-#: include/group.php:243
-msgid "Everybody"
-msgstr "Alle Kontakte"
+#: include/plugin.php:538
+msgid "This action exceeds the limits set by your subscription plan."
+msgstr "Diese Aktion überschreitet die Obergrenze Deines Abonnements."
 
-#: include/group.php:266
-msgid "edit"
-msgstr "bearbeiten"
+#: include/plugin.php:543
+msgid "This action is not available under your subscription plan."
+msgstr "Diese Aktion ist in Deinem Abonnement nicht verfügbar."
 
-#: include/group.php:287 mod/newmember.php:61
-msgid "Groups"
-msgstr "Gruppen"
-
-#: include/group.php:289
-msgid "Edit groups"
-msgstr "Gruppen bearbeiten"
+#: include/profile_selectors.php:6
+msgid "Male"
+msgstr "Männlich"
 
-#: include/group.php:291
-msgid "Edit group"
-msgstr "Gruppe bearbeiten"
+#: include/profile_selectors.php:6
+msgid "Female"
+msgstr "Weiblich"
 
-#: include/group.php:292
-msgid "Create a new group"
-msgstr "Neue Gruppe erstellen"
+#: include/profile_selectors.php:6
+msgid "Currently Male"
+msgstr "Momentan männlich"
 
-#: include/group.php:293 mod/group.php:98 mod/group.php:188
-msgid "Group Name: "
-msgstr "Gruppenname:"
+#: include/profile_selectors.php:6
+msgid "Currently Female"
+msgstr "Momentan weiblich"
 
-#: include/group.php:295
-msgid "Contacts not in any group"
-msgstr "Kontakte in keiner Gruppe"
+#: include/profile_selectors.php:6
+msgid "Mostly Male"
+msgstr "Hauptsächlich männlich"
 
-#: include/group.php:297 mod/network.php:200
-msgid "add"
-msgstr "hinzufügen"
+#: include/profile_selectors.php:6
+msgid "Mostly Female"
+msgstr "Hauptsächlich weiblich"
 
-#: include/like.php:164 include/conversation.php:130
-#: include/conversation.php:266 include/text.php:1806 mod/subthread.php:88
-#: mod/tagger.php:62
-msgid "photo"
-msgstr "Foto"
+#: include/profile_selectors.php:6
+msgid "Transgender"
+msgstr "Transgender"
 
-#: include/like.php:164 include/conversation.php:125
-#: include/conversation.php:134 include/conversation.php:261
-#: include/conversation.php:270 include/diaspora.php:1530 mod/subthread.php:88
-#: mod/tagger.php:62
-msgid "status"
-msgstr "Status"
+#: include/profile_selectors.php:6
+msgid "Intersex"
+msgstr "Intersex"
 
-#: include/like.php:166 include/conversation.php:122
-#: include/conversation.php:258 include/text.php:1804
-msgid "event"
-msgstr "Event"
+#: include/profile_selectors.php:6
+msgid "Transsexual"
+msgstr "Transsexuell"
 
-#: include/like.php:184 include/conversation.php:141 include/diaspora.php:1526
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
-msgstr "%1$s mag %2$ss %3$s"
+#: include/profile_selectors.php:6
+msgid "Hermaphrodite"
+msgstr "Hermaphrodit"
 
-#: include/like.php:187 include/conversation.php:144
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
-msgstr "%1$s mag %2$ss %3$s nicht"
+#: include/profile_selectors.php:6
+msgid "Neuter"
+msgstr "Neuter"
 
-#: include/like.php:190
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
-msgstr "%1$s nimmt an %2$ss %3$s teil."
+#: include/profile_selectors.php:6
+msgid "Non-specific"
+msgstr "Nicht spezifiziert"
 
-#: include/like.php:193
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
-msgstr "%1$s nimmt nicht an %2$ss %3$s teil."
+#: include/profile_selectors.php:6
+msgid "Other"
+msgstr "Andere"
 
-#: include/like.php:196
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
-msgstr "%1$s nimmt eventuell an %2$ss %3$s teil."
+#: include/profile_selectors.php:6 include/conversation.php:1547
+msgid "Undecided"
+msgid_plural "Undecided"
+msgstr[0] "Unentschieden"
+msgstr[1] "Unentschieden"
 
-#: include/message.php:15 include/message.php:169
-msgid "[no subject]"
-msgstr "[kein Betreff]"
+#: include/profile_selectors.php:23
+msgid "Males"
+msgstr "Männer"
 
-#: include/nav.php:35 mod/navigation.php:19
-msgid "Nothing new here"
-msgstr "Keine Neuigkeiten"
+#: include/profile_selectors.php:23
+msgid "Females"
+msgstr "Frauen"
 
-#: include/nav.php:39 mod/navigation.php:23
-msgid "Clear notifications"
-msgstr "Bereinige Benachrichtigungen"
+#: include/profile_selectors.php:23
+msgid "Gay"
+msgstr "Schwul"
 
-#: include/nav.php:40 include/text.php:1017
-msgid "@name, !forum, #tags, content"
-msgstr "@name, !forum, #tags, content"
+#: include/profile_selectors.php:23
+msgid "Lesbian"
+msgstr "Lesbisch"
 
-#: include/nav.php:78 view/theme/frio/theme.php:243 boot.php:1833
-msgid "Logout"
-msgstr "Abmelden"
+#: include/profile_selectors.php:23
+msgid "No Preference"
+msgstr "Keine Vorlieben"
 
-#: include/nav.php:78 view/theme/frio/theme.php:243
-msgid "End this session"
-msgstr "Diese Sitzung beenden"
+#: include/profile_selectors.php:23
+msgid "Bisexual"
+msgstr "Bisexuell"
 
-#: include/nav.php:81 include/identity.php:766 mod/contacts.php:645
-#: mod/contacts.php:841 view/theme/frio/theme.php:246
-msgid "Status"
-msgstr "Status"
+#: include/profile_selectors.php:23
+msgid "Autosexual"
+msgstr "Autosexual"
 
-#: include/nav.php:81 include/nav.php:161 view/theme/frio/theme.php:246
-msgid "Your posts and conversations"
-msgstr "Deine Beiträge und Unterhaltungen"
+#: include/profile_selectors.php:23
+msgid "Abstinent"
+msgstr "Abstinent"
 
-#: include/nav.php:82 include/identity.php:617 include/identity.php:741
-#: include/identity.php:774 mod/newmember.php:32 mod/profperm.php:105
-#: mod/contacts.php:647 mod/contacts.php:849 view/theme/frio/theme.php:247
-msgid "Profile"
-msgstr "Profil"
+#: include/profile_selectors.php:23
+msgid "Virgin"
+msgstr "Jungfrauen"
 
-#: include/nav.php:82 view/theme/frio/theme.php:247
-msgid "Your profile page"
-msgstr "Deine Profilseite"
+#: include/profile_selectors.php:23
+msgid "Deviant"
+msgstr "Deviant"
 
-#: include/nav.php:83 include/identity.php:782 mod/fbrowser.php:31
-#: view/theme/frio/theme.php:248
-msgid "Photos"
-msgstr "Bilder"
+#: include/profile_selectors.php:23
+msgid "Fetish"
+msgstr "Fetish"
 
-#: include/nav.php:83 view/theme/frio/theme.php:248
-msgid "Your photos"
-msgstr "Deine Fotos"
+#: include/profile_selectors.php:23
+msgid "Oodles"
+msgstr "Oodles"
 
-#: include/nav.php:84 include/identity.php:790 include/identity.php:793
-#: view/theme/frio/theme.php:249
-msgid "Videos"
-msgstr "Videos"
+#: include/profile_selectors.php:23
+msgid "Nonsexual"
+msgstr "Nonsexual"
 
-#: include/nav.php:84 view/theme/frio/theme.php:249
-msgid "Your videos"
-msgstr "Deine Videos"
+#: include/profile_selectors.php:42
+msgid "Single"
+msgstr "Single"
 
-#: include/nav.php:85 include/nav.php:149 include/identity.php:802
-#: include/identity.php:813 mod/cal.php:270 mod/events.php:386
-#: view/theme/frio/theme.php:250 view/theme/frio/theme.php:254
-msgid "Events"
-msgstr "Veranstaltungen"
+#: include/profile_selectors.php:42
+msgid "Lonely"
+msgstr "Einsam"
 
-#: include/nav.php:85 view/theme/frio/theme.php:250
-msgid "Your events"
-msgstr "Deine Ereignisse"
+#: include/profile_selectors.php:42
+msgid "Available"
+msgstr "Verfügbar"
 
-#: include/nav.php:86
-msgid "Personal notes"
-msgstr "Persönliche Notizen"
+#: include/profile_selectors.php:42
+msgid "Unavailable"
+msgstr "Nicht verfügbar"
 
-#: include/nav.php:86
-msgid "Your personal notes"
-msgstr "Deine persönlichen Notizen"
+#: include/profile_selectors.php:42
+msgid "Has crush"
+msgstr "verknallt"
 
-#: include/nav.php:95 mod/bookmarklet.php:12 boot.php:1834
-msgid "Login"
-msgstr "Anmeldung"
+#: include/profile_selectors.php:42
+msgid "Infatuated"
+msgstr "verliebt"
 
-#: include/nav.php:95
-msgid "Sign in"
-msgstr "Anmelden"
+#: include/profile_selectors.php:42
+msgid "Dating"
+msgstr "Dating"
 
-#: include/nav.php:105
-msgid "Home Page"
-msgstr "Homepage"
+#: include/profile_selectors.php:42
+msgid "Unfaithful"
+msgstr "Untreu"
 
-#: include/nav.php:109 mod/register.php:289 boot.php:1809
-msgid "Register"
-msgstr "Registrieren"
+#: include/profile_selectors.php:42
+msgid "Sex Addict"
+msgstr "Sexbesessen"
 
-#: include/nav.php:109
-msgid "Create an account"
-msgstr "Nutzerkonto erstellen"
+#: include/profile_selectors.php:42 include/user.php:263 include/user.php:267
+msgid "Friends"
+msgstr "Kontakte"
 
-#: include/nav.php:115 mod/help.php:47 view/theme/vier/theme.php:293
-msgid "Help"
-msgstr "Hilfe"
+#: include/profile_selectors.php:42
+msgid "Friends/Benefits"
+msgstr "Freunde/Zuwendungen"
 
-#: include/nav.php:115
-msgid "Help and documentation"
-msgstr "Hilfe und Dokumentation"
+#: include/profile_selectors.php:42
+msgid "Casual"
+msgstr "Casual"
 
-#: include/nav.php:119
-msgid "Apps"
-msgstr "Apps"
+#: include/profile_selectors.php:42
+msgid "Engaged"
+msgstr "Verlobt"
 
-#: include/nav.php:119
-msgid "Addon applications, utilities, games"
-msgstr "Addon Anwendungen, Dienstprogramme, Spiele"
+#: include/profile_selectors.php:42
+msgid "Married"
+msgstr "Verheiratet"
 
-#: include/nav.php:123 include/text.php:1014 mod/search.php:149
-msgid "Search"
-msgstr "Suche"
+#: include/profile_selectors.php:42
+msgid "Imaginarily married"
+msgstr "imaginär verheiratet"
 
-#: include/nav.php:123
-msgid "Search site content"
-msgstr "Inhalt der Seite durchsuchen"
+#: include/profile_selectors.php:42
+msgid "Partners"
+msgstr "Partner"
 
-#: include/nav.php:126 include/text.php:1022
-msgid "Full Text"
-msgstr "Volltext"
+#: include/profile_selectors.php:42
+msgid "Cohabiting"
+msgstr "zusammenlebend"
 
-#: include/nav.php:127 include/text.php:1023
-msgid "Tags"
-msgstr "Tags"
-
-#: include/nav.php:128 include/nav.php:192 include/identity.php:835
-#: include/identity.php:838 include/text.php:1024 mod/contacts.php:800
-#: mod/contacts.php:861 mod/viewcontacts.php:121 view/theme/frio/theme.php:257
-msgid "Contacts"
-msgstr "Kontakte"
-
-#: include/nav.php:143 include/nav.php:145 mod/community.php:36
-msgid "Community"
-msgstr "Gemeinschaft"
-
-#: include/nav.php:143
-msgid "Conversations on this site"
-msgstr "Unterhaltungen auf dieser Seite"
-
-#: include/nav.php:145
-msgid "Conversations on the network"
-msgstr "Unterhaltungen im Netzwerk"
-
-#: include/nav.php:149 include/identity.php:805 include/identity.php:816
-#: view/theme/frio/theme.php:254
-msgid "Events and Calendar"
-msgstr "Ereignisse und Kalender"
-
-#: include/nav.php:152
-msgid "Directory"
-msgstr "Verzeichnis"
-
-#: include/nav.php:152
-msgid "People directory"
-msgstr "Nutzerverzeichnis"
-
-#: include/nav.php:154
-msgid "Information"
-msgstr "Information"
-
-#: include/nav.php:154
-msgid "Information about this friendica instance"
-msgstr "Informationen zu dieser Friendica Instanz"
-
-#: include/nav.php:158 view/theme/frio/theme.php:253
-msgid "Conversations from your friends"
-msgstr "Unterhaltungen Deiner Kontakte"
-
-#: include/nav.php:159
-msgid "Network Reset"
-msgstr "Netzwerk zurücksetzen"
-
-#: include/nav.php:159
-msgid "Load Network page with no filters"
-msgstr "Netzwerk-Seite ohne Filter laden"
-
-#: include/nav.php:166
-msgid "Friend Requests"
-msgstr "Kontaktanfragen"
-
-#: include/nav.php:169 mod/notifications.php:96
-msgid "Notifications"
-msgstr "Benachrichtigungen"
-
-#: include/nav.php:170
-msgid "See all notifications"
-msgstr "Alle Benachrichtigungen anzeigen"
-
-#: include/nav.php:171 mod/settings.php:906
-msgid "Mark as seen"
-msgstr "Als gelesen markieren"
-
-#: include/nav.php:171
-msgid "Mark all system notifications seen"
-msgstr "Markiere alle Systembenachrichtigungen als gelesen"
-
-#: include/nav.php:175 mod/message.php:179 view/theme/frio/theme.php:255
-msgid "Messages"
-msgstr "Nachrichten"
-
-#: include/nav.php:175 view/theme/frio/theme.php:255
-msgid "Private mail"
-msgstr "Private E-Mail"
-
-#: include/nav.php:176
-msgid "Inbox"
-msgstr "Eingang"
-
-#: include/nav.php:177
-msgid "Outbox"
-msgstr "Ausgang"
-
-#: include/nav.php:178 mod/message.php:16
-msgid "New Message"
-msgstr "Neue Nachricht"
-
-#: include/nav.php:181
-msgid "Manage"
-msgstr "Verwalten"
-
-#: include/nav.php:181
-msgid "Manage other pages"
-msgstr "Andere Seiten verwalten"
-
-#: include/nav.php:184 mod/settings.php:81
-msgid "Delegations"
-msgstr "Delegationen"
-
-#: include/nav.php:184 mod/delegate.php:130
-msgid "Delegate Page Management"
-msgstr "Delegiere das Management für die Seite"
-
-#: include/nav.php:186 mod/newmember.php:22 mod/settings.php:111
-#: mod/admin.php:1545 mod/admin.php:1815 view/theme/frio/theme.php:256
-msgid "Settings"
-msgstr "Einstellungen"
-
-#: include/nav.php:186 view/theme/frio/theme.php:256
-msgid "Account settings"
-msgstr "Kontoeinstellungen"
-
-#: include/nav.php:189 include/identity.php:285
-msgid "Profiles"
-msgstr "Profile"
-
-#: include/nav.php:189
-msgid "Manage/Edit Profiles"
-msgstr "Profile Verwalten/Editieren"
-
-#: include/nav.php:192 view/theme/frio/theme.php:257
-msgid "Manage/edit friends and contacts"
-msgstr " Kontakte verwalten/editieren"
+#: include/profile_selectors.php:42
+msgid "Common law"
+msgstr "wilde Ehe"
 
-#: include/nav.php:197 mod/admin.php:187
-msgid "Admin"
-msgstr "Administration"
+#: include/profile_selectors.php:42
+msgid "Happy"
+msgstr "Glücklich"
 
-#: include/nav.php:197
-msgid "Site setup and configuration"
-msgstr "Einstellungen der Seite und Konfiguration"
+#: include/profile_selectors.php:42
+msgid "Not looking"
+msgstr "Nicht auf der Suche"
 
-#: include/nav.php:200
-msgid "Navigation"
-msgstr "Navigation"
+#: include/profile_selectors.php:42
+msgid "Swinger"
+msgstr "Swinger"
 
-#: include/nav.php:200
-msgid "Site map"
-msgstr "Sitemap"
+#: include/profile_selectors.php:42
+msgid "Betrayed"
+msgstr "Betrogen"
 
-#: include/oembed.php:266
-msgid "Embedded content"
-msgstr "Eingebetteter Inhalt"
+#: include/profile_selectors.php:42
+msgid "Separated"
+msgstr "Getrennt"
 
-#: include/oembed.php:274
-msgid "Embedding disabled"
-msgstr "Einbettungen deaktiviert"
+#: include/profile_selectors.php:42
+msgid "Unstable"
+msgstr "Unstabil"
 
-#: include/ostatus.php:1832
-#, php-format
-msgid "%s is now following %s."
-msgstr "%s folgt nun %s"
+#: include/profile_selectors.php:42
+msgid "Divorced"
+msgstr "Geschieden"
 
-#: include/ostatus.php:1833
-msgid "following"
-msgstr "folgen"
+#: include/profile_selectors.php:42
+msgid "Imaginarily divorced"
+msgstr "imaginär geschieden"
 
-#: include/ostatus.php:1836
-#, php-format
-msgid "%s stopped following %s."
-msgstr "%s hat aufgehört %s zu folgen"
+#: include/profile_selectors.php:42
+msgid "Widowed"
+msgstr "Verwitwet"
 
-#: include/ostatus.php:1837
-msgid "stopped following"
-msgstr "wird nicht mehr gefolgt"
+#: include/profile_selectors.php:42
+msgid "Uncertain"
+msgstr "Unsicher"
 
-#: include/plugin.php:530 include/plugin.php:532
-msgid "Click here to upgrade."
-msgstr "Zum Upgraden hier klicken."
+#: include/profile_selectors.php:42
+msgid "It's complicated"
+msgstr "Ist kompliziert"
 
-#: include/plugin.php:538
-msgid "This action exceeds the limits set by your subscription plan."
-msgstr "Diese Aktion überschreitet die Obergrenze Deines Abonnements."
+#: include/profile_selectors.php:42
+msgid "Don't care"
+msgstr "Ist mir nicht wichtig"
 
-#: include/plugin.php:543
-msgid "This action is not available under your subscription plan."
-msgstr "Diese Aktion ist in Deinem Abonnement nicht verfügbar."
+#: include/profile_selectors.php:42
+msgid "Ask me"
+msgstr "Frag mich"
 
-#: include/security.php:22
+#: include/security.php:61
 msgid "Welcome "
 msgstr "Willkommen "
 
-#: include/security.php:23
+#: include/security.php:62
 msgid "Please upload a profile photo."
 msgstr "Bitte lade ein Profilbild hoch."
 
-#: include/security.php:26
+#: include/security.php:65
 msgid "Welcome back "
 msgstr "Willkommen zurück "
 
-#: include/security.php:375
+#: include/security.php:429
 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 "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)."
 
-#: include/uimport.php:94
+#: include/uimport.php:91
 msgid "Error decoding account file"
 msgstr "Fehler beim Verarbeiten der Account Datei"
 
-#: include/uimport.php:100
+#: include/uimport.php:97
 msgid "Error! No version data in file! This is not a Friendica account file?"
 msgstr "Fehler! Keine Versionsdaten in der Datei! Ist das wirklich eine Friendica Account Datei?"
 
-#: include/uimport.php:116 include/uimport.php:127
+#: include/uimport.php:113 include/uimport.php:124
 msgid "Error! Cannot check nickname"
 msgstr "Fehler! Konnte den Nickname nicht überprüfen."
 
-#: include/uimport.php:120 include/uimport.php:131
+#: include/uimport.php:117 include/uimport.php:128
 #, php-format
 msgid "User '%s' already exists on this server!"
 msgstr "Nutzer '%s' existiert bereits auf diesem Server!"
 
-#: include/uimport.php:153
+#: include/uimport.php:150
 msgid "User creation error"
 msgstr "Fehler beim Anlegen des Nutzeraccounts aufgetreten"
 
-#: include/uimport.php:173
+#: include/uimport.php:170
 msgid "User profile creation error"
 msgstr "Fehler beim Anlegen des Nutzerkontos"
 
-#: include/uimport.php:222
+#: include/uimport.php:219
 #, php-format
 msgid "%d contact not imported"
 msgid_plural "%d contacts not imported"
 msgstr[0] "%d Kontakt nicht importiert"
 msgstr[1] "%d Kontakte nicht importiert"
 
-#: include/uimport.php:292
+#: include/uimport.php:289
 msgid "Done. You can now login with your username and password"
 msgstr "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden"
 
-#: include/user.php:39 mod/settings.php:375
-msgid "Passwords do not match. Password unchanged."
-msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."
+#: include/Contact.php:395 include/Contact.php:408 include/Contact.php:453
+#: include/conversation.php:1004 include/conversation.php:1020
+#: mod/allfriends.php:68 mod/directory.php:157 mod/match.php:73
+#: mod/suggest.php:82 mod/dirfind.php:209
+msgid "View Profile"
+msgstr "Profil anschauen"
 
-#: include/user.php:48
-msgid "An invitation is required."
-msgstr "Du benötigst eine Einladung."
+#: include/Contact.php:409 include/contact_widgets.php:32
+#: include/conversation.php:1017 mod/allfriends.php:69 mod/contacts.php:610
+#: mod/match.php:74 mod/suggest.php:83 mod/dirfind.php:210 mod/follow.php:106
+msgid "Connect/Follow"
+msgstr "Verbinden/Folgen"
 
-#: include/user.php:53
-msgid "Invitation could not be verified."
-msgstr "Die Einladung konnte nicht überprüft werden."
+#: include/Contact.php:452 include/conversation.php:1003
+msgid "View Status"
+msgstr "Pinnwand anschauen"
 
-#: include/user.php:61
-msgid "Invalid OpenID url"
-msgstr "Ungültige OpenID URL"
+#: include/Contact.php:454 include/conversation.php:1005
+msgid "View Photos"
+msgstr "Bilder anschauen"
 
-#: include/user.php:82
-msgid "Please enter the required information."
-msgstr "Bitte trage die erforderlichen Informationen ein."
+#: include/Contact.php:455 include/conversation.php:1006
+msgid "Network Posts"
+msgstr "Netzwerkbeiträge"
 
-#: include/user.php:96
-msgid "Please use a shorter name."
-msgstr "Bitte verwende einen kürzeren Namen."
+#: include/Contact.php:456 include/conversation.php:1007
+msgid "View Contact"
+msgstr "Kontakt anzeigen"
 
-#: include/user.php:98
-msgid "Name too short."
-msgstr "Der Name ist zu kurz."
+#: include/Contact.php:457
+msgid "Drop Contact"
+msgstr "Kontakt löschen"
 
-#: include/user.php:113
-msgid "That doesn't appear to be your full (First Last) name."
-msgstr "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein."
+#: include/Contact.php:458 include/conversation.php:1008
+msgid "Send PM"
+msgstr "Private Nachricht senden"
 
-#: include/user.php:118
-msgid "Your email domain is not among those allowed on this site."
-msgstr "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."
+#: include/Contact.php:459 include/conversation.php:1012
+msgid "Poke"
+msgstr "Anstupsen"
 
-#: include/user.php:121
-msgid "Not a valid email address."
-msgstr "Keine gültige E-Mail-Adresse."
+#: include/Contact.php:840
+msgid "Organisation"
+msgstr "Organisation"
 
-#: include/user.php:134
-msgid "Cannot use that email."
-msgstr "Konnte diese E-Mail-Adresse nicht verwenden."
+#: include/Contact.php:843
+msgid "News"
+msgstr "Nachrichten"
 
-#: include/user.php:140
-msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
-msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen."
+#: include/Contact.php:846
+msgid "Forum"
+msgstr "Forum"
 
-#: include/user.php:147 include/user.php:245
-msgid "Nickname is already registered. Please choose another."
-msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
-
-#: include/user.php:157
-msgid ""
-"Nickname was once registered here and may not be re-used. Please choose "
-"another."
-msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
-
-#: include/user.php:173
-msgid "SERIOUS ERROR: Generation of security keys failed."
-msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
-
-#: include/user.php:231
-msgid "An error occurred during registration. Please try again."
-msgstr "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
-
-#: include/user.php:256 view/theme/duepuntozero/config.php:43
-#: view/theme/clean/config.php:60
-msgid "default"
-msgstr "Standard"
-
-#: include/user.php:266
-msgid "An error occurred creating your default profile. Please try again."
-msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
-
-#: include/user.php:326 include/user.php:334 include/user.php:342
-#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90
-#: mod/profile_photo.php:215 mod/profile_photo.php:310
-#: mod/profile_photo.php:320 mod/photos.php:68 mod/photos.php:182
-#: mod/photos.php:768 mod/photos.php:1231 mod/photos.php:1252
-#: mod/photos.php:1839
-msgid "Profile Photos"
-msgstr "Profilbilder"
-
-#: include/user.php:417
-#, 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 "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden."
-
-#: include/user.php:427
-#, php-format
-msgid "Registration at %s"
-msgstr "Registrierung als %s"
-
-#: include/user.php:437
-#, 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 "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde eingerichtet."
-
-#: include/user.php:441
-#, 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 "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2$s."
-
-#: include/user.php:473 mod/admin.php:1234
-#, php-format
-msgid "Registration details for %s"
-msgstr "Details der Registration von %s"
-
-#: include/acl_selectors.php:341
+#: include/acl_selectors.php:353
 msgid "Post to Email"
 msgstr "An E-Mail senden"
 
-#: include/acl_selectors.php:346
+#: include/acl_selectors.php:358
 #, php-format
 msgid "Connectors disabled, since \"%s\" is enabled."
 msgstr "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist."
 
-#: include/acl_selectors.php:347 mod/settings.php:1188
+#: include/acl_selectors.php:359 mod/settings.php:1188
 msgid "Hide your profile details from unknown viewers?"
 msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
 
-#: include/acl_selectors.php:352
+#: include/acl_selectors.php:365
 msgid "Visible to everybody"
 msgstr "Für jeden sichtbar"
 
-#: include/acl_selectors.php:353 view/theme/vier/config.php:108
+#: include/acl_selectors.php:366 view/theme/vier/config.php:108
 msgid "show"
 msgstr "zeigen"
 
-#: include/acl_selectors.php:354 view/theme/vier/config.php:108
+#: include/acl_selectors.php:367 view/theme/vier/config.php:108
 msgid "don't show"
 msgstr "nicht zeigen"
 
-#: include/acl_selectors.php:360 mod/editpost.php:123
+#: include/acl_selectors.php:373 mod/editpost.php:123
 msgid "CC: email addresses"
 msgstr "Cc: E-Mail-Addressen"
 
-#: include/acl_selectors.php:361 mod/editpost.php:130
+#: include/acl_selectors.php:374 mod/editpost.php:130
 msgid "Example: bob@example.com, mary@example.com"
 msgstr "Z.B.: bob@example.com, mary@example.com"
 
-#: include/acl_selectors.php:363 mod/events.php:516 mod/photos.php:1176
-#: mod/photos.php:1558
+#: include/acl_selectors.php:376 mod/events.php:508 mod/photos.php:1196
+#: mod/photos.php:1593
 msgid "Permissions"
 msgstr "Berechtigungen"
 
-#: include/acl_selectors.php:364
+#: include/acl_selectors.php:377
 msgid "Close"
 msgstr "Schließen"
 
-#: include/conversation.php:147
+#: include/api.php:1089
 #, php-format
-msgid "%1$s attends %2$s's %3$s"
-msgstr "%1$s nimmt an %2$ss %3$s teil."
+msgid "Daily posting limit of %d posts reached. The post was rejected."
+msgstr "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
 
-#: include/conversation.php:150
+#: include/api.php:1110
 #, php-format
-msgid "%1$s doesn't attend %2$s's %3$s"
-msgstr "%1$s nimmt nicht an %2$ss %3$s teil."
+msgid "Weekly posting limit of %d posts reached. The post was rejected."
+msgstr "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
 
-#: include/conversation.php:153
+#: include/api.php:1131
 #, php-format
-msgid "%1$s attends maybe %2$s's %3$s"
-msgstr "%1$s nimmt eventuell an %2$ss %3$s teil."
+msgid "Monthly posting limit of %d posts reached. The post was rejected."
+msgstr "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
 
-#: include/conversation.php:185 mod/dfrn_confirm.php:478
-#, php-format
-msgid "%1$s is now friends with %2$s"
-msgstr "%1$s ist nun mit %2$s befreundet"
+#: include/auth.php:51
+msgid "Logged out."
+msgstr "Abgemeldet."
 
-#: include/conversation.php:219
-#, php-format
-msgid "%1$s poked %2$s"
-msgstr "%1$s stupste %2$s"
+#: include/auth.php:122 include/auth.php:184 mod/openid.php:110
+msgid "Login failed."
+msgstr "Anmeldung fehlgeschlagen."
 
-#: include/conversation.php:239 mod/mood.php:63
-#, php-format
-msgid "%1$s is currently %2$s"
-msgstr "%1$s ist momentan %2$s"
+#: include/auth.php:138 include/user.php:75
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
+msgstr "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast."
 
-#: include/conversation.php:278 mod/tagger.php:95
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
-msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt"
+#: include/auth.php:138 include/user.php:75
+msgid "The error message was:"
+msgstr "Die Fehlermeldung lautete:"
 
-#: include/conversation.php:303
-msgid "post/item"
-msgstr "Nachricht/Beitrag"
+#: include/bb2diaspora.php:230 include/event.php:17 mod/localtime.php:12
+msgid "l F d, Y \\@ g:i A"
+msgstr "l, d. F Y\\, H:i"
 
-#: include/conversation.php:304
-#, php-format
-msgid "%1$s marked %2$s's %3$s as favorite"
-msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert"
+#: include/bb2diaspora.php:236 include/event.php:34 include/event.php:54
+#: include/event.php:525
+msgid "Starts:"
+msgstr "Beginnt:"
 
-#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629
-#: mod/profiles.php:346
-msgid "Likes"
-msgstr "Likes"
+#: include/bb2diaspora.php:244 include/event.php:37 include/event.php:60
+#: include/event.php:526
+msgid "Finishes:"
+msgstr "Endet:"
 
-#: include/conversation.php:587 mod/content.php:372 mod/photos.php:1629
-#: mod/profiles.php:350
-msgid "Dislikes"
-msgstr "Dislikes"
+#: include/bb2diaspora.php:253 include/event.php:41 include/event.php:67
+#: include/event.php:527 include/identity.php:336 mod/contacts.php:636
+#: mod/directory.php:139 mod/events.php:493 mod/notifications.php:244
+msgid "Location:"
+msgstr "Ort:"
 
-#: include/conversation.php:588 include/conversation.php:1472
-#: mod/content.php:373 mod/photos.php:1630
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] "Teilnehmend"
-msgstr[1] "Teilnehmend"
+#: include/bbcode.php:380 include/bbcode.php:1132 include/bbcode.php:1133
+msgid "Image/photo"
+msgstr "Bild/Foto"
 
-#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630
-msgid "Not attending"
-msgstr "Nicht teilnehmend"
+#: include/bbcode.php:497
+#, php-format
+msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
+msgstr "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
 
-#: include/conversation.php:588 mod/content.php:373 mod/photos.php:1630
-msgid "Might attend"
-msgstr "Eventuell teilnehmend"
+#: include/bbcode.php:1089 include/bbcode.php:1111
+msgid "$1 wrote:"
+msgstr "$1 hat geschrieben:"
 
-#: include/conversation.php:710 mod/content.php:453 mod/content.php:759
-#: mod/photos.php:1703 object/Item.php:137
-msgid "Select"
-msgstr "Auswählen"
+#: include/bbcode.php:1141 include/bbcode.php:1142
+msgid "Encrypted content"
+msgstr "Verschlüsselter Inhalt"
 
-#: include/conversation.php:711 mod/content.php:454 mod/content.php:760
-#: mod/group.php:181 mod/settings.php:744 mod/contacts.php:816
-#: mod/contacts.php:1015 mod/photos.php:1704 mod/admin.php:1435
-#: object/Item.php:138
-msgid "Delete"
-msgstr "Löschen"
+#: include/bbcode.php:1257
+msgid "Invalid source protocol"
+msgstr "Ungültiges Quell-Protokoll"
 
-#: include/conversation.php:755 mod/content.php:487 mod/content.php:915
-#: mod/content.php:916 object/Item.php:382 object/Item.php:383
-#, php-format
-msgid "View %s's profile @ %s"
-msgstr "Das Profil von %s auf %s betrachten."
+#: include/bbcode.php:1267
+msgid "Invalid link protocol"
+msgstr "Ungültiges Link-Protokoll"
 
-#: include/conversation.php:767 object/Item.php:370
-msgid "Categories:"
-msgstr "Kategorien:"
+#: include/contact_selectors.php:32
+msgid "Unknown | Not categorised"
+msgstr "Unbekannt | Nicht kategorisiert"
 
-#: include/conversation.php:768 object/Item.php:371
-msgid "Filed under:"
-msgstr "Abgelegt unter:"
+#: include/contact_selectors.php:33
+msgid "Block immediately"
+msgstr "Sofort blockieren"
 
-#: include/conversation.php:775 mod/content.php:497 mod/content.php:928
-#: object/Item.php:396
-#, php-format
-msgid "%s from %s"
-msgstr "%s von %s"
+#: include/contact_selectors.php:34
+msgid "Shady, spammer, self-marketer"
+msgstr "Zwielichtig, Spammer, Selbstdarsteller"
 
-#: include/conversation.php:791 mod/content.php:513
-msgid "View in context"
-msgstr "Im Zusammenhang betrachten"
+#: include/contact_selectors.php:35
+msgid "Known to me, but no opinion"
+msgstr "Ist mir bekannt, hab aber keine Meinung"
 
-#: include/conversation.php:793 include/conversation.php:1255
-#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114
-#: mod/message.php:337 mod/message.php:522 mod/wallmessage.php:140
-#: mod/photos.php:1592 object/Item.php:421
-msgid "Please wait"
-msgstr "Bitte warten"
+#: include/contact_selectors.php:36
+msgid "OK, probably harmless"
+msgstr "OK, wahrscheinlich harmlos"
 
-#: include/conversation.php:872
-msgid "remove"
-msgstr "löschen"
+#: include/contact_selectors.php:37
+msgid "Reputable, has my trust"
+msgstr "Seriös, hat mein Vertrauen"
 
-#: include/conversation.php:876
-msgid "Delete Selected Items"
-msgstr "Lösche die markierten Beiträge"
+#: include/contact_selectors.php:56 mod/admin.php:980
+msgid "Frequently"
+msgstr "immer wieder"
 
-#: include/conversation.php:968
-msgid "Follow Thread"
-msgstr "Folge der Unterhaltung"
+#: include/contact_selectors.php:57 mod/admin.php:981
+msgid "Hourly"
+msgstr "Stündlich"
 
-#: include/conversation.php:969 include/Contact.php:445
-msgid "View Status"
-msgstr "Pinnwand anschauen"
+#: include/contact_selectors.php:58 mod/admin.php:982
+msgid "Twice daily"
+msgstr "Zweimal täglich"
 
-#: include/conversation.php:970 include/conversation.php:986
-#: include/Contact.php:388 include/Contact.php:401 include/Contact.php:446
-#: mod/allfriends.php:68 mod/directory.php:157 mod/dirfind.php:209
-#: mod/match.php:73 mod/suggest.php:82
-msgid "View Profile"
-msgstr "Profil anschauen"
+#: include/contact_selectors.php:59 mod/admin.php:983
+msgid "Daily"
+msgstr "Täglich"
 
-#: include/conversation.php:971 include/Contact.php:447
-msgid "View Photos"
-msgstr "Bilder anschauen"
+#: include/contact_selectors.php:60
+msgid "Weekly"
+msgstr "Wöchentlich"
 
-#: include/conversation.php:972 include/Contact.php:448
-msgid "Network Posts"
-msgstr "Netzwerkbeiträge"
+#: include/contact_selectors.php:61
+msgid "Monthly"
+msgstr "Monatlich"
 
-#: include/conversation.php:973 include/Contact.php:449
-msgid "View Contact"
-msgstr "Kontakt anzeigen"
+#: include/contact_selectors.php:76 mod/dfrn_request.php:886
+msgid "Friendica"
+msgstr "Friendica"
 
-#: include/conversation.php:974 include/Contact.php:451
-msgid "Send PM"
-msgstr "Private Nachricht senden"
+#: include/contact_selectors.php:77
+msgid "OStatus"
+msgstr "OStatus"
 
-#: include/conversation.php:978 include/Contact.php:452
-msgid "Poke"
-msgstr "Anstupsen"
+#: include/contact_selectors.php:78
+msgid "RSS/Atom"
+msgstr "RSS/Atom"
 
-#: include/conversation.php:983 include/contact_widgets.php:32
-#: include/Contact.php:402 mod/allfriends.php:69 mod/dirfind.php:210
-#: mod/follow.php:106 mod/match.php:74 mod/suggest.php:83 mod/contacts.php:610
-msgid "Connect/Follow"
-msgstr "Verbinden/Folgen"
+#: include/contact_selectors.php:79 include/contact_selectors.php:86
+#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1534
+msgid "Email"
+msgstr "E-Mail"
 
-#: include/conversation.php:1099
-#, php-format
-msgid "%s likes this."
-msgstr "%s mag das."
+#: include/contact_selectors.php:80 mod/dfrn_request.php:888
+#: mod/settings.php:848
+msgid "Diaspora"
+msgstr "Diaspora"
 
-#: include/conversation.php:1102
-#, php-format
-msgid "%s doesn't like this."
-msgstr "%s mag das nicht."
+#: include/contact_selectors.php:81
+msgid "Facebook"
+msgstr "Facebook"
 
-#: include/conversation.php:1105
-#, php-format
-msgid "%s attends."
-msgstr "%s nimmt teil."
+#: include/contact_selectors.php:82
+msgid "Zot!"
+msgstr "Zott"
 
-#: include/conversation.php:1108
-#, php-format
-msgid "%s doesn't attend."
-msgstr "%s nimmt nicht teil."
+#: include/contact_selectors.php:83
+msgid "LinkedIn"
+msgstr "LinkedIn"
 
-#: include/conversation.php:1111
+#: include/contact_selectors.php:84
+msgid "XMPP/IM"
+msgstr "XMPP/Chat"
+
+#: include/contact_selectors.php:85
+msgid "MySpace"
+msgstr "MySpace"
+
+#: include/contact_selectors.php:87
+msgid "Google+"
+msgstr "Google+"
+
+#: include/contact_selectors.php:88
+msgid "pump.io"
+msgstr "pump.io"
+
+#: include/contact_selectors.php:89
+msgid "Twitter"
+msgstr "Twitter"
+
+#: include/contact_selectors.php:90
+msgid "Diaspora Connector"
+msgstr "Diaspora"
+
+#: include/contact_selectors.php:91
+msgid "GNU Social Connector"
+msgstr "GNU social Connector"
+
+#: include/contact_selectors.php:92
+msgid "pnut"
+msgstr "pnut"
+
+#: include/contact_selectors.php:93
+msgid "App.net"
+msgstr "App.net"
+
+#: include/contact_widgets.php:6
+msgid "Add New Contact"
+msgstr "Neuen Kontakt hinzufügen"
+
+#: include/contact_widgets.php:7
+msgid "Enter address or web location"
+msgstr "Adresse oder Web-Link eingeben"
+
+#: include/contact_widgets.php:8
+msgid "Example: bob@example.com, http://example.com/barbara"
+msgstr "Beispiel: bob@example.com, http://example.com/barbara"
+
+#: include/contact_widgets.php:10 include/identity.php:224
+#: mod/allfriends.php:85 mod/match.php:89 mod/suggest.php:101
+#: mod/dirfind.php:207
+msgid "Connect"
+msgstr "Verbinden"
+
+#: include/contact_widgets.php:24
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] "%d Einladung verfügbar"
+msgstr[1] "%d Einladungen verfügbar"
+
+#: include/contact_widgets.php:30
+msgid "Find People"
+msgstr "Leute finden"
+
+#: include/contact_widgets.php:31
+msgid "Enter name or interest"
+msgstr "Name oder Interessen eingeben"
+
+#: include/contact_widgets.php:33
+msgid "Examples: Robert Morgenstein, Fishing"
+msgstr "Beispiel: Robert Morgenstein, Angeln"
+
+#: include/contact_widgets.php:34 mod/contacts.php:806 mod/directory.php:206
+msgid "Find"
+msgstr "Finde"
+
+#: include/contact_widgets.php:35 mod/suggest.php:114
+#: view/theme/vier/theme.php:201
+msgid "Friend Suggestions"
+msgstr "Kontaktvorschläge"
+
+#: include/contact_widgets.php:36 view/theme/vier/theme.php:200
+msgid "Similar Interests"
+msgstr "Ähnliche Interessen"
+
+#: include/contact_widgets.php:37
+msgid "Random Profile"
+msgstr "Zufälliges Profil"
+
+#: include/contact_widgets.php:38 view/theme/vier/theme.php:202
+msgid "Invite Friends"
+msgstr "Freunde einladen"
+
+#: include/contact_widgets.php:125
+msgid "Networks"
+msgstr "Netzwerke"
+
+#: include/contact_widgets.php:128
+msgid "All Networks"
+msgstr "Alle Netzwerke"
+
+#: include/contact_widgets.php:160 include/features.php:104
+msgid "Saved Folders"
+msgstr "Gespeicherte Ordner"
+
+#: include/contact_widgets.php:163 include/contact_widgets.php:198
+msgid "Everything"
+msgstr "Alles"
+
+#: include/contact_widgets.php:195
+msgid "Categories"
+msgstr "Kategorien"
+
+#: include/contact_widgets.php:264
+#, php-format
+msgid "%d contact in common"
+msgid_plural "%d contacts in common"
+msgstr[0] "%d gemeinsamer Kontakt"
+msgstr[1] "%d gemeinsame Kontakte"
+
+#: include/conversation.php:159
+#, php-format
+msgid "%1$s attends %2$s's %3$s"
+msgstr "%1$s nimmt an %2$ss %3$s teil."
+
+#: include/conversation.php:162
+#, php-format
+msgid "%1$s doesn't attend %2$s's %3$s"
+msgstr "%1$s nimmt nicht an %2$ss %3$s teil."
+
+#: include/conversation.php:165
+#, php-format
+msgid "%1$s attends maybe %2$s's %3$s"
+msgstr "%1$s nimmt eventuell an %2$ss %3$s teil."
+
+#: include/conversation.php:198 mod/dfrn_confirm.php:478
+#, php-format
+msgid "%1$s is now friends with %2$s"
+msgstr "%1$s ist nun mit %2$s befreundet"
+
+#: include/conversation.php:239
+#, php-format
+msgid "%1$s poked %2$s"
+msgstr "%1$s stupste %2$s"
+
+#: include/conversation.php:260 mod/mood.php:63
+#, php-format
+msgid "%1$s is currently %2$s"
+msgstr "%1$s ist momentan %2$s"
+
+#: include/conversation.php:307 mod/tagger.php:95
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
+msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt"
+
+#: include/conversation.php:334
+msgid "post/item"
+msgstr "Nachricht/Beitrag"
+
+#: include/conversation.php:335
+#, php-format
+msgid "%1$s marked %2$s's %3$s as favorite"
+msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert"
+
+#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662
+#: mod/profiles.php:340
+msgid "Likes"
+msgstr "Likes"
+
+#: include/conversation.php:614 mod/content.php:372 mod/photos.php:1662
+#: mod/profiles.php:344
+msgid "Dislikes"
+msgstr "Dislikes"
+
+#: include/conversation.php:615 include/conversation.php:1541
+#: mod/content.php:373 mod/photos.php:1663
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] "Teilnehmend"
+msgstr[1] "Teilnehmend"
+
+#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663
+msgid "Not attending"
+msgstr "Nicht teilnehmend"
+
+#: include/conversation.php:615 mod/content.php:373 mod/photos.php:1663
+msgid "Might attend"
+msgstr "Eventuell teilnehmend"
+
+#: include/conversation.php:747 mod/content.php:453 mod/content.php:759
+#: mod/photos.php:1728 object/Item.php:137
+msgid "Select"
+msgstr "Auswählen"
+
+#: include/conversation.php:748 mod/contacts.php:816 mod/contacts.php:1015
+#: mod/content.php:454 mod/content.php:760 mod/photos.php:1729
+#: mod/settings.php:744 mod/admin.php:1508 object/Item.php:138
+msgid "Delete"
+msgstr "Löschen"
+
+#: include/conversation.php:791 mod/content.php:487 mod/content.php:915
+#: mod/content.php:916 object/Item.php:356 object/Item.php:357
+#, php-format
+msgid "View %s's profile @ %s"
+msgstr "Das Profil von %s auf %s betrachten."
+
+#: include/conversation.php:803 object/Item.php:344
+msgid "Categories:"
+msgstr "Kategorien:"
+
+#: include/conversation.php:804 object/Item.php:345
+msgid "Filed under:"
+msgstr "Abgelegt unter:"
+
+#: include/conversation.php:811 mod/content.php:497 mod/content.php:928
+#: object/Item.php:370
+#, php-format
+msgid "%s from %s"
+msgstr "%s von %s"
+
+#: include/conversation.php:827 mod/content.php:513
+msgid "View in context"
+msgstr "Im Zusammenhang betrachten"
+
+#: include/conversation.php:829 include/conversation.php:1298
+#: mod/content.php:515 mod/content.php:953 mod/editpost.php:114
+#: mod/wallmessage.php:140 mod/message.php:337 mod/message.php:522
+#: mod/photos.php:1627 object/Item.php:395
+msgid "Please wait"
+msgstr "Bitte warten"
+
+#: include/conversation.php:906
+msgid "remove"
+msgstr "löschen"
+
+#: include/conversation.php:910
+msgid "Delete Selected Items"
+msgstr "Lösche die markierten Beiträge"
+
+#: include/conversation.php:1002
+msgid "Follow Thread"
+msgstr "Folge der Unterhaltung"
+
+#: include/conversation.php:1139
+#, php-format
+msgid "%s likes this."
+msgstr "%s mag das."
+
+#: include/conversation.php:1142
+#, php-format
+msgid "%s doesn't like this."
+msgstr "%s mag das nicht."
+
+#: include/conversation.php:1145
+#, php-format
+msgid "%s attends."
+msgstr "%s nimmt teil."
+
+#: include/conversation.php:1148
+#, php-format
+msgid "%s doesn't attend."
+msgstr "%s nimmt nicht teil."
+
+#: include/conversation.php:1151
 #, php-format
 msgid "%s attends maybe."
 msgstr "%s nimmt eventuell teil."
 
-#: include/conversation.php:1121
+#: include/conversation.php:1162
 msgid "and"
 msgstr "und"
 
-#: include/conversation.php:1127
+#: include/conversation.php:1168
 #, php-format
 msgid ", and %d other people"
 msgstr " und %d andere"
 
-#: include/conversation.php:1136
+#: include/conversation.php:1177
 #, php-format
 msgid "<span  %1$s>%2$d people</span> like this"
 msgstr "<span  %1$s>%2$d Personen</span> mögen das"
 
-#: include/conversation.php:1137
+#: include/conversation.php:1178
 #, php-format
 msgid "%s like this."
 msgstr "%s mögen das."
 
-#: include/conversation.php:1140
+#: include/conversation.php:1181
 #, php-format
 msgid "<span  %1$s>%2$d people</span> don't like this"
 msgstr "<span  %1$s>%2$d Personen</span> mögen das nicht"
 
-#: include/conversation.php:1141
+#: include/conversation.php:1182
 #, php-format
 msgid "%s don't like this."
 msgstr "%s mögen dies nicht."
 
-#: include/conversation.php:1144
+#: include/conversation.php:1185
 #, php-format
 msgid "<span  %1$s>%2$d people</span> attend"
 msgstr "<span %1$s>%2$d Personen</span> nehmen teil"
 
-#: include/conversation.php:1145
+#: include/conversation.php:1186
 #, php-format
 msgid "%s attend."
 msgstr "%s nehmen teil."
 
-#: include/conversation.php:1148
+#: include/conversation.php:1189
 #, php-format
 msgid "<span  %1$s>%2$d people</span> don't attend"
 msgstr "<span %1$s>%2$d Personen</span> nehmen nicht teil"
 
-#: include/conversation.php:1149
+#: include/conversation.php:1190
 #, php-format
 msgid "%s don't attend."
 msgstr "%s nehmen nicht teil."
 
-#: include/conversation.php:1152
+#: include/conversation.php:1193
 #, php-format
 msgid "<span  %1$s>%2$d people</span> attend maybe"
 msgstr "<span %1$s>%2$d Personen</span> nehmen eventuell teil"
 
-#: include/conversation.php:1153
+#: include/conversation.php:1194
 #, php-format
 msgid "%s anttend maybe."
 msgstr "%s  nehmen vielleicht teil."
 
-#: include/conversation.php:1183 include/conversation.php:1199
+#: include/conversation.php:1223 include/conversation.php:1239
 msgid "Visible to <strong>everybody</strong>"
 msgstr "Für <strong>jedermann</strong> sichtbar"
 
-#: include/conversation.php:1184 include/conversation.php:1200
-#: mod/message.php:271 mod/message.php:278 mod/message.php:418
-#: mod/message.php:425 mod/wallmessage.php:114 mod/wallmessage.php:121
+#: include/conversation.php:1224 include/conversation.php:1240
+#: mod/wallmessage.php:114 mod/wallmessage.php:121 mod/message.php:271
+#: mod/message.php:278 mod/message.php:418 mod/message.php:425
 msgid "Please enter a link URL:"
 msgstr "Bitte gib die URL des Links ein:"
 
-#: include/conversation.php:1185 include/conversation.php:1201
+#: include/conversation.php:1225 include/conversation.php:1241
 msgid "Please enter a video link/URL:"
 msgstr "Bitte Link/URL zum Video einfügen:"
 
-#: include/conversation.php:1186 include/conversation.php:1202
+#: include/conversation.php:1226 include/conversation.php:1242
 msgid "Please enter an audio link/URL:"
 msgstr "Bitte Link/URL zum Audio einfügen:"
 
-#: include/conversation.php:1187 include/conversation.php:1203
+#: include/conversation.php:1227 include/conversation.php:1243
 msgid "Tag term:"
 msgstr "Tag:"
 
-#: include/conversation.php:1188 include/conversation.php:1204
+#: include/conversation.php:1228 include/conversation.php:1244
 #: mod/filer.php:30
 msgid "Save to Folder:"
 msgstr "In diesem Ordner speichern:"
 
-#: include/conversation.php:1189 include/conversation.php:1205
+#: include/conversation.php:1229 include/conversation.php:1245
 msgid "Where are you right now?"
 msgstr "Wo hältst Du Dich jetzt gerade auf?"
 
-#: include/conversation.php:1190
+#: include/conversation.php:1230
 msgid "Delete item(s)?"
 msgstr "Einträge löschen?"
 
-#: include/conversation.php:1236
+#: include/conversation.php:1279
 msgid "Share"
 msgstr "Teilen"
 
-#: include/conversation.php:1237 mod/editpost.php:100 mod/message.php:335
-#: mod/message.php:519 mod/wallmessage.php:138
+#: include/conversation.php:1280 mod/editpost.php:100 mod/wallmessage.php:138
+#: mod/message.php:335 mod/message.php:519
 msgid "Upload photo"
 msgstr "Foto hochladen"
 
-#: include/conversation.php:1238 mod/editpost.php:101
+#: include/conversation.php:1281 mod/editpost.php:101
 msgid "upload photo"
 msgstr "Bild hochladen"
 
-#: include/conversation.php:1239 mod/editpost.php:102
+#: include/conversation.php:1282 mod/editpost.php:102
 msgid "Attach file"
 msgstr "Datei anhängen"
 
-#: include/conversation.php:1240 mod/editpost.php:103
+#: include/conversation.php:1283 mod/editpost.php:103
 msgid "attach file"
 msgstr "Datei anhängen"
 
-#: include/conversation.php:1241 mod/editpost.php:104 mod/message.php:336
-#: mod/message.php:520 mod/wallmessage.php:139
+#: include/conversation.php:1284 mod/editpost.php:104 mod/wallmessage.php:139
+#: mod/message.php:336 mod/message.php:520
 msgid "Insert web link"
 msgstr "Einen Link einfügen"
 
-#: include/conversation.php:1242 mod/editpost.php:105
+#: include/conversation.php:1285 mod/editpost.php:105
 msgid "web link"
 msgstr "Weblink"
 
-#: include/conversation.php:1243 mod/editpost.php:106
+#: include/conversation.php:1286 mod/editpost.php:106
 msgid "Insert video link"
 msgstr "Video-Adresse einfügen"
 
-#: include/conversation.php:1244 mod/editpost.php:107
+#: include/conversation.php:1287 mod/editpost.php:107
 msgid "video link"
 msgstr "Video-Link"
 
-#: include/conversation.php:1245 mod/editpost.php:108
+#: include/conversation.php:1288 mod/editpost.php:108
 msgid "Insert audio link"
 msgstr "Audio-Adresse einfügen"
 
-#: include/conversation.php:1246 mod/editpost.php:109
+#: include/conversation.php:1289 mod/editpost.php:109
 msgid "audio link"
 msgstr "Audio-Link"
 
-#: include/conversation.php:1247 mod/editpost.php:110
+#: include/conversation.php:1290 mod/editpost.php:110
 msgid "Set your location"
 msgstr "Deinen Standort festlegen"
 
-#: include/conversation.php:1248 mod/editpost.php:111
+#: include/conversation.php:1291 mod/editpost.php:111
 msgid "set location"
 msgstr "Ort setzen"
 
-#: include/conversation.php:1249 mod/editpost.php:112
+#: include/conversation.php:1292 mod/editpost.php:112
 msgid "Clear browser location"
 msgstr "Browser-Standort leeren"
 
-#: include/conversation.php:1250 mod/editpost.php:113
+#: include/conversation.php:1293 mod/editpost.php:113
 msgid "clear location"
 msgstr "Ort löschen"
 
-#: include/conversation.php:1252 mod/editpost.php:127
+#: include/conversation.php:1295 mod/editpost.php:127
 msgid "Set title"
 msgstr "Titel setzen"
 
-#: include/conversation.php:1254 mod/editpost.php:129
+#: include/conversation.php:1297 mod/editpost.php:129
 msgid "Categories (comma-separated list)"
 msgstr "Kategorien (kommasepariert)"
 
-#: include/conversation.php:1256 mod/editpost.php:115
+#: include/conversation.php:1299 mod/editpost.php:115
 msgid "Permission settings"
 msgstr "Berechtigungseinstellungen"
 
-#: include/conversation.php:1257 mod/editpost.php:144
+#: include/conversation.php:1300 mod/editpost.php:144
 msgid "permissions"
 msgstr "Zugriffsrechte"
 
-#: include/conversation.php:1265 mod/editpost.php:124
+#: include/conversation.php:1308 mod/editpost.php:124
 msgid "Public post"
 msgstr "Öffentlicher Beitrag"
 
-#: include/conversation.php:1270 mod/content.php:737 mod/editpost.php:135
-#: mod/events.php:511 mod/photos.php:1613 mod/photos.php:1661
-#: mod/photos.php:1747 object/Item.php:741
+#: include/conversation.php:1313 mod/content.php:737 mod/editpost.php:135
+#: mod/events.php:503 mod/photos.php:1647 mod/photos.php:1689
+#: mod/photos.php:1769 object/Item.php:714
 msgid "Preview"
 msgstr "Vorschau"
 
-#: include/conversation.php:1274 include/items.php:1983 mod/follow.php:124
-#: mod/settings.php:682 mod/settings.php:708 mod/suggest.php:32
-#: mod/tagrm.php:11 mod/tagrm.php:96 mod/videos.php:132 mod/contacts.php:455
+#: include/conversation.php:1317 include/items.php:2167 mod/contacts.php:455
 #: mod/editpost.php:138 mod/fbrowser.php:100 mod/fbrowser.php:135
-#: mod/message.php:209 mod/photos.php:240 mod/photos.php:331
-#: mod/dfrn_request.php:889
+#: mod/suggest.php:32 mod/tagrm.php:11 mod/tagrm.php:96
+#: mod/dfrn_request.php:894 mod/follow.php:124 mod/message.php:209
+#: mod/photos.php:245 mod/photos.php:337 mod/settings.php:682
+#: mod/settings.php:708 mod/videos.php:132
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: include/conversation.php:1280
+#: include/conversation.php:1323
 msgid "Post to Groups"
 msgstr "Poste an Gruppe"
 
-#: include/conversation.php:1281
+#: include/conversation.php:1324
 msgid "Post to Contacts"
 msgstr "Poste an Kontakte"
 
-#: include/conversation.php:1282
+#: include/conversation.php:1325
 msgid "Private post"
 msgstr "Privater Beitrag"
 
-#: include/conversation.php:1287 include/identity.php:259 mod/editpost.php:142
+#: include/conversation.php:1330 include/identity.php:264 mod/editpost.php:142
 msgid "Message"
 msgstr "Nachricht"
 
-#: include/conversation.php:1288 mod/editpost.php:143
+#: include/conversation.php:1331 mod/editpost.php:143
 msgid "Browser"
 msgstr "Browser"
 
-#: include/conversation.php:1444
+#: include/conversation.php:1513
 msgid "View all"
 msgstr "Zeige alle"
 
-#: include/conversation.php:1466
+#: include/conversation.php:1535
 msgid "Like"
 msgid_plural "Likes"
 msgstr[0] "mag ich"
 msgstr[1] "Mag ich"
 
-#: include/conversation.php:1469
+#: include/conversation.php:1538
 msgid "Dislike"
 msgid_plural "Dislikes"
 msgstr[0] "mag ich nicht"
 msgstr[1] "Mag ich nicht"
 
-#: include/conversation.php:1475
+#: include/conversation.php:1544
 msgid "Not Attending"
 msgid_plural "Not Attending"
 msgstr[0] "Nicht teilnehmend "
 msgstr[1] "Nicht teilnehmend"
 
-#: include/delivery.php:470
-msgid "(no subject)"
-msgstr "(kein Betreff)"
+#: include/datetime.php:66 include/datetime.php:68 mod/profiles.php:698
+msgid "Miscellaneous"
+msgstr "Verschiedenes"
 
-#: include/features.php:65
-msgid "General Features"
-msgstr "Allgemeine Features"
+#: include/datetime.php:196 include/identity.php:644
+msgid "Birthday:"
+msgstr "Geburtstag:"
 
-#: include/features.php:67
-msgid "Multiple Profiles"
-msgstr "Mehrere Profile"
+#: include/datetime.php:198 mod/profiles.php:721
+msgid "Age: "
+msgstr "Alter: "
 
-#: include/features.php:67
-msgid "Ability to create multiple profiles"
-msgstr "Möglichkeit mehrere Profile zu erstellen"
+#: include/datetime.php:200
+msgid "YYYY-MM-DD or MM-DD"
+msgstr "YYYY-MM-DD oder MM-DD"
 
-#: include/features.php:68
-msgid "Photo Location"
-msgstr "Aufnahmeort"
+#: include/datetime.php:370
+msgid "never"
+msgstr "nie"
 
-#: include/features.php:68
-msgid ""
-"Photo metadata is normally stripped. This extracts the location (if present)"
-" prior to stripping metadata and links it to a map."
-msgstr "Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden."
+#: include/datetime.php:376
+msgid "less than a second ago"
+msgstr "vor weniger als einer Sekunde"
 
-#: include/features.php:69
-msgid "Export Public Calendar"
-msgstr "Öffentlichen Kalender exportieren"
+#: include/datetime.php:379
+msgid "year"
+msgstr "Jahr"
 
-#: include/features.php:69
-msgid "Ability for visitors to download the public calendar"
-msgstr "Möglichkeit für Besucher den öffentlichen Kalender herunter zu laden"
-
-#: include/features.php:74
-msgid "Post Composition Features"
-msgstr "Beitragserstellung Features"
-
-#: include/features.php:75
-msgid "Post Preview"
-msgstr "Beitragsvorschau"
-
-#: include/features.php:75
-msgid "Allow previewing posts and comments before publishing them"
-msgstr "Die Vorschau von Beiträgen und Kommentaren vor dem absenden erlauben."
-
-#: include/features.php:76
-msgid "Auto-mention Forums"
-msgstr "Foren automatisch erwähnen"
-
-#: include/features.php:76
-msgid ""
-"Add/remove mention when a forum page is selected/deselected in ACL window."
-msgstr "Automatisch eine @-Erwähnung eines Forums einfügen/entfehrnen, wenn dieses im ACL Fenster de-/markiert  wurde."
-
-#: include/features.php:81
-msgid "Network Sidebar Widgets"
-msgstr "Widgets für Netzwerk und Seitenleiste"
-
-#: include/features.php:82
-msgid "Search by Date"
-msgstr "Archiv"
-
-#: include/features.php:82
-msgid "Ability to select posts by date ranges"
-msgstr "Möglichkeit die Beiträge nach Datumsbereichen zu sortieren"
-
-#: include/features.php:83 include/features.php:113
-msgid "List Forums"
-msgstr "Zeige Foren"
-
-#: include/features.php:83
-msgid "Enable widget to display the forums your are connected with"
-msgstr "Aktiviere Widget, um die Foren mit denen du verbunden bist anzuzeigen"
-
-#: include/features.php:84
-msgid "Group Filter"
-msgstr "Gruppen Filter"
-
-#: include/features.php:84
-msgid "Enable widget to display Network posts only from selected group"
-msgstr "Widget zur Darstellung der Beiträge nach Kontaktgruppen sortiert aktivieren."
-
-#: include/features.php:85
-msgid "Network Filter"
-msgstr "Netzwerk Filter"
-
-#: include/features.php:85
-msgid "Enable widget to display Network posts only from selected network"
-msgstr "Widget zum filtern der Beiträge in Abhängigkeit des Netzwerks aus dem der Ersteller sendet aktivieren."
-
-#: include/features.php:86 mod/network.php:199 mod/search.php:34
-msgid "Saved Searches"
-msgstr "Gespeicherte Suchen"
-
-#: include/features.php:86
-msgid "Save search terms for re-use"
-msgstr "Speichere Suchanfragen für spätere Wiederholung."
-
-#: include/features.php:91
-msgid "Network Tabs"
-msgstr "Netzwerk Reiter"
-
-#: include/features.php:92
-msgid "Network Personal Tab"
-msgstr "Netzwerk-Reiter: Persönlich"
-
-#: include/features.php:92
-msgid "Enable tab to display only Network posts that you've interacted on"
-msgstr "Aktiviert einen Netzwerk-Reiter in dem Nachrichten angezeigt werden mit denen Du interagiert hast"
-
-#: include/features.php:93
-msgid "Network New Tab"
-msgstr "Netzwerk-Reiter: Neue"
-
-#: include/features.php:93
-msgid "Enable tab to display only new Network posts (from the last 12 hours)"
-msgstr "Aktiviert einen Netzwerk-Reiter in dem ausschließlich neue Beiträge (der letzten 12 Stunden) angezeigt werden"
-
-#: include/features.php:94
-msgid "Network Shared Links Tab"
-msgstr "Netzwerk-Reiter: Geteilte Links"
-
-#: include/features.php:94
-msgid "Enable tab to display only Network posts with links in them"
-msgstr "Aktiviert einen Netzwerk-Reiter der ausschließlich Nachrichten mit Links enthält"
-
-#: include/features.php:99
-msgid "Post/Comment Tools"
-msgstr "Werkzeuge für Beiträge und Kommentare"
-
-#: include/features.php:100
-msgid "Multiple Deletion"
-msgstr "Mehrere Beiträge löschen"
-
-#: include/features.php:100
-msgid "Select and delete multiple posts/comments at once"
-msgstr "Mehrere Beiträge/Kommentare markieren und gleichzeitig löschen"
-
-#: include/features.php:101
-msgid "Edit Sent Posts"
-msgstr "Gesendete Beiträge editieren"
-
-#: include/features.php:101
-msgid "Edit and correct posts and comments after sending"
-msgstr "Erlaubt es Beiträge und Kommentare nach dem Senden zu editieren bzw.zu  korrigieren."
-
-#: include/features.php:102
-msgid "Tagging"
-msgstr "Tagging"
-
-#: include/features.php:102
-msgid "Ability to tag existing posts"
-msgstr "Möglichkeit bereits existierende Beiträge nachträglich mit Tags zu versehen."
-
-#: include/features.php:103
-msgid "Post Categories"
-msgstr "Beitragskategorien"
-
-#: include/features.php:103
-msgid "Add categories to your posts"
-msgstr "Eigene Beiträge mit Kategorien versehen"
-
-#: include/features.php:104 include/contact_widgets.php:150
-msgid "Saved Folders"
-msgstr "Gespeicherte Ordner"
-
-#: include/features.php:104
-msgid "Ability to file posts under folders"
-msgstr "Beiträge in Ordnern speichern aktivieren"
-
-#: include/features.php:105
-msgid "Dislike Posts"
-msgstr "Beiträge 'nicht mögen'"
-
-#: include/features.php:105
-msgid "Ability to dislike posts/comments"
-msgstr "Ermöglicht es Beiträge mit einem Klick 'nicht zu mögen'"
-
-#: include/features.php:106
-msgid "Star Posts"
-msgstr "Beiträge Markieren"
-
-#: include/features.php:106
-msgid "Ability to mark special posts with a star indicator"
-msgstr "Erlaubt es Beiträge mit einem Stern-Indikator zu  markieren"
-
-#: include/features.php:107
-msgid "Mute Post Notifications"
-msgstr "Benachrichtigungen für Beiträge Stumm schalten"
-
-#: include/features.php:107
-msgid "Ability to mute notifications for a thread"
-msgstr "Möglichkeit Benachrichtigungen für einen Thread abbestellen zu können"
-
-#: include/features.php:112
-msgid "Advanced Profile Settings"
-msgstr "Erweiterte Profil-Einstellungen"
-
-#: include/features.php:113
-msgid "Show visitors public community forums at the Advanced Profile Page"
-msgstr "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite"
-
-#: include/photos.php:57 include/photos.php:67 mod/fbrowser.php:40
-#: mod/fbrowser.php:61 mod/photos.php:182 mod/photos.php:1106
-#: mod/photos.php:1231 mod/photos.php:1252 mod/photos.php:1817
-#: mod/photos.php:1829
-msgid "Contact Photos"
-msgstr "Kontaktbilder"
-
-#: include/datetime.php:58 include/datetime.php:60 mod/profiles.php:697
-msgid "Miscellaneous"
-msgstr "Verschiedenes"
-
-#: include/datetime.php:184 include/identity.php:641
-msgid "Birthday:"
-msgstr "Geburtstag:"
-
-#: include/datetime.php:186 mod/profiles.php:720
-msgid "Age: "
-msgstr "Alter: "
-
-#: include/datetime.php:188
-msgid "YYYY-MM-DD or MM-DD"
-msgstr "YYYY-MM-DD oder MM-DD"
-
-#: include/datetime.php:343
-msgid "never"
-msgstr "nie"
-
-#: include/datetime.php:349
-msgid "less than a second ago"
-msgstr "vor weniger als einer Sekunde"
-
-#: include/datetime.php:352
-msgid "year"
-msgstr "Jahr"
-
-#: include/datetime.php:352
+#: include/datetime.php:379
 msgid "years"
 msgstr "Jahre"
 
-#: include/datetime.php:353 include/event.php:481 mod/cal.php:279
-#: mod/events.php:396
+#: include/datetime.php:380 include/event.php:519 mod/cal.php:279
+#: mod/events.php:384
 msgid "month"
 msgstr "Monat"
 
-#: include/datetime.php:353
+#: include/datetime.php:380
 msgid "months"
 msgstr "Monate"
 
-#: include/datetime.php:354 include/event.php:482 mod/cal.php:280
-#: mod/events.php:397
+#: include/datetime.php:381 include/event.php:520 mod/cal.php:280
+#: mod/events.php:385
 msgid "week"
 msgstr "Woche"
 
-#: include/datetime.php:354
+#: include/datetime.php:381
 msgid "weeks"
 msgstr "Wochen"
 
-#: include/datetime.php:355 include/event.php:483 mod/cal.php:281
-#: mod/events.php:398
+#: include/datetime.php:382 include/event.php:521 mod/cal.php:281
+#: mod/events.php:386
 msgid "day"
 msgstr "Tag"
 
-#: include/datetime.php:355
+#: include/datetime.php:382
 msgid "days"
 msgstr "Tage"
 
-#: include/datetime.php:356
+#: include/datetime.php:383
 msgid "hour"
 msgstr "Stunde"
 
-#: include/datetime.php:356
+#: include/datetime.php:383
 msgid "hours"
 msgstr "Stunden"
 
-#: include/datetime.php:357
+#: include/datetime.php:384
 msgid "minute"
 msgstr "Minute"
 
-#: include/datetime.php:357
+#: include/datetime.php:384
 msgid "minutes"
 msgstr "Minuten"
 
-#: include/datetime.php:358
+#: include/datetime.php:385
 msgid "second"
 msgstr "Sekunde"
 
-#: include/datetime.php:358
+#: include/datetime.php:385
 msgid "seconds"
 msgstr "Sekunden"
 
-#: include/datetime.php:367
+#: include/datetime.php:394
 #, php-format
 msgid "%1$d %2$s ago"
 msgstr "%1$d %2$s her"
 
-#: include/datetime.php:585
+#: include/datetime.php:620
 #, php-format
 msgid "%s's birthday"
 msgstr "%ss Geburtstag"
 
-#: include/datetime.php:586 include/dfrn.php:1122
+#: include/datetime.php:621 include/dfrn.php:1252
 #, php-format
 msgid "Happy Birthday %s"
 msgstr "Herzlichen Glückwunsch %s"
 
-#: include/event.php:16 include/bb2diaspora.php:199 mod/localtime.php:12
-msgid "l F d, Y \\@ g:i A"
-msgstr "l, d. F Y\\, H:i"
+#: include/dba_pdo.php:72 include/dba.php:47
+#, php-format
+msgid "Cannot locate DNS info for database server '%s'"
+msgstr "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln."
 
-#: include/event.php:33 include/event.php:51 include/event.php:488
-#: include/bb2diaspora.php:205
-msgid "Starts:"
-msgstr "Beginnt:"
+#: include/enotify.php:24
+msgid "Friendica Notification"
+msgstr "Friendica-Benachrichtigung"
 
-#: include/event.php:36 include/event.php:57 include/event.php:489
-#: include/bb2diaspora.php:213
-msgid "Finishes:"
-msgstr "Endet:"
+#: include/enotify.php:27
+msgid "Thank You,"
+msgstr "Danke,"
 
-#: include/event.php:39 include/event.php:63 include/event.php:490
-#: include/bb2diaspora.php:221 include/identity.php:331 mod/directory.php:139
-#: mod/contacts.php:636 mod/events.php:501 mod/notifications.php:238
-msgid "Location:"
-msgstr "Ort:"
+#: include/enotify.php:30
+#, php-format
+msgid "%s Administrator"
+msgstr "der Administrator von %s"
 
-#: include/event.php:442
-msgid "Sun"
-msgstr "So"
+#: include/enotify.php:32
+#, php-format
+msgid "%1$s, %2$s Administrator"
+msgstr "%1$s, %2$s Administrator"
 
-#: include/event.php:443
-msgid "Mon"
-msgstr "Mo"
+#: include/enotify.php:70
+#, php-format
+msgid "%s <!item_type!>"
+msgstr "%s <!item_type!>"
 
-#: include/event.php:444
-msgid "Tue"
-msgstr "Di"
+#: include/enotify.php:83
+#, php-format
+msgid "[Friendica:Notify] New mail received at %s"
+msgstr "[Friendica-Meldung] Neue Nachricht erhalten von %s"
 
-#: include/event.php:445
-msgid "Wed"
-msgstr "Mi"
+#: include/enotify.php:85
+#, php-format
+msgid "%1$s sent you a new private message at %2$s."
+msgstr "%1$s hat Dir eine neue private Nachricht auf %2$s geschickt."
 
-#: include/event.php:446
-msgid "Thu"
-msgstr "Do"
+#: include/enotify.php:86
+#, php-format
+msgid "%1$s sent you %2$s."
+msgstr "%1$s schickte Dir %2$s."
 
-#: include/event.php:447
-msgid "Fri"
-msgstr "Fr"
+#: include/enotify.php:86
+msgid "a private message"
+msgstr "eine private Nachricht"
 
-#: include/event.php:448
-msgid "Sat"
-msgstr "Sa"
+#: include/enotify.php:88
+#, php-format
+msgid "Please visit %s to view and/or reply to your private messages."
+msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten."
 
-#: include/event.php:449 include/text.php:1132 mod/settings.php:981
-msgid "Sunday"
-msgstr "Sonntag"
-
-#: include/event.php:450 include/text.php:1132 mod/settings.php:981
-msgid "Monday"
-msgstr "Montag"
+#: include/enotify.php:134
+#, php-format
+msgid "%1$s commented on [url=%2$s]a %3$s[/url]"
+msgstr "%1$s kommentierte [url=%2$s]a %3$s[/url]"
 
-#: include/event.php:451 include/text.php:1132
-msgid "Tuesday"
-msgstr "Dienstag"
+#: include/enotify.php:141
+#, php-format
+msgid "%1$s commented on [url=%2$s]%3$s's %4$s[/url]"
+msgstr "%1$s kommentierte [url=%2$s]%3$ss %4$s[/url]"
 
-#: include/event.php:452 include/text.php:1132
-msgid "Wednesday"
-msgstr "Mittwoch"
+#: include/enotify.php:149
+#, php-format
+msgid "%1$s commented on [url=%2$s]your %3$s[/url]"
+msgstr "%1$s kommentierte [url=%2$s]Deinen %3$s[/url]"
 
-#: include/event.php:453 include/text.php:1132
-msgid "Thursday"
-msgstr "Donnerstag"
+#: include/enotify.php:159
+#, php-format
+msgid "[Friendica:Notify] Comment to conversation #%1$d by %2$s"
+msgstr "[Friendica-Meldung] Kommentar zum Beitrag #%1$d von %2$s"
 
-#: include/event.php:454 include/text.php:1132
-msgid "Friday"
-msgstr "Freitag"
+#: include/enotify.php:161
+#, php-format
+msgid "%s commented on an item/conversation you have been following."
+msgstr "%s hat einen Beitrag kommentiert, dem Du folgst."
 
-#: include/event.php:455 include/text.php:1132
-msgid "Saturday"
-msgstr "Samstag"
+#: include/enotify.php:164 include/enotify.php:178 include/enotify.php:192
+#: include/enotify.php:206 include/enotify.php:224 include/enotify.php:238
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
+msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren."
 
-#: include/event.php:456
-msgid "Jan"
-msgstr "Jan"
+#: include/enotify.php:171
+#, php-format
+msgid "[Friendica:Notify] %s posted to your profile wall"
+msgstr "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben"
 
-#: include/event.php:457
-msgid "Feb"
-msgstr "Feb"
+#: include/enotify.php:173
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
+msgstr "%1$s schrieb auf %2$s auf Deine Pinnwand"
 
-#: include/event.php:458
-msgid "Mar"
-msgstr "März"
+#: include/enotify.php:174
+#, php-format
+msgid "%1$s posted to [url=%2$s]your wall[/url]"
+msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet"
 
-#: include/event.php:459
-msgid "Apr"
-msgstr "Apr"
+#: include/enotify.php:185
+#, php-format
+msgid "[Friendica:Notify] %s tagged you"
+msgstr "[Friendica-Meldung] %s hat Dich erwähnt"
 
-#: include/event.php:460 include/event.php:472 include/text.php:1136
-msgid "May"
-msgstr "Mai"
+#: include/enotify.php:187
+#, php-format
+msgid "%1$s tagged you at %2$s"
+msgstr "%1$s erwähnte Dich auf %2$s"
 
-#: include/event.php:461
-msgid "Jun"
-msgstr "Jun"
+#: include/enotify.php:188
+#, php-format
+msgid "%1$s [url=%2$s]tagged you[/url]."
+msgstr "%1$s [url=%2$s]erwähnte Dich[/url]."
 
-#: include/event.php:462
-msgid "Jul"
-msgstr "Juli"
+#: include/enotify.php:199
+#, php-format
+msgid "[Friendica:Notify] %s shared a new post"
+msgstr "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt"
 
-#: include/event.php:463
-msgid "Aug"
-msgstr "Aug"
+#: include/enotify.php:201
+#, php-format
+msgid "%1$s shared a new post at %2$s"
+msgstr "%1$s hat einen neuen Beitrag auf %2$s geteilt"
 
-#: include/event.php:464
-msgid "Sept"
-msgstr "Sep"
+#: include/enotify.php:202
+#, php-format
+msgid "%1$s [url=%2$s]shared a post[/url]."
+msgstr "%1$s [url=%2$s]hat einen Beitrag geteilt[/url]."
 
-#: include/event.php:465
-msgid "Oct"
-msgstr "Okt"
+#: include/enotify.php:213
+#, php-format
+msgid "[Friendica:Notify] %1$s poked you"
+msgstr "[Friendica-Meldung] %1$s hat Dich angestupst"
 
-#: include/event.php:466
-msgid "Nov"
-msgstr "Nov"
+#: include/enotify.php:215
+#, php-format
+msgid "%1$s poked you at %2$s"
+msgstr "%1$s hat Dich auf %2$s angestupst"
 
-#: include/event.php:467
-msgid "Dec"
-msgstr "Dez"
+#: include/enotify.php:216
+#, php-format
+msgid "%1$s [url=%2$s]poked you[/url]."
+msgstr "%1$s [url=%2$s]hat Dich angestupst[/url]."
 
-#: include/event.php:468 include/text.php:1136
-msgid "January"
-msgstr "Januar"
+#: include/enotify.php:231
+#, php-format
+msgid "[Friendica:Notify] %s tagged your post"
+msgstr "[Friendica-Meldung] %s hat Deinen Beitrag getaggt"
 
-#: include/event.php:469 include/text.php:1136
-msgid "February"
-msgstr "Februar"
+#: include/enotify.php:233
+#, php-format
+msgid "%1$s tagged your post at %2$s"
+msgstr "%1$s erwähnte Deinen Beitrag auf %2$s"
 
-#: include/event.php:470 include/text.php:1136
-msgid "March"
-msgstr "März"
+#: include/enotify.php:234
+#, php-format
+msgid "%1$s tagged [url=%2$s]your post[/url]"
+msgstr "%1$s erwähnte [url=%2$s]Deinen Beitrag[/url]"
 
-#: include/event.php:471 include/text.php:1136
-msgid "April"
-msgstr "April"
+#: include/enotify.php:245
+msgid "[Friendica:Notify] Introduction received"
+msgstr "[Friendica-Meldung] Kontaktanfrage erhalten"
 
-#: include/event.php:473 include/text.php:1136
-msgid "June"
-msgstr "Juni"
+#: include/enotify.php:247
+#, php-format
+msgid "You've received an introduction from '%1$s' at %2$s"
+msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten"
 
-#: include/event.php:474 include/text.php:1136
-msgid "July"
-msgstr "Juli"
+#: include/enotify.php:248
+#, php-format
+msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
+msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten."
 
-#: include/event.php:475 include/text.php:1136
-msgid "August"
-msgstr "August"
+#: include/enotify.php:252 include/enotify.php:295
+#, php-format
+msgid "You may visit their profile at %s"
+msgstr "Hier kannst Du das Profil betrachten: %s"
 
-#: include/event.php:476 include/text.php:1136
-msgid "September"
-msgstr "September"
+#: include/enotify.php:254
+#, php-format
+msgid "Please visit %s to approve or reject the introduction."
+msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen."
 
-#: include/event.php:477 include/text.php:1136
-msgid "October"
-msgstr "Oktober"
+#: include/enotify.php:262
+msgid "[Friendica:Notify] A new person is sharing with you"
+msgstr "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir"
 
-#: include/event.php:478 include/text.php:1136
-msgid "November"
-msgstr "November"
+#: include/enotify.php:264 include/enotify.php:265
+#, php-format
+msgid "%1$s is sharing with you at %2$s"
+msgstr "%1$s teilt mit Dir auf %2$s"
 
-#: include/event.php:479 include/text.php:1136
-msgid "December"
-msgstr "Dezember"
+#: include/enotify.php:271
+msgid "[Friendica:Notify] You have a new follower"
+msgstr "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf "
 
-#: include/event.php:480 mod/cal.php:278 mod/events.php:395
-msgid "today"
-msgstr "Heute"
+#: include/enotify.php:273 include/enotify.php:274
+#, php-format
+msgid "You have a new follower at %2$s : %1$s"
+msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s"
 
-#: include/event.php:484
-msgid "all-day"
-msgstr "ganztägig"
+#: include/enotify.php:285
+msgid "[Friendica:Notify] Friend suggestion received"
+msgstr "[Friendica-Meldung] Kontaktvorschlag erhalten"
 
-#: include/event.php:486
-msgid "No events to display"
-msgstr "Keine Veranstaltung zum Anzeigen"
+#: include/enotify.php:287
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
+msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten"
 
-#: include/event.php:596
-msgid "l, F j"
-msgstr "l, F j"
+#: include/enotify.php:288
+#, php-format
+msgid ""
+"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
+msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten."
 
-#: include/event.php:615
-msgid "Edit event"
-msgstr "Veranstaltung bearbeiten"
+#: include/enotify.php:293
+msgid "Name:"
+msgstr "Name:"
 
-#: include/event.php:637 include/text.php:1534 include/text.php:1541
-msgid "link to source"
-msgstr "Link zum Originalbeitrag"
+#: include/enotify.php:294
+msgid "Photo:"
+msgstr "Foto:"
 
-#: include/event.php:872
-msgid "Export"
-msgstr "Exportieren"
+#: include/enotify.php:297
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
+msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."
 
-#: include/event.php:873
-msgid "Export calendar as ical"
-msgstr "Kalender als ical exportieren"
+#: include/enotify.php:305 include/enotify.php:319
+msgid "[Friendica:Notify] Connection accepted"
+msgstr "[Friendica-Benachrichtigung] Kontaktanfrage bestätigt"
 
-#: include/event.php:874
-msgid "Export calendar as csv"
-msgstr "Kalender als csv exportieren"
+#: include/enotify.php:307 include/enotify.php:321
+#, php-format
+msgid "'%1$s' has accepted your connection request at %2$s"
+msgstr "'%1$s' hat Deine Kontaktanfrage auf  %2$s bestätigt"
 
-#: include/dfrn.php:1121
+#: include/enotify.php:308 include/enotify.php:322
 #, php-format
-msgid "%s\\'s birthday"
-msgstr "%ss Geburtstag"
+msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
+msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert."
 
-#: include/contact_selectors.php:32
-msgid "Unknown | Not categorised"
-msgstr "Unbekannt | Nicht kategorisiert"
+#: include/enotify.php:312
+msgid ""
+"You are now mutual friends and may exchange status updates, photos, and "
+"email without restriction."
+msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und Emails ohne Einschränkungen austauschen."
 
-#: include/contact_selectors.php:33
-msgid "Block immediately"
-msgstr "Sofort blockieren"
+#: include/enotify.php:314
+#, php-format
+msgid "Please visit %s if you wish to make any changes to this relationship."
+msgstr "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst."
 
-#: include/contact_selectors.php:34
-msgid "Shady, spammer, self-marketer"
-msgstr "Zwielichtig, Spammer, Selbstdarsteller"
+#: include/enotify.php:326
+#, php-format
+msgid ""
+"'%1$s' has chosen to accept you a \"fan\", which restricts some forms of "
+"communication - such as private messaging and some profile interactions. If "
+"this is a celebrity or community page, these settings were applied "
+"automatically."
+msgstr "'%1$s' hat sich entschieden Dich als \"Fan\" zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen."
 
-#: include/contact_selectors.php:35
-msgid "Known to me, but no opinion"
-msgstr "Ist mir bekannt, hab aber keine Meinung"
-
-#: include/contact_selectors.php:36
-msgid "OK, probably harmless"
-msgstr "OK, wahrscheinlich harmlos"
+#: include/enotify.php:328
+#, php-format
+msgid ""
+"'%1$s' may choose to extend this into a two-way or more permissive "
+"relationship in the future."
+msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. "
 
-#: include/contact_selectors.php:37
-msgid "Reputable, has my trust"
-msgstr "Seriös, hat mein Vertrauen"
+#: include/enotify.php:330
+#, php-format
+msgid "Please visit %s  if you wish to make any changes to this relationship."
+msgstr "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst."
 
-#: include/contact_selectors.php:56 mod/admin.php:901
-msgid "Frequently"
-msgstr "immer wieder"
+#: include/enotify.php:340
+msgid "[Friendica System:Notify] registration request"
+msgstr "[Friendica System:Benachrichtigung] Registrationsanfrage"
 
-#: include/contact_selectors.php:57 mod/admin.php:902
-msgid "Hourly"
-msgstr "Stündlich"
+#: include/enotify.php:342
+#, php-format
+msgid "You've received a registration request from '%1$s' at %2$s"
+msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten"
 
-#: include/contact_selectors.php:58 mod/admin.php:903
-msgid "Twice daily"
-msgstr "Zweimal täglich"
+#: include/enotify.php:343
+#, php-format
+msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
+msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten."
 
-#: include/contact_selectors.php:59 mod/admin.php:904
-msgid "Daily"
-msgstr "Täglich"
+#: include/enotify.php:347
+#, php-format
+msgid "Full Name:\t%1$s\\nSite Location:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
+msgstr "Kompletter Name:\t%1$s\\nURL der Seite:\t%2$s\\nLogin Name:\t%3$s (%4$s)"
 
-#: include/contact_selectors.php:60
-msgid "Weekly"
-msgstr "Wöchentlich"
+#: include/enotify.php:350
+#, php-format
+msgid "Please visit %s to approve or reject the request."
+msgstr "Bitte besuche %s um die Anfrage zu bearbeiten."
 
-#: include/contact_selectors.php:61
-msgid "Monthly"
-msgstr "Monatlich"
+#: include/event.php:474
+msgid "all-day"
+msgstr "ganztägig"
 
-#: include/contact_selectors.php:76 mod/dfrn_request.php:881
-msgid "Friendica"
-msgstr "Friendica"
+#: include/event.php:476
+msgid "Sun"
+msgstr "So"
 
-#: include/contact_selectors.php:77
-msgid "OStatus"
-msgstr "OStatus"
+#: include/event.php:477
+msgid "Mon"
+msgstr "Mo"
 
-#: include/contact_selectors.php:78
-msgid "RSS/Atom"
-msgstr "RSS/Atom"
+#: include/event.php:478
+msgid "Tue"
+msgstr "Di"
 
-#: include/contact_selectors.php:79 include/contact_selectors.php:86
-#: mod/admin.php:1417 mod/admin.php:1430 mod/admin.php:1443 mod/admin.php:1461
-msgid "Email"
-msgstr "E-Mail"
+#: include/event.php:479
+msgid "Wed"
+msgstr "Mi"
 
-#: include/contact_selectors.php:80 mod/settings.php:848
-#: mod/dfrn_request.php:883
-msgid "Diaspora"
-msgstr "Diaspora"
+#: include/event.php:480
+msgid "Thu"
+msgstr "Do"
 
-#: include/contact_selectors.php:81
-msgid "Facebook"
-msgstr "Facebook"
+#: include/event.php:481
+msgid "Fri"
+msgstr "Fr"
 
-#: include/contact_selectors.php:82
-msgid "Zot!"
-msgstr "Zott"
+#: include/event.php:482
+msgid "Sat"
+msgstr "Sa"
 
-#: include/contact_selectors.php:83
-msgid "LinkedIn"
-msgstr "LinkedIn"
+#: include/event.php:484 include/text.php:1198 mod/settings.php:981
+msgid "Sunday"
+msgstr "Sonntag"
 
-#: include/contact_selectors.php:84
-msgid "XMPP/IM"
-msgstr "XMPP/Chat"
+#: include/event.php:485 include/text.php:1198 mod/settings.php:981
+msgid "Monday"
+msgstr "Montag"
 
-#: include/contact_selectors.php:85
-msgid "MySpace"
-msgstr "MySpace"
+#: include/event.php:486 include/text.php:1198
+msgid "Tuesday"
+msgstr "Dienstag"
 
-#: include/contact_selectors.php:87
-msgid "Google+"
-msgstr "Google+"
+#: include/event.php:487 include/text.php:1198
+msgid "Wednesday"
+msgstr "Mittwoch"
 
-#: include/contact_selectors.php:88
-msgid "pump.io"
-msgstr "pump.io"
+#: include/event.php:488 include/text.php:1198
+msgid "Thursday"
+msgstr "Donnerstag"
 
-#: include/contact_selectors.php:89
-msgid "Twitter"
-msgstr "Twitter"
+#: include/event.php:489 include/text.php:1198
+msgid "Friday"
+msgstr "Freitag"
 
-#: include/contact_selectors.php:90
-msgid "Diaspora Connector"
-msgstr "Diaspora"
+#: include/event.php:490 include/text.php:1198
+msgid "Saturday"
+msgstr "Samstag"
 
-#: include/contact_selectors.php:91
-msgid "GNU Social"
-msgstr "GNU Social"
+#: include/event.php:492
+msgid "Jan"
+msgstr "Jan"
 
-#: include/contact_selectors.php:92
-msgid "pnut"
-msgstr "pnut"
+#: include/event.php:493
+msgid "Feb"
+msgstr "Feb"
 
-#: include/contact_selectors.php:93
-msgid "App.net"
-msgstr "App.net"
+#: include/event.php:494
+msgid "Mar"
+msgstr "März"
 
-#: include/contact_selectors.php:104
-msgid "Hubzilla/Redmatrix"
-msgstr "Hubzilla/Redmatrix"
+#: include/event.php:495
+msgid "Apr"
+msgstr "Apr"
 
-#: include/contact_widgets.php:6
-msgid "Add New Contact"
-msgstr "Neuen Kontakt hinzufügen"
+#: include/event.php:496 include/event.php:509 include/text.php:1202
+msgid "May"
+msgstr "Mai"
 
-#: include/contact_widgets.php:7
-msgid "Enter address or web location"
-msgstr "Adresse oder Web-Link eingeben"
+#: include/event.php:497
+msgid "Jun"
+msgstr "Jun"
 
-#: include/contact_widgets.php:8
-msgid "Example: bob@example.com, http://example.com/barbara"
-msgstr "Beispiel: bob@example.com, http://example.com/barbara"
+#: include/event.php:498
+msgid "Jul"
+msgstr "Juli"
 
-#: include/contact_widgets.php:10 include/identity.php:219
-#: mod/allfriends.php:85 mod/dirfind.php:207 mod/match.php:89
-#: mod/suggest.php:101
-msgid "Connect"
-msgstr "Verbinden"
+#: include/event.php:499
+msgid "Aug"
+msgstr "Aug"
 
-#: include/contact_widgets.php:24
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] "%d Einladung verfügbar"
-msgstr[1] "%d Einladungen verfügbar"
+#: include/event.php:500
+msgid "Sept"
+msgstr "Sep"
 
-#: include/contact_widgets.php:30
-msgid "Find People"
-msgstr "Leute finden"
+#: include/event.php:501
+msgid "Oct"
+msgstr "Okt"
 
-#: include/contact_widgets.php:31
-msgid "Enter name or interest"
-msgstr "Name oder Interessen eingeben"
+#: include/event.php:502
+msgid "Nov"
+msgstr "Nov"
 
-#: include/contact_widgets.php:33
-msgid "Examples: Robert Morgenstein, Fishing"
-msgstr "Beispiel: Robert Morgenstein, Angeln"
+#: include/event.php:503
+msgid "Dec"
+msgstr "Dez"
 
-#: include/contact_widgets.php:34 mod/directory.php:206 mod/contacts.php:806
-msgid "Find"
-msgstr "Finde"
+#: include/event.php:505 include/text.php:1202
+msgid "January"
+msgstr "Januar"
 
-#: include/contact_widgets.php:35 mod/suggest.php:114
-#: view/theme/vier/theme.php:198
-msgid "Friend Suggestions"
-msgstr "Kontaktvorschläge"
+#: include/event.php:506 include/text.php:1202
+msgid "February"
+msgstr "Februar"
 
-#: include/contact_widgets.php:36 view/theme/vier/theme.php:197
-msgid "Similar Interests"
-msgstr "Ähnliche Interessen"
+#: include/event.php:507 include/text.php:1202
+msgid "March"
+msgstr "März"
 
-#: include/contact_widgets.php:37
-msgid "Random Profile"
-msgstr "Zufälliges Profil"
+#: include/event.php:508 include/text.php:1202
+msgid "April"
+msgstr "April"
 
-#: include/contact_widgets.php:38 view/theme/vier/theme.php:199
-msgid "Invite Friends"
-msgstr "Freunde einladen"
+#: include/event.php:510 include/text.php:1202
+msgid "June"
+msgstr "Juni"
 
-#: include/contact_widgets.php:115
-msgid "Networks"
-msgstr "Netzwerke"
+#: include/event.php:511 include/text.php:1202
+msgid "July"
+msgstr "Juli"
 
-#: include/contact_widgets.php:118
-msgid "All Networks"
-msgstr "Alle Netzwerke"
+#: include/event.php:512 include/text.php:1202
+msgid "August"
+msgstr "August"
 
-#: include/contact_widgets.php:153 include/contact_widgets.php:187
-msgid "Everything"
-msgstr "Alles"
+#: include/event.php:513 include/text.php:1202
+msgid "September"
+msgstr "September"
 
-#: include/contact_widgets.php:184
-msgid "Categories"
-msgstr "Kategorien"
+#: include/event.php:514 include/text.php:1202
+msgid "October"
+msgstr "Oktober"
 
-#: include/contact_widgets.php:248
-#, php-format
-msgid "%d contact in common"
-msgid_plural "%d contacts in common"
-msgstr[0] "%d gemeinsamer Kontakt"
-msgstr[1] "%d gemeinsame Kontakte"
+#: include/event.php:515 include/text.php:1202
+msgid "November"
+msgstr "November"
 
-#: include/api.php:1021
-#, php-format
-msgid "Daily posting limit of %d posts reached. The post was rejected."
-msgstr "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
+#: include/event.php:516 include/text.php:1202
+msgid "December"
+msgstr "Dezember"
 
-#: include/api.php:1041
-#, php-format
-msgid "Weekly posting limit of %d posts reached. The post was rejected."
-msgstr "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
+#: include/event.php:518 mod/cal.php:278 mod/events.php:383
+msgid "today"
+msgstr "Heute"
 
-#: include/api.php:1062
-#, php-format
-msgid "Monthly posting limit of %d posts reached. The post was rejected."
-msgstr "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen."
+#: include/event.php:523
+msgid "No events to display"
+msgstr "Keine Veranstaltung zum Anzeigen"
 
-#: include/diaspora.php:2087
-msgid "Sharing notification from Diaspora network"
-msgstr "Freigabe-Benachrichtigung von Diaspora"
+#: include/event.php:636
+msgid "l, F j"
+msgstr "l, F j"
 
-#: include/diaspora.php:3096
-msgid "Attachments:"
-msgstr "Anhänge:"
+#: include/event.php:658
+msgid "Edit event"
+msgstr "Veranstaltung bearbeiten"
 
-#: include/identity.php:43
-msgid "Requested account is not available."
-msgstr "Das angefragte Profil ist nicht vorhanden."
+#: include/event.php:659
+msgid "Delete event"
+msgstr "Veranstaltung löschen"
 
-#: include/identity.php:52 mod/profile.php:21
-msgid "Requested profile is not available."
-msgstr "Das angefragte Profil ist nicht vorhanden."
+#: include/event.php:685 include/text.php:1600 include/text.php:1607
+msgid "link to source"
+msgstr "Link zum Originalbeitrag"
 
-#: include/identity.php:96 include/identity.php:314 include/identity.php:737
-msgid "Edit profile"
-msgstr "Profil bearbeiten"
+#: include/event.php:939
+msgid "Export"
+msgstr "Exportieren"
 
-#: include/identity.php:254
-msgid "Atom feed"
-msgstr "Atom-Feed"
+#: include/event.php:940
+msgid "Export calendar as ical"
+msgstr "Kalender als ical exportieren"
 
-#: include/identity.php:285
-msgid "Manage/edit profiles"
-msgstr "Profile verwalten/editieren"
+#: include/event.php:941
+msgid "Export calendar as csv"
+msgstr "Kalender als csv exportieren"
 
-#: include/identity.php:290 include/identity.php:316 mod/profiles.php:789
-msgid "Change profile photo"
-msgstr "Profilbild ändern"
+#: include/features.php:65
+msgid "General Features"
+msgstr "Allgemeine Features"
 
-#: include/identity.php:291 mod/profiles.php:790
-msgid "Create New Profile"
-msgstr "Neues Profil anlegen"
+#: include/features.php:67
+msgid "Multiple Profiles"
+msgstr "Mehrere Profile"
 
-#: include/identity.php:301 mod/profiles.php:779
-msgid "Profile Image"
-msgstr "Profilbild"
+#: include/features.php:67
+msgid "Ability to create multiple profiles"
+msgstr "Möglichkeit mehrere Profile zu erstellen"
 
-#: include/identity.php:304 mod/profiles.php:781
-msgid "visible to everybody"
-msgstr "sichtbar für jeden"
+#: include/features.php:68
+msgid "Photo Location"
+msgstr "Aufnahmeort"
 
-#: include/identity.php:305 mod/profiles.php:683 mod/profiles.php:782
-msgid "Edit visibility"
-msgstr "Sichtbarkeit bearbeiten"
+#: include/features.php:68
+msgid ""
+"Photo metadata is normally stripped. This extracts the location (if present)"
+" prior to stripping metadata and links it to a map."
+msgstr "Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden."
 
-#: include/identity.php:333 include/identity.php:628 mod/directory.php:141
-#: mod/notifications.php:244
-msgid "Gender:"
-msgstr "Geschlecht:"
+#: include/features.php:69
+msgid "Export Public Calendar"
+msgstr "Öffentlichen Kalender exportieren"
 
-#: include/identity.php:336 include/identity.php:648 mod/directory.php:143
-msgid "Status:"
-msgstr "Status:"
+#: include/features.php:69
+msgid "Ability for visitors to download the public calendar"
+msgstr "Möglichkeit für Besucher den öffentlichen Kalender herunter zu laden"
 
-#: include/identity.php:338 include/identity.php:664 mod/directory.php:145
-msgid "Homepage:"
-msgstr "Homepage:"
+#: include/features.php:74
+msgid "Post Composition Features"
+msgstr "Beitragserstellung Features"
 
-#: include/identity.php:340 include/identity.php:684 mod/directory.php:147
-#: mod/contacts.php:640 mod/notifications.php:240
-msgid "About:"
-msgstr "Über:"
+#: include/features.php:75
+msgid "Post Preview"
+msgstr "Beitragsvorschau"
 
-#: include/identity.php:342 mod/contacts.php:638
-msgid "XMPP:"
-msgstr "XMPP:"
+#: include/features.php:75
+msgid "Allow previewing posts and comments before publishing them"
+msgstr "Die Vorschau von Beiträgen und Kommentaren vor dem absenden erlauben."
 
-#: include/identity.php:428 mod/contacts.php:55 mod/notifications.php:252
-msgid "Network:"
-msgstr "Netzwerk:"
+#: include/features.php:76
+msgid "Auto-mention Forums"
+msgstr "Foren automatisch erwähnen"
 
-#: include/identity.php:457 include/identity.php:547
-msgid "g A l F d"
-msgstr "l, d. F G \\U\\h\\r"
+#: include/features.php:76
+msgid ""
+"Add/remove mention when a forum page is selected/deselected in ACL window."
+msgstr "Automatisch eine @-Erwähnung eines Forums einfügen/entfehrnen, wenn dieses im ACL Fenster de-/markiert  wurde."
 
-#: include/identity.php:458 include/identity.php:548
-msgid "F d"
-msgstr "d. F"
+#: include/features.php:81
+msgid "Network Sidebar Widgets"
+msgstr "Widgets für Netzwerk und Seitenleiste"
 
-#: include/identity.php:509 include/identity.php:594
-msgid "[today]"
-msgstr "[heute]"
+#: include/features.php:82
+msgid "Search by Date"
+msgstr "Archiv"
 
-#: include/identity.php:521
-msgid "Birthday Reminders"
-msgstr "Geburtstagserinnerungen"
+#: include/features.php:82
+msgid "Ability to select posts by date ranges"
+msgstr "Möglichkeit die Beiträge nach Datumsbereichen zu sortieren"
 
-#: include/identity.php:522
-msgid "Birthdays this week:"
-msgstr "Geburtstage diese Woche:"
+#: include/features.php:83 include/features.php:113
+msgid "List Forums"
+msgstr "Zeige Foren"
 
-#: include/identity.php:581
-msgid "[No description]"
-msgstr "[keine Beschreibung]"
+#: include/features.php:83
+msgid "Enable widget to display the forums your are connected with"
+msgstr "Aktiviere Widget, um die Foren mit denen du verbunden bist anzuzeigen"
 
-#: include/identity.php:605
-msgid "Event Reminders"
-msgstr "Veranstaltungserinnerungen"
+#: include/features.php:84
+msgid "Group Filter"
+msgstr "Gruppen Filter"
 
-#: include/identity.php:606
-msgid "Events this week:"
-msgstr "Veranstaltungen diese Woche"
+#: include/features.php:84
+msgid "Enable widget to display Network posts only from selected group"
+msgstr "Widget zur Darstellung der Beiträge nach Kontaktgruppen sortiert aktivieren."
 
-#: include/identity.php:626 mod/settings.php:1286
-msgid "Full Name:"
-msgstr "Kompletter Name:"
+#: include/features.php:85
+msgid "Network Filter"
+msgstr "Netzwerk Filter"
 
-#: include/identity.php:633
-msgid "j F, Y"
-msgstr "j F, Y"
+#: include/features.php:85
+msgid "Enable widget to display Network posts only from selected network"
+msgstr "Widget zum filtern der Beiträge in Abhängigkeit des Netzwerks aus dem der Ersteller sendet aktivieren."
 
-#: include/identity.php:634
-msgid "j F"
-msgstr "j F"
+#: include/features.php:86 mod/network.php:206 mod/search.php:34
+msgid "Saved Searches"
+msgstr "Gespeicherte Suchen"
 
-#: include/identity.php:645
-msgid "Age:"
-msgstr "Alter:"
+#: include/features.php:86
+msgid "Save search terms for re-use"
+msgstr "Speichere Suchanfragen für spätere Wiederholung."
 
-#: include/identity.php:656
-#, php-format
-msgid "for %1$d %2$s"
-msgstr "für %1$d %2$s"
+#: include/features.php:91
+msgid "Network Tabs"
+msgstr "Netzwerk Reiter"
 
-#: include/identity.php:660 mod/profiles.php:702
-msgid "Sexual Preference:"
-msgstr "Sexuelle Vorlieben:"
+#: include/features.php:92
+msgid "Network Personal Tab"
+msgstr "Netzwerk-Reiter: Persönlich"
 
-#: include/identity.php:668 mod/profiles.php:729
-msgid "Hometown:"
-msgstr "Heimatort:"
+#: include/features.php:92
+msgid "Enable tab to display only Network posts that you've interacted on"
+msgstr "Aktiviert einen Netzwerk-Reiter in dem Nachrichten angezeigt werden mit denen Du interagiert hast"
 
-#: include/identity.php:672 mod/follow.php:137 mod/contacts.php:642
-#: mod/notifications.php:242
-msgid "Tags:"
-msgstr "Tags:"
+#: include/features.php:93
+msgid "Network New Tab"
+msgstr "Netzwerk-Reiter: Neue"
 
-#: include/identity.php:676 mod/profiles.php:730
-msgid "Political Views:"
-msgstr "Politische Ansichten:"
+#: include/features.php:93
+msgid "Enable tab to display only new Network posts (from the last 12 hours)"
+msgstr "Aktiviert einen Netzwerk-Reiter in dem ausschließlich neue Beiträge (der letzten 12 Stunden) angezeigt werden"
 
-#: include/identity.php:680
-msgid "Religion:"
-msgstr "Religion:"
+#: include/features.php:94
+msgid "Network Shared Links Tab"
+msgstr "Netzwerk-Reiter: Geteilte Links"
 
-#: include/identity.php:688
-msgid "Hobbies/Interests:"
-msgstr "Hobbies/Interessen:"
+#: include/features.php:94
+msgid "Enable tab to display only Network posts with links in them"
+msgstr "Aktiviert einen Netzwerk-Reiter der ausschließlich Nachrichten mit Links enthält"
 
-#: include/identity.php:692 mod/profiles.php:734
-msgid "Likes:"
-msgstr "Likes:"
+#: include/features.php:99
+msgid "Post/Comment Tools"
+msgstr "Werkzeuge für Beiträge und Kommentare"
 
-#: include/identity.php:696 mod/profiles.php:735
-msgid "Dislikes:"
-msgstr "Dislikes:"
+#: include/features.php:100
+msgid "Multiple Deletion"
+msgstr "Mehrere Beiträge löschen"
 
-#: include/identity.php:700
-msgid "Contact information and Social Networks:"
-msgstr "Kontaktinformationen und Soziale Netzwerke:"
+#: include/features.php:100
+msgid "Select and delete multiple posts/comments at once"
+msgstr "Mehrere Beiträge/Kommentare markieren und gleichzeitig löschen"
 
-#: include/identity.php:704
-msgid "Musical interests:"
-msgstr "Musikalische Interessen:"
+#: include/features.php:101
+msgid "Edit Sent Posts"
+msgstr "Gesendete Beiträge editieren"
 
-#: include/identity.php:708
-msgid "Books, literature:"
-msgstr "Literatur/Bücher:"
+#: include/features.php:101
+msgid "Edit and correct posts and comments after sending"
+msgstr "Erlaubt es Beiträge und Kommentare nach dem Senden zu editieren bzw.zu  korrigieren."
 
-#: include/identity.php:712
-msgid "Television:"
-msgstr "Fernsehen:"
+#: include/features.php:102
+msgid "Tagging"
+msgstr "Tagging"
 
-#: include/identity.php:716
-msgid "Film/dance/culture/entertainment:"
-msgstr "Filme/Tänze/Kultur/Unterhaltung:"
+#: include/features.php:102
+msgid "Ability to tag existing posts"
+msgstr "Möglichkeit bereits existierende Beiträge nachträglich mit Tags zu versehen."
 
-#: include/identity.php:720
-msgid "Love/Romance:"
-msgstr "Liebesleben:"
+#: include/features.php:103
+msgid "Post Categories"
+msgstr "Beitragskategorien"
 
-#: include/identity.php:724
-msgid "Work/employment:"
-msgstr "Arbeit/Beschäftigung:"
+#: include/features.php:103
+msgid "Add categories to your posts"
+msgstr "Eigene Beiträge mit Kategorien versehen"
 
-#: include/identity.php:728
-msgid "School/education:"
-msgstr "Schule/Ausbildung:"
+#: include/features.php:104
+msgid "Ability to file posts under folders"
+msgstr "Beiträge in Ordnern speichern aktivieren"
 
-#: include/identity.php:733
-msgid "Forums:"
-msgstr "Foren:"
+#: include/features.php:105
+msgid "Dislike Posts"
+msgstr "Beiträge 'nicht mögen'"
 
-#: include/identity.php:742 mod/events.php:514
-msgid "Basic"
-msgstr "Allgemein"
+#: include/features.php:105
+msgid "Ability to dislike posts/comments"
+msgstr "Ermöglicht es Beiträge mit einem Klick 'nicht zu mögen'"
 
-#: include/identity.php:743 mod/contacts.php:878 mod/events.php:515
-#: mod/admin.php:980
-msgid "Advanced"
-msgstr "Erweitert"
+#: include/features.php:106
+msgid "Star Posts"
+msgstr "Beiträge Markieren"
 
-#: include/identity.php:769 mod/follow.php:145 mod/contacts.php:844
-msgid "Status Messages and Posts"
-msgstr "Statusnachrichten und Beiträge"
+#: include/features.php:106
+msgid "Ability to mark special posts with a star indicator"
+msgstr "Erlaubt es Beiträge mit einem Stern-Indikator zu  markieren"
 
-#: include/identity.php:777 mod/contacts.php:852
-msgid "Profile Details"
-msgstr "Profildetails"
+#: include/features.php:107
+msgid "Mute Post Notifications"
+msgstr "Benachrichtigungen für Beiträge Stumm schalten"
 
-#: include/identity.php:785 mod/photos.php:89
-msgid "Photo Albums"
-msgstr "Fotoalben"
+#: include/features.php:107
+msgid "Ability to mute notifications for a thread"
+msgstr "Möglichkeit Benachrichtigungen für einen Thread abbestellen zu können"
 
-#: include/identity.php:824 mod/notes.php:47
-msgid "Personal Notes"
-msgstr "Persönliche Notizen"
+#: include/features.php:112
+msgid "Advanced Profile Settings"
+msgstr "Erweiterte Profil-Einstellungen"
 
-#: include/identity.php:827
-msgid "Only You Can See This"
-msgstr "Nur Du kannst das sehen"
+#: include/features.php:113
+msgid "Show visitors public community forums at the Advanced Profile Page"
+msgstr "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite"
 
-#: include/text.php:304
-msgid "newer"
-msgstr "neuer"
+#: include/follow.php:81 mod/dfrn_request.php:512
+msgid "Disallowed profile URL."
+msgstr "Nicht erlaubte Profil-URL."
 
-#: include/text.php:306
-msgid "older"
-msgstr "älter"
+#: include/follow.php:86 mod/dfrn_request.php:518 mod/friendica.php:114
+#: mod/admin.php:279 mod/admin.php:297
+msgid "Blocked domain"
+msgstr "Blockierte Daimain"
 
-#: include/text.php:311
-msgid "prev"
-msgstr "vorige"
+#: include/follow.php:91
+msgid "Connect URL missing."
+msgstr "Connect-URL fehlt"
 
-#: include/text.php:313
-msgid "first"
-msgstr "erste"
+#: include/follow.php:119
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann."
 
-#: include/text.php:345
-msgid "last"
-msgstr "letzte"
+#: include/follow.php:120 include/follow.php:134
+msgid "No compatible communication protocols or feeds were discovered."
+msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."
 
-#: include/text.php:348
-msgid "next"
-msgstr "nächste"
+#: include/follow.php:132
+msgid "The profile address specified does not provide adequate information."
+msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
 
-#: include/text.php:403
-msgid "Loading more entries..."
-msgstr "lade weitere Einträge..."
+#: include/follow.php:137
+msgid "An author or name was not found."
+msgstr "Es wurde kein Autor oder Name gefunden."
 
-#: include/text.php:404
-msgid "The end"
-msgstr "Das Ende"
+#: include/follow.php:140
+msgid "No browser URL could be matched to this address."
+msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden."
 
-#: include/text.php:889
-msgid "No contacts"
-msgstr "Keine Kontakte"
+#: include/follow.php:143
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
+msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."
 
-#: include/text.php:914
-#, php-format
-msgid "%d Contact"
-msgid_plural "%d Contacts"
-msgstr[0] "%d Kontakt"
-msgstr[1] "%d Kontakte"
+#: include/follow.php:144
+msgid "Use mailto: in front of address to force email check."
+msgstr "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."
 
-#: include/text.php:927
-msgid "View Contacts"
-msgstr "Kontakte anzeigen"
+#: include/follow.php:150
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."
 
-#: include/text.php:1015 mod/filer.php:31 mod/notes.php:62 mod/editpost.php:99
-msgid "Save"
-msgstr "Speichern"
+#: include/follow.php:155
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
+msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können."
 
-#: include/text.php:1078
-msgid "poke"
-msgstr "anstupsen"
+#: include/follow.php:256
+msgid "Unable to retrieve contact information."
+msgstr "Konnte die Kontaktinformationen nicht empfangen."
 
-#: include/text.php:1078
-msgid "poked"
-msgstr "stupste"
+#: 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 "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen."
 
-#: include/text.php:1079
-msgid "ping"
-msgstr "anpingen"
+#: include/group.php:210
+msgid "Default privacy group for new contacts"
+msgstr "Voreingestellte Gruppe für neue Kontakte"
 
-#: include/text.php:1079
-msgid "pinged"
-msgstr "pingte"
+#: include/group.php:243
+msgid "Everybody"
+msgstr "Alle Kontakte"
 
-#: include/text.php:1080
-msgid "prod"
-msgstr "knuffen"
+#: include/group.php:266
+msgid "edit"
+msgstr "bearbeiten"
 
-#: include/text.php:1080
-msgid "prodded"
-msgstr "knuffte"
+#: include/group.php:287 mod/newmember.php:61
+msgid "Groups"
+msgstr "Gruppen"
 
-#: include/text.php:1081
-msgid "slap"
-msgstr "ohrfeigen"
+#: include/group.php:289
+msgid "Edit groups"
+msgstr "Gruppen bearbeiten"
 
-#: include/text.php:1081
-msgid "slapped"
-msgstr "ohrfeigte"
+#: include/group.php:291
+msgid "Edit group"
+msgstr "Gruppe bearbeiten"
 
-#: include/text.php:1082
-msgid "finger"
-msgstr "befummeln"
+#: include/group.php:292
+msgid "Create a new group"
+msgstr "Neue Gruppe erstellen"
 
-#: include/text.php:1082
-msgid "fingered"
-msgstr "befummelte"
+#: include/group.php:293 mod/group.php:99 mod/group.php:196
+msgid "Group Name: "
+msgstr "Gruppenname:"
 
-#: include/text.php:1083
-msgid "rebuff"
-msgstr "eine Abfuhr erteilen"
+#: include/group.php:295
+msgid "Contacts not in any group"
+msgstr "Kontakte in keiner Gruppe"
 
-#: include/text.php:1083
-msgid "rebuffed"
-msgstr "abfuhrerteilte"
+#: include/group.php:297 mod/network.php:207
+msgid "add"
+msgstr "hinzufügen"
 
-#: include/text.php:1097
-msgid "happy"
-msgstr "glücklich"
+#: include/identity.php:43
+msgid "Requested account is not available."
+msgstr "Das angefragte Profil ist nicht vorhanden."
 
-#: include/text.php:1098
-msgid "sad"
-msgstr "traurig"
+#: include/identity.php:52 mod/profile.php:21
+msgid "Requested profile is not available."
+msgstr "Das angefragte Profil ist nicht vorhanden."
 
-#: include/text.php:1099
-msgid "mellow"
-msgstr "sanft"
+#: include/identity.php:96 include/identity.php:319 include/identity.php:740
+msgid "Edit profile"
+msgstr "Profil bearbeiten"
 
-#: include/text.php:1100
-msgid "tired"
-msgstr "müde"
+#: include/identity.php:259
+msgid "Atom feed"
+msgstr "Atom-Feed"
 
-#: include/text.php:1101
-msgid "perky"
-msgstr "frech"
+#: include/identity.php:290
+msgid "Manage/edit profiles"
+msgstr "Profile verwalten/editieren"
 
-#: include/text.php:1102
-msgid "angry"
-msgstr "sauer"
+#: include/identity.php:295 include/identity.php:321 mod/profiles.php:787
+msgid "Change profile photo"
+msgstr "Profilbild ändern"
 
-#: include/text.php:1103
-msgid "stupified"
-msgstr "verblüfft"
+#: include/identity.php:296 mod/profiles.php:788
+msgid "Create New Profile"
+msgstr "Neues Profil anlegen"
 
-#: include/text.php:1104
-msgid "puzzled"
-msgstr "verwirrt"
+#: include/identity.php:306 mod/profiles.php:777
+msgid "Profile Image"
+msgstr "Profilbild"
 
-#: include/text.php:1105
-msgid "interested"
-msgstr "interessiert"
+#: include/identity.php:309 mod/profiles.php:779
+msgid "visible to everybody"
+msgstr "sichtbar für jeden"
 
-#: include/text.php:1106
-msgid "bitter"
-msgstr "verbittert"
+#: include/identity.php:310 mod/profiles.php:684 mod/profiles.php:780
+msgid "Edit visibility"
+msgstr "Sichtbarkeit bearbeiten"
 
-#: include/text.php:1107
-msgid "cheerful"
-msgstr "fröhlich"
+#: include/identity.php:338 include/identity.php:633 mod/directory.php:141
+#: mod/notifications.php:250
+msgid "Gender:"
+msgstr "Geschlecht:"
 
-#: include/text.php:1108
-msgid "alive"
-msgstr "lebendig"
+#: include/identity.php:341 include/identity.php:651 mod/directory.php:143
+msgid "Status:"
+msgstr "Status:"
 
-#: include/text.php:1109
-msgid "annoyed"
-msgstr "verärgert"
+#: include/identity.php:343 include/identity.php:667 mod/directory.php:145
+msgid "Homepage:"
+msgstr "Homepage:"
 
-#: include/text.php:1110
-msgid "anxious"
-msgstr "unruhig"
+#: include/identity.php:345 include/identity.php:687 mod/contacts.php:640
+#: mod/directory.php:147 mod/notifications.php:246
+msgid "About:"
+msgstr "Über:"
 
-#: include/text.php:1111
-msgid "cranky"
-msgstr "schrullig"
+#: include/identity.php:347 mod/contacts.php:638
+msgid "XMPP:"
+msgstr "XMPP:"
 
-#: include/text.php:1112
-msgid "disturbed"
-msgstr "verstört"
+#: include/identity.php:433 mod/contacts.php:55 mod/notifications.php:258
+msgid "Network:"
+msgstr "Netzwerk:"
 
-#: include/text.php:1113
-msgid "frustrated"
-msgstr "frustriert"
+#: include/identity.php:462 include/identity.php:552
+msgid "g A l F d"
+msgstr "l, d. F G \\U\\h\\r"
 
-#: include/text.php:1114
-msgid "motivated"
-msgstr "motiviert"
+#: include/identity.php:463 include/identity.php:553
+msgid "d"
+msgstr "d. F"
 
-#: include/text.php:1115
-msgid "relaxed"
-msgstr "entspannt"
+#: include/identity.php:514 include/identity.php:599
+msgid "[today]"
+msgstr "[heute]"
 
-#: include/text.php:1116
-msgid "surprised"
-msgstr "überrascht"
+#: include/identity.php:526
+msgid "Birthday Reminders"
+msgstr "Geburtstagserinnerungen"
 
-#: include/text.php:1326 mod/videos.php:384
-msgid "View Video"
-msgstr "Video ansehen"
+#: include/identity.php:527
+msgid "Birthdays this week:"
+msgstr "Geburtstage diese Woche:"
 
-#: include/text.php:1358
-msgid "bytes"
-msgstr "Byte"
+#: include/identity.php:586
+msgid "[No description]"
+msgstr "[keine Beschreibung]"
 
-#: include/text.php:1390 include/text.php:1402
-msgid "Click to open/close"
-msgstr "Zum öffnen/schließen klicken"
+#: include/identity.php:610
+msgid "Event Reminders"
+msgstr "Veranstaltungserinnerungen"
 
-#: include/text.php:1528
-msgid "View on separate page"
-msgstr "Auf separater Seite ansehen"
+#: include/identity.php:611
+msgid "Events this week:"
+msgstr "Veranstaltungen diese Woche"
 
-#: include/text.php:1529
-msgid "view on separate page"
-msgstr "auf separater Seite ansehen"
+#: include/identity.php:631 mod/settings.php:1286
+msgid "Full Name:"
+msgstr "Kompletter Name:"
 
-#: include/text.php:1808
-msgid "activity"
-msgstr "Aktivität"
+#: include/identity.php:636
+msgid "j F, Y"
+msgstr "j F, Y"
 
-#: include/text.php:1810 mod/content.php:623 object/Item.php:446
-#: object/Item.php:458
-msgid "comment"
-msgid_plural "comments"
-msgstr[0] "Kommentar"
-msgstr[1] "Kommentare"
+#: include/identity.php:637
+msgid "j F"
+msgstr "j F"
 
-#: include/text.php:1811
-msgid "post"
-msgstr "Beitrag"
+#: include/identity.php:648
+msgid "Age:"
+msgstr "Alter:"
 
-#: include/text.php:1979
-msgid "Item filed"
-msgstr "Beitrag abgelegt"
+#: include/identity.php:659
+#, php-format
+msgid "for %1$d %2$s"
+msgstr "für %1$d %2$s"
 
-#: include/Contact.php:450
-msgid "Drop Contact"
-msgstr "Kontakt löschen"
+#: include/identity.php:663 mod/profiles.php:703
+msgid "Sexual Preference:"
+msgstr "Sexuelle Vorlieben:"
 
-#: include/Contact.php:827
-msgid "Organisation"
-msgstr "Organisation"
+#: include/identity.php:671 mod/profiles.php:730
+msgid "Hometown:"
+msgstr "Heimatort:"
 
-#: include/Contact.php:830
-msgid "News"
-msgstr "Nachrichten"
+#: include/identity.php:675 mod/contacts.php:642 mod/follow.php:137
+#: mod/notifications.php:248
+msgid "Tags:"
+msgstr "Tags:"
 
-#: include/Contact.php:833
-msgid "Forum"
-msgstr "Forum"
-
-#: include/items.php:1584 mod/dfrn_confirm.php:735 mod/dfrn_request.php:754
-msgid "[Name Withheld]"
-msgstr "[Name unterdrückt]"
+#: include/identity.php:679 mod/profiles.php:731
+msgid "Political Views:"
+msgstr "Politische Ansichten:"
 
-#: include/items.php:1939 mod/notice.php:15 mod/viewsrc.php:15
-#: mod/display.php:103 mod/display.php:279 mod/display.php:484
-#: mod/admin.php:235 mod/admin.php:1492 mod/admin.php:1738
-msgid "Item not found."
-msgstr "Beitrag nicht gefunden."
+#: include/identity.php:683
+msgid "Religion:"
+msgstr "Religion:"
 
-#: include/items.php:1978
-msgid "Do you really want to delete this item?"
-msgstr "Möchtest Du wirklich dieses Item löschen?"
+#: include/identity.php:691
+msgid "Hobbies/Interests:"
+msgstr "Hobbies/Interessen:"
 
-#: include/items.php:1980 mod/api.php:105 mod/follow.php:113
-#: mod/register.php:245 mod/settings.php:1171 mod/settings.php:1177
-#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193
-#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208
-#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236
-#: mod/settings.php:1237 mod/settings.php:1238 mod/suggest.php:29
-#: mod/contacts.php:452 mod/message.php:206 mod/dfrn_request.php:875
-#: mod/profiles.php:640 mod/profiles.php:643 mod/profiles.php:669
-msgid "Yes"
-msgstr "Ja"
+#: include/identity.php:695 mod/profiles.php:735
+msgid "Likes:"
+msgstr "Likes:"
 
-#: include/items.php:2143 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31
-#: mod/attach.php:33 mod/common.php:18 mod/crepair.php:102 mod/delegate.php:12
-#: mod/dirfind.php:11 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158
-#: mod/fsuggest.php:79 mod/group.php:19 mod/invite.php:15 mod/invite.php:103
-#: mod/manage.php:98 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23
-#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19
-#: mod/profile_photo.php:180 mod/profile_photo.php:191
-#: mod/profile_photo.php:204 mod/register.php:42 mod/regmod.php:113
-#: mod/repair_ostatus.php:9 mod/settings.php:22 mod/settings.php:130
-#: mod/settings.php:668 mod/suggest.php:58 mod/uimport.php:24
-#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/cal.php:299
-#: mod/contacts.php:360 mod/dfrn_confirm.php:61 mod/editpost.php:10
-#: mod/events.php:195 mod/item.php:193 mod/item.php:205 mod/message.php:46
-#: mod/message.php:171 mod/wall_upload.php:77 mod/wall_upload.php:80
-#: mod/wallmessage.php:9 mod/wallmessage.php:33 mod/wallmessage.php:73
-#: mod/wallmessage.php:97 mod/photos.php:161 mod/photos.php:1092
-#: mod/profiles.php:166 mod/profiles.php:607 mod/display.php:481
-#: mod/viewcontacts.php:46 mod/network.php:4 mod/notifications.php:71
-#: index.php:407
-msgid "Permission denied."
-msgstr "Zugriff verweigert."
+#: include/identity.php:699 mod/profiles.php:736
+msgid "Dislikes:"
+msgstr "Dislikes:"
 
-#: include/items.php:2248
-msgid "Archives"
-msgstr "Archiv"
+#: include/identity.php:703
+msgid "Contact information and Social Networks:"
+msgstr "Kontaktinformationen und Soziale Netzwerke:"
 
-#: include/dbstructure.php:33
-#, 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 "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein."
+#: include/identity.php:707
+msgid "Musical interests:"
+msgstr "Musikalische Interessen:"
 
-#: include/dbstructure.php:38
-#, php-format
-msgid ""
-"The error message is\n"
-"[pre]%s[/pre]"
-msgstr "Die Fehlermeldung lautet\n[pre]%s[/pre]"
+#: include/identity.php:711
+msgid "Books, literature:"
+msgstr "Literatur/Bücher:"
 
-#: include/dbstructure.php:195
-msgid "Errors encountered creating database tables."
-msgstr "Fehler aufgetreten während der Erzeugung der Datenbanktabellen."
+#: include/identity.php:715
+msgid "Television:"
+msgstr "Fernsehen:"
 
-#: include/dbstructure.php:329 include/dbstructure.php:337
-#: include/dbstructure.php:345 include/dbstructure.php:350
-#: include/dbstructure.php:355
-msgid "Errors encountered performing database changes."
-msgstr "Es sind Fehler beim Bearbeiten der Datenbank aufgetreten."
+#: include/identity.php:719
+msgid "Film/dance/culture/entertainment:"
+msgstr "Filme/Tänze/Kultur/Unterhaltung:"
 
-#: include/network.php:619
-msgid "view full size"
-msgstr "Volle Größe anzeigen"
+#: include/identity.php:723
+msgid "Love/Romance:"
+msgstr "Liebesleben:"
 
-#: mod/allfriends.php:46
-msgid "No friends to display."
-msgstr "Keine Kontakte zum Anzeigen."
+#: include/identity.php:727
+msgid "Work/employment:"
+msgstr "Arbeit/Beschäftigung:"
 
-#: mod/api.php:76 mod/api.php:102
-msgid "Authorize application connection"
-msgstr "Verbindung der Applikation autorisieren"
+#: include/identity.php:731
+msgid "School/education:"
+msgstr "Schule/Ausbildung:"
 
-#: mod/api.php:77
-msgid "Return to your app and insert this Securty Code:"
-msgstr "Gehe zu Deiner Anwendung zurück und trage dort folgenden Sicherheitscode ein:"
+#: include/identity.php:736
+msgid "Forums:"
+msgstr "Foren:"
 
-#: mod/api.php:89
-msgid "Please login to continue."
-msgstr "Bitte melde Dich an um fortzufahren."
+#: include/identity.php:745 mod/events.php:506
+msgid "Basic"
+msgstr "Allgemein"
 
-#: mod/api.php:104
-msgid ""
-"Do you want to authorize this application to access your posts and contacts,"
-" and/or create new posts for you?"
-msgstr "Möchtest Du dieser Anwendung den Zugriff auf Deine Beiträge und Kontakte, sowie das Erstellen neuer Beiträge in Deinem Namen gestatten?"
+#: include/identity.php:746 mod/contacts.php:878 mod/events.php:507
+#: mod/admin.php:1059
+msgid "Advanced"
+msgstr "Erweitert"
 
-#: mod/api.php:106 mod/follow.php:113 mod/register.php:246
-#: mod/settings.php:1171 mod/settings.php:1177 mod/settings.php:1184
-#: mod/settings.php:1188 mod/settings.php:1193 mod/settings.php:1198
-#: mod/settings.php:1203 mod/settings.php:1208 mod/settings.php:1234
-#: mod/settings.php:1235 mod/settings.php:1236 mod/settings.php:1237
-#: mod/settings.php:1238 mod/dfrn_request.php:875 mod/profiles.php:640
-#: mod/profiles.php:644 mod/profiles.php:669
-msgid "No"
-msgstr "Nein"
+#: include/identity.php:772 mod/contacts.php:844 mod/follow.php:145
+msgid "Status Messages and Posts"
+msgstr "Statusnachrichten und Beiträge"
 
-#: mod/apps.php:7 index.php:248
-msgid "You must be logged in to use addons. "
-msgstr "Sie müssen angemeldet sein um Addons benutzen zu können."
+#: include/identity.php:780 mod/contacts.php:852
+msgid "Profile Details"
+msgstr "Profildetails"
 
-#: mod/apps.php:11
-msgid "Applications"
-msgstr "Anwendungen"
+#: include/identity.php:788 mod/photos.php:93
+msgid "Photo Albums"
+msgstr "Fotoalben"
 
-#: mod/apps.php:14
-msgid "No installed applications."
-msgstr "Keine Applikationen installiert."
+#: include/identity.php:827 mod/notes.php:47
+msgid "Personal Notes"
+msgstr "Persönliche Notizen"
 
-#: mod/attach.php:8
-msgid "Item not available."
-msgstr "Beitrag nicht verfügbar."
+#: include/identity.php:830
+msgid "Only You Can See This"
+msgstr "Nur Du kannst das sehen"
 
-#: mod/attach.php:20
-msgid "Item was not found."
-msgstr "Beitrag konnte nicht gefunden werden."
+#: include/network.php:687
+msgid "view full size"
+msgstr "Volle Größe anzeigen"
 
-#: mod/babel.php:17
-msgid "Source (bbcode) text:"
-msgstr "Quelle (bbcode) Text:"
+#: include/oembed.php:255
+msgid "Embedded content"
+msgstr "Eingebetteter Inhalt"
 
-#: mod/babel.php:23
-msgid "Source (Diaspora) text to convert to BBcode:"
-msgstr "Eingabe (Diaspora) nach BBCode zu konvertierender Text:"
+#: include/oembed.php:263
+msgid "Embedding disabled"
+msgstr "Einbettungen deaktiviert"
 
-#: mod/babel.php:31
-msgid "Source input: "
-msgstr "Originaltext:"
+#: include/photos.php:57 include/photos.php:66 mod/fbrowser.php:40
+#: mod/fbrowser.php:61 mod/photos.php:187 mod/photos.php:1123
+#: mod/photos.php:1256 mod/photos.php:1277 mod/photos.php:1839
+#: mod/photos.php:1853
+msgid "Contact Photos"
+msgstr "Kontaktbilder"
 
-#: mod/babel.php:35
-msgid "bb2html (raw HTML): "
-msgstr "bb2html (reines HTML): "
+#: include/user.php:39 mod/settings.php:375
+msgid "Passwords do not match. Password unchanged."
+msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."
 
-#: mod/babel.php:39
-msgid "bb2html: "
-msgstr "bb2html: "
+#: include/user.php:48
+msgid "An invitation is required."
+msgstr "Du benötigst eine Einladung."
 
-#: mod/babel.php:43
-msgid "bb2html2bb: "
-msgstr "bb2html2bb: "
+#: include/user.php:53
+msgid "Invitation could not be verified."
+msgstr "Die Einladung konnte nicht überprüft werden."
 
-#: mod/babel.php:47
-msgid "bb2md: "
-msgstr "bb2md: "
+#: include/user.php:61
+msgid "Invalid OpenID url"
+msgstr "Ungültige OpenID URL"
 
-#: mod/babel.php:51
-msgid "bb2md2html: "
-msgstr "bb2md2html: "
+#: include/user.php:82
+msgid "Please enter the required information."
+msgstr "Bitte trage die erforderlichen Informationen ein."
 
-#: mod/babel.php:55
-msgid "bb2dia2bb: "
-msgstr "bb2dia2bb: "
+#: include/user.php:96
+msgid "Please use a shorter name."
+msgstr "Bitte verwende einen kürzeren Namen."
 
-#: mod/babel.php:59
-msgid "bb2md2html2bb: "
-msgstr "bb2md2html2bb: "
+#: include/user.php:98
+msgid "Name too short."
+msgstr "Der Name ist zu kurz."
 
-#: mod/babel.php:69
-msgid "Source input (Diaspora format): "
-msgstr "Originaltext (Diaspora Format): "
+#: include/user.php:106
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein."
 
-#: mod/babel.php:74
-msgid "diaspora2bb: "
-msgstr "diaspora2bb: "
+#: include/user.php:111
+msgid "Your email domain is not among those allowed on this site."
+msgstr "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."
 
-#: mod/bookmarklet.php:41
-msgid "The post was created"
-msgstr "Der Beitrag wurde angelegt"
+#: include/user.php:114
+msgid "Not a valid email address."
+msgstr "Keine gültige E-Mail-Adresse."
 
-#: mod/common.php:91
-msgid "No contacts in common."
-msgstr "Keine gemeinsamen Kontakte."
+#: include/user.php:127
+msgid "Cannot use that email."
+msgstr "Konnte diese E-Mail-Adresse nicht verwenden."
 
-#: mod/common.php:141 mod/contacts.php:871
-msgid "Common Friends"
-msgstr "Gemeinsame Kontakte"
+#: include/user.php:133
+msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
+msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen."
 
-#: mod/community.php:22 mod/directory.php:37 mod/videos.php:198
-#: mod/photos.php:964 mod/dfrn_request.php:799 mod/display.php:200
-#: mod/viewcontacts.php:36 mod/search.php:93 mod/search.php:99
-msgid "Public access denied."
-msgstr "Öffentlicher Zugriff verweigert."
+#: include/user.php:140 include/user.php:228
+msgid "Nickname is already registered. Please choose another."
+msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
 
-#: mod/community.php:27
-msgid "Not available."
-msgstr "Nicht verfügbar."
+#: include/user.php:150
+msgid ""
+"Nickname was once registered here and may not be re-used. Please choose "
+"another."
+msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
 
-#: mod/community.php:66 mod/community.php:75 mod/search.php:224
-msgid "No results."
-msgstr "Keine Ergebnisse."
+#: include/user.php:166
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
 
-#: mod/content.php:119 mod/network.php:468
-msgid "No such group"
-msgstr "Es gibt keine solche Gruppe"
+#: include/user.php:214
+msgid "An error occurred during registration. Please try again."
+msgstr "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
 
-#: mod/content.php:130 mod/group.php:203 mod/network.php:495
-msgid "Group is empty"
-msgstr "Gruppe ist leer"
+#: include/user.php:239 view/theme/duepuntozero/config.php:43
+msgid "default"
+msgstr "Standard"
 
-#: mod/content.php:135 mod/network.php:499
-#, php-format
-msgid "Group: %s"
-msgstr "Gruppe: %s"
+#: include/user.php:249
+msgid "An error occurred creating your default profile. Please try again."
+msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
 
-#: mod/content.php:325 object/Item.php:96
-msgid "This entry was edited"
-msgstr "Dieser Beitrag wurde bearbeitet."
+#: include/user.php:309 include/user.php:317 include/user.php:325
+#: mod/profile_photo.php:74 mod/profile_photo.php:82 mod/profile_photo.php:90
+#: mod/profile_photo.php:215 mod/profile_photo.php:310
+#: mod/profile_photo.php:320 mod/photos.php:71 mod/photos.php:187
+#: mod/photos.php:774 mod/photos.php:1256 mod/photos.php:1277
+#: mod/photos.php:1863
+msgid "Profile Photos"
+msgstr "Profilbilder"
 
-#: mod/content.php:621 object/Item.php:444
+#: include/user.php:400
 #, php-format
-msgid "%d comment"
-msgid_plural "%d comments"
-msgstr[0] "%d Kommentar"
-msgstr[1] "%d Kommentare"
-
-#: mod/content.php:638 mod/photos.php:1402 object/Item.php:117
-msgid "Private Message"
-msgstr "Private Nachricht"
+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 "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden."
 
-#: mod/content.php:702 mod/photos.php:1590 object/Item.php:274
-msgid "I like this (toggle)"
-msgstr "Ich mag das (toggle)"
+#: include/user.php:410
+#, php-format
+msgid "Registration at %s"
+msgstr "Registrierung als %s"
 
-#: mod/content.php:702 object/Item.php:274
-msgid "like"
-msgstr "mag ich"
+#: include/user.php:420
+#, 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 "\nHallo %1$s,\n\ndanke für Deine Registrierung auf %2$s. Dein Account wurde eingerichtet."
 
-#: mod/content.php:703 mod/photos.php:1591 object/Item.php:275
-msgid "I don't like this (toggle)"
-msgstr "Ich mag das nicht (toggle)"
+#: include/user.php:424
+#, 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 "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2$s."
 
-#: mod/content.php:703 object/Item.php:275
-msgid "dislike"
-msgstr "mag ich nicht"
+#: include/user.php:456 mod/admin.php:1308
+#, php-format
+msgid "Registration details for %s"
+msgstr "Details der Registration von %s"
 
-#: mod/content.php:705 object/Item.php:278
-msgid "Share this"
-msgstr "Weitersagen"
+#: include/dbstructure.php:20
+msgid "There are no tables on MyISAM."
+msgstr "Es gibt keine MyISAM Tabellen."
 
-#: mod/content.php:705 object/Item.php:278
-msgid "share"
-msgstr "Teilen"
+#: include/dbstructure.php:61
+#, 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 "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein."
 
-#: mod/content.php:725 mod/photos.php:1609 mod/photos.php:1657
-#: mod/photos.php:1743 object/Item.php:729
-msgid "This is you"
-msgstr "Das bist Du"
+#: include/dbstructure.php:66
+#, php-format
+msgid ""
+"The error message is\n"
+"[pre]%s[/pre]"
+msgstr "Die Fehlermeldung lautet\n[pre]%s[/pre]"
 
-#: mod/content.php:727 mod/content.php:950 mod/photos.php:1611
-#: mod/photos.php:1659 mod/photos.php:1745 object/Item.php:418
-#: object/Item.php:731
-msgid "Comment"
-msgstr "Kommentar"
+#: include/dbstructure.php:190
+#, php-format
+msgid ""
+"\n"
+"Error %d occurred during database update:\n"
+"%s\n"
+msgstr "\nFehler %d beim Update der Datenbank aufgetreten\n%s\n"
 
-#: mod/content.php:728 mod/crepair.php:156 mod/fsuggest.php:108
-#: mod/invite.php:142 mod/localtime.php:45 mod/manage.php:145 mod/mood.php:138
-#: mod/poke.php:203 mod/contacts.php:585 mod/events.php:513
-#: mod/message.php:338 mod/message.php:521 mod/photos.php:1124
-#: mod/photos.php:1246 mod/photos.php:1562 mod/photos.php:1612
-#: mod/photos.php:1660 mod/photos.php:1746 mod/install.php:276
-#: mod/install.php:316 mod/profiles.php:680 object/Item.php:732
-#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112
-#: view/theme/duepuntozero/config.php:61 view/theme/clean/config.php:87
-#: view/theme/frio/config.php:64
-msgid "Submit"
-msgstr "Senden"
+#: include/dbstructure.php:193
+msgid "Errors encountered performing database changes: "
+msgstr "Fehler beim Ändern der Datenbank aufgetreten"
 
-#: mod/content.php:729 object/Item.php:733
-msgid "Bold"
-msgstr "Fett"
+#: include/dbstructure.php:201
+msgid ": Database update"
+msgstr ": Datenbank Update"
 
-#: mod/content.php:730 object/Item.php:734
-msgid "Italic"
-msgstr "Kursiv"
+#: include/dbstructure.php:425
+#, php-format
+msgid "%s: updating %s table."
+msgstr "%s: aktualisiere Tabelle %s"
 
-#: mod/content.php:731 object/Item.php:735
-msgid "Underline"
-msgstr "Unterstrichen"
+#: include/dfrn.php:1251
+#, php-format
+msgid "%s\\'s birthday"
+msgstr "%ss Geburtstag"
 
-#: mod/content.php:732 object/Item.php:736
-msgid "Quote"
-msgstr "Zitat"
+#: include/diaspora.php:2137
+msgid "Sharing notification from Diaspora network"
+msgstr "Freigabe-Benachrichtigung von Diaspora"
 
-#: mod/content.php:733 object/Item.php:737
-msgid "Code"
-msgstr "Code"
+#: include/diaspora.php:3146
+msgid "Attachments:"
+msgstr "Anhänge:"
 
-#: mod/content.php:734 object/Item.php:738
-msgid "Image"
-msgstr "Bild"
+#: include/items.php:1738 mod/dfrn_confirm.php:736 mod/dfrn_request.php:759
+msgid "[Name Withheld]"
+msgstr "[Name unterdrückt]"
 
-#: mod/content.php:735 object/Item.php:739
-msgid "Link"
-msgstr "Link"
+#: include/items.php:2123 mod/display.php:103 mod/display.php:279
+#: mod/display.php:484 mod/notice.php:15 mod/viewsrc.php:15 mod/admin.php:247
+#: mod/admin.php:1565 mod/admin.php:1816
+msgid "Item not found."
+msgstr "Beitrag nicht gefunden."
 
-#: mod/content.php:736 object/Item.php:740
-msgid "Video"
-msgstr "Video"
+#: include/items.php:2162
+msgid "Do you really want to delete this item?"
+msgstr "Möchtest Du wirklich dieses Item löschen?"
 
-#: mod/content.php:746 mod/settings.php:743 object/Item.php:122
-#: object/Item.php:124
-msgid "Edit"
-msgstr "Bearbeiten"
+#: include/items.php:2164 mod/api.php:105 mod/contacts.php:452
+#: mod/suggest.php:29 mod/dfrn_request.php:880 mod/follow.php:113
+#: mod/message.php:206 mod/profiles.php:640 mod/profiles.php:643
+#: mod/profiles.php:670 mod/register.php:245 mod/settings.php:1171
+#: mod/settings.php:1177 mod/settings.php:1184 mod/settings.php:1188
+#: mod/settings.php:1193 mod/settings.php:1198 mod/settings.php:1203
+#: mod/settings.php:1208 mod/settings.php:1234 mod/settings.php:1235
+#: mod/settings.php:1236 mod/settings.php:1237 mod/settings.php:1238
+msgid "Yes"
+msgstr "Ja"
 
-#: mod/content.php:772 object/Item.php:238
-msgid "add star"
-msgstr "markieren"
+#: include/items.php:2327 mod/allfriends.php:12 mod/api.php:26 mod/api.php:31
+#: mod/attach.php:33 mod/common.php:18 mod/contacts.php:360
+#: mod/crepair.php:102 mod/delegate.php:12 mod/display.php:481
+#: mod/editpost.php:10 mod/fsuggest.php:79 mod/invite.php:15
+#: mod/invite.php:103 mod/mood.php:115 mod/nogroup.php:27 mod/notes.php:23
+#: mod/ostatus_subscribe.php:9 mod/poke.php:154 mod/profile_photo.php:19
+#: mod/profile_photo.php:180 mod/profile_photo.php:191
+#: mod/profile_photo.php:204 mod/regmod.php:113 mod/repair_ostatus.php:9
+#: mod/suggest.php:58 mod/uimport.php:24 mod/viewcontacts.php:46
+#: mod/wall_attach.php:67 mod/wall_attach.php:70 mod/wallmessage.php:9
+#: mod/wallmessage.php:33 mod/wallmessage.php:73 mod/wallmessage.php:97
+#: mod/cal.php:299 mod/dfrn_confirm.php:61 mod/dirfind.php:11
+#: mod/events.php:185 mod/follow.php:11 mod/follow.php:74 mod/follow.php:158
+#: mod/group.php:19 mod/manage.php:102 mod/message.php:46 mod/message.php:171
+#: mod/network.php:4 mod/photos.php:166 mod/photos.php:1109
+#: mod/profiles.php:168 mod/profiles.php:607 mod/register.php:42
+#: mod/settings.php:22 mod/settings.php:130 mod/settings.php:668
+#: mod/wall_upload.php:101 mod/wall_upload.php:104 mod/item.php:196
+#: mod/item.php:208 mod/notifications.php:71 index.php:407
+msgid "Permission denied."
+msgstr "Zugriff verweigert."
 
-#: mod/content.php:773 object/Item.php:239
-msgid "remove star"
-msgstr "Markierung entfernen"
+#: include/items.php:2444
+msgid "Archives"
+msgstr "Archiv"
 
-#: mod/content.php:774 object/Item.php:240
-msgid "toggle star status"
-msgstr "Markierung umschalten"
+#: include/ostatus.php:1947
+#, php-format
+msgid "%s is now following %s."
+msgstr "%s folgt nun %s"
 
-#: mod/content.php:777 object/Item.php:243
-msgid "starred"
-msgstr "markiert"
+#: include/ostatus.php:1948
+msgid "following"
+msgstr "folgen"
 
-#: mod/content.php:778 mod/content.php:800 object/Item.php:263
-msgid "add tag"
-msgstr "Tag hinzufügen"
+#: include/ostatus.php:1951
+#, php-format
+msgid "%s stopped following %s."
+msgstr "%s hat aufgehört %s zu folgen"
 
-#: mod/content.php:789 object/Item.php:251
-msgid "ignore thread"
-msgstr "Thread ignorieren"
+#: include/ostatus.php:1952
+msgid "stopped following"
+msgstr "wird nicht mehr gefolgt"
 
-#: mod/content.php:790 object/Item.php:252
-msgid "unignore thread"
-msgstr "Thread nicht mehr ignorieren"
+#: include/text.php:307
+msgid "newer"
+msgstr "neuer"
 
-#: mod/content.php:791 object/Item.php:253
-msgid "toggle ignore status"
-msgstr "Ignoriert-Status ein-/ausschalten"
+#: include/text.php:308
+msgid "older"
+msgstr "älter"
 
-#: mod/content.php:794 mod/ostatus_subscribe.php:73 object/Item.php:256
-msgid "ignored"
-msgstr "Ignoriert"
+#: include/text.php:313
+msgid "first"
+msgstr "erste"
 
-#: mod/content.php:805 object/Item.php:141
-msgid "save to folder"
-msgstr "In Ordner speichern"
+#: include/text.php:314
+msgid "prev"
+msgstr "vorige"
 
-#: mod/content.php:853 object/Item.php:212
-msgid "I will attend"
-msgstr "Ich werde teilnehmen"
+#: include/text.php:348
+msgid "next"
+msgstr "nächste"
 
-#: mod/content.php:853 object/Item.php:212
-msgid "I will not attend"
-msgstr "Ich werde nicht teilnehmen"
+#: include/text.php:349
+msgid "last"
+msgstr "letzte"
 
-#: mod/content.php:853 object/Item.php:212
-msgid "I might attend"
-msgstr "Ich werde eventuell teilnehmen"
+#: include/text.php:403
+msgid "Loading more entries..."
+msgstr "lade weitere Einträge..."
 
-#: mod/content.php:917 object/Item.php:384
-msgid "to"
-msgstr "zu"
+#: include/text.php:404
+msgid "The end"
+msgstr "Das Ende"
 
-#: mod/content.php:918 object/Item.php:386
-msgid "Wall-to-Wall"
-msgstr "Wall-to-Wall"
+#: include/text.php:955
+msgid "No contacts"
+msgstr "Keine Kontakte"
 
-#: mod/content.php:919 object/Item.php:387
-msgid "via Wall-To-Wall:"
-msgstr "via Wall-To-Wall:"
+#: include/text.php:980
+#, php-format
+msgid "%d Contact"
+msgid_plural "%d Contacts"
+msgstr[0] "%d Kontakt"
+msgstr[1] "%d Kontakte"
 
-#: mod/credits.php:16
-msgid "Credits"
-msgstr "Credits"
+#: include/text.php:993
+msgid "View Contacts"
+msgstr "Kontakte anzeigen"
 
-#: mod/credits.php:17
-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 "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !"
+#: include/text.php:1081 mod/editpost.php:99 mod/filer.php:31 mod/notes.php:62
+msgid "Save"
+msgstr "Speichern"
 
-#: mod/crepair.php:89
-msgid "Contact settings applied."
-msgstr "Einstellungen zum Kontakt angewandt."
+#: include/text.php:1144
+msgid "poke"
+msgstr "anstupsen"
 
-#: mod/crepair.php:91
-msgid "Contact update failed."
-msgstr "Konnte den Kontakt nicht aktualisieren."
+#: include/text.php:1144
+msgid "poked"
+msgstr "stupste"
 
-#: mod/crepair.php:116 mod/fsuggest.php:21 mod/fsuggest.php:93
-#: mod/dfrn_confirm.php:126
-msgid "Contact not found."
-msgstr "Kontakt nicht gefunden."
+#: include/text.php:1145
+msgid "ping"
+msgstr "anpingen"
 
-#: mod/crepair.php:122
-msgid ""
-"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect"
-" information your communications with this contact may stop working."
-msgstr "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr."
+#: include/text.php:1145
+msgid "pinged"
+msgstr "pingte"
 
-#: mod/crepair.php:123
-msgid ""
-"Please use your browser 'Back' button <strong>now</strong> if you are "
-"uncertain what to do on this page."
-msgstr "Bitte nutze den Zurück-Button Deines Browsers <strong>jetzt</strong>, wenn Du Dir unsicher bist, was Du tun willst."
+#: include/text.php:1146
+msgid "prod"
+msgstr "knuffen"
 
-#: mod/crepair.php:136 mod/crepair.php:138
-msgid "No mirroring"
-msgstr "Kein Spiegeln"
+#: include/text.php:1146
+msgid "prodded"
+msgstr "knuffte"
 
-#: mod/crepair.php:136
-msgid "Mirror as forwarded posting"
-msgstr "Spiegeln als weitergeleitete Beiträge"
+#: include/text.php:1147
+msgid "slap"
+msgstr "ohrfeigen"
 
-#: mod/crepair.php:136 mod/crepair.php:138
-msgid "Mirror as my own posting"
-msgstr "Spiegeln als meine eigenen Beiträge"
+#: include/text.php:1147
+msgid "slapped"
+msgstr "ohrfeigte"
 
-#: mod/crepair.php:152
-msgid "Return to contact editor"
-msgstr "Zurück zum Kontakteditor"
+#: include/text.php:1148
+msgid "finger"
+msgstr "befummeln"
 
-#: mod/crepair.php:154
-msgid "Refetch contact data"
-msgstr "Kontaktdaten neu laden"
+#: include/text.php:1148
+msgid "fingered"
+msgstr "befummelte"
 
-#: mod/crepair.php:158
-msgid "Remote Self"
-msgstr "Entfernte Konten"
+#: include/text.php:1149
+msgid "rebuff"
+msgstr "eine Abfuhr erteilen"
 
-#: mod/crepair.php:161
-msgid "Mirror postings from this contact"
-msgstr "Spiegle Beiträge dieses Kontakts"
+#: include/text.php:1149
+msgid "rebuffed"
+msgstr "abfuhrerteilte"
 
-#: mod/crepair.php:163
-msgid ""
-"Mark this contact as remote_self, this will cause friendica to repost new "
-"entries from this contact."
-msgstr "Markiere diesen Kontakt als remote_self (entferntes Konto), dies veranlasst Friendica alle Top-Level Beiträge dieses Kontakts an all Deine Kontakte zu senden."
+#: include/text.php:1163
+msgid "happy"
+msgstr "glücklich"
 
-#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709
-#: mod/admin.php:1417 mod/admin.php:1430 mod/admin.php:1443 mod/admin.php:1459
-msgid "Name"
-msgstr "Name"
+#: include/text.php:1164
+msgid "sad"
+msgstr "traurig"
 
-#: mod/crepair.php:168
-msgid "Account Nickname"
-msgstr "Konto-Spitzname"
+#: include/text.php:1165
+msgid "mellow"
+msgstr "sanft"
 
-#: mod/crepair.php:169
-msgid "@Tagname - overrides Name/Nickname"
-msgstr "@Tagname - überschreibt Name/Spitzname"
+#: include/text.php:1166
+msgid "tired"
+msgstr "müde"
 
-#: mod/crepair.php:170
-msgid "Account URL"
-msgstr "Konto-URL"
+#: include/text.php:1167
+msgid "perky"
+msgstr "frech"
 
-#: mod/crepair.php:171
-msgid "Friend Request URL"
-msgstr "URL für Kontaktschaftsanfragen"
+#: include/text.php:1168
+msgid "angry"
+msgstr "sauer"
 
-#: mod/crepair.php:172
-msgid "Friend Confirm URL"
-msgstr "URL für Bestätigungen von Kontaktanfragen"
+#: include/text.php:1169
+msgid "stupified"
+msgstr "verblüfft"
 
-#: mod/crepair.php:173
-msgid "Notification Endpoint URL"
-msgstr "URL-Endpunkt für Benachrichtigungen"
+#: include/text.php:1170
+msgid "puzzled"
+msgstr "verwirrt"
 
-#: mod/crepair.php:174
-msgid "Poll/Feed URL"
-msgstr "Pull/Feed-URL"
+#: include/text.php:1171
+msgid "interested"
+msgstr "interessiert"
 
-#: mod/crepair.php:175
-msgid "New photo from this URL"
-msgstr "Neues Foto von dieser URL"
+#: include/text.php:1172
+msgid "bitter"
+msgstr "verbittert"
 
-#: mod/delegate.php:101
-msgid "No potential page delegates located."
-msgstr "Keine potentiellen Bevollmächtigten für die Seite gefunden."
+#: include/text.php:1173
+msgid "cheerful"
+msgstr "fröhlich"
 
-#: mod/delegate.php:132
-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 "Bevollmächtigte sind in der Lage, alle Aspekte dieses Kontos/dieser Seite zu verwalten, abgesehen von den Grundeinstellungen des Kontos. Bitte gib niemandem eine Bevollmächtigung für Deinen privaten Account, dem Du nicht absolut vertraust!"
+#: include/text.php:1174
+msgid "alive"
+msgstr "lebendig"
 
-#: mod/delegate.php:133
-msgid "Existing Page Managers"
-msgstr "Vorhandene Seitenmanager"
+#: include/text.php:1175
+msgid "annoyed"
+msgstr "verärgert"
 
-#: mod/delegate.php:135
-msgid "Existing Page Delegates"
-msgstr "Vorhandene Bevollmächtigte für die Seite"
+#: include/text.php:1176
+msgid "anxious"
+msgstr "unruhig"
 
-#: mod/delegate.php:137
-msgid "Potential Delegates"
-msgstr "Potentielle Bevollmächtigte"
+#: include/text.php:1177
+msgid "cranky"
+msgstr "schrullig"
 
-#: mod/delegate.php:139 mod/tagrm.php:95
-msgid "Remove"
-msgstr "Entfernen"
+#: include/text.php:1178
+msgid "disturbed"
+msgstr "verstört"
 
-#: mod/delegate.php:140
-msgid "Add"
-msgstr "Hinzufügen"
+#: include/text.php:1179
+msgid "frustrated"
+msgstr "frustriert"
 
-#: mod/delegate.php:141
-msgid "No entries."
-msgstr "Keine Einträge."
+#: include/text.php:1180
+msgid "motivated"
+msgstr "motiviert"
 
-#: mod/dfrn_poll.php:104 mod/dfrn_poll.php:539
-#, php-format
-msgid "%1$s welcomes %2$s"
-msgstr "%1$s heißt %2$s herzlich willkommen"
+#: include/text.php:1181
+msgid "relaxed"
+msgstr "entspannt"
 
-#: mod/directory.php:199 view/theme/vier/theme.php:196
-msgid "Global Directory"
-msgstr "Weltweites Verzeichnis"
+#: include/text.php:1182
+msgid "surprised"
+msgstr "überrascht"
 
-#: mod/directory.php:201
-msgid "Find on this site"
-msgstr "Auf diesem Server suchen"
+#: include/text.php:1392 mod/videos.php:386
+msgid "View Video"
+msgstr "Video ansehen"
 
-#: mod/directory.php:203
-msgid "Results for:"
-msgstr "Ergebnisse für:"
+#: include/text.php:1424
+msgid "bytes"
+msgstr "Byte"
 
-#: mod/directory.php:205
-msgid "Site Directory"
-msgstr "Verzeichnis"
+#: include/text.php:1456 include/text.php:1468
+msgid "Click to open/close"
+msgstr "Zum öffnen/schließen klicken"
 
-#: mod/directory.php:212
-msgid "No entries (some entries may be hidden)."
-msgstr "Keine Einträge (einige Einträge könnten versteckt sein)."
+#: include/text.php:1594
+msgid "View on separate page"
+msgstr "Auf separater Seite ansehen"
 
-#: mod/dirfind.php:37
-#, php-format
-msgid "People Search - %s"
-msgstr "Personensuche - %s"
+#: include/text.php:1595
+msgid "view on separate page"
+msgstr "auf separater Seite ansehen"
 
-#: mod/dirfind.php:48
-#, php-format
-msgid "Forum Search - %s"
-msgstr "Forensuche - %s"
+#: include/text.php:1874
+msgid "activity"
+msgstr "Aktivität"
 
-#: mod/dirfind.php:245 mod/match.php:109
-msgid "No matches"
-msgstr "Keine Übereinstimmungen"
+#: include/text.php:1876 mod/content.php:623 object/Item.php:419
+#: object/Item.php:431
+msgid "comment"
+msgid_plural "comments"
+msgstr[0] "Kommentar"
+msgstr[1] "Kommentare"
 
-#: mod/filer.php:30
-msgid "- select -"
-msgstr "- auswählen -"
+#: include/text.php:1877
+msgid "post"
+msgstr "Beitrag"
 
-#: mod/follow.php:19 mod/dfrn_request.php:888
-msgid "Submit Request"
-msgstr "Anfrage abschicken"
+#: include/text.php:2045
+msgid "Item filed"
+msgstr "Beitrag abgelegt"
 
-#: mod/follow.php:30
-msgid "You already added this contact."
-msgstr "Du hast den Kontakt bereits hinzugefügt."
+#: mod/allfriends.php:46
+msgid "No friends to display."
+msgstr "Keine Kontakte zum Anzeigen."
 
-#: mod/follow.php:39
-msgid "Diaspora support isn't enabled. Contact can't be added."
-msgstr "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
+#: mod/api.php:76 mod/api.php:102
+msgid "Authorize application connection"
+msgstr "Verbindung der Applikation autorisieren"
 
-#: mod/follow.php:46
-msgid "OStatus support is disabled. Contact can't be added."
-msgstr "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
+#: mod/api.php:77
+msgid "Return to your app and insert this Securty Code:"
+msgstr "Gehe zu Deiner Anwendung zurück und trage dort folgenden Sicherheitscode ein:"
 
-#: mod/follow.php:53
-msgid "The network type couldn't be detected. Contact can't be added."
-msgstr "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden."
+#: mod/api.php:89
+msgid "Please login to continue."
+msgstr "Bitte melde Dich an um fortzufahren."
 
-#: mod/follow.php:112 mod/dfrn_request.php:874
-msgid "Please answer the following:"
-msgstr "Bitte beantworte folgendes:"
+#: mod/api.php:104
+msgid ""
+"Do you want to authorize this application to access your posts and contacts,"
+" and/or create new posts for you?"
+msgstr "Möchtest Du dieser Anwendung den Zugriff auf Deine Beiträge und Kontakte, sowie das Erstellen neuer Beiträge in Deinem Namen gestatten?"
 
-#: mod/follow.php:113 mod/dfrn_request.php:875
-#, php-format
-msgid "Does %s know you?"
-msgstr "Kennt %s Dich?"
+#: mod/api.php:106 mod/dfrn_request.php:880 mod/follow.php:113
+#: mod/profiles.php:640 mod/profiles.php:644 mod/profiles.php:670
+#: mod/register.php:246 mod/settings.php:1171 mod/settings.php:1177
+#: mod/settings.php:1184 mod/settings.php:1188 mod/settings.php:1193
+#: mod/settings.php:1198 mod/settings.php:1203 mod/settings.php:1208
+#: mod/settings.php:1234 mod/settings.php:1235 mod/settings.php:1236
+#: mod/settings.php:1237 mod/settings.php:1238
+msgid "No"
+msgstr "Nein"
 
-#: mod/follow.php:114 mod/dfrn_request.php:879
-msgid "Add a personal note:"
-msgstr "Eine persönliche Notiz beifügen:"
+#: mod/apps.php:7 index.php:254
+msgid "You must be logged in to use addons. "
+msgstr "Sie müssen angemeldet sein um Addons benutzen zu können."
 
-#: mod/follow.php:120 mod/dfrn_request.php:885
-msgid "Your Identity Address:"
-msgstr "Adresse Deines Profils:"
+#: mod/apps.php:11
+msgid "Applications"
+msgstr "Anwendungen"
 
-#: mod/follow.php:129 mod/contacts.php:632 mod/notifications.php:249
-msgid "Profile URL"
-msgstr "Profil URL"
+#: mod/apps.php:14
+msgid "No installed applications."
+msgstr "Keine Applikationen installiert."
 
-#: mod/follow.php:186
-msgid "Contact added"
-msgstr "Kontakt hinzugefügt"
+#: mod/attach.php:8
+msgid "Item not available."
+msgstr "Beitrag nicht verfügbar."
 
-#: mod/fsuggest.php:64
-msgid "Friend suggestion sent."
-msgstr "Kontaktvorschlag gesendet."
+#: mod/attach.php:20
+msgid "Item was not found."
+msgstr "Beitrag konnte nicht gefunden werden."
 
-#: mod/fsuggest.php:98
-msgid "Suggest Friends"
-msgstr "Kontakte vorschlagen"
+#: mod/bookmarklet.php:41
+msgid "The post was created"
+msgstr "Der Beitrag wurde angelegt"
 
-#: mod/fsuggest.php:100
-#, php-format
-msgid "Suggest a friend for %s"
-msgstr "Schlage %s einen Kontakt vor"
+#: mod/common.php:91
+msgid "No contacts in common."
+msgstr "Keine gemeinsamen Kontakte."
 
-#: mod/group.php:29
-msgid "Group created."
-msgstr "Gruppe erstellt."
+#: mod/common.php:141 mod/contacts.php:871
+msgid "Common Friends"
+msgstr "Gemeinsame Kontakte"
 
-#: mod/group.php:35
-msgid "Could not create group."
-msgstr "Konnte die Gruppe nicht erstellen."
+#: mod/contacts.php:134
+#, php-format
+msgid "%d contact edited."
+msgid_plural "%d contacts edited."
+msgstr[0] "%d Kontakt bearbeitet."
+msgstr[1] "%d Kontakte bearbeitet."
 
-#: mod/group.php:49 mod/group.php:150
-msgid "Group not found."
-msgstr "Gruppe nicht gefunden."
-
-#: mod/group.php:63
-msgid "Group name changed."
-msgstr "Gruppenname geändert."
-
-#: mod/group.php:76 mod/profperm.php:20 index.php:406
-msgid "Permission denied"
-msgstr "Zugriff verweigert"
+#: mod/contacts.php:169 mod/contacts.php:378
+msgid "Could not access contact record."
+msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
 
-#: mod/group.php:91
-msgid "Save Group"
-msgstr "Gruppe speichern"
+#: mod/contacts.php:183
+msgid "Could not locate selected profile."
+msgstr "Konnte das ausgewählte Profil nicht finden."
 
-#: mod/group.php:97
-msgid "Create a group of contacts/friends."
-msgstr "Eine Kontaktgruppe anlegen."
+#: mod/contacts.php:216
+msgid "Contact updated."
+msgstr "Kontakt aktualisiert."
 
-#: mod/group.php:122
-msgid "Group removed."
-msgstr "Gruppe entfernt."
+#: mod/contacts.php:218 mod/dfrn_request.php:593
+msgid "Failed to update contact record."
+msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
 
-#: mod/group.php:124
-msgid "Unable to remove group."
-msgstr "Konnte die Gruppe nicht entfernen."
+#: mod/contacts.php:399
+msgid "Contact has been blocked"
+msgstr "Kontakt wurde blockiert"
 
-#: mod/group.php:187
-msgid "Group Editor"
-msgstr "Gruppeneditor"
+#: mod/contacts.php:399
+msgid "Contact has been unblocked"
+msgstr "Kontakt wurde wieder freigegeben"
 
-#: mod/group.php:200
-msgid "Members"
-msgstr "Mitglieder"
+#: mod/contacts.php:410
+msgid "Contact has been ignored"
+msgstr "Kontakt wurde ignoriert"
 
-#: mod/group.php:202 mod/contacts.php:700
-msgid "All Contacts"
-msgstr "Alle Kontakte"
+#: mod/contacts.php:410
+msgid "Contact has been unignored"
+msgstr "Kontakt wird nicht mehr ignoriert"
 
-#: mod/group.php:233 mod/profperm.php:107
-msgid "Click on a contact to add or remove."
-msgstr "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen"
+#: mod/contacts.php:422
+msgid "Contact has been archived"
+msgstr "Kontakt wurde archiviert"
 
-#: mod/hcard.php:11
-msgid "No profile"
-msgstr "Kein Profil"
+#: mod/contacts.php:422
+msgid "Contact has been unarchived"
+msgstr "Kontakt wurde aus dem Archiv geholt"
 
-#: mod/help.php:41
-msgid "Help:"
-msgstr "Hilfe:"
+#: mod/contacts.php:447
+msgid "Drop contact"
+msgstr "Kontakt löschen"
 
-#: mod/help.php:53 mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48
-#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:292
-msgid "Not Found"
-msgstr "Nicht gefunden"
+#: mod/contacts.php:450 mod/contacts.php:809
+msgid "Do you really want to delete this contact?"
+msgstr "Möchtest Du wirklich diesen Kontakt löschen?"
 
-#: mod/help.php:56 index.php:295
-msgid "Page not found."
-msgstr "Seite nicht gefunden."
+#: mod/contacts.php:469
+msgid "Contact has been removed."
+msgstr "Kontakt wurde entfernt."
 
-#: mod/home.php:39
+#: mod/contacts.php:506
 #, php-format
-msgid "Welcome to %s"
-msgstr "Willkommen zu %s"
-
-#: mod/invite.php:28
-msgid "Total invitation limit exceeded."
-msgstr "Limit für Einladungen erreicht."
+msgid "You are mutual friends with %s"
+msgstr "Du hast mit %s eine beidseitige Freundschaft"
 
-#: mod/invite.php:51
+#: mod/contacts.php:510
 #, php-format
-msgid "%s : Not a valid email address."
-msgstr "%s: Keine gültige Email Adresse."
+msgid "You are sharing with %s"
+msgstr "Du teilst mit %s"
 
-#: mod/invite.php:76
-msgid "Please join us on Friendica"
-msgstr "Ich lade Dich zu unserem sozialen Netzwerk Friendica ein"
+#: mod/contacts.php:515
+#, php-format
+msgid "%s is sharing with you"
+msgstr "%s teilt mit Dir"
 
-#: mod/invite.php:87
-msgid "Invitation limit exceeded. Please contact your site administrator."
-msgstr "Limit für Einladungen erreicht. Bitte kontaktiere des Administrator der Seite."
+#: mod/contacts.php:535
+msgid "Private communications are not available for this contact."
+msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar."
 
-#: mod/invite.php:91
-#, php-format
-msgid "%s : Message delivery failed."
-msgstr "%s: Zustellung der Nachricht fehlgeschlagen."
+#: mod/contacts.php:538 mod/admin.php:978
+msgid "Never"
+msgstr "Niemals"
 
-#: mod/invite.php:95
-#, php-format
-msgid "%d message sent."
-msgid_plural "%d messages sent."
-msgstr[0] "%d Nachricht gesendet."
-msgstr[1] "%d Nachrichten gesendet."
+#: mod/contacts.php:542
+msgid "(Update was successful)"
+msgstr "(Aktualisierung war erfolgreich)"
 
-#: mod/invite.php:114
-msgid "You have no more invitations available"
-msgstr "Du hast keine weiteren Einladungen"
+#: mod/contacts.php:542
+msgid "(Update was not successful)"
+msgstr "(Aktualisierung war nicht erfolgreich)"
 
-#: mod/invite.php:122
-#, php-format
-msgid ""
-"Visit %s for a list of public sites that you can join. Friendica members on "
-"other sites can all connect with each other, as well as with members of many"
-" other social networks."
-msgstr "Besuche %s für eine Liste der öffentlichen Server, denen Du beitreten kannst. Friendica Mitglieder unterschiedlicher Server können sich sowohl alle miteinander verbinden, als auch mit Mitgliedern anderer Sozialer Netzwerke."
+#: mod/contacts.php:544 mod/contacts.php:972
+msgid "Suggest friends"
+msgstr "Kontakte vorschlagen"
 
-#: mod/invite.php:124
+#: mod/contacts.php:548
 #, php-format
-msgid ""
-"To accept this invitation, please visit and register at %s or any other "
-"public Friendica website."
-msgstr "Um diese Kontaktanfrage zu akzeptieren, besuche und registriere Dich bitte bei %s oder einer anderen öffentlichen Friendica Website."
+msgid "Network type: %s"
+msgstr "Netzwerktyp: %s"
 
-#: mod/invite.php:125
-#, php-format
-msgid ""
-"Friendica sites all inter-connect to create a huge privacy-enhanced social "
-"web that is owned and controlled by its members. They can also connect with "
-"many traditional social networks. See %s for a list of alternate Friendica "
-"sites you can join."
-msgstr "Friendica Server verbinden sich alle untereinander, um ein großes datenschutzorientiertes Soziales Netzwerk zu bilden, das von seinen Mitgliedern betrieben und kontrolliert wird. Sie können sich auch mit vielen üblichen Sozialen Netzwerken verbinden. Besuche %s für eine Liste alternativer Friendica Server, denen Du beitreten kannst."
+#: mod/contacts.php:561
+msgid "Communications lost with this contact!"
+msgstr "Verbindungen mit diesem Kontakt verloren!"
 
-#: mod/invite.php:128
-msgid ""
-"Our apologies. This system is not currently configured to connect with other"
-" public sites or invite members."
-msgstr "Es tut uns leid. Dieses System ist zurzeit nicht dafür konfiguriert, sich mit anderen öffentlichen Seiten zu verbinden oder Mitglieder einzuladen."
+#: mod/contacts.php:564
+msgid "Fetch further information for feeds"
+msgstr "Weitere Informationen zu Feeds holen"
 
-#: mod/invite.php:134
-msgid "Send invitations"
-msgstr "Einladungen senden"
+#: mod/contacts.php:565 mod/admin.php:987
+msgid "Disabled"
+msgstr "Deaktiviert"
 
-#: mod/invite.php:135
-msgid "Enter email addresses, one per line:"
-msgstr "E-Mail-Adressen eingeben, eine pro Zeile:"
+#: mod/contacts.php:565
+msgid "Fetch information"
+msgstr "Beziehe Information"
 
-#: mod/invite.php:136 mod/message.php:332 mod/message.php:515
-#: mod/wallmessage.php:135
-msgid "Your message:"
-msgstr "Deine Nachricht:"
+#: mod/contacts.php:565
+msgid "Fetch information and keywords"
+msgstr "Beziehe Information und Schlüsselworte"
 
-#: mod/invite.php:137
-msgid ""
-"You are cordially invited to join me and other close friends on Friendica - "
-"and help us to create a better social web."
-msgstr "Du bist herzlich dazu eingeladen, Dich mir und anderen guten Freunden auf Friendica anzuschließen - und ein besseres Soziales Netz aufzubauen."
+#: mod/contacts.php:583
+msgid "Contact"
+msgstr "Kontakt"
 
-#: mod/invite.php:139
-msgid "You will need to supply this invitation code: $invite_code"
-msgstr "Du benötigst den folgenden Einladungscode: $invite_code"
+#: mod/contacts.php:585 mod/content.php:728 mod/crepair.php:156
+#: mod/fsuggest.php:108 mod/invite.php:142 mod/localtime.php:45
+#: mod/mood.php:138 mod/poke.php:203 mod/events.php:505 mod/manage.php:155
+#: mod/message.php:338 mod/message.php:521 mod/photos.php:1141
+#: mod/photos.php:1271 mod/photos.php:1597 mod/photos.php:1646
+#: mod/photos.php:1688 mod/photos.php:1768 mod/profiles.php:681
+#: mod/install.php:242 mod/install.php:282 object/Item.php:705
+#: view/theme/duepuntozero/config.php:61 view/theme/frio/config.php:64
+#: view/theme/quattro/config.php:67 view/theme/vier/config.php:112
+msgid "Submit"
+msgstr "Senden"
 
-#: mod/invite.php:139
-msgid ""
-"Once you have registered, please connect with me via my profile page at:"
-msgstr "Sobald Du registriert bist, kontaktiere mich bitte auf meiner Profilseite:"
+#: mod/contacts.php:586
+msgid "Profile Visibility"
+msgstr "Profil-Sichtbarkeit"
 
-#: mod/invite.php:141
+#: mod/contacts.php:587
+#, php-format
 msgid ""
-"For more information about the Friendica project and why we feel it is "
-"important, please visit http://friendica.com"
-msgstr "Für weitere Informationen über das Friendica Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendica.com"
-
-#: mod/localtime.php:24
-msgid "Time Conversion"
-msgstr "Zeitumrechnung"
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft."
 
-#: mod/localtime.php:26
-msgid ""
-"Friendica provides this service for sharing events with other networks and "
-"friends in unknown timezones."
-msgstr "Friendica bietet diese Funktion an, um das Teilen von Events mit Kontakten zu vereinfachen, deren Zeitzone nicht ermittelt werden kann."
+#: mod/contacts.php:588
+msgid "Contact Information / Notes"
+msgstr "Kontakt Informationen / Notizen"
 
-#: mod/localtime.php:30
-#, php-format
-msgid "UTC time: %s"
-msgstr "UTC Zeit: %s"
+#: mod/contacts.php:589
+msgid "Edit contact notes"
+msgstr "Notizen zum Kontakt bearbeiten"
 
-#: mod/localtime.php:33
+#: mod/contacts.php:594 mod/contacts.php:938 mod/nogroup.php:43
+#: mod/viewcontacts.php:102
 #, php-format
-msgid "Current timezone: %s"
-msgstr "Aktuelle Zeitzone: %s"
+msgid "Visit %s's profile [%s]"
+msgstr "Besuche %ss Profil [%s]"
 
-#: mod/localtime.php:36
-#, php-format
-msgid "Converted localtime: %s"
-msgstr "Umgerechnete lokale Zeit: %s"
+#: mod/contacts.php:595
+msgid "Block/Unblock contact"
+msgstr "Kontakt blockieren/freischalten"
 
-#: mod/localtime.php:41
-msgid "Please select your timezone:"
-msgstr "Bitte wähle Deine Zeitzone:"
+#: mod/contacts.php:596
+msgid "Ignore contact"
+msgstr "Ignoriere den Kontakt"
 
-#: mod/lockview.php:32 mod/lockview.php:40
-msgid "Remote privacy information not available."
-msgstr "Entfernte Privatsphäreneinstellungen nicht verfügbar."
+#: mod/contacts.php:597
+msgid "Repair URL settings"
+msgstr "URL Einstellungen reparieren"
 
-#: mod/lockview.php:49
-msgid "Visible to:"
-msgstr "Sichtbar für:"
+#: mod/contacts.php:598
+msgid "View conversations"
+msgstr "Unterhaltungen anzeigen"
 
-#: mod/lostpass.php:19
-msgid "No valid account found."
-msgstr "Kein gültiges Konto gefunden."
+#: mod/contacts.php:604
+msgid "Last update:"
+msgstr "Letzte Aktualisierung: "
 
-#: mod/lostpass.php:35
-msgid "Password reset request issued. Check your email."
-msgstr "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe Deine E-Mail."
+#: mod/contacts.php:606
+msgid "Update public posts"
+msgstr "Öffentliche Beiträge aktualisieren"
 
-#: mod/lostpass.php:41
-#, 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 "\nHallo %1$s,\n\nAuf \"%2$s\" ist eine Anfrage auf das Zurücksetzen Deines Passworts gestellt\nworden. Um diese Anfrage zu verifizieren, folge bitte dem unten stehenden\nLink oder kopiere und füge ihn in die Adressleiste Deines Browsers ein.\n\nSolltest Du die Anfrage NICHT gemacht haben, ignoriere und/oder lösche diese\nE-Mail bitte.\n\nDein Passwort wird nicht geändert, solange wir nicht verifiziert haben, dass\nDu diese Änderung angefragt hast."
+#: mod/contacts.php:608 mod/contacts.php:982
+msgid "Update now"
+msgstr "Jetzt aktualisieren"
 
-#: mod/lostpass.php:52
-#, php-format
+#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
+#: mod/admin.php:1510
+msgid "Unblock"
+msgstr "Entsperren"
+
+#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
+#: mod/admin.php:1509
+msgid "Block"
+msgstr "Sperren"
+
+#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
+msgid "Unignore"
+msgstr "Ignorieren aufheben"
+
+#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
+#: mod/notifications.php:60 mod/notifications.php:179
+#: mod/notifications.php:263
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: mod/contacts.php:618
+msgid "Currently blocked"
+msgstr "Derzeit geblockt"
+
+#: mod/contacts.php:619
+msgid "Currently ignored"
+msgstr "Derzeit ignoriert"
+
+#: mod/contacts.php:620
+msgid "Currently archived"
+msgstr "Momentan archiviert"
+
+#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:251
+msgid "Hide this contact from others"
+msgstr "Verbirg diesen Kontakt vor Anderen"
+
+#: mod/contacts.php:621
 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 "\nUm Deine Identität zu verifizieren, folge bitte dem folgenden Link:\n\n%1$s\n\nDu wirst eine weitere E-Mail mit Deinem neuen Passwort erhalten. Sobald Du Dich\nangemeldet hast, kannst Du Dein Passwort in den Einstellungen ändern.\n\nDie Anmeldedetails sind die folgenden:\n\nAdresse der Seite:\t%2$s\nBenutzername:\t%3$s"
+"Replies/likes to your public posts <strong>may</strong> still be visible"
+msgstr "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"
 
-#: mod/lostpass.php:71
-#, php-format
-msgid "Password reset requested at %s"
-msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"
+#: mod/contacts.php:622
+msgid "Notification for new posts"
+msgstr "Benachrichtigung bei neuen Beiträgen"
 
-#: mod/lostpass.php:91
+#: mod/contacts.php:622
+msgid "Send a notification of every new post of this contact"
+msgstr "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."
+
+#: mod/contacts.php:625
+msgid "Blacklisted keywords"
+msgstr "Blacklistete Schlüsselworte "
+
+#: mod/contacts.php:625
 msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
-msgstr "Anfrage konnte nicht verifiziert werden. (Eventuell hast Du bereits eine ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."
+"Comma separated list of keywords that should not be converted to hashtags, "
+"when \"Fetch information and keywords\" is selected"
+msgstr "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde"
 
-#: mod/lostpass.php:110 boot.php:1848
-msgid "Password Reset"
-msgstr "Passwort zurücksetzen"
+#: mod/contacts.php:632 mod/follow.php:129 mod/notifications.php:255
+msgid "Profile URL"
+msgstr "Profil URL"
 
-#: mod/lostpass.php:111
-msgid "Your password has been reset as requested."
-msgstr "Dein Passwort wurde wie gewünscht zurückgesetzt."
+#: mod/contacts.php:643
+msgid "Actions"
+msgstr "Aktionen"
 
-#: mod/lostpass.php:112
-msgid "Your new password is"
-msgstr "Dein neues Passwort lautet"
+#: mod/contacts.php:646
+msgid "Contact Settings"
+msgstr "Kontakteinstellungen"
 
-#: mod/lostpass.php:113
-msgid "Save or copy your new password - and then"
-msgstr "Speichere oder kopiere Dein neues Passwort - und dann"
+#: mod/contacts.php:692
+msgid "Suggestions"
+msgstr "Kontaktvorschläge"
 
-#: mod/lostpass.php:114
-msgid "click here to login"
-msgstr "hier klicken, um Dich anzumelden"
+#: mod/contacts.php:695
+msgid "Suggest potential friends"
+msgstr "Kontakte vorschlagen"
 
-#: mod/lostpass.php:115
-msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
-msgstr "Du kannst das Passwort in den <em>Einstellungen</em> ändern, sobald Du Dich erfolgreich angemeldet hast."
+#: mod/contacts.php:700 mod/group.php:212
+msgid "All Contacts"
+msgstr "Alle Kontakte"
 
-#: mod/lostpass.php:125
+#: mod/contacts.php:703
+msgid "Show all contacts"
+msgstr "Alle Kontakte anzeigen"
+
+#: mod/contacts.php:708
+msgid "Unblocked"
+msgstr "Ungeblockt"
+
+#: mod/contacts.php:711
+msgid "Only show unblocked contacts"
+msgstr "Nur nicht-blockierte Kontakte anzeigen"
+
+#: mod/contacts.php:717
+msgid "Blocked"
+msgstr "Geblockt"
+
+#: mod/contacts.php:720
+msgid "Only show blocked contacts"
+msgstr "Nur blockierte Kontakte anzeigen"
+
+#: mod/contacts.php:726
+msgid "Ignored"
+msgstr "Ignoriert"
+
+#: mod/contacts.php:729
+msgid "Only show ignored contacts"
+msgstr "Nur ignorierte Kontakte anzeigen"
+
+#: mod/contacts.php:735
+msgid "Archived"
+msgstr "Archiviert"
+
+#: mod/contacts.php:738
+msgid "Only show archived contacts"
+msgstr "Nur archivierte Kontakte anzeigen"
+
+#: mod/contacts.php:744
+msgid "Hidden"
+msgstr "Verborgen"
+
+#: mod/contacts.php:747
+msgid "Only show hidden contacts"
+msgstr "Nur verborgene Kontakte anzeigen"
+
+#: mod/contacts.php:804
+msgid "Search your contacts"
+msgstr "Suche in deinen Kontakten"
+
+#: mod/contacts.php:805 mod/network.php:151 mod/search.php:227
 #, 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 "\nHallo %1$s,\n\nDein Passwort wurde wie gewünscht geändert. Bitte bewahre diese Informationen gut auf (oder ändere Dein Passwort in eines, das Du Dir leicht merken kannst)."
+msgid "Results for: %s"
+msgstr "Ergebnisse für: %s"
 
-#: mod/lostpass.php:131
+#: mod/contacts.php:812 mod/settings.php:160 mod/settings.php:707
+msgid "Update"
+msgstr "Aktualisierungen"
+
+#: mod/contacts.php:815 mod/contacts.php:1007
+msgid "Archive"
+msgstr "Archivieren"
+
+#: mod/contacts.php:815 mod/contacts.php:1007
+msgid "Unarchive"
+msgstr "Aus Archiv zurückholen"
+
+#: mod/contacts.php:818
+msgid "Batch Actions"
+msgstr "Stapelverarbeitung"
+
+#: mod/contacts.php:864
+msgid "View all contacts"
+msgstr "Alle Kontakte anzeigen"
+
+#: mod/contacts.php:874
+msgid "View all common friends"
+msgstr "Alle Kontakte anzeigen"
+
+#: mod/contacts.php:881
+msgid "Advanced Contact Settings"
+msgstr "Fortgeschrittene Kontakteinstellungen"
+
+#: mod/contacts.php:915
+msgid "Mutual Friendship"
+msgstr "Beidseitige Freundschaft"
+
+#: mod/contacts.php:919
+msgid "is a fan of yours"
+msgstr "ist ein Fan von dir"
+
+#: mod/contacts.php:923
+msgid "you are a fan of"
+msgstr "Du bist Fan von"
+
+#: mod/contacts.php:939 mod/nogroup.php:44
+msgid "Edit contact"
+msgstr "Kontakt bearbeiten"
+
+#: mod/contacts.php:993
+msgid "Toggle Blocked status"
+msgstr "Geblockt-Status ein-/ausschalten"
+
+#: mod/contacts.php:1001
+msgid "Toggle Ignored status"
+msgstr "Ignoriert-Status ein-/ausschalten"
+
+#: mod/contacts.php:1009
+msgid "Toggle Archive status"
+msgstr "Archiviert-Status ein-/ausschalten"
+
+#: mod/contacts.php:1017
+msgid "Delete contact"
+msgstr "Lösche den Kontakt"
+
+#: mod/content.php:119 mod/network.php:475
+msgid "No such group"
+msgstr "Es gibt keine solche Gruppe"
+
+#: mod/content.php:130 mod/group.php:213 mod/network.php:502
+msgid "Group is empty"
+msgstr "Gruppe ist leer"
+
+#: mod/content.php:135 mod/network.php:506
 #, php-format
-msgid ""
-"\n"
-"\t\t\t\tYour login details are as follows:\n"
-"\n"
-"\t\t\t\tSite Location:\t%1$s\n"
-"\t\t\t\tLogin Name:\t%2$s\n"
-"\t\t\t\tPassword:\t%3$s\n"
-"\n"
-"\t\t\t\tYou may change that password from your account settings page after logging in.\n"
-"\t\t\t"
-msgstr "\nDie Anmeldedaten sind die folgenden:\n\nAdresse der Seite: %1$s\nLogin Name: %2$s\nPasswort: %3$s\n\nDas Passwort kann und sollte in den Kontoeinstellungen nach der Anmeldung geändert werden."
+msgid "Group: %s"
+msgstr "Gruppe: %s"
 
-#: mod/lostpass.php:147
+#: mod/content.php:325 object/Item.php:96
+msgid "This entry was edited"
+msgstr "Dieser Beitrag wurde bearbeitet."
+
+#: mod/content.php:621 object/Item.php:417
 #, php-format
-msgid "Your password has been changed at %s"
-msgstr "Auf %s wurde Dein Passwort geändert"
+msgid "%d comment"
+msgid_plural "%d comments"
+msgstr[0] "%d Kommentar"
+msgstr[1] "%d Kommentare"
 
-#: mod/lostpass.php:159
-msgid "Forgot your Password?"
-msgstr "Hast Du Dein Passwort vergessen?"
+#: mod/content.php:638 mod/photos.php:1429 object/Item.php:117
+msgid "Private Message"
+msgstr "Private Nachricht"
 
-#: mod/lostpass.php:160
+#: mod/content.php:702 mod/photos.php:1625 object/Item.php:274
+msgid "I like this (toggle)"
+msgstr "Ich mag das (toggle)"
+
+#: mod/content.php:702 object/Item.php:274
+msgid "like"
+msgstr "mag ich"
+
+#: mod/content.php:703 mod/photos.php:1626 object/Item.php:275
+msgid "I don't like this (toggle)"
+msgstr "Ich mag das nicht (toggle)"
+
+#: mod/content.php:703 object/Item.php:275
+msgid "dislike"
+msgstr "mag ich nicht"
+
+#: mod/content.php:705 object/Item.php:278
+msgid "Share this"
+msgstr "Weitersagen"
+
+#: mod/content.php:705 object/Item.php:278
+msgid "share"
+msgstr "Teilen"
+
+#: mod/content.php:725 mod/photos.php:1643 mod/photos.php:1685
+#: mod/photos.php:1765 object/Item.php:702
+msgid "This is you"
+msgstr "Das bist Du"
+
+#: mod/content.php:727 mod/content.php:950 mod/photos.php:1645
+#: mod/photos.php:1687 mod/photos.php:1767 object/Item.php:392
+#: object/Item.php:704
+msgid "Comment"
+msgstr "Kommentar"
+
+#: mod/content.php:729 object/Item.php:706
+msgid "Bold"
+msgstr "Fett"
+
+#: mod/content.php:730 object/Item.php:707
+msgid "Italic"
+msgstr "Kursiv"
+
+#: mod/content.php:731 object/Item.php:708
+msgid "Underline"
+msgstr "Unterstrichen"
+
+#: mod/content.php:732 object/Item.php:709
+msgid "Quote"
+msgstr "Zitat"
+
+#: mod/content.php:733 object/Item.php:710
+msgid "Code"
+msgstr "Code"
+
+#: mod/content.php:734 object/Item.php:711
+msgid "Image"
+msgstr "Bild"
+
+#: mod/content.php:735 object/Item.php:712
+msgid "Link"
+msgstr "Link"
+
+#: mod/content.php:736 object/Item.php:713
+msgid "Video"
+msgstr "Video"
+
+#: mod/content.php:746 mod/settings.php:743 object/Item.php:122
+#: object/Item.php:124
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: mod/content.php:772 object/Item.php:238
+msgid "add star"
+msgstr "markieren"
+
+#: mod/content.php:773 object/Item.php:239
+msgid "remove star"
+msgstr "Markierung entfernen"
+
+#: mod/content.php:774 object/Item.php:240
+msgid "toggle star status"
+msgstr "Markierung umschalten"
+
+#: mod/content.php:777 object/Item.php:243
+msgid "starred"
+msgstr "markiert"
+
+#: mod/content.php:778 mod/content.php:800 object/Item.php:263
+msgid "add tag"
+msgstr "Tag hinzufügen"
+
+#: mod/content.php:789 object/Item.php:251
+msgid "ignore thread"
+msgstr "Thread ignorieren"
+
+#: mod/content.php:790 object/Item.php:252
+msgid "unignore thread"
+msgstr "Thread nicht mehr ignorieren"
+
+#: mod/content.php:791 object/Item.php:253
+msgid "toggle ignore status"
+msgstr "Ignoriert-Status ein-/ausschalten"
+
+#: mod/content.php:794 mod/ostatus_subscribe.php:73 object/Item.php:256
+msgid "ignored"
+msgstr "Ignoriert"
+
+#: mod/content.php:805 object/Item.php:141
+msgid "save to folder"
+msgstr "In Ordner speichern"
+
+#: mod/content.php:853 object/Item.php:212
+msgid "I will attend"
+msgstr "Ich werde teilnehmen"
+
+#: mod/content.php:853 object/Item.php:212
+msgid "I will not attend"
+msgstr "Ich werde nicht teilnehmen"
+
+#: mod/content.php:853 object/Item.php:212
+msgid "I might attend"
+msgstr "Ich werde eventuell teilnehmen"
+
+#: mod/content.php:917 object/Item.php:358
+msgid "to"
+msgstr "zu"
+
+#: mod/content.php:918 object/Item.php:360
+msgid "Wall-to-Wall"
+msgstr "Wall-to-Wall"
+
+#: mod/content.php:919 object/Item.php:361
+msgid "via Wall-To-Wall:"
+msgstr "via Wall-To-Wall:"
+
+#: mod/credits.php:16
+msgid "Credits"
+msgstr "Credits"
+
+#: mod/credits.php:17
 msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
-msgstr "Gib Deine E-Mail-Adresse an und fordere ein neues Passwort an. Es werden Dir dann weitere Informationen per Mail zugesendet."
+"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 "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !"
 
-#: mod/lostpass.php:161 boot.php:1836
-msgid "Nickname or Email: "
-msgstr "Spitzname oder E-Mail:"
+#: mod/crepair.php:89
+msgid "Contact settings applied."
+msgstr "Einstellungen zum Kontakt angewandt."
 
-#: mod/lostpass.php:162
-msgid "Reset"
-msgstr "Zurücksetzen"
+#: mod/crepair.php:91
+msgid "Contact update failed."
+msgstr "Konnte den Kontakt nicht aktualisieren."
 
-#: mod/maintenance.php:9
-msgid "System down for maintenance"
-msgstr "System zur Wartung abgeschaltet"
+#: mod/crepair.php:116 mod/fsuggest.php:21 mod/fsuggest.php:93
+#: mod/dfrn_confirm.php:126
+msgid "Contact not found."
+msgstr "Kontakt nicht gefunden."
 
-#: mod/manage.php:141
-msgid "Manage Identities and/or Pages"
-msgstr "Verwalte Identitäten und/oder Seiten"
+#: mod/crepair.php:122
+msgid ""
+"<strong>WARNING: This is highly advanced</strong> and if you enter incorrect"
+" information your communications with this contact may stop working."
+msgstr "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr."
 
-#: mod/manage.php:142
+#: mod/crepair.php:123
 msgid ""
-"Toggle between different identities or community/group pages which share "
-"your account details or which you have been granted \"manage\" permissions"
-msgstr "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast."
+"Please use your browser 'Back' button <strong>now</strong> if you are "
+"uncertain what to do on this page."
+msgstr "Bitte nutze den Zurück-Button Deines Browsers <strong>jetzt</strong>, wenn Du Dir unsicher bist, was Du tun willst."
+
+#: mod/crepair.php:136 mod/crepair.php:138
+msgid "No mirroring"
+msgstr "Kein Spiegeln"
+
+#: mod/crepair.php:136
+msgid "Mirror as forwarded posting"
+msgstr "Spiegeln als weitergeleitete Beiträge"
+
+#: mod/crepair.php:136 mod/crepair.php:138
+msgid "Mirror as my own posting"
+msgstr "Spiegeln als meine eigenen Beiträge"
 
-#: mod/manage.php:143
-msgid "Select an identity to manage: "
-msgstr "Wähle eine Identität zum Verwalten aus: "
+#: mod/crepair.php:152
+msgid "Return to contact editor"
+msgstr "Zurück zum Kontakteditor"
 
-#: mod/match.php:35
-msgid "No keywords to match. Please add keywords to your default profile."
-msgstr "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu."
+#: mod/crepair.php:154
+msgid "Refetch contact data"
+msgstr "Kontaktdaten neu laden"
 
-#: mod/match.php:88
-msgid "is interested in:"
-msgstr "ist interessiert an:"
+#: mod/crepair.php:158
+msgid "Remote Self"
+msgstr "Entfernte Konten"
 
-#: mod/match.php:102
-msgid "Profile Match"
-msgstr "Profilübereinstimmungen"
+#: mod/crepair.php:161
+msgid "Mirror postings from this contact"
+msgstr "Spiegle Beiträge dieses Kontakts"
 
-#: mod/mood.php:134
-msgid "Mood"
-msgstr "Stimmung"
+#: mod/crepair.php:163
+msgid ""
+"Mark this contact as remote_self, this will cause friendica to repost new "
+"entries from this contact."
+msgstr "Markiere diesen Kontakt als remote_self (entferntes Konto), dies veranlasst Friendica alle Top-Level Beiträge dieses Kontakts an all Deine Kontakte zu senden."
 
-#: mod/mood.php:135
-msgid "Set your current mood and tell your friends"
-msgstr "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten"
+#: mod/crepair.php:167 mod/settings.php:683 mod/settings.php:709
+#: mod/admin.php:1490 mod/admin.php:1503 mod/admin.php:1516 mod/admin.php:1532
+msgid "Name"
+msgstr "Name"
 
-#: mod/newmember.php:6
-msgid "Welcome to Friendica"
-msgstr "Willkommen bei Friendica"
+#: mod/crepair.php:168
+msgid "Account Nickname"
+msgstr "Konto-Spitzname"
 
-#: mod/newmember.php:8
-msgid "New Member Checklist"
-msgstr "Checkliste für neue Mitglieder"
+#: mod/crepair.php:169
+msgid "@Tagname - overrides Name/Nickname"
+msgstr "@Tagname - überschreibt Name/Spitzname"
 
-#: mod/newmember.php:12
-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 "Wir möchten Dir einige Tipps und Links anbieten, die Dir helfen könnten, den Einstieg angenehmer zu machen. Klicke auf ein Element, um die entsprechende Seite zu besuchen. Ein Link zu dieser Seite hier bleibt für Dich an Deiner Pinnwand für zwei Wochen nach dem Registrierungsdatum sichtbar und wird dann verschwinden."
+#: mod/crepair.php:170
+msgid "Account URL"
+msgstr "Konto-URL"
 
-#: mod/newmember.php:14
-msgid "Getting Started"
-msgstr "Einstieg"
+#: mod/crepair.php:171
+msgid "Friend Request URL"
+msgstr "URL für Kontaktschaftsanfragen"
 
-#: mod/newmember.php:18
-msgid "Friendica Walk-Through"
-msgstr "Friendica Rundgang"
+#: mod/crepair.php:172
+msgid "Friend Confirm URL"
+msgstr "URL für Bestätigungen von Kontaktanfragen"
 
-#: mod/newmember.php:18
-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 "Auf der <em>Quick Start</em> Seite findest Du eine kurze Einleitung in die einzelnen Funktionen Deines Profils und die Netzwerk-Reiter, wo Du interessante Foren findest und neue Kontakte knüpfst."
+#: mod/crepair.php:173
+msgid "Notification Endpoint URL"
+msgstr "URL-Endpunkt für Benachrichtigungen"
 
-#: mod/newmember.php:26
-msgid "Go to Your Settings"
-msgstr "Gehe zu deinen Einstellungen"
+#: mod/crepair.php:174
+msgid "Poll/Feed URL"
+msgstr "Pull/Feed-URL"
 
-#: mod/newmember.php:26
-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 "Ändere bitte unter <em>Einstellungen</em> dein Passwort. Außerdem merke dir deine Identifikationsadresse. Diese sieht aus wie eine E-Mail-Adresse und wird benötigt, um Kontakte mit anderen im Friendica Netzwerk zu knüpfen.."
+#: mod/crepair.php:175
+msgid "New photo from this URL"
+msgstr "Neues Foto von dieser URL"
 
-#: mod/newmember.php:28
+#: mod/delegate.php:101
+msgid "No potential page delegates located."
+msgstr "Keine potentiellen Bevollmächtigten für die Seite gefunden."
+
+#: mod/delegate.php:132
 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 "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn Du Dein Profil nicht veröffentlichst, ist das als wenn Du Deine Telefonnummer nicht ins Telefonbuch einträgst. Im Allgemeinen solltest Du es veröffentlichen - außer all Deine Kontakte und potentiellen Kontakte wissen genau, wie sie Dich finden können."
+"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 "Bevollmächtigte sind in der Lage, alle Aspekte dieses Kontos/dieser Seite zu verwalten, abgesehen von den Grundeinstellungen des Kontos. Bitte gib niemandem eine Bevollmächtigung für Deinen privaten Account, dem Du nicht absolut vertraust!"
 
-#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:699
-msgid "Upload Profile Photo"
-msgstr "Profilbild hochladen"
+#: mod/delegate.php:133
+msgid "Existing Page Managers"
+msgstr "Vorhandene Seitenmanager"
 
-#: mod/newmember.php:36
-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 "Lade ein Profilbild hoch, falls Du es noch nicht getan hast. Studien haben gezeigt, dass es zehnmal wahrscheinlicher ist neue Kontakte zu finden, wenn Du ein Bild von Dir selbst verwendest, als wenn Du dies nicht tust."
+#: mod/delegate.php:135
+msgid "Existing Page Delegates"
+msgstr "Vorhandene Bevollmächtigte für die Seite"
 
-#: mod/newmember.php:38
-msgid "Edit Your Profile"
-msgstr "Editiere dein Profil"
+#: mod/delegate.php:137
+msgid "Potential Delegates"
+msgstr "Potentielle Bevollmächtigte"
 
-#: mod/newmember.php:38
-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 "Editiere Dein <strong>Standard</strong> Profil nach Deinen Vorlieben. Überprüfe die Einstellungen zum Verbergen Deiner Kontaktliste vor unbekannten Betrachtern des Profils."
+#: mod/delegate.php:139 mod/tagrm.php:95
+msgid "Remove"
+msgstr "Entfernen"
 
-#: mod/newmember.php:40
-msgid "Profile Keywords"
-msgstr "Profil Schlüsselbegriffe"
+#: mod/delegate.php:140
+msgid "Add"
+msgstr "Hinzufügen"
 
-#: mod/newmember.php:40
-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 "Trage ein paar öffentliche Stichwörter in Dein Standardprofil ein, die Deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die Deine Interessen teilen und können Dir dann Kontakte vorschlagen."
+#: mod/delegate.php:141
+msgid "No entries."
+msgstr "Keine Einträge."
 
-#: mod/newmember.php:44
-msgid "Connecting"
-msgstr "Verbindungen knüpfen"
+#: mod/dfrn_poll.php:104 mod/dfrn_poll.php:539
+#, php-format
+msgid "%1$s welcomes %2$s"
+msgstr "%1$s heißt %2$s herzlich willkommen"
 
-#: mod/newmember.php:51
-msgid "Importing Emails"
-msgstr "Emails Importieren"
+#: mod/directory.php:37 mod/display.php:200 mod/viewcontacts.php:36
+#: mod/community.php:18 mod/dfrn_request.php:804 mod/photos.php:979
+#: mod/probe.php:9 mod/search.php:93 mod/search.php:99 mod/videos.php:198
+#: mod/webfinger.php:8
+msgid "Public access denied."
+msgstr "Öffentlicher Zugriff verweigert."
 
-#: mod/newmember.php:51
-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"
-msgstr "Gib Deine E-Mail-Zugangsinformationen auf der Connector-Einstellungsseite ein, falls Du E-Mails aus Deinem Posteingang importieren und mit Kontakten und Mailinglisten interagieren willst."
+#: mod/directory.php:199 view/theme/vier/theme.php:199
+msgid "Global Directory"
+msgstr "Weltweites Verzeichnis"
 
-#: mod/newmember.php:53
-msgid "Go to Your Contacts Page"
-msgstr "Gehe zu deiner Kontakt-Seite"
+#: mod/directory.php:201
+msgid "Find on this site"
+msgstr "Auf diesem Server suchen"
 
-#: mod/newmember.php:53
-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 "Die Kontakte-Seite ist die Einstiegsseite, von der aus Du Kontakte verwalten und Dich mit Personen in anderen Netzwerken verbinden kannst. Normalerweise gibst Du dazu einfach ihre Adresse oder die URL der Seite im Kasten <em>Neuen Kontakt hinzufügen</em> ein."
+#: mod/directory.php:203
+msgid "Results for:"
+msgstr "Ergebnisse für:"
 
-#: mod/newmember.php:55
-msgid "Go to Your Site's Directory"
-msgstr "Gehe zum Verzeichnis Deiner Friendica Instanz"
+#: mod/directory.php:205
+msgid "Site Directory"
+msgstr "Verzeichnis"
 
-#: mod/newmember.php:55
-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."
-msgstr "Über die Verzeichnisseite kannst Du andere Personen auf diesem Server oder anderen verknüpften Seiten finden. Halte nach einem <em>Verbinden</em> oder <em>Folgen</em> Link auf deren Profilseiten Ausschau und gib Deine eigene Profiladresse an, falls Du danach gefragt wirst."
+#: mod/directory.php:212
+msgid "No entries (some entries may be hidden)."
+msgstr "Keine Einträge (einige Einträge könnten versteckt sein)."
 
-#: mod/newmember.php:57
-msgid "Finding New People"
-msgstr "Neue Leute kennenlernen"
+#: mod/display.php:328 mod/cal.php:143 mod/profile.php:155
+msgid "Access to this profile has been restricted."
+msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
 
-#: mod/newmember.php:57
-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 "Im seitlichen Bedienfeld der Kontakteseite gibt es diverse Werkzeuge, um neue Personen zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Leute vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden."
+#: mod/display.php:479
+msgid "Item has been removed."
+msgstr "Eintrag wurde entfernt."
 
-#: mod/newmember.php:65
-msgid "Group Your Contacts"
-msgstr "Gruppiere deine Kontakte"
+#: mod/editpost.php:17 mod/editpost.php:27
+msgid "Item not found"
+msgstr "Beitrag nicht gefunden"
 
-#: mod/newmember.php:65
-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 "Sobald Du einige Kontakte gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren."
+#: mod/editpost.php:32
+msgid "Edit post"
+msgstr "Beitrag bearbeiten"
 
-#: mod/newmember.php:68
-msgid "Why Aren't My Posts Public?"
-msgstr "Warum sind meine Beiträge nicht öffentlich?"
+#: mod/fbrowser.php:132
+msgid "Files"
+msgstr "Dateien"
 
-#: mod/newmember.php:68
-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 "Friendica respektiert Deine Privatsphäre. Mit der Grundeinstellung werden Deine Beiträge ausschließlich Deinen Kontakten angezeigt. Für weitere Informationen diesbezüglich lies Dir bitte den entsprechenden Abschnitt in der Hilfe unter dem obigen Link durch."
+#: mod/fetch.php:12 mod/fetch.php:39 mod/fetch.php:48 mod/help.php:53
+#: mod/p.php:16 mod/p.php:43 mod/p.php:52 index.php:298
+msgid "Not Found"
+msgstr "Nicht gefunden"
 
-#: mod/newmember.php:73
-msgid "Getting Help"
-msgstr "Hilfe bekommen"
+#: mod/filer.php:30
+msgid "- select -"
+msgstr "- auswählen -"
 
-#: mod/newmember.php:77
-msgid "Go to the Help Section"
-msgstr "Zum Hilfe Abschnitt gehen"
+#: mod/fsuggest.php:64
+msgid "Friend suggestion sent."
+msgstr "Kontaktvorschlag gesendet."
 
-#: mod/newmember.php:77
-msgid ""
-"Our <strong>help</strong> pages may be consulted for detail on other program"
-" features and resources."
-msgstr "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten."
+#: mod/fsuggest.php:98
+msgid "Suggest Friends"
+msgstr "Kontakte vorschlagen"
 
-#: mod/nogroup.php:43 mod/contacts.php:594 mod/contacts.php:938
-#: mod/viewcontacts.php:102
+#: mod/fsuggest.php:100
 #, php-format
-msgid "Visit %s's profile [%s]"
-msgstr "Besuche %ss Profil [%s]"
-
-#: mod/nogroup.php:44 mod/contacts.php:939
-msgid "Edit contact"
-msgstr "Kontakt bearbeiten"
+msgid "Suggest a friend for %s"
+msgstr "Schlage %s einen Kontakt vor"
 
-#: mod/nogroup.php:65
-msgid "Contacts who are not members of a group"
-msgstr "Kontakte, die keiner Gruppe zugewiesen sind"
+#: mod/hcard.php:11
+msgid "No profile"
+msgstr "Kein Profil"
 
-#: mod/notify.php:65
-msgid "No more system notifications."
-msgstr "Keine weiteren Systembenachrichtigungen."
+#: mod/help.php:41
+msgid "Help:"
+msgstr "Hilfe:"
 
-#: mod/notify.php:69 mod/notifications.php:111
-msgid "System Notifications"
-msgstr "Systembenachrichtigungen"
+#: mod/help.php:56 index.php:301
+msgid "Page not found."
+msgstr "Seite nicht gefunden."
 
-#: mod/oexchange.php:21
-msgid "Post successful."
-msgstr "Beitrag erfolgreich veröffentlicht."
+#: mod/home.php:39
+#, php-format
+msgid "Welcome to %s"
+msgstr "Willkommen zu %s"
 
-#: mod/openid.php:24
-msgid "OpenID protocol error. No ID returned."
-msgstr "OpenID Protokollfehler. Keine ID zurückgegeben."
+#: mod/invite.php:28
+msgid "Total invitation limit exceeded."
+msgstr "Limit für Einladungen erreicht."
 
-#: mod/openid.php:60
-msgid ""
-"Account not found and OpenID registration is not permitted on this site."
-msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."
+#: mod/invite.php:51
+#, php-format
+msgid "%s : Not a valid email address."
+msgstr "%s: Keine gültige Email Adresse."
 
-#: mod/ostatus_subscribe.php:14
-msgid "Subscribing to OStatus contacts"
-msgstr "OStatus Kontakten folgen"
+#: mod/invite.php:76
+msgid "Please join us on Friendica"
+msgstr "Ich lade Dich zu unserem sozialen Netzwerk Friendica ein"
 
-#: mod/ostatus_subscribe.php:25
-msgid "No contact provided."
-msgstr "Keine Kontakte gefunden."
+#: mod/invite.php:87
+msgid "Invitation limit exceeded. Please contact your site administrator."
+msgstr "Limit für Einladungen erreicht. Bitte kontaktiere des Administrator der Seite."
 
-#: mod/ostatus_subscribe.php:31
-msgid "Couldn't fetch information for contact."
-msgstr "Konnte die Kontaktinformationen nicht einholen."
+#: mod/invite.php:91
+#, php-format
+msgid "%s : Message delivery failed."
+msgstr "%s: Zustellung der Nachricht fehlgeschlagen."
 
-#: mod/ostatus_subscribe.php:40
-msgid "Couldn't fetch friends for contact."
-msgstr "Konnte die Kontaktliste des Kontakts nicht abfragen."
+#: mod/invite.php:95
+#, php-format
+msgid "%d message sent."
+msgid_plural "%d messages sent."
+msgstr[0] "%d Nachricht gesendet."
+msgstr[1] "%d Nachrichten gesendet."
 
-#: mod/ostatus_subscribe.php:54 mod/repair_ostatus.php:44
-msgid "Done"
-msgstr "Erledigt"
+#: mod/invite.php:114
+msgid "You have no more invitations available"
+msgstr "Du hast keine weiteren Einladungen"
 
-#: mod/ostatus_subscribe.php:68
-msgid "success"
-msgstr "Erfolg"
+#: mod/invite.php:122
+#, php-format
+msgid ""
+"Visit %s for a list of public sites that you can join. Friendica members on "
+"other sites can all connect with each other, as well as with members of many"
+" other social networks."
+msgstr "Besuche %s für eine Liste der öffentlichen Server, denen Du beitreten kannst. Friendica Mitglieder unterschiedlicher Server können sich sowohl alle miteinander verbinden, als auch mit Mitgliedern anderer Sozialer Netzwerke."
 
-#: mod/ostatus_subscribe.php:70
-msgid "failed"
-msgstr "Fehlgeschlagen"
+#: mod/invite.php:124
+#, php-format
+msgid ""
+"To accept this invitation, please visit and register at %s or any other "
+"public Friendica website."
+msgstr "Um diese Kontaktanfrage zu akzeptieren, besuche und registriere Dich bitte bei %s oder einer anderen öffentlichen Friendica Website."
 
-#: mod/ostatus_subscribe.php:78 mod/repair_ostatus.php:50
-msgid "Keep this window open until done."
-msgstr "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist."
+#: mod/invite.php:125
+#, php-format
+msgid ""
+"Friendica sites all inter-connect to create a huge privacy-enhanced social "
+"web that is owned and controlled by its members. They can also connect with "
+"many traditional social networks. See %s for a list of alternate Friendica "
+"sites you can join."
+msgstr "Friendica Server verbinden sich alle untereinander, um ein großes datenschutzorientiertes Soziales Netzwerk zu bilden, das von seinen Mitgliedern betrieben und kontrolliert wird. Sie können sich auch mit vielen üblichen Sozialen Netzwerken verbinden. Besuche %s für eine Liste alternativer Friendica Server, denen Du beitreten kannst."
 
-#: mod/poke.php:196
-msgid "Poke/Prod"
-msgstr "Anstupsen"
+#: mod/invite.php:128
+msgid ""
+"Our apologies. This system is not currently configured to connect with other"
+" public sites or invite members."
+msgstr "Es tut uns leid. Dieses System ist zurzeit nicht dafür konfiguriert, sich mit anderen öffentlichen Seiten zu verbinden oder Mitglieder einzuladen."
 
-#: mod/poke.php:197
-msgid "poke, prod or do other things to somebody"
-msgstr "Stupse Leute an oder mache anderes mit ihnen"
+#: mod/invite.php:134
+msgid "Send invitations"
+msgstr "Einladungen senden"
 
-#: mod/poke.php:198
-msgid "Recipient"
-msgstr "Empfänger"
+#: mod/invite.php:135
+msgid "Enter email addresses, one per line:"
+msgstr "E-Mail-Adressen eingeben, eine pro Zeile:"
 
-#: mod/poke.php:199
-msgid "Choose what you wish to do to recipient"
-msgstr "Was willst Du mit dem Empfänger machen:"
+#: mod/invite.php:136 mod/wallmessage.php:135 mod/message.php:332
+#: mod/message.php:515
+msgid "Your message:"
+msgstr "Deine Nachricht:"
 
-#: mod/poke.php:202
-msgid "Make this post private"
-msgstr "Diesen Beitrag privat machen"
+#: mod/invite.php:137
+msgid ""
+"You are cordially invited to join me and other close friends on Friendica - "
+"and help us to create a better social web."
+msgstr "Du bist herzlich dazu eingeladen, Dich mir und anderen guten Freunden auf Friendica anzuschließen - und ein besseres Soziales Netz aufzubauen."
 
-#: mod/profile.php:154 mod/cal.php:143 mod/display.php:328
-msgid "Access to this profile has been restricted."
-msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
+#: mod/invite.php:139
+msgid "You will need to supply this invitation code: $invite_code"
+msgstr "Du benötigst den folgenden Einladungscode: $invite_code"
 
-#: mod/profile.php:174
-msgid "Tips for New Members"
-msgstr "Tipps für neue Nutzer"
+#: mod/invite.php:139
+msgid ""
+"Once you have registered, please connect with me via my profile page at:"
+msgstr "Sobald Du registriert bist, kontaktiere mich bitte auf meiner Profilseite:"
 
-#: mod/profile_photo.php:44
-msgid "Image uploaded but image cropping failed."
-msgstr "Bild hochgeladen, aber das Zuschneiden schlug fehl."
+#: mod/invite.php:141
+msgid ""
+"For more information about the Friendica project and why we feel it is "
+"important, please visit http://friendica.com"
+msgstr "Für weitere Informationen über das Friendica Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendica.com"
 
-#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93
-#: mod/profile_photo.php:323
-#, php-format
-msgid "Image size reduction [%s] failed."
-msgstr "Verkleinern der Bildgröße von [%s] scheiterte."
+#: mod/localtime.php:24
+msgid "Time Conversion"
+msgstr "Zeitumrechnung"
 
-#: mod/profile_photo.php:127
+#: mod/localtime.php:26
 msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
-msgstr "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird."
-
-#: mod/profile_photo.php:137
-msgid "Unable to process image"
-msgstr "Bild konnte nicht verarbeitet werden"
+"Friendica provides this service for sharing events with other networks and "
+"friends in unknown timezones."
+msgstr "Friendica bietet diese Funktion an, um das Teilen von Events mit Kontakten zu vereinfachen, deren Zeitzone nicht ermittelt werden kann."
 
-#: mod/profile_photo.php:156 mod/wall_upload.php:151 mod/photos.php:803
+#: mod/localtime.php:30
 #, php-format
-msgid "Image exceeds size limit of %s"
-msgstr "Bildgröße überschreitet das Limit von %s"
+msgid "UTC time: %s"
+msgstr "UTC Zeit: %s"
 
-#: mod/profile_photo.php:165 mod/wall_upload.php:186 mod/photos.php:844
-msgid "Unable to process image."
-msgstr "Konnte das Bild nicht bearbeiten."
+#: mod/localtime.php:33
+#, php-format
+msgid "Current timezone: %s"
+msgstr "Aktuelle Zeitzone: %s"
 
-#: mod/profile_photo.php:254
-msgid "Upload File:"
-msgstr "Datei hochladen:"
+#: mod/localtime.php:36
+#, php-format
+msgid "Converted localtime: %s"
+msgstr "Umgerechnete lokale Zeit: %s"
 
-#: mod/profile_photo.php:255
-msgid "Select a profile:"
-msgstr "Profil auswählen:"
+#: mod/localtime.php:41
+msgid "Please select your timezone:"
+msgstr "Bitte wähle Deine Zeitzone:"
 
-#: mod/profile_photo.php:257
-msgid "Upload"
-msgstr "Hochladen"
+#: mod/lockview.php:32 mod/lockview.php:40
+msgid "Remote privacy information not available."
+msgstr "Entfernte Privatsphäreneinstellungen nicht verfügbar."
 
-#: mod/profile_photo.php:260
-msgid "or"
-msgstr "oder"
+#: mod/lockview.php:49
+msgid "Visible to:"
+msgstr "Sichtbar für:"
 
-#: mod/profile_photo.php:260
-msgid "skip this step"
-msgstr "diesen Schritt überspringen"
+#: mod/lostpass.php:19
+msgid "No valid account found."
+msgstr "Kein gültiges Konto gefunden."
 
-#: mod/profile_photo.php:260
-msgid "select a photo from your photo albums"
-msgstr "wähle ein Foto aus deinen Fotoalben"
+#: mod/lostpass.php:35
+msgid "Password reset request issued. Check your email."
+msgstr "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe Deine E-Mail."
 
-#: mod/profile_photo.php:274
-msgid "Crop Image"
-msgstr "Bild zurechtschneiden"
+#: mod/lostpass.php:41
+#, 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 "\nHallo %1$s,\n\nAuf \"%2$s\" ist eine Anfrage auf das Zurücksetzen Deines Passworts gestellt\nworden. Um diese Anfrage zu verifizieren, folge bitte dem unten stehenden\nLink oder kopiere und füge ihn in die Adressleiste Deines Browsers ein.\n\nSolltest Du die Anfrage NICHT gemacht haben, ignoriere und/oder lösche diese\nE-Mail bitte.\n\nDein Passwort wird nicht geändert, solange wir nicht verifiziert haben, dass\nDu diese Änderung angefragt hast."
 
-#: mod/profile_photo.php:275
-msgid "Please adjust the image cropping for optimum viewing."
-msgstr "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann."
+#: mod/lostpass.php:52
+#, 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 "\nUm Deine Identität zu verifizieren, folge bitte dem folgenden Link:\n\n%1$s\n\nDu wirst eine weitere E-Mail mit Deinem neuen Passwort erhalten. Sobald Du Dich\nangemeldet hast, kannst Du Dein Passwort in den Einstellungen ändern.\n\nDie Anmeldedetails sind die folgenden:\n\nAdresse der Seite:\t%2$s\nBenutzername:\t%3$s"
 
-#: mod/profile_photo.php:277
-msgid "Done Editing"
-msgstr "Bearbeitung abgeschlossen"
+#: mod/lostpass.php:71
+#, php-format
+msgid "Password reset requested at %s"
+msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"
 
-#: mod/profile_photo.php:313
-msgid "Image uploaded successfully."
-msgstr "Bild erfolgreich hochgeladen."
+#: mod/lostpass.php:91
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
+msgstr "Anfrage konnte nicht verifiziert werden. (Eventuell hast Du bereits eine ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."
 
-#: mod/profile_photo.php:315 mod/wall_upload.php:219 mod/photos.php:871
-msgid "Image upload failed."
-msgstr "Hochladen des Bildes gescheitert."
+#: mod/lostpass.php:110 boot.php:1882
+msgid "Password Reset"
+msgstr "Passwort zurücksetzen"
 
-#: mod/profperm.php:26 mod/profperm.php:57
-msgid "Invalid profile identifier."
-msgstr "Ungültiger Profil-Bezeichner."
+#: mod/lostpass.php:111
+msgid "Your password has been reset as requested."
+msgstr "Dein Passwort wurde wie gewünscht zurückgesetzt."
 
-#: mod/profperm.php:103
-msgid "Profile Visibility Editor"
-msgstr "Editor für die Profil-Sichtbarkeit"
+#: mod/lostpass.php:112
+msgid "Your new password is"
+msgstr "Dein neues Passwort lautet"
 
-#: mod/profperm.php:116
-msgid "Visible To"
-msgstr "Sichtbar für"
+#: mod/lostpass.php:113
+msgid "Save or copy your new password - and then"
+msgstr "Speichere oder kopiere Dein neues Passwort - und dann"
 
-#: mod/profperm.php:132
-msgid "All Contacts (with secure profile access)"
-msgstr "Alle Kontakte (mit gesichertem Profilzugriff)"
+#: mod/lostpass.php:114
+msgid "click here to login"
+msgstr "hier klicken, um Dich anzumelden"
 
-#: mod/register.php:93
+#: mod/lostpass.php:115
 msgid ""
-"Registration successful. Please check your email for further instructions."
-msgstr "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet."
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
+msgstr "Du kannst das Passwort in den <em>Einstellungen</em> ändern, sobald Du Dich erfolgreich angemeldet hast."
 
-#: mod/register.php:98
+#: mod/lostpass.php:125
 #, 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."
-msgstr "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern."
+"\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 "\nHallo %1$s,\n\nDein Passwort wurde wie gewünscht geändert. Bitte bewahre diese Informationen gut auf (oder ändere Dein Passwort in eines, das Du Dir leicht merken kannst)."
 
-#: mod/register.php:105
-msgid "Registration successful."
-msgstr "Registrierung erfolgreich."
+#: mod/lostpass.php:131
+#, php-format
+msgid ""
+"\n"
+"\t\t\t\tYour login details are as follows:\n"
+"\n"
+"\t\t\t\tSite Location:\t%1$s\n"
+"\t\t\t\tLogin Name:\t%2$s\n"
+"\t\t\t\tPassword:\t%3$s\n"
+"\n"
+"\t\t\t\tYou may change that password from your account settings page after logging in.\n"
+"\t\t\t"
+msgstr "\nDie Anmeldedaten sind die folgenden:\n\nAdresse der Seite: %1$s\nLogin Name: %2$s\nPasswort: %3$s\n\nDas Passwort kann und sollte in den Kontoeinstellungen nach der Anmeldung geändert werden."
 
-#: mod/register.php:111
-msgid "Your registration can not be processed."
-msgstr "Deine Registrierung konnte nicht verarbeitet werden."
+#: mod/lostpass.php:147
+#, php-format
+msgid "Your password has been changed at %s"
+msgstr "Auf %s wurde Dein Passwort geändert"
 
-#: mod/register.php:160
-msgid "Your registration is pending approval by the site owner."
-msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."
+#: mod/lostpass.php:159
+msgid "Forgot your Password?"
+msgstr "Hast Du Dein Passwort vergessen?"
 
-#: mod/register.php:198 mod/uimport.php:51
+#: mod/lostpass.php:160
 msgid ""
-"This site has exceeded the number of allowed daily account registrations. "
-"Please try again tomorrow."
-msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr "Gib Deine E-Mail-Adresse an und fordere ein neues Passwort an. Es werden Dir dann weitere Informationen per Mail zugesendet."
 
-#: mod/register.php:226
-msgid ""
-"You may (optionally) fill in this form via OpenID by supplying your OpenID "
-"and clicking 'Register'."
-msgstr "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst."
+#: mod/lostpass.php:161 boot.php:1870
+msgid "Nickname or Email: "
+msgstr "Spitzname oder E-Mail:"
 
-#: mod/register.php:227
-msgid ""
-"If you are not familiar with OpenID, please leave that field blank and fill "
-"in the rest of the items."
-msgstr "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus."
+#: mod/lostpass.php:162
+msgid "Reset"
+msgstr "Zurücksetzen"
 
-#: mod/register.php:228
-msgid "Your OpenID (optional): "
-msgstr "Deine OpenID (optional): "
+#: mod/maintenance.php:20
+msgid "System down for maintenance"
+msgstr "System zur Wartung abgeschaltet"
 
-#: mod/register.php:242
-msgid "Include your profile in member directory?"
-msgstr "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?"
+#: mod/match.php:35
+msgid "No keywords to match. Please add keywords to your default profile."
+msgstr "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu."
 
-#: mod/register.php:267
-msgid "Note for the admin"
-msgstr "Hinweis für den Admin"
+#: mod/match.php:88
+msgid "is interested in:"
+msgstr "ist interessiert an:"
 
-#: mod/register.php:267
-msgid "Leave a message for the admin, why you want to join this node"
-msgstr "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest."
+#: mod/match.php:102
+msgid "Profile Match"
+msgstr "Profilübereinstimmungen"
 
-#: mod/register.php:268
-msgid "Membership on this site is by invitation only."
-msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich."
+#: mod/match.php:109 mod/dirfind.php:245
+msgid "No matches"
+msgstr "Keine Übereinstimmungen"
 
-#: mod/register.php:269
-msgid "Your invitation ID: "
-msgstr "ID Deiner Einladung: "
+#: mod/mood.php:134
+msgid "Mood"
+msgstr "Stimmung"
 
-#: mod/register.php:272 mod/admin.php:977
-msgid "Registration"
-msgstr "Registrierung"
+#: mod/mood.php:135
+msgid "Set your current mood and tell your friends"
+msgstr "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten"
 
-#: mod/register.php:280
-msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
-msgstr "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):"
+#: mod/newmember.php:6
+msgid "Welcome to Friendica"
+msgstr "Willkommen bei Friendica"
 
-#: mod/register.php:281
-msgid "Your Email Address: "
-msgstr "Deine E-Mail-Adresse: "
+#: mod/newmember.php:8
+msgid "New Member Checklist"
+msgstr "Checkliste für neue Mitglieder"
 
-#: mod/register.php:283 mod/settings.php:1278
-msgid "New Password:"
-msgstr "Neues Passwort:"
+#: mod/newmember.php:12
+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 "Wir möchten Dir einige Tipps und Links anbieten, die Dir helfen könnten, den Einstieg angenehmer zu machen. Klicke auf ein Element, um die entsprechende Seite zu besuchen. Ein Link zu dieser Seite hier bleibt für Dich an Deiner Pinnwand für zwei Wochen nach dem Registrierungsdatum sichtbar und wird dann verschwinden."
 
-#: mod/register.php:283
-msgid "Leave empty for an auto generated password."
-msgstr "Leer lassen um das Passwort automatisch zu generieren."
+#: mod/newmember.php:14
+msgid "Getting Started"
+msgstr "Einstieg"
 
-#: mod/register.php:284 mod/settings.php:1279
-msgid "Confirm:"
-msgstr "Bestätigen:"
+#: mod/newmember.php:18
+msgid "Friendica Walk-Through"
+msgstr "Friendica Rundgang"
 
-#: mod/register.php:285
+#: mod/newmember.php:18
 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>'."
-msgstr "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@$sitename</strong>' sein."
-
-#: mod/register.php:286
-msgid "Choose a nickname: "
-msgstr "Spitznamen wählen: "
+"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 "Auf der <em>Quick Start</em> Seite findest Du eine kurze Einleitung in die einzelnen Funktionen Deines Profils und die Netzwerk-Reiter, wo Du interessante Foren findest und neue Kontakte knüpfst."
 
-#: mod/register.php:295 mod/uimport.php:66
-msgid "Import"
-msgstr "Import"
+#: mod/newmember.php:26
+msgid "Go to Your Settings"
+msgstr "Gehe zu deinen Einstellungen"
 
-#: mod/register.php:296
-msgid "Import your profile to this friendica instance"
-msgstr "Importiere Dein Profil auf diese Friendica Instanz"
+#: mod/newmember.php:26
+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 "Ändere bitte unter <em>Einstellungen</em> dein Passwort. Außerdem merke dir deine Identifikationsadresse. Diese sieht aus wie eine E-Mail-Adresse und wird benötigt, um Kontakte mit anderen im Friendica Netzwerk zu knüpfen.."
 
-#: mod/regmod.php:58
-msgid "Account approved."
-msgstr "Konto freigegeben."
+#: mod/newmember.php:28
+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 "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn Du Dein Profil nicht veröffentlichst, ist das als wenn Du Deine Telefonnummer nicht ins Telefonbuch einträgst. Im Allgemeinen solltest Du es veröffentlichen - außer all Deine Kontakte und potentiellen Kontakte wissen genau, wie sie Dich finden können."
 
-#: mod/regmod.php:95
-#, php-format
-msgid "Registration revoked for %s"
-msgstr "Registrierung für %s wurde zurückgezogen"
+#: mod/newmember.php:36 mod/profile_photo.php:256 mod/profiles.php:700
+msgid "Upload Profile Photo"
+msgstr "Profilbild hochladen"
 
-#: mod/regmod.php:107
-msgid "Please login."
-msgstr "Bitte melde Dich an."
+#: mod/newmember.php:36
+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 "Lade ein Profilbild hoch, falls Du es noch nicht getan hast. Studien haben gezeigt, dass es zehnmal wahrscheinlicher ist neue Kontakte zu finden, wenn Du ein Bild von Dir selbst verwendest, als wenn Du dies nicht tust."
 
-#: mod/removeme.php:52 mod/removeme.php:55
-msgid "Remove My Account"
-msgstr "Konto löschen"
+#: mod/newmember.php:38
+msgid "Edit Your Profile"
+msgstr "Editiere dein Profil"
 
-#: mod/removeme.php:53
+#: mod/newmember.php:38
 msgid ""
-"This will completely remove your account. Once this has been done it is not "
-"recoverable."
-msgstr "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen."
+"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 "Editiere Dein <strong>Standard</strong> Profil nach Deinen Vorlieben. Überprüfe die Einstellungen zum Verbergen Deiner Kontaktliste vor unbekannten Betrachtern des Profils."
 
-#: mod/removeme.php:54
-msgid "Please enter your password for verification:"
-msgstr "Bitte gib Dein Passwort zur Verifikation ein:"
+#: mod/newmember.php:40
+msgid "Profile Keywords"
+msgstr "Profil Schlüsselbegriffe"
 
-#: mod/repair_ostatus.php:14
-msgid "Resubscribing to OStatus contacts"
-msgstr "Erneuern der OStatus Abonements"
+#: mod/newmember.php:40
+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 "Trage ein paar öffentliche Stichwörter in Dein Standardprofil ein, die Deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die Deine Interessen teilen und können Dir dann Kontakte vorschlagen."
 
-#: mod/repair_ostatus.php:30
-msgid "Error"
-msgstr "Fehler"
+#: mod/newmember.php:44
+msgid "Connecting"
+msgstr "Verbindungen knüpfen"
 
-#: mod/settings.php:36 mod/photos.php:107
-msgid "everybody"
-msgstr "jeder"
+#: mod/newmember.php:51
+msgid "Importing Emails"
+msgstr "Emails Importieren"
 
-#: mod/settings.php:43 mod/admin.php:1417
-msgid "Account"
-msgstr "Nutzerkonto"
+#: mod/newmember.php:51
+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"
+msgstr "Gib Deine E-Mail-Zugangsinformationen auf der Connector-Einstellungsseite ein, falls Du E-Mails aus Deinem Posteingang importieren und mit Kontakten und Mailinglisten interagieren willst."
 
-#: mod/settings.php:52 mod/admin.php:161
-msgid "Additional features"
-msgstr "Zusätzliche Features"
+#: mod/newmember.php:53
+msgid "Go to Your Contacts Page"
+msgstr "Gehe zu deiner Kontakt-Seite"
 
-#: mod/settings.php:60
-msgid "Display"
-msgstr "Anzeige"
+#: mod/newmember.php:53
+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 "Die Kontakte-Seite ist die Einstiegsseite, von der aus Du Kontakte verwalten und Dich mit Personen in anderen Netzwerken verbinden kannst. Normalerweise gibst Du dazu einfach ihre Adresse oder die URL der Seite im Kasten <em>Neuen Kontakt hinzufügen</em> ein."
 
-#: mod/settings.php:67 mod/settings.php:890
-msgid "Social Networks"
-msgstr "Soziale Netzwerke"
+#: mod/newmember.php:55
+msgid "Go to Your Site's Directory"
+msgstr "Gehe zum Verzeichnis Deiner Friendica Instanz"
 
-#: mod/settings.php:74 mod/admin.php:159 mod/admin.php:1543 mod/admin.php:1606
-msgid "Plugins"
-msgstr "Plugins"
+#: mod/newmember.php:55
+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."
+msgstr "Über die Verzeichnisseite kannst Du andere Personen auf diesem Server oder anderen verknüpften Seiten finden. Halte nach einem <em>Verbinden</em> oder <em>Folgen</em> Link auf deren Profilseiten Ausschau und gib Deine eigene Profiladresse an, falls Du danach gefragt wirst."
 
-#: mod/settings.php:88
-msgid "Connected apps"
-msgstr "Verbundene Programme"
+#: mod/newmember.php:57
+msgid "Finding New People"
+msgstr "Neue Leute kennenlernen"
 
-#: mod/settings.php:95 mod/uexport.php:45
-msgid "Export personal data"
-msgstr "Persönliche Daten exportieren"
+#: mod/newmember.php:57
+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 "Im seitlichen Bedienfeld der Kontakteseite gibt es diverse Werkzeuge, um neue Personen zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Leute vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden."
 
-#: mod/settings.php:102
-msgid "Remove account"
-msgstr "Konto löschen"
+#: mod/newmember.php:65
+msgid "Group Your Contacts"
+msgstr "Gruppiere deine Kontakte"
 
-#: mod/settings.php:157
-msgid "Missing some important data!"
-msgstr "Wichtige Daten fehlen!"
+#: mod/newmember.php:65
+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 "Sobald Du einige Kontakte gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren."
 
-#: mod/settings.php:160 mod/settings.php:707 mod/contacts.php:812
-msgid "Update"
-msgstr "Aktualisierungen"
+#: mod/newmember.php:68
+msgid "Why Aren't My Posts Public?"
+msgstr "Warum sind meine Beiträge nicht öffentlich?"
 
-#: mod/settings.php:271
-msgid "Failed to connect with email account using the settings provided."
-msgstr "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich."
+#: mod/newmember.php:68
+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 "Friendica respektiert Deine Privatsphäre. Mit der Grundeinstellung werden Deine Beiträge ausschließlich Deinen Kontakten angezeigt. Für weitere Informationen diesbezüglich lies Dir bitte den entsprechenden Abschnitt in der Hilfe unter dem obigen Link durch."
 
-#: mod/settings.php:276
-msgid "Email settings updated."
-msgstr "E-Mail Einstellungen bearbeitet."
+#: mod/newmember.php:73
+msgid "Getting Help"
+msgstr "Hilfe bekommen"
 
-#: mod/settings.php:291
-msgid "Features updated"
-msgstr "Features aktualisiert"
+#: mod/newmember.php:77
+msgid "Go to the Help Section"
+msgstr "Zum Hilfe Abschnitt gehen"
 
-#: mod/settings.php:361
-msgid "Relocate message has been send to your contacts"
-msgstr "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet."
+#: mod/newmember.php:77
+msgid ""
+"Our <strong>help</strong> pages may be consulted for detail on other program"
+" features and resources."
+msgstr "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten."
 
-#: mod/settings.php:380
-msgid "Empty passwords are not allowed. Password unchanged."
-msgstr "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert."
+#: mod/nogroup.php:65
+msgid "Contacts who are not members of a group"
+msgstr "Kontakte, die keiner Gruppe zugewiesen sind"
 
-#: mod/settings.php:388
-msgid "Wrong password."
-msgstr "Falsches Passwort."
+#: mod/notify.php:65
+msgid "No more system notifications."
+msgstr "Keine weiteren Systembenachrichtigungen."
 
-#: mod/settings.php:399
-msgid "Password changed."
-msgstr "Passwort geändert."
+#: mod/notify.php:69 mod/notifications.php:111
+msgid "System Notifications"
+msgstr "Systembenachrichtigungen"
 
-#: mod/settings.php:401
-msgid "Password update failed. Please try again."
-msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
+#: mod/oexchange.php:21
+msgid "Post successful."
+msgstr "Beitrag erfolgreich veröffentlicht."
 
-#: mod/settings.php:481
-msgid " Please use a shorter name."
-msgstr " Bitte verwende einen kürzeren Namen."
+#: mod/ostatus_subscribe.php:14
+msgid "Subscribing to OStatus contacts"
+msgstr "OStatus Kontakten folgen"
 
-#: mod/settings.php:483
-msgid " Name too short."
-msgstr " Name ist zu kurz."
+#: mod/ostatus_subscribe.php:25
+msgid "No contact provided."
+msgstr "Keine Kontakte gefunden."
 
-#: mod/settings.php:492
-msgid "Wrong Password"
-msgstr "Falsches Passwort"
+#: mod/ostatus_subscribe.php:31
+msgid "Couldn't fetch information for contact."
+msgstr "Konnte die Kontaktinformationen nicht einholen."
 
-#: mod/settings.php:497
-msgid " Not valid email."
-msgstr " Keine gültige E-Mail."
+#: mod/ostatus_subscribe.php:40
+msgid "Couldn't fetch friends for contact."
+msgstr "Konnte die Kontaktliste des Kontakts nicht abfragen."
 
-#: mod/settings.php:503
-msgid " Cannot change to that email."
-msgstr "Ändern der E-Mail nicht möglich. "
+#: mod/ostatus_subscribe.php:54 mod/repair_ostatus.php:44
+msgid "Done"
+msgstr "Erledigt"
 
-#: mod/settings.php:559
-msgid "Private forum has no privacy permissions. Using default privacy group."
-msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt."
+#: mod/ostatus_subscribe.php:68
+msgid "success"
+msgstr "Erfolg"
 
-#: mod/settings.php:563
-msgid "Private forum has no privacy permissions and no default privacy group."
-msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte."
+#: mod/ostatus_subscribe.php:70
+msgid "failed"
+msgstr "Fehlgeschlagen"
 
-#: mod/settings.php:603
-msgid "Settings updated."
-msgstr "Einstellungen aktualisiert."
+#: mod/ostatus_subscribe.php:78 mod/repair_ostatus.php:50
+msgid "Keep this window open until done."
+msgstr "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist."
 
-#: mod/settings.php:680 mod/settings.php:706 mod/settings.php:742
-msgid "Add application"
-msgstr "Programm hinzufügen"
+#: mod/p.php:9
+msgid "Not Extended"
+msgstr "Nicht erweitert."
 
-#: mod/settings.php:681 mod/settings.php:792 mod/settings.php:841
-#: mod/settings.php:908 mod/settings.php:1005 mod/settings.php:1271
-#: mod/admin.php:976 mod/admin.php:1607 mod/admin.php:1864 mod/admin.php:1938
-#: mod/admin.php:2088
-msgid "Save Settings"
-msgstr "Einstellungen speichern"
+#: mod/poke.php:196
+msgid "Poke/Prod"
+msgstr "Anstupsen"
 
-#: mod/settings.php:684 mod/settings.php:710
-msgid "Consumer Key"
-msgstr "Consumer Key"
+#: mod/poke.php:197
+msgid "poke, prod or do other things to somebody"
+msgstr "Stupse Leute an oder mache anderes mit ihnen"
 
-#: mod/settings.php:685 mod/settings.php:711
-msgid "Consumer Secret"
-msgstr "Consumer Secret"
+#: mod/poke.php:198
+msgid "Recipient"
+msgstr "Empfänger"
 
-#: mod/settings.php:686 mod/settings.php:712
-msgid "Redirect"
-msgstr "Umleiten"
+#: mod/poke.php:199
+msgid "Choose what you wish to do to recipient"
+msgstr "Was willst Du mit dem Empfänger machen:"
 
-#: mod/settings.php:687 mod/settings.php:713
-msgid "Icon url"
-msgstr "Icon URL"
+#: mod/poke.php:202
+msgid "Make this post private"
+msgstr "Diesen Beitrag privat machen"
 
-#: mod/settings.php:698
-msgid "You can't edit this application."
-msgstr "Du kannst dieses Programm nicht bearbeiten."
+#: mod/profile_photo.php:44
+msgid "Image uploaded but image cropping failed."
+msgstr "Bild hochgeladen, aber das Zuschneiden schlug fehl."
 
-#: mod/settings.php:741
-msgid "Connected Apps"
-msgstr "Verbundene Programme"
+#: mod/profile_photo.php:77 mod/profile_photo.php:85 mod/profile_photo.php:93
+#: mod/profile_photo.php:323
+#, php-format
+msgid "Image size reduction [%s] failed."
+msgstr "Verkleinern der Bildgröße von [%s] scheiterte."
 
-#: mod/settings.php:745
-msgid "Client key starts with"
-msgstr "Anwenderschlüssel beginnt mit"
+#: mod/profile_photo.php:127
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
+msgstr "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird."
 
-#: mod/settings.php:746
-msgid "No name"
-msgstr "Kein Name"
+#: mod/profile_photo.php:137
+msgid "Unable to process image"
+msgstr "Bild konnte nicht verarbeitet werden"
 
-#: mod/settings.php:747
-msgid "Remove authorization"
-msgstr "Autorisierung entziehen"
+#: mod/profile_photo.php:156 mod/photos.php:813 mod/wall_upload.php:181
+#, php-format
+msgid "Image exceeds size limit of %s"
+msgstr "Bildgröße überschreitet das Limit von %s"
 
-#: mod/settings.php:759
-msgid "No Plugin settings configured"
-msgstr "Keine Plugin-Einstellungen konfiguriert"
+#: mod/profile_photo.php:165 mod/photos.php:854 mod/wall_upload.php:218
+msgid "Unable to process image."
+msgstr "Konnte das Bild nicht bearbeiten."
 
-#: mod/settings.php:768
-msgid "Plugin Settings"
-msgstr "Plugin-Einstellungen"
+#: mod/profile_photo.php:254
+msgid "Upload File:"
+msgstr "Datei hochladen:"
 
-#: mod/settings.php:782 mod/admin.php:2077 mod/admin.php:2078
-msgid "Off"
-msgstr "Aus"
+#: mod/profile_photo.php:255
+msgid "Select a profile:"
+msgstr "Profil auswählen:"
 
-#: mod/settings.php:782 mod/admin.php:2077 mod/admin.php:2078
-msgid "On"
-msgstr "An"
+#: mod/profile_photo.php:257
+msgid "Upload"
+msgstr "Hochladen"
 
-#: mod/settings.php:790
-msgid "Additional Features"
-msgstr "Zusätzliche Features"
+#: mod/profile_photo.php:260
+msgid "or"
+msgstr "oder"
 
-#: mod/settings.php:800 mod/settings.php:804
-msgid "General Social Media Settings"
-msgstr "Allgemeine Einstellungen zu Sozialen Medien"
+#: mod/profile_photo.php:260
+msgid "skip this step"
+msgstr "diesen Schritt überspringen"
 
-#: mod/settings.php:810
-msgid "Disable intelligent shortening"
-msgstr "Intelligentes Link kürzen ausschalten"
+#: mod/profile_photo.php:260
+msgid "select a photo from your photo albums"
+msgstr "wähle ein Foto aus deinen Fotoalben"
 
-#: mod/settings.php:812
-msgid ""
-"Normally the system tries to find the best link to add to shortened posts. "
-"If this option is enabled then every shortened post will always point to the"
-" original friendica post."
-msgstr "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt."
+#: mod/profile_photo.php:274
+msgid "Crop Image"
+msgstr "Bild zurechtschneiden"
 
-#: mod/settings.php:818
-msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
-msgstr "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen"
+#: mod/profile_photo.php:275
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr "Passe bitte den Bildausschnitt an, damit das Bild optimal dargestellt werden kann."
 
-#: mod/settings.php:820
-msgid ""
-"If you receive a message from an unknown OStatus user, this option decides "
-"what to do. If it is checked, a new contact will be created for every "
-"unknown user."
-msgstr "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,."
+#: mod/profile_photo.php:277
+msgid "Done Editing"
+msgstr "Bearbeitung abgeschlossen"
 
-#: mod/settings.php:826
-msgid "Default group for OStatus contacts"
-msgstr "Voreingestellte Gruppe für OStatus Kontakte"
+#: mod/profile_photo.php:313
+msgid "Image uploaded successfully."
+msgstr "Bild erfolgreich hochgeladen."
 
-#: mod/settings.php:834
-msgid "Your legacy GNU Social account"
-msgstr "Dein alter GNU Social Account"
+#: mod/profile_photo.php:315 mod/photos.php:883 mod/wall_upload.php:257
+msgid "Image upload failed."
+msgstr "Hochladen des Bildes gescheitert."
 
-#: mod/settings.php:836
-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 "Wenn du deinen alten GNU Socual/Statusnet Accountnamen hier angibst (Format name@domain.tld) werden deine Kontakte automatisch hinzugefügt. Dieses Feld wird geleert, wenn die Kontakte hinzugefügt wurden."
+#: mod/profperm.php:20 mod/group.php:76 index.php:406
+msgid "Permission denied"
+msgstr "Zugriff verweigert"
 
-#: mod/settings.php:839
-msgid "Repair OStatus subscriptions"
-msgstr "OStatus Abonnements reparieren"
+#: mod/profperm.php:26 mod/profperm.php:57
+msgid "Invalid profile identifier."
+msgstr "Ungültiger Profil-Bezeichner."
 
-#: mod/settings.php:848 mod/settings.php:849
-#, php-format
-msgid "Built-in support for %s connectivity is %s"
-msgstr "Eingebaute Unterstützung für Verbindungen zu %s ist %s"
+#: mod/profperm.php:103
+msgid "Profile Visibility Editor"
+msgstr "Editor für die Profil-Sichtbarkeit"
 
-#: mod/settings.php:848 mod/settings.php:849
-msgid "enabled"
-msgstr "eingeschaltet"
+#: mod/profperm.php:107 mod/group.php:262
+msgid "Click on a contact to add or remove."
+msgstr "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen"
 
-#: mod/settings.php:848 mod/settings.php:849
-msgid "disabled"
-msgstr "ausgeschaltet"
+#: mod/profperm.php:116
+msgid "Visible To"
+msgstr "Sichtbar für"
 
-#: mod/settings.php:849
-msgid "GNU Social (OStatus)"
-msgstr "GNU Social (OStatus)"
+#: mod/profperm.php:132
+msgid "All Contacts (with secure profile access)"
+msgstr "Alle Kontakte (mit gesichertem Profilzugriff)"
 
-#: mod/settings.php:883
-msgid "Email access is disabled on this site."
-msgstr "Zugriff auf E-Mails für diese Seite deaktiviert."
+#: mod/regmod.php:58
+msgid "Account approved."
+msgstr "Konto freigegeben."
 
-#: mod/settings.php:895
-msgid "Email/Mailbox Setup"
-msgstr "E-Mail/Postfach-Einstellungen"
+#: mod/regmod.php:95
+#, php-format
+msgid "Registration revoked for %s"
+msgstr "Registrierung für %s wurde zurückgezogen"
 
-#: mod/settings.php:896
-msgid ""
-"If you wish to communicate with email contacts using this service "
-"(optional), please specify how to connect to your mailbox."
-msgstr "Wenn Du mit E-Mail-Kontakten über diesen Service kommunizieren möchtest (optional), gib bitte die Einstellungen für Dein Postfach an."
+#: mod/regmod.php:107
+msgid "Please login."
+msgstr "Bitte melde Dich an."
 
-#: mod/settings.php:897
-msgid "Last successful email check:"
-msgstr "Letzter erfolgreicher E-Mail Check"
+#: mod/removeme.php:52 mod/removeme.php:55
+msgid "Remove My Account"
+msgstr "Konto löschen"
 
-#: mod/settings.php:899
-msgid "IMAP server name:"
-msgstr "IMAP-Server-Name:"
+#: mod/removeme.php:53
+msgid ""
+"This will completely remove your account. Once this has been done it is not "
+"recoverable."
+msgstr "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen."
 
-#: mod/settings.php:900
-msgid "IMAP port:"
-msgstr "IMAP-Port:"
+#: mod/removeme.php:54
+msgid "Please enter your password for verification:"
+msgstr "Bitte gib Dein Passwort zur Verifikation ein:"
 
-#: mod/settings.php:901
-msgid "Security:"
-msgstr "Sicherheit:"
+#: mod/repair_ostatus.php:14
+msgid "Resubscribing to OStatus contacts"
+msgstr "Erneuern der OStatus Abonements"
 
-#: mod/settings.php:901 mod/settings.php:906
-msgid "None"
-msgstr "Keine"
+#: mod/repair_ostatus.php:30
+msgid "Error"
+msgstr "Fehler"
 
-#: mod/settings.php:902
-msgid "Email login name:"
-msgstr "E-Mail-Login-Name:"
+#: mod/subthread.php:104
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
+msgstr "%1$s folgt %2$s %3$s"
 
-#: mod/settings.php:903
-msgid "Email password:"
-msgstr "E-Mail-Passwort:"
+#: mod/suggest.php:27
+msgid "Do you really want to delete this suggestion?"
+msgstr "Möchtest Du wirklich diese Empfehlung löschen?"
 
-#: mod/settings.php:904
-msgid "Reply-to address:"
-msgstr "Reply-to Adresse:"
+#: mod/suggest.php:71
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
+msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."
 
-#: mod/settings.php:905
-msgid "Send public posts to all email contacts:"
-msgstr "Sende öffentliche Beiträge an alle E-Mail-Kontakte:"
+#: mod/suggest.php:84 mod/suggest.php:104
+msgid "Ignore/Hide"
+msgstr "Ignorieren/Verbergen"
 
-#: mod/settings.php:906
-msgid "Action after import:"
-msgstr "Aktion nach Import:"
+#: mod/tagrm.php:43
+msgid "Tag removed"
+msgstr "Tag entfernt"
 
-#: mod/settings.php:906
-msgid "Move to folder"
-msgstr "In einen Ordner verschieben"
+#: mod/tagrm.php:82
+msgid "Remove Item Tag"
+msgstr "Gegenstands-Tag entfernen"
 
-#: mod/settings.php:907
-msgid "Move to folder:"
-msgstr "In diesen Ordner verschieben:"
+#: mod/tagrm.php:84
+msgid "Select a tag to remove: "
+msgstr "Wähle ein Tag zum Entfernen aus: "
 
-#: mod/settings.php:943 mod/admin.php:863
-msgid "No special theme for mobile devices"
-msgstr "Kein spezielles Theme für mobile Geräte verwenden."
+#: mod/uimport.php:51 mod/register.php:198
+msgid ""
+"This site has exceeded the number of allowed daily account registrations. "
+"Please try again tomorrow."
+msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."
 
-#: mod/settings.php:1003
-msgid "Display Settings"
-msgstr "Anzeige-Einstellungen"
+#: mod/uimport.php:66 mod/register.php:295
+msgid "Import"
+msgstr "Import"
 
-#: mod/settings.php:1009 mod/settings.php:1032
-msgid "Display Theme:"
-msgstr "Theme:"
+#: mod/uimport.php:68
+msgid "Move account"
+msgstr "Account umziehen"
 
-#: mod/settings.php:1010
-msgid "Mobile Theme:"
-msgstr "Mobiles Theme"
+#: mod/uimport.php:69
+msgid "You can import an account from another Friendica server."
+msgstr "Du kannst einen Account von einem anderen Friendica Server importieren."
 
-#: mod/settings.php:1011
-msgid "Suppress warning of insecure networks"
-msgstr "Warnung wegen unsicheren Netzwerken unterdrücken"
+#: mod/uimport.php:70
+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 "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist."
 
-#: mod/settings.php:1011
+#: mod/uimport.php:71
 msgid ""
-"Should the system suppress the warning that the current group contains "
-"members of networks that can't receive non public postings."
-msgstr "Soll das System Warnungen unterdrücken, die angezeigt werden weil von dir eingerichtete Kontakt-Gruppen Accounts aus Netzwerken beinhalten, die keine nicht öffentlichen Beiträge empfangen können."
+"This feature is experimental. We can't import contacts from the OStatus "
+"network (GNU Social/Statusnet) or from Diaspora"
+msgstr "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren"
 
-#: mod/settings.php:1012
-msgid "Update browser every xx seconds"
-msgstr "Browser alle xx Sekunden aktualisieren"
+#: mod/uimport.php:72
+msgid "Account file"
+msgstr "Account Datei"
 
-#: mod/settings.php:1012
-msgid "Minimum of 10 seconds. Enter -1 to disable it."
-msgstr "Minimum sind 10 Sekunden. Gib -1 ein um abzuschalten."
+#: mod/uimport.php:72
+msgid ""
+"To export your account, go to \"Settings->Export your personal data\" and "
+"select \"Export account\""
+msgstr "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\""
 
-#: mod/settings.php:1013
-msgid "Number of items to display per page:"
-msgstr "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: "
+#: mod/update_community.php:19 mod/update_display.php:23
+#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35
+msgid "[Embedded content - reload page to view]"
+msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"
 
-#: mod/settings.php:1013 mod/settings.php:1014
-msgid "Maximum of 100 items"
-msgstr "Maximal 100 Beiträge"
+#: mod/viewcontacts.php:75
+msgid "No contacts."
+msgstr "Keine Kontakte."
 
-#: mod/settings.php:1014
-msgid "Number of items to display per page when viewed from mobile device:"
-msgstr "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:"
+#: mod/viewsrc.php:7
+msgid "Access denied."
+msgstr "Zugriff verweigert."
 
-#: mod/settings.php:1015
-msgid "Don't show emoticons"
-msgstr "Keine Smilies anzeigen"
+#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76
+#: 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."
+msgstr "Ungültige Anfrage"
 
-#: mod/settings.php:1016
-msgid "Calendar"
-msgstr "Kalender"
+#: mod/wall_attach.php:94
+msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
+msgstr "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt."
 
-#: mod/settings.php:1017
-msgid "Beginning of week:"
-msgstr "Wochenbeginn:"
+#: mod/wall_attach.php:94
+msgid "Or - did you try to upload an empty file?"
+msgstr "Oder - hast Du versucht, eine leere Datei hochzuladen?"
 
-#: mod/settings.php:1018
-msgid "Don't show notices"
-msgstr "Info-Popups nicht anzeigen"
+#: mod/wall_attach.php:105
+#, php-format
+msgid "File exceeds size limit of %s"
+msgstr "Die Datei ist größer als das erlaubte Limit von %s"
 
-#: mod/settings.php:1019
-msgid "Infinite scroll"
-msgstr "Endloses Scrollen"
+#: mod/wall_attach.php:158 mod/wall_attach.php:174
+msgid "File upload failed."
+msgstr "Hochladen der Datei fehlgeschlagen."
 
-#: mod/settings.php:1020
-msgid "Automatic updates only at the top of the network page"
-msgstr "Automatische Updates nur, wenn Du oben auf der Netzwerkseite bist."
+#: mod/wallmessage.php:42 mod/wallmessage.php:106
+#, php-format
+msgid "Number of daily wall messages for %s exceeded. Message failed."
+msgstr "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen."
 
-#: mod/settings.php:1021
-msgid "Bandwith Saver Mode"
-msgstr "Bandbreiten-Spar-Modus"
+#: mod/wallmessage.php:50 mod/message.php:60
+msgid "No recipient selected."
+msgstr "Kein Empfänger gewählt."
 
-#: mod/settings.php:1021
-msgid ""
-"When enabled, embedded content is not displayed on automatic updates, they "
-"only show on page reload."
-msgstr "Wenn aktiviert, wird der eingebettete Inhalt nicht automatisch aktualisiert. In diesem Fall Seite bitte neu laden."
+#: mod/wallmessage.php:53
+msgid "Unable to check your home location."
+msgstr "Konnte Deinen Heimatort nicht bestimmen."
 
-#: mod/settings.php:1023
-msgid "General Theme Settings"
-msgstr "Allgemeine Themeneinstellungen"
+#: mod/wallmessage.php:56 mod/message.php:67
+msgid "Message could not be sent."
+msgstr "Nachricht konnte nicht gesendet werden."
 
-#: mod/settings.php:1024
-msgid "Custom Theme Settings"
-msgstr "Benutzerdefinierte Theme Einstellungen"
+#: mod/wallmessage.php:59 mod/message.php:70
+msgid "Message collection failure."
+msgstr "Konnte Nachrichten nicht abrufen."
 
-#: mod/settings.php:1025
-msgid "Content Settings"
-msgstr "Einstellungen zum Inhalt"
+#: mod/wallmessage.php:62 mod/message.php:73
+msgid "Message sent."
+msgstr "Nachricht gesendet."
 
-#: mod/settings.php:1026 view/theme/quattro/config.php:69
-#: view/theme/vier/config.php:114 view/theme/duepuntozero/config.php:63
-#: view/theme/clean/config.php:89 view/theme/frio/config.php:66
-msgid "Theme settings"
-msgstr "Themeneinstellungen"
+#: mod/wallmessage.php:80 mod/wallmessage.php:89
+msgid "No recipient."
+msgstr "Kein Empfänger."
 
-#: mod/settings.php:1110
-msgid "Account Types"
-msgstr "Kontenarten"
+#: mod/wallmessage.php:126 mod/message.php:322
+msgid "Send Private Message"
+msgstr "Private Nachricht senden"
 
-#: mod/settings.php:1111
-msgid "Personal Page Subtypes"
-msgstr "Unterarten der persönlichen Seite"
+#: mod/wallmessage.php:127
+#, 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 "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."
 
-#: mod/settings.php:1112
-msgid "Community Forum Subtypes"
-msgstr "Unterarten des Gemeinschaftsforums"
+#: mod/wallmessage.php:128 mod/message.php:323 mod/message.php:510
+msgid "To:"
+msgstr "An:"
 
-#: mod/settings.php:1119
-msgid "Personal Page"
-msgstr "Persönliche Seite"
+#: mod/wallmessage.php:129 mod/message.php:328 mod/message.php:512
+msgid "Subject:"
+msgstr "Betreff:"
 
-#: mod/settings.php:1120
-msgid "This account is a regular personal profile"
-msgstr "Dieses Konto ist ein normales persönliches Profil"
+#: mod/babel.php:16
+msgid "Source (bbcode) text:"
+msgstr "Quelle (bbcode) Text:"
 
-#: mod/settings.php:1123
-msgid "Organisation Page"
-msgstr "Organisationsseite"
+#: mod/babel.php:23
+msgid "Source (Diaspora) text to convert to BBcode:"
+msgstr "Eingabe (Diaspora) nach BBCode zu konvertierender Text:"
 
-#: mod/settings.php:1124
-msgid "This account is a profile for an organisation"
-msgstr "Diese Konto ist ein Profil für eine Organisation"
+#: mod/babel.php:31
+msgid "Source input: "
+msgstr "Originaltext:"
 
-#: mod/settings.php:1127
-msgid "News Page"
-msgstr "Nachrichtenseite"
+#: mod/babel.php:35
+msgid "bb2html (raw HTML): "
+msgstr "bb2html (reines HTML): "
 
-#: mod/settings.php:1128
-msgid "This account is a news account/reflector"
-msgstr "Dieses Konto ist ein News-Konto bzw. -Spiegel"
+#: mod/babel.php:39
+msgid "bb2html: "
+msgstr "bb2html: "
 
-#: mod/settings.php:1131
-msgid "Community Forum"
-msgstr "Gemeinschaftsforum"
+#: mod/babel.php:43
+msgid "bb2html2bb: "
+msgstr "bb2html2bb: "
 
-#: mod/settings.php:1132
-msgid ""
-"This account is a community forum where people can discuss with each other"
-msgstr "Dieses Konto ist ein Gemeinschaftskonto wo sich Leute untereinander austauschen können"
+#: mod/babel.php:47
+msgid "bb2md: "
+msgstr "bb2md: "
 
-#: mod/settings.php:1135
-msgid "Normal Account Page"
-msgstr "Normales Konto"
+#: mod/babel.php:51
+msgid "bb2md2html: "
+msgstr "bb2md2html: "
 
-#: mod/settings.php:1136
-msgid "This account is a normal personal profile"
-msgstr "Dieses Konto ist ein normales persönliches Profil"
+#: mod/babel.php:55
+msgid "bb2dia2bb: "
+msgstr "bb2dia2bb: "
 
-#: mod/settings.php:1139
-msgid "Soapbox Page"
-msgstr "Marktschreier-Konto"
+#: mod/babel.php:59
+msgid "bb2md2html2bb: "
+msgstr "bb2md2html2bb: "
 
-#: mod/settings.php:1140
-msgid "Automatically approve all connection/friend requests as read-only fans"
-msgstr "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert"
+#: mod/babel.php:65
+msgid "Source input (Diaspora format): "
+msgstr "Originaltext (Diaspora Format): "
 
-#: mod/settings.php:1143
-msgid "Public Forum"
-msgstr "Öffentliches Forum"
+#: mod/babel.php:69
+msgid "diaspora2bb: "
+msgstr "diaspora2bb: "
 
-#: mod/settings.php:1144
-msgid "Automatically approve all contact requests"
-msgstr "Bestätige alle Kontaktanfragen automatisch"
+#: mod/cal.php:271 mod/events.php:375
+msgid "View"
+msgstr "Ansehen"
 
-#: mod/settings.php:1147
-msgid "Automatic Friend Page"
-msgstr "Automatische Freunde Seite"
+#: mod/cal.php:272 mod/events.php:377
+msgid "Previous"
+msgstr "Vorherige"
 
-#: mod/settings.php:1148
-msgid "Automatically approve all connection/friend requests as friends"
-msgstr "Kontaktanfragen werden automatisch als Freund akzeptiert"
+#: mod/cal.php:273 mod/events.php:378 mod/install.php:201
+msgid "Next"
+msgstr "Nächste"
 
-#: mod/settings.php:1151
-msgid "Private Forum [Experimental]"
-msgstr "Privates Forum [Versuchsstadium]"
+#: mod/cal.php:282 mod/events.php:387
+msgid "list"
+msgstr "Liste"
+
+#: mod/cal.php:292
+msgid "User not found"
+msgstr "Nutzer nicht gefunden"
 
-#: mod/settings.php:1152
-msgid "Private forum - approved members only"
-msgstr "Privates Forum, nur für Mitglieder"
+#: mod/cal.php:308
+msgid "This calendar format is not supported"
+msgstr "Dieses Kalenderformat wird nicht unterstützt."
 
-#: mod/settings.php:1163
-msgid "OpenID:"
-msgstr "OpenID:"
+#: mod/cal.php:310
+msgid "No exportable data found"
+msgstr "Keine exportierbaren Daten gefunden"
 
-#: mod/settings.php:1163
-msgid "(Optional) Allow this OpenID to login to this account."
-msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."
+#: mod/cal.php:325
+msgid "calendar"
+msgstr "Kalender"
 
-#: mod/settings.php:1171
-msgid "Publish your default profile in your local site directory?"
-msgstr "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?"
+#: mod/community.php:23
+msgid "Not available."
+msgstr "Nicht verfügbar."
 
-#: mod/settings.php:1177
-msgid "Publish your default profile in the global social directory?"
-msgstr "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?"
+#: mod/community.php:50 mod/search.php:219
+msgid "No results."
+msgstr "Keine Ergebnisse."
 
-#: mod/settings.php:1184
-msgid "Hide your contact/friend list from viewers of your default profile?"
-msgstr "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"
+#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:135
+#: mod/profiles.php:182 mod/profiles.php:619
+msgid "Profile not found."
+msgstr "Profil nicht gefunden."
 
-#: mod/settings.php:1188
+#: mod/dfrn_confirm.php:127
 msgid ""
-"If enabled, posting public messages to Diaspora and other networks isn't "
-"possible."
-msgstr "Wenn aktiviert, ist das senden öffentliche Nachrichten zu Diaspora und anderen Netzwerken nicht möglich"
+"This may occasionally happen if contact was requested by both persons and it"
+" has already been approved."
+msgstr "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."
 
-#: mod/settings.php:1193
-msgid "Allow friends to post to your profile page?"
-msgstr "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?"
+#: mod/dfrn_confirm.php:244
+msgid "Response from remote site was not understood."
+msgstr "Antwort der Gegenstelle unverständlich."
 
-#: mod/settings.php:1198
-msgid "Allow friends to tag your posts?"
-msgstr "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?"
+#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258
+msgid "Unexpected response from remote site: "
+msgstr "Unerwartete Antwort der Gegenstelle: "
 
-#: mod/settings.php:1203
-msgid "Allow us to suggest you as a potential friend to new members?"
-msgstr "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?"
+#: mod/dfrn_confirm.php:267
+msgid "Confirmation completed successfully."
+msgstr "Bestätigung erfolgreich abgeschlossen."
 
-#: mod/settings.php:1208
-msgid "Permit unknown people to send you private mail?"
-msgstr "Dürfen Dir Unbekannte private Nachrichten schicken?"
+#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290
+msgid "Remote site reported: "
+msgstr "Gegenstelle meldet: "
 
-#: mod/settings.php:1216
-msgid "Profile is <strong>not published</strong>."
-msgstr "Profil ist <strong>nicht veröffentlicht</strong>."
+#: mod/dfrn_confirm.php:281
+msgid "Temporary failure. Please wait and try again."
+msgstr "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."
 
-#: mod/settings.php:1224
-#, php-format
-msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
-msgstr "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'."
+#: mod/dfrn_confirm.php:288
+msgid "Introduction failed or was revoked."
+msgstr "Kontaktanfrage schlug fehl oder wurde zurückgezogen."
 
-#: mod/settings.php:1231
-msgid "Automatically expire posts after this many days:"
-msgstr "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:"
+#: mod/dfrn_confirm.php:418
+msgid "Unable to set contact photo."
+msgstr "Konnte das Bild des Kontakts nicht speichern."
 
-#: mod/settings.php:1231
-msgid "If empty, posts will not expire. Expired posts will be deleted"
-msgstr "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht."
+#: mod/dfrn_confirm.php:559
+#, php-format
+msgid "No user record found for '%s' "
+msgstr "Für '%s' wurde kein Nutzer gefunden"
 
-#: mod/settings.php:1232
-msgid "Advanced expiration settings"
-msgstr "Erweiterte Verfallseinstellungen"
+#: mod/dfrn_confirm.php:569
+msgid "Our site encryption key is apparently messed up."
+msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung."
 
-#: mod/settings.php:1233
-msgid "Advanced Expiration"
-msgstr "Erweitertes Verfallen"
+#: mod/dfrn_confirm.php:580
+msgid "Empty site URL was provided or URL could not be decrypted by us."
+msgstr "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."
 
-#: mod/settings.php:1234
-msgid "Expire posts:"
-msgstr "Beiträge verfallen lassen:"
+#: mod/dfrn_confirm.php:602
+msgid "Contact record was not found for you on our site."
+msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."
 
-#: mod/settings.php:1235
-msgid "Expire personal notes:"
-msgstr "Persönliche Notizen verfallen lassen:"
+#: mod/dfrn_confirm.php:616
+#, php-format
+msgid "Site public key not available in contact record for URL %s."
+msgstr "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."
 
-#: mod/settings.php:1236
-msgid "Expire starred posts:"
-msgstr "Markierte Beiträge verfallen lassen:"
+#: mod/dfrn_confirm.php:636
+msgid ""
+"The ID provided by your system is a duplicate on our system. It should work "
+"if you try again."
+msgstr "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."
 
-#: mod/settings.php:1237
-msgid "Expire photos:"
-msgstr "Fotos verfallen lassen:"
+#: mod/dfrn_confirm.php:647
+msgid "Unable to set your contact credentials on our system."
+msgstr "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."
 
-#: mod/settings.php:1238
-msgid "Only expire posts by others:"
-msgstr "Nur Beiträge anderer verfallen:"
+#: mod/dfrn_confirm.php:709
+msgid "Unable to update your contact profile details on our system"
+msgstr "Die Updates für Dein Profil konnten nicht gespeichert werden"
 
-#: mod/settings.php:1269
-msgid "Account Settings"
-msgstr "Kontoeinstellungen"
+#: mod/dfrn_confirm.php:781
+#, php-format
+msgid "%1$s has joined %2$s"
+msgstr "%1$s ist %2$s beigetreten"
 
-#: mod/settings.php:1277
-msgid "Password Settings"
-msgstr "Passwort-Einstellungen"
+#: mod/dfrn_request.php:101
+msgid "This introduction has already been accepted."
+msgstr "Diese Kontaktanfrage wurde bereits akzeptiert."
 
-#: mod/settings.php:1279
-msgid "Leave password fields blank unless changing"
-msgstr "Lass die Passwort-Felder leer, außer Du willst das Passwort ändern"
+#: mod/dfrn_request.php:124 mod/dfrn_request.php:528
+msgid "Profile location is not valid or does not contain profile information."
+msgstr "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung."
 
-#: mod/settings.php:1280
-msgid "Current Password:"
-msgstr "Aktuelles Passwort:"
+#: mod/dfrn_request.php:129 mod/dfrn_request.php:533
+msgid "Warning: profile location has no identifiable owner name."
+msgstr "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."
 
-#: mod/settings.php:1280 mod/settings.php:1281
-msgid "Your current password to confirm the changes"
-msgstr "Dein aktuelles Passwort um die Änderungen zu bestätigen"
+#: mod/dfrn_request.php:132 mod/dfrn_request.php:536
+msgid "Warning: profile location has no profile photo."
+msgstr "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse."
 
-#: mod/settings.php:1281
-msgid "Password:"
-msgstr "Passwort:"
+#: mod/dfrn_request.php:136 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] "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden"
+msgstr[1] "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden"
 
-#: mod/settings.php:1285
-msgid "Basic Settings"
-msgstr "Grundeinstellungen"
+#: mod/dfrn_request.php:180
+msgid "Introduction complete."
+msgstr "Kontaktanfrage abgeschlossen."
 
-#: mod/settings.php:1287
-msgid "Email Address:"
-msgstr "E-Mail-Adresse:"
+#: mod/dfrn_request.php:225
+msgid "Unrecoverable protocol error."
+msgstr "Nicht behebbarer Protokollfehler."
 
-#: mod/settings.php:1288
-msgid "Your Timezone:"
-msgstr "Deine Zeitzone:"
+#: mod/dfrn_request.php:253
+msgid "Profile unavailable."
+msgstr "Profil nicht verfügbar."
 
-#: mod/settings.php:1289
-msgid "Your Language:"
-msgstr "Deine Sprache:"
+#: mod/dfrn_request.php:280
+#, php-format
+msgid "%s has received too many connection requests today."
+msgstr "%s hat heute zu viele Kontaktanfragen erhalten."
 
-#: mod/settings.php:1289
-msgid ""
-"Set the language we use to show you friendica interface and to send you "
-"emails"
-msgstr "Wähle die Sprache, in der wir Dir die Friendica-Oberfläche präsentieren sollen und Dir E-Mail schicken"
+#: mod/dfrn_request.php:281
+msgid "Spam protection measures have been invoked."
+msgstr "Maßnahmen zum Spamschutz wurden ergriffen."
 
-#: mod/settings.php:1290
-msgid "Default Post Location:"
-msgstr "Standardstandort:"
+#: mod/dfrn_request.php:282
+msgid "Friends are advised to please try again in 24 hours."
+msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."
 
-#: mod/settings.php:1291
-msgid "Use Browser Location:"
-msgstr "Standort des Browsers verwenden:"
+#: mod/dfrn_request.php:344
+msgid "Invalid locator"
+msgstr "Ungültiger Locator"
 
-#: mod/settings.php:1294
-msgid "Security and Privacy Settings"
-msgstr "Sicherheits- und Privatsphäre-Einstellungen"
+#: mod/dfrn_request.php:353
+msgid "Invalid email address."
+msgstr "Ungültige E-Mail-Adresse."
 
-#: mod/settings.php:1296
-msgid "Maximum Friend Requests/Day:"
-msgstr "Maximale Anzahl vonKontaktanfragen/Tag:"
+#: mod/dfrn_request.php:378
+msgid "This account has not been configured for email. Request failed."
+msgstr "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen."
 
-#: mod/settings.php:1296 mod/settings.php:1326
-msgid "(to prevent spam abuse)"
-msgstr "(um SPAM zu vermeiden)"
+#: mod/dfrn_request.php:481
+msgid "You have already introduced yourself here."
+msgstr "Du hast Dich hier bereits vorgestellt."
 
-#: mod/settings.php:1297
-msgid "Default Post Permissions"
-msgstr "Standard-Zugriffsrechte für Beiträge"
+#: mod/dfrn_request.php:485
+#, php-format
+msgid "Apparently you are already friends with %s."
+msgstr "Es scheint so, als ob Du bereits mit %s in Kontakt stehst."
 
-#: mod/settings.php:1298
-msgid "(click to open/close)"
-msgstr "(klicke zum öffnen/schließen)"
+#: mod/dfrn_request.php:506
+msgid "Invalid profile URL."
+msgstr "Ungültige Profil-URL."
 
-#: mod/settings.php:1307 mod/photos.php:1185 mod/photos.php:1567
-msgid "Show to Groups"
-msgstr "Zeige den Gruppen"
+#: mod/dfrn_request.php:614
+msgid "Your introduction has been sent."
+msgstr "Deine Kontaktanfrage wurde gesendet."
 
-#: mod/settings.php:1308 mod/photos.php:1186 mod/photos.php:1568
-msgid "Show to Contacts"
-msgstr "Zeige den Kontakten"
+#: mod/dfrn_request.php:656
+msgid ""
+"Remote subscription can't be done for your network. Please subscribe "
+"directly on your system."
+msgstr "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems.   "
 
-#: mod/settings.php:1309
-msgid "Default Private Post"
-msgstr "Privater Standardbeitrag"
+#: mod/dfrn_request.php:677
+msgid "Please login to confirm introduction."
+msgstr "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen."
 
-#: mod/settings.php:1310
-msgid "Default Public Post"
-msgstr "Öffentlicher Standardbeitrag"
+#: mod/dfrn_request.php:687
+msgid ""
+"Incorrect identity currently logged in. Please login to "
+"<strong>this</strong> profile."
+msgstr "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an."
 
-#: mod/settings.php:1314
-msgid "Default Permissions for New Posts"
-msgstr "Standardberechtigungen für neue Beiträge"
+#: mod/dfrn_request.php:701 mod/dfrn_request.php:718
+msgid "Confirm"
+msgstr "Bestätigen"
 
-#: mod/settings.php:1326
-msgid "Maximum private messages per day from unknown people:"
-msgstr "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:"
+#: mod/dfrn_request.php:713
+msgid "Hide this contact"
+msgstr "Verberge diesen Kontakt"
 
-#: mod/settings.php:1329
-msgid "Notification Settings"
-msgstr "Benachrichtigungseinstellungen"
+#: mod/dfrn_request.php:716
+#, php-format
+msgid "Welcome home %s."
+msgstr "Willkommen zurück %s."
 
-#: mod/settings.php:1330
-msgid "By default post a status message when:"
-msgstr "Standardmäßig eine Statusnachricht posten, wenn:"
+#: mod/dfrn_request.php:717
+#, php-format
+msgid "Please confirm your introduction/connection request to %s."
+msgstr "Bitte bestätige Deine Kontaktanfrage bei %s."
 
-#: mod/settings.php:1331
-msgid "accepting a friend request"
-msgstr "– Du eine Kontaktanfrage akzeptierst"
+#: mod/dfrn_request.php:848
+msgid ""
+"Please enter your 'Identity Address' from one of the following supported "
+"communications networks:"
+msgstr "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:"
 
-#: mod/settings.php:1332
-msgid "joining a forum/community"
-msgstr "– Du einem Forum/einer Gemeinschaftsseite beitrittst"
+#: 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>."
+msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten."
 
-#: mod/settings.php:1333
-msgid "making an <em>interesting</em> profile change"
-msgstr "– Du eine <em>interessante</em> Änderung an Deinem Profil durchführst"
+#: mod/dfrn_request.php:877
+msgid "Friend/Connection Request"
+msgstr "Kontaktanfrage"
 
-#: mod/settings.php:1334
-msgid "Send a notification email when:"
-msgstr "Benachrichtigungs-E-Mail senden wenn:"
+#: mod/dfrn_request.php:878
+msgid ""
+"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
+"testuser@identi.ca"
+msgstr "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"
 
-#: mod/settings.php:1335
-msgid "You receive an introduction"
-msgstr "– Du eine Kontaktanfrage erhältst"
+#: mod/dfrn_request.php:879 mod/follow.php:112
+msgid "Please answer the following:"
+msgstr "Bitte beantworte folgendes:"
 
-#: mod/settings.php:1336
-msgid "Your introductions are confirmed"
-msgstr "– eine Deiner Kontaktanfragen akzeptiert wurde"
+#: mod/dfrn_request.php:880 mod/follow.php:113
+#, php-format
+msgid "Does %s know you?"
+msgstr "Kennt %s Dich?"
 
-#: mod/settings.php:1337
-msgid "Someone writes on your profile wall"
-msgstr "– jemand etwas auf Deine Pinnwand schreibt"
+#: mod/dfrn_request.php:884 mod/follow.php:114
+msgid "Add a personal note:"
+msgstr "Eine persönliche Notiz beifügen:"
 
-#: mod/settings.php:1338
-msgid "Someone writes a followup comment"
-msgstr "– jemand auch einen Kommentar verfasst"
+#: mod/dfrn_request.php:887
+msgid "StatusNet/Federated Social Web"
+msgstr "StatusNet/Federated Social Web"
 
-#: mod/settings.php:1339
-msgid "You receive a private message"
-msgstr "– Du eine private Nachricht erhältst"
+#: mod/dfrn_request.php:889
+#, php-format
+msgid ""
+" - please do not use this form.  Instead, enter %s into your Diaspora search"
+" bar."
+msgstr " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste."
 
-#: mod/settings.php:1340
-msgid "You receive a friend suggestion"
-msgstr "– Du eine Empfehlung erhältst"
+#: mod/dfrn_request.php:890 mod/follow.php:120
+msgid "Your Identity Address:"
+msgstr "Adresse Deines Profils:"
 
-#: mod/settings.php:1341
-msgid "You are tagged in a post"
-msgstr "– Du in einem Beitrag erwähnt wirst"
+#: mod/dfrn_request.php:893 mod/follow.php:19
+msgid "Submit Request"
+msgstr "Anfrage abschicken"
 
-#: mod/settings.php:1342
-msgid "You are poked/prodded/etc. in a post"
-msgstr "– Du von jemandem angestupst oder sonstwie behandelt wirst"
+#: mod/dirfind.php:37
+#, php-format
+msgid "People Search - %s"
+msgstr "Personensuche - %s"
 
-#: mod/settings.php:1344
-msgid "Activate desktop notifications"
-msgstr "Desktop Benachrichtigungen einschalten"
+#: mod/dirfind.php:48
+#, php-format
+msgid "Forum Search - %s"
+msgstr "Forensuche - %s"
 
-#: mod/settings.php:1344
-msgid "Show desktop popup on new notifications"
-msgstr "Desktop Benachrichtigungen einschalten"
+#: mod/events.php:93 mod/events.php:95
+msgid "Event can not end before it has started."
+msgstr "Die Veranstaltung kann nicht enden bevor sie beginnt."
 
-#: mod/settings.php:1346
-msgid "Text-only notification emails"
-msgstr "Benachrichtigungs E-Mail als Rein-Text."
+#: mod/events.php:102 mod/events.php:104
+msgid "Event title and start time are required."
+msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."
 
-#: mod/settings.php:1348
-msgid "Send text only notification emails, without the html part"
-msgstr "Sende Benachrichtigungs E-Mail als Rein-Text - ohne HTML-Teil"
+#: mod/events.php:376
+msgid "Create New Event"
+msgstr "Neue Veranstaltung erstellen"
 
-#: mod/settings.php:1350
-msgid "Advanced Account/Page Type Settings"
-msgstr "Erweiterte Konto-/Seitentyp-Einstellungen"
+#: mod/events.php:481
+msgid "Event details"
+msgstr "Veranstaltungsdetails"
 
-#: mod/settings.php:1351
-msgid "Change the behaviour of this account for special situations"
-msgstr "Verhalten dieses Kontos in bestimmten Situationen:"
+#: mod/events.php:482
+msgid "Starting date and Title are required."
+msgstr "Anfangszeitpunkt und Titel werden benötigt"
 
-#: mod/settings.php:1354
-msgid "Relocate"
-msgstr "Umziehen"
+#: mod/events.php:483 mod/events.php:484
+msgid "Event Starts:"
+msgstr "Veranstaltungsbeginn:"
 
-#: mod/settings.php:1355
-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 "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button."
+#: mod/events.php:483 mod/events.php:495 mod/profiles.php:709
+msgid "Required"
+msgstr "Benötigt"
 
-#: mod/settings.php:1356
-msgid "Resend relocate message to contacts"
-msgstr "Umzugsbenachrichtigung erneut an Kontakte senden"
+#: mod/events.php:485 mod/events.php:501
+msgid "Finish date/time is not known or not relevant"
+msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant"
 
-#: mod/share.php:38
-msgid "link"
-msgstr "Link"
+#: mod/events.php:487 mod/events.php:488
+msgid "Event Finishes:"
+msgstr "Veranstaltungsende:"
 
-#: mod/subthread.php:104
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
-msgstr "%1$s folgt %2$s %3$s"
+#: mod/events.php:489 mod/events.php:502
+msgid "Adjust for viewer timezone"
+msgstr "An Zeitzone des Betrachters anpassen"
 
-#: mod/suggest.php:27
-msgid "Do you really want to delete this suggestion?"
-msgstr "Möchtest Du wirklich diese Empfehlung löschen?"
+#: mod/events.php:491
+msgid "Description:"
+msgstr "Beschreibung"
 
-#: mod/suggest.php:71
-msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
-msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal."
+#: mod/events.php:495 mod/events.php:497
+msgid "Title:"
+msgstr "Titel:"
 
-#: mod/suggest.php:84 mod/suggest.php:104
-msgid "Ignore/Hide"
-msgstr "Ignorieren/Verbergen"
+#: mod/events.php:498 mod/events.php:499
+msgid "Share this event"
+msgstr "Veranstaltung teilen"
 
-#: mod/tagrm.php:43
-msgid "Tag removed"
-msgstr "Tag entfernt"
+#: mod/events.php:528
+msgid "Failed to remove event"
+msgstr "Entfernen der Veranstaltung fehlgeschlagen"
 
-#: mod/tagrm.php:82
-msgid "Remove Item Tag"
-msgstr "Gegenstands-Tag entfernen"
+#: mod/events.php:530
+msgid "Event removed"
+msgstr "Veranstaltung enfternt"
 
-#: mod/tagrm.php:84
-msgid "Select a tag to remove: "
-msgstr "Wähle ein Tag zum Entfernen aus: "
+#: mod/follow.php:30
+msgid "You already added this contact."
+msgstr "Du hast den Kontakt bereits hinzugefügt."
 
-#: mod/uexport.php:37
-msgid "Export account"
-msgstr "Account exportieren"
+#: mod/follow.php:39
+msgid "Diaspora support isn't enabled. Contact can't be added."
+msgstr "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
 
-#: mod/uexport.php:37
-msgid ""
-"Export your account info and contacts. Use this to make a backup of your "
-"account and/or to move it to another server."
-msgstr "Exportiere Deine Accountinformationen und Kontakte. Verwende dies um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen."
+#: mod/follow.php:46
+msgid "OStatus support is disabled. Contact can't be added."
+msgstr "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
 
-#: mod/uexport.php:38
-msgid "Export all"
-msgstr "Alles exportieren"
+#: mod/follow.php:53
+msgid "The network type couldn't be detected. Contact can't be added."
+msgstr "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden."
 
-#: mod/uexport.php:38
-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 "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)."
+#: mod/follow.php:186
+msgid "Contact added"
+msgstr "Kontakt hinzugefügt"
 
-#: mod/uimport.php:68
-msgid "Move account"
-msgstr "Account umziehen"
+#: mod/friendica.php:68
+msgid "This is Friendica, version"
+msgstr "Dies ist Friendica, Version"
 
-#: mod/uimport.php:69
-msgid "You can import an account from another Friendica server."
-msgstr "Du kannst einen Account von einem anderen Friendica Server importieren."
+#: mod/friendica.php:69
+msgid "running at web location"
+msgstr "die unter folgender Webadresse zu finden ist"
 
-#: mod/uimport.php:70
+#: mod/friendica.php:73
 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 "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist."
+"Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
+"more about the Friendica project."
+msgstr "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren."
 
-#: mod/uimport.php:71
-msgid ""
-"This feature is experimental. We can't import contacts from the OStatus "
-"network (GNU Social/Statusnet) or from Diaspora"
-msgstr "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren"
+#: mod/friendica.php:77
+msgid "Bug reports and issues: please visit"
+msgstr "Probleme oder Fehler gefunden? Bitte besuche"
 
-#: mod/uimport.php:72
-msgid "Account file"
-msgstr "Account Datei"
+#: mod/friendica.php:77
+msgid "the bugtracker at github"
+msgstr "den Bugtracker auf github"
 
-#: mod/uimport.php:72
+#: mod/friendica.php:80
 msgid ""
-"To export your account, go to \"Settings->Export your personal data\" and "
-"select \"Export account\""
-msgstr "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\""
-
-#: mod/update_community.php:19 mod/update_display.php:23
-#: mod/update_network.php:27 mod/update_notes.php:36 mod/update_profile.php:35
-msgid "[Embedded content - reload page to view]"
-msgstr "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"
+"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
+"dot com"
+msgstr "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com"
 
-#: mod/videos.php:124
-msgid "Do you really want to delete this video?"
-msgstr "Möchtest Du dieses Video wirklich löschen?"
+#: mod/friendica.php:94
+msgid "Installed plugins/addons/apps:"
+msgstr "Installierte Plugins/Erweiterungen/Apps:"
 
-#: mod/videos.php:129
-msgid "Delete Video"
-msgstr "Video Löschen"
+#: mod/friendica.php:108
+msgid "No installed plugins/addons/apps"
+msgstr "Keine Plugins/Erweiterungen/Apps installiert"
 
-#: mod/videos.php:208
-msgid "No videos selected"
-msgstr "Keine Videos  ausgewählt"
+#: mod/friendica.php:113
+msgid "On this server the following remote servers are blocked."
+msgstr "Auf diesem Server werden die folgenden entfernten Server blockiert."
 
-#: mod/videos.php:309 mod/photos.php:1074
-msgid "Access to this item is restricted."
-msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt."
+#: mod/friendica.php:114 mod/admin.php:280 mod/admin.php:298
+msgid "Reason for the block"
+msgstr "Begründung für die Blockierung"
 
-#: mod/videos.php:391 mod/photos.php:1867
-msgid "View Album"
-msgstr "Album betrachten"
+#: mod/group.php:29
+msgid "Group created."
+msgstr "Gruppe erstellt."
 
-#: mod/videos.php:400
-msgid "Recent Videos"
-msgstr "Neueste Videos"
+#: mod/group.php:35
+msgid "Could not create group."
+msgstr "Konnte die Gruppe nicht erstellen."
 
-#: mod/videos.php:402
-msgid "Upload New Videos"
-msgstr "Neues Video hochladen"
+#: mod/group.php:49 mod/group.php:154
+msgid "Group not found."
+msgstr "Gruppe nicht gefunden."
 
-#: mod/viewsrc.php:7
-msgid "Access denied."
-msgstr "Zugriff verweigert."
+#: mod/group.php:63
+msgid "Group name changed."
+msgstr "Gruppenname geändert."
 
-#: mod/wall_attach.php:17 mod/wall_attach.php:25 mod/wall_attach.php:76
-#: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86
-#: mod/wall_upload.php:122 mod/wall_upload.php:125
-msgid "Invalid request."
-msgstr "Ungültige Anfrage"
+#: mod/group.php:93
+msgid "Save Group"
+msgstr "Gruppe speichern"
 
-#: mod/wall_attach.php:94
-msgid "Sorry, maybe your upload is bigger than the PHP configuration allows"
-msgstr "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt."
+#: mod/group.php:98
+msgid "Create a group of contacts/friends."
+msgstr "Eine Kontaktgruppe anlegen."
 
-#: mod/wall_attach.php:94
-msgid "Or - did you try to upload an empty file?"
-msgstr "Oder - hast Du versucht, eine leere Datei hochzuladen?"
+#: mod/group.php:123
+msgid "Group removed."
+msgstr "Gruppe entfernt."
 
-#: mod/wall_attach.php:105
-#, php-format
-msgid "File exceeds size limit of %s"
-msgstr "Die Datei ist größer als das erlaubte Limit von %s"
+#: mod/group.php:125
+msgid "Unable to remove group."
+msgstr "Konnte die Gruppe nicht entfernen."
 
-#: mod/wall_attach.php:158 mod/wall_attach.php:174
-msgid "File upload failed."
-msgstr "Hochladen der Datei fehlgeschlagen."
+#: mod/group.php:189
+msgid "Delete Group"
+msgstr "Gruppe löschen"
 
-#: mod/cal.php:271 mod/events.php:387
-msgid "View"
-msgstr "Ansehen"
+#: mod/group.php:195
+msgid "Group Editor"
+msgstr "Gruppeneditor"
 
-#: mod/cal.php:272 mod/events.php:389
-msgid "Previous"
-msgstr "Vorherige"
+#: mod/group.php:200
+msgid "Edit Group Name"
+msgstr "Gruppen Name bearbeiten"
 
-#: mod/cal.php:273 mod/events.php:390 mod/install.php:235
-msgid "Next"
-msgstr "Nächste"
+#: mod/group.php:210
+msgid "Members"
+msgstr "Mitglieder"
 
-#: mod/cal.php:282 mod/events.php:399
-msgid "list"
-msgstr "Liste"
+#: mod/group.php:226
+msgid "Remove Contact"
+msgstr "Kontakt löschen"
 
-#: mod/cal.php:292
-msgid "User not found"
-msgstr "Nutzer nicht gefunden"
+#: mod/group.php:250
+msgid "Add Contact"
+msgstr "Kontakt hinzufügen"
 
-#: mod/cal.php:308
-msgid "This calendar format is not supported"
-msgstr "Dieses Kalenderformat wird nicht unterstützt."
+#: mod/manage.php:151
+msgid "Manage Identities and/or Pages"
+msgstr "Verwalte Identitäten und/oder Seiten"
 
-#: mod/cal.php:310
-msgid "No exportable data found"
-msgstr "Keine exportierbaren Daten gefunden"
+#: mod/manage.php:152
+msgid ""
+"Toggle between different identities or community/group pages which share "
+"your account details or which you have been granted \"manage\" permissions"
+msgstr "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast."
 
-#: mod/cal.php:325
-msgid "calendar"
-msgstr "Kalender"
+#: mod/manage.php:153
+msgid "Select an identity to manage: "
+msgstr "Wähle eine Identität zum Verwalten aus: "
 
-#: mod/contacts.php:134
-#, php-format
-msgid "%d contact edited."
-msgid_plural "%d contacts edited."
-msgstr[0] "%d Kontakt bearbeitet."
-msgstr[1] "%d Kontakte bearbeitet."
+#: mod/message.php:64
+msgid "Unable to locate contact information."
+msgstr "Konnte die Kontaktinformationen nicht finden."
 
-#: mod/contacts.php:169 mod/contacts.php:378
-msgid "Could not access contact record."
-msgstr "Konnte nicht auf die Kontaktdaten zugreifen."
+#: mod/message.php:204
+msgid "Do you really want to delete this message?"
+msgstr "Möchtest Du wirklich diese Nachricht löschen?"
 
-#: mod/contacts.php:183
-msgid "Could not locate selected profile."
-msgstr "Konnte das ausgewählte Profil nicht finden."
+#: mod/message.php:224
+msgid "Message deleted."
+msgstr "Nachricht gelöscht."
 
-#: mod/contacts.php:216
-msgid "Contact updated."
-msgstr "Kontakt aktualisiert."
+#: mod/message.php:255
+msgid "Conversation removed."
+msgstr "Unterhaltung gelöscht."
 
-#: mod/contacts.php:218 mod/dfrn_request.php:588
-msgid "Failed to update contact record."
-msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
+#: mod/message.php:364
+msgid "No messages."
+msgstr "Keine Nachrichten."
 
-#: mod/contacts.php:399
-msgid "Contact has been blocked"
-msgstr "Kontakt wurde blockiert"
+#: mod/message.php:403
+msgid "Message not available."
+msgstr "Nachricht nicht verfügbar."
 
-#: mod/contacts.php:399
-msgid "Contact has been unblocked"
-msgstr "Kontakt wurde wieder freigegeben"
+#: mod/message.php:477
+msgid "Delete message"
+msgstr "Nachricht löschen"
 
-#: mod/contacts.php:410
-msgid "Contact has been ignored"
-msgstr "Kontakt wurde ignoriert"
+#: mod/message.php:503 mod/message.php:591
+msgid "Delete conversation"
+msgstr "Unterhaltung löschen"
 
-#: mod/contacts.php:410
-msgid "Contact has been unignored"
-msgstr "Kontakt wird nicht mehr ignoriert"
+#: mod/message.php:505
+msgid ""
+"No secure communications available. You <strong>may</strong> be able to "
+"respond from the sender's profile page."
+msgstr "Sichere Kommunikation ist nicht verfügbar. <strong>Eventuell</strong> kannst Du auf der Profilseite des Absenders antworten."
 
-#: mod/contacts.php:422
-msgid "Contact has been archived"
-msgstr "Kontakt wurde archiviert"
+#: mod/message.php:509
+msgid "Send Reply"
+msgstr "Antwort senden"
 
-#: mod/contacts.php:422
-msgid "Contact has been unarchived"
-msgstr "Kontakt wurde aus dem Archiv geholt"
+#: mod/message.php:561
+#, php-format
+msgid "Unknown sender - %s"
+msgstr "'Unbekannter Absender - %s"
 
-#: mod/contacts.php:447
-msgid "Drop contact"
-msgstr "Kontakt löschen"
+#: mod/message.php:563
+#, php-format
+msgid "You and %s"
+msgstr "Du und %s"
 
-#: mod/contacts.php:450 mod/contacts.php:809
-msgid "Do you really want to delete this contact?"
-msgstr "Möchtest Du wirklich diesen Kontakt löschen?"
+#: mod/message.php:565
+#, php-format
+msgid "%s and You"
+msgstr "%s und Du"
 
-#: mod/contacts.php:469
-msgid "Contact has been removed."
-msgstr "Kontakt wurde entfernt."
+#: mod/message.php:594
+msgid "D, d M Y - g:i A"
+msgstr "D, d. M Y - g:i A"
 
-#: mod/contacts.php:506
+#: mod/message.php:597
 #, php-format
-msgid "You are mutual friends with %s"
-msgstr "Du hast mit %s eine beidseitige Freundschaft"
+msgid "%d message"
+msgid_plural "%d messages"
+msgstr[0] "%d Nachricht"
+msgstr[1] "%d Nachrichten"
 
-#: mod/contacts.php:510
-#, php-format
-msgid "You are sharing with %s"
-msgstr "Du teilst mit %s"
+#: mod/network.php:197 mod/search.php:25
+msgid "Remove term"
+msgstr "Begriff entfernen"
 
-#: mod/contacts.php:515
+#: mod/network.php:404
 #, php-format
-msgid "%s is sharing with you"
-msgstr "%s teilt mit Dir"
+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] "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann."
+msgstr[1] "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können."
 
-#: mod/contacts.php:535
-msgid "Private communications are not available for this contact."
-msgstr "Private Kommunikation ist für diesen Kontakt nicht verfügbar."
+#: mod/network.php:407
+msgid "Messages in this group won't be send to these receivers."
+msgstr "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden."
 
-#: mod/contacts.php:538 mod/admin.php:899
-msgid "Never"
-msgstr "Niemals"
+#: mod/network.php:535
+msgid "Private messages to this person are at risk of public disclosure."
+msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."
 
-#: mod/contacts.php:542
-msgid "(Update was successful)"
-msgstr "(Aktualisierung war erfolgreich)"
+#: mod/network.php:540
+msgid "Invalid contact."
+msgstr "Ungültiger Kontakt."
+
+#: mod/network.php:813
+msgid "Commented Order"
+msgstr "Neueste Kommentare"
+
+#: mod/network.php:816
+msgid "Sort by Comment Date"
+msgstr "Nach Kommentardatum sortieren"
+
+#: mod/network.php:821
+msgid "Posted Order"
+msgstr "Neueste Beiträge"
+
+#: mod/network.php:824
+msgid "Sort by Post Date"
+msgstr "Nach Beitragsdatum sortieren"
+
+#: mod/network.php:835
+msgid "Posts that mention or involve you"
+msgstr "Beiträge, in denen es um Dich geht"
+
+#: mod/network.php:843
+msgid "New"
+msgstr "Neue"
+
+#: mod/network.php:846
+msgid "Activity Stream - by date"
+msgstr "Aktivitäten-Stream - nach Datum"
+
+#: mod/network.php:854
+msgid "Shared Links"
+msgstr "Geteilte Links"
 
-#: mod/contacts.php:542
-msgid "(Update was not successful)"
-msgstr "(Aktualisierung war nicht erfolgreich)"
+#: mod/network.php:857
+msgid "Interesting Links"
+msgstr "Interessante Links"
 
-#: mod/contacts.php:544 mod/contacts.php:972
-msgid "Suggest friends"
-msgstr "Kontakte vorschlagen"
+#: mod/network.php:865
+msgid "Starred"
+msgstr "Markierte"
 
-#: mod/contacts.php:548
-#, php-format
-msgid "Network type: %s"
-msgstr "Netzwerktyp: %s"
+#: mod/network.php:868
+msgid "Favourite Posts"
+msgstr "Favorisierte Beiträge"
 
-#: mod/contacts.php:561
-msgid "Communications lost with this contact!"
-msgstr "Verbindungen mit diesem Kontakt verloren!"
+#: mod/openid.php:24
+msgid "OpenID protocol error. No ID returned."
+msgstr "OpenID Protokollfehler. Keine ID zurückgegeben."
 
-#: mod/contacts.php:564
-msgid "Fetch further information for feeds"
-msgstr "Weitere Informationen zu Feeds holen"
+#: mod/openid.php:60
+msgid ""
+"Account not found and OpenID registration is not permitted on this site."
+msgstr "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."
 
-#: mod/contacts.php:565 mod/admin.php:908
-msgid "Disabled"
-msgstr "Deaktiviert"
+#: mod/photos.php:94 mod/photos.php:1900
+msgid "Recent Photos"
+msgstr "Neueste Fotos"
 
-#: mod/contacts.php:565
-msgid "Fetch information"
-msgstr "Beziehe Information"
+#: mod/photos.php:97 mod/photos.php:1328 mod/photos.php:1902
+msgid "Upload New Photos"
+msgstr "Neue Fotos hochladen"
 
-#: mod/contacts.php:565
-msgid "Fetch information and keywords"
-msgstr "Beziehe Information und Schlüsselworte"
+#: mod/photos.php:112 mod/settings.php:36
+msgid "everybody"
+msgstr "jeder"
 
-#: mod/contacts.php:583
-msgid "Contact"
-msgstr "Kontakt"
+#: mod/photos.php:176
+msgid "Contact information unavailable"
+msgstr "Kontaktinformationen nicht verfügbar"
 
-#: mod/contacts.php:586
-msgid "Profile Visibility"
-msgstr "Profil-Sichtbarkeit"
+#: mod/photos.php:197
+msgid "Album not found."
+msgstr "Album nicht gefunden."
 
-#: mod/contacts.php:587
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
-msgstr "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft."
+#: mod/photos.php:230 mod/photos.php:242 mod/photos.php:1272
+msgid "Delete Album"
+msgstr "Album löschen"
 
-#: mod/contacts.php:588
-msgid "Contact Information / Notes"
-msgstr "Kontakt Informationen / Notizen"
+#: mod/photos.php:240
+msgid "Do you really want to delete this photo album and all its photos?"
+msgstr "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?"
 
-#: mod/contacts.php:589
-msgid "Edit contact notes"
-msgstr "Notizen zum Kontakt bearbeiten"
+#: mod/photos.php:323 mod/photos.php:334 mod/photos.php:1598
+msgid "Delete Photo"
+msgstr "Foto löschen"
 
-#: mod/contacts.php:595
-msgid "Block/Unblock contact"
-msgstr "Kontakt blockieren/freischalten"
+#: mod/photos.php:332
+msgid "Do you really want to delete this photo?"
+msgstr "Möchtest Du wirklich dieses Foto löschen?"
 
-#: mod/contacts.php:596
-msgid "Ignore contact"
-msgstr "Ignoriere den Kontakt"
+#: mod/photos.php:713
+#, php-format
+msgid "%1$s was tagged in %2$s by %3$s"
+msgstr "%1$s wurde von %3$s in %2$s getaggt"
 
-#: mod/contacts.php:597
-msgid "Repair URL settings"
-msgstr "URL Einstellungen reparieren"
+#: mod/photos.php:713
+msgid "a photo"
+msgstr "einem Foto"
 
-#: mod/contacts.php:598
-msgid "View conversations"
-msgstr "Unterhaltungen anzeigen"
+#: mod/photos.php:821
+msgid "Image file is empty."
+msgstr "Bilddatei ist leer."
 
-#: mod/contacts.php:604
-msgid "Last update:"
-msgstr "Letzte Aktualisierung: "
+#: mod/photos.php:988
+msgid "No photos selected"
+msgstr "Keine Bilder ausgewählt"
 
-#: mod/contacts.php:606
-msgid "Update public posts"
-msgstr "Öffentliche Beiträge aktualisieren"
+#: mod/photos.php:1091 mod/videos.php:309
+msgid "Access to this item is restricted."
+msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt."
 
-#: mod/contacts.php:608 mod/contacts.php:982
-msgid "Update now"
-msgstr "Jetzt aktualisieren"
+#: mod/photos.php:1151
+#, php-format
+msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
+msgstr "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers."
 
-#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
-#: mod/admin.php:1437
-msgid "Unblock"
-msgstr "Entsperren"
+#: mod/photos.php:1188
+msgid "Upload Photos"
+msgstr "Bilder hochladen"
 
-#: mod/contacts.php:613 mod/contacts.php:813 mod/contacts.php:991
-#: mod/admin.php:1436
-msgid "Block"
-msgstr "Sperren"
+#: mod/photos.php:1192 mod/photos.php:1267
+msgid "New album name: "
+msgstr "Name des neuen Albums: "
 
-#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
-msgid "Unignore"
-msgstr "Ignorieren aufheben"
+#: mod/photos.php:1193
+msgid "or existing album name: "
+msgstr "oder existierender Albumname: "
 
-#: mod/contacts.php:614 mod/contacts.php:814 mod/contacts.php:999
-#: mod/notifications.php:60 mod/notifications.php:179
-#: mod/notifications.php:257
-msgid "Ignore"
-msgstr "Ignorieren"
+#: mod/photos.php:1194
+msgid "Do not show a status post for this upload"
+msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen"
 
-#: mod/contacts.php:618
-msgid "Currently blocked"
-msgstr "Derzeit geblockt"
+#: mod/photos.php:1205 mod/photos.php:1602 mod/settings.php:1307
+msgid "Show to Groups"
+msgstr "Zeige den Gruppen"
 
-#: mod/contacts.php:619
-msgid "Currently ignored"
-msgstr "Derzeit ignoriert"
+#: mod/photos.php:1206 mod/photos.php:1603 mod/settings.php:1308
+msgid "Show to Contacts"
+msgstr "Zeige den Kontakten"
 
-#: mod/contacts.php:620
-msgid "Currently archived"
-msgstr "Momentan archiviert"
+#: mod/photos.php:1207
+msgid "Private Photo"
+msgstr "Privates Foto"
 
-#: mod/contacts.php:621 mod/notifications.php:172 mod/notifications.php:245
-msgid "Hide this contact from others"
-msgstr "Verbirg diesen Kontakt vor Anderen"
+#: mod/photos.php:1208
+msgid "Public Photo"
+msgstr "Öffentliches Foto"
 
-#: mod/contacts.php:621
-msgid ""
-"Replies/likes to your public posts <strong>may</strong> still be visible"
-msgstr "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"
+#: mod/photos.php:1278
+msgid "Edit Album"
+msgstr "Album bearbeiten"
 
-#: mod/contacts.php:622
-msgid "Notification for new posts"
-msgstr "Benachrichtigung bei neuen Beiträgen"
+#: mod/photos.php:1283
+msgid "Show Newest First"
+msgstr "Zeige neueste zuerst"
 
-#: mod/contacts.php:622
-msgid "Send a notification of every new post of this contact"
-msgstr "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."
+#: mod/photos.php:1285
+msgid "Show Oldest First"
+msgstr "Zeige älteste zuerst"
 
-#: mod/contacts.php:625
-msgid "Blacklisted keywords"
-msgstr "Blacklistete Schlüsselworte "
+#: mod/photos.php:1314 mod/photos.php:1885
+msgid "View Photo"
+msgstr "Foto betrachten"
 
-#: mod/contacts.php:625
-msgid ""
-"Comma separated list of keywords that should not be converted to hashtags, "
-"when \"Fetch information and keywords\" is selected"
-msgstr "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde"
+#: mod/photos.php:1359
+msgid "Permission denied. Access to this item may be restricted."
+msgstr "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."
 
-#: mod/contacts.php:643
-msgid "Actions"
-msgstr "Aktionen"
+#: mod/photos.php:1361
+msgid "Photo not available"
+msgstr "Foto nicht verfügbar"
 
-#: mod/contacts.php:646
-msgid "Contact Settings"
-msgstr "Kontakteinstellungen"
+#: mod/photos.php:1422
+msgid "View photo"
+msgstr "Fotos ansehen"
 
-#: mod/contacts.php:692
-msgid "Suggestions"
-msgstr "Kontaktvorschläge"
+#: mod/photos.php:1422
+msgid "Edit photo"
+msgstr "Foto bearbeiten"
 
-#: mod/contacts.php:695
-msgid "Suggest potential friends"
-msgstr "Kontakte vorschlagen"
+#: mod/photos.php:1423
+msgid "Use as profile photo"
+msgstr "Als Profilbild verwenden"
 
-#: mod/contacts.php:703
-msgid "Show all contacts"
-msgstr "Alle Kontakte anzeigen"
+#: mod/photos.php:1448
+msgid "View Full Size"
+msgstr "Betrachte Originalgröße"
 
-#: mod/contacts.php:708
-msgid "Unblocked"
-msgstr "Ungeblockt"
+#: mod/photos.php:1538
+msgid "Tags: "
+msgstr "Tags: "
 
-#: mod/contacts.php:711
-msgid "Only show unblocked contacts"
-msgstr "Nur nicht-blockierte Kontakte anzeigen"
+#: mod/photos.php:1541
+msgid "[Remove any tag]"
+msgstr "[Tag entfernen]"
 
-#: mod/contacts.php:717
-msgid "Blocked"
-msgstr "Geblockt"
+#: mod/photos.php:1584
+msgid "New album name"
+msgstr "Name des neuen Albums"
 
-#: mod/contacts.php:720
-msgid "Only show blocked contacts"
-msgstr "Nur blockierte Kontakte anzeigen"
+#: mod/photos.php:1585
+msgid "Caption"
+msgstr "Bildunterschrift"
 
-#: mod/contacts.php:726
-msgid "Ignored"
-msgstr "Ignoriert"
+#: mod/photos.php:1586
+msgid "Add a Tag"
+msgstr "Tag hinzufügen"
 
-#: mod/contacts.php:729
-msgid "Only show ignored contacts"
-msgstr "Nur ignorierte Kontakte anzeigen"
+#: mod/photos.php:1586
+msgid ""
+"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
 
-#: mod/contacts.php:735
-msgid "Archived"
-msgstr "Archiviert"
+#: mod/photos.php:1587
+msgid "Do not rotate"
+msgstr "Nicht rotieren"
 
-#: mod/contacts.php:738
-msgid "Only show archived contacts"
-msgstr "Nur archivierte Kontakte anzeigen"
+#: mod/photos.php:1588
+msgid "Rotate CW (right)"
+msgstr "Drehen US (rechts)"
 
-#: mod/contacts.php:744
-msgid "Hidden"
-msgstr "Verborgen"
+#: mod/photos.php:1589
+msgid "Rotate CCW (left)"
+msgstr "Drehen EUS (links)"
 
-#: mod/contacts.php:747
-msgid "Only show hidden contacts"
-msgstr "Nur verborgene Kontakte anzeigen"
+#: mod/photos.php:1604
+msgid "Private photo"
+msgstr "Privates Foto"
+
+#: mod/photos.php:1605
+msgid "Public photo"
+msgstr "Öffentliches Foto"
 
-#: mod/contacts.php:804
-msgid "Search your contacts"
-msgstr "Suche in deinen Kontakten"
+#: mod/photos.php:1814
+msgid "Map"
+msgstr "Karte"
 
-#: mod/contacts.php:805 mod/network.php:145 mod/search.php:232
-#, php-format
-msgid "Results for: %s"
-msgstr "Ergebnisse für: %s"
+#: mod/photos.php:1891 mod/videos.php:393
+msgid "View Album"
+msgstr "Album betrachten"
 
-#: mod/contacts.php:815 mod/contacts.php:1007
-msgid "Archive"
-msgstr "Archivieren"
+#: mod/probe.php:10 mod/webfinger.php:9
+msgid "Only logged in users are permitted to perform a probing."
+msgstr "Nur eingeloggten Benutzern ist das Untersuchen von Adressen gestattet."
 
-#: mod/contacts.php:815 mod/contacts.php:1007
-msgid "Unarchive"
-msgstr "Aus Archiv zurückholen"
+#: mod/profile.php:175
+msgid "Tips for New Members"
+msgstr "Tipps für neue Nutzer"
 
-#: mod/contacts.php:818
-msgid "Batch Actions"
-msgstr "Stapelverarbeitung"
+#: mod/profiles.php:38
+msgid "Profile deleted."
+msgstr "Profil gelöscht."
 
-#: mod/contacts.php:864
-msgid "View all contacts"
-msgstr "Alle Kontakte anzeigen"
+#: mod/profiles.php:54 mod/profiles.php:90
+msgid "Profile-"
+msgstr "Profil-"
 
-#: mod/contacts.php:874
-msgid "View all common friends"
-msgstr "Alle Kontakte anzeigen"
+#: mod/profiles.php:73 mod/profiles.php:118
+msgid "New profile created."
+msgstr "Neues Profil angelegt."
 
-#: mod/contacts.php:881
-msgid "Advanced Contact Settings"
-msgstr "Fortgeschrittene Kontakteinstellungen"
+#: mod/profiles.php:96
+msgid "Profile unavailable to clone."
+msgstr "Profil nicht zum Duplizieren verfügbar."
 
-#: mod/contacts.php:915
-msgid "Mutual Friendship"
-msgstr "Beidseitige Freundschaft"
+#: mod/profiles.php:192
+msgid "Profile Name is required."
+msgstr "Profilname ist erforderlich."
 
-#: mod/contacts.php:919
-msgid "is a fan of yours"
-msgstr "ist ein Fan von dir"
+#: mod/profiles.php:332
+msgid "Marital Status"
+msgstr "Familienstand"
 
-#: mod/contacts.php:923
-msgid "you are a fan of"
-msgstr "Du bist Fan von"
+#: mod/profiles.php:336
+msgid "Romantic Partner"
+msgstr "Romanze"
 
-#: mod/contacts.php:993
-msgid "Toggle Blocked status"
-msgstr "Geblockt-Status ein-/ausschalten"
+#: mod/profiles.php:348
+msgid "Work/Employment"
+msgstr "Arbeit / Beschäftigung"
 
-#: mod/contacts.php:1001
-msgid "Toggle Ignored status"
-msgstr "Ignoriert-Status ein-/ausschalten"
+#: mod/profiles.php:351
+msgid "Religion"
+msgstr "Religion"
 
-#: mod/contacts.php:1009
-msgid "Toggle Archive status"
-msgstr "Archiviert-Status ein-/ausschalten"
+#: mod/profiles.php:355
+msgid "Political Views"
+msgstr "Politische Ansichten"
 
-#: mod/contacts.php:1017
-msgid "Delete contact"
-msgstr "Lösche den Kontakt"
+#: mod/profiles.php:359
+msgid "Gender"
+msgstr "Geschlecht"
 
-#: mod/dfrn_confirm.php:70 mod/profiles.php:19 mod/profiles.php:134
-#: mod/profiles.php:180 mod/profiles.php:619
-msgid "Profile not found."
-msgstr "Profil nicht gefunden."
+#: mod/profiles.php:363
+msgid "Sexual Preference"
+msgstr "Sexuelle Vorlieben"
 
-#: mod/dfrn_confirm.php:127
-msgid ""
-"This may occasionally happen if contact was requested by both persons and it"
-" has already been approved."
-msgstr "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."
+#: mod/profiles.php:367
+msgid "XMPP"
+msgstr "XMPP"
 
-#: mod/dfrn_confirm.php:244
-msgid "Response from remote site was not understood."
-msgstr "Antwort der Gegenstelle unverständlich."
+#: mod/profiles.php:371
+msgid "Homepage"
+msgstr "Webseite"
 
-#: mod/dfrn_confirm.php:253 mod/dfrn_confirm.php:258
-msgid "Unexpected response from remote site: "
-msgstr "Unerwartete Antwort der Gegenstelle: "
+#: mod/profiles.php:375 mod/profiles.php:695
+msgid "Interests"
+msgstr "Interessen"
 
-#: mod/dfrn_confirm.php:267
-msgid "Confirmation completed successfully."
-msgstr "Bestätigung erfolgreich abgeschlossen."
+#: mod/profiles.php:379
+msgid "Address"
+msgstr "Adresse"
 
-#: mod/dfrn_confirm.php:269 mod/dfrn_confirm.php:283 mod/dfrn_confirm.php:290
-msgid "Remote site reported: "
-msgstr "Gegenstelle meldet: "
+#: mod/profiles.php:386 mod/profiles.php:691
+msgid "Location"
+msgstr "Wohnort"
 
-#: mod/dfrn_confirm.php:281
-msgid "Temporary failure. Please wait and try again."
-msgstr "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."
+#: mod/profiles.php:471
+msgid "Profile updated."
+msgstr "Profil aktualisiert."
 
-#: mod/dfrn_confirm.php:288
-msgid "Introduction failed or was revoked."
-msgstr "Kontaktanfrage schlug fehl oder wurde zurückgezogen."
+#: mod/profiles.php:564
+msgid " and "
+msgstr " und "
 
-#: mod/dfrn_confirm.php:418
-msgid "Unable to set contact photo."
-msgstr "Konnte das Bild des Kontakts nicht speichern."
+#: mod/profiles.php:573
+msgid "public profile"
+msgstr "öffentliches Profil"
 
-#: mod/dfrn_confirm.php:559
+#: mod/profiles.php:576
 #, php-format
-msgid "No user record found for '%s' "
-msgstr "Für '%s' wurde kein Nutzer gefunden"
+msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+msgstr "%1$s hat %2$s geändert auf &ldquo;%3$s&rdquo;"
 
-#: mod/dfrn_confirm.php:569
-msgid "Our site encryption key is apparently messed up."
-msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung."
+#: mod/profiles.php:577
+#, php-format
+msgid " - Visit %1$s's %2$s"
+msgstr " – %1$ss %2$s besuchen"
 
-#: mod/dfrn_confirm.php:580
-msgid "Empty site URL was provided or URL could not be decrypted by us."
-msgstr "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."
+#: mod/profiles.php:579
+#, php-format
+msgid "%1$s has an updated %2$s, changing %3$s."
+msgstr "%1$s hat folgendes aktualisiert %2$s, verändert wurde %3$s."
 
-#: mod/dfrn_confirm.php:601
-msgid "Contact record was not found for you on our site."
-msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."
+#: mod/profiles.php:637
+msgid "Hide contacts and friends:"
+msgstr "Kontakte und Freunde verbergen"
 
-#: mod/dfrn_confirm.php:615
-#, php-format
-msgid "Site public key not available in contact record for URL %s."
-msgstr "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."
+#: mod/profiles.php:642
+msgid "Hide your contact/friend list from viewers of this profile?"
+msgstr "Liste der Kontakte vor Betrachtern dieses Profils verbergen?"
 
-#: mod/dfrn_confirm.php:635
-msgid ""
-"The ID provided by your system is a duplicate on our system. It should work "
-"if you try again."
-msgstr "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."
+#: mod/profiles.php:667
+msgid "Show more profile fields:"
+msgstr "Zeige mehr Profil-Felder:"
 
-#: mod/dfrn_confirm.php:646
-msgid "Unable to set your contact credentials on our system."
-msgstr "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."
+#: mod/profiles.php:679
+msgid "Profile Actions"
+msgstr "Profilaktionen"
 
-#: mod/dfrn_confirm.php:708
-msgid "Unable to update your contact profile details on our system"
-msgstr "Die Updates für Dein Profil konnten nicht gespeichert werden"
+#: mod/profiles.php:680
+msgid "Edit Profile Details"
+msgstr "Profil bearbeiten"
 
-#: mod/dfrn_confirm.php:780
-#, php-format
-msgid "%1$s has joined %2$s"
-msgstr "%1$s ist %2$s beigetreten"
+#: mod/profiles.php:682
+msgid "Change Profile Photo"
+msgstr "Profilbild ändern"
 
-#: mod/editpost.php:17 mod/editpost.php:27
-msgid "Item not found"
-msgstr "Beitrag nicht gefunden"
+#: mod/profiles.php:683
+msgid "View this profile"
+msgstr "Dieses Profil anzeigen"
 
-#: mod/editpost.php:32
-msgid "Edit post"
-msgstr "Beitrag bearbeiten"
+#: mod/profiles.php:685
+msgid "Create a new profile using these settings"
+msgstr "Neues Profil anlegen und diese Einstellungen verwenden"
 
-#: mod/events.php:100 mod/events.php:102
-msgid "Event can not end before it has started."
-msgstr "Die Veranstaltung kann nicht enden bevor sie beginnt."
+#: mod/profiles.php:686
+msgid "Clone this profile"
+msgstr "Dieses Profil duplizieren"
 
-#: mod/events.php:109 mod/events.php:111
-msgid "Event title and start time are required."
-msgstr "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden."
+#: mod/profiles.php:687
+msgid "Delete this profile"
+msgstr "Dieses Profil löschen"
 
-#: mod/events.php:388
-msgid "Create New Event"
-msgstr "Neue Veranstaltung erstellen"
+#: mod/profiles.php:689
+msgid "Basic information"
+msgstr "Grundinformationen"
 
-#: mod/events.php:489
-msgid "Event details"
-msgstr "Veranstaltungsdetails"
+#: mod/profiles.php:690
+msgid "Profile picture"
+msgstr "Profilbild"
 
-#: mod/events.php:490
-msgid "Starting date and Title are required."
-msgstr "Anfangszeitpunkt und Titel werden benötigt"
+#: mod/profiles.php:692
+msgid "Preferences"
+msgstr "Vorlieben"
 
-#: mod/events.php:491 mod/events.php:492
-msgid "Event Starts:"
-msgstr "Veranstaltungsbeginn:"
+#: mod/profiles.php:693
+msgid "Status information"
+msgstr "Status Informationen"
 
-#: mod/events.php:491 mod/events.php:503 mod/profiles.php:708
-msgid "Required"
-msgstr "Benötigt"
+#: mod/profiles.php:694
+msgid "Additional information"
+msgstr "Zusätzliche Informationen"
 
-#: mod/events.php:493 mod/events.php:509
-msgid "Finish date/time is not known or not relevant"
-msgstr "Enddatum/-zeit ist nicht bekannt oder nicht relevant"
+#: mod/profiles.php:697
+msgid "Relation"
+msgstr "Beziehung"
 
-#: mod/events.php:495 mod/events.php:496
-msgid "Event Finishes:"
-msgstr "Veranstaltungsende:"
+#: mod/profiles.php:701
+msgid "Your Gender:"
+msgstr "Dein Geschlecht:"
 
-#: mod/events.php:497 mod/events.php:510
-msgid "Adjust for viewer timezone"
-msgstr "An Zeitzone des Betrachters anpassen"
+#: mod/profiles.php:702
+msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
+msgstr "<span class=\"heart\">&hearts;</span> Beziehungsstatus:"
 
-#: mod/events.php:499
-msgid "Description:"
-msgstr "Beschreibung"
+#: mod/profiles.php:704
+msgid "Example: fishing photography software"
+msgstr "Beispiel: Fischen Fotografie Software"
 
-#: mod/events.php:503 mod/events.php:505
-msgid "Title:"
-msgstr "Titel:"
+#: mod/profiles.php:709
+msgid "Profile Name:"
+msgstr "Profilname:"
 
-#: mod/events.php:506 mod/events.php:507
-msgid "Share this event"
-msgstr "Veranstaltung teilen"
+#: mod/profiles.php:711
+msgid ""
+"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
+"be visible to anybody using the internet."
+msgstr "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein."
 
-#: mod/fbrowser.php:132
-msgid "Files"
-msgstr "Dateien"
+#: mod/profiles.php:712
+msgid "Your Full Name:"
+msgstr "Dein kompletter Name:"
 
-#: mod/friendica.php:72
-msgid "This is Friendica, version"
-msgstr "Dies ist Friendica, Version"
+#: mod/profiles.php:713
+msgid "Title/Description:"
+msgstr "Titel/Beschreibung:"
 
-#: mod/friendica.php:73
-msgid "running at web location"
-msgstr "die unter folgender Webadresse zu finden ist"
+#: mod/profiles.php:716
+msgid "Street Address:"
+msgstr "Adresse:"
 
-#: mod/friendica.php:75
-msgid ""
-"Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
-"more about the Friendica project."
-msgstr "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren."
+#: mod/profiles.php:717
+msgid "Locality/City:"
+msgstr "Wohnort:"
 
-#: mod/friendica.php:77
-msgid "Bug reports and issues: please visit"
-msgstr "Probleme oder Fehler gefunden? Bitte besuche"
+#: mod/profiles.php:718
+msgid "Region/State:"
+msgstr "Region/Bundesstaat:"
 
-#: mod/friendica.php:77
-msgid "the bugtracker at github"
-msgstr "den Bugtracker auf github"
+#: mod/profiles.php:719
+msgid "Postal/Zip Code:"
+msgstr "Postleitzahl:"
 
-#: mod/friendica.php:78
-msgid ""
-"Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - "
-"dot com"
-msgstr "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com"
+#: mod/profiles.php:720
+msgid "Country:"
+msgstr "Land:"
 
-#: mod/friendica.php:92
-msgid "Installed plugins/addons/apps:"
-msgstr "Installierte Plugins/Erweiterungen/Apps:"
+#: mod/profiles.php:724
+msgid "Who: (if applicable)"
+msgstr "Wer: (falls anwendbar)"
 
-#: mod/friendica.php:105
-msgid "No installed plugins/addons/apps"
-msgstr "Keine Plugins/Erweiterungen/Apps installiert"
+#: mod/profiles.php:724
+msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
+msgstr "Beispiele: cathy123, Cathy Williams, cathy@example.com"
 
-#: mod/item.php:118
-msgid "Unable to locate original post."
-msgstr "Konnte den Originalbeitrag nicht finden."
+#: mod/profiles.php:725
+msgid "Since [date]:"
+msgstr "Seit [Datum]:"
 
-#: mod/item.php:336
-msgid "Empty post discarded."
-msgstr "Leerer Beitrag wurde verworfen."
+#: mod/profiles.php:727
+msgid "Tell us about yourself..."
+msgstr "Erzähle uns ein bisschen von Dir …"
 
-#: mod/item.php:889
-msgid "System error. Post not saved."
-msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden."
+#: mod/profiles.php:728
+msgid "XMPP (Jabber) address:"
+msgstr "XMPP (Jabber) Adresse"
 
-#: mod/item.php:979
-#, php-format
+#: mod/profiles.php:728
 msgid ""
-"This message was sent to you by %s, a member of the Friendica social "
-"network."
-msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."
+"The XMPP address will be propagated to your contacts so that they can follow"
+" you."
+msgstr "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können."
 
-#: mod/item.php:981
-#, php-format
-msgid "You may visit them online at %s"
-msgstr "Du kannst sie online unter %s besuchen"
+#: mod/profiles.php:729
+msgid "Homepage URL:"
+msgstr "Adresse der Homepage:"
 
-#: mod/item.php:982
-msgid ""
-"Please contact the sender by replying to this post if you do not wish to "
-"receive these messages."
-msgstr "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest."
+#: mod/profiles.php:732
+msgid "Religious Views:"
+msgstr "Religiöse Ansichten:"
 
-#: mod/item.php:986
-#, php-format
-msgid "%s posted an update."
-msgstr "%s hat ein Update veröffentlicht."
+#: mod/profiles.php:733
+msgid "Public Keywords:"
+msgstr "Öffentliche Schlüsselwörter:"
 
-#: mod/message.php:60 mod/wallmessage.php:50
-msgid "No recipient selected."
-msgstr "Kein Empfänger gewählt."
+#: mod/profiles.php:733
+msgid "(Used for suggesting potential friends, can be seen by others)"
+msgstr "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)"
 
-#: mod/message.php:64
-msgid "Unable to locate contact information."
-msgstr "Konnte die Kontaktinformationen nicht finden."
+#: mod/profiles.php:734
+msgid "Private Keywords:"
+msgstr "Private Schlüsselwörter:"
 
-#: mod/message.php:67 mod/wallmessage.php:56
-msgid "Message could not be sent."
-msgstr "Nachricht konnte nicht gesendet werden."
+#: mod/profiles.php:734
+msgid "(Used for searching profiles, never shown to others)"
+msgstr "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"
 
-#: mod/message.php:70 mod/wallmessage.php:59
-msgid "Message collection failure."
-msgstr "Konnte Nachrichten nicht abrufen."
+#: mod/profiles.php:737
+msgid "Musical interests"
+msgstr "Musikalische Interessen"
 
-#: mod/message.php:73 mod/wallmessage.php:62
-msgid "Message sent."
-msgstr "Nachricht gesendet."
+#: mod/profiles.php:738
+msgid "Books, literature"
+msgstr "Bücher, Literatur"
 
-#: mod/message.php:204
-msgid "Do you really want to delete this message?"
-msgstr "Möchtest Du wirklich diese Nachricht löschen?"
+#: mod/profiles.php:739
+msgid "Television"
+msgstr "Fernsehen"
 
-#: mod/message.php:224
-msgid "Message deleted."
-msgstr "Nachricht gelöscht."
+#: mod/profiles.php:740
+msgid "Film/dance/culture/entertainment"
+msgstr "Filme/Tänze/Kultur/Unterhaltung"
 
-#: mod/message.php:255
-msgid "Conversation removed."
-msgstr "Unterhaltung gelöscht."
+#: mod/profiles.php:741
+msgid "Hobbies/Interests"
+msgstr "Hobbies/Interessen"
 
-#: mod/message.php:322 mod/wallmessage.php:126
-msgid "Send Private Message"
-msgstr "Private Nachricht senden"
+#: mod/profiles.php:742
+msgid "Love/romance"
+msgstr "Liebe/Romantik"
 
-#: mod/message.php:323 mod/message.php:510 mod/wallmessage.php:128
-msgid "To:"
-msgstr "An:"
+#: mod/profiles.php:743
+msgid "Work/employment"
+msgstr "Arbeit/Anstellung"
 
-#: mod/message.php:328 mod/message.php:512 mod/wallmessage.php:129
-msgid "Subject:"
-msgstr "Betreff:"
+#: mod/profiles.php:744
+msgid "School/education"
+msgstr "Schule/Ausbildung"
 
-#: mod/message.php:364
-msgid "No messages."
-msgstr "Keine Nachrichten."
+#: mod/profiles.php:745
+msgid "Contact information and Social Networks"
+msgstr "Kontaktinformationen und Soziale Netzwerke"
 
-#: mod/message.php:403
-msgid "Message not available."
-msgstr "Nachricht nicht verfügbar."
+#: mod/profiles.php:786
+msgid "Edit/Manage Profiles"
+msgstr "Bearbeite/Verwalte Profile"
 
-#: mod/message.php:477
-msgid "Delete message"
-msgstr "Nachricht löschen"
+#: mod/register.php:93
+msgid ""
+"Registration successful. Please check your email for further instructions."
+msgstr "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet."
 
-#: mod/message.php:503 mod/message.php:583
-msgid "Delete conversation"
-msgstr "Unterhaltung löschen"
+#: mod/register.php:98
+#, 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."
+msgstr "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern."
 
-#: mod/message.php:505
+#: mod/register.php:105
+msgid "Registration successful."
+msgstr "Registrierung erfolgreich."
+
+#: mod/register.php:111
+msgid "Your registration can not be processed."
+msgstr "Deine Registrierung konnte nicht verarbeitet werden."
+
+#: mod/register.php:160
+msgid "Your registration is pending approval by the site owner."
+msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."
+
+#: mod/register.php:226
 msgid ""
-"No secure communications available. You <strong>may</strong> be able to "
-"respond from the sender's profile page."
-msgstr "Sichere Kommunikation ist nicht verfügbar. <strong>Eventuell</strong> kannst Du auf der Profilseite des Absenders antworten."
+"You may (optionally) fill in this form via OpenID by supplying your OpenID "
+"and clicking 'Register'."
+msgstr "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst."
 
-#: mod/message.php:509
-msgid "Send Reply"
-msgstr "Antwort senden"
+#: mod/register.php:227
+msgid ""
+"If you are not familiar with OpenID, please leave that field blank and fill "
+"in the rest of the items."
+msgstr "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus."
 
-#: mod/message.php:553
-#, php-format
-msgid "Unknown sender - %s"
-msgstr "'Unbekannter Absender - %s"
+#: mod/register.php:228
+msgid "Your OpenID (optional): "
+msgstr "Deine OpenID (optional): "
 
-#: mod/message.php:555
-#, php-format
-msgid "You and %s"
-msgstr "Du und %s"
+#: mod/register.php:242
+msgid "Include your profile in member directory?"
+msgstr "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?"
 
-#: mod/message.php:557
-#, php-format
-msgid "%s and You"
-msgstr "%s und Du"
+#: mod/register.php:267
+msgid "Note for the admin"
+msgstr "Hinweis für den Admin"
 
-#: mod/message.php:586
-msgid "D, d M Y - g:i A"
-msgstr "D, d. M Y - g:i A"
+#: mod/register.php:267
+msgid "Leave a message for the admin, why you want to join this node"
+msgstr "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest."
 
-#: mod/message.php:589
-#, php-format
-msgid "%d message"
-msgid_plural "%d messages"
-msgstr[0] "%d Nachricht"
-msgstr[1] "%d Nachrichten"
+#: mod/register.php:268
+msgid "Membership on this site is by invitation only."
+msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich."
 
-#: mod/p.php:9
-msgid "Not Extended"
-msgstr "Nicht erweitert."
+#: mod/register.php:269
+msgid "Your invitation ID: "
+msgstr "ID Deiner Einladung: "
 
-#: mod/ping.php:270
-msgid "{0} wants to be your friend"
-msgstr "{0} möchte mit Dir in Kontakt treten"
+#: mod/register.php:272 mod/admin.php:1056
+msgid "Registration"
+msgstr "Registrierung"
 
-#: mod/ping.php:285
-msgid "{0} sent you a message"
-msgstr "{0} schickte Dir eine Nachricht"
+#: mod/register.php:280
+msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
+msgstr "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):"
 
-#: mod/ping.php:300
-msgid "{0} requested registration"
-msgstr "{0} möchte sich registrieren"
+#: mod/register.php:281
+msgid "Your Email Address: "
+msgstr "Deine E-Mail-Adresse: "
 
-#: mod/wallmessage.php:42 mod/wallmessage.php:106
-#, php-format
-msgid "Number of daily wall messages for %s exceeded. Message failed."
-msgstr "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen."
+#: mod/register.php:283 mod/settings.php:1278
+msgid "New Password:"
+msgstr "Neues Passwort:"
 
-#: mod/wallmessage.php:53
-msgid "Unable to check your home location."
-msgstr "Konnte Deinen Heimatort nicht bestimmen."
+#: mod/register.php:283
+msgid "Leave empty for an auto generated password."
+msgstr "Leer lassen um das Passwort automatisch zu generieren."
 
-#: mod/wallmessage.php:80 mod/wallmessage.php:89
-msgid "No recipient."
-msgstr "Kein Empfänger."
+#: mod/register.php:284 mod/settings.php:1279
+msgid "Confirm:"
+msgstr "Bestätigen:"
 
-#: mod/wallmessage.php:127
-#, php-format
+#: mod/register.php:285
 msgid ""
-"If you wish for %s to respond, please check that the privacy settings on "
-"your site allow private mail from unknown senders."
-msgstr "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."
+"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 "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@$sitename</strong>' sein."
 
-#: mod/photos.php:90 mod/photos.php:1876
-msgid "Recent Photos"
-msgstr "Neueste Fotos"
+#: mod/register.php:286
+msgid "Choose a nickname: "
+msgstr "Spitznamen wählen: "
 
-#: mod/photos.php:93 mod/photos.php:1303 mod/photos.php:1878
-msgid "Upload New Photos"
-msgstr "Neue Fotos hochladen"
+#: mod/register.php:296
+msgid "Import your profile to this friendica instance"
+msgstr "Importiere Dein Profil auf diese Friendica Instanz"
 
-#: mod/photos.php:171
-msgid "Contact information unavailable"
-msgstr "Kontaktinformationen nicht verfügbar"
+#: mod/search.php:100
+msgid "Only logged in users are permitted to perform a search."
+msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet."
 
-#: mod/photos.php:192
-msgid "Album not found."
-msgstr "Album nicht gefunden."
+#: mod/search.php:124
+msgid "Too Many Requests"
+msgstr "Zu viele Abfragen"
 
-#: mod/photos.php:225 mod/photos.php:237 mod/photos.php:1247
-msgid "Delete Album"
-msgstr "Album löschen"
+#: mod/search.php:125
+msgid "Only one search per minute is permitted for not logged in users."
+msgstr "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet."
 
-#: mod/photos.php:235
-msgid "Do you really want to delete this photo album and all its photos?"
-msgstr "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?"
+#: mod/search.php:225
+#, php-format
+msgid "Items tagged with: %s"
+msgstr "Beiträge die mit %s getaggt sind"
 
-#: mod/photos.php:317 mod/photos.php:328 mod/photos.php:1563
-msgid "Delete Photo"
-msgstr "Foto löschen"
+#: mod/settings.php:43 mod/admin.php:1490
+msgid "Account"
+msgstr "Nutzerkonto"
 
-#: mod/photos.php:326
-msgid "Do you really want to delete this photo?"
-msgstr "Möchtest Du wirklich dieses Foto löschen?"
+#: mod/settings.php:52 mod/admin.php:169
+msgid "Additional features"
+msgstr "Zusätzliche Features"
 
-#: mod/photos.php:705
-#, php-format
-msgid "%1$s was tagged in %2$s by %3$s"
-msgstr "%1$s wurde von %3$s in %2$s getaggt"
+#: mod/settings.php:60
+msgid "Display"
+msgstr "Anzeige"
 
-#: mod/photos.php:705
-msgid "a photo"
-msgstr "einem Foto"
+#: mod/settings.php:67 mod/settings.php:890
+msgid "Social Networks"
+msgstr "Soziale Netzwerke"
 
-#: mod/photos.php:811
-msgid "Image file is empty."
-msgstr "Bilddatei ist leer."
+#: mod/settings.php:74 mod/admin.php:167 mod/admin.php:1616 mod/admin.php:1679
+msgid "Plugins"
+msgstr "Plugins"
 
-#: mod/photos.php:974
-msgid "No photos selected"
-msgstr "Keine Bilder ausgewählt"
+#: mod/settings.php:88
+msgid "Connected apps"
+msgstr "Verbundene Programme"
 
-#: mod/photos.php:1134
-#, php-format
-msgid "You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."
-msgstr "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers."
+#: mod/settings.php:95 mod/uexport.php:45
+msgid "Export personal data"
+msgstr "Persönliche Daten exportieren"
 
-#: mod/photos.php:1168
-msgid "Upload Photos"
-msgstr "Bilder hochladen"
+#: mod/settings.php:102
+msgid "Remove account"
+msgstr "Konto löschen"
 
-#: mod/photos.php:1172 mod/photos.php:1242
-msgid "New album name: "
-msgstr "Name des neuen Albums: "
+#: mod/settings.php:157
+msgid "Missing some important data!"
+msgstr "Wichtige Daten fehlen!"
 
-#: mod/photos.php:1173
-msgid "or existing album name: "
-msgstr "oder existierender Albumname: "
+#: mod/settings.php:271
+msgid "Failed to connect with email account using the settings provided."
+msgstr "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich."
 
-#: mod/photos.php:1174
-msgid "Do not show a status post for this upload"
-msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen"
+#: mod/settings.php:276
+msgid "Email settings updated."
+msgstr "E-Mail Einstellungen bearbeitet."
 
-#: mod/photos.php:1187
-msgid "Private Photo"
-msgstr "Privates Foto"
+#: mod/settings.php:291
+msgid "Features updated"
+msgstr "Features aktualisiert"
 
-#: mod/photos.php:1188
-msgid "Public Photo"
-msgstr "Öffentliches Foto"
+#: mod/settings.php:361
+msgid "Relocate message has been send to your contacts"
+msgstr "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet."
 
-#: mod/photos.php:1254
-msgid "Edit Album"
-msgstr "Album bearbeiten"
+#: mod/settings.php:380
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert."
 
-#: mod/photos.php:1260
-msgid "Show Newest First"
-msgstr "Zeige neueste zuerst"
+#: mod/settings.php:388
+msgid "Wrong password."
+msgstr "Falsches Passwort."
 
-#: mod/photos.php:1262
-msgid "Show Oldest First"
-msgstr "Zeige älteste zuerst"
+#: mod/settings.php:399
+msgid "Password changed."
+msgstr "Passwort geändert."
 
-#: mod/photos.php:1289 mod/photos.php:1861
-msgid "View Photo"
-msgstr "Foto betrachten"
+#: mod/settings.php:401
+msgid "Password update failed. Please try again."
+msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
 
-#: mod/photos.php:1335
-msgid "Permission denied. Access to this item may be restricted."
-msgstr "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."
+#: mod/settings.php:481
+msgid " Please use a shorter name."
+msgstr " Bitte verwende einen kürzeren Namen."
 
-#: mod/photos.php:1337
-msgid "Photo not available"
-msgstr "Foto nicht verfügbar"
+#: mod/settings.php:483
+msgid " Name too short."
+msgstr " Name ist zu kurz."
 
-#: mod/photos.php:1395
-msgid "View photo"
-msgstr "Fotos ansehen"
+#: mod/settings.php:492
+msgid "Wrong Password"
+msgstr "Falsches Passwort"
 
-#: mod/photos.php:1395
-msgid "Edit photo"
-msgstr "Foto bearbeiten"
+#: mod/settings.php:497
+msgid " Not valid email."
+msgstr " Keine gültige E-Mail."
 
-#: mod/photos.php:1396
-msgid "Use as profile photo"
-msgstr "Als Profilbild verwenden"
+#: mod/settings.php:503
+msgid " Cannot change to that email."
+msgstr "Ändern der E-Mail nicht möglich. "
 
-#: mod/photos.php:1421
-msgid "View Full Size"
-msgstr "Betrachte Originalgröße"
+#: mod/settings.php:559
+msgid "Private forum has no privacy permissions. Using default privacy group."
+msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt."
 
-#: mod/photos.php:1507
-msgid "Tags: "
-msgstr "Tags: "
+#: mod/settings.php:563
+msgid "Private forum has no privacy permissions and no default privacy group."
+msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte."
 
-#: mod/photos.php:1510
-msgid "[Remove any tag]"
-msgstr "[Tag entfernen]"
+#: mod/settings.php:603
+msgid "Settings updated."
+msgstr "Einstellungen aktualisiert."
 
-#: mod/photos.php:1549
-msgid "New album name"
-msgstr "Name des neuen Albums"
+#: mod/settings.php:680 mod/settings.php:706 mod/settings.php:742
+msgid "Add application"
+msgstr "Programm hinzufügen"
 
-#: mod/photos.php:1550
-msgid "Caption"
-msgstr "Bildunterschrift"
+#: mod/settings.php:681 mod/settings.php:792 mod/settings.php:841
+#: mod/settings.php:908 mod/settings.php:1005 mod/settings.php:1271
+#: mod/admin.php:1055 mod/admin.php:1680 mod/admin.php:1943 mod/admin.php:2017
+#: mod/admin.php:2170
+msgid "Save Settings"
+msgstr "Einstellungen speichern"
 
-#: mod/photos.php:1551
-msgid "Add a Tag"
-msgstr "Tag hinzufügen"
+#: mod/settings.php:684 mod/settings.php:710
+msgid "Consumer Key"
+msgstr "Consumer Key"
 
-#: mod/photos.php:1551
-msgid ""
-"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
-msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
+#: mod/settings.php:685 mod/settings.php:711
+msgid "Consumer Secret"
+msgstr "Consumer Secret"
 
-#: mod/photos.php:1552
-msgid "Do not rotate"
-msgstr "Nicht rotieren"
+#: mod/settings.php:686 mod/settings.php:712
+msgid "Redirect"
+msgstr "Umleiten"
 
-#: mod/photos.php:1553
-msgid "Rotate CW (right)"
-msgstr "Drehen US (rechts)"
+#: mod/settings.php:687 mod/settings.php:713
+msgid "Icon url"
+msgstr "Icon URL"
 
-#: mod/photos.php:1554
-msgid "Rotate CCW (left)"
-msgstr "Drehen EUS (links)"
+#: mod/settings.php:698
+msgid "You can't edit this application."
+msgstr "Du kannst dieses Programm nicht bearbeiten."
 
-#: mod/photos.php:1569
-msgid "Private photo"
-msgstr "Privates Foto"
+#: mod/settings.php:741
+msgid "Connected Apps"
+msgstr "Verbundene Programme"
 
-#: mod/photos.php:1570
-msgid "Public photo"
-msgstr "Öffentliches Foto"
+#: mod/settings.php:745
+msgid "Client key starts with"
+msgstr "Anwenderschlüssel beginnt mit"
 
-#: mod/photos.php:1792
-msgid "Map"
-msgstr "Karte"
+#: mod/settings.php:746
+msgid "No name"
+msgstr "Kein Name"
 
-#: mod/dfrn_request.php:101
-msgid "This introduction has already been accepted."
-msgstr "Diese Kontaktanfrage wurde bereits akzeptiert."
+#: mod/settings.php:747
+msgid "Remove authorization"
+msgstr "Autorisierung entziehen"
 
-#: mod/dfrn_request.php:124 mod/dfrn_request.php:523
-msgid "Profile location is not valid or does not contain profile information."
-msgstr "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung."
+#: mod/settings.php:759
+msgid "No Plugin settings configured"
+msgstr "Keine Plugin-Einstellungen konfiguriert"
 
-#: mod/dfrn_request.php:129 mod/dfrn_request.php:528
-msgid "Warning: profile location has no identifiable owner name."
-msgstr "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."
+#: mod/settings.php:768
+msgid "Plugin Settings"
+msgstr "Plugin-Einstellungen"
 
-#: mod/dfrn_request.php:132 mod/dfrn_request.php:531
-msgid "Warning: profile location has no profile photo."
-msgstr "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse."
+#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160
+msgid "Off"
+msgstr "Aus"
 
-#: mod/dfrn_request.php:136 mod/dfrn_request.php:535
-#, 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] "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden"
-msgstr[1] "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden"
+#: mod/settings.php:782 mod/admin.php:2159 mod/admin.php:2160
+msgid "On"
+msgstr "An"
 
-#: mod/dfrn_request.php:180
-msgid "Introduction complete."
-msgstr "Kontaktanfrage abgeschlossen."
+#: mod/settings.php:790
+msgid "Additional Features"
+msgstr "Zusätzliche Features"
 
-#: mod/dfrn_request.php:225
-msgid "Unrecoverable protocol error."
-msgstr "Nicht behebbarer Protokollfehler."
+#: mod/settings.php:800 mod/settings.php:804
+msgid "General Social Media Settings"
+msgstr "Allgemeine Einstellungen zu Sozialen Medien"
 
-#: mod/dfrn_request.php:253
-msgid "Profile unavailable."
-msgstr "Profil nicht verfügbar."
+#: mod/settings.php:810
+msgid "Disable intelligent shortening"
+msgstr "Intelligentes Link kürzen ausschalten"
 
-#: mod/dfrn_request.php:280
-#, php-format
-msgid "%s has received too many connection requests today."
-msgstr "%s hat heute zu viele Kontaktanfragen erhalten."
+#: mod/settings.php:812
+msgid ""
+"Normally the system tries to find the best link to add to shortened posts. "
+"If this option is enabled then every shortened post will always point to the"
+" original friendica post."
+msgstr "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt."
 
-#: mod/dfrn_request.php:281
-msgid "Spam protection measures have been invoked."
-msgstr "Maßnahmen zum Spamschutz wurden ergriffen."
+#: mod/settings.php:818
+msgid "Automatically follow any GNU Social (OStatus) followers/mentioners"
+msgstr "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen"
 
-#: mod/dfrn_request.php:282
-msgid "Friends are advised to please try again in 24 hours."
-msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."
+#: mod/settings.php:820
+msgid ""
+"If you receive a message from an unknown OStatus user, this option decides "
+"what to do. If it is checked, a new contact will be created for every "
+"unknown user."
+msgstr "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,."
 
-#: mod/dfrn_request.php:344
-msgid "Invalid locator"
-msgstr "Ungültiger Locator"
+#: mod/settings.php:826
+msgid "Default group for OStatus contacts"
+msgstr "Voreingestellte Gruppe für OStatus Kontakte"
 
-#: mod/dfrn_request.php:353
-msgid "Invalid email address."
-msgstr "Ungültige E-Mail-Adresse."
+#: mod/settings.php:834
+msgid "Your legacy GNU Social account"
+msgstr "Dein alter GNU Social Account"
 
-#: mod/dfrn_request.php:378
-msgid "This account has not been configured for email. Request failed."
-msgstr "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen."
+#: mod/settings.php:836
+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 "Wenn du deinen alten GNU Socual/Statusnet Accountnamen hier angibst (Format name@domain.tld) werden deine Kontakte automatisch hinzugefügt. Dieses Feld wird geleert, wenn die Kontakte hinzugefügt wurden."
 
-#: mod/dfrn_request.php:481
-msgid "You have already introduced yourself here."
-msgstr "Du hast Dich hier bereits vorgestellt."
+#: mod/settings.php:839
+msgid "Repair OStatus subscriptions"
+msgstr "OStatus Abonnements reparieren"
 
-#: mod/dfrn_request.php:485
+#: mod/settings.php:848 mod/settings.php:849
 #, php-format
-msgid "Apparently you are already friends with %s."
-msgstr "Es scheint so, als ob Du bereits mit %s in Kontakt stehst."
+msgid "Built-in support for %s connectivity is %s"
+msgstr "Eingebaute Unterstützung für Verbindungen zu %s ist %s"
 
-#: mod/dfrn_request.php:506
-msgid "Invalid profile URL."
-msgstr "Ungültige Profil-URL."
+#: mod/settings.php:848 mod/settings.php:849
+msgid "enabled"
+msgstr "eingeschaltet"
 
-#: mod/dfrn_request.php:609
-msgid "Your introduction has been sent."
-msgstr "Deine Kontaktanfrage wurde gesendet."
+#: mod/settings.php:848 mod/settings.php:849
+msgid "disabled"
+msgstr "ausgeschaltet"
 
-#: mod/dfrn_request.php:651
-msgid ""
-"Remote subscription can't be done for your network. Please subscribe "
-"directly on your system."
-msgstr "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems.   "
+#: mod/settings.php:849
+msgid "GNU Social (OStatus)"
+msgstr "GNU Social (OStatus)"
 
-#: mod/dfrn_request.php:672
-msgid "Please login to confirm introduction."
-msgstr "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen."
+#: mod/settings.php:883
+msgid "Email access is disabled on this site."
+msgstr "Zugriff auf E-Mails für diese Seite deaktiviert."
+
+#: mod/settings.php:895
+msgid "Email/Mailbox Setup"
+msgstr "E-Mail/Postfach-Einstellungen"
 
-#: mod/dfrn_request.php:682
+#: mod/settings.php:896
 msgid ""
-"Incorrect identity currently logged in. Please login to "
-"<strong>this</strong> profile."
-msgstr "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an."
+"If you wish to communicate with email contacts using this service "
+"(optional), please specify how to connect to your mailbox."
+msgstr "Wenn Du mit E-Mail-Kontakten über diesen Service kommunizieren möchtest (optional), gib bitte die Einstellungen für Dein Postfach an."
 
-#: mod/dfrn_request.php:696 mod/dfrn_request.php:713
-msgid "Confirm"
-msgstr "Bestätigen"
+#: mod/settings.php:897
+msgid "Last successful email check:"
+msgstr "Letzter erfolgreicher E-Mail Check"
 
-#: mod/dfrn_request.php:708
-msgid "Hide this contact"
-msgstr "Verberge diesen Kontakt"
+#: mod/settings.php:899
+msgid "IMAP server name:"
+msgstr "IMAP-Server-Name:"
 
-#: mod/dfrn_request.php:711
-#, php-format
-msgid "Welcome home %s."
-msgstr "Willkommen zurück %s."
+#: mod/settings.php:900
+msgid "IMAP port:"
+msgstr "IMAP-Port:"
 
-#: mod/dfrn_request.php:712
-#, php-format
-msgid "Please confirm your introduction/connection request to %s."
-msgstr "Bitte bestätige Deine Kontaktanfrage bei %s."
+#: mod/settings.php:901
+msgid "Security:"
+msgstr "Sicherheit:"
 
-#: mod/dfrn_request.php:843
-msgid ""
-"Please enter your 'Identity Address' from one of the following supported "
-"communications networks:"
-msgstr "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:"
+#: mod/settings.php:901 mod/settings.php:906
+msgid "None"
+msgstr "Keine"
 
-#: mod/dfrn_request.php:867
-#, 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>."
-msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten."
+#: mod/settings.php:902
+msgid "Email login name:"
+msgstr "E-Mail-Login-Name:"
 
-#: mod/dfrn_request.php:872
-msgid "Friend/Connection Request"
-msgstr "Kontaktanfrage"
+#: mod/settings.php:903
+msgid "Email password:"
+msgstr "E-Mail-Passwort:"
 
-#: mod/dfrn_request.php:873
-msgid ""
-"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
-"testuser@identi.ca"
-msgstr "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"
+#: mod/settings.php:904
+msgid "Reply-to address:"
+msgstr "Reply-to Adresse:"
 
-#: mod/dfrn_request.php:882
-msgid "StatusNet/Federated Social Web"
-msgstr "StatusNet/Federated Social Web"
+#: mod/settings.php:905
+msgid "Send public posts to all email contacts:"
+msgstr "Sende öffentliche Beiträge an alle E-Mail-Kontakte:"
 
-#: mod/dfrn_request.php:884
-#, php-format
-msgid ""
-" - please do not use this form.  Instead, enter %s into your Diaspora search"
-" bar."
-msgstr " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste."
+#: mod/settings.php:906
+msgid "Action after import:"
+msgstr "Aktion nach Import:"
 
-#: mod/install.php:140
-msgid "Friendica Communications Server - Setup"
-msgstr "Friendica-Server für soziale Netzwerke – Setup"
+#: mod/settings.php:906
+msgid "Move to folder"
+msgstr "In einen Ordner verschieben"
 
-#: mod/install.php:146
-msgid "Could not connect to database."
-msgstr "Verbindung zur Datenbank gescheitert."
+#: mod/settings.php:907
+msgid "Move to folder:"
+msgstr "In diesen Ordner verschieben:"
 
-#: mod/install.php:150
-msgid "Could not create table."
-msgstr "Tabelle konnte nicht angelegt werden."
+#: mod/settings.php:943 mod/admin.php:942
+msgid "No special theme for mobile devices"
+msgstr "Kein spezielles Theme für mobile Geräte verwenden."
 
-#: mod/install.php:156
-msgid "Your Friendica site database has been installed."
-msgstr "Die Datenbank Deiner Friendicaseite wurde installiert."
+#: mod/settings.php:1003
+msgid "Display Settings"
+msgstr "Anzeige-Einstellungen"
+
+#: mod/settings.php:1009 mod/settings.php:1032
+msgid "Display Theme:"
+msgstr "Theme:"
+
+#: mod/settings.php:1010
+msgid "Mobile Theme:"
+msgstr "Mobiles Theme"
+
+#: mod/settings.php:1011
+msgid "Suppress warning of insecure networks"
+msgstr "Warnung wegen unsicheren Netzwerken unterdrücken"
 
-#: mod/install.php:161
+#: mod/settings.php:1011
 msgid ""
-"You may need to import the file \"database.sql\" manually using phpmyadmin "
-"or mysql."
-msgstr "Möglicherweise musst Du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren."
+"Should the system suppress the warning that the current group contains "
+"members of networks that can't receive non public postings."
+msgstr "Soll das System Warnungen unterdrücken, die angezeigt werden weil von dir eingerichtete Kontakt-Gruppen Accounts aus Netzwerken beinhalten, die keine nicht öffentlichen Beiträge empfangen können."
 
-#: mod/install.php:162 mod/install.php:234 mod/install.php:609
-msgid "Please see the file \"INSTALL.txt\"."
-msgstr "Lies bitte die \"INSTALL.txt\"."
+#: mod/settings.php:1012
+msgid "Update browser every xx seconds"
+msgstr "Browser alle xx Sekunden aktualisieren"
 
-#: mod/install.php:174
-msgid "Database already in use."
-msgstr "Die Datenbank wird bereits verwendet."
+#: mod/settings.php:1012
+msgid "Minimum of 10 seconds. Enter -1 to disable it."
+msgstr "Minimum sind 10 Sekunden. Gib -1 ein um abzuschalten."
 
-#: mod/install.php:231
-msgid "System check"
-msgstr "Systemtest"
+#: mod/settings.php:1013
+msgid "Number of items to display per page:"
+msgstr "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: "
 
-#: mod/install.php:236
-msgid "Check again"
-msgstr "Noch einmal testen"
+#: mod/settings.php:1013 mod/settings.php:1014
+msgid "Maximum of 100 items"
+msgstr "Maximal 100 Beiträge"
 
-#: mod/install.php:255
-msgid "Database connection"
-msgstr "Datenbankverbindung"
+#: mod/settings.php:1014
+msgid "Number of items to display per page when viewed from mobile device:"
+msgstr "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:"
 
-#: mod/install.php:256
-msgid ""
-"In order to install Friendica we need to know how to connect to your "
-"database."
-msgstr "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können."
+#: mod/settings.php:1015
+msgid "Don't show emoticons"
+msgstr "Keine Smilies anzeigen"
 
-#: mod/install.php:257
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
-msgstr "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls Du Fragen zu diesen Einstellungen haben solltest."
+#: mod/settings.php:1016
+msgid "Calendar"
+msgstr "Kalender"
 
-#: mod/install.php:258
-msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
-msgstr "Die Datenbank, die Du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor Du mit der Installation fortfährst."
+#: mod/settings.php:1017
+msgid "Beginning of week:"
+msgstr "Wochenbeginn:"
 
-#: mod/install.php:262
-msgid "Database Server Name"
-msgstr "Datenbank-Server"
+#: mod/settings.php:1018
+msgid "Don't show notices"
+msgstr "Info-Popups nicht anzeigen"
 
-#: mod/install.php:263
-msgid "Database Login Name"
-msgstr "Datenbank-Nutzer"
+#: mod/settings.php:1019
+msgid "Infinite scroll"
+msgstr "Endloses Scrollen"
 
-#: mod/install.php:264
-msgid "Database Login Password"
-msgstr "Datenbank-Passwort"
+#: mod/settings.php:1020
+msgid "Automatic updates only at the top of the network page"
+msgstr "Automatische Updates nur, wenn Du oben auf der Netzwerkseite bist."
 
-#: mod/install.php:264
-msgid "For security reasons the password must not be empty"
-msgstr "Aus Sicherheitsgründen darf das Passwort nicht leer sein."
+#: mod/settings.php:1021
+msgid "Bandwith Saver Mode"
+msgstr "Bandbreiten-Spar-Modus"
 
-#: mod/install.php:265
-msgid "Database Name"
-msgstr "Datenbank-Name"
+#: mod/settings.php:1021
+msgid ""
+"When enabled, embedded content is not displayed on automatic updates, they "
+"only show on page reload."
+msgstr "Wenn aktiviert, wird der eingebettete Inhalt nicht automatisch aktualisiert. In diesem Fall Seite bitte neu laden."
 
-#: mod/install.php:266 mod/install.php:307
-msgid "Site administrator email address"
-msgstr "E-Mail-Adresse des Administrators"
+#: mod/settings.php:1023
+msgid "General Theme Settings"
+msgstr "Allgemeine Themeneinstellungen"
 
-#: mod/install.php:266 mod/install.php:307
-msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
-msgstr "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit Du das Admin-Panel benutzen kannst."
+#: mod/settings.php:1024
+msgid "Custom Theme Settings"
+msgstr "Benutzerdefinierte Theme Einstellungen"
 
-#: mod/install.php:270 mod/install.php:310
-msgid "Please select a default timezone for your website"
-msgstr "Bitte wähle die Standardzeitzone Deiner Webseite"
+#: mod/settings.php:1025
+msgid "Content Settings"
+msgstr "Einstellungen zum Inhalt"
 
-#: mod/install.php:297
-msgid "Site settings"
-msgstr "Server-Einstellungen"
+#: mod/settings.php:1026 view/theme/duepuntozero/config.php:63
+#: view/theme/frio/config.php:66 view/theme/quattro/config.php:69
+#: view/theme/vier/config.php:114
+msgid "Theme settings"
+msgstr "Themeneinstellungen"
 
-#: mod/install.php:311
-msgid "System Language:"
-msgstr "Systemsprache:"
+#: mod/settings.php:1110
+msgid "Account Types"
+msgstr "Kontenarten"
 
-#: mod/install.php:311
-msgid ""
-"Set the default language for your Friendica installation interface and to "
-"send emails."
-msgstr "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand"
+#: mod/settings.php:1111
+msgid "Personal Page Subtypes"
+msgstr "Unterarten der persönlichen Seite"
 
-#: mod/install.php:351
-msgid "Could not find a command line version of PHP in the web server PATH."
-msgstr "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."
+#: mod/settings.php:1112
+msgid "Community Forum Subtypes"
+msgstr "Unterarten des Gemeinschaftsforums"
 
-#: mod/install.php:352
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run background polling via cron. See <a "
-"href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-"
-"up-the-poller'>'Setup the poller'</a>"
-msgstr "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>"
+#: mod/settings.php:1119
+msgid "Personal Page"
+msgstr "Persönliche Seite"
 
-#: mod/install.php:356
-msgid "PHP executable path"
-msgstr "Pfad zu PHP"
+#: mod/settings.php:1120
+msgid "This account is a regular personal profile"
+msgstr "Dieses Konto ist ein normales persönliches Profil"
 
-#: mod/install.php:356
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
-msgstr "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren."
+#: mod/settings.php:1123
+msgid "Organisation Page"
+msgstr "Organisationsseite"
 
-#: mod/install.php:361
-msgid "Command line PHP"
-msgstr "Kommandozeilen-PHP"
+#: mod/settings.php:1124
+msgid "This account is a profile for an organisation"
+msgstr "Diese Konto ist ein Profil für eine Organisation"
 
-#: mod/install.php:370
-msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
-msgstr "Die ausführbare Datei von PHP stimmt nicht mit der PHP cli Version überein (es könnte sich um die cgi-fgci Version handeln)"
+#: mod/settings.php:1127
+msgid "News Page"
+msgstr "Nachrichtenseite"
 
-#: mod/install.php:371
-msgid "Found PHP version: "
-msgstr "Gefundene PHP Version:"
+#: mod/settings.php:1128
+msgid "This account is a news account/reflector"
+msgstr "Dieses Konto ist ein News-Konto bzw. -Spiegel"
 
-#: mod/install.php:373
-msgid "PHP cli binary"
-msgstr "PHP CLI Binary"
+#: mod/settings.php:1131
+msgid "Community Forum"
+msgstr "Gemeinschaftsforum"
 
-#: mod/install.php:384
+#: mod/settings.php:1132
 msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
-msgstr "Die Kommandozeilenversion von PHP auf Deinem System hat \"register_argc_argv\" nicht aktiviert."
+"This account is a community forum where people can discuss with each other"
+msgstr "Dieses Konto ist ein Gemeinschaftskonto wo sich Leute untereinander austauschen können"
 
-#: mod/install.php:385
-msgid "This is required for message delivery to work."
-msgstr "Dies wird für die Auslieferung von Nachrichten benötigt."
+#: mod/settings.php:1135
+msgid "Normal Account Page"
+msgstr "Normales Konto"
 
-#: mod/install.php:387
-msgid "PHP register_argc_argv"
-msgstr "PHP register_argc_argv"
+#: mod/settings.php:1136
+msgid "This account is a normal personal profile"
+msgstr "Dieses Konto ist ein normales persönliches Profil"
 
-#: mod/install.php:410
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
-msgstr "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen"
+#: mod/settings.php:1139
+msgid "Soapbox Page"
+msgstr "Marktschreier-Konto"
 
-#: mod/install.php:411
-msgid ""
-"If running under Windows, please see "
-"\"http://www.php.net/manual/en/openssl.installation.php\"."
-msgstr "Wenn der Server unter Windows läuft, schau Dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an."
+#: mod/settings.php:1140
+msgid "Automatically approve all connection/friend requests as read-only fans"
+msgstr "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert"
 
-#: mod/install.php:413
-msgid "Generate encryption keys"
-msgstr "Schlüssel erzeugen"
+#: mod/settings.php:1143
+msgid "Public Forum"
+msgstr "Öffentliches Forum"
 
-#: mod/install.php:420
-msgid "libCurl PHP module"
-msgstr "PHP: libCurl-Modul"
+#: mod/settings.php:1144
+msgid "Automatically approve all contact requests"
+msgstr "Bestätige alle Kontaktanfragen automatisch"
 
-#: mod/install.php:421
-msgid "GD graphics PHP module"
-msgstr "PHP: GD-Grafikmodul"
+#: mod/settings.php:1147
+msgid "Automatic Friend Page"
+msgstr "Automatische Freunde Seite"
 
-#: mod/install.php:422
-msgid "OpenSSL PHP module"
-msgstr "PHP: OpenSSL-Modul"
+#: mod/settings.php:1148
+msgid "Automatically approve all connection/friend requests as friends"
+msgstr "Kontaktanfragen werden automatisch als Freund akzeptiert"
 
-#: mod/install.php:423
-msgid "mysqli PHP module"
-msgstr "PHP: mysqli-Modul"
+#: mod/settings.php:1151
+msgid "Private Forum [Experimental]"
+msgstr "Privates Forum [Versuchsstadium]"
 
-#: mod/install.php:424
-msgid "mb_string PHP module"
-msgstr "PHP: mb_string-Modul"
+#: mod/settings.php:1152
+msgid "Private forum - approved members only"
+msgstr "Privates Forum, nur für Mitglieder"
 
-#: mod/install.php:425
-msgid "mcrypt PHP module"
-msgstr "PHP mcrypt Modul"
+#: mod/settings.php:1163
+msgid "OpenID:"
+msgstr "OpenID:"
 
-#: mod/install.php:426
-msgid "XML PHP module"
-msgstr "XML PHP Modul"
+#: mod/settings.php:1163
+msgid "(Optional) Allow this OpenID to login to this account."
+msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."
 
-#: mod/install.php:427
-msgid "iconv module"
-msgstr "iconv module"
+#: mod/settings.php:1171
+msgid "Publish your default profile in your local site directory?"
+msgstr "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?"
 
-#: mod/install.php:431 mod/install.php:433
-msgid "Apache mod_rewrite module"
-msgstr "Apache mod_rewrite module"
+#: mod/settings.php:1171
+msgid "Your profile may be visible in public."
+msgstr "Dein Profil könnte öffentlich abrufbar sein."
 
-#: mod/install.php:431
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
-msgstr "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert."
+#: mod/settings.php:1177
+msgid "Publish your default profile in the global social directory?"
+msgstr "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?"
 
-#: mod/install.php:439
-msgid "Error: libCURL PHP module required but not installed."
-msgstr "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert."
+#: mod/settings.php:1184
+msgid "Hide your contact/friend list from viewers of your default profile?"
+msgstr "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"
 
-#: mod/install.php:443
+#: mod/settings.php:1188
 msgid ""
-"Error: GD graphics PHP module with JPEG support required but not installed."
-msgstr "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert."
-
-#: mod/install.php:447
-msgid "Error: openssl PHP module required but not installed."
-msgstr "Fehler: Das openssl-Modul von PHP ist nicht installiert."
-
-#: mod/install.php:451
-msgid "Error: mysqli PHP module required but not installed."
-msgstr "Fehler: Das mysqli-Modul von PHP ist nicht installiert."
+"If enabled, posting public messages to Diaspora and other networks isn't "
+"possible."
+msgstr "Wenn aktiviert, ist das senden öffentliche Nachrichten zu Diaspora und anderen Netzwerken nicht möglich"
 
-#: mod/install.php:455
-msgid "Error: mb_string PHP module required but not installed."
-msgstr "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert."
+#: mod/settings.php:1193
+msgid "Allow friends to post to your profile page?"
+msgstr "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?"
 
-#: mod/install.php:459
-msgid "Error: mcrypt PHP module required but not installed."
-msgstr "Fehler: Das mcrypt Modul von PHP ist nicht installiert"
+#: mod/settings.php:1198
+msgid "Allow friends to tag your posts?"
+msgstr "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?"
 
-#: mod/install.php:463
-msgid "Error: iconv PHP module required but not installed."
-msgstr "Fehler: Das iconv-Modul von PHP ist nicht installiert."
+#: mod/settings.php:1203
+msgid "Allow us to suggest you as a potential friend to new members?"
+msgstr "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?"
 
-#: mod/install.php:472
-msgid ""
-"If you are using php_cli, please make sure that mcrypt module is enabled in "
-"its config file"
-msgstr "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. "
+#: mod/settings.php:1208
+msgid "Permit unknown people to send you private mail?"
+msgstr "Dürfen Dir Unbekannte private Nachrichten schicken?"
 
-#: mod/install.php:475
-msgid ""
-"Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 "
-"encryption layer."
-msgstr "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren."
+#: mod/settings.php:1216
+msgid "Profile is <strong>not published</strong>."
+msgstr "Profil ist <strong>nicht veröffentlicht</strong>."
 
-#: mod/install.php:477
-msgid "mcrypt_create_iv() function"
-msgstr "mcrypt_create_iv() function"
+#: mod/settings.php:1224
+#, php-format
+msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
+msgstr "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'."
 
-#: mod/install.php:485
-msgid "Error, XML PHP module required but not installed."
-msgstr "Fehler: XML PHP Modul erforderlich aber nicht installiert."
+#: mod/settings.php:1231
+msgid "Automatically expire posts after this many days:"
+msgstr "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:"
 
-#: mod/install.php:500
-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 "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun."
+#: mod/settings.php:1231
+msgid "If empty, posts will not expire. Expired posts will be deleted"
+msgstr "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht."
 
-#: mod/install.php:501
-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 "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast."
+#: mod/settings.php:1232
+msgid "Advanced expiration settings"
+msgstr "Erweiterte Verfallseinstellungen"
 
-#: mod/install.php:502
-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 "Nachdem Du alles ausgefüllt hast, erhältst Du einen Text, den Du in eine Datei namens .htconfig.php in Deinem Friendica-Wurzelverzeichnis kopieren musst."
+#: mod/settings.php:1233
+msgid "Advanced Expiration"
+msgstr "Erweitertes Verfallen"
 
-#: mod/install.php:503
-msgid ""
-"You can alternatively skip this procedure and perform a manual installation."
-" Please see the file \"INSTALL.txt\" for instructions."
-msgstr "Alternativ kannst Du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest Du in der Datei INSTALL.txt."
+#: mod/settings.php:1234
+msgid "Expire posts:"
+msgstr "Beiträge verfallen lassen:"
 
-#: mod/install.php:506
-msgid ".htconfig.php is writable"
-msgstr "Schreibrechte auf .htconfig.php"
+#: mod/settings.php:1235
+msgid "Expire personal notes:"
+msgstr "Persönliche Notizen verfallen lassen:"
 
-#: mod/install.php:516
-msgid ""
-"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
-"compiles templates to PHP to speed up rendering."
-msgstr "Friendica nutzt die Smarty3 Template Engine um die Webansichten zu rendern. Smarty3 kompiliert Templates zu PHP um das Rendern zu beschleunigen."
+#: mod/settings.php:1236
+msgid "Expire starred posts:"
+msgstr "Markierte Beiträge verfallen lassen:"
 
-#: mod/install.php:517
-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 "Um diese kompilierten Templates zu speichern benötigt der Webserver Schreibrechte zum Verzeichnis view/smarty3/ im obersten Ordner von Friendica."
+#: mod/settings.php:1237
+msgid "Expire photos:"
+msgstr "Fotos verfallen lassen:"
 
-#: mod/install.php:518
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has"
-" write access to this folder."
-msgstr "Bitte stelle sicher, dass der Nutzer unter dem der Webserver läuft (z.B. www-data) Schreibrechte zu diesem Verzeichnis hat."
+#: mod/settings.php:1238
+msgid "Only expire posts by others:"
+msgstr "Nur Beiträge anderer verfallen:"
 
-#: mod/install.php:519
-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 "Hinweis: aus Sicherheitsgründen solltest Du dem Webserver nur Schreibrechte für view/smarty3/ geben -- Nicht den Templatedateien (.tpl) die sie enthalten."
+#: mod/settings.php:1269
+msgid "Account Settings"
+msgstr "Kontoeinstellungen"
 
-#: mod/install.php:522
-msgid "view/smarty3 is writable"
-msgstr "view/smarty3 ist schreibbar"
+#: mod/settings.php:1277
+msgid "Password Settings"
+msgstr "Passwort-Einstellungen"
 
-#: mod/install.php:538
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
-msgstr "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers."
+#: mod/settings.php:1279
+msgid "Leave password fields blank unless changing"
+msgstr "Lass die Passwort-Felder leer, außer Du willst das Passwort ändern"
 
-#: mod/install.php:540
-msgid "Url rewrite is working"
-msgstr "URL rewrite funktioniert"
+#: mod/settings.php:1280
+msgid "Current Password:"
+msgstr "Aktuelles Passwort:"
 
-#: mod/install.php:559
-msgid "ImageMagick PHP extension is not installed"
-msgstr "ImageMagicx PHP Erweiterung ist nicht installiert."
+#: mod/settings.php:1280 mod/settings.php:1281
+msgid "Your current password to confirm the changes"
+msgstr "Dein aktuelles Passwort um die Änderungen zu bestätigen"
 
-#: mod/install.php:561
-msgid "ImageMagick PHP extension is installed"
-msgstr "ImageMagick PHP Erweiterung ist installiert"
+#: mod/settings.php:1281
+msgid "Password:"
+msgstr "Passwort:"
 
-#: mod/install.php:563
-msgid "ImageMagick supports GIF"
-msgstr "ImageMagick unterstützt GIF"
+#: mod/settings.php:1285
+msgid "Basic Settings"
+msgstr "Grundeinstellungen"
 
-#: mod/install.php:570
-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 "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen."
+#: mod/settings.php:1287
+msgid "Email Address:"
+msgstr "E-Mail-Adresse:"
 
-#: mod/install.php:607
-msgid "<h1>What next</h1>"
-msgstr "<h1>Wie geht es weiter?</h1>"
+#: mod/settings.php:1288
+msgid "Your Timezone:"
+msgstr "Deine Zeitzone:"
 
-#: mod/install.php:608
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the "
-"poller."
-msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."
+#: mod/settings.php:1289
+msgid "Your Language:"
+msgstr "Deine Sprache:"
 
-#: mod/profiles.php:38
-msgid "Profile deleted."
-msgstr "Profil gelöscht."
+#: mod/settings.php:1289
+msgid ""
+"Set the language we use to show you friendica interface and to send you "
+"emails"
+msgstr "Wähle die Sprache, in der wir Dir die Friendica-Oberfläche präsentieren sollen und Dir E-Mail schicken"
 
-#: mod/profiles.php:56 mod/profiles.php:90
-msgid "Profile-"
-msgstr "Profil-"
+#: mod/settings.php:1290
+msgid "Default Post Location:"
+msgstr "Standardstandort:"
 
-#: mod/profiles.php:75 mod/profiles.php:118
-msgid "New profile created."
-msgstr "Neues Profil angelegt."
+#: mod/settings.php:1291
+msgid "Use Browser Location:"
+msgstr "Standort des Browsers verwenden:"
 
-#: mod/profiles.php:96
-msgid "Profile unavailable to clone."
-msgstr "Profil nicht zum Duplizieren verfügbar."
+#: mod/settings.php:1294
+msgid "Security and Privacy Settings"
+msgstr "Sicherheits- und Privatsphäre-Einstellungen"
 
-#: mod/profiles.php:190
-msgid "Profile Name is required."
-msgstr "Profilname ist erforderlich."
+#: mod/settings.php:1296
+msgid "Maximum Friend Requests/Day:"
+msgstr "Maximale Anzahl vonKontaktanfragen/Tag:"
 
-#: mod/profiles.php:338
-msgid "Marital Status"
-msgstr "Familienstand"
+#: mod/settings.php:1296 mod/settings.php:1326
+msgid "(to prevent spam abuse)"
+msgstr "(um SPAM zu vermeiden)"
 
-#: mod/profiles.php:342
-msgid "Romantic Partner"
-msgstr "Romanze"
+#: mod/settings.php:1297
+msgid "Default Post Permissions"
+msgstr "Standard-Zugriffsrechte für Beiträge"
 
-#: mod/profiles.php:354
-msgid "Work/Employment"
-msgstr "Arbeit / Beschäftigung"
+#: mod/settings.php:1298
+msgid "(click to open/close)"
+msgstr "(klicke zum öffnen/schließen)"
 
-#: mod/profiles.php:357
-msgid "Religion"
-msgstr "Religion"
+#: mod/settings.php:1309
+msgid "Default Private Post"
+msgstr "Privater Standardbeitrag"
 
-#: mod/profiles.php:361
-msgid "Political Views"
-msgstr "Politische Ansichten"
+#: mod/settings.php:1310
+msgid "Default Public Post"
+msgstr "Öffentlicher Standardbeitrag"
 
-#: mod/profiles.php:365
-msgid "Gender"
-msgstr "Geschlecht"
+#: mod/settings.php:1314
+msgid "Default Permissions for New Posts"
+msgstr "Standardberechtigungen für neue Beiträge"
 
-#: mod/profiles.php:369
-msgid "Sexual Preference"
-msgstr "Sexuelle Vorlieben"
+#: mod/settings.php:1326
+msgid "Maximum private messages per day from unknown people:"
+msgstr "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:"
 
-#: mod/profiles.php:373
-msgid "XMPP"
-msgstr "XMPP"
+#: mod/settings.php:1329
+msgid "Notification Settings"
+msgstr "Benachrichtigungseinstellungen"
 
-#: mod/profiles.php:377
-msgid "Homepage"
-msgstr "Webseite"
+#: mod/settings.php:1330
+msgid "By default post a status message when:"
+msgstr "Standardmäßig eine Statusnachricht posten, wenn:"
 
-#: mod/profiles.php:381 mod/profiles.php:694
-msgid "Interests"
-msgstr "Interessen"
+#: mod/settings.php:1331
+msgid "accepting a friend request"
+msgstr "– Du eine Kontaktanfrage akzeptierst"
 
-#: mod/profiles.php:385
-msgid "Address"
-msgstr "Adresse"
+#: mod/settings.php:1332
+msgid "joining a forum/community"
+msgstr "– Du einem Forum/einer Gemeinschaftsseite beitrittst"
 
-#: mod/profiles.php:392 mod/profiles.php:690
-msgid "Location"
-msgstr "Wohnort"
+#: mod/settings.php:1333
+msgid "making an <em>interesting</em> profile change"
+msgstr "– Du eine <em>interessante</em> Änderung an Deinem Profil durchführst"
 
-#: mod/profiles.php:477
-msgid "Profile updated."
-msgstr "Profil aktualisiert."
+#: mod/settings.php:1334
+msgid "Send a notification email when:"
+msgstr "Benachrichtigungs-E-Mail senden wenn:"
 
-#: mod/profiles.php:565
-msgid " and "
-msgstr " und "
+#: mod/settings.php:1335
+msgid "You receive an introduction"
+msgstr "– Du eine Kontaktanfrage erhältst"
 
-#: mod/profiles.php:573
-msgid "public profile"
-msgstr "öffentliches Profil"
+#: mod/settings.php:1336
+msgid "Your introductions are confirmed"
+msgstr "– eine Deiner Kontaktanfragen akzeptiert wurde"
 
-#: mod/profiles.php:576
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
-msgstr "%1$s hat %2$s geändert auf &ldquo;%3$s&rdquo;"
+#: mod/settings.php:1337
+msgid "Someone writes on your profile wall"
+msgstr "– jemand etwas auf Deine Pinnwand schreibt"
 
-#: mod/profiles.php:577
-#, php-format
-msgid " - Visit %1$s's %2$s"
-msgstr " – %1$ss %2$s besuchen"
+#: mod/settings.php:1338
+msgid "Someone writes a followup comment"
+msgstr "– jemand auch einen Kommentar verfasst"
 
-#: mod/profiles.php:580
-#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
-msgstr "%1$s hat folgendes aktualisiert %2$s, verändert wurde %3$s."
+#: mod/settings.php:1339
+msgid "You receive a private message"
+msgstr "– Du eine private Nachricht erhältst"
 
-#: mod/profiles.php:637
-msgid "Hide contacts and friends:"
-msgstr "Kontakte und Freunde verbergen"
+#: mod/settings.php:1340
+msgid "You receive a friend suggestion"
+msgstr "– Du eine Empfehlung erhältst"
 
-#: mod/profiles.php:642
-msgid "Hide your contact/friend list from viewers of this profile?"
-msgstr "Liste der Kontakte vor Betrachtern dieses Profils verbergen?"
+#: mod/settings.php:1341
+msgid "You are tagged in a post"
+msgstr "– Du in einem Beitrag erwähnt wirst"
 
-#: mod/profiles.php:666
-msgid "Show more profile fields:"
-msgstr "Zeige mehr Profil-Felder:"
+#: mod/settings.php:1342
+msgid "You are poked/prodded/etc. in a post"
+msgstr "– Du von jemandem angestupst oder sonstwie behandelt wirst"
 
-#: mod/profiles.php:678
-msgid "Profile Actions"
-msgstr "Profilaktionen"
+#: mod/settings.php:1344
+msgid "Activate desktop notifications"
+msgstr "Desktop Benachrichtigungen einschalten"
 
-#: mod/profiles.php:679
-msgid "Edit Profile Details"
-msgstr "Profil bearbeiten"
+#: mod/settings.php:1344
+msgid "Show desktop popup on new notifications"
+msgstr "Desktop Benachrichtigungen einschalten"
 
-#: mod/profiles.php:681
-msgid "Change Profile Photo"
-msgstr "Profilbild ändern"
+#: mod/settings.php:1346
+msgid "Text-only notification emails"
+msgstr "Benachrichtigungs E-Mail als Rein-Text."
 
-#: mod/profiles.php:682
-msgid "View this profile"
-msgstr "Dieses Profil anzeigen"
+#: mod/settings.php:1348
+msgid "Send text only notification emails, without the html part"
+msgstr "Sende Benachrichtigungs E-Mail als Rein-Text - ohne HTML-Teil"
 
-#: mod/profiles.php:684
-msgid "Create a new profile using these settings"
-msgstr "Neues Profil anlegen und diese Einstellungen verwenden"
+#: mod/settings.php:1350
+msgid "Advanced Account/Page Type Settings"
+msgstr "Erweiterte Konto-/Seitentyp-Einstellungen"
 
-#: mod/profiles.php:685
-msgid "Clone this profile"
-msgstr "Dieses Profil duplizieren"
+#: mod/settings.php:1351
+msgid "Change the behaviour of this account for special situations"
+msgstr "Verhalten dieses Kontos in bestimmten Situationen:"
 
-#: mod/profiles.php:686
-msgid "Delete this profile"
-msgstr "Dieses Profil löschen"
+#: mod/settings.php:1354
+msgid "Relocate"
+msgstr "Umziehen"
 
-#: mod/profiles.php:688
-msgid "Basic information"
-msgstr "Grundinformationen"
+#: mod/settings.php:1355
+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 "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button."
 
-#: mod/profiles.php:689
-msgid "Profile picture"
-msgstr "Profilbild"
+#: mod/settings.php:1356
+msgid "Resend relocate message to contacts"
+msgstr "Umzugsbenachrichtigung erneut an Kontakte senden"
 
-#: mod/profiles.php:691
-msgid "Preferences"
-msgstr "Vorlieben"
+#: mod/uexport.php:37
+msgid "Export account"
+msgstr "Account exportieren"
 
-#: mod/profiles.php:692
-msgid "Status information"
-msgstr "Status Informationen"
+#: mod/uexport.php:37
+msgid ""
+"Export your account info and contacts. Use this to make a backup of your "
+"account and/or to move it to another server."
+msgstr "Exportiere Deine Accountinformationen und Kontakte. Verwende dies um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen."
 
-#: mod/profiles.php:693
-msgid "Additional information"
-msgstr "Zusätzliche Informationen"
+#: mod/uexport.php:38
+msgid "Export all"
+msgstr "Alles exportieren"
 
-#: mod/profiles.php:696
-msgid "Relation"
-msgstr "Beziehung"
+#: mod/uexport.php:38
+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 "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert)."
 
-#: mod/profiles.php:700
-msgid "Your Gender:"
-msgstr "Dein Geschlecht:"
+#: mod/videos.php:124
+msgid "Do you really want to delete this video?"
+msgstr "Möchtest Du dieses Video wirklich löschen?"
 
-#: mod/profiles.php:701
-msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
-msgstr "<span class=\"heart\">&hearts;</span> Beziehungsstatus:"
+#: mod/videos.php:129
+msgid "Delete Video"
+msgstr "Video Löschen"
 
-#: mod/profiles.php:703
-msgid "Example: fishing photography software"
-msgstr "Beispiel: Fischen Fotografie Software"
+#: mod/videos.php:208
+msgid "No videos selected"
+msgstr "Keine Videos  ausgewählt"
 
-#: mod/profiles.php:708
-msgid "Profile Name:"
-msgstr "Profilname:"
+#: mod/videos.php:402
+msgid "Recent Videos"
+msgstr "Neueste Videos"
 
-#: mod/profiles.php:710
-msgid ""
-"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
-"be visible to anybody using the internet."
-msgstr "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein."
+#: mod/videos.php:404
+msgid "Upload New Videos"
+msgstr "Neues Video hochladen"
 
-#: mod/profiles.php:711
-msgid "Your Full Name:"
-msgstr "Dein kompletter Name:"
+#: mod/install.php:106
+msgid "Friendica Communications Server - Setup"
+msgstr "Friendica-Server für soziale Netzwerke – Setup"
 
-#: mod/profiles.php:712
-msgid "Title/Description:"
-msgstr "Titel/Beschreibung:"
+#: mod/install.php:112
+msgid "Could not connect to database."
+msgstr "Verbindung zur Datenbank gescheitert."
 
-#: mod/profiles.php:715
-msgid "Street Address:"
-msgstr "Adresse:"
+#: mod/install.php:116
+msgid "Could not create table."
+msgstr "Tabelle konnte nicht angelegt werden."
 
-#: mod/profiles.php:716
-msgid "Locality/City:"
-msgstr "Wohnort:"
+#: mod/install.php:122
+msgid "Your Friendica site database has been installed."
+msgstr "Die Datenbank Deiner Friendicaseite wurde installiert."
 
-#: mod/profiles.php:717
-msgid "Region/State:"
-msgstr "Region/Bundesstaat:"
+#: mod/install.php:127
+msgid ""
+"You may need to import the file \"database.sql\" manually using phpmyadmin "
+"or mysql."
+msgstr "Möglicherweise musst Du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren."
 
-#: mod/profiles.php:718
-msgid "Postal/Zip Code:"
-msgstr "Postleitzahl:"
+#: mod/install.php:128 mod/install.php:200 mod/install.php:547
+msgid "Please see the file \"INSTALL.txt\"."
+msgstr "Lies bitte die \"INSTALL.txt\"."
 
-#: mod/profiles.php:719
-msgid "Country:"
-msgstr "Land:"
+#: mod/install.php:140
+msgid "Database already in use."
+msgstr "Die Datenbank wird bereits verwendet."
 
-#: mod/profiles.php:723
-msgid "Who: (if applicable)"
-msgstr "Wer: (falls anwendbar)"
+#: mod/install.php:197
+msgid "System check"
+msgstr "Systemtest"
 
-#: mod/profiles.php:723
-msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
-msgstr "Beispiele: cathy123, Cathy Williams, cathy@example.com"
+#: mod/install.php:202
+msgid "Check again"
+msgstr "Noch einmal testen"
 
-#: mod/profiles.php:724
-msgid "Since [date]:"
-msgstr "Seit [Datum]:"
+#: mod/install.php:221
+msgid "Database connection"
+msgstr "Datenbankverbindung"
 
-#: mod/profiles.php:726
-msgid "Tell us about yourself..."
-msgstr "Erzähle uns ein bisschen von Dir …"
+#: mod/install.php:222
+msgid ""
+"In order to install Friendica we need to know how to connect to your "
+"database."
+msgstr "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können."
 
-#: mod/profiles.php:727
-msgid "XMPP (Jabber) address:"
-msgstr "XMPP (Jabber) Adresse"
+#: mod/install.php:223
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls Du Fragen zu diesen Einstellungen haben solltest."
 
-#: mod/profiles.php:727
+#: mod/install.php:224
 msgid ""
-"The XMPP address will be propagated to your contacts so that they can follow"
-" you."
-msgstr "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können."
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
+msgstr "Die Datenbank, die Du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor Du mit der Installation fortfährst."
 
-#: mod/profiles.php:728
-msgid "Homepage URL:"
-msgstr "Adresse der Homepage:"
+#: mod/install.php:228
+msgid "Database Server Name"
+msgstr "Datenbank-Server"
 
-#: mod/profiles.php:731
-msgid "Religious Views:"
-msgstr "Religiöse Ansichten:"
+#: mod/install.php:229
+msgid "Database Login Name"
+msgstr "Datenbank-Nutzer"
 
-#: mod/profiles.php:732
-msgid "Public Keywords:"
-msgstr "Öffentliche Schlüsselwörter:"
+#: mod/install.php:230
+msgid "Database Login Password"
+msgstr "Datenbank-Passwort"
 
-#: mod/profiles.php:732
-msgid "(Used for suggesting potential friends, can be seen by others)"
-msgstr "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)"
+#: mod/install.php:230
+msgid "For security reasons the password must not be empty"
+msgstr "Aus Sicherheitsgründen darf das Passwort nicht leer sein."
 
-#: mod/profiles.php:733
-msgid "Private Keywords:"
-msgstr "Private Schlüsselwörter:"
+#: mod/install.php:231
+msgid "Database Name"
+msgstr "Datenbank-Name"
 
-#: mod/profiles.php:733
-msgid "(Used for searching profiles, never shown to others)"
-msgstr "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"
+#: mod/install.php:232 mod/install.php:273
+msgid "Site administrator email address"
+msgstr "E-Mail-Adresse des Administrators"
 
-#: mod/profiles.php:736
-msgid "Musical interests"
-msgstr "Musikalische Interessen"
+#: mod/install.php:232 mod/install.php:273
+msgid ""
+"Your account email address must match this in order to use the web admin "
+"panel."
+msgstr "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit Du das Admin-Panel benutzen kannst."
 
-#: mod/profiles.php:737
-msgid "Books, literature"
-msgstr "Bücher, Literatur"
+#: mod/install.php:236 mod/install.php:276
+msgid "Please select a default timezone for your website"
+msgstr "Bitte wähle die Standardzeitzone Deiner Webseite"
 
-#: mod/profiles.php:738
-msgid "Television"
-msgstr "Fernsehen"
+#: mod/install.php:263
+msgid "Site settings"
+msgstr "Server-Einstellungen"
 
-#: mod/profiles.php:739
-msgid "Film/dance/culture/entertainment"
-msgstr "Filme/Tänze/Kultur/Unterhaltung"
+#: mod/install.php:277
+msgid "System Language:"
+msgstr "Systemsprache:"
 
-#: mod/profiles.php:740
-msgid "Hobbies/Interests"
-msgstr "Hobbies/Interessen"
+#: mod/install.php:277
+msgid ""
+"Set the default language for your Friendica installation interface and to "
+"send emails."
+msgstr "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand"
 
-#: mod/profiles.php:741
-msgid "Love/romance"
-msgstr "Liebe/Romantik"
+#: mod/install.php:317
+msgid "Could not find a command line version of PHP in the web server PATH."
+msgstr "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."
 
-#: mod/profiles.php:742
-msgid "Work/employment"
-msgstr "Arbeit/Anstellung"
+#: mod/install.php:318
+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 "Wenn auf deinem Server keine Kommandozeilenversion von PHP installiert ist, kannst du den Hintergrundprozess nicht einrichten. Hier findest du alternative Möglichkeiten<a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'für das Poller Setup'</a>"
 
-#: mod/profiles.php:743
-msgid "School/education"
-msgstr "Schule/Ausbildung"
+#: mod/install.php:322
+msgid "PHP executable path"
+msgstr "Pfad zu PHP"
 
-#: mod/profiles.php:744
-msgid "Contact information and Social Networks"
-msgstr "Kontaktinformationen und Soziale Netzwerke"
+#: mod/install.php:322
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
+msgstr "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren."
 
-#: mod/profiles.php:788
-msgid "Edit/Manage Profiles"
-msgstr "Bearbeite/Verwalte Profile"
+#: mod/install.php:327
+msgid "Command line PHP"
+msgstr "Kommandozeilen-PHP"
 
-#: mod/display.php:479
-msgid "Item has been removed."
-msgstr "Eintrag wurde entfernt."
+#: mod/install.php:336
+msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
+msgstr "Die ausführbare Datei von PHP stimmt nicht mit der PHP cli Version überein (es könnte sich um die cgi-fgci Version handeln)"
 
-#: mod/admin.php:92
-msgid "Theme settings updated."
-msgstr "Themeneinstellungen aktualisiert."
+#: mod/install.php:337
+msgid "Found PHP version: "
+msgstr "Gefundene PHP Version:"
 
-#: mod/admin.php:157 mod/admin.php:975
-msgid "Site"
-msgstr "Seite"
+#: mod/install.php:339
+msgid "PHP cli binary"
+msgstr "PHP CLI Binary"
 
-#: mod/admin.php:158 mod/admin.php:909 mod/admin.php:1425 mod/admin.php:1441
-msgid "Users"
-msgstr "Nutzer"
+#: mod/install.php:350
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
+msgstr "Die Kommandozeilenversion von PHP auf Deinem System hat \"register_argc_argv\" nicht aktiviert."
 
-#: mod/admin.php:160 mod/admin.php:1813 mod/admin.php:1863
-msgid "Themes"
-msgstr "Themen"
+#: mod/install.php:351
+msgid "This is required for message delivery to work."
+msgstr "Dies wird für die Auslieferung von Nachrichten benötigt."
 
-#: mod/admin.php:162
-msgid "DB updates"
-msgstr "DB Updates"
+#: mod/install.php:353
+msgid "PHP register_argc_argv"
+msgstr "PHP register_argc_argv"
 
-#: mod/admin.php:163 mod/admin.php:407
-msgid "Inspect Queue"
-msgstr "Warteschlange Inspizieren"
+#: mod/install.php:376
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
+msgstr "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen"
 
-#: mod/admin.php:164 mod/admin.php:373
-msgid "Federation Statistics"
-msgstr "Federation Statistik"
+#: mod/install.php:377
+msgid ""
+"If running under Windows, please see "
+"\"http://www.php.net/manual/en/openssl.installation.php\"."
+msgstr "Wenn der Server unter Windows läuft, schau Dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an."
 
-#: mod/admin.php:178 mod/admin.php:189 mod/admin.php:1937
-msgid "Logs"
-msgstr "Protokolle"
+#: mod/install.php:379
+msgid "Generate encryption keys"
+msgstr "Schlüssel erzeugen"
 
-#: mod/admin.php:179 mod/admin.php:2005
-msgid "View Logs"
-msgstr "Protokolle anzeigen"
+#: mod/install.php:386
+msgid "libCurl PHP module"
+msgstr "PHP: libCurl-Modul"
 
-#: mod/admin.php:180
-msgid "probe address"
-msgstr "Adresse untersuchen"
+#: mod/install.php:387
+msgid "GD graphics PHP module"
+msgstr "PHP: GD-Grafikmodul"
 
-#: mod/admin.php:181
-msgid "check webfinger"
-msgstr "Webfinger überprüfen"
+#: mod/install.php:388
+msgid "OpenSSL PHP module"
+msgstr "PHP: OpenSSL-Modul"
 
-#: mod/admin.php:188
-msgid "Plugin Features"
-msgstr "Plugin Features"
+#: mod/install.php:389
+msgid "PDO or MySQLi PHP module"
+msgstr "PDO oder MySQLi PHP Modul"
 
-#: mod/admin.php:190
-msgid "diagnostics"
-msgstr "Diagnose"
+#: mod/install.php:390
+msgid "mb_string PHP module"
+msgstr "PHP: mb_string-Modul"
 
-#: mod/admin.php:191
-msgid "User registrations waiting for confirmation"
-msgstr "Nutzeranmeldungen die auf Bestätigung warten"
+#: mod/install.php:391
+msgid "XML PHP module"
+msgstr "XML PHP Modul"
 
-#: mod/admin.php:307
-msgid "unknown"
-msgstr "Unbekannt"
+#: mod/install.php:392
+msgid "iconv module"
+msgstr "iconv module"
+
+#: mod/install.php:396 mod/install.php:398
+msgid "Apache mod_rewrite module"
+msgstr "Apache mod_rewrite module"
 
-#: mod/admin.php:366
+#: mod/install.php:396
 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 "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."
+"Error: Apache webserver mod-rewrite module is required but not installed."
+msgstr "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert."
 
-#: mod/admin.php:367
+#: mod/install.php:404
+msgid "Error: libCURL PHP module required but not installed."
+msgstr "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert."
+
+#: mod/install.php:408
 msgid ""
-"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
-"will improve the data displayed here."
-msgstr "Die Funktion um <em>Automatisch ein Kontaktverzeichnis erstellen</em> ist nicht aktiv. Es wird die hier angezeigten Daten verbessern."
+"Error: GD graphics PHP module with JPEG support required but not installed."
+msgstr "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert."
 
-#: mod/admin.php:372 mod/admin.php:406 mod/admin.php:485 mod/admin.php:974
-#: mod/admin.php:1424 mod/admin.php:1542 mod/admin.php:1605 mod/admin.php:1812
-#: mod/admin.php:1862 mod/admin.php:1936 mod/admin.php:2004
-msgid "Administration"
-msgstr "Administration"
+#: mod/install.php:412
+msgid "Error: openssl PHP module required but not installed."
+msgstr "Fehler: Das openssl-Modul von PHP ist nicht installiert."
 
-#: mod/admin.php:379
-#, php-format
-msgid "Currently this node is aware of %d nodes from the following platforms:"
-msgstr "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:"
+#: mod/install.php:416
+msgid "Error: PDO or MySQLi PHP module required but not installed."
+msgstr "Fehler: PDO oder MySQLi PHP Modul erforderlich, aber nicht installiert."
 
-#: mod/admin.php:409
-msgid "ID"
-msgstr "ID"
+#: mod/install.php:420
+msgid "Error: The MySQL driver for PDO is not installed."
+msgstr "Fehler: der MySQL Treiber für PDO ist nicht installiert"
 
-#: mod/admin.php:410
-msgid "Recipient Name"
-msgstr "Empfänger Name"
+#: mod/install.php:424
+msgid "Error: mb_string PHP module required but not installed."
+msgstr "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert."
 
-#: mod/admin.php:411
-msgid "Recipient Profile"
-msgstr "Empfänger Profil"
+#: mod/install.php:428
+msgid "Error: iconv PHP module required but not installed."
+msgstr "Fehler: Das iconv-Modul von PHP ist nicht installiert."
 
-#: mod/admin.php:413
-msgid "Created"
-msgstr "Erstellt"
+#: mod/install.php:438
+msgid "Error, XML PHP module required but not installed."
+msgstr "Fehler: XML PHP Modul erforderlich aber nicht installiert."
 
-#: mod/admin.php:414
-msgid "Last Tried"
-msgstr "Zuletzt versucht"
+#: mod/install.php:450
+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 "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun."
 
-#: mod/admin.php:415
+#: mod/install.php:451
 msgid ""
-"This page lists the content of the queue for outgoing postings. These are "
-"postings the initial delivery failed for. They will be resend later and "
-"eventually deleted if the delivery fails permanently."
-msgstr "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden."
+"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 "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast."
 
-#: mod/admin.php:440
-#, php-format
+#: mod/install.php:452
 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 "
-"<tt>convert_innodb.sql</tt> in the <tt>/util</tt> directory of your "
-"Friendica installation.<br />"
-msgstr "Deine DB enthält einige Tabellen die noch auf MyISAM laufen. Du solltest den Engine-Type auf InnoDB umstellen, da Friendica in Zukunft einige InnoDB Features nutzen wird. Eine Anleitung zur Umstellung kannst du <a href=\"%s\">hier</a> finden. Außerdem kannst du das <tt>convert_innodb.sql</tt> Skript verwenden, das du im <tt>/util</tt> Verzeichnis deiner Friendica Installation findest."
+"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 "Nachdem Du alles ausgefüllt hast, erhältst Du einen Text, den Du in eine Datei namens .htconfig.php in Deinem Friendica-Wurzelverzeichnis kopieren musst."
 
-#: mod/admin.php:445
+#: mod/install.php:453
 msgid ""
-"You are using a MySQL version which does not support all features that "
-"Friendica uses. You should consider switching to MariaDB."
-msgstr "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist."
+"You can alternatively skip this procedure and perform a manual installation."
+" Please see the file \"INSTALL.txt\" for instructions."
+msgstr "Alternativ kannst Du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest Du in der Datei INSTALL.txt."
 
-#: mod/admin.php:449 mod/admin.php:1373
-msgid "Normal Account"
-msgstr "Normales Konto"
+#: mod/install.php:456
+msgid ".htconfig.php is writable"
+msgstr "Schreibrechte auf .htconfig.php"
 
-#: mod/admin.php:450 mod/admin.php:1374
-msgid "Soapbox Account"
-msgstr "Marktschreier-Konto"
+#: mod/install.php:466
+msgid ""
+"Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
+"compiles templates to PHP to speed up rendering."
+msgstr "Friendica nutzt die Smarty3 Template Engine um die Webansichten zu rendern. Smarty3 kompiliert Templates zu PHP um das Rendern zu beschleunigen."
 
-#: mod/admin.php:451 mod/admin.php:1375
-msgid "Community/Celebrity Account"
-msgstr "Forum/Promi-Konto"
+#: mod/install.php:467
+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 "Um diese kompilierten Templates zu speichern benötigt der Webserver Schreibrechte zum Verzeichnis view/smarty3/ im obersten Ordner von Friendica."
 
-#: mod/admin.php:452 mod/admin.php:1376
-msgid "Automatic Friend Account"
-msgstr "Automatisches Freundekonto"
+#: mod/install.php:468
+msgid ""
+"Please ensure that the user that your web server runs as (e.g. www-data) has"
+" write access to this folder."
+msgstr "Bitte stelle sicher, dass der Nutzer unter dem der Webserver läuft (z.B. www-data) Schreibrechte zu diesem Verzeichnis hat."
 
-#: mod/admin.php:453
-msgid "Blog Account"
-msgstr "Blog-Konto"
+#: mod/install.php:469
+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 "Hinweis: aus Sicherheitsgründen solltest Du dem Webserver nur Schreibrechte für view/smarty3/ geben -- Nicht den Templatedateien (.tpl) die sie enthalten."
 
-#: mod/admin.php:454
-msgid "Private Forum"
-msgstr "Privates Forum"
+#: mod/install.php:472
+msgid "view/smarty3 is writable"
+msgstr "view/smarty3 ist schreibbar"
 
-#: mod/admin.php:480
-msgid "Message queues"
-msgstr "Nachrichten-Warteschlangen"
+#: mod/install.php:488
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
+msgstr "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers."
 
-#: mod/admin.php:486
-msgid "Summary"
-msgstr "Zusammenfassung"
+#: mod/install.php:490
+msgid "Url rewrite is working"
+msgstr "URL rewrite funktioniert"
 
-#: mod/admin.php:489
-msgid "Registered users"
-msgstr "Registrierte Nutzer"
+#: mod/install.php:509
+msgid "ImageMagick PHP extension is not installed"
+msgstr "ImageMagicx PHP Erweiterung ist nicht installiert."
 
-#: mod/admin.php:491
-msgid "Pending registrations"
-msgstr "Anstehende Anmeldungen"
+#: mod/install.php:511
+msgid "ImageMagick PHP extension is installed"
+msgstr "ImageMagick PHP Erweiterung ist installiert"
 
-#: mod/admin.php:492
-msgid "Version"
-msgstr "Version"
+#: mod/install.php:513
+msgid "ImageMagick supports GIF"
+msgstr "ImageMagick unterstützt GIF"
 
-#: mod/admin.php:497
-msgid "Active plugins"
-msgstr "Aktive Plugins"
+#: mod/install.php:520
+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 "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen."
 
-#: mod/admin.php:522
-msgid "Can not parse base url. Must have at least <scheme>://<domain>"
-msgstr "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus <protokoll>://<domain> bestehen"
+#: mod/install.php:545
+msgid "<h1>What next</h1>"
+msgstr "<h1>Wie geht es weiter?</h1>"
 
-#: mod/admin.php:827
-msgid "RINO2 needs mcrypt php extension to work."
-msgstr "RINO2 benötigt die PHP Extension mcrypt."
+#: mod/install.php:546
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the "
+"poller."
+msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."
 
-#: mod/admin.php:835
-msgid "Site settings updated."
-msgstr "Seiteneinstellungen aktualisiert."
+#: mod/item.php:116
+msgid "Unable to locate original post."
+msgstr "Konnte den Originalbeitrag nicht finden."
 
-#: mod/admin.php:892
-msgid "No community page"
-msgstr "Keine Gemeinschaftsseite"
+#: mod/item.php:344
+msgid "Empty post discarded."
+msgstr "Leerer Beitrag wurde verworfen."
 
-#: mod/admin.php:893
-msgid "Public postings from users of this site"
-msgstr "Öffentliche Beiträge von Nutzer_innen dieser Seite"
+#: mod/item.php:904
+msgid "System error. Post not saved."
+msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden."
 
-#: mod/admin.php:894
-msgid "Global community page"
-msgstr "Globale Gemeinschaftsseite"
+#: mod/item.php:995
+#, php-format
+msgid ""
+"This message was sent to you by %s, a member of the Friendica social "
+"network."
+msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."
 
-#: mod/admin.php:900
-msgid "At post arrival"
-msgstr "Beim Empfang von Nachrichten"
+#: mod/item.php:997
+#, php-format
+msgid "You may visit them online at %s"
+msgstr "Du kannst sie online unter %s besuchen"
 
-#: mod/admin.php:910
-msgid "Users, Global Contacts"
-msgstr "Nutzer, globale Kontakte"
+#: mod/item.php:998
+msgid ""
+"Please contact the sender by replying to this post if you do not wish to "
+"receive these messages."
+msgstr "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest."
 
-#: mod/admin.php:911
-msgid "Users, Global Contacts/fallback"
-msgstr "Nutzer, globale Kontakte / Fallback"
+#: mod/item.php:1002
+#, php-format
+msgid "%s posted an update."
+msgstr "%s hat ein Update veröffentlicht."
 
-#: mod/admin.php:915
-msgid "One month"
-msgstr "ein Monat"
+#: mod/notifications.php:35
+msgid "Invalid request identifier."
+msgstr "Invalid request identifier."
 
-#: mod/admin.php:916
-msgid "Three months"
-msgstr "drei Monate"
+#: mod/notifications.php:44 mod/notifications.php:180
+#: mod/notifications.php:227
+msgid "Discard"
+msgstr "Verwerfen"
 
-#: mod/admin.php:917
-msgid "Half a year"
-msgstr "ein halbes Jahr"
+#: mod/notifications.php:105
+msgid "Network Notifications"
+msgstr "Netzwerk Benachrichtigungen"
 
-#: mod/admin.php:918
-msgid "One year"
-msgstr "ein Jahr"
+#: mod/notifications.php:117
+msgid "Personal Notifications"
+msgstr "Persönliche Benachrichtigungen"
 
-#: mod/admin.php:923
-msgid "Multi user instance"
-msgstr "Mehrbenutzer Instanz"
+#: mod/notifications.php:123
+msgid "Home Notifications"
+msgstr "Pinnwand Benachrichtigungen"
 
-#: mod/admin.php:946
-msgid "Closed"
-msgstr "Geschlossen"
+#: mod/notifications.php:152
+msgid "Show Ignored Requests"
+msgstr "Zeige ignorierte Anfragen"
 
-#: mod/admin.php:947
-msgid "Requires approval"
-msgstr "Bedarf der Zustimmung"
+#: mod/notifications.php:152
+msgid "Hide Ignored Requests"
+msgstr "Verberge ignorierte Anfragen"
 
-#: mod/admin.php:948
-msgid "Open"
-msgstr "Offen"
+#: mod/notifications.php:164 mod/notifications.php:234
+msgid "Notification type: "
+msgstr "Benachrichtigungstyp: "
 
-#: mod/admin.php:952
-msgid "No SSL policy, links will track page SSL state"
-msgstr "Keine SSL Richtlinie, Links werden das verwendete Protokoll beibehalten"
+#: mod/notifications.php:167
+#, php-format
+msgid "suggested by %s"
+msgstr "vorgeschlagen von %s"
 
-#: mod/admin.php:953
-msgid "Force all links to use SSL"
-msgstr "SSL für alle Links erzwingen"
+#: mod/notifications.php:173 mod/notifications.php:252
+msgid "Post a new friend activity"
+msgstr "Neue-Kontakt Nachricht senden"
 
-#: mod/admin.php:954
-msgid "Self-signed certificate, use SSL for local links only (discouraged)"
-msgstr "Selbst-unterzeichnetes Zertifikat, SSL nur für lokale Links verwenden (nicht empfohlen)"
+#: mod/notifications.php:173 mod/notifications.php:252
+msgid "if applicable"
+msgstr "falls anwendbar"
 
-#: mod/admin.php:978
-msgid "File upload"
-msgstr "Datei hochladen"
+#: mod/notifications.php:176 mod/notifications.php:261 mod/admin.php:1506
+msgid "Approve"
+msgstr "Genehmigen"
 
-#: mod/admin.php:979
-msgid "Policies"
-msgstr "Regeln"
+#: mod/notifications.php:195
+msgid "Claims to be known to you: "
+msgstr "Behauptet Dich zu kennen: "
 
-#: mod/admin.php:981
-msgid "Auto Discovered Contact Directory"
-msgstr "Automatisch ein Kontaktverzeichnis erstellen"
+#: mod/notifications.php:196
+msgid "yes"
+msgstr "ja"
 
-#: mod/admin.php:982
-msgid "Performance"
-msgstr "Performance"
+#: mod/notifications.php:196
+msgid "no"
+msgstr "nein"
 
-#: mod/admin.php:983
-msgid "Worker"
-msgstr "Worker"
+#: mod/notifications.php:197 mod/notifications.php:202
+msgid "Shall your connection be bidirectional or not?"
+msgstr "Soll die Verbindung beidseitig sein oder nicht?"
 
-#: mod/admin.php:984
+#: mod/notifications.php:198 mod/notifications.php:203
+#, php-format
 msgid ""
-"Relocate - WARNING: advanced function. Could make this server unreachable."
-msgstr "Umsiedeln - WARNUNG: Könnte diesen Server unerreichbar machen."
-
-#: mod/admin.php:987
-msgid "Site name"
-msgstr "Seitenname"
-
-#: mod/admin.php:988
-msgid "Host name"
-msgstr "Host Name"
+"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 "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."
 
-#: mod/admin.php:989
-msgid "Sender Email"
-msgstr "Absender für Emails"
+#: mod/notifications.php:199
+#, 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 "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
 
-#: mod/admin.php:989
+#: mod/notifications.php:204
+#, php-format
 msgid ""
-"The email address your server shall use to send notification emails from."
-msgstr "Die E-Mail Adresse die dein Server zum Versenden von Benachrichtigungen verwenden soll."
+"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 "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
 
-#: mod/admin.php:990
-msgid "Banner/Logo"
-msgstr "Banner/Logo"
+#: mod/notifications.php:215
+msgid "Friend"
+msgstr "Kontakt"
 
-#: mod/admin.php:991
-msgid "Shortcut icon"
-msgstr "Shortcut Icon"
+#: mod/notifications.php:216
+msgid "Sharer"
+msgstr "Teilenden"
 
-#: mod/admin.php:991
-msgid "Link to an icon that will be used for browsers."
-msgstr "Link zu einem Icon, das Browser verwenden werden."
+#: mod/notifications.php:216
+msgid "Subscriber"
+msgstr "Abonnent"
 
-#: mod/admin.php:992
-msgid "Touch icon"
-msgstr "Touch Icon"
+#: mod/notifications.php:272
+msgid "No introductions."
+msgstr "Keine Kontaktanfragen."
 
-#: mod/admin.php:992
-msgid "Link to an icon that will be used for tablets and mobiles."
-msgstr "Link zu einem Icon das Tablets und Handies verwenden sollen."
+#: mod/notifications.php:313
+msgid "Show unread"
+msgstr "Ungelesene anzeigen"
 
-#: mod/admin.php:993
-msgid "Additional Info"
-msgstr "Zusätzliche Informationen"
+#: mod/notifications.php:313
+msgid "Show all"
+msgstr "Alle anzeigen"
 
-#: mod/admin.php:993
+#: mod/notifications.php:319
 #, php-format
-msgid ""
-"For public servers: you can add additional information here that will be "
-"listed at %s/siteinfo."
-msgstr "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf %s/siteinfo angezeigt werden."
+msgid "No more %s notifications."
+msgstr "Keine weiteren %s Benachrichtigungen"
 
-#: mod/admin.php:994
-msgid "System language"
-msgstr "Systemsprache"
+#: mod/ping.php:270
+msgid "{0} wants to be your friend"
+msgstr "{0} möchte mit Dir in Kontakt treten"
 
-#: mod/admin.php:995
-msgid "System theme"
-msgstr "Systemweites Theme"
+#: mod/ping.php:285
+msgid "{0} sent you a message"
+msgstr "{0} schickte Dir eine Nachricht"
 
-#: mod/admin.php:995
-msgid ""
-"Default system theme - may be over-ridden by user profiles - <a href='#' "
-"id='cnftheme'>change theme settings</a>"
-msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - <a href='#' id='cnftheme'>Theme-Einstellungen ändern</a>"
+#: mod/ping.php:300
+msgid "{0} requested registration"
+msgstr "{0} möchte sich registrieren"
 
-#: mod/admin.php:996
-msgid "Mobile system theme"
-msgstr "Systemweites mobiles Theme"
+#: mod/admin.php:96
+msgid "Theme settings updated."
+msgstr "Themeneinstellungen aktualisiert."
 
-#: mod/admin.php:996
-msgid "Theme for mobile devices"
-msgstr "Thema für mobile Geräte"
+#: mod/admin.php:165 mod/admin.php:1054
+msgid "Site"
+msgstr "Seite"
 
-#: mod/admin.php:997
-msgid "SSL link policy"
-msgstr "Regeln für SSL Links"
+#: mod/admin.php:166 mod/admin.php:988 mod/admin.php:1498 mod/admin.php:1514
+msgid "Users"
+msgstr "Nutzer"
 
-#: mod/admin.php:997
-msgid "Determines whether generated links should be forced to use SSL"
-msgstr "Bestimmt, ob generierte Links SSL verwenden müssen"
+#: mod/admin.php:168 mod/admin.php:1892 mod/admin.php:1942
+msgid "Themes"
+msgstr "Themen"
 
-#: mod/admin.php:998
-msgid "Force SSL"
-msgstr "Erzwinge SSL"
+#: mod/admin.php:170
+msgid "DB updates"
+msgstr "DB Updates"
 
-#: mod/admin.php:998
-msgid ""
-"Force all Non-SSL requests to SSL - Attention: on some systems it could lead"
-" to endless loops."
-msgstr "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife."
+#: mod/admin.php:171 mod/admin.php:512
+msgid "Inspect Queue"
+msgstr "Warteschlange Inspizieren"
 
-#: mod/admin.php:999
-msgid "Old style 'Share'"
-msgstr "Altes \"Teilen\" Element"
+#: mod/admin.php:172 mod/admin.php:288
+msgid "Server Blocklist"
+msgstr "Server Blockliste"
 
-#: mod/admin.php:999
-msgid "Deactivates the bbcode element 'share' for repeating items."
-msgstr "Deaktiviert das BBCode Element \"share\" beim Wiederholen von Beiträgen."
+#: mod/admin.php:173 mod/admin.php:478
+msgid "Federation Statistics"
+msgstr "Federation Statistik"
 
-#: mod/admin.php:1000
-msgid "Hide help entry from navigation menu"
-msgstr "Verberge den Menüeintrag für die Hilfe im Navigationsmenü"
+#: mod/admin.php:187 mod/admin.php:198 mod/admin.php:2016
+msgid "Logs"
+msgstr "Protokolle"
 
-#: mod/admin.php:1000
-msgid ""
-"Hides the menu entry for the Help pages from the navigation menu. You can "
-"still access it calling /help directly."
-msgstr "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden."
+#: mod/admin.php:188 mod/admin.php:2084
+msgid "View Logs"
+msgstr "Protokolle anzeigen"
 
-#: mod/admin.php:1001
-msgid "Single user instance"
-msgstr "Ein-Nutzer Instanz"
+#: mod/admin.php:189
+msgid "probe address"
+msgstr "Adresse untersuchen"
 
-#: mod/admin.php:1001
-msgid "Make this instance multi-user or single-user for the named user"
-msgstr "Regelt ob es sich bei dieser Instanz um eine ein Personen Installation oder eine Installation mit mehr als einem Nutzer handelt."
+#: mod/admin.php:190
+msgid "check webfinger"
+msgstr "Webfinger überprüfen"
 
-#: mod/admin.php:1002
-msgid "Maximum image size"
-msgstr "Maximale Bildgröße"
+#: mod/admin.php:197
+msgid "Plugin Features"
+msgstr "Plugin Features"
 
-#: mod/admin.php:1002
-msgid ""
-"Maximum size in bytes of uploaded images. Default is 0, which means no "
-"limits."
-msgstr "Maximale Uploadgröße von Bildern in Bytes. Standard ist 0, d.h. ohne Limit."
+#: mod/admin.php:199
+msgid "diagnostics"
+msgstr "Diagnose"
 
-#: mod/admin.php:1003
-msgid "Maximum image length"
-msgstr "Maximale Bildlänge"
+#: mod/admin.php:200
+msgid "User registrations waiting for confirmation"
+msgstr "Nutzeranmeldungen die auf Bestätigung warten"
 
-#: mod/admin.php:1003
-msgid ""
-"Maximum length in pixels of the longest side of uploaded images. Default is "
-"-1, which means no limits."
-msgstr "Maximale Länge in Pixeln der längsten Seite eines hoch geladenen Bildes. Grundeinstellung ist -1 was keine Einschränkung bedeutet."
+#: mod/admin.php:279
+msgid "The blocked domain"
+msgstr "Die blockierte Domain"
 
-#: mod/admin.php:1004
-msgid "JPEG image quality"
-msgstr "Qualität des JPEG Bildes"
+#: mod/admin.php:280 mod/admin.php:293
+msgid "The reason why you blocked this domain."
+msgstr "Die Begründung warum du diese Domain blockiert hast."
 
-#: mod/admin.php:1004
-msgid ""
-"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
-"100, which is full quality."
-msgstr "Hoch geladene JPEG Bilder werden mit dieser Qualität [0-100] gespeichert. Grundeinstellung ist 100, kein Qualitätsverlust."
+#: mod/admin.php:281
+msgid "Delete domain"
+msgstr "Domain löschen"
 
-#: mod/admin.php:1006
-msgid "Register policy"
-msgstr "Registrierungsmethode"
+#: mod/admin.php:281
+msgid "Check to delete this entry from the blocklist"
+msgstr "Markieren, um diesen Eintrag von der Blocklist zu entfernen"
 
-#: mod/admin.php:1007
-msgid "Maximum Daily Registrations"
-msgstr "Maximum täglicher Registrierungen"
+#: mod/admin.php:287 mod/admin.php:477 mod/admin.php:511 mod/admin.php:586
+#: mod/admin.php:1053 mod/admin.php:1497 mod/admin.php:1615 mod/admin.php:1678
+#: mod/admin.php:1891 mod/admin.php:1941 mod/admin.php:2015 mod/admin.php:2083
+msgid "Administration"
+msgstr "Administration"
 
-#: mod/admin.php:1007
+#: mod/admin.php:289
 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 "Wenn die Registrierung weiter oben erlaubt ist, regelt dies die maximale Anzahl von Neuanmeldungen pro Tag. Wenn die Registrierung geschlossen ist, hat diese Einstellung keinen Effekt."
+"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 "Auf dieser Seite kannst du die Liste der blockierten Domains aus dem föderalen Netzwerk verwalten, denen es untersagt ist mit deinem Knoten zu interagieren. Für jede der blockierten Domains musst du außerdem einen Grund für die Sperrung angeben."
 
-#: mod/admin.php:1008
-msgid "Register text"
-msgstr "Registrierungstext"
+#: mod/admin.php:290
+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 "Die Liste der blockierten Domains wird auf der /friendica Seite öffentlich einsehbar gemacht, damit deine Nutzer und Personen die Kommunikationsprobleme erkunden, die Ursachen einfach finden können."
 
-#: mod/admin.php:1008
-msgid "Will be displayed prominently on the registration page."
-msgstr "Wird gut sichtbar auf der Registrierungsseite angezeigt."
+#: mod/admin.php:291
+msgid "Add new entry to block list"
+msgstr "Neuen Eintrag in die Blockliste"
 
-#: mod/admin.php:1009
-msgid "Accounts abandoned after x days"
-msgstr "Nutzerkonten gelten nach x Tagen als unbenutzt"
+#: mod/admin.php:292
+msgid "Server Domain"
+msgstr "Domain des Servers"
 
-#: mod/admin.php:1009
+#: mod/admin.php:292
 msgid ""
-"Will not waste system resources polling external sites for abandonded "
-"accounts. Enter 0 for no time limit."
-msgstr "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Konten nicht mehr benutzt werden. 0 eingeben für kein Limit."
+"The domain of the new server to add to the block list. Do not include the "
+"protocol."
+msgstr "Der Domain-Name des Servers der geblockt werden soll. Gib das Protokoll nicht mit an!"
 
-#: mod/admin.php:1010
-msgid "Allowed friend domains"
-msgstr "Erlaubte Domains für Kontakte"
-
-#: mod/admin.php:1010
-msgid ""
-"Comma separated list of domains which are allowed to establish friendships "
-"with this site. Wildcards are accepted. Empty to allow any domains"
-msgstr "Liste der Domains, die für Kontakte erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
+#: mod/admin.php:293
+msgid "Block reason"
+msgstr "Begründung der Blockierung"
 
-#: mod/admin.php:1011
-msgid "Allowed email domains"
-msgstr "Erlaubte Domains für E-Mails"
+#: mod/admin.php:294
+msgid "Add Entry"
+msgstr "Eintrag hinzufügen"
 
-#: mod/admin.php:1011
-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 "Liste der Domains, die für E-Mail-Adressen bei der Registrierung erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
+#: mod/admin.php:295
+msgid "Save changes to the blocklist"
+msgstr "Änderungen der Blockliste speichern"
 
-#: mod/admin.php:1012
-msgid "Block public"
-msgstr "Öffentlichen Zugriff blockieren"
+#: mod/admin.php:296
+msgid "Current Entries in the Blocklist"
+msgstr "Aktuelle Einträge der Blockliste"
 
-#: mod/admin.php:1012
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently logged in."
-msgstr "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist."
+#: mod/admin.php:299
+msgid "Delete entry from blocklist"
+msgstr "Eintrag von der Blockliste entfernen"
 
-#: mod/admin.php:1013
-msgid "Force publish"
-msgstr "Erzwinge Veröffentlichung"
+#: mod/admin.php:302
+msgid "Delete entry from blocklist?"
+msgstr "Eintrag von der Blockliste entfernen?"
 
-#: mod/admin.php:1013
-msgid ""
-"Check to force all profiles on this site to be listed in the site directory."
-msgstr "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen."
+#: mod/admin.php:327
+msgid "Server added to blocklist."
+msgstr "Server zur Blockliste hinzugefügt."
 
-#: mod/admin.php:1014
-msgid "Global directory URL"
-msgstr "URL des weltweiten Verzeichnisses"
+#: mod/admin.php:343
+msgid "Site blocklist updated."
+msgstr "Blockliste aktualisiert."
+
+#: mod/admin.php:408
+msgid "unknown"
+msgstr "Unbekannt"
 
-#: mod/admin.php:1014
+#: mod/admin.php:471
 msgid ""
-"URL to the global directory. If this is not set, the global directory is "
-"completely unavailable to the application."
-msgstr "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar."
+"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 "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."
 
-#: mod/admin.php:1015
-msgid "Allow threaded items"
-msgstr "Erlaube Threads in Diskussionen"
+#: mod/admin.php:472
+msgid ""
+"The <em>Auto Discovered Contact Directory</em> feature is not enabled, it "
+"will improve the data displayed here."
+msgstr "Die Funktion um <em>Automatisch ein Kontaktverzeichnis erstellen</em> ist nicht aktiv. Es wird die hier angezeigten Daten verbessern."
 
-#: mod/admin.php:1015
-msgid "Allow infinite level threading for items on this site."
-msgstr "Erlaube ein unendliches Level für Threads auf dieser Seite."
+#: mod/admin.php:484
+#, php-format
+msgid "Currently this node is aware of %d nodes from the following platforms:"
+msgstr "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:"
 
-#: mod/admin.php:1016
-msgid "Private posts by default for new users"
-msgstr "Private Beiträge als Standard für neue Nutzer"
+#: mod/admin.php:514
+msgid "ID"
+msgstr "ID"
 
-#: mod/admin.php:1016
-msgid ""
-"Set default post permissions for all new members to the default privacy "
-"group rather than public."
-msgstr "Die Standard-Zugriffsrechte für neue Nutzer werden so gesetzt, dass als Voreinstellung in die private Gruppe gepostet wird anstelle von öffentlichen Beiträgen."
+#: mod/admin.php:515
+msgid "Recipient Name"
+msgstr "Empfänger Name"
 
-#: mod/admin.php:1017
-msgid "Don't include post content in email notifications"
-msgstr "Inhalte von Beiträgen nicht in E-Mail-Benachrichtigungen versenden"
+#: mod/admin.php:516
+msgid "Recipient Profile"
+msgstr "Empfänger Profil"
 
-#: mod/admin.php:1017
-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 "Inhalte von Beiträgen/Kommentaren/privaten Nachrichten/usw., zum Datenschutz nicht in E-Mail-Benachrichtigungen einbinden."
+#: mod/admin.php:518
+msgid "Created"
+msgstr "Erstellt"
 
-#: mod/admin.php:1018
-msgid "Disallow public access to addons listed in the apps menu."
-msgstr "Öffentlichen Zugriff auf Addons im Apps Menü verbieten."
+#: mod/admin.php:519
+msgid "Last Tried"
+msgstr "Zuletzt versucht"
 
-#: mod/admin.php:1018
+#: mod/admin.php:520
 msgid ""
-"Checking this box will restrict addons listed in the apps menu to members "
-"only."
-msgstr "Wenn ausgewählt werden die im Apps Menü aufgeführten Addons nur angemeldeten Nutzern der Seite zur Verfügung gestellt."
+"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 "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden."
 
-#: mod/admin.php:1019
-msgid "Don't embed private images in posts"
-msgstr "Private Bilder nicht in Beiträgen einbetten."
+#: mod/admin.php:545
+#, 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 />"
+msgstr "Deine DB verwendet derzeit noch MyISAM Tabellen. Du solltest die Datenbank Engine auf InnoDB umstellen, da Friendica in Zukunft InnoDB Features verwenden wird. Eine Anleitung zur Umstellung der Datenbank kannst du  <a href=\"%s\">hier</a>  finden. Du kannst außerdem mit dem Befehl <tt>php include/dbstructure.php toinnodb</tt> auf der Kommandozeile die Umstellung automatisch vornehmen lassen."
 
-#: mod/admin.php:1019
+#: mod/admin.php:550
 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 "Ersetze lokal gehostete private Fotos in Beiträgen nicht mit einer eingebetteten Kopie des Bildes. Dies bedeutet, dass Kontakte, die Beiträge mit privaten Fotos erhalten sich zunächst auf den jeweiligen Servern authentifizieren müssen bevor die Bilder geladen und angezeigt werden, was eine gewisse Zeit dauert."
+"You are using a MySQL version which does not support all features that "
+"Friendica uses. You should consider switching to MariaDB."
+msgstr "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist."
 
-#: mod/admin.php:1020
-msgid "Allow Users to set remote_self"
-msgstr "Nutzern erlauben das remote_self Flag zu setzen"
+#: mod/admin.php:554 mod/admin.php:1447
+msgid "Normal Account"
+msgstr "Normales Konto"
 
-#: mod/admin.php:1020
-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 "Ist dies ausgewählt kann jeder Nutzer jeden seiner Kontakte als remote_self (entferntes Konto) im Kontakt reparieren Dialog markieren. Nach dem setzten dieses Flags werden alle Top-Level Beiträge dieser Kontakte automatisch in den Stream dieses Nutzers gepostet."
+#: mod/admin.php:555 mod/admin.php:1448
+msgid "Soapbox Account"
+msgstr "Marktschreier-Konto"
 
-#: mod/admin.php:1021
-msgid "Block multiple registrations"
-msgstr "Unterbinde Mehrfachregistrierung"
+#: mod/admin.php:556 mod/admin.php:1449
+msgid "Community/Celebrity Account"
+msgstr "Forum/Promi-Konto"
 
-#: mod/admin.php:1021
-msgid "Disallow users to register additional accounts for use as pages."
-msgstr "Benutzern nicht erlauben, weitere Konten als zusätzliche Profile anzulegen."
+#: mod/admin.php:557 mod/admin.php:1450
+msgid "Automatic Friend Account"
+msgstr "Automatisches Freundekonto"
 
-#: mod/admin.php:1022
-msgid "OpenID support"
-msgstr "OpenID Unterstützung"
+#: mod/admin.php:558
+msgid "Blog Account"
+msgstr "Blog-Konto"
 
-#: mod/admin.php:1022
-msgid "OpenID support for registration and logins."
-msgstr "OpenID-Unterstützung für Registrierung und Login."
+#: mod/admin.php:559
+msgid "Private Forum"
+msgstr "Privates Forum"
 
-#: mod/admin.php:1023
-msgid "Fullname check"
-msgstr "Namen auf Vollständigkeit überprüfen"
+#: mod/admin.php:581
+msgid "Message queues"
+msgstr "Nachrichten-Warteschlangen"
 
-#: mod/admin.php:1023
-msgid ""
-"Force users to register with a space between firstname and lastname in Full "
-"name, as an antispam measure"
-msgstr "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden."
+#: mod/admin.php:587
+msgid "Summary"
+msgstr "Zusammenfassung"
 
-#: mod/admin.php:1024
-msgid "UTF-8 Regular expressions"
-msgstr "UTF-8 Reguläre Ausdrücke"
+#: mod/admin.php:589
+msgid "Registered users"
+msgstr "Registrierte Nutzer"
 
-#: mod/admin.php:1024
-msgid "Use PHP UTF8 regular expressions"
-msgstr "PHP UTF8 Ausdrücke verwenden"
+#: mod/admin.php:591
+msgid "Pending registrations"
+msgstr "Anstehende Anmeldungen"
 
-#: mod/admin.php:1025
-msgid "Community Page Style"
-msgstr "Art der Gemeinschaftsseite"
+#: mod/admin.php:592
+msgid "Version"
+msgstr "Version"
 
-#: mod/admin.php:1025
-msgid ""
-"Type of community page to show. 'Global community' shows every public "
-"posting from an open distributed network that arrived on this server."
-msgstr "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen."
+#: mod/admin.php:597
+msgid "Active plugins"
+msgstr "Aktive Plugins"
 
-#: mod/admin.php:1026
-msgid "Posts per user on community page"
-msgstr "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite"
+#: mod/admin.php:622
+msgid "Can not parse base url. Must have at least <scheme>://<domain>"
+msgstr "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus <protokoll>://<domain> bestehen"
 
-#: mod/admin.php:1026
-msgid ""
-"The maximum number of posts per user on the community page. (Not valid for "
-"'Global Community')"
-msgstr "Die Anzahl der Beiträge die von jedem Nutzer maximal auf der Gemeinschaftsseite angezeigt werden sollen. Dieser Parameter wird nicht für die Globale Gemeinschaftsseite genutzt."
+#: mod/admin.php:914
+msgid "Site settings updated."
+msgstr "Seiteneinstellungen aktualisiert."
 
-#: mod/admin.php:1027
-msgid "Enable OStatus support"
-msgstr "OStatus Unterstützung aktivieren"
+#: mod/admin.php:971
+msgid "No community page"
+msgstr "Keine Gemeinschaftsseite"
 
-#: mod/admin.php:1027
-msgid ""
-"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
-"communications in OStatus are public, so privacy warnings will be "
-"occasionally displayed."
-msgstr "Biete die eingebaute OStatus (iStatusNet, GNU Social, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt."
+#: mod/admin.php:972
+msgid "Public postings from users of this site"
+msgstr "Öffentliche Beiträge von Nutzer_innen dieser Seite"
 
-#: mod/admin.php:1028
-msgid "OStatus conversation completion interval"
-msgstr "Intervall zum Vervollständigen von OStatus Unterhaltungen"
+#: mod/admin.php:973
+msgid "Global community page"
+msgstr "Globale Gemeinschaftsseite"
 
-#: mod/admin.php:1028
-msgid ""
-"How often shall the poller check for new entries in OStatus conversations? "
-"This can be a very ressource task."
-msgstr "Wie oft soll der Poller checken ob es neue Nachrichten in OStatus Unterhaltungen gibt die geladen werden müssen. Je nach Anzahl der OStatus Kontakte könnte dies ein sehr Ressourcen lastiger Job sein."
+#: mod/admin.php:979
+msgid "At post arrival"
+msgstr "Beim Empfang von Nachrichten"
 
-#: mod/admin.php:1029
-msgid "Only import OStatus threads from our contacts"
-msgstr "Nur OStatus Konversationen unserer Kontakte importieren"
+#: mod/admin.php:989
+msgid "Users, Global Contacts"
+msgstr "Nutzer, globale Kontakte"
 
-#: mod/admin.php:1029
-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 "Normalerweise werden alle Inhalte von OStatus Kontakten importiert. Mit dieser Option werden nur solche Konversationen gespeichert, die von Kontakten der Nutzer dieses Knotens gestartet wurden."
+#: mod/admin.php:990
+msgid "Users, Global Contacts/fallback"
+msgstr "Nutzer, globale Kontakte / Fallback"
 
-#: mod/admin.php:1030
-msgid "OStatus support can only be enabled if threading is enabled."
-msgstr "OStatus Unterstützung kann nur aktiviert werden wenn \"Threading\" aktiviert ist. "
+#: mod/admin.php:994
+msgid "One month"
+msgstr "ein Monat"
 
-#: mod/admin.php:1032
-msgid ""
-"Diaspora support can't be enabled because Friendica was installed into a sub"
-" directory."
-msgstr "Diaspora Unterstützung kann nicht aktiviert werden da Friendica in ein Unterverzeichnis installiert ist."
+#: mod/admin.php:995
+msgid "Three months"
+msgstr "drei Monate"
 
-#: mod/admin.php:1033
-msgid "Enable Diaspora support"
-msgstr "Diaspora Unterstützung aktivieren"
+#: mod/admin.php:996
+msgid "Half a year"
+msgstr "ein halbes Jahr"
 
-#: mod/admin.php:1033
-msgid "Provide built-in Diaspora network compatibility."
-msgstr "Verwende die eingebaute Diaspora-Verknüpfung."
+#: mod/admin.php:997
+msgid "One year"
+msgstr "ein Jahr"
 
-#: mod/admin.php:1034
-msgid "Only allow Friendica contacts"
-msgstr "Nur Friendica-Kontakte erlauben"
+#: mod/admin.php:1002
+msgid "Multi user instance"
+msgstr "Mehrbenutzer Instanz"
 
-#: mod/admin.php:1034
-msgid ""
-"All contacts must use Friendica protocols. All other built-in communication "
-"protocols disabled."
-msgstr "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert."
+#: mod/admin.php:1025
+msgid "Closed"
+msgstr "Geschlossen"
 
-#: mod/admin.php:1035
-msgid "Verify SSL"
-msgstr "SSL Überprüfen"
+#: mod/admin.php:1026
+msgid "Requires approval"
+msgstr "Bedarf der Zustimmung"
 
-#: mod/admin.php:1035
-msgid ""
-"If you wish, you can turn on strict certificate checking. This will mean you"
-" cannot connect (at all) to self-signed SSL sites."
-msgstr "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann."
+#: mod/admin.php:1027
+msgid "Open"
+msgstr "Offen"
 
-#: mod/admin.php:1036
-msgid "Proxy user"
-msgstr "Proxy Nutzer"
+#: mod/admin.php:1031
+msgid "No SSL policy, links will track page SSL state"
+msgstr "Keine SSL Richtlinie, Links werden das verwendete Protokoll beibehalten"
 
-#: mod/admin.php:1037
-msgid "Proxy URL"
-msgstr "Proxy URL"
+#: mod/admin.php:1032
+msgid "Force all links to use SSL"
+msgstr "SSL für alle Links erzwingen"
 
-#: mod/admin.php:1038
-msgid "Network timeout"
-msgstr "Netzwerk Wartezeit"
+#: mod/admin.php:1033
+msgid "Self-signed certificate, use SSL for local links only (discouraged)"
+msgstr "Selbst-unterzeichnetes Zertifikat, SSL nur für lokale Links verwenden (nicht empfohlen)"
 
-#: mod/admin.php:1038
-msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
-msgstr "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)."
+#: mod/admin.php:1057
+msgid "File upload"
+msgstr "Datei hochladen"
+
+#: mod/admin.php:1058
+msgid "Policies"
+msgstr "Regeln"
+
+#: mod/admin.php:1060
+msgid "Auto Discovered Contact Directory"
+msgstr "Automatisch ein Kontaktverzeichnis erstellen"
+
+#: mod/admin.php:1061
+msgid "Performance"
+msgstr "Performance"
 
-#: mod/admin.php:1039
-msgid "Delivery interval"
-msgstr "Zustellungsintervall"
+#: mod/admin.php:1062
+msgid "Worker"
+msgstr "Worker"
 
-#: mod/admin.php:1039
+#: mod/admin.php:1063
 msgid ""
-"Delay background delivery processes by this many seconds to reduce system "
-"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
-"for large dedicated servers."
-msgstr "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server."
+"Relocate - WARNING: advanced function. Could make this server unreachable."
+msgstr "Umsiedeln - WARNUNG: Könnte diesen Server unerreichbar machen."
 
-#: mod/admin.php:1040
-msgid "Poll interval"
-msgstr "Abfrageintervall"
+#: mod/admin.php:1066
+msgid "Site name"
+msgstr "Seitenname"
 
-#: mod/admin.php:1040
-msgid ""
-"Delay background polling processes by this many seconds to reduce system "
-"load. If 0, use delivery interval."
-msgstr "Verzögere Hintergrundprozesse um diese Anzahl an Sekunden, um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet."
+#: mod/admin.php:1067
+msgid "Host name"
+msgstr "Host Name"
 
-#: mod/admin.php:1041
-msgid "Maximum Load Average"
-msgstr "Maximum Load Average"
+#: mod/admin.php:1068
+msgid "Sender Email"
+msgstr "Absender für Emails"
 
-#: mod/admin.php:1041
+#: mod/admin.php:1068
 msgid ""
-"Maximum system load before delivery and poll processes are deferred - "
-"default 50."
-msgstr "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50"
+"The email address your server shall use to send notification emails from."
+msgstr "Die E-Mail Adresse die dein Server zum Versenden von Benachrichtigungen verwenden soll."
 
-#: mod/admin.php:1042
-msgid "Maximum Load Average (Frontend)"
-msgstr "Maximum Load Average (Frontend)"
+#: mod/admin.php:1069
+msgid "Banner/Logo"
+msgstr "Banner/Logo"
 
-#: mod/admin.php:1042
-msgid "Maximum system load before the frontend quits service - default 50."
-msgstr "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50."
+#: mod/admin.php:1070
+msgid "Shortcut icon"
+msgstr "Shortcut Icon"
 
-#: mod/admin.php:1043
-msgid "Maximum table size for optimization"
-msgstr "Maximale Tabellengröße zur Optimierung"
+#: mod/admin.php:1070
+msgid "Link to an icon that will be used for browsers."
+msgstr "Link zu einem Icon, das Browser verwenden werden."
 
-#: mod/admin.php:1043
-msgid ""
-"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
-"Enter -1 to disable it."
-msgstr "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein."
+#: mod/admin.php:1071
+msgid "Touch icon"
+msgstr "Touch Icon"
 
-#: mod/admin.php:1044
-msgid "Minimum level of fragmentation"
-msgstr "Minimaler Fragmentationsgrad"
+#: mod/admin.php:1071
+msgid "Link to an icon that will be used for tablets and mobiles."
+msgstr "Link zu einem Icon das Tablets und Handies verwenden sollen."
+
+#: mod/admin.php:1072
+msgid "Additional Info"
+msgstr "Zusätzliche Informationen"
 
-#: mod/admin.php:1044
+#: mod/admin.php:1072
+#, php-format
 msgid ""
-"Minimum fragmenation level to start the automatic optimization - default "
-"value is 30%."
-msgstr "Minimales Fragmentationsgrad von Datenbanktabellen um die automatische Optimierung einzuleiten - Standardwert ist 30%"
+"For public servers: you can add additional information here that will be "
+"listed at %s/siteinfo."
+msgstr "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf %s/siteinfo angezeigt werden."
 
-#: mod/admin.php:1046
-msgid "Periodical check of global contacts"
-msgstr "Regelmäßig globale Kontakte überprüfen"
+#: mod/admin.php:1073
+msgid "System language"
+msgstr "Systemsprache"
+
+#: mod/admin.php:1074
+msgid "System theme"
+msgstr "Systemweites Theme"
 
-#: mod/admin.php:1046
+#: mod/admin.php:1074
 msgid ""
-"If enabled, the global contacts are checked periodically for missing or "
-"outdated data and the vitality of the contacts and servers."
-msgstr "Wenn diese Option aktiviert ist, werden die globalen Kontakte regelmäßig auf fehlende oder veraltete Daten sowie auf Erreichbarkeit des Kontakts und des Servers überprüft."
+"Default system theme - may be over-ridden by user profiles - <a href='#' "
+"id='cnftheme'>change theme settings</a>"
+msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - <a href='#' id='cnftheme'>Theme-Einstellungen ändern</a>"
 
-#: mod/admin.php:1047
-msgid "Days between requery"
-msgstr "Tage zwischen erneuten Abfragen"
+#: mod/admin.php:1075
+msgid "Mobile system theme"
+msgstr "Systemweites mobiles Theme"
 
-#: mod/admin.php:1047
-msgid "Number of days after which a server is requeried for his contacts."
-msgstr "Legt das Abfrageintervall fest, nachdem ein Server erneut nach Kontakten abgefragt werden soll."
+#: mod/admin.php:1075
+msgid "Theme for mobile devices"
+msgstr "Thema für mobile Geräte"
 
-#: mod/admin.php:1048
-msgid "Discover contacts from other servers"
-msgstr "Neue Kontakte auf anderen Servern entdecken"
+#: mod/admin.php:1076
+msgid "SSL link policy"
+msgstr "Regeln für SSL Links"
 
-#: mod/admin.php:1048
-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'."
-msgstr "Regelmäßig andere Server nach potentiellen Kontakten absuchen. Du kannst zwischen 'Nutzern', den tatsächlichen Nutzern des anderen Systems und 'globalen Kontakten', aktiven Kontakten die auf dem System bekannt sind, wählen. Der Fallback-Mechanismus ist für ältere Friendica und Redmatrix Server gedacht, bei denen globale Kontakte noch nicht verfügbar sind. Durch den Fallbackmodus entsteht auf deinem Server eine wesentlich höhere Last, empfohlen wird der Modus 'Nutzer, globale Kontakte'."
+#: mod/admin.php:1076
+msgid "Determines whether generated links should be forced to use SSL"
+msgstr "Bestimmt, ob generierte Links SSL verwenden müssen"
 
-#: mod/admin.php:1049
-msgid "Timeframe for fetching global contacts"
-msgstr "Zeitfenster für globale Kontakte"
+#: mod/admin.php:1077
+msgid "Force SSL"
+msgstr "Erzwinge SSL"
 
-#: mod/admin.php:1049
+#: mod/admin.php:1077
 msgid ""
-"When the discovery is activated, this value defines the timeframe for the "
-"activity of the global contacts that are fetched from other servers."
-msgstr "Wenn die Entdeckung neuer Kontakte aktiv ist, definiert dieses Zeitfenster den Zeitraum in dem globale Kontakte als aktiv gelten und von anderen Servern importiert werden."
+"Force all Non-SSL requests to SSL - Attention: on some systems it could lead"
+" to endless loops."
+msgstr "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife."
 
-#: mod/admin.php:1050
-msgid "Search the local directory"
-msgstr "Lokales Verzeichnis durchsuchen"
+#: mod/admin.php:1078
+msgid "Hide help entry from navigation menu"
+msgstr "Verberge den Menüeintrag für die Hilfe im Navigationsmenü"
 
-#: mod/admin.php:1050
+#: mod/admin.php:1078
 msgid ""
-"Search the local directory instead of the global directory. When searching "
-"locally, every search will be executed on the global directory in the "
-"background. This improves the search results when the search is repeated."
-msgstr "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird."
+"Hides the menu entry for the Help pages from the navigation menu. You can "
+"still access it calling /help directly."
+msgstr "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden."
 
-#: mod/admin.php:1052
-msgid "Publish server information"
-msgstr "Server Informationen veröffentlichen"
+#: mod/admin.php:1079
+msgid "Single user instance"
+msgstr "Ein-Nutzer Instanz"
 
-#: mod/admin.php:1052
-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."
-msgstr "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte <a href='http://the-federation.info/'>the-federation.info</a> aufrufen."
+#: mod/admin.php:1079
+msgid "Make this instance multi-user or single-user for the named user"
+msgstr "Regelt ob es sich bei dieser Instanz um eine ein Personen Installation oder eine Installation mit mehr als einem Nutzer handelt."
 
-#: mod/admin.php:1054
-msgid "Use MySQL full text engine"
-msgstr "Nutze MySQL full text engine"
+#: mod/admin.php:1080
+msgid "Maximum image size"
+msgstr "Maximale Bildgröße"
 
-#: mod/admin.php:1054
+#: mod/admin.php:1080
 msgid ""
-"Activates the full text engine. Speeds up search - but can only search for "
-"four and more characters."
-msgstr "Aktiviert die 'full text engine'. Beschleunigt die Suche - aber es kann nur nach vier oder mehr Zeichen gesucht werden."
-
-#: mod/admin.php:1055
-msgid "Suppress Language"
-msgstr "Sprachinformation unterdrücken"
+"Maximum size in bytes of uploaded images. Default is 0, which means no "
+"limits."
+msgstr "Maximale Uploadgröße von Bildern in Bytes. Standard ist 0, d.h. ohne Limit."
 
-#: mod/admin.php:1055
-msgid "Suppress language information in meta information about a posting."
-msgstr "Verhindert das Erzeugen der Meta-Information zur Spracherkennung eines Beitrags."
+#: mod/admin.php:1081
+msgid "Maximum image length"
+msgstr "Maximale Bildlänge"
 
-#: mod/admin.php:1056
-msgid "Suppress Tags"
-msgstr "Tags Unterdrücken"
+#: mod/admin.php:1081
+msgid ""
+"Maximum length in pixels of the longest side of uploaded images. Default is "
+"-1, which means no limits."
+msgstr "Maximale Länge in Pixeln der längsten Seite eines hoch geladenen Bildes. Grundeinstellung ist -1 was keine Einschränkung bedeutet."
 
-#: mod/admin.php:1056
-msgid "Suppress showing a list of hashtags at the end of the posting."
-msgstr "Unterdrückt die Anzeige von Tags am Ende eines Beitrags."
+#: mod/admin.php:1082
+msgid "JPEG image quality"
+msgstr "Qualität des JPEG Bildes"
 
-#: mod/admin.php:1057
-msgid "Path to item cache"
-msgstr "Pfad zum Eintrag Cache"
+#: mod/admin.php:1082
+msgid ""
+"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
+"100, which is full quality."
+msgstr "Hoch geladene JPEG Bilder werden mit dieser Qualität [0-100] gespeichert. Grundeinstellung ist 100, kein Qualitätsverlust."
 
-#: mod/admin.php:1057
-msgid "The item caches buffers generated bbcode and external images."
-msgstr "Im Item-Cache werden externe Bilder und geparster BBCode zwischen gespeichert."
+#: mod/admin.php:1084
+msgid "Register policy"
+msgstr "Registrierungsmethode"
 
-#: mod/admin.php:1058
-msgid "Cache duration in seconds"
-msgstr "Cache-Dauer in Sekunden"
+#: mod/admin.php:1085
+msgid "Maximum Daily Registrations"
+msgstr "Maximum täglicher Registrierungen"
 
-#: mod/admin.php:1058
+#: mod/admin.php:1085
 msgid ""
-"How long should the cache files be hold? Default value is 86400 seconds (One"
-" day). To disable the item cache, set the value to -1."
-msgstr "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1."
+"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 "Wenn die Registrierung weiter oben erlaubt ist, regelt dies die maximale Anzahl von Neuanmeldungen pro Tag. Wenn die Registrierung geschlossen ist, hat diese Einstellung keinen Effekt."
 
-#: mod/admin.php:1059
-msgid "Maximum numbers of comments per post"
-msgstr "Maximale Anzahl von Kommentaren pro Beitrag"
+#: mod/admin.php:1086
+msgid "Register text"
+msgstr "Registrierungstext"
 
-#: mod/admin.php:1059
-msgid "How much comments should be shown for each post? Default value is 100."
-msgstr "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100."
+#: mod/admin.php:1086
+msgid "Will be displayed prominently on the registration page."
+msgstr "Wird gut sichtbar auf der Registrierungsseite angezeigt."
 
-#: mod/admin.php:1060
-msgid "Path for lock file"
-msgstr "Pfad für die Sperrdatei"
+#: mod/admin.php:1087
+msgid "Accounts abandoned after x days"
+msgstr "Nutzerkonten gelten nach x Tagen als unbenutzt"
 
-#: mod/admin.php:1060
+#: mod/admin.php:1087
+msgid ""
+"Will not waste system resources polling external sites for abandonded "
+"accounts. Enter 0 for no time limit."
+msgstr "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Konten nicht mehr benutzt werden. 0 eingeben für kein Limit."
+
+#: mod/admin.php:1088
+msgid "Allowed friend domains"
+msgstr "Erlaubte Domains für Kontakte"
+
+#: mod/admin.php:1088
 msgid ""
-"The lock file is used to avoid multiple pollers at one time. Only define a "
-"folder here."
-msgstr "Die lock-Datei wird benutzt, damit nicht mehrere poller auf einmal laufen. Definiere hier einen Dateiverzeichnis."
+"Comma separated list of domains which are allowed to establish friendships "
+"with this site. Wildcards are accepted. Empty to allow any domains"
+msgstr "Liste der Domains, die für Kontakte erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
 
-#: mod/admin.php:1061
-msgid "Temp path"
-msgstr "Temp Pfad"
+#: mod/admin.php:1089
+msgid "Allowed email domains"
+msgstr "Erlaubte Domains für E-Mails"
 
-#: mod/admin.php:1061
+#: mod/admin.php:1089
 msgid ""
-"If you have a restricted system where the webserver can't access the system "
-"temp path, enter another path here."
-msgstr "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad."
+"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 "Liste der Domains, die für E-Mail-Adressen bei der Registrierung erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
 
-#: mod/admin.php:1062
-msgid "Base path to installation"
-msgstr "Basis-Pfad zur Installation"
+#: mod/admin.php:1090
+msgid "Block public"
+msgstr "Öffentlichen Zugriff blockieren"
 
-#: mod/admin.php:1062
+#: mod/admin.php:1090
 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 "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist."
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently logged in."
+msgstr "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist."
 
-#: mod/admin.php:1063
-msgid "Disable picture proxy"
-msgstr "Bilder Proxy deaktivieren"
+#: mod/admin.php:1091
+msgid "Force publish"
+msgstr "Erzwinge Veröffentlichung"
 
-#: mod/admin.php:1063
+#: mod/admin.php:1091
 msgid ""
-"The picture proxy increases performance and privacy. It shouldn't be used on"
-" systems with very low bandwith."
-msgstr "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen."
+"Check to force all profiles on this site to be listed in the site directory."
+msgstr "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen."
 
-#: mod/admin.php:1064
-msgid "Enable old style pager"
-msgstr "Den Old-Style Pager aktiviren"
+#: mod/admin.php:1092
+msgid "Global directory URL"
+msgstr "URL des weltweiten Verzeichnisses"
 
-#: mod/admin.php:1064
+#: mod/admin.php:1092
 msgid ""
-"The old style pager has page numbers but slows down massively the page "
-"speed."
-msgstr "Der Old-Style Pager zeigt Seitennummern an, verlangsamt aber auch drastisch das Laden einer Seite."
+"URL to the global directory. If this is not set, the global directory is "
+"completely unavailable to the application."
+msgstr "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar."
 
-#: mod/admin.php:1065
-msgid "Only search in tags"
-msgstr "Nur in Tags suchen"
+#: mod/admin.php:1093
+msgid "Allow threaded items"
+msgstr "Erlaube Threads in Diskussionen"
 
-#: mod/admin.php:1065
-msgid "On large systems the text search can slow down the system extremely."
-msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen."
+#: mod/admin.php:1093
+msgid "Allow infinite level threading for items on this site."
+msgstr "Erlaube ein unendliches Level für Threads auf dieser Seite."
 
-#: mod/admin.php:1067
-msgid "New base url"
-msgstr "Neue Basis-URL"
+#: mod/admin.php:1094
+msgid "Private posts by default for new users"
+msgstr "Private Beiträge als Standard für neue Nutzer"
 
-#: mod/admin.php:1067
+#: mod/admin.php:1094
 msgid ""
-"Change base url for this server. Sends relocate message to all DFRN contacts"
-" of all users."
-msgstr "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen."
+"Set default post permissions for all new members to the default privacy "
+"group rather than public."
+msgstr "Die Standard-Zugriffsrechte für neue Nutzer werden so gesetzt, dass als Voreinstellung in die private Gruppe gepostet wird anstelle von öffentlichen Beiträgen."
 
-#: mod/admin.php:1069
-msgid "RINO Encryption"
-msgstr "RINO Verschlüsselung"
+#: mod/admin.php:1095
+msgid "Don't include post content in email notifications"
+msgstr "Inhalte von Beiträgen nicht in E-Mail-Benachrichtigungen versenden"
 
-#: mod/admin.php:1069
-msgid "Encryption layer between nodes."
-msgstr "Verschlüsselung zwischen Friendica Instanzen"
+#: mod/admin.php:1095
+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 "Inhalte von Beiträgen/Kommentaren/privaten Nachrichten/usw., zum Datenschutz nicht in E-Mail-Benachrichtigungen einbinden."
 
-#: mod/admin.php:1070
-msgid "Embedly API key"
-msgstr "Embedly  API Schlüssel"
+#: mod/admin.php:1096
+msgid "Disallow public access to addons listed in the apps menu."
+msgstr "Öffentlichen Zugriff auf Addons im Apps Menü verbieten."
 
-#: mod/admin.php:1070
+#: mod/admin.php:1096
 msgid ""
-"<a href='http://embed.ly'>Embedly</a> is used to fetch additional data for "
-"web pages. This is an optional parameter."
-msgstr "<a href='http://embed.ly'>Embedly</a> wird verwendet um zusätzliche Informationen von Webseiten zu laden. Dies ist ein optionaler Parameter."
+"Checking this box will restrict addons listed in the apps menu to members "
+"only."
+msgstr "Wenn ausgewählt werden die im Apps Menü aufgeführten Addons nur angemeldeten Nutzern der Seite zur Verfügung gestellt."
 
-#: mod/admin.php:1072
-msgid "Enable 'worker' background processing"
-msgstr "Aktiviere die 'Worker' Hintergrundprozesse"
+#: mod/admin.php:1097
+msgid "Don't embed private images in posts"
+msgstr "Private Bilder nicht in Beiträgen einbetten."
 
-#: mod/admin.php:1072
+#: mod/admin.php:1097
 msgid ""
-"The worker background processing limits the number of parallel background "
-"jobs to a maximum number and respects the system load."
-msgstr "Der 'background worker' Prozess begrenzt die Zahl der Prozesse, die im Hintergrund parallel laufen und beachtet dabei die Systemlast."
+"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 "Ersetze lokal gehostete private Fotos in Beiträgen nicht mit einer eingebetteten Kopie des Bildes. Dies bedeutet, dass Kontakte, die Beiträge mit privaten Fotos erhalten sich zunächst auf den jeweiligen Servern authentifizieren müssen bevor die Bilder geladen und angezeigt werden, was eine gewisse Zeit dauert."
 
-#: mod/admin.php:1073
-msgid "Maximum number of parallel workers"
-msgstr "Maximale Anzahl parallel laufender Worker"
+#: mod/admin.php:1098
+msgid "Allow Users to set remote_self"
+msgstr "Nutzern erlauben das remote_self Flag zu setzen"
 
-#: mod/admin.php:1073
+#: mod/admin.php:1098
 msgid ""
-"On shared hosters set this to 2. On larger systems, values of 10 are great. "
-"Default value is 4."
-msgstr "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4."
+"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 "Ist dies ausgewählt kann jeder Nutzer jeden seiner Kontakte als remote_self (entferntes Konto) im Kontakt reparieren Dialog markieren. Nach dem setzten dieses Flags werden alle Top-Level Beiträge dieser Kontakte automatisch in den Stream dieses Nutzers gepostet."
 
-#: mod/admin.php:1074
-msgid "Don't use 'proc_open' with the worker"
-msgstr "'proc_open' nicht mit den Workern verwenden"
+#: mod/admin.php:1099
+msgid "Block multiple registrations"
+msgstr "Unterbinde Mehrfachregistrierung"
 
-#: mod/admin.php:1074
-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 "Aktiviere diese Option, wenn dein System die Verwendung von 'proc_open' verhindert. Dies könnte auf Shared Hostern der Fall sein. Wenn du diese Option aktivierst, solltest du die Frequenz der poller Aufrufe in deiner crontab erhöhen."
+#: mod/admin.php:1099
+msgid "Disallow users to register additional accounts for use as pages."
+msgstr "Benutzern nicht erlauben, weitere Konten als zusätzliche Profile anzulegen."
 
-#: mod/admin.php:1075
-msgid "Enable fastlane"
-msgstr "Aktiviere Fastlane"
+#: mod/admin.php:1100
+msgid "OpenID support"
+msgstr "OpenID Unterstützung"
 
-#: mod/admin.php:1075
-msgid ""
-"When enabed, the fastlane mechanism starts an additional worker if processes"
-" with higher priority are blocked by processes of lower priority."
-msgstr "Wenn aktiviert, wird der Fastlane-Mechanismus einen weiteren Worker-Prozeß starten wenn Prozesse mit höherer Priorität von Prozessen mit niedrigerer Priorität blockiert werden."
+#: mod/admin.php:1100
+msgid "OpenID support for registration and logins."
+msgstr "OpenID-Unterstützung für Registrierung und Login."
 
-#: mod/admin.php:1076
-msgid "Enable frontend worker"
-msgstr "Aktiviere den Frontend Worker"
+#: mod/admin.php:1101
+msgid "Fullname check"
+msgstr "Namen auf Vollständigkeit überprüfen"
 
-#: mod/admin.php:1076
+#: mod/admin.php:1101
 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 yourdomain.tld/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. The worker background process needs to be activated for "
-"this."
-msgstr "Ist diese Option aktiv, wird der Worker Prozess durch Aktionen am Frontend gestartet (z.B. wenn Nachrichten zugestellt werden). Auf kleineren Seiten sollte yourdomain.tld/worker regelmäßig, beispielsweise durch einen externen Cron Anbieter, aufgerufen werden. Du solltest dies Option nur dann aktivieren, wenn du keinen Cron Job auf deinem eigenen Server starten kannst. Damit diese Option einen Effekt hat, muss der Worker Prozess aktiviert sein."
+"Force users to register with a space between firstname and lastname in Full "
+"name, as an antispam measure"
+msgstr "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden."
 
-#: mod/admin.php:1105
-msgid "Update has been marked successful"
-msgstr "Update wurde als erfolgreich markiert"
+#: mod/admin.php:1102
+msgid "Community Page Style"
+msgstr "Art der Gemeinschaftsseite"
 
-#: mod/admin.php:1113
-#, php-format
-msgid "Database structure update %s was successfully applied."
-msgstr "Das Update %s der Struktur der Datenbank wurde erfolgreich angewandt."
+#: mod/admin.php:1102
+msgid ""
+"Type of community page to show. 'Global community' shows every public "
+"posting from an open distributed network that arrived on this server."
+msgstr "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen."
 
-#: mod/admin.php:1116
-#, php-format
-msgid "Executing of database structure update %s failed with error: %s"
-msgstr "Das Update %s der Struktur der Datenbank schlug mit folgender Fehlermeldung fehl: %s"
+#: mod/admin.php:1103
+msgid "Posts per user on community page"
+msgstr "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite"
 
-#: mod/admin.php:1128
-#, php-format
-msgid "Executing %s failed with error: %s"
-msgstr "Die Ausführung von %s schlug fehl. Fehlermeldung: %s"
+#: mod/admin.php:1103
+msgid ""
+"The maximum number of posts per user on the community page. (Not valid for "
+"'Global Community')"
+msgstr "Die Anzahl der Beiträge die von jedem Nutzer maximal auf der Gemeinschaftsseite angezeigt werden sollen. Dieser Parameter wird nicht für die Globale Gemeinschaftsseite genutzt."
 
-#: mod/admin.php:1131
-#, php-format
-msgid "Update %s was successfully applied."
-msgstr "Update %s war erfolgreich."
+#: mod/admin.php:1104
+msgid "Enable OStatus support"
+msgstr "OStatus Unterstützung aktivieren"
 
-#: mod/admin.php:1135
-#, php-format
-msgid "Update %s did not return a status. Unknown if it succeeded."
-msgstr "Update %s hat keinen Status zurückgegeben. Unbekannter Status."
+#: mod/admin.php:1104
+msgid ""
+"Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
+"communications in OStatus are public, so privacy warnings will be "
+"occasionally displayed."
+msgstr "Biete die eingebaute OStatus (iStatusNet, GNU Social, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, Privatsphäre Warnungen werden nur bei Bedarf angezeigt."
 
-#: mod/admin.php:1137
-#, php-format
-msgid "There was no additional update function %s that needed to be called."
-msgstr "Es gab keine weitere Update-Funktion, die von %s ausgeführt werden musste."
+#: mod/admin.php:1105
+msgid "OStatus conversation completion interval"
+msgstr "Intervall zum Vervollständigen von OStatus Unterhaltungen"
 
-#: mod/admin.php:1156
-msgid "No failed updates."
-msgstr "Keine fehlgeschlagenen Updates."
+#: mod/admin.php:1105
+msgid ""
+"How often shall the poller check for new entries in OStatus conversations? "
+"This can be a very ressource task."
+msgstr "Wie oft soll der Poller checken ob es neue Nachrichten in OStatus Unterhaltungen gibt die geladen werden müssen. Je nach Anzahl der OStatus Kontakte könnte dies ein sehr Ressourcen lastiger Job sein."
 
-#: mod/admin.php:1157
-msgid "Check database structure"
-msgstr "Datenbank Struktur überprüfen"
+#: mod/admin.php:1106
+msgid "Only import OStatus threads from our contacts"
+msgstr "Nur OStatus Konversationen unserer Kontakte importieren"
 
-#: mod/admin.php:1162
-msgid "Failed Updates"
-msgstr "Fehlgeschlagene Updates"
+#: mod/admin.php:1106
+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 "Normalerweise werden alle Inhalte von OStatus Kontakten importiert. Mit dieser Option werden nur solche Konversationen gespeichert, die von Kontakten der Nutzer dieses Knotens gestartet wurden."
 
-#: mod/admin.php:1163
+#: mod/admin.php:1107
+msgid "OStatus support can only be enabled if threading is enabled."
+msgstr "OStatus Unterstützung kann nur aktiviert werden wenn \"Threading\" aktiviert ist. "
+
+#: mod/admin.php:1109
 msgid ""
-"This does not include updates prior to 1139, which did not return a status."
-msgstr "Ohne Updates vor 1139, da diese keinen Status zurückgegeben haben."
+"Diaspora support can't be enabled because Friendica was installed into a sub"
+" directory."
+msgstr "Diaspora Unterstützung kann nicht aktiviert werden da Friendica in ein Unterverzeichnis installiert ist."
 
-#: mod/admin.php:1164
-msgid "Mark success (if update was manually applied)"
-msgstr "Als erfolgreich markieren (falls das Update manuell installiert wurde)"
+#: mod/admin.php:1110
+msgid "Enable Diaspora support"
+msgstr "Diaspora Unterstützung aktivieren"
 
-#: mod/admin.php:1165
-msgid "Attempt to execute this update step automatically"
-msgstr "Versuchen, diesen Schritt automatisch auszuführen"
+#: mod/admin.php:1110
+msgid "Provide built-in Diaspora network compatibility."
+msgstr "Verwende die eingebaute Diaspora-Verknüpfung."
 
-#: mod/admin.php:1199
-#, 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 "\nHallo %1$s,\n\nauf %2$s wurde ein Account für Dich angelegt."
+#: mod/admin.php:1111
+msgid "Only allow Friendica contacts"
+msgstr "Nur Friendica-Kontakte erlauben"
 
-#: mod/admin.php:1202
-#, php-format
+#: mod/admin.php:1111
 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 "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1$s\n\tBenutzername:\t%2$s\n\tPasswort:\t%3$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4$s."
+"All contacts must use Friendica protocols. All other built-in communication "
+"protocols disabled."
+msgstr "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert."
 
-#: mod/admin.php:1246
-#, php-format
-msgid "%s user blocked/unblocked"
-msgid_plural "%s users blocked/unblocked"
-msgstr[0] "%s Benutzer geblockt/freigegeben"
-msgstr[1] "%s Benutzer geblockt/freigegeben"
+#: mod/admin.php:1112
+msgid "Verify SSL"
+msgstr "SSL Überprüfen"
 
-#: mod/admin.php:1253
-#, php-format
-msgid "%s user deleted"
-msgid_plural "%s users deleted"
-msgstr[0] "%s Nutzer gelöscht"
-msgstr[1] "%s Nutzer gelöscht"
+#: mod/admin.php:1112
+msgid ""
+"If you wish, you can turn on strict certificate checking. This will mean you"
+" cannot connect (at all) to self-signed SSL sites."
+msgstr "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann."
 
-#: mod/admin.php:1300
-#, php-format
-msgid "User '%s' deleted"
-msgstr "Nutzer '%s' gelöscht"
+#: mod/admin.php:1113
+msgid "Proxy user"
+msgstr "Proxy Nutzer"
 
-#: mod/admin.php:1308
-#, php-format
-msgid "User '%s' unblocked"
-msgstr "Nutzer '%s' entsperrt"
+#: mod/admin.php:1114
+msgid "Proxy URL"
+msgstr "Proxy URL"
 
-#: mod/admin.php:1308
-#, php-format
-msgid "User '%s' blocked"
-msgstr "Nutzer '%s' gesperrt"
+#: mod/admin.php:1115
+msgid "Network timeout"
+msgstr "Netzwerk Wartezeit"
 
-#: mod/admin.php:1417 mod/admin.php:1443
-msgid "Register date"
-msgstr "Anmeldedatum"
+#: mod/admin.php:1115
+msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
+msgstr "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)."
 
-#: mod/admin.php:1417 mod/admin.php:1443
-msgid "Last login"
-msgstr "Letzte Anmeldung"
+#: mod/admin.php:1116
+msgid "Maximum Load Average"
+msgstr "Maximum Load Average"
 
-#: mod/admin.php:1417 mod/admin.php:1443
-msgid "Last item"
-msgstr "Letzter Beitrag"
+#: mod/admin.php:1116
+msgid ""
+"Maximum system load before delivery and poll processes are deferred - "
+"default 50."
+msgstr "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50"
 
-#: mod/admin.php:1426
-msgid "Add User"
-msgstr "Nutzer hinzufügen"
+#: mod/admin.php:1117
+msgid "Maximum Load Average (Frontend)"
+msgstr "Maximum Load Average (Frontend)"
 
-#: mod/admin.php:1427
-msgid "select all"
-msgstr "Alle auswählen"
+#: mod/admin.php:1117
+msgid "Maximum system load before the frontend quits service - default 50."
+msgstr "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50."
 
-#: mod/admin.php:1428
-msgid "User registrations waiting for confirm"
-msgstr "Neuanmeldungen, die auf Deine Bestätigung warten"
+#: mod/admin.php:1118
+msgid "Minimal Memory"
+msgstr "Minimaler Speicher"
 
-#: mod/admin.php:1429
-msgid "User waiting for permanent deletion"
-msgstr "Nutzer wartet auf permanente Löschung"
+#: mod/admin.php:1118
+msgid ""
+"Minimal free memory in MB for the poller. Needs access to /proc/meminfo - "
+"default 0 (deactivated)."
+msgstr "Minimal freier Speicher in MB für den Poller. Benötigt Zugriff auf /proc/meminfo - Standard 0 (Deaktiviert)."
 
-#: mod/admin.php:1430
-msgid "Request date"
-msgstr "Anfragedatum"
+#: mod/admin.php:1119
+msgid "Maximum table size for optimization"
+msgstr "Maximale Tabellengröße zur Optimierung"
 
-#: mod/admin.php:1431
-msgid "No registrations."
-msgstr "Keine Neuanmeldungen."
+#: mod/admin.php:1119
+msgid ""
+"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
+"Enter -1 to disable it."
+msgstr "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein."
 
-#: mod/admin.php:1432
-msgid "Note from the user"
-msgstr "Hinweis vom Nutzer"
+#: mod/admin.php:1120
+msgid "Minimum level of fragmentation"
+msgstr "Minimaler Fragmentationsgrad"
 
-#: mod/admin.php:1433 mod/notifications.php:176 mod/notifications.php:255
-msgid "Approve"
-msgstr "Genehmigen"
+#: mod/admin.php:1120
+msgid ""
+"Minimum fragmenation level to start the automatic optimization - default "
+"value is 30%."
+msgstr "Minimales Fragmentationsgrad von Datenbanktabellen um die automatische Optimierung einzuleiten - Standardwert ist 30%"
 
-#: mod/admin.php:1434
-msgid "Deny"
-msgstr "Verwehren"
+#: mod/admin.php:1122
+msgid "Periodical check of global contacts"
+msgstr "Regelmäßig globale Kontakte überprüfen"
 
-#: mod/admin.php:1438
-msgid "Site admin"
-msgstr "Seitenadministrator"
+#: mod/admin.php:1122
+msgid ""
+"If enabled, the global contacts are checked periodically for missing or "
+"outdated data and the vitality of the contacts and servers."
+msgstr "Wenn diese Option aktiviert ist, werden die globalen Kontakte regelmäßig auf fehlende oder veraltete Daten sowie auf Erreichbarkeit des Kontakts und des Servers überprüft."
 
-#: mod/admin.php:1439
-msgid "Account expired"
-msgstr "Account ist abgelaufen"
+#: mod/admin.php:1123
+msgid "Days between requery"
+msgstr "Tage zwischen erneuten Abfragen"
 
-#: mod/admin.php:1442
-msgid "New User"
-msgstr "Neuer Nutzer"
+#: mod/admin.php:1123
+msgid "Number of days after which a server is requeried for his contacts."
+msgstr "Legt das Abfrageintervall fest, nachdem ein Server erneut nach Kontakten abgefragt werden soll."
 
-#: mod/admin.php:1443
-msgid "Deleted since"
-msgstr "Gelöscht seit"
+#: mod/admin.php:1124
+msgid "Discover contacts from other servers"
+msgstr "Neue Kontakte auf anderen Servern entdecken"
 
-#: mod/admin.php:1448
+#: mod/admin.php:1124
 msgid ""
-"Selected users will be deleted!\\n\\nEverything these users had posted on "
-"this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist Du sicher?"
+"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 "Regelmäßig andere Server nach potentiellen Kontakten absuchen. Du kannst zwischen 'Nutzern', den tatsächlichen Nutzern des anderen Systems und 'globalen Kontakten', aktiven Kontakten die auf dem System bekannt sind, wählen. Der Fallback-Mechanismus ist für ältere Friendica und Redmatrix Server gedacht, bei denen globale Kontakte noch nicht verfügbar sind. Durch den Fallbackmodus entsteht auf deinem Server eine wesentlich höhere Last, empfohlen wird der Modus 'Nutzer, globale Kontakte'."
+
+#: mod/admin.php:1125
+msgid "Timeframe for fetching global contacts"
+msgstr "Zeitfenster für globale Kontakte"
 
-#: mod/admin.php:1449
+#: mod/admin.php:1125
 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 "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist Du sicher?"
+"When the discovery is activated, this value defines the timeframe for the "
+"activity of the global contacts that are fetched from other servers."
+msgstr "Wenn die Entdeckung neuer Kontakte aktiv ist, definiert dieses Zeitfenster den Zeitraum in dem globale Kontakte als aktiv gelten und von anderen Servern importiert werden."
 
-#: mod/admin.php:1459
-msgid "Name of the new user."
-msgstr "Name des neuen Nutzers"
+#: mod/admin.php:1126
+msgid "Search the local directory"
+msgstr "Lokales Verzeichnis durchsuchen"
 
-#: mod/admin.php:1460
-msgid "Nickname"
-msgstr "Spitzname"
+#: mod/admin.php:1126
+msgid ""
+"Search the local directory instead of the global directory. When searching "
+"locally, every search will be executed on the global directory in the "
+"background. This improves the search results when the search is repeated."
+msgstr "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird."
 
-#: mod/admin.php:1460
-msgid "Nickname of the new user."
-msgstr "Spitznamen für den neuen Nutzer"
+#: mod/admin.php:1128
+msgid "Publish server information"
+msgstr "Server Informationen veröffentlichen"
 
-#: mod/admin.php:1461
-msgid "Email address of the new user."
-msgstr "Email Adresse des neuen Nutzers"
+#: mod/admin.php:1128
+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."
+msgstr "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte <a href='http://the-federation.info/'>the-federation.info</a> aufrufen."
 
-#: mod/admin.php:1504
-#, php-format
-msgid "Plugin %s disabled."
-msgstr "Plugin %s deaktiviert."
+#: mod/admin.php:1130
+msgid "Suppress Tags"
+msgstr "Tags Unterdrücken"
 
-#: mod/admin.php:1508
-#, php-format
-msgid "Plugin %s enabled."
-msgstr "Plugin %s aktiviert."
+#: mod/admin.php:1130
+msgid "Suppress showing a list of hashtags at the end of the posting."
+msgstr "Unterdrückt die Anzeige von Tags am Ende eines Beitrags."
 
-#: mod/admin.php:1519 mod/admin.php:1767
-msgid "Disable"
-msgstr "Ausschalten"
+#: mod/admin.php:1131
+msgid "Path to item cache"
+msgstr "Pfad zum Eintrag Cache"
 
-#: mod/admin.php:1521 mod/admin.php:1769
-msgid "Enable"
-msgstr "Einschalten"
+#: mod/admin.php:1131
+msgid "The item caches buffers generated bbcode and external images."
+msgstr "Im Item-Cache werden externe Bilder und geparster BBCode zwischen gespeichert."
 
-#: mod/admin.php:1544 mod/admin.php:1814
-msgid "Toggle"
-msgstr "Umschalten"
+#: mod/admin.php:1132
+msgid "Cache duration in seconds"
+msgstr "Cache-Dauer in Sekunden"
 
-#: mod/admin.php:1552 mod/admin.php:1823
-msgid "Author: "
-msgstr "Autor:"
+#: mod/admin.php:1132
+msgid ""
+"How long should the cache files be hold? Default value is 86400 seconds (One"
+" day). To disable the item cache, set the value to -1."
+msgstr "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1."
 
-#: mod/admin.php:1553 mod/admin.php:1824
-msgid "Maintainer: "
-msgstr "Betreuer:"
+#: mod/admin.php:1133
+msgid "Maximum numbers of comments per post"
+msgstr "Maximale Anzahl von Kommentaren pro Beitrag"
 
-#: mod/admin.php:1608
-msgid "Reload active plugins"
-msgstr "Aktive Plugins neu laden"
+#: mod/admin.php:1133
+msgid "How much comments should be shown for each post? Default value is 100."
+msgstr "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100."
 
-#: mod/admin.php:1613
-#, php-format
+#: mod/admin.php:1134
+msgid "Temp path"
+msgstr "Temp Pfad"
+
+#: mod/admin.php:1134
 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 "Es sind derzeit keine Plugins auf diesem Knoten verfügbar. Du findest das offizielle Plugin-Repository unter %1$s und weitere eventuell interessante Plugins im offenen Plugins-Verzeichnis auf %2$s."
+"If you have a restricted system where the webserver can't access the system "
+"temp path, enter another path here."
+msgstr "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad."
 
-#: mod/admin.php:1727
-msgid "No themes found."
-msgstr "Keine Themen gefunden."
+#: mod/admin.php:1135
+msgid "Base path to installation"
+msgstr "Basis-Pfad zur Installation"
 
-#: mod/admin.php:1805
-msgid "Screenshot"
-msgstr "Bildschirmfoto"
+#: mod/admin.php:1135
+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 "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist."
 
-#: mod/admin.php:1865
-msgid "Reload active themes"
-msgstr "Aktives Theme neu laden"
+#: mod/admin.php:1136
+msgid "Disable picture proxy"
+msgstr "Bilder Proxy deaktivieren"
 
-#: mod/admin.php:1870
-#, php-format
-msgid "No themes found on the system. They should be paced in %1$s"
-msgstr "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1$s patziert werden."
+#: mod/admin.php:1136
+msgid ""
+"The picture proxy increases performance and privacy. It shouldn't be used on"
+" systems with very low bandwith."
+msgstr "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen."
 
-#: mod/admin.php:1871
-msgid "[Experimental]"
-msgstr "[Experimentell]"
+#: mod/admin.php:1137
+msgid "Only search in tags"
+msgstr "Nur in Tags suchen"
 
-#: mod/admin.php:1872
-msgid "[Unsupported]"
-msgstr "[Nicht unterstützt]"
+#: mod/admin.php:1137
+msgid "On large systems the text search can slow down the system extremely."
+msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen."
 
-#: mod/admin.php:1896
-msgid "Log settings updated."
-msgstr "Protokolleinstellungen aktualisiert."
+#: mod/admin.php:1139
+msgid "New base url"
+msgstr "Neue Basis-URL"
 
-#: mod/admin.php:1928
-msgid "PHP log currently enabled."
-msgstr "PHP Protokollierung ist derzeit aktiviert."
+#: mod/admin.php:1139
+msgid ""
+"Change base url for this server. Sends relocate message to all DFRN contacts"
+" of all users."
+msgstr "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen."
 
-#: mod/admin.php:1930
-msgid "PHP log currently disabled."
-msgstr "PHP Protokollierung ist derzeit nicht aktiviert."
+#: mod/admin.php:1141
+msgid "RINO Encryption"
+msgstr "RINO Verschlüsselung"
 
-#: mod/admin.php:1939
-msgid "Clear"
-msgstr "löschen"
+#: mod/admin.php:1141
+msgid "Encryption layer between nodes."
+msgstr "Verschlüsselung zwischen Friendica Instanzen"
 
-#: mod/admin.php:1944
-msgid "Enable Debugging"
-msgstr "Protokoll führen"
+#: mod/admin.php:1143
+msgid "Maximum number of parallel workers"
+msgstr "Maximale Anzahl parallel laufender Worker"
 
-#: mod/admin.php:1945
-msgid "Log file"
-msgstr "Protokolldatei"
+#: mod/admin.php:1143
+msgid ""
+"On shared hosters set this to 2. On larger systems, values of 10 are great. "
+"Default value is 4."
+msgstr "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4."
+
+#: mod/admin.php:1144
+msgid "Don't use 'proc_open' with the worker"
+msgstr "'proc_open' nicht mit den Workern verwenden"
 
-#: mod/admin.php:1945
+#: mod/admin.php:1144
 msgid ""
-"Must be writable by web server. Relative to your Friendica top-level "
-"directory."
-msgstr "Webserver muss Schreibrechte besitzen. Abhängig vom Friendica-Installationsverzeichnis."
+"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 "Aktiviere diese Option, wenn dein System die Verwendung von 'proc_open' verhindert. Dies könnte auf Shared Hostern der Fall sein. Wenn du diese Option aktivierst, solltest du die Frequenz der poller Aufrufe in deiner crontab erhöhen."
 
-#: mod/admin.php:1946
-msgid "Log level"
-msgstr "Protokoll-Level"
+#: mod/admin.php:1145
+msgid "Enable fastlane"
+msgstr "Aktiviere Fastlane"
 
-#: mod/admin.php:1949
-msgid "PHP logging"
-msgstr "PHP Protokollieren"
+#: mod/admin.php:1145
+msgid ""
+"When enabed, the fastlane mechanism starts an additional worker if processes"
+" with higher priority are blocked by processes of lower priority."
+msgstr "Wenn aktiviert, wird der Fastlane-Mechanismus einen weiteren Worker-Prozeß starten wenn Prozesse mit höherer Priorität von Prozessen mit niedrigerer Priorität blockiert werden."
 
-#: mod/admin.php:1950
+#: mod/admin.php:1146
+msgid "Enable frontend worker"
+msgstr "Aktiviere den Frontend Worker"
+
+#: mod/admin.php:1146
 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 "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest,  Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie."
+"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 yourdomain.tld/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. The worker background process needs to be activated for "
+"this."
+msgstr "Ist diese Option aktiv, wird der Worker Prozess durch Aktionen am Frontend gestartet (z.B. wenn Nachrichten zugestellt werden). Auf kleineren Seiten sollte yourdomain.tld/worker regelmäßig, beispielsweise durch einen externen Cron Anbieter, aufgerufen werden. Du solltest dies Option nur dann aktivieren, wenn du keinen Cron Job auf deinem eigenen Server starten kannst. Damit diese Option einen Effekt hat, muss der Worker Prozess aktiviert sein."
+
+#: mod/admin.php:1176
+msgid "Update has been marked successful"
+msgstr "Update wurde als erfolgreich markiert"
 
-#: mod/admin.php:2078
+#: mod/admin.php:1184
 #, php-format
-msgid "Lock feature %s"
-msgstr "Feature festlegen: %s"
+msgid "Database structure update %s was successfully applied."
+msgstr "Das Update %s der Struktur der Datenbank wurde erfolgreich angewandt."
 
-#: mod/admin.php:2086
-msgid "Manage Additional Features"
-msgstr "Zusätzliche Features Verwalten"
+#: mod/admin.php:1187
+#, php-format
+msgid "Executing of database structure update %s failed with error: %s"
+msgstr "Das Update %s der Struktur der Datenbank schlug mit folgender Fehlermeldung fehl: %s"
 
-#: mod/viewcontacts.php:75
-msgid "No contacts."
-msgstr "Keine Kontakte."
+#: mod/admin.php:1201
+#, php-format
+msgid "Executing %s failed with error: %s"
+msgstr "Die Ausführung von %s schlug fehl. Fehlermeldung: %s"
 
-#: mod/network.php:190 mod/search.php:25
-msgid "Remove term"
-msgstr "Begriff entfernen"
+#: mod/admin.php:1204
+#, php-format
+msgid "Update %s was successfully applied."
+msgstr "Update %s war erfolgreich."
 
-#: mod/network.php:397
+#: mod/admin.php:1207
 #, 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] "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann."
-msgstr[1] "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können."
+msgid "Update %s did not return a status. Unknown if it succeeded."
+msgstr "Update %s hat keinen Status zurückgegeben. Unbekannter Status."
 
-#: mod/network.php:400
-msgid "Messages in this group won't be send to these receivers."
-msgstr "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden."
+#: mod/admin.php:1210
+#, php-format
+msgid "There was no additional update function %s that needed to be called."
+msgstr "Es gab keine weitere Update-Funktion, die von %s ausgeführt werden musste."
 
-#: mod/network.php:528
-msgid "Private messages to this person are at risk of public disclosure."
-msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."
+#: mod/admin.php:1230
+msgid "No failed updates."
+msgstr "Keine fehlgeschlagenen Updates."
 
-#: mod/network.php:533
-msgid "Invalid contact."
-msgstr "Ungültiger Kontakt."
+#: mod/admin.php:1231
+msgid "Check database structure"
+msgstr "Datenbank Struktur überprüfen"
 
-#: mod/network.php:827
-msgid "Commented Order"
-msgstr "Neueste Kommentare"
+#: mod/admin.php:1236
+msgid "Failed Updates"
+msgstr "Fehlgeschlagene Updates"
 
-#: mod/network.php:830
-msgid "Sort by Comment Date"
-msgstr "Nach Kommentardatum sortieren"
+#: mod/admin.php:1237
+msgid ""
+"This does not include updates prior to 1139, which did not return a status."
+msgstr "Ohne Updates vor 1139, da diese keinen Status zurückgegeben haben."
 
-#: mod/network.php:835
-msgid "Posted Order"
-msgstr "Neueste Beiträge"
+#: mod/admin.php:1238
+msgid "Mark success (if update was manually applied)"
+msgstr "Als erfolgreich markieren (falls das Update manuell installiert wurde)"
 
-#: mod/network.php:838
-msgid "Sort by Post Date"
-msgstr "Nach Beitragsdatum sortieren"
+#: mod/admin.php:1239
+msgid "Attempt to execute this update step automatically"
+msgstr "Versuchen, diesen Schritt automatisch auszuführen"
 
-#: mod/network.php:849
-msgid "Posts that mention or involve you"
-msgstr "Beiträge, in denen es um Dich geht"
+#: mod/admin.php:1273
+#, 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 "\nHallo %1$s,\n\nauf %2$s wurde ein Account für Dich angelegt."
 
-#: mod/network.php:857
-msgid "New"
-msgstr "Neue"
+#: mod/admin.php:1276
+#, 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 "\nNachfolgend die Anmelde-Details:\n\tAdresse der Seite:\t%1$s\n\tBenutzername:\t%2$s\n\tPasswort:\t%3$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nNun viel Spaß, gute Begegnungen und willkommen auf %4$s."
 
-#: mod/network.php:860
-msgid "Activity Stream - by date"
-msgstr "Aktivitäten-Stream - nach Datum"
+#: mod/admin.php:1320
+#, php-format
+msgid "%s user blocked/unblocked"
+msgid_plural "%s users blocked/unblocked"
+msgstr[0] "%s Benutzer geblockt/freigegeben"
+msgstr[1] "%s Benutzer geblockt/freigegeben"
 
-#: mod/network.php:868
-msgid "Shared Links"
-msgstr "Geteilte Links"
+#: mod/admin.php:1327
+#, php-format
+msgid "%s user deleted"
+msgid_plural "%s users deleted"
+msgstr[0] "%s Nutzer gelöscht"
+msgstr[1] "%s Nutzer gelöscht"
 
-#: mod/network.php:871
-msgid "Interesting Links"
-msgstr "Interessante Links"
+#: mod/admin.php:1374
+#, php-format
+msgid "User '%s' deleted"
+msgstr "Nutzer '%s' gelöscht"
 
-#: mod/network.php:879
-msgid "Starred"
-msgstr "Markierte"
+#: mod/admin.php:1382
+#, php-format
+msgid "User '%s' unblocked"
+msgstr "Nutzer '%s' entsperrt"
 
-#: mod/network.php:882
-msgid "Favourite Posts"
-msgstr "Favorisierte Beiträge"
+#: mod/admin.php:1382
+#, php-format
+msgid "User '%s' blocked"
+msgstr "Nutzer '%s' gesperrt"
 
-#: mod/search.php:100
-msgid "Only logged in users are permitted to perform a search."
-msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet."
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Register date"
+msgstr "Anmeldedatum"
 
-#: mod/search.php:124
-msgid "Too Many Requests"
-msgstr "Zu viele Abfragen"
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Last login"
+msgstr "Letzte Anmeldung"
 
-#: mod/search.php:125
-msgid "Only one search per minute is permitted for not logged in users."
-msgstr "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet."
+#: mod/admin.php:1490 mod/admin.php:1516
+msgid "Last item"
+msgstr "Letzter Beitrag"
 
-#: mod/search.php:230
-#, php-format
-msgid "Items tagged with: %s"
-msgstr "Beiträge die mit %s getaggt sind"
+#: mod/admin.php:1499
+msgid "Add User"
+msgstr "Nutzer hinzufügen"
 
-#: mod/notifications.php:35
-msgid "Invalid request identifier."
-msgstr "Invalid request identifier."
+#: mod/admin.php:1500
+msgid "select all"
+msgstr "Alle auswählen"
 
-#: mod/notifications.php:44 mod/notifications.php:180
-#: mod/notifications.php:258
-msgid "Discard"
-msgstr "Verwerfen"
+#: mod/admin.php:1501
+msgid "User registrations waiting for confirm"
+msgstr "Neuanmeldungen, die auf Deine Bestätigung warten"
 
-#: mod/notifications.php:105
-msgid "Network Notifications"
-msgstr "Netzwerk Benachrichtigungen"
+#: mod/admin.php:1502
+msgid "User waiting for permanent deletion"
+msgstr "Nutzer wartet auf permanente Löschung"
 
-#: mod/notifications.php:117
-msgid "Personal Notifications"
-msgstr "Persönliche Benachrichtigungen"
+#: mod/admin.php:1503
+msgid "Request date"
+msgstr "Anfragedatum"
 
-#: mod/notifications.php:123
-msgid "Home Notifications"
-msgstr "Pinnwand Benachrichtigungen"
+#: mod/admin.php:1504
+msgid "No registrations."
+msgstr "Keine Neuanmeldungen."
 
-#: mod/notifications.php:152
-msgid "Show Ignored Requests"
-msgstr "Zeige ignorierte Anfragen"
+#: mod/admin.php:1505
+msgid "Note from the user"
+msgstr "Hinweis vom Nutzer"
 
-#: mod/notifications.php:152
-msgid "Hide Ignored Requests"
-msgstr "Verberge ignorierte Anfragen"
+#: mod/admin.php:1507
+msgid "Deny"
+msgstr "Verwehren"
 
-#: mod/notifications.php:164 mod/notifications.php:228
-msgid "Notification type: "
-msgstr "Benachrichtigungstyp: "
+#: mod/admin.php:1511
+msgid "Site admin"
+msgstr "Seitenadministrator"
 
-#: mod/notifications.php:167
-#, php-format
-msgid "suggested by %s"
-msgstr "vorgeschlagen von %s"
+#: mod/admin.php:1512
+msgid "Account expired"
+msgstr "Account ist abgelaufen"
 
-#: mod/notifications.php:173 mod/notifications.php:246
-msgid "Post a new friend activity"
-msgstr "Neue-Kontakt Nachricht senden"
+#: mod/admin.php:1515
+msgid "New User"
+msgstr "Neuer Nutzer"
 
-#: mod/notifications.php:173 mod/notifications.php:246
-msgid "if applicable"
-msgstr "falls anwendbar"
+#: mod/admin.php:1516
+msgid "Deleted since"
+msgstr "Gelöscht seit"
 
-#: mod/notifications.php:195
-msgid "Claims to be known to you: "
-msgstr "Behauptet Dich zu kennen: "
+#: mod/admin.php:1521
+msgid ""
+"Selected users will be deleted!\\n\\nEverything these users had posted on "
+"this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist Du sicher?"
 
-#: mod/notifications.php:196
-msgid "yes"
-msgstr "ja"
+#: mod/admin.php:1522
+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 "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist Du sicher?"
 
-#: mod/notifications.php:196
-msgid "no"
-msgstr "nein"
+#: mod/admin.php:1532
+msgid "Name of the new user."
+msgstr "Name des neuen Nutzers"
 
-#: mod/notifications.php:197 mod/notifications.php:202
-msgid "Shall your connection be bidirectional or not?"
-msgstr "Soll die Verbindung beidseitig sein oder nicht?"
+#: mod/admin.php:1533
+msgid "Nickname"
+msgstr "Spitzname"
 
-#: mod/notifications.php:198 mod/notifications.php:203
-#, 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 "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."
+#: mod/admin.php:1533
+msgid "Nickname of the new user."
+msgstr "Spitznamen für den neuen Nutzer"
 
-#: mod/notifications.php:199
-#, 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 "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
+#: mod/admin.php:1534
+msgid "Email address of the new user."
+msgstr "Email Adresse des neuen Nutzers"
 
-#: mod/notifications.php:204
+#: mod/admin.php:1577
 #, 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 "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."
+msgid "Plugin %s disabled."
+msgstr "Plugin %s deaktiviert."
 
-#: mod/notifications.php:215
-msgid "Friend"
-msgstr "Kontakt"
+#: mod/admin.php:1581
+#, php-format
+msgid "Plugin %s enabled."
+msgstr "Plugin %s aktiviert."
 
-#: mod/notifications.php:216
-msgid "Sharer"
-msgstr "Teilenden"
+#: mod/admin.php:1592 mod/admin.php:1844
+msgid "Disable"
+msgstr "Ausschalten"
 
-#: mod/notifications.php:216
-msgid "Subscriber"
-msgstr "Abonnent"
+#: mod/admin.php:1594 mod/admin.php:1846
+msgid "Enable"
+msgstr "Einschalten"
 
-#: mod/notifications.php:266
-msgid "No introductions."
-msgstr "Keine Kontaktanfragen."
+#: mod/admin.php:1617 mod/admin.php:1893
+msgid "Toggle"
+msgstr "Umschalten"
 
-#: mod/notifications.php:307
-msgid "Show unread"
-msgstr "Ungelesene anzeigen"
+#: mod/admin.php:1625 mod/admin.php:1902
+msgid "Author: "
+msgstr "Autor:"
 
-#: mod/notifications.php:307
-msgid "Show all"
-msgstr "Alle anzeigen"
+#: mod/admin.php:1626 mod/admin.php:1903
+msgid "Maintainer: "
+msgstr "Betreuer:"
 
-#: mod/notifications.php:313
+#: mod/admin.php:1681
+msgid "Reload active plugins"
+msgstr "Aktive Plugins neu laden"
+
+#: mod/admin.php:1686
 #, php-format
-msgid "No more %s notifications."
-msgstr "Keine weiteren %s Benachrichtigungen"
+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 "Es sind derzeit keine Plugins auf diesem Knoten verfügbar. Du findest das offizielle Plugin-Repository unter %1$s und weitere eventuell interessante Plugins im offenen Plugins-Verzeichnis auf %2$s."
 
-#: object/Item.php:385
-msgid "via"
-msgstr "via"
+#: mod/admin.php:1805
+msgid "No themes found."
+msgstr "Keine Themen gefunden."
 
-#: view/theme/quattro/config.php:70
-msgid "Alignment"
-msgstr "Ausrichtung"
+#: mod/admin.php:1884
+msgid "Screenshot"
+msgstr "Bildschirmfoto"
 
-#: view/theme/quattro/config.php:70
-msgid "Left"
-msgstr "Links"
+#: mod/admin.php:1944
+msgid "Reload active themes"
+msgstr "Aktives Theme neu laden"
 
-#: view/theme/quattro/config.php:70
-msgid "Center"
-msgstr "Mitte"
+#: mod/admin.php:1949
+#, php-format
+msgid "No themes found on the system. They should be paced in %1$s"
+msgstr "Es wurden keine Themes auf dem System gefunden. Diese sollten in %1$s patziert werden."
 
-#: view/theme/quattro/config.php:71 view/theme/clean/config.php:108
-msgid "Color scheme"
-msgstr "Farbschema"
+#: mod/admin.php:1950
+msgid "[Experimental]"
+msgstr "[Experimentell]"
 
-#: view/theme/quattro/config.php:72
-msgid "Posts font size"
-msgstr "Schriftgröße in Beiträgen"
+#: mod/admin.php:1951
+msgid "[Unsupported]"
+msgstr "[Nicht unterstützt]"
 
-#: view/theme/quattro/config.php:73
-msgid "Textareas font size"
-msgstr "Schriftgröße in Eingabefeldern"
+#: mod/admin.php:1975
+msgid "Log settings updated."
+msgstr "Protokolleinstellungen aktualisiert."
 
-#: view/theme/vier/config.php:69
-msgid "Comma separated list of helper forums"
-msgstr "Komma-Separierte Liste der Helfer-Foren"
+#: mod/admin.php:2007
+msgid "PHP log currently enabled."
+msgstr "PHP Protokollierung ist derzeit aktiviert."
 
-#: view/theme/vier/config.php:115
-msgid "Set style"
-msgstr "Stil auswählen"
+#: mod/admin.php:2009
+msgid "PHP log currently disabled."
+msgstr "PHP Protokollierung ist derzeit nicht aktiviert."
 
-#: view/theme/vier/config.php:116
-msgid "Community Pages"
-msgstr "Foren"
+#: mod/admin.php:2018
+msgid "Clear"
+msgstr "löschen"
 
-#: view/theme/vier/config.php:117 view/theme/vier/theme.php:146
-msgid "Community Profiles"
-msgstr "Community-Profile"
+#: mod/admin.php:2023
+msgid "Enable Debugging"
+msgstr "Protokoll führen"
 
-#: view/theme/vier/config.php:118
-msgid "Help or @NewHere ?"
-msgstr "Hilfe oder @NewHere"
+#: mod/admin.php:2024
+msgid "Log file"
+msgstr "Protokolldatei"
 
-#: view/theme/vier/config.php:119 view/theme/vier/theme.php:385
-msgid "Connect Services"
-msgstr "Verbinde Dienste"
+#: mod/admin.php:2024
+msgid ""
+"Must be writable by web server. Relative to your Friendica top-level "
+"directory."
+msgstr "Webserver muss Schreibrechte besitzen. Abhängig vom Friendica-Installationsverzeichnis."
 
-#: view/theme/vier/config.php:120 view/theme/vier/theme.php:194
-msgid "Find Friends"
-msgstr "Kontakte finden"
+#: mod/admin.php:2025
+msgid "Log level"
+msgstr "Protokoll-Level"
 
-#: view/theme/vier/config.php:121 view/theme/vier/theme.php:176
-msgid "Last users"
-msgstr "Letzte Nutzer"
+#: mod/admin.php:2028
+msgid "PHP logging"
+msgstr "PHP Protokollieren"
 
-#: view/theme/vier/theme.php:195
-msgid "Local Directory"
-msgstr "Lokales Verzeichnis"
+#: mod/admin.php:2029
+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 "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest,  Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie."
 
-#: view/theme/vier/theme.php:286
-msgid "Quick Start"
-msgstr "Schnell-Start"
+#: mod/admin.php:2160
+#, php-format
+msgid "Lock feature %s"
+msgstr "Feature festlegen: %s"
+
+#: mod/admin.php:2168
+msgid "Manage Additional Features"
+msgstr "Zusätzliche Features Verwalten"
+
+#: object/Item.php:359
+msgid "via"
+msgstr "via"
 
 #: view/theme/duepuntozero/config.php:44
 msgid "greenzero"
@@ -8808,64 +8770,45 @@ msgstr "slackr"
 msgid "Variations"
 msgstr "Variationen"
 
-#: view/theme/clean/config.php:61
-msgid "Midnight"
-msgstr "Mitternacht"
-
-#: view/theme/clean/config.php:62
-msgid "Zenburn"
-msgstr "Zenburn"
-
-#: view/theme/clean/config.php:63
-msgid "Bootstrap"
-msgstr "Bootstrap"
-
-#: view/theme/clean/config.php:64
-msgid "Shades of Pink"
-msgstr "Shades of Pink"
-
-#: view/theme/clean/config.php:65
-msgid "Lime and Orange"
-msgstr "Lime and Orange"
+#: view/theme/frio/config.php:47
+msgid "Default"
+msgstr "Standard"
 
-#: view/theme/clean/config.php:66
-msgid "GeoCities Retro"
-msgstr "GeoCities Retro"
+#: view/theme/frio/config.php:59
+msgid "Note: "
+msgstr "Hinweis:"
 
-#: view/theme/clean/config.php:92
-msgid "Background Image"
-msgstr "Hintergrundbild"
+#: view/theme/frio/config.php:59
+msgid "Check image permissions if all users are allowed to visit the image"
+msgstr "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"
 
-#: view/theme/clean/config.php:94
-msgid ""
-"The URL to a picture (e.g. from your photo album) that should be used as "
-"background image."
-msgstr "Die URL zum Bild (z.B. aus deinem Foto Album), das als Hintergrundbild verwendet werden soll."
+#: view/theme/frio/config.php:67
+msgid "Select scheme"
+msgstr "Schema auswählen"
 
-#: view/theme/clean/config.php:99
-msgid "Background Color"
-msgstr "Hintergrundfarbe"
+#: view/theme/frio/config.php:68
+msgid "Navigation bar background color"
+msgstr "Hintergrundfarbe der Navigationsleiste"
 
-#: view/theme/clean/config.php:101
-msgid "HEX value for the background color. Don't include the #"
-msgstr "HEX Wert der Hintergrundfarbe, ohne das #"
+#: view/theme/frio/config.php:69
+msgid "Navigation bar icon color "
+msgstr "Icon Farbe in der Navigationsleiste"
 
-#: view/theme/clean/config.php:115
-msgid "font size"
-msgstr "Zeichengröße"
+#: view/theme/frio/config.php:70
+msgid "Link color"
+msgstr "Linkfarbe"
 
-#: view/theme/clean/config.php:117
-msgid "base font size for your interface"
-msgstr "Basiszeichengröße für das Interface"
+#: view/theme/frio/config.php:71
+msgid "Set the background color"
+msgstr "Hintergrundfarbe festlegen"
 
-#: view/theme/clean/config.php:122
-msgid "Display Accesskeys"
-msgstr "Accesskeys anzeigen"
+#: view/theme/frio/config.php:72
+msgid "Content background transparency"
+msgstr "Transparanz des Hintergrunds von Beiträgem"
 
-#: view/theme/clean/config.php:124
-msgid ""
-"Diaplay the access keys assigned to some menu element in the web interface."
-msgstr "Einige Menüelemente sind über Accesskeys aufrufbar. Sollen diese angezeigt werden?"
+#: view/theme/frio/config.php:73
+msgid "Set the background image"
+msgstr "Hintergrundbild festlegen"
 
 #: view/theme/frio/php/Image.php:23
 msgid "Repeat the image"
@@ -8899,103 +8842,127 @@ msgstr "Größe anpassen - Optimale Größe"
 msgid "Resize to best fit and retain aspect ratio."
 msgstr "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten"
 
-#: view/theme/frio/config.php:47
-msgid "Default"
-msgstr "Standard"
+#: view/theme/frio/theme.php:226
+msgid "Guest"
+msgstr "Gast"
 
-#: view/theme/frio/config.php:59
-msgid "Note: "
-msgstr "Hinweis:"
+#: view/theme/frio/theme.php:232
+msgid "Visitor"
+msgstr "Besucher"
 
-#: view/theme/frio/config.php:59
-msgid "Check image permissions if all users are allowed to visit the image"
-msgstr "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"
+#: view/theme/quattro/config.php:70
+msgid "Alignment"
+msgstr "Ausrichtung"
 
-#: view/theme/frio/config.php:67
-msgid "Select scheme"
-msgstr "Schema auswählen"
+#: view/theme/quattro/config.php:70
+msgid "Left"
+msgstr "Links"
 
-#: view/theme/frio/config.php:68
-msgid "Navigation bar background color"
-msgstr "Hintergrundfarbe der Navigationsleiste"
+#: view/theme/quattro/config.php:70
+msgid "Center"
+msgstr "Mitte"
 
-#: view/theme/frio/config.php:69
-msgid "Navigation bar icon color "
-msgstr "Icon Farbe in der Navigationsleiste"
+#: view/theme/quattro/config.php:71
+msgid "Color scheme"
+msgstr "Farbschema"
 
-#: view/theme/frio/config.php:70
-msgid "Link color"
-msgstr "Linkfarbe"
+#: view/theme/quattro/config.php:72
+msgid "Posts font size"
+msgstr "Schriftgröße in Beiträgen"
 
-#: view/theme/frio/config.php:71
-msgid "Set the background color"
-msgstr "Hintergrundfarbe festlegen"
+#: view/theme/quattro/config.php:73
+msgid "Textareas font size"
+msgstr "Schriftgröße in Eingabefeldern"
 
-#: view/theme/frio/config.php:72
-msgid "Content background transparency"
-msgstr "Transparanz des Hintergrunds von Beiträgem"
+#: view/theme/vier/config.php:69
+msgid "Comma separated list of helper forums"
+msgstr "Komma-Separierte Liste der Helfer-Foren"
 
-#: view/theme/frio/config.php:73
-msgid "Set the background image"
-msgstr "Hintergrundbild festlegen"
+#: view/theme/vier/config.php:115
+msgid "Set style"
+msgstr "Stil auswählen"
 
-#: view/theme/frio/theme.php:226
-msgid "Guest"
-msgstr "Gast"
+#: view/theme/vier/config.php:116
+msgid "Community Pages"
+msgstr "Foren"
 
-#: view/theme/frio/theme.php:232
-msgid "Visitor"
-msgstr "Besucher"
+#: view/theme/vier/config.php:117 view/theme/vier/theme.php:149
+msgid "Community Profiles"
+msgstr "Community-Profile"
+
+#: view/theme/vier/config.php:118
+msgid "Help or @NewHere ?"
+msgstr "Hilfe oder @NewHere"
+
+#: view/theme/vier/config.php:119 view/theme/vier/theme.php:390
+msgid "Connect Services"
+msgstr "Verbinde Dienste"
+
+#: view/theme/vier/config.php:120 view/theme/vier/theme.php:197
+msgid "Find Friends"
+msgstr "Kontakte finden"
+
+#: view/theme/vier/config.php:121 view/theme/vier/theme.php:179
+msgid "Last users"
+msgstr "Letzte Nutzer"
+
+#: view/theme/vier/theme.php:198
+msgid "Local Directory"
+msgstr "Lokales Verzeichnis"
+
+#: view/theme/vier/theme.php:290
+msgid "Quick Start"
+msgstr "Schnell-Start"
 
-#: index.php:457
+#: index.php:433
 msgid "toggle mobile"
 msgstr "auf/von Mobile Ansicht wechseln"
 
-#: boot.php:970
+#: boot.php:999
 msgid "Delete this item?"
 msgstr "Diesen Beitrag löschen?"
 
-#: boot.php:972
+#: boot.php:1001
 msgid "show fewer"
 msgstr "weniger anzeigen"
 
-#: boot.php:1696
+#: boot.php:1729
 #, php-format
 msgid "Update %s failed. See error logs."
 msgstr "Update %s fehlgeschlagen. Bitte Fehlerprotokoll überprüfen."
 
-#: boot.php:1808
+#: boot.php:1843
 msgid "Create a New Account"
 msgstr "Neues Konto erstellen"
 
-#: boot.php:1837
+#: boot.php:1871
 msgid "Password: "
 msgstr "Passwort: "
 
-#: boot.php:1838
+#: boot.php:1872
 msgid "Remember me"
 msgstr "Anmeldedaten merken"
 
-#: boot.php:1841
+#: boot.php:1875
 msgid "Or login using OpenID: "
 msgstr "Oder melde Dich mit Deiner OpenID an: "
 
-#: boot.php:1847
+#: boot.php:1881
 msgid "Forgot your password?"
 msgstr "Passwort vergessen?"
 
-#: boot.php:1850
+#: boot.php:1884
 msgid "Website Terms of Service"
 msgstr "Website Nutzungsbedingungen"
 
-#: boot.php:1851
+#: boot.php:1885
 msgid "terms of service"
 msgstr "Nutzungsbedingungen"
 
-#: boot.php:1853
+#: boot.php:1887
 msgid "Website Privacy Policy"
 msgstr "Website Datenschutzerklärung"
 
-#: boot.php:1854
+#: boot.php:1888
 msgid "privacy policy"
 msgstr "Datenschutzerklärung"
index e88b6ff1e412972b07673e571be6556a0b7cd004..31e283643f27ee9ae88da7f98ebc9c769694426b 100644 (file)
@@ -5,67 +5,6 @@ function string_plural_select_de($n){
        return ($n != 1);;
 }}
 ;
-$a->strings["Male"] = "Männlich";
-$a->strings["Female"] = "Weiblich";
-$a->strings["Currently Male"] = "Momentan männlich";
-$a->strings["Currently Female"] = "Momentan weiblich";
-$a->strings["Mostly Male"] = "Hauptsächlich männlich";
-$a->strings["Mostly Female"] = "Hauptsächlich weiblich";
-$a->strings["Transgender"] = "Transgender";
-$a->strings["Intersex"] = "Intersex";
-$a->strings["Transsexual"] = "Transsexuell";
-$a->strings["Hermaphrodite"] = "Hermaphrodit";
-$a->strings["Neuter"] = "Neuter";
-$a->strings["Non-specific"] = "Nicht spezifiziert";
-$a->strings["Other"] = "Andere";
-$a->strings["Undecided"] = array(
-       0 => "Unentschieden",
-       1 => "Unentschieden",
-);
-$a->strings["Males"] = "Männer";
-$a->strings["Females"] = "Frauen";
-$a->strings["Gay"] = "Schwul";
-$a->strings["Lesbian"] = "Lesbisch";
-$a->strings["No Preference"] = "Keine Vorlieben";
-$a->strings["Bisexual"] = "Bisexuell";
-$a->strings["Autosexual"] = "Autosexual";
-$a->strings["Abstinent"] = "Abstinent";
-$a->strings["Virgin"] = "Jungfrauen";
-$a->strings["Deviant"] = "Deviant";
-$a->strings["Fetish"] = "Fetish";
-$a->strings["Oodles"] = "Oodles";
-$a->strings["Nonsexual"] = "Nonsexual";
-$a->strings["Single"] = "Single";
-$a->strings["Lonely"] = "Einsam";
-$a->strings["Available"] = "Verfügbar";
-$a->strings["Unavailable"] = "Nicht verfügbar";
-$a->strings["Has crush"] = "verknallt";
-$a->strings["Infatuated"] = "verliebt";
-$a->strings["Dating"] = "Dating";
-$a->strings["Unfaithful"] = "Untreu";
-$a->strings["Sex Addict"] = "Sexbesessen";
-$a->strings["Friends"] = "Kontakte";
-$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen";
-$a->strings["Casual"] = "Casual";
-$a->strings["Engaged"] = "Verlobt";
-$a->strings["Married"] = "Verheiratet";
-$a->strings["Imaginarily married"] = "imaginär verheiratet";
-$a->strings["Partners"] = "Partner";
-$a->strings["Cohabiting"] = "zusammenlebend";
-$a->strings["Common law"] = "wilde Ehe";
-$a->strings["Happy"] = "Glücklich";
-$a->strings["Not looking"] = "Nicht auf der Suche";
-$a->strings["Swinger"] = "Swinger";
-$a->strings["Betrayed"] = "Betrogen";
-$a->strings["Separated"] = "Getrennt";
-$a->strings["Unstable"] = "Unstabil";
-$a->strings["Divorced"] = "Geschieden";
-$a->strings["Imaginarily divorced"] = "imaginär geschieden";
-$a->strings["Widowed"] = "Verwitwet";
-$a->strings["Uncertain"] = "Unsicher";
-$a->strings["It's complicated"] = "Ist kompliziert";
-$a->strings["Don't care"] = "Ist mir nicht wichtig";
-$a->strings["Ask me"] = "Frag mich";
 $a->strings["Forums"] = "Foren";
 $a->strings["External link to forum"] = "Externer Link zum Forum";
 $a->strings["show more"] = "mehr anzeigen";
@@ -86,108 +25,16 @@ $a->strings["Friend Suggestion"] = "Kontaktvorschlag";
 $a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage";
 $a->strings["New Follower"] = "Neuer Bewunderer";
 $a->strings["Wall Photos"] = "Pinnwand-Bilder";
-$a->strings["Logged out."] = "Abgemeldet.";
-$a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
-$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast.";
-$a->strings["The error message was:"] = "Die Fehlermeldung lautete:";
-$a->strings["Image/photo"] = "Bild/Foto";
-$a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s";
-$a->strings["$1 wrote:"] = "$1 hat geschrieben:";
-$a->strings["Encrypted content"] = "Verschlüsselter Inhalt";
-$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll";
-$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll";
-$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln.";
-$a->strings["Friendica Notification"] = "Friendica-Benachrichtigung";
-$a->strings["Thank You,"] = "Danke,";
-$a->strings["%s Administrator"] = "der Administrator von %s";
-$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, %2\$s Administrator";
+$a->strings["(no subject)"] = "(kein Betreff)";
 $a->strings["noreply"] = "noreply";
-$a->strings["%s <!item_type!>"] = "%s <!item_type!>";
-$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica-Meldung] Neue Nachricht erhalten von %s";
-$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s hat Dir eine neue private Nachricht auf %2\$s geschickt.";
-$a->strings["%1\$s sent you %2\$s."] = "%1\$s schickte Dir %2\$s.";
-$a->strings["a private message"] = "eine private Nachricht";
-$a->strings["Please visit %s to view and/or reply to your private messages."] = "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten.";
-$a->strings["%1\$s commented on [url=%2\$s]a %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]a %3\$s[/url]";
-$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]%3\$ss %4\$s[/url]";
-$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]Deinen %3\$s[/url]";
-$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica-Meldung] Kommentar zum Beitrag #%1\$d von %2\$s";
-$a->strings["%s commented on an item/conversation you have been following."] = "%s hat einen Beitrag kommentiert, dem Du folgst.";
-$a->strings["Please visit %s to view and/or reply to the conversation."] = "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.";
-$a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben";
-$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s schrieb auf %2\$s auf Deine Pinnwand";
-$a->strings["%1\$s posted to [url=%2\$s]your wall[/url]"] = "%1\$s hat etwas auf [url=%2\$s]Deiner Pinnwand[/url] gepostet";
-$a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica-Meldung] %s hat Dich erwähnt";
-$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s erwähnte Dich auf %2\$s";
-$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = "%1\$s [url=%2\$s]erwähnte Dich[/url].";
-$a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt";
-$a->strings["%1\$s shared a new post at %2\$s"] = "%1\$s hat einen neuen Beitrag auf %2\$s geteilt";
-$a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = "%1\$s [url=%2\$s]hat einen Beitrag geteilt[/url].";
-$a->strings["[Friendica:Notify] %1\$s poked you"] = "[Friendica-Meldung] %1\$s hat Dich angestupst";
-$a->strings["%1\$s poked you at %2\$s"] = "%1\$s hat Dich auf %2\$s angestupst";
-$a->strings["%1\$s [url=%2\$s]poked you[/url]."] = "%1\$s [url=%2\$s]hat Dich angestupst[/url].";
-$a->strings["[Friendica:Notify] %s tagged your post"] = "[Friendica-Meldung] %s hat Deinen Beitrag getaggt";
-$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$s erwähnte Deinen Beitrag auf %2\$s";
-$a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = "%1\$s erwähnte [url=%2\$s]Deinen Beitrag[/url]";
-$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica-Meldung] Kontaktanfrage erhalten";
-$a->strings["You've received an introduction from '%1\$s' at %2\$s"] = "Du hast eine Kontaktanfrage von '%1\$s' auf %2\$s erhalten";
-$a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Kontaktanfrage[/url] von %2\$s erhalten.";
-$a->strings["You may visit their profile at %s"] = "Hier kannst Du das Profil betrachten: %s";
-$a->strings["Please visit %s to approve or reject the introduction."] = "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.";
-$a->strings["[Friendica:Notify] A new person is sharing with you"] = "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir";
-$a->strings["%1\$s is sharing with you at %2\$s"] = "%1\$s teilt mit Dir auf %2\$s";
-$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf ";
-$a->strings["You have a new follower at %2\$s : %1\$s"] = "Du hast einen neuen Kontakt auf %2\$s: %1\$s";
-$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica-Meldung] Kontaktvorschlag erhalten";
-$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Du hast einen Kontakt-Vorschlag von '%1\$s' auf %2\$s erhalten";
-$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Du hast einen [url=%1\$s]Kontakt-Vorschlag[/url] %2\$s von %3\$s erhalten.";
-$a->strings["Name:"] = "Name:";
-$a->strings["Photo:"] = "Foto:";
-$a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.";
-$a->strings["[Friendica:Notify] Connection accepted"] = "[Friendica-Benachrichtigung] Kontaktanfrage bestätigt";
-$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = "'%1\$s' hat Deine Kontaktanfrage auf  %2\$s bestätigt";
-$a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = "%2\$s hat Deine [url=%1\$s]Kontaktanfrage[/url] akzeptiert.";
-$a->strings["You are now mutual friends and may exchange status updates, photos, and email without restriction."] = "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und Emails ohne Einschränkungen austauschen.";
-$a->strings["Please visit %s if you wish to make any changes to this relationship."] = "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst.";
-$a->strings["'%1\$s' has chosen to accept you a \"fan\", which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically."] = "'%1\$s' hat sich entschieden Dich als \"Fan\" zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen.";
-$a->strings["'%1\$s' may choose to extend this into a two-way or more permissive relationship in the future."] = "'%1\$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. ";
-$a->strings["Please visit %s  if you wish to make any changes to this relationship."] = "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst.";
-$a->strings["[Friendica System:Notify] registration request"] = "[Friendica System:Benachrichtigung] Registrationsanfrage";
-$a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "Du hast eine Registrierungsanfrage von %2\$s auf '%1\$s' erhalten";
-$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Registrierungsanfrage[/url] von %2\$s erhalten.";
-$a->strings["Full Name:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = "Kompletter Name:\t%1\$s\\nURL der Seite:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)";
-$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten.";
-$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL.";
-$a->strings["Connect URL missing."] = "Connect-URL fehlt";
-$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann.";
-$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden.";
-$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
-$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
-$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
-$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen.";
-$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen.";
-$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
-$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können.";
-$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
-$a->strings["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."] = "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen.";
-$a->strings["Default privacy group for new contacts"] = "Voreingestellte Gruppe für neue Kontakte";
-$a->strings["Everybody"] = "Alle Kontakte";
-$a->strings["edit"] = "bearbeiten";
-$a->strings["Groups"] = "Gruppen";
-$a->strings["Edit groups"] = "Gruppen bearbeiten";
-$a->strings["Edit group"] = "Gruppe bearbeiten";
-$a->strings["Create a new group"] = "Neue Gruppe erstellen";
-$a->strings["Group Name: "] = "Gruppenname:";
-$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe";
-$a->strings["add"] = "hinzufügen";
-$a->strings["photo"] = "Foto";
-$a->strings["status"] = "Status";
-$a->strings["event"] = "Event";
 $a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s";
 $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht";
 $a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
 $a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil.";
 $a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil.";
+$a->strings["photo"] = "Foto";
+$a->strings["status"] = "Status";
+$a->strings["event"] = "Event";
 $a->strings["[no subject]"] = "[kein Betreff]";
 $a->strings["Nothing new here"] = "Keine Neuigkeiten";
 $a->strings["Clear notifications"] = "Bereinige Benachrichtigungen";
@@ -254,15 +101,70 @@ $a->strings["Admin"] = "Administration";
 $a->strings["Site setup and configuration"] = "Einstellungen der Seite und Konfiguration";
 $a->strings["Navigation"] = "Navigation";
 $a->strings["Site map"] = "Sitemap";
-$a->strings["Embedded content"] = "Eingebetteter Inhalt";
-$a->strings["Embedding disabled"] = "Einbettungen deaktiviert";
-$a->strings["%s is now following %s."] = "%s folgt nun %s";
-$a->strings["following"] = "folgen";
-$a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen";
-$a->strings["stopped following"] = "wird nicht mehr gefolgt";
 $a->strings["Click here to upgrade."] = "Zum Upgraden hier klicken.";
 $a->strings["This action exceeds the limits set by your subscription plan."] = "Diese Aktion überschreitet die Obergrenze Deines Abonnements.";
 $a->strings["This action is not available under your subscription plan."] = "Diese Aktion ist in Deinem Abonnement nicht verfügbar.";
+$a->strings["Male"] = "Männlich";
+$a->strings["Female"] = "Weiblich";
+$a->strings["Currently Male"] = "Momentan männlich";
+$a->strings["Currently Female"] = "Momentan weiblich";
+$a->strings["Mostly Male"] = "Hauptsächlich männlich";
+$a->strings["Mostly Female"] = "Hauptsächlich weiblich";
+$a->strings["Transgender"] = "Transgender";
+$a->strings["Intersex"] = "Intersex";
+$a->strings["Transsexual"] = "Transsexuell";
+$a->strings["Hermaphrodite"] = "Hermaphrodit";
+$a->strings["Neuter"] = "Neuter";
+$a->strings["Non-specific"] = "Nicht spezifiziert";
+$a->strings["Other"] = "Andere";
+$a->strings["Undecided"] = array(
+       0 => "Unentschieden",
+       1 => "Unentschieden",
+);
+$a->strings["Males"] = "Männer";
+$a->strings["Females"] = "Frauen";
+$a->strings["Gay"] = "Schwul";
+$a->strings["Lesbian"] = "Lesbisch";
+$a->strings["No Preference"] = "Keine Vorlieben";
+$a->strings["Bisexual"] = "Bisexuell";
+$a->strings["Autosexual"] = "Autosexual";
+$a->strings["Abstinent"] = "Abstinent";
+$a->strings["Virgin"] = "Jungfrauen";
+$a->strings["Deviant"] = "Deviant";
+$a->strings["Fetish"] = "Fetish";
+$a->strings["Oodles"] = "Oodles";
+$a->strings["Nonsexual"] = "Nonsexual";
+$a->strings["Single"] = "Single";
+$a->strings["Lonely"] = "Einsam";
+$a->strings["Available"] = "Verfügbar";
+$a->strings["Unavailable"] = "Nicht verfügbar";
+$a->strings["Has crush"] = "verknallt";
+$a->strings["Infatuated"] = "verliebt";
+$a->strings["Dating"] = "Dating";
+$a->strings["Unfaithful"] = "Untreu";
+$a->strings["Sex Addict"] = "Sexbesessen";
+$a->strings["Friends"] = "Kontakte";
+$a->strings["Friends/Benefits"] = "Freunde/Zuwendungen";
+$a->strings["Casual"] = "Casual";
+$a->strings["Engaged"] = "Verlobt";
+$a->strings["Married"] = "Verheiratet";
+$a->strings["Imaginarily married"] = "imaginär verheiratet";
+$a->strings["Partners"] = "Partner";
+$a->strings["Cohabiting"] = "zusammenlebend";
+$a->strings["Common law"] = "wilde Ehe";
+$a->strings["Happy"] = "Glücklich";
+$a->strings["Not looking"] = "Nicht auf der Suche";
+$a->strings["Swinger"] = "Swinger";
+$a->strings["Betrayed"] = "Betrogen";
+$a->strings["Separated"] = "Getrennt";
+$a->strings["Unstable"] = "Unstabil";
+$a->strings["Divorced"] = "Geschieden";
+$a->strings["Imaginarily divorced"] = "imaginär geschieden";
+$a->strings["Widowed"] = "Verwitwet";
+$a->strings["Uncertain"] = "Unsicher";
+$a->strings["It's complicated"] = "Ist kompliziert";
+$a->strings["Don't care"] = "Ist mir nicht wichtig";
+$a->strings["Ask me"] = "Frag mich";
 $a->strings["Welcome "] = "Willkommen ";
 $a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
 $a->strings["Welcome back "] = "Willkommen zurück ";
@@ -278,40 +180,99 @@ $a->strings["%d contact not imported"] = array(
        1 => "%d Kontakte nicht importiert",
 );
 $a->strings["Done. You can now login with your username and password"] = "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden";
-$a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert.";
-$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
-$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden.";
-$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
-$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein.";
-$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen.";
-$a->strings["Name too short."] = "Der Name ist zu kurz.";
-$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein.";
-$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt.";
-$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse.";
-$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden.";
-$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen.";
-$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
-$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
-$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.";
-$a->strings["An error occurred during registration. Please try again."] = "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
-$a->strings["default"] = "Standard";
-$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
-$a->strings["Profile Photos"] = "Profilbilder";
-$a->strings["\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"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden.";
-$a->strings["Registration at %s"] = "Registrierung als %s";
-$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde eingerichtet.";
-$a->strings["\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."] = "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3\$s\n\tBenutzernamename:\t%1\$s\n\tPasswort:\t%5\$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2\$s.";
-$a->strings["Registration details for %s"] = "Details der Registration von %s";
-$a->strings["Post to Email"] = "An E-Mail senden";
-$a->strings["Connectors disabled, since \"%s\" is enabled."] = "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist.";
-$a->strings["Hide your profile details from unknown viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
-$a->strings["Visible to everybody"] = "Für jeden sichtbar";
+$a->strings["View Profile"] = "Profil anschauen";
+$a->strings["Connect/Follow"] = "Verbinden/Folgen";
+$a->strings["View Status"] = "Pinnwand anschauen";
+$a->strings["View Photos"] = "Bilder anschauen";
+$a->strings["Network Posts"] = "Netzwerkbeiträge";
+$a->strings["View Contact"] = "Kontakt anzeigen";
+$a->strings["Drop Contact"] = "Kontakt löschen";
+$a->strings["Send PM"] = "Private Nachricht senden";
+$a->strings["Poke"] = "Anstupsen";
+$a->strings["Organisation"] = "Organisation";
+$a->strings["News"] = "Nachrichten";
+$a->strings["Forum"] = "Forum";
+$a->strings["Post to Email"] = "An E-Mail senden";
+$a->strings["Connectors disabled, since \"%s\" is enabled."] = "Konnektoren sind nicht verfügbar, da \"%s\" aktiv ist.";
+$a->strings["Hide your profile details from unknown viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
+$a->strings["Visible to everybody"] = "Für jeden sichtbar";
 $a->strings["show"] = "zeigen";
 $a->strings["don't show"] = "nicht zeigen";
 $a->strings["CC: email addresses"] = "Cc: E-Mail-Addressen";
 $a->strings["Example: bob@example.com, mary@example.com"] = "Z.B.: bob@example.com, mary@example.com";
 $a->strings["Permissions"] = "Berechtigungen";
 $a->strings["Close"] = "Schließen";
+$a->strings["Daily posting limit of %d posts reached. The post was rejected."] = "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
+$a->strings["Weekly posting limit of %d posts reached. The post was rejected."] = "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
+$a->strings["Monthly posting limit of %d posts reached. The post was rejected."] = "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
+$a->strings["Logged out."] = "Abgemeldet.";
+$a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
+$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast.";
+$a->strings["The error message was:"] = "Die Fehlermeldung lautete:";
+$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i";
+$a->strings["Starts:"] = "Beginnt:";
+$a->strings["Finishes:"] = "Endet:";
+$a->strings["Location:"] = "Ort:";
+$a->strings["Image/photo"] = "Bild/Foto";
+$a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s";
+$a->strings["$1 wrote:"] = "$1 hat geschrieben:";
+$a->strings["Encrypted content"] = "Verschlüsselter Inhalt";
+$a->strings["Invalid source protocol"] = "Ungültiges Quell-Protokoll";
+$a->strings["Invalid link protocol"] = "Ungültiges Link-Protokoll";
+$a->strings["Unknown | Not categorised"] = "Unbekannt | Nicht kategorisiert";
+$a->strings["Block immediately"] = "Sofort blockieren";
+$a->strings["Shady, spammer, self-marketer"] = "Zwielichtig, Spammer, Selbstdarsteller";
+$a->strings["Known to me, but no opinion"] = "Ist mir bekannt, hab aber keine Meinung";
+$a->strings["OK, probably harmless"] = "OK, wahrscheinlich harmlos";
+$a->strings["Reputable, has my trust"] = "Seriös, hat mein Vertrauen";
+$a->strings["Frequently"] = "immer wieder";
+$a->strings["Hourly"] = "Stündlich";
+$a->strings["Twice daily"] = "Zweimal täglich";
+$a->strings["Daily"] = "Täglich";
+$a->strings["Weekly"] = "Wöchentlich";
+$a->strings["Monthly"] = "Monatlich";
+$a->strings["Friendica"] = "Friendica";
+$a->strings["OStatus"] = "OStatus";
+$a->strings["RSS/Atom"] = "RSS/Atom";
+$a->strings["Email"] = "E-Mail";
+$a->strings["Diaspora"] = "Diaspora";
+$a->strings["Facebook"] = "Facebook";
+$a->strings["Zot!"] = "Zott";
+$a->strings["LinkedIn"] = "LinkedIn";
+$a->strings["XMPP/IM"] = "XMPP/Chat";
+$a->strings["MySpace"] = "MySpace";
+$a->strings["Google+"] = "Google+";
+$a->strings["pump.io"] = "pump.io";
+$a->strings["Twitter"] = "Twitter";
+$a->strings["Diaspora Connector"] = "Diaspora";
+$a->strings["GNU Social Connector"] = "GNU social Connector";
+$a->strings["pnut"] = "pnut";
+$a->strings["App.net"] = "App.net";
+$a->strings["Add New Contact"] = "Neuen Kontakt hinzufügen";
+$a->strings["Enter address or web location"] = "Adresse oder Web-Link eingeben";
+$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara";
+$a->strings["Connect"] = "Verbinden";
+$a->strings["%d invitation available"] = array(
+       0 => "%d Einladung verfügbar",
+       1 => "%d Einladungen verfügbar",
+);
+$a->strings["Find People"] = "Leute finden";
+$a->strings["Enter name or interest"] = "Name oder Interessen eingeben";
+$a->strings["Examples: Robert Morgenstein, Fishing"] = "Beispiel: Robert Morgenstein, Angeln";
+$a->strings["Find"] = "Finde";
+$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
+$a->strings["Similar Interests"] = "Ähnliche Interessen";
+$a->strings["Random Profile"] = "Zufälliges Profil";
+$a->strings["Invite Friends"] = "Freunde einladen";
+$a->strings["Networks"] = "Netzwerke";
+$a->strings["All Networks"] = "Alle Netzwerke";
+$a->strings["Saved Folders"] = "Gespeicherte Ordner";
+$a->strings["Everything"] = "Alles";
+$a->strings["Categories"] = "Kategorien";
+$a->strings["%d contact in common"] = array(
+       0 => "%d gemeinsamer Kontakt",
+       1 => "%d gemeinsame Kontakte",
+);
 $a->strings["%1\$s attends %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
 $a->strings["%1\$s doesn't attend %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil.";
 $a->strings["%1\$s attends maybe %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil.";
@@ -340,14 +301,6 @@ $a->strings["Please wait"] = "Bitte warten";
 $a->strings["remove"] = "löschen";
 $a->strings["Delete Selected Items"] = "Lösche die markierten Beiträge";
 $a->strings["Follow Thread"] = "Folge der Unterhaltung";
-$a->strings["View Status"] = "Pinnwand anschauen";
-$a->strings["View Profile"] = "Profil anschauen";
-$a->strings["View Photos"] = "Bilder anschauen";
-$a->strings["Network Posts"] = "Netzwerkbeiträge";
-$a->strings["View Contact"] = "Kontakt anzeigen";
-$a->strings["Send PM"] = "Private Nachricht senden";
-$a->strings["Poke"] = "Anstupsen";
-$a->strings["Connect/Follow"] = "Verbinden/Folgen";
 $a->strings["%s likes this."] = "%s mag das.";
 $a->strings["%s doesn't like this."] = "%s mag das nicht.";
 $a->strings["%s attends."] = "%s nimmt teil.";
@@ -413,57 +366,6 @@ $a->strings["Not Attending"] = array(
        0 => "Nicht teilnehmend ",
        1 => "Nicht teilnehmend",
 );
-$a->strings["(no subject)"] = "(kein Betreff)";
-$a->strings["General Features"] = "Allgemeine Features";
-$a->strings["Multiple Profiles"] = "Mehrere Profile";
-$a->strings["Ability to create multiple profiles"] = "Möglichkeit mehrere Profile zu erstellen";
-$a->strings["Photo Location"] = "Aufnahmeort";
-$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden.";
-$a->strings["Export Public Calendar"] = "Öffentlichen Kalender exportieren";
-$a->strings["Ability for visitors to download the public calendar"] = "Möglichkeit für Besucher den öffentlichen Kalender herunter zu laden";
-$a->strings["Post Composition Features"] = "Beitragserstellung Features";
-$a->strings["Post Preview"] = "Beitragsvorschau";
-$a->strings["Allow previewing posts and comments before publishing them"] = "Die Vorschau von Beiträgen und Kommentaren vor dem absenden erlauben.";
-$a->strings["Auto-mention Forums"] = "Foren automatisch erwähnen";
-$a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = "Automatisch eine @-Erwähnung eines Forums einfügen/entfehrnen, wenn dieses im ACL Fenster de-/markiert  wurde.";
-$a->strings["Network Sidebar Widgets"] = "Widgets für Netzwerk und Seitenleiste";
-$a->strings["Search by Date"] = "Archiv";
-$a->strings["Ability to select posts by date ranges"] = "Möglichkeit die Beiträge nach Datumsbereichen zu sortieren";
-$a->strings["List Forums"] = "Zeige Foren";
-$a->strings["Enable widget to display the forums your are connected with"] = "Aktiviere Widget, um die Foren mit denen du verbunden bist anzuzeigen";
-$a->strings["Group Filter"] = "Gruppen Filter";
-$a->strings["Enable widget to display Network posts only from selected group"] = "Widget zur Darstellung der Beiträge nach Kontaktgruppen sortiert aktivieren.";
-$a->strings["Network Filter"] = "Netzwerk Filter";
-$a->strings["Enable widget to display Network posts only from selected network"] = "Widget zum filtern der Beiträge in Abhängigkeit des Netzwerks aus dem der Ersteller sendet aktivieren.";
-$a->strings["Saved Searches"] = "Gespeicherte Suchen";
-$a->strings["Save search terms for re-use"] = "Speichere Suchanfragen für spätere Wiederholung.";
-$a->strings["Network Tabs"] = "Netzwerk Reiter";
-$a->strings["Network Personal Tab"] = "Netzwerk-Reiter: Persönlich";
-$a->strings["Enable tab to display only Network posts that you've interacted on"] = "Aktiviert einen Netzwerk-Reiter in dem Nachrichten angezeigt werden mit denen Du interagiert hast";
-$a->strings["Network New Tab"] = "Netzwerk-Reiter: Neue";
-$a->strings["Enable tab to display only new Network posts (from the last 12 hours)"] = "Aktiviert einen Netzwerk-Reiter in dem ausschließlich neue Beiträge (der letzten 12 Stunden) angezeigt werden";
-$a->strings["Network Shared Links Tab"] = "Netzwerk-Reiter: Geteilte Links";
-$a->strings["Enable tab to display only Network posts with links in them"] = "Aktiviert einen Netzwerk-Reiter der ausschließlich Nachrichten mit Links enthält";
-$a->strings["Post/Comment Tools"] = "Werkzeuge für Beiträge und Kommentare";
-$a->strings["Multiple Deletion"] = "Mehrere Beiträge löschen";
-$a->strings["Select and delete multiple posts/comments at once"] = "Mehrere Beiträge/Kommentare markieren und gleichzeitig löschen";
-$a->strings["Edit Sent Posts"] = "Gesendete Beiträge editieren";
-$a->strings["Edit and correct posts and comments after sending"] = "Erlaubt es Beiträge und Kommentare nach dem Senden zu editieren bzw.zu  korrigieren.";
-$a->strings["Tagging"] = "Tagging";
-$a->strings["Ability to tag existing posts"] = "Möglichkeit bereits existierende Beiträge nachträglich mit Tags zu versehen.";
-$a->strings["Post Categories"] = "Beitragskategorien";
-$a->strings["Add categories to your posts"] = "Eigene Beiträge mit Kategorien versehen";
-$a->strings["Saved Folders"] = "Gespeicherte Ordner";
-$a->strings["Ability to file posts under folders"] = "Beiträge in Ordnern speichern aktivieren";
-$a->strings["Dislike Posts"] = "Beiträge 'nicht mögen'";
-$a->strings["Ability to dislike posts/comments"] = "Ermöglicht es Beiträge mit einem Klick 'nicht zu mögen'";
-$a->strings["Star Posts"] = "Beiträge Markieren";
-$a->strings["Ability to mark special posts with a star indicator"] = "Erlaubt es Beiträge mit einem Stern-Indikator zu  markieren";
-$a->strings["Mute Post Notifications"] = "Benachrichtigungen für Beiträge Stumm schalten";
-$a->strings["Ability to mute notifications for a thread"] = "Möglichkeit Benachrichtigungen für einen Thread abbestellen zu können";
-$a->strings["Advanced Profile Settings"] = "Erweiterte Profil-Einstellungen";
-$a->strings["Show visitors public community forums at the Advanced Profile Page"] = "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite";
-$a->strings["Contact Photos"] = "Kontaktbilder";
 $a->strings["Miscellaneous"] = "Verschiedenes";
 $a->strings["Birthday:"] = "Geburtstag:";
 $a->strings["Age: "] = "Alter: ";
@@ -487,10 +389,67 @@ $a->strings["seconds"] = "Sekunden";
 $a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s her";
 $a->strings["%s's birthday"] = "%ss Geburtstag";
 $a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s";
-$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i";
-$a->strings["Starts:"] = "Beginnt:";
-$a->strings["Finishes:"] = "Endet:";
-$a->strings["Location:"] = "Ort:";
+$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln.";
+$a->strings["Friendica Notification"] = "Friendica-Benachrichtigung";
+$a->strings["Thank You,"] = "Danke,";
+$a->strings["%s Administrator"] = "der Administrator von %s";
+$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, %2\$s Administrator";
+$a->strings["%s <!item_type!>"] = "%s <!item_type!>";
+$a->strings["[Friendica:Notify] New mail received at %s"] = "[Friendica-Meldung] Neue Nachricht erhalten von %s";
+$a->strings["%1\$s sent you a new private message at %2\$s."] = "%1\$s hat Dir eine neue private Nachricht auf %2\$s geschickt.";
+$a->strings["%1\$s sent you %2\$s."] = "%1\$s schickte Dir %2\$s.";
+$a->strings["a private message"] = "eine private Nachricht";
+$a->strings["Please visit %s to view and/or reply to your private messages."] = "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten.";
+$a->strings["%1\$s commented on [url=%2\$s]a %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]a %3\$s[/url]";
+$a->strings["%1\$s commented on [url=%2\$s]%3\$s's %4\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]%3\$ss %4\$s[/url]";
+$a->strings["%1\$s commented on [url=%2\$s]your %3\$s[/url]"] = "%1\$s kommentierte [url=%2\$s]Deinen %3\$s[/url]";
+$a->strings["[Friendica:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Friendica-Meldung] Kommentar zum Beitrag #%1\$d von %2\$s";
+$a->strings["%s commented on an item/conversation you have been following."] = "%s hat einen Beitrag kommentiert, dem Du folgst.";
+$a->strings["Please visit %s to view and/or reply to the conversation."] = "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.";
+$a->strings["[Friendica:Notify] %s posted to your profile wall"] = "[Friendica-Meldung] %s hat auf Deine Pinnwand geschrieben";
+$a->strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s schrieb auf %2\$s auf Deine Pinnwand";
+$a->strings["%1\$s posted to [url=%2\$s]your wall[/url]"] = "%1\$s hat etwas auf [url=%2\$s]Deiner Pinnwand[/url] gepostet";
+$a->strings["[Friendica:Notify] %s tagged you"] = "[Friendica-Meldung] %s hat Dich erwähnt";
+$a->strings["%1\$s tagged you at %2\$s"] = "%1\$s erwähnte Dich auf %2\$s";
+$a->strings["%1\$s [url=%2\$s]tagged you[/url]."] = "%1\$s [url=%2\$s]erwähnte Dich[/url].";
+$a->strings["[Friendica:Notify] %s shared a new post"] = "[Friendica Benachrichtigung] %s hat einen Beitrag geteilt";
+$a->strings["%1\$s shared a new post at %2\$s"] = "%1\$s hat einen neuen Beitrag auf %2\$s geteilt";
+$a->strings["%1\$s [url=%2\$s]shared a post[/url]."] = "%1\$s [url=%2\$s]hat einen Beitrag geteilt[/url].";
+$a->strings["[Friendica:Notify] %1\$s poked you"] = "[Friendica-Meldung] %1\$s hat Dich angestupst";
+$a->strings["%1\$s poked you at %2\$s"] = "%1\$s hat Dich auf %2\$s angestupst";
+$a->strings["%1\$s [url=%2\$s]poked you[/url]."] = "%1\$s [url=%2\$s]hat Dich angestupst[/url].";
+$a->strings["[Friendica:Notify] %s tagged your post"] = "[Friendica-Meldung] %s hat Deinen Beitrag getaggt";
+$a->strings["%1\$s tagged your post at %2\$s"] = "%1\$s erwähnte Deinen Beitrag auf %2\$s";
+$a->strings["%1\$s tagged [url=%2\$s]your post[/url]"] = "%1\$s erwähnte [url=%2\$s]Deinen Beitrag[/url]";
+$a->strings["[Friendica:Notify] Introduction received"] = "[Friendica-Meldung] Kontaktanfrage erhalten";
+$a->strings["You've received an introduction from '%1\$s' at %2\$s"] = "Du hast eine Kontaktanfrage von '%1\$s' auf %2\$s erhalten";
+$a->strings["You've received [url=%1\$s]an introduction[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Kontaktanfrage[/url] von %2\$s erhalten.";
+$a->strings["You may visit their profile at %s"] = "Hier kannst Du das Profil betrachten: %s";
+$a->strings["Please visit %s to approve or reject the introduction."] = "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.";
+$a->strings["[Friendica:Notify] A new person is sharing with you"] = "[Friendica Benachrichtigung] Eine neue Person teilt mit Dir";
+$a->strings["%1\$s is sharing with you at %2\$s"] = "%1\$s teilt mit Dir auf %2\$s";
+$a->strings["[Friendica:Notify] You have a new follower"] = "[Friendica Benachrichtigung] Du hast einen neuen Kontakt auf ";
+$a->strings["You have a new follower at %2\$s : %1\$s"] = "Du hast einen neuen Kontakt auf %2\$s: %1\$s";
+$a->strings["[Friendica:Notify] Friend suggestion received"] = "[Friendica-Meldung] Kontaktvorschlag erhalten";
+$a->strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Du hast einen Kontakt-Vorschlag von '%1\$s' auf %2\$s erhalten";
+$a->strings["You've received [url=%1\$s]a friend suggestion[/url] for %2\$s from %3\$s."] = "Du hast einen [url=%1\$s]Kontakt-Vorschlag[/url] %2\$s von %3\$s erhalten.";
+$a->strings["Name:"] = "Name:";
+$a->strings["Photo:"] = "Foto:";
+$a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.";
+$a->strings["[Friendica:Notify] Connection accepted"] = "[Friendica-Benachrichtigung] Kontaktanfrage bestätigt";
+$a->strings["'%1\$s' has accepted your connection request at %2\$s"] = "'%1\$s' hat Deine Kontaktanfrage auf  %2\$s bestätigt";
+$a->strings["%2\$s has accepted your [url=%1\$s]connection request[/url]."] = "%2\$s hat Deine [url=%1\$s]Kontaktanfrage[/url] akzeptiert.";
+$a->strings["You are now mutual friends and may exchange status updates, photos, and email without restriction."] = "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und Emails ohne Einschränkungen austauschen.";
+$a->strings["Please visit %s if you wish to make any changes to this relationship."] = "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst.";
+$a->strings["'%1\$s' has chosen to accept you a \"fan\", which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically."] = "'%1\$s' hat sich entschieden Dich als \"Fan\" zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen.";
+$a->strings["'%1\$s' may choose to extend this into a two-way or more permissive relationship in the future."] = "'%1\$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. ";
+$a->strings["Please visit %s  if you wish to make any changes to this relationship."] = "Bitte besuche %s, wenn Du Änderungen an eurer Beziehung vornehmen willst.";
+$a->strings["[Friendica System:Notify] registration request"] = "[Friendica System:Benachrichtigung] Registrationsanfrage";
+$a->strings["You've received a registration request from '%1\$s' at %2\$s"] = "Du hast eine Registrierungsanfrage von %2\$s auf '%1\$s' erhalten";
+$a->strings["You've received a [url=%1\$s]registration request[/url] from %2\$s."] = "Du hast eine [url=%1\$s]Registrierungsanfrage[/url] von %2\$s erhalten.";
+$a->strings["Full Name:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)"] = "Kompletter Name:\t%1\$s\\nURL der Seite:\t%2\$s\\nLogin Name:\t%3\$s (%4\$s)";
+$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten.";
+$a->strings["all-day"] = "ganztägig";
 $a->strings["Sun"] = "So";
 $a->strings["Mon"] = "Mo";
 $a->strings["Tue"] = "Di";
@@ -529,74 +488,86 @@ $a->strings["October"] = "Oktober";
 $a->strings["November"] = "November";
 $a->strings["December"] = "Dezember";
 $a->strings["today"] = "Heute";
-$a->strings["all-day"] = "ganztägig";
 $a->strings["No events to display"] = "Keine Veranstaltung zum Anzeigen";
 $a->strings["l, F j"] = "l, F j";
 $a->strings["Edit event"] = "Veranstaltung bearbeiten";
+$a->strings["Delete event"] = "Veranstaltung löschen";
 $a->strings["link to source"] = "Link zum Originalbeitrag";
 $a->strings["Export"] = "Exportieren";
 $a->strings["Export calendar as ical"] = "Kalender als ical exportieren";
 $a->strings["Export calendar as csv"] = "Kalender als csv exportieren";
-$a->strings["%s\\'s birthday"] = "%ss Geburtstag";
-$a->strings["Unknown | Not categorised"] = "Unbekannt | Nicht kategorisiert";
-$a->strings["Block immediately"] = "Sofort blockieren";
-$a->strings["Shady, spammer, self-marketer"] = "Zwielichtig, Spammer, Selbstdarsteller";
-$a->strings["Known to me, but no opinion"] = "Ist mir bekannt, hab aber keine Meinung";
-$a->strings["OK, probably harmless"] = "OK, wahrscheinlich harmlos";
-$a->strings["Reputable, has my trust"] = "Seriös, hat mein Vertrauen";
-$a->strings["Frequently"] = "immer wieder";
-$a->strings["Hourly"] = "Stündlich";
-$a->strings["Twice daily"] = "Zweimal täglich";
-$a->strings["Daily"] = "Täglich";
-$a->strings["Weekly"] = "Wöchentlich";
-$a->strings["Monthly"] = "Monatlich";
-$a->strings["Friendica"] = "Friendica";
-$a->strings["OStatus"] = "OStatus";
-$a->strings["RSS/Atom"] = "RSS/Atom";
-$a->strings["Email"] = "E-Mail";
-$a->strings["Diaspora"] = "Diaspora";
-$a->strings["Facebook"] = "Facebook";
-$a->strings["Zot!"] = "Zott";
-$a->strings["LinkedIn"] = "LinkedIn";
-$a->strings["XMPP/IM"] = "XMPP/Chat";
-$a->strings["MySpace"] = "MySpace";
-$a->strings["Google+"] = "Google+";
-$a->strings["pump.io"] = "pump.io";
-$a->strings["Twitter"] = "Twitter";
-$a->strings["Diaspora Connector"] = "Diaspora";
-$a->strings["GNU Social"] = "GNU Social";
-$a->strings["pnut"] = "pnut";
-$a->strings["App.net"] = "App.net";
-$a->strings["Hubzilla/Redmatrix"] = "Hubzilla/Redmatrix";
-$a->strings["Add New Contact"] = "Neuen Kontakt hinzufügen";
-$a->strings["Enter address or web location"] = "Adresse oder Web-Link eingeben";
-$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Beispiel: bob@example.com, http://example.com/barbara";
-$a->strings["Connect"] = "Verbinden";
-$a->strings["%d invitation available"] = array(
-       0 => "%d Einladung verfügbar",
-       1 => "%d Einladungen verfügbar",
-);
-$a->strings["Find People"] = "Leute finden";
-$a->strings["Enter name or interest"] = "Name oder Interessen eingeben";
-$a->strings["Examples: Robert Morgenstein, Fishing"] = "Beispiel: Robert Morgenstein, Angeln";
-$a->strings["Find"] = "Finde";
-$a->strings["Friend Suggestions"] = "Kontaktvorschläge";
-$a->strings["Similar Interests"] = "Ähnliche Interessen";
-$a->strings["Random Profile"] = "Zufälliges Profil";
-$a->strings["Invite Friends"] = "Freunde einladen";
-$a->strings["Networks"] = "Netzwerke";
-$a->strings["All Networks"] = "Alle Netzwerke";
-$a->strings["Everything"] = "Alles";
-$a->strings["Categories"] = "Kategorien";
-$a->strings["%d contact in common"] = array(
-       0 => "%d gemeinsamer Kontakt",
-       1 => "%d gemeinsame Kontakte",
-);
-$a->strings["Daily posting limit of %d posts reached. The post was rejected."] = "Das tägliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
-$a->strings["Weekly posting limit of %d posts reached. The post was rejected."] = "Das wöchentliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
-$a->strings["Monthly posting limit of %d posts reached. The post was rejected."] = "Das monatliche Nachrichtenlimit von %d Nachrichten wurde erreicht. Die Nachtricht wurde verworfen.";
-$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora";
-$a->strings["Attachments:"] = "Anhänge:";
+$a->strings["General Features"] = "Allgemeine Features";
+$a->strings["Multiple Profiles"] = "Mehrere Profile";
+$a->strings["Ability to create multiple profiles"] = "Möglichkeit mehrere Profile zu erstellen";
+$a->strings["Photo Location"] = "Aufnahmeort";
+$a->strings["Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map."] = "Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden.";
+$a->strings["Export Public Calendar"] = "Öffentlichen Kalender exportieren";
+$a->strings["Ability for visitors to download the public calendar"] = "Möglichkeit für Besucher den öffentlichen Kalender herunter zu laden";
+$a->strings["Post Composition Features"] = "Beitragserstellung Features";
+$a->strings["Post Preview"] = "Beitragsvorschau";
+$a->strings["Allow previewing posts and comments before publishing them"] = "Die Vorschau von Beiträgen und Kommentaren vor dem absenden erlauben.";
+$a->strings["Auto-mention Forums"] = "Foren automatisch erwähnen";
+$a->strings["Add/remove mention when a forum page is selected/deselected in ACL window."] = "Automatisch eine @-Erwähnung eines Forums einfügen/entfehrnen, wenn dieses im ACL Fenster de-/markiert  wurde.";
+$a->strings["Network Sidebar Widgets"] = "Widgets für Netzwerk und Seitenleiste";
+$a->strings["Search by Date"] = "Archiv";
+$a->strings["Ability to select posts by date ranges"] = "Möglichkeit die Beiträge nach Datumsbereichen zu sortieren";
+$a->strings["List Forums"] = "Zeige Foren";
+$a->strings["Enable widget to display the forums your are connected with"] = "Aktiviere Widget, um die Foren mit denen du verbunden bist anzuzeigen";
+$a->strings["Group Filter"] = "Gruppen Filter";
+$a->strings["Enable widget to display Network posts only from selected group"] = "Widget zur Darstellung der Beiträge nach Kontaktgruppen sortiert aktivieren.";
+$a->strings["Network Filter"] = "Netzwerk Filter";
+$a->strings["Enable widget to display Network posts only from selected network"] = "Widget zum filtern der Beiträge in Abhängigkeit des Netzwerks aus dem der Ersteller sendet aktivieren.";
+$a->strings["Saved Searches"] = "Gespeicherte Suchen";
+$a->strings["Save search terms for re-use"] = "Speichere Suchanfragen für spätere Wiederholung.";
+$a->strings["Network Tabs"] = "Netzwerk Reiter";
+$a->strings["Network Personal Tab"] = "Netzwerk-Reiter: Persönlich";
+$a->strings["Enable tab to display only Network posts that you've interacted on"] = "Aktiviert einen Netzwerk-Reiter in dem Nachrichten angezeigt werden mit denen Du interagiert hast";
+$a->strings["Network New Tab"] = "Netzwerk-Reiter: Neue";
+$a->strings["Enable tab to display only new Network posts (from the last 12 hours)"] = "Aktiviert einen Netzwerk-Reiter in dem ausschließlich neue Beiträge (der letzten 12 Stunden) angezeigt werden";
+$a->strings["Network Shared Links Tab"] = "Netzwerk-Reiter: Geteilte Links";
+$a->strings["Enable tab to display only Network posts with links in them"] = "Aktiviert einen Netzwerk-Reiter der ausschließlich Nachrichten mit Links enthält";
+$a->strings["Post/Comment Tools"] = "Werkzeuge für Beiträge und Kommentare";
+$a->strings["Multiple Deletion"] = "Mehrere Beiträge löschen";
+$a->strings["Select and delete multiple posts/comments at once"] = "Mehrere Beiträge/Kommentare markieren und gleichzeitig löschen";
+$a->strings["Edit Sent Posts"] = "Gesendete Beiträge editieren";
+$a->strings["Edit and correct posts and comments after sending"] = "Erlaubt es Beiträge und Kommentare nach dem Senden zu editieren bzw.zu  korrigieren.";
+$a->strings["Tagging"] = "Tagging";
+$a->strings["Ability to tag existing posts"] = "Möglichkeit bereits existierende Beiträge nachträglich mit Tags zu versehen.";
+$a->strings["Post Categories"] = "Beitragskategorien";
+$a->strings["Add categories to your posts"] = "Eigene Beiträge mit Kategorien versehen";
+$a->strings["Ability to file posts under folders"] = "Beiträge in Ordnern speichern aktivieren";
+$a->strings["Dislike Posts"] = "Beiträge 'nicht mögen'";
+$a->strings["Ability to dislike posts/comments"] = "Ermöglicht es Beiträge mit einem Klick 'nicht zu mögen'";
+$a->strings["Star Posts"] = "Beiträge Markieren";
+$a->strings["Ability to mark special posts with a star indicator"] = "Erlaubt es Beiträge mit einem Stern-Indikator zu  markieren";
+$a->strings["Mute Post Notifications"] = "Benachrichtigungen für Beiträge Stumm schalten";
+$a->strings["Ability to mute notifications for a thread"] = "Möglichkeit Benachrichtigungen für einen Thread abbestellen zu können";
+$a->strings["Advanced Profile Settings"] = "Erweiterte Profil-Einstellungen";
+$a->strings["Show visitors public community forums at the Advanced Profile Page"] = "Zeige Besuchern öffentliche Gemeinschafts-Foren auf der Erweiterten Profil-Seite";
+$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL.";
+$a->strings["Blocked domain"] = "Blockierte Daimain";
+$a->strings["Connect URL missing."] = "Connect-URL fehlt";
+$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann.";
+$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden.";
+$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
+$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
+$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
+$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen.";
+$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen.";
+$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
+$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von Dir erhalten können.";
+$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
+$a->strings["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."] = "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls Du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen.";
+$a->strings["Default privacy group for new contacts"] = "Voreingestellte Gruppe für neue Kontakte";
+$a->strings["Everybody"] = "Alle Kontakte";
+$a->strings["edit"] = "bearbeiten";
+$a->strings["Groups"] = "Gruppen";
+$a->strings["Edit groups"] = "Gruppen bearbeiten";
+$a->strings["Edit group"] = "Gruppe bearbeiten";
+$a->strings["Create a new group"] = "Neue Gruppe erstellen";
+$a->strings["Group Name: "] = "Gruppenname:";
+$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe";
+$a->strings["add"] = "hinzufügen";
 $a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden.";
 $a->strings["Requested profile is not available."] = "Das angefragte Profil ist nicht vorhanden.";
 $a->strings["Edit profile"] = "Profil bearbeiten";
@@ -650,12 +621,60 @@ $a->strings["Profile Details"] = "Profildetails";
 $a->strings["Photo Albums"] = "Fotoalben";
 $a->strings["Personal Notes"] = "Persönliche Notizen";
 $a->strings["Only You Can See This"] = "Nur Du kannst das sehen";
+$a->strings["view full size"] = "Volle Größe anzeigen";
+$a->strings["Embedded content"] = "Eingebetteter Inhalt";
+$a->strings["Embedding disabled"] = "Einbettungen deaktiviert";
+$a->strings["Contact Photos"] = "Kontaktbilder";
+$a->strings["Passwords do not match. Password unchanged."] = "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert.";
+$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
+$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden.";
+$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
+$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein.";
+$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen.";
+$a->strings["Name too short."] = "Der Name ist zu kurz.";
+$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht Dein kompletter Name (Vor- und Nachname) zu sein.";
+$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain Deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt.";
+$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse.";
+$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden.";
+$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\" und \"_\") bestehen.";
+$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
+$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
+$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.";
+$a->strings["An error occurred during registration. Please try again."] = "Während der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
+$a->strings["default"] = "Standard";
+$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
+$a->strings["Profile Photos"] = "Profilbilder";
+$a->strings["\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"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde muss noch vom Admin des Knotens geprüft werden.";
+$a->strings["Registration at %s"] = "Registrierung als %s";
+$a->strings["\n\t\tDear %1\$s,\n\t\t\tThank you for registering at %2\$s. Your account has been created.\n\t"] = "\nHallo %1\$s,\n\ndanke für Deine Registrierung auf %2\$s. Dein Account wurde eingerichtet.";
+$a->strings["\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."] = "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3\$s\n\tBenutzernamename:\t%1\$s\n\tPasswort:\t%5\$s\n\nDu kannst Dein Passwort unter \"Einstellungen\" ändern, sobald Du Dich\nangemeldet hast.\n\nBitte nimm Dir ein paar Minuten um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst Du ja auch einige Informationen über Dich in Deinem\nProfil veröffentlichen, damit andere Leute Dich einfacher finden können.\nBearbeite hierfür einfach Dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen Dir, Deinen kompletten Namen anzugeben und ein zu Dir\npassendes Profilbild zu wählen, damit Dich alte Bekannte wieder finden.\nAußerdem ist es nützlich, wenn Du auf Deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die Deine Interessen teilen.\n\nWir respektieren Deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn Du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nDanke für Deine Aufmerksamkeit und willkommen auf %2\$s.";
+$a->strings["Registration details for %s"] = "Details der Registration von %s";
+$a->strings["There are no tables on MyISAM."] = "Es gibt keine MyISAM Tabellen.";
+$a->strings["\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."] = "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein.";
+$a->strings["The error message is\n[pre]%s[/pre]"] = "Die Fehlermeldung lautet\n[pre]%s[/pre]";
+$a->strings["\nError %d occurred during database update:\n%s\n"] = "\nFehler %d beim Update der Datenbank aufgetreten\n%s\n";
+$a->strings["Errors encountered performing database changes: "] = "Fehler beim Ändern der Datenbank aufgetreten";
+$a->strings[": Database update"] = ": Datenbank Update";
+$a->strings["%s: updating %s table."] = "%s: aktualisiere Tabelle %s";
+$a->strings["%s\\'s birthday"] = "%ss Geburtstag";
+$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora";
+$a->strings["Attachments:"] = "Anhänge:";
+$a->strings["[Name Withheld]"] = "[Name unterdrückt]";
+$a->strings["Item not found."] = "Beitrag nicht gefunden.";
+$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?";
+$a->strings["Yes"] = "Ja";
+$a->strings["Permission denied."] = "Zugriff verweigert.";
+$a->strings["Archives"] = "Archiv";
+$a->strings["%s is now following %s."] = "%s folgt nun %s";
+$a->strings["following"] = "folgen";
+$a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen";
+$a->strings["stopped following"] = "wird nicht mehr gefolgt";
 $a->strings["newer"] = "neuer";
 $a->strings["older"] = "älter";
-$a->strings["prev"] = "vorige";
 $a->strings["first"] = "erste";
-$a->strings["last"] = "letzte";
+$a->strings["prev"] = "vorige";
 $a->strings["next"] = "nächste";
+$a->strings["last"] = "letzte";
 $a->strings["Loading more entries..."] = "lade weitere Einträge...";
 $a->strings["The end"] = "Das Ende";
 $a->strings["No contacts"] = "Keine Kontakte";
@@ -709,21 +728,6 @@ $a->strings["comment"] = array(
 );
 $a->strings["post"] = "Beitrag";
 $a->strings["Item filed"] = "Beitrag abgelegt";
-$a->strings["Drop Contact"] = "Kontakt löschen";
-$a->strings["Organisation"] = "Organisation";
-$a->strings["News"] = "Nachrichten";
-$a->strings["Forum"] = "Forum";
-$a->strings["[Name Withheld]"] = "[Name unterdrückt]";
-$a->strings["Item not found."] = "Beitrag nicht gefunden.";
-$a->strings["Do you really want to delete this item?"] = "Möchtest Du wirklich dieses Item löschen?";
-$a->strings["Yes"] = "Ja";
-$a->strings["Permission denied."] = "Zugriff verweigert.";
-$a->strings["Archives"] = "Archiv";
-$a->strings["\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."] = "\nDie Friendica-Entwickler haben vor kurzem das Update %s veröffentlicht, aber bei der Installation ging etwas schrecklich schief.\n\nDas Problem sollte so schnell wie möglich gelöst werden, aber ich schaffe es nicht alleine. Bitte kontaktiere einen Friendica-Entwickler falls Du mir nicht alleine helfen kannst. Meine Datenbank könnte ungültig sein.";
-$a->strings["The error message is\n[pre]%s[/pre]"] = "Die Fehlermeldung lautet\n[pre]%s[/pre]";
-$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbanktabellen.";
-$a->strings["Errors encountered performing database changes."] = "Es sind Fehler beim Bearbeiten der Datenbank aufgetreten.";
-$a->strings["view full size"] = "Volle Größe anzeigen";
 $a->strings["No friends to display."] = "Keine Kontakte zum Anzeigen.";
 $a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren";
 $a->strings["Return to your app and insert this Securty Code:"] = "Gehe zu Deiner Anwendung zurück und trage dort folgenden Sicherheitscode ein:";
@@ -735,24 +739,101 @@ $a->strings["Applications"] = "Anwendungen";
 $a->strings["No installed applications."] = "Keine Applikationen installiert.";
 $a->strings["Item not available."] = "Beitrag nicht verfügbar.";
 $a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden.";
-$a->strings["Source (bbcode) text:"] = "Quelle (bbcode) Text:";
-$a->strings["Source (Diaspora) text to convert to BBcode:"] = "Eingabe (Diaspora) nach BBCode zu konvertierender Text:";
-$a->strings["Source input: "] = "Originaltext:";
-$a->strings["bb2html (raw HTML): "] = "bb2html (reines HTML): ";
-$a->strings["bb2html: "] = "bb2html: ";
-$a->strings["bb2html2bb: "] = "bb2html2bb: ";
-$a->strings["bb2md: "] = "bb2md: ";
-$a->strings["bb2md2html: "] = "bb2md2html: ";
-$a->strings["bb2dia2bb: "] = "bb2dia2bb: ";
-$a->strings["bb2md2html2bb: "] = "bb2md2html2bb: ";
-$a->strings["Source input (Diaspora format): "] = "Originaltext (Diaspora Format): ";
-$a->strings["diaspora2bb: "] = "diaspora2bb: ";
 $a->strings["The post was created"] = "Der Beitrag wurde angelegt";
 $a->strings["No contacts in common."] = "Keine gemeinsamen Kontakte.";
 $a->strings["Common Friends"] = "Gemeinsame Kontakte";
-$a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert.";
-$a->strings["Not available."] = "Nicht verfügbar.";
-$a->strings["No results."] = "Keine Ergebnisse.";
+$a->strings["%d contact edited."] = array(
+       0 => "%d Kontakt bearbeitet.",
+       1 => "%d Kontakte bearbeitet.",
+);
+$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen.";
+$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden.";
+$a->strings["Contact updated."] = "Kontakt aktualisiert.";
+$a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen.";
+$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert";
+$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben";
+$a->strings["Contact has been ignored"] = "Kontakt wurde ignoriert";
+$a->strings["Contact has been unignored"] = "Kontakt wird nicht mehr ignoriert";
+$a->strings["Contact has been archived"] = "Kontakt wurde archiviert";
+$a->strings["Contact has been unarchived"] = "Kontakt wurde aus dem Archiv geholt";
+$a->strings["Drop contact"] = "Kontakt löschen";
+$a->strings["Do you really want to delete this contact?"] = "Möchtest Du wirklich diesen Kontakt löschen?";
+$a->strings["Contact has been removed."] = "Kontakt wurde entfernt.";
+$a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft";
+$a->strings["You are sharing with %s"] = "Du teilst mit %s";
+$a->strings["%s is sharing with you"] = "%s teilt mit Dir";
+$a->strings["Private communications are not available for this contact."] = "Private Kommunikation ist für diesen Kontakt nicht verfügbar.";
+$a->strings["Never"] = "Niemals";
+$a->strings["(Update was successful)"] = "(Aktualisierung war erfolgreich)";
+$a->strings["(Update was not successful)"] = "(Aktualisierung war nicht erfolgreich)";
+$a->strings["Suggest friends"] = "Kontakte vorschlagen";
+$a->strings["Network type: %s"] = "Netzwerktyp: %s";
+$a->strings["Communications lost with this contact!"] = "Verbindungen mit diesem Kontakt verloren!";
+$a->strings["Fetch further information for feeds"] = "Weitere Informationen zu Feeds holen";
+$a->strings["Disabled"] = "Deaktiviert";
+$a->strings["Fetch information"] = "Beziehe Information";
+$a->strings["Fetch information and keywords"] = "Beziehe Information und Schlüsselworte";
+$a->strings["Contact"] = "Kontakt";
+$a->strings["Submit"] = "Senden";
+$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit";
+$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft.";
+$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen";
+$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbeiten";
+$a->strings["Visit %s's profile [%s]"] = "Besuche %ss Profil [%s]";
+$a->strings["Block/Unblock contact"] = "Kontakt blockieren/freischalten";
+$a->strings["Ignore contact"] = "Ignoriere den Kontakt";
+$a->strings["Repair URL settings"] = "URL Einstellungen reparieren";
+$a->strings["View conversations"] = "Unterhaltungen anzeigen";
+$a->strings["Last update:"] = "Letzte Aktualisierung: ";
+$a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren";
+$a->strings["Update now"] = "Jetzt aktualisieren";
+$a->strings["Unblock"] = "Entsperren";
+$a->strings["Block"] = "Sperren";
+$a->strings["Unignore"] = "Ignorieren aufheben";
+$a->strings["Ignore"] = "Ignorieren";
+$a->strings["Currently blocked"] = "Derzeit geblockt";
+$a->strings["Currently ignored"] = "Derzeit ignoriert";
+$a->strings["Currently archived"] = "Momentan archiviert";
+$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen";
+$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein";
+$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen";
+$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt.";
+$a->strings["Blacklisted keywords"] = "Blacklistete Schlüsselworte ";
+$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde";
+$a->strings["Profile URL"] = "Profil URL";
+$a->strings["Actions"] = "Aktionen";
+$a->strings["Contact Settings"] = "Kontakteinstellungen";
+$a->strings["Suggestions"] = "Kontaktvorschläge";
+$a->strings["Suggest potential friends"] = "Kontakte vorschlagen";
+$a->strings["All Contacts"] = "Alle Kontakte";
+$a->strings["Show all contacts"] = "Alle Kontakte anzeigen";
+$a->strings["Unblocked"] = "Ungeblockt";
+$a->strings["Only show unblocked contacts"] = "Nur nicht-blockierte Kontakte anzeigen";
+$a->strings["Blocked"] = "Geblockt";
+$a->strings["Only show blocked contacts"] = "Nur blockierte Kontakte anzeigen";
+$a->strings["Ignored"] = "Ignoriert";
+$a->strings["Only show ignored contacts"] = "Nur ignorierte Kontakte anzeigen";
+$a->strings["Archived"] = "Archiviert";
+$a->strings["Only show archived contacts"] = "Nur archivierte Kontakte anzeigen";
+$a->strings["Hidden"] = "Verborgen";
+$a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen";
+$a->strings["Search your contacts"] = "Suche in deinen Kontakten";
+$a->strings["Results for: %s"] = "Ergebnisse für: %s";
+$a->strings["Update"] = "Aktualisierungen";
+$a->strings["Archive"] = "Archivieren";
+$a->strings["Unarchive"] = "Aus Archiv zurückholen";
+$a->strings["Batch Actions"] = "Stapelverarbeitung";
+$a->strings["View all contacts"] = "Alle Kontakte anzeigen";
+$a->strings["View all common friends"] = "Alle Kontakte anzeigen";
+$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen";
+$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft";
+$a->strings["is a fan of yours"] = "ist ein Fan von dir";
+$a->strings["you are a fan of"] = "Du bist Fan von";
+$a->strings["Edit contact"] = "Kontakt bearbeiten";
+$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
+$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
+$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
+$a->strings["Delete contact"] = "Lösche den Kontakt";
 $a->strings["No such group"] = "Es gibt keine solche Gruppe";
 $a->strings["Group is empty"] = "Gruppe ist leer";
 $a->strings["Group: %s"] = "Gruppe: %s";
@@ -770,7 +851,6 @@ $a->strings["Share this"] = "Weitersagen";
 $a->strings["share"] = "Teilen";
 $a->strings["This is you"] = "Das bist Du";
 $a->strings["Comment"] = "Kommentar";
-$a->strings["Submit"] = "Senden";
 $a->strings["Bold"] = "Fett";
 $a->strings["Italic"] = "Kursiv";
 $a->strings["Underline"] = "Unterstrichen";
@@ -829,45 +909,24 @@ $a->strings["Remove"] = "Entfernen";
 $a->strings["Add"] = "Hinzufügen";
 $a->strings["No entries."] = "Keine Einträge.";
 $a->strings["%1\$s welcomes %2\$s"] = "%1\$s heißt %2\$s herzlich willkommen";
+$a->strings["Public access denied."] = "Öffentlicher Zugriff verweigert.";
 $a->strings["Global Directory"] = "Weltweites Verzeichnis";
 $a->strings["Find on this site"] = "Auf diesem Server suchen";
 $a->strings["Results for:"] = "Ergebnisse für:";
 $a->strings["Site Directory"] = "Verzeichnis";
 $a->strings["No entries (some entries may be hidden)."] = "Keine Einträge (einige Einträge könnten versteckt sein).";
-$a->strings["People Search - %s"] = "Personensuche - %s";
-$a->strings["Forum Search - %s"] = "Forensuche - %s";
-$a->strings["No matches"] = "Keine Übereinstimmungen";
+$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt.";
+$a->strings["Item has been removed."] = "Eintrag wurde entfernt.";
+$a->strings["Item not found"] = "Beitrag nicht gefunden";
+$a->strings["Edit post"] = "Beitrag bearbeiten";
+$a->strings["Files"] = "Dateien";
+$a->strings["Not Found"] = "Nicht gefunden";
 $a->strings["- select -"] = "- auswählen -";
-$a->strings["Submit Request"] = "Anfrage abschicken";
-$a->strings["You already added this contact."] = "Du hast den Kontakt bereits hinzugefügt.";
-$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
-$a->strings["OStatus support is disabled. Contact can't be added."] = "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
-$a->strings["The network type couldn't be detected. Contact can't be added."] = "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden.";
-$a->strings["Please answer the following:"] = "Bitte beantworte folgendes:";
-$a->strings["Does %s know you?"] = "Kennt %s Dich?";
-$a->strings["Add a personal note:"] = "Eine persönliche Notiz beifügen:";
-$a->strings["Your Identity Address:"] = "Adresse Deines Profils:";
-$a->strings["Profile URL"] = "Profil URL";
-$a->strings["Contact added"] = "Kontakt hinzugefügt";
 $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
 $a->strings["Suggest Friends"] = "Kontakte vorschlagen";
 $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
-$a->strings["Group created."] = "Gruppe erstellt.";
-$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen.";
-$a->strings["Group not found."] = "Gruppe nicht gefunden.";
-$a->strings["Group name changed."] = "Gruppenname geändert.";
-$a->strings["Permission denied"] = "Zugriff verweigert";
-$a->strings["Save Group"] = "Gruppe speichern";
-$a->strings["Create a group of contacts/friends."] = "Eine Kontaktgruppe anlegen.";
-$a->strings["Group removed."] = "Gruppe entfernt.";
-$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
-$a->strings["Group Editor"] = "Gruppeneditor";
-$a->strings["Members"] = "Mitglieder";
-$a->strings["All Contacts"] = "Alle Kontakte";
-$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen";
 $a->strings["No profile"] = "Kein Profil";
 $a->strings["Help:"] = "Hilfe:";
-$a->strings["Not Found"] = "Nicht gefunden";
 $a->strings["Page not found."] = "Seite nicht gefunden.";
 $a->strings["Welcome to %s"] = "Willkommen zu %s";
 $a->strings["Total invitation limit exceeded."] = "Limit für Einladungen erreicht.";
@@ -919,12 +978,10 @@ $a->strings["Enter your email address and submit to have your password reset. Th
 $a->strings["Nickname or Email: "] = "Spitzname oder E-Mail:";
 $a->strings["Reset"] = "Zurücksetzen";
 $a->strings["System down for maintenance"] = "System zur Wartung abgeschaltet";
-$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten";
-$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast.";
-$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten aus: ";
 $a->strings["No keywords to match. Please add keywords to your default profile."] = "Keine Schlüsselwörter zum Abgleichen gefunden. Bitte füge einige Schlüsselwörter zu Deinem Standardprofil hinzu.";
 $a->strings["is interested in:"] = "ist interessiert an:";
 $a->strings["Profile Match"] = "Profilübereinstimmungen";
+$a->strings["No matches"] = "Keine Übereinstimmungen";
 $a->strings["Mood"] = "Stimmung";
 $a->strings["Set your current mood and tell your friends"] = "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten";
 $a->strings["Welcome to Friendica"] = "Willkommen bei Friendica";
@@ -958,14 +1015,10 @@ $a->strings["Friendica respects your privacy. By default, your posts will only s
 $a->strings["Getting Help"] = "Hilfe bekommen";
 $a->strings["Go to the Help Section"] = "Zum Hilfe Abschnitt gehen";
 $a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten.";
-$a->strings["Visit %s's profile [%s]"] = "Besuche %ss Profil [%s]";
-$a->strings["Edit contact"] = "Kontakt bearbeiten";
 $a->strings["Contacts who are not members of a group"] = "Kontakte, die keiner Gruppe zugewiesen sind";
 $a->strings["No more system notifications."] = "Keine weiteren Systembenachrichtigungen.";
 $a->strings["System Notifications"] = "Systembenachrichtigungen";
 $a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht.";
-$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
-$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet.";
 $a->strings["Subscribing to OStatus contacts"] = "OStatus Kontakten folgen";
 $a->strings["No contact provided."] = "Keine Kontakte gefunden.";
 $a->strings["Couldn't fetch information for contact."] = "Konnte die Kontaktinformationen nicht einholen.";
@@ -974,13 +1027,12 @@ $a->strings["Done"] = "Erledigt";
 $a->strings["success"] = "Erfolg";
 $a->strings["failed"] = "Fehlgeschlagen";
 $a->strings["Keep this window open until done."] = "Lasse dieses Fenster offen, bis der Vorgang abgeschlossen ist.";
+$a->strings["Not Extended"] = "Nicht erweitert.";
 $a->strings["Poke/Prod"] = "Anstupsen";
 $a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen";
 $a->strings["Recipient"] = "Empfänger";
 $a->strings["Choose what you wish to do to recipient"] = "Was willst Du mit dem Empfänger machen:";
 $a->strings["Make this post private"] = "Diesen Beitrag privat machen";
-$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt.";
-$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
 $a->strings["Image uploaded but image cropping failed."] = "Bild hochgeladen, aber das Zuschneiden schlug fehl.";
 $a->strings["Image size reduction [%s] failed."] = "Verkleinern der Bildgröße von [%s] scheiterte.";
 $a->strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Drücke Umschalt+Neu Laden oder leere den Browser-Cache, falls das neue Foto nicht gleich angezeigt wird.";
@@ -998,34 +1050,12 @@ $a->strings["Please adjust the image cropping for optimum viewing."] = "Passe bi
 $a->strings["Done Editing"] = "Bearbeitung abgeschlossen";
 $a->strings["Image uploaded successfully."] = "Bild erfolgreich hochgeladen.";
 $a->strings["Image upload failed."] = "Hochladen des Bildes gescheitert.";
+$a->strings["Permission denied"] = "Zugriff verweigert";
 $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner.";
 $a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit";
+$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen";
 $a->strings["Visible To"] = "Sichtbar für";
 $a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profilzugriff)";
-$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet.";
-$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern.";
-$a->strings["Registration successful."] = "Registrierung erfolgreich.";
-$a->strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden.";
-$a->strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden.";
-$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal.";
-$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst.";
-$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.";
-$a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): ";
-$a->strings["Include your profile in member directory?"] = "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?";
-$a->strings["Note for the admin"] = "Hinweis für den Admin";
-$a->strings["Leave a message for the admin, why you want to join this node"] = "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest.";
-$a->strings["Membership on this site is by invitation only."] = "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich.";
-$a->strings["Your invitation ID: "] = "ID Deiner Einladung: ";
-$a->strings["Registration"] = "Registrierung";
-$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):";
-$a->strings["Your Email Address: "] = "Deine E-Mail-Adresse: ";
-$a->strings["New Password:"] = "Neues Passwort:";
-$a->strings["Leave empty for an auto generated password."] = "Leer lassen um das Passwort automatisch zu generieren.";
-$a->strings["Confirm:"] = "Bestätigen:";
-$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@\$sitename</strong>' sein.";
-$a->strings["Choose a nickname: "] = "Spitznamen wählen: ";
-$a->strings["Import"] = "Import";
-$a->strings["Import your profile to this friendica instance"] = "Importiere Dein Profil auf diese Friendica Instanz";
 $a->strings["Account approved."] = "Konto freigegeben.";
 $a->strings["Registration revoked for %s"] = "Registrierung für %s wurde zurückgezogen";
 $a->strings["Please login."] = "Bitte melde Dich an.";
@@ -1034,190 +1064,6 @@ $a->strings["This will completely remove your account. Once this has been done i
 $a->strings["Please enter your password for verification:"] = "Bitte gib Dein Passwort zur Verifikation ein:";
 $a->strings["Resubscribing to OStatus contacts"] = "Erneuern der OStatus Abonements";
 $a->strings["Error"] = "Fehler";
-$a->strings["everybody"] = "jeder";
-$a->strings["Account"] = "Nutzerkonto";
-$a->strings["Additional features"] = "Zusätzliche Features";
-$a->strings["Display"] = "Anzeige";
-$a->strings["Social Networks"] = "Soziale Netzwerke";
-$a->strings["Plugins"] = "Plugins";
-$a->strings["Connected apps"] = "Verbundene Programme";
-$a->strings["Export personal data"] = "Persönliche Daten exportieren";
-$a->strings["Remove account"] = "Konto löschen";
-$a->strings["Missing some important data!"] = "Wichtige Daten fehlen!";
-$a->strings["Update"] = "Aktualisierungen";
-$a->strings["Failed to connect with email account using the settings provided."] = "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich.";
-$a->strings["Email settings updated."] = "E-Mail Einstellungen bearbeitet.";
-$a->strings["Features updated"] = "Features aktualisiert";
-$a->strings["Relocate message has been send to your contacts"] = "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet.";
-$a->strings["Empty passwords are not allowed. Password unchanged."] = "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert.";
-$a->strings["Wrong password."] = "Falsches Passwort.";
-$a->strings["Password changed."] = "Passwort geändert.";
-$a->strings["Password update failed. Please try again."] = "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal.";
-$a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen.";
-$a->strings[" Name too short."] = " Name ist zu kurz.";
-$a->strings["Wrong Password"] = "Falsches Passwort";
-$a->strings[" Not valid email."] = " Keine gültige E-Mail.";
-$a->strings[" Cannot change to that email."] = "Ändern der E-Mail nicht möglich. ";
-$a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt.";
-$a->strings["Private forum has no privacy permissions and no default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte.";
-$a->strings["Settings updated."] = "Einstellungen aktualisiert.";
-$a->strings["Add application"] = "Programm hinzufügen";
-$a->strings["Save Settings"] = "Einstellungen speichern";
-$a->strings["Consumer Key"] = "Consumer Key";
-$a->strings["Consumer Secret"] = "Consumer Secret";
-$a->strings["Redirect"] = "Umleiten";
-$a->strings["Icon url"] = "Icon URL";
-$a->strings["You can't edit this application."] = "Du kannst dieses Programm nicht bearbeiten.";
-$a->strings["Connected Apps"] = "Verbundene Programme";
-$a->strings["Client key starts with"] = "Anwenderschlüssel beginnt mit";
-$a->strings["No name"] = "Kein Name";
-$a->strings["Remove authorization"] = "Autorisierung entziehen";
-$a->strings["No Plugin settings configured"] = "Keine Plugin-Einstellungen konfiguriert";
-$a->strings["Plugin Settings"] = "Plugin-Einstellungen";
-$a->strings["Off"] = "Aus";
-$a->strings["On"] = "An";
-$a->strings["Additional Features"] = "Zusätzliche Features";
-$a->strings["General Social Media Settings"] = "Allgemeine Einstellungen zu Sozialen Medien";
-$a->strings["Disable intelligent shortening"] = "Intelligentes Link kürzen ausschalten";
-$a->strings["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."] = "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt.";
-$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen";
-$a->strings["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."] = "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,.";
-$a->strings["Default group for OStatus contacts"] = "Voreingestellte Gruppe für OStatus Kontakte";
-$a->strings["Your legacy GNU Social account"] = "Dein alter GNU Social Account";
-$a->strings["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."] = "Wenn du deinen alten GNU Socual/Statusnet Accountnamen hier angibst (Format name@domain.tld) werden deine Kontakte automatisch hinzugefügt. Dieses Feld wird geleert, wenn die Kontakte hinzugefügt wurden.";
-$a->strings["Repair OStatus subscriptions"] = "OStatus Abonnements reparieren";
-$a->strings["Built-in support for %s connectivity is %s"] = "Eingebaute Unterstützung für Verbindungen zu %s ist %s";
-$a->strings["enabled"] = "eingeschaltet";
-$a->strings["disabled"] = "ausgeschaltet";
-$a->strings["GNU Social (OStatus)"] = "GNU Social (OStatus)";
-$a->strings["Email access is disabled on this site."] = "Zugriff auf E-Mails für diese Seite deaktiviert.";
-$a->strings["Email/Mailbox Setup"] = "E-Mail/Postfach-Einstellungen";
-$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Wenn Du mit E-Mail-Kontakten über diesen Service kommunizieren möchtest (optional), gib bitte die Einstellungen für Dein Postfach an.";
-$a->strings["Last successful email check:"] = "Letzter erfolgreicher E-Mail Check";
-$a->strings["IMAP server name:"] = "IMAP-Server-Name:";
-$a->strings["IMAP port:"] = "IMAP-Port:";
-$a->strings["Security:"] = "Sicherheit:";
-$a->strings["None"] = "Keine";
-$a->strings["Email login name:"] = "E-Mail-Login-Name:";
-$a->strings["Email password:"] = "E-Mail-Passwort:";
-$a->strings["Reply-to address:"] = "Reply-to Adresse:";
-$a->strings["Send public posts to all email contacts:"] = "Sende öffentliche Beiträge an alle E-Mail-Kontakte:";
-$a->strings["Action after import:"] = "Aktion nach Import:";
-$a->strings["Move to folder"] = "In einen Ordner verschieben";
-$a->strings["Move to folder:"] = "In diesen Ordner verschieben:";
-$a->strings["No special theme for mobile devices"] = "Kein spezielles Theme für mobile Geräte verwenden.";
-$a->strings["Display Settings"] = "Anzeige-Einstellungen";
-$a->strings["Display Theme:"] = "Theme:";
-$a->strings["Mobile Theme:"] = "Mobiles Theme";
-$a->strings["Suppress warning of insecure networks"] = "Warnung wegen unsicheren Netzwerken unterdrücken";
-$a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = "Soll das System Warnungen unterdrücken, die angezeigt werden weil von dir eingerichtete Kontakt-Gruppen Accounts aus Netzwerken beinhalten, die keine nicht öffentlichen Beiträge empfangen können.";
-$a->strings["Update browser every xx seconds"] = "Browser alle xx Sekunden aktualisieren";
-$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Minimum sind 10 Sekunden. Gib -1 ein um abzuschalten.";
-$a->strings["Number of items to display per page:"] = "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: ";
-$a->strings["Maximum of 100 items"] = "Maximal 100 Beiträge";
-$a->strings["Number of items to display per page when viewed from mobile device:"] = "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:";
-$a->strings["Don't show emoticons"] = "Keine Smilies anzeigen";
-$a->strings["Calendar"] = "Kalender";
-$a->strings["Beginning of week:"] = "Wochenbeginn:";
-$a->strings["Don't show notices"] = "Info-Popups nicht anzeigen";
-$a->strings["Infinite scroll"] = "Endloses Scrollen";
-$a->strings["Automatic updates only at the top of the network page"] = "Automatische Updates nur, wenn Du oben auf der Netzwerkseite bist.";
-$a->strings["Bandwith Saver Mode"] = "Bandbreiten-Spar-Modus";
-$a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = "Wenn aktiviert, wird der eingebettete Inhalt nicht automatisch aktualisiert. In diesem Fall Seite bitte neu laden.";
-$a->strings["General Theme Settings"] = "Allgemeine Themeneinstellungen";
-$a->strings["Custom Theme Settings"] = "Benutzerdefinierte Theme Einstellungen";
-$a->strings["Content Settings"] = "Einstellungen zum Inhalt";
-$a->strings["Theme settings"] = "Themeneinstellungen";
-$a->strings["Account Types"] = "Kontenarten";
-$a->strings["Personal Page Subtypes"] = "Unterarten der persönlichen Seite";
-$a->strings["Community Forum Subtypes"] = "Unterarten des Gemeinschaftsforums";
-$a->strings["Personal Page"] = "Persönliche Seite";
-$a->strings["This account is a regular personal profile"] = "Dieses Konto ist ein normales persönliches Profil";
-$a->strings["Organisation Page"] = "Organisationsseite";
-$a->strings["This account is a profile for an organisation"] = "Diese Konto ist ein Profil für eine Organisation";
-$a->strings["News Page"] = "Nachrichtenseite";
-$a->strings["This account is a news account/reflector"] = "Dieses Konto ist ein News-Konto bzw. -Spiegel";
-$a->strings["Community Forum"] = "Gemeinschaftsforum";
-$a->strings["This account is a community forum where people can discuss with each other"] = "Dieses Konto ist ein Gemeinschaftskonto wo sich Leute untereinander austauschen können";
-$a->strings["Normal Account Page"] = "Normales Konto";
-$a->strings["This account is a normal personal profile"] = "Dieses Konto ist ein normales persönliches Profil";
-$a->strings["Soapbox Page"] = "Marktschreier-Konto";
-$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert";
-$a->strings["Public Forum"] = "Öffentliches Forum";
-$a->strings["Automatically approve all contact requests"] = "Bestätige alle Kontaktanfragen automatisch";
-$a->strings["Automatic Friend Page"] = "Automatische Freunde Seite";
-$a->strings["Automatically approve all connection/friend requests as friends"] = "Kontaktanfragen werden automatisch als Freund akzeptiert";
-$a->strings["Private Forum [Experimental]"] = "Privates Forum [Versuchsstadium]";
-$a->strings["Private forum - approved members only"] = "Privates Forum, nur für Mitglieder";
-$a->strings["OpenID:"] = "OpenID:";
-$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID.";
-$a->strings["Publish your default profile in your local site directory?"] = "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?";
-$a->strings["Publish your default profile in the global social directory?"] = "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
-$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?";
-$a->strings["If enabled, posting public messages to Diaspora and other networks isn't possible."] = "Wenn aktiviert, ist das senden öffentliche Nachrichten zu Diaspora und anderen Netzwerken nicht möglich";
-$a->strings["Allow friends to post to your profile page?"] = "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?";
-$a->strings["Allow friends to tag your posts?"] = "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?";
-$a->strings["Allow us to suggest you as a potential friend to new members?"] = "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?";
-$a->strings["Permit unknown people to send you private mail?"] = "Dürfen Dir Unbekannte private Nachrichten schicken?";
-$a->strings["Profile is <strong>not published</strong>."] = "Profil ist <strong>nicht veröffentlicht</strong>.";
-$a->strings["Your Identity Address is <strong>'%s'</strong> or '%s'."] = "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'.";
-$a->strings["Automatically expire posts after this many days:"] = "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:";
-$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht.";
-$a->strings["Advanced expiration settings"] = "Erweiterte Verfallseinstellungen";
-$a->strings["Advanced Expiration"] = "Erweitertes Verfallen";
-$a->strings["Expire posts:"] = "Beiträge verfallen lassen:";
-$a->strings["Expire personal notes:"] = "Persönliche Notizen verfallen lassen:";
-$a->strings["Expire starred posts:"] = "Markierte Beiträge verfallen lassen:";
-$a->strings["Expire photos:"] = "Fotos verfallen lassen:";
-$a->strings["Only expire posts by others:"] = "Nur Beiträge anderer verfallen:";
-$a->strings["Account Settings"] = "Kontoeinstellungen";
-$a->strings["Password Settings"] = "Passwort-Einstellungen";
-$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer, außer Du willst das Passwort ändern";
-$a->strings["Current Password:"] = "Aktuelles Passwort:";
-$a->strings["Your current password to confirm the changes"] = "Dein aktuelles Passwort um die Änderungen zu bestätigen";
-$a->strings["Password:"] = "Passwort:";
-$a->strings["Basic Settings"] = "Grundeinstellungen";
-$a->strings["Email Address:"] = "E-Mail-Adresse:";
-$a->strings["Your Timezone:"] = "Deine Zeitzone:";
-$a->strings["Your Language:"] = "Deine Sprache:";
-$a->strings["Set the language we use to show you friendica interface and to send you emails"] = "Wähle die Sprache, in der wir Dir die Friendica-Oberfläche präsentieren sollen und Dir E-Mail schicken";
-$a->strings["Default Post Location:"] = "Standardstandort:";
-$a->strings["Use Browser Location:"] = "Standort des Browsers verwenden:";
-$a->strings["Security and Privacy Settings"] = "Sicherheits- und Privatsphäre-Einstellungen";
-$a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl vonKontaktanfragen/Tag:";
-$a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)";
-$a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträge";
-$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)";
-$a->strings["Show to Groups"] = "Zeige den Gruppen";
-$a->strings["Show to Contacts"] = "Zeige den Kontakten";
-$a->strings["Default Private Post"] = "Privater Standardbeitrag";
-$a->strings["Default Public Post"] = "Öffentlicher Standardbeitrag";
-$a->strings["Default Permissions for New Posts"] = "Standardberechtigungen für neue Beiträge";
-$a->strings["Maximum private messages per day from unknown people:"] = "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:";
-$a->strings["Notification Settings"] = "Benachrichtigungseinstellungen";
-$a->strings["By default post a status message when:"] = "Standardmäßig eine Statusnachricht posten, wenn:";
-$a->strings["accepting a friend request"] = "– Du eine Kontaktanfrage akzeptierst";
-$a->strings["joining a forum/community"] = "– Du einem Forum/einer Gemeinschaftsseite beitrittst";
-$a->strings["making an <em>interesting</em> profile change"] = "– Du eine <em>interessante</em> Änderung an Deinem Profil durchführst";
-$a->strings["Send a notification email when:"] = "Benachrichtigungs-E-Mail senden wenn:";
-$a->strings["You receive an introduction"] = "– Du eine Kontaktanfrage erhältst";
-$a->strings["Your introductions are confirmed"] = "– eine Deiner Kontaktanfragen akzeptiert wurde";
-$a->strings["Someone writes on your profile wall"] = "– jemand etwas auf Deine Pinnwand schreibt";
-$a->strings["Someone writes a followup comment"] = "– jemand auch einen Kommentar verfasst";
-$a->strings["You receive a private message"] = "– Du eine private Nachricht erhältst";
-$a->strings["You receive a friend suggestion"] = "– Du eine Empfehlung erhältst";
-$a->strings["You are tagged in a post"] = "– Du in einem Beitrag erwähnt wirst";
-$a->strings["You are poked/prodded/etc. in a post"] = "– Du von jemandem angestupst oder sonstwie behandelt wirst";
-$a->strings["Activate desktop notifications"] = "Desktop Benachrichtigungen einschalten";
-$a->strings["Show desktop popup on new notifications"] = "Desktop Benachrichtigungen einschalten";
-$a->strings["Text-only notification emails"] = "Benachrichtigungs E-Mail als Rein-Text.";
-$a->strings["Send text only notification emails, without the html part"] = "Sende Benachrichtigungs E-Mail als Rein-Text - ohne HTML-Teil";
-$a->strings["Advanced Account/Page Type Settings"] = "Erweiterte Konto-/Seitentyp-Einstellungen";
-$a->strings["Change the behaviour of this account for special situations"] = "Verhalten dieses Kontos in bestimmten Situationen:";
-$a->strings["Relocate"] = "Umziehen";
-$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button.";
-$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
-$a->strings["link"] = "Link";
 $a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s";
 $a->strings["Do you really want to delete this suggestion?"] = "Möchtest Du wirklich diese Empfehlung löschen?";
 $a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde, versuche es bitte in 24 Stunden noch einmal.";
@@ -1225,30 +1071,45 @@ $a->strings["Ignore/Hide"] = "Ignorieren/Verbergen";
 $a->strings["Tag removed"] = "Tag entfernt";
 $a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen";
 $a->strings["Select a tag to remove: "] = "Wähle ein Tag zum Entfernen aus: ";
-$a->strings["Export account"] = "Account exportieren";
-$a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Exportiere Deine Accountinformationen und Kontakte. Verwende dies um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen.";
-$a->strings["Export all"] = "Alles exportieren";
-$a->strings["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)"] = "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert).";
-$a->strings["Move account"] = "Account umziehen";
+$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal.";
+$a->strings["Import"] = "Import";
+$a->strings["Move account"] = "Account umziehen";
 $a->strings["You can import an account from another Friendica server."] = "Du kannst einen Account von einem anderen Friendica Server importieren.";
 $a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Du musst Deinen Account vom alten Server exportieren und hier hochladen. Wir stellen Deinen alten Account mit all Deinen Kontakten wieder her. Wir werden auch versuchen all Deine Kontakte darüber zu informieren, dass Du hierher umgezogen bist.";
 $a->strings["This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"] = "Dieses Feature ist experimentell. Wir können keine Kontakte vom OStatus Netzwerk (GNU Social/Statusnet) oder von Diaspora importieren";
 $a->strings["Account file"] = "Account Datei";
 $a->strings["To export your account, go to \"Settings->Export your personal data\" and select \"Export account\""] = "Um Deinen Account zu exportieren, rufe \"Einstellungen -> Persönliche Daten exportieren\" auf und wähle \"Account exportieren\"";
 $a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]";
-$a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?";
-$a->strings["Delete Video"] = "Video Löschen";
-$a->strings["No videos selected"] = "Keine Videos  ausgewählt";
-$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
-$a->strings["View Album"] = "Album betrachten";
-$a->strings["Recent Videos"] = "Neueste Videos";
-$a->strings["Upload New Videos"] = "Neues Video hochladen";
+$a->strings["No contacts."] = "Keine Kontakte.";
 $a->strings["Access denied."] = "Zugriff verweigert.";
 $a->strings["Invalid request."] = "Ungültige Anfrage";
 $a->strings["Sorry, maybe your upload is bigger than the PHP configuration allows"] = "Entschuldige, die Datei scheint größer zu sein als es die PHP Konfiguration erlaubt.";
 $a->strings["Or - did you try to upload an empty file?"] = "Oder - hast Du versucht, eine leere Datei hochzuladen?";
 $a->strings["File exceeds size limit of %s"] = "Die Datei ist größer als das erlaubte Limit von %s";
 $a->strings["File upload failed."] = "Hochladen der Datei fehlgeschlagen.";
+$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen.";
+$a->strings["No recipient selected."] = "Kein Empfänger gewählt.";
+$a->strings["Unable to check your home location."] = "Konnte Deinen Heimatort nicht bestimmen.";
+$a->strings["Message could not be sent."] = "Nachricht konnte nicht gesendet werden.";
+$a->strings["Message collection failure."] = "Konnte Nachrichten nicht abrufen.";
+$a->strings["Message sent."] = "Nachricht gesendet.";
+$a->strings["No recipient."] = "Kein Empfänger.";
+$a->strings["Send Private Message"] = "Private Nachricht senden";
+$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern.";
+$a->strings["To:"] = "An:";
+$a->strings["Subject:"] = "Betreff:";
+$a->strings["Source (bbcode) text:"] = "Quelle (bbcode) Text:";
+$a->strings["Source (Diaspora) text to convert to BBcode:"] = "Eingabe (Diaspora) nach BBCode zu konvertierender Text:";
+$a->strings["Source input: "] = "Originaltext:";
+$a->strings["bb2html (raw HTML): "] = "bb2html (reines HTML): ";
+$a->strings["bb2html: "] = "bb2html: ";
+$a->strings["bb2html2bb: "] = "bb2html2bb: ";
+$a->strings["bb2md: "] = "bb2md: ";
+$a->strings["bb2md2html: "] = "bb2md2html: ";
+$a->strings["bb2dia2bb: "] = "bb2dia2bb: ";
+$a->strings["bb2md2html2bb: "] = "bb2md2html2bb: ";
+$a->strings["Source input (Diaspora format): "] = "Originaltext (Diaspora Format): ";
+$a->strings["diaspora2bb: "] = "diaspora2bb: ";
 $a->strings["View"] = "Ansehen";
 $a->strings["Previous"] = "Vorherige";
 $a->strings["Next"] = "Nächste";
@@ -1257,92 +1118,8 @@ $a->strings["User not found"] = "Nutzer nicht gefunden";
 $a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt.";
 $a->strings["No exportable data found"] = "Keine exportierbaren Daten gefunden";
 $a->strings["calendar"] = "Kalender";
-$a->strings["%d contact edited."] = array(
-       0 => "%d Kontakt bearbeitet.",
-       1 => "%d Kontakte bearbeitet.",
-);
-$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen.";
-$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden.";
-$a->strings["Contact updated."] = "Kontakt aktualisiert.";
-$a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdaten fehlgeschlagen.";
-$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert";
-$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben";
-$a->strings["Contact has been ignored"] = "Kontakt wurde ignoriert";
-$a->strings["Contact has been unignored"] = "Kontakt wird nicht mehr ignoriert";
-$a->strings["Contact has been archived"] = "Kontakt wurde archiviert";
-$a->strings["Contact has been unarchived"] = "Kontakt wurde aus dem Archiv geholt";
-$a->strings["Drop contact"] = "Kontakt löschen";
-$a->strings["Do you really want to delete this contact?"] = "Möchtest Du wirklich diesen Kontakt löschen?";
-$a->strings["Contact has been removed."] = "Kontakt wurde entfernt.";
-$a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft";
-$a->strings["You are sharing with %s"] = "Du teilst mit %s";
-$a->strings["%s is sharing with you"] = "%s teilt mit Dir";
-$a->strings["Private communications are not available for this contact."] = "Private Kommunikation ist für diesen Kontakt nicht verfügbar.";
-$a->strings["Never"] = "Niemals";
-$a->strings["(Update was successful)"] = "(Aktualisierung war erfolgreich)";
-$a->strings["(Update was not successful)"] = "(Aktualisierung war nicht erfolgreich)";
-$a->strings["Suggest friends"] = "Kontakte vorschlagen";
-$a->strings["Network type: %s"] = "Netzwerktyp: %s";
-$a->strings["Communications lost with this contact!"] = "Verbindungen mit diesem Kontakt verloren!";
-$a->strings["Fetch further information for feeds"] = "Weitere Informationen zu Feeds holen";
-$a->strings["Disabled"] = "Deaktiviert";
-$a->strings["Fetch information"] = "Beziehe Information";
-$a->strings["Fetch information and keywords"] = "Beziehe Information und Schlüsselworte";
-$a->strings["Contact"] = "Kontakt";
-$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit";
-$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines Deiner Profile das angezeigt werden soll, wenn %s Dein Profil aufruft.";
-$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen";
-$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbeiten";
-$a->strings["Block/Unblock contact"] = "Kontakt blockieren/freischalten";
-$a->strings["Ignore contact"] = "Ignoriere den Kontakt";
-$a->strings["Repair URL settings"] = "URL Einstellungen reparieren";
-$a->strings["View conversations"] = "Unterhaltungen anzeigen";
-$a->strings["Last update:"] = "Letzte Aktualisierung: ";
-$a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren";
-$a->strings["Update now"] = "Jetzt aktualisieren";
-$a->strings["Unblock"] = "Entsperren";
-$a->strings["Block"] = "Sperren";
-$a->strings["Unignore"] = "Ignorieren aufheben";
-$a->strings["Ignore"] = "Ignorieren";
-$a->strings["Currently blocked"] = "Derzeit geblockt";
-$a->strings["Currently ignored"] = "Derzeit ignoriert";
-$a->strings["Currently archived"] = "Momentan archiviert";
-$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor Anderen";
-$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein";
-$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen";
-$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt.";
-$a->strings["Blacklisted keywords"] = "Blacklistete Schlüsselworte ";
-$a->strings["Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"] = "Komma-Separierte Liste mit Schlüsselworten, die nicht in Hashtags konvertiert werden, wenn \"Beziehe Information und Schlüsselworte\" aktiviert wurde";
-$a->strings["Actions"] = "Aktionen";
-$a->strings["Contact Settings"] = "Kontakteinstellungen";
-$a->strings["Suggestions"] = "Kontaktvorschläge";
-$a->strings["Suggest potential friends"] = "Kontakte vorschlagen";
-$a->strings["Show all contacts"] = "Alle Kontakte anzeigen";
-$a->strings["Unblocked"] = "Ungeblockt";
-$a->strings["Only show unblocked contacts"] = "Nur nicht-blockierte Kontakte anzeigen";
-$a->strings["Blocked"] = "Geblockt";
-$a->strings["Only show blocked contacts"] = "Nur blockierte Kontakte anzeigen";
-$a->strings["Ignored"] = "Ignoriert";
-$a->strings["Only show ignored contacts"] = "Nur ignorierte Kontakte anzeigen";
-$a->strings["Archived"] = "Archiviert";
-$a->strings["Only show archived contacts"] = "Nur archivierte Kontakte anzeigen";
-$a->strings["Hidden"] = "Verborgen";
-$a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen";
-$a->strings["Search your contacts"] = "Suche in deinen Kontakten";
-$a->strings["Results for: %s"] = "Ergebnisse für: %s";
-$a->strings["Archive"] = "Archivieren";
-$a->strings["Unarchive"] = "Aus Archiv zurückholen";
-$a->strings["Batch Actions"] = "Stapelverarbeitung";
-$a->strings["View all contacts"] = "Alle Kontakte anzeigen";
-$a->strings["View all common friends"] = "Alle Kontakte anzeigen";
-$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen";
-$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft";
-$a->strings["is a fan of yours"] = "ist ein Fan von dir";
-$a->strings["you are a fan of"] = "Du bist Fan von";
-$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
-$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
-$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
-$a->strings["Delete contact"] = "Lösche den Kontakt";
+$a->strings["Not available."] = "Nicht verfügbar.";
+$a->strings["No results."] = "Keine Ergebnisse.";
 $a->strings["Profile not found."] = "Profil nicht gefunden.";
 $a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde.";
 $a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich.";
@@ -1361,8 +1138,47 @@ $a->strings["The ID provided by your system is a duplicate on our system. It sho
 $a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden.";
 $a->strings["Unable to update your contact profile details on our system"] = "Die Updates für Dein Profil konnten nicht gespeichert werden";
 $a->strings["%1\$s has joined %2\$s"] = "%1\$s ist %2\$s beigetreten";
-$a->strings["Item not found"] = "Beitrag nicht gefunden";
-$a->strings["Edit post"] = "Beitrag bearbeiten";
+$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert.";
+$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung.";
+$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden.";
+$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse.";
+$a->strings["%d required parameter was not found at the given location"] = array(
+       0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden",
+       1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden",
+);
+$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen.";
+$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler.";
+$a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
+$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten.";
+$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
+$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen.";
+$a->strings["Invalid locator"] = "Ungültiger Locator";
+$a->strings["Invalid email address."] = "Ungültige E-Mail-Adresse.";
+$a->strings["This account has not been configured for email. Request failed."] = "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen.";
+$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt.";
+$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst.";
+$a->strings["Invalid profile URL."] = "Ungültige Profil-URL.";
+$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet.";
+$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems.   ";
+$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen.";
+$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an.";
+$a->strings["Confirm"] = "Bestätigen";
+$a->strings["Hide this contact"] = "Verberge diesen Kontakt";
+$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
+$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s.";
+$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:";
+$a->strings["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>."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten.";
+$a->strings["Friend/Connection Request"] = "Kontaktanfrage";
+$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca";
+$a->strings["Please answer the following:"] = "Bitte beantworte folgendes:";
+$a->strings["Does %s know you?"] = "Kennt %s Dich?";
+$a->strings["Add a personal note:"] = "Eine persönliche Notiz beifügen:";
+$a->strings["StatusNet/Federated Social Web"] = "StatusNet/Federated Social Web";
+$a->strings[" - please do not use this form.  Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste.";
+$a->strings["Your Identity Address:"] = "Adresse Deines Profils:";
+$a->strings["Submit Request"] = "Anfrage abschicken";
+$a->strings["People Search - %s"] = "Personensuche - %s";
+$a->strings["Forum Search - %s"] = "Forensuche - %s";
 $a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden bevor sie beginnt.";
 $a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
 $a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
@@ -1376,7 +1192,13 @@ $a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpasse
 $a->strings["Description:"] = "Beschreibung";
 $a->strings["Title:"] = "Titel:";
 $a->strings["Share this event"] = "Veranstaltung teilen";
-$a->strings["Files"] = "Dateien";
+$a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen";
+$a->strings["Event removed"] = "Veranstaltung enfternt";
+$a->strings["You already added this contact."] = "Du hast den Kontakt bereits hinzugefügt.";
+$a->strings["Diaspora support isn't enabled. Contact can't be added."] = "Diaspora Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
+$a->strings["OStatus support is disabled. Contact can't be added."] = "OStatus Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden.";
+$a->strings["The network type couldn't be detected. Contact can't be added."] = "Der Netzwerktype wurde nicht erkannt. Der Kontakt kann nicht hinzugefügt werden.";
+$a->strings["Contact added"] = "Kontakt hinzugefügt";
 $a->strings["This is Friendica, version"] = "Dies ist Friendica, Version";
 $a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist";
 $a->strings["Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren.";
@@ -1385,24 +1207,29 @@ $a->strings["the bugtracker at github"] = "den Bugtracker auf github";
 $a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com";
 $a->strings["Installed plugins/addons/apps:"] = "Installierte Plugins/Erweiterungen/Apps:";
 $a->strings["No installed plugins/addons/apps"] = "Keine Plugins/Erweiterungen/Apps installiert";
-$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
-$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
-$a->strings["System error. Post not saved."] = "Systemfehler. Beitrag konnte nicht gespeichert werden.";
-$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
-$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
-$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest.";
-$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
-$a->strings["No recipient selected."] = "Kein Empfänger gewählt.";
+$a->strings["On this server the following remote servers are blocked."] = "Auf diesem Server werden die folgenden entfernten Server blockiert.";
+$a->strings["Reason for the block"] = "Begründung für die Blockierung";
+$a->strings["Group created."] = "Gruppe erstellt.";
+$a->strings["Could not create group."] = "Konnte die Gruppe nicht erstellen.";
+$a->strings["Group not found."] = "Gruppe nicht gefunden.";
+$a->strings["Group name changed."] = "Gruppenname geändert.";
+$a->strings["Save Group"] = "Gruppe speichern";
+$a->strings["Create a group of contacts/friends."] = "Eine Kontaktgruppe anlegen.";
+$a->strings["Group removed."] = "Gruppe entfernt.";
+$a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
+$a->strings["Delete Group"] = "Gruppe löschen";
+$a->strings["Group Editor"] = "Gruppeneditor";
+$a->strings["Edit Group Name"] = "Gruppen Name bearbeiten";
+$a->strings["Members"] = "Mitglieder";
+$a->strings["Remove Contact"] = "Kontakt löschen";
+$a->strings["Add Contact"] = "Kontakt hinzufügen";
+$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten";
+$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppenseiten wechseln, die Deine Kontoinformationen teilen oder zu denen Du „Verwalten“-Befugnisse bekommen hast.";
+$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten aus: ";
 $a->strings["Unable to locate contact information."] = "Konnte die Kontaktinformationen nicht finden.";
-$a->strings["Message could not be sent."] = "Nachricht konnte nicht gesendet werden.";
-$a->strings["Message collection failure."] = "Konnte Nachrichten nicht abrufen.";
-$a->strings["Message sent."] = "Nachricht gesendet.";
 $a->strings["Do you really want to delete this message?"] = "Möchtest Du wirklich diese Nachricht löschen?";
 $a->strings["Message deleted."] = "Nachricht gelöscht.";
 $a->strings["Conversation removed."] = "Unterhaltung gelöscht.";
-$a->strings["Send Private Message"] = "Private Nachricht senden";
-$a->strings["To:"] = "An:";
-$a->strings["Subject:"] = "Betreff:";
 $a->strings["No messages."] = "Keine Nachrichten.";
 $a->strings["Message not available."] = "Nachricht nicht verfügbar.";
 $a->strings["Delete message"] = "Nachricht löschen";
@@ -1417,16 +1244,30 @@ $a->strings["%d message"] = array(
        0 => "%d Nachricht",
        1 => "%d Nachrichten",
 );
-$a->strings["Not Extended"] = "Nicht erweitert.";
-$a->strings["{0} wants to be your friend"] = "{0} möchte mit Dir in Kontakt treten";
-$a->strings["{0} sent you a message"] = "{0} schickte Dir eine Nachricht";
-$a->strings["{0} requested registration"] = "{0} möchte sich registrieren";
-$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen.";
-$a->strings["Unable to check your home location."] = "Konnte Deinen Heimatort nicht bestimmen.";
-$a->strings["No recipient."] = "Kein Empfänger.";
-$a->strings["If you wish for %s to respond, please check that the privacy settings on your site allow private mail from unknown senders."] = "Wenn Du möchtest, dass %s Dir antworten kann, überprüfe Deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern.";
+$a->strings["Remove term"] = "Begriff entfernen";
+$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = array(
+       0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.",
+       1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.",
+);
+$a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden.";
+$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen.";
+$a->strings["Invalid contact."] = "Ungültiger Kontakt.";
+$a->strings["Commented Order"] = "Neueste Kommentare";
+$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren";
+$a->strings["Posted Order"] = "Neueste Beiträge";
+$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren";
+$a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht";
+$a->strings["New"] = "Neue";
+$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum";
+$a->strings["Shared Links"] = "Geteilte Links";
+$a->strings["Interesting Links"] = "Interessante Links";
+$a->strings["Starred"] = "Markierte";
+$a->strings["Favourite Posts"] = "Favorisierte Beiträge";
+$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
+$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet.";
 $a->strings["Recent Photos"] = "Neueste Fotos";
 $a->strings["Upload New Photos"] = "Neue Fotos hochladen";
+$a->strings["everybody"] = "jeder";
 $a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar";
 $a->strings["Album not found."] = "Album nicht gefunden.";
 $a->strings["Delete Album"] = "Album löschen";
@@ -1437,11 +1278,14 @@ $a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2
 $a->strings["a photo"] = "einem Foto";
 $a->strings["Image file is empty."] = "Bilddatei ist leer.";
 $a->strings["No photos selected"] = "Keine Bilder ausgewählt";
+$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
 $a->strings["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers.";
 $a->strings["Upload Photos"] = "Bilder hochladen";
 $a->strings["New album name: "] = "Name des neuen Albums: ";
 $a->strings["or existing album name: "] = "oder existierender Albumname: ";
 $a->strings["Do not show a status post for this upload"] = "Keine Status-Mitteilung für diesen Beitrag anzeigen";
+$a->strings["Show to Groups"] = "Zeige den Gruppen";
+$a->strings["Show to Contacts"] = "Zeige den Kontakten";
 $a->strings["Private Photo"] = "Privates Foto";
 $a->strings["Public Photo"] = "Öffentliches Foto";
 $a->strings["Edit Album"] = "Album bearbeiten";
@@ -1466,40 +1310,297 @@ $a->strings["Rotate CCW (left)"] = "Drehen EUS (links)";
 $a->strings["Private photo"] = "Privates Foto";
 $a->strings["Public photo"] = "Öffentliches Foto";
 $a->strings["Map"] = "Karte";
-$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert.";
-$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung.";
-$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden.";
-$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse.";
-$a->strings["%d required parameter was not found at the given location"] = array(
-       0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden",
-       1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden",
-);
-$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen.";
-$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler.";
-$a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
-$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten.";
-$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
-$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen.";
-$a->strings["Invalid locator"] = "Ungültiger Locator";
-$a->strings["Invalid email address."] = "Ungültige E-Mail-Adresse.";
-$a->strings["This account has not been configured for email. Request failed."] = "Dieses Konto ist nicht für E-Mail konfiguriert. Anfrage fehlgeschlagen.";
-$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt.";
-$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst.";
-$a->strings["Invalid profile URL."] = "Ungültige Profil-URL.";
-$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet.";
-$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems.   ";
-$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen.";
-$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an.";
-$a->strings["Confirm"] = "Bestätigen";
-$a->strings["Hide this contact"] = "Verberge diesen Kontakt";
-$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
-$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s.";
-$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:";
-$a->strings["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>."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten.";
-$a->strings["Friend/Connection Request"] = "Kontaktanfrage";
-$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca";
-$a->strings["StatusNet/Federated Social Web"] = "StatusNet/Federated Social Web";
-$a->strings[" - please do not use this form.  Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste.";
+$a->strings["View Album"] = "Album betrachten";
+$a->strings["Only logged in users are permitted to perform a probing."] = "Nur eingeloggten Benutzern ist das Untersuchen von Adressen gestattet.";
+$a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
+$a->strings["Profile deleted."] = "Profil gelöscht.";
+$a->strings["Profile-"] = "Profil-";
+$a->strings["New profile created."] = "Neues Profil angelegt.";
+$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar.";
+$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
+$a->strings["Marital Status"] = "Familienstand";
+$a->strings["Romantic Partner"] = "Romanze";
+$a->strings["Work/Employment"] = "Arbeit / Beschäftigung";
+$a->strings["Religion"] = "Religion";
+$a->strings["Political Views"] = "Politische Ansichten";
+$a->strings["Gender"] = "Geschlecht";
+$a->strings["Sexual Preference"] = "Sexuelle Vorlieben";
+$a->strings["XMPP"] = "XMPP";
+$a->strings["Homepage"] = "Webseite";
+$a->strings["Interests"] = "Interessen";
+$a->strings["Address"] = "Adresse";
+$a->strings["Location"] = "Wohnort";
+$a->strings["Profile updated."] = "Profil aktualisiert.";
+$a->strings[" and "] = " und ";
+$a->strings["public profile"] = "öffentliches Profil";
+$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s hat %2\$s geändert auf &ldquo;%3\$s&rdquo;";
+$a->strings[" - Visit %1\$s's %2\$s"] = " – %1\$ss %2\$s besuchen";
+$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s hat folgendes aktualisiert %2\$s, verändert wurde %3\$s.";
+$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen";
+$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?";
+$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:";
+$a->strings["Profile Actions"] = "Profilaktionen";
+$a->strings["Edit Profile Details"] = "Profil bearbeiten";
+$a->strings["Change Profile Photo"] = "Profilbild ändern";
+$a->strings["View this profile"] = "Dieses Profil anzeigen";
+$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden";
+$a->strings["Clone this profile"] = "Dieses Profil duplizieren";
+$a->strings["Delete this profile"] = "Dieses Profil löschen";
+$a->strings["Basic information"] = "Grundinformationen";
+$a->strings["Profile picture"] = "Profilbild";
+$a->strings["Preferences"] = "Vorlieben";
+$a->strings["Status information"] = "Status Informationen";
+$a->strings["Additional information"] = "Zusätzliche Informationen";
+$a->strings["Relation"] = "Beziehung";
+$a->strings["Your Gender:"] = "Dein Geschlecht:";
+$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
+$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software";
+$a->strings["Profile Name:"] = "Profilname:";
+$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.";
+$a->strings["Your Full Name:"] = "Dein kompletter Name:";
+$a->strings["Title/Description:"] = "Titel/Beschreibung:";
+$a->strings["Street Address:"] = "Adresse:";
+$a->strings["Locality/City:"] = "Wohnort:";
+$a->strings["Region/State:"] = "Region/Bundesstaat:";
+$a->strings["Postal/Zip Code:"] = "Postleitzahl:";
+$a->strings["Country:"] = "Land:";
+$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
+$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
+$a->strings["Since [date]:"] = "Seit [Datum]:";
+$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …";
+$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse";
+$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können.";
+$a->strings["Homepage URL:"] = "Adresse der Homepage:";
+$a->strings["Religious Views:"] = "Religiöse Ansichten:";
+$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
+$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)";
+$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
+$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
+$a->strings["Musical interests"] = "Musikalische Interessen";
+$a->strings["Books, literature"] = "Bücher, Literatur";
+$a->strings["Television"] = "Fernsehen";
+$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung";
+$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
+$a->strings["Love/romance"] = "Liebe/Romantik";
+$a->strings["Work/employment"] = "Arbeit/Anstellung";
+$a->strings["School/education"] = "Schule/Ausbildung";
+$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke";
+$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile";
+$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet.";
+$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern.";
+$a->strings["Registration successful."] = "Registrierung erfolgreich.";
+$a->strings["Your registration can not be processed."] = "Deine Registrierung konnte nicht verarbeitet werden.";
+$a->strings["Your registration is pending approval by the site owner."] = "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden.";
+$a->strings["You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "Du kannst dieses Formular auch (optional) mit Deiner OpenID ausfüllen, indem Du Deine OpenID angibst und 'Registrieren' klickst.";
+$a->strings["If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items."] = "Wenn Du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus.";
+$a->strings["Your OpenID (optional): "] = "Deine OpenID (optional): ";
+$a->strings["Include your profile in member directory?"] = "Soll Dein Profil im Nutzerverzeichnis angezeigt werden?";
+$a->strings["Note for the admin"] = "Hinweis für den Admin";
+$a->strings["Leave a message for the admin, why you want to join this node"] = "Hinterlasse eine Nachricht an den Admin, warum du einen Account auf dieser Instanz haben möchtest.";
+$a->strings["Membership on this site is by invitation only."] = "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich.";
+$a->strings["Your invitation ID: "] = "ID Deiner Einladung: ";
+$a->strings["Registration"] = "Registrierung";
+$a->strings["Your Full Name (e.g. Joe Smith, real or real-looking): "] = "Dein vollständiger Name (z.B. Hans Mustermann, echt oder echt erscheinend):";
+$a->strings["Your Email Address: "] = "Deine E-Mail-Adresse: ";
+$a->strings["New Password:"] = "Neues Passwort:";
+$a->strings["Leave empty for an auto generated password."] = "Leer lassen um das Passwort automatisch zu generieren.";
+$a->strings["Confirm:"] = "Bestätigen:";
+$a->strings["Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be '<strong>nickname@\$sitename</strong>'."] = "Wähle einen Spitznamen für Dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse Deines Profils auf dieser Seite wird '<strong>spitzname@\$sitename</strong>' sein.";
+$a->strings["Choose a nickname: "] = "Spitznamen wählen: ";
+$a->strings["Import your profile to this friendica instance"] = "Importiere Dein Profil auf diese Friendica Instanz";
+$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet.";
+$a->strings["Too Many Requests"] = "Zu viele Abfragen";
+$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.";
+$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind";
+$a->strings["Account"] = "Nutzerkonto";
+$a->strings["Additional features"] = "Zusätzliche Features";
+$a->strings["Display"] = "Anzeige";
+$a->strings["Social Networks"] = "Soziale Netzwerke";
+$a->strings["Plugins"] = "Plugins";
+$a->strings["Connected apps"] = "Verbundene Programme";
+$a->strings["Export personal data"] = "Persönliche Daten exportieren";
+$a->strings["Remove account"] = "Konto löschen";
+$a->strings["Missing some important data!"] = "Wichtige Daten fehlen!";
+$a->strings["Failed to connect with email account using the settings provided."] = "Verbindung zum E-Mail-Konto mit den angegebenen Einstellungen nicht möglich.";
+$a->strings["Email settings updated."] = "E-Mail Einstellungen bearbeitet.";
+$a->strings["Features updated"] = "Features aktualisiert";
+$a->strings["Relocate message has been send to your contacts"] = "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet.";
+$a->strings["Empty passwords are not allowed. Password unchanged."] = "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert.";
+$a->strings["Wrong password."] = "Falsches Passwort.";
+$a->strings["Password changed."] = "Passwort geändert.";
+$a->strings["Password update failed. Please try again."] = "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal.";
+$a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen.";
+$a->strings[" Name too short."] = " Name ist zu kurz.";
+$a->strings["Wrong Password"] = "Falsches Passwort";
+$a->strings[" Not valid email."] = " Keine gültige E-Mail.";
+$a->strings[" Cannot change to that email."] = "Ändern der E-Mail nicht möglich. ";
+$a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt.";
+$a->strings["Private forum has no privacy permissions and no default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte.";
+$a->strings["Settings updated."] = "Einstellungen aktualisiert.";
+$a->strings["Add application"] = "Programm hinzufügen";
+$a->strings["Save Settings"] = "Einstellungen speichern";
+$a->strings["Consumer Key"] = "Consumer Key";
+$a->strings["Consumer Secret"] = "Consumer Secret";
+$a->strings["Redirect"] = "Umleiten";
+$a->strings["Icon url"] = "Icon URL";
+$a->strings["You can't edit this application."] = "Du kannst dieses Programm nicht bearbeiten.";
+$a->strings["Connected Apps"] = "Verbundene Programme";
+$a->strings["Client key starts with"] = "Anwenderschlüssel beginnt mit";
+$a->strings["No name"] = "Kein Name";
+$a->strings["Remove authorization"] = "Autorisierung entziehen";
+$a->strings["No Plugin settings configured"] = "Keine Plugin-Einstellungen konfiguriert";
+$a->strings["Plugin Settings"] = "Plugin-Einstellungen";
+$a->strings["Off"] = "Aus";
+$a->strings["On"] = "An";
+$a->strings["Additional Features"] = "Zusätzliche Features";
+$a->strings["General Social Media Settings"] = "Allgemeine Einstellungen zu Sozialen Medien";
+$a->strings["Disable intelligent shortening"] = "Intelligentes Link kürzen ausschalten";
+$a->strings["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."] = "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt.";
+$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen";
+$a->strings["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."] = "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,.";
+$a->strings["Default group for OStatus contacts"] = "Voreingestellte Gruppe für OStatus Kontakte";
+$a->strings["Your legacy GNU Social account"] = "Dein alter GNU Social Account";
+$a->strings["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."] = "Wenn du deinen alten GNU Socual/Statusnet Accountnamen hier angibst (Format name@domain.tld) werden deine Kontakte automatisch hinzugefügt. Dieses Feld wird geleert, wenn die Kontakte hinzugefügt wurden.";
+$a->strings["Repair OStatus subscriptions"] = "OStatus Abonnements reparieren";
+$a->strings["Built-in support for %s connectivity is %s"] = "Eingebaute Unterstützung für Verbindungen zu %s ist %s";
+$a->strings["enabled"] = "eingeschaltet";
+$a->strings["disabled"] = "ausgeschaltet";
+$a->strings["GNU Social (OStatus)"] = "GNU Social (OStatus)";
+$a->strings["Email access is disabled on this site."] = "Zugriff auf E-Mails für diese Seite deaktiviert.";
+$a->strings["Email/Mailbox Setup"] = "E-Mail/Postfach-Einstellungen";
+$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Wenn Du mit E-Mail-Kontakten über diesen Service kommunizieren möchtest (optional), gib bitte die Einstellungen für Dein Postfach an.";
+$a->strings["Last successful email check:"] = "Letzter erfolgreicher E-Mail Check";
+$a->strings["IMAP server name:"] = "IMAP-Server-Name:";
+$a->strings["IMAP port:"] = "IMAP-Port:";
+$a->strings["Security:"] = "Sicherheit:";
+$a->strings["None"] = "Keine";
+$a->strings["Email login name:"] = "E-Mail-Login-Name:";
+$a->strings["Email password:"] = "E-Mail-Passwort:";
+$a->strings["Reply-to address:"] = "Reply-to Adresse:";
+$a->strings["Send public posts to all email contacts:"] = "Sende öffentliche Beiträge an alle E-Mail-Kontakte:";
+$a->strings["Action after import:"] = "Aktion nach Import:";
+$a->strings["Move to folder"] = "In einen Ordner verschieben";
+$a->strings["Move to folder:"] = "In diesen Ordner verschieben:";
+$a->strings["No special theme for mobile devices"] = "Kein spezielles Theme für mobile Geräte verwenden.";
+$a->strings["Display Settings"] = "Anzeige-Einstellungen";
+$a->strings["Display Theme:"] = "Theme:";
+$a->strings["Mobile Theme:"] = "Mobiles Theme";
+$a->strings["Suppress warning of insecure networks"] = "Warnung wegen unsicheren Netzwerken unterdrücken";
+$a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = "Soll das System Warnungen unterdrücken, die angezeigt werden weil von dir eingerichtete Kontakt-Gruppen Accounts aus Netzwerken beinhalten, die keine nicht öffentlichen Beiträge empfangen können.";
+$a->strings["Update browser every xx seconds"] = "Browser alle xx Sekunden aktualisieren";
+$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Minimum sind 10 Sekunden. Gib -1 ein um abzuschalten.";
+$a->strings["Number of items to display per page:"] = "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: ";
+$a->strings["Maximum of 100 items"] = "Maximal 100 Beiträge";
+$a->strings["Number of items to display per page when viewed from mobile device:"] = "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:";
+$a->strings["Don't show emoticons"] = "Keine Smilies anzeigen";
+$a->strings["Calendar"] = "Kalender";
+$a->strings["Beginning of week:"] = "Wochenbeginn:";
+$a->strings["Don't show notices"] = "Info-Popups nicht anzeigen";
+$a->strings["Infinite scroll"] = "Endloses Scrollen";
+$a->strings["Automatic updates only at the top of the network page"] = "Automatische Updates nur, wenn Du oben auf der Netzwerkseite bist.";
+$a->strings["Bandwith Saver Mode"] = "Bandbreiten-Spar-Modus";
+$a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = "Wenn aktiviert, wird der eingebettete Inhalt nicht automatisch aktualisiert. In diesem Fall Seite bitte neu laden.";
+$a->strings["General Theme Settings"] = "Allgemeine Themeneinstellungen";
+$a->strings["Custom Theme Settings"] = "Benutzerdefinierte Theme Einstellungen";
+$a->strings["Content Settings"] = "Einstellungen zum Inhalt";
+$a->strings["Theme settings"] = "Themeneinstellungen";
+$a->strings["Account Types"] = "Kontenarten";
+$a->strings["Personal Page Subtypes"] = "Unterarten der persönlichen Seite";
+$a->strings["Community Forum Subtypes"] = "Unterarten des Gemeinschaftsforums";
+$a->strings["Personal Page"] = "Persönliche Seite";
+$a->strings["This account is a regular personal profile"] = "Dieses Konto ist ein normales persönliches Profil";
+$a->strings["Organisation Page"] = "Organisationsseite";
+$a->strings["This account is a profile for an organisation"] = "Diese Konto ist ein Profil für eine Organisation";
+$a->strings["News Page"] = "Nachrichtenseite";
+$a->strings["This account is a news account/reflector"] = "Dieses Konto ist ein News-Konto bzw. -Spiegel";
+$a->strings["Community Forum"] = "Gemeinschaftsforum";
+$a->strings["This account is a community forum where people can discuss with each other"] = "Dieses Konto ist ein Gemeinschaftskonto wo sich Leute untereinander austauschen können";
+$a->strings["Normal Account Page"] = "Normales Konto";
+$a->strings["This account is a normal personal profile"] = "Dieses Konto ist ein normales persönliches Profil";
+$a->strings["Soapbox Page"] = "Marktschreier-Konto";
+$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert";
+$a->strings["Public Forum"] = "Öffentliches Forum";
+$a->strings["Automatically approve all contact requests"] = "Bestätige alle Kontaktanfragen automatisch";
+$a->strings["Automatic Friend Page"] = "Automatische Freunde Seite";
+$a->strings["Automatically approve all connection/friend requests as friends"] = "Kontaktanfragen werden automatisch als Freund akzeptiert";
+$a->strings["Private Forum [Experimental]"] = "Privates Forum [Versuchsstadium]";
+$a->strings["Private forum - approved members only"] = "Privates Forum, nur für Mitglieder";
+$a->strings["OpenID:"] = "OpenID:";
+$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID.";
+$a->strings["Publish your default profile in your local site directory?"] = "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?";
+$a->strings["Your profile may be visible in public."] = "Dein Profil könnte öffentlich abrufbar sein.";
+$a->strings["Publish your default profile in the global social directory?"] = "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
+$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?";
+$a->strings["If enabled, posting public messages to Diaspora and other networks isn't possible."] = "Wenn aktiviert, ist das senden öffentliche Nachrichten zu Diaspora und anderen Netzwerken nicht möglich";
+$a->strings["Allow friends to post to your profile page?"] = "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?";
+$a->strings["Allow friends to tag your posts?"] = "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?";
+$a->strings["Allow us to suggest you as a potential friend to new members?"] = "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?";
+$a->strings["Permit unknown people to send you private mail?"] = "Dürfen Dir Unbekannte private Nachrichten schicken?";
+$a->strings["Profile is <strong>not published</strong>."] = "Profil ist <strong>nicht veröffentlicht</strong>.";
+$a->strings["Your Identity Address is <strong>'%s'</strong> or '%s'."] = "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'.";
+$a->strings["Automatically expire posts after this many days:"] = "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:";
+$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht.";
+$a->strings["Advanced expiration settings"] = "Erweiterte Verfallseinstellungen";
+$a->strings["Advanced Expiration"] = "Erweitertes Verfallen";
+$a->strings["Expire posts:"] = "Beiträge verfallen lassen:";
+$a->strings["Expire personal notes:"] = "Persönliche Notizen verfallen lassen:";
+$a->strings["Expire starred posts:"] = "Markierte Beiträge verfallen lassen:";
+$a->strings["Expire photos:"] = "Fotos verfallen lassen:";
+$a->strings["Only expire posts by others:"] = "Nur Beiträge anderer verfallen:";
+$a->strings["Account Settings"] = "Kontoeinstellungen";
+$a->strings["Password Settings"] = "Passwort-Einstellungen";
+$a->strings["Leave password fields blank unless changing"] = "Lass die Passwort-Felder leer, außer Du willst das Passwort ändern";
+$a->strings["Current Password:"] = "Aktuelles Passwort:";
+$a->strings["Your current password to confirm the changes"] = "Dein aktuelles Passwort um die Änderungen zu bestätigen";
+$a->strings["Password:"] = "Passwort:";
+$a->strings["Basic Settings"] = "Grundeinstellungen";
+$a->strings["Email Address:"] = "E-Mail-Adresse:";
+$a->strings["Your Timezone:"] = "Deine Zeitzone:";
+$a->strings["Your Language:"] = "Deine Sprache:";
+$a->strings["Set the language we use to show you friendica interface and to send you emails"] = "Wähle die Sprache, in der wir Dir die Friendica-Oberfläche präsentieren sollen und Dir E-Mail schicken";
+$a->strings["Default Post Location:"] = "Standardstandort:";
+$a->strings["Use Browser Location:"] = "Standort des Browsers verwenden:";
+$a->strings["Security and Privacy Settings"] = "Sicherheits- und Privatsphäre-Einstellungen";
+$a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl vonKontaktanfragen/Tag:";
+$a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)";
+$a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträge";
+$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)";
+$a->strings["Default Private Post"] = "Privater Standardbeitrag";
+$a->strings["Default Public Post"] = "Öffentlicher Standardbeitrag";
+$a->strings["Default Permissions for New Posts"] = "Standardberechtigungen für neue Beiträge";
+$a->strings["Maximum private messages per day from unknown people:"] = "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:";
+$a->strings["Notification Settings"] = "Benachrichtigungseinstellungen";
+$a->strings["By default post a status message when:"] = "Standardmäßig eine Statusnachricht posten, wenn:";
+$a->strings["accepting a friend request"] = "– Du eine Kontaktanfrage akzeptierst";
+$a->strings["joining a forum/community"] = "– Du einem Forum/einer Gemeinschaftsseite beitrittst";
+$a->strings["making an <em>interesting</em> profile change"] = "– Du eine <em>interessante</em> Änderung an Deinem Profil durchführst";
+$a->strings["Send a notification email when:"] = "Benachrichtigungs-E-Mail senden wenn:";
+$a->strings["You receive an introduction"] = "– Du eine Kontaktanfrage erhältst";
+$a->strings["Your introductions are confirmed"] = "– eine Deiner Kontaktanfragen akzeptiert wurde";
+$a->strings["Someone writes on your profile wall"] = "– jemand etwas auf Deine Pinnwand schreibt";
+$a->strings["Someone writes a followup comment"] = "– jemand auch einen Kommentar verfasst";
+$a->strings["You receive a private message"] = "– Du eine private Nachricht erhältst";
+$a->strings["You receive a friend suggestion"] = "– Du eine Empfehlung erhältst";
+$a->strings["You are tagged in a post"] = "– Du in einem Beitrag erwähnt wirst";
+$a->strings["You are poked/prodded/etc. in a post"] = "– Du von jemandem angestupst oder sonstwie behandelt wirst";
+$a->strings["Activate desktop notifications"] = "Desktop Benachrichtigungen einschalten";
+$a->strings["Show desktop popup on new notifications"] = "Desktop Benachrichtigungen einschalten";
+$a->strings["Text-only notification emails"] = "Benachrichtigungs E-Mail als Rein-Text.";
+$a->strings["Send text only notification emails, without the html part"] = "Sende Benachrichtigungs E-Mail als Rein-Text - ohne HTML-Teil";
+$a->strings["Advanced Account/Page Type Settings"] = "Erweiterte Konto-/Seitentyp-Einstellungen";
+$a->strings["Change the behaviour of this account for special situations"] = "Verhalten dieses Kontos in bestimmten Situationen:";
+$a->strings["Relocate"] = "Umziehen";
+$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button.";
+$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
+$a->strings["Export account"] = "Account exportieren";
+$a->strings["Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server."] = "Exportiere Deine Accountinformationen und Kontakte. Verwende dies um ein Backup Deines Accounts anzulegen und/oder damit auf einen anderen Server umzuziehen.";
+$a->strings["Export all"] = "Alles exportieren";
+$a->strings["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)"] = "Exportiere Deine Account Informationen, Kontakte und alle Einträge als JSON Datei. Dies könnte eine sehr große Datei werden und dementsprechend viel Zeit benötigen. Verwende dies um ein komplettes Backup Deines Accounts anzulegen (Fotos werden nicht exportiert).";
+$a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?";
+$a->strings["Delete Video"] = "Video Löschen";
+$a->strings["No videos selected"] = "Keine Videos  ausgewählt";
+$a->strings["Recent Videos"] = "Neueste Videos";
+$a->strings["Upload New Videos"] = "Neues Video hochladen";
 $a->strings["Friendica Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke – Setup";
 $a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert.";
 $a->strings["Could not create table."] = "Tabelle konnte nicht angelegt werden.";
@@ -1525,7 +1626,7 @@ $a->strings["Site settings"] = "Server-Einstellungen";
 $a->strings["System Language:"] = "Systemsprache:";
 $a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand";
 $a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
-$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>"] = "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>";
+$a->strings["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>"] = "Wenn auf deinem Server keine Kommandozeilenversion von PHP installiert ist, kannst du den Hintergrundprozess nicht einrichten. Hier findest du alternative Möglichkeiten<a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'für das Poller Setup'</a>";
 $a->strings["PHP executable path"] = "Pfad zu PHP";
 $a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren.";
 $a->strings["Command line PHP"] = "Kommandozeilen-PHP";
@@ -1541,9 +1642,8 @@ $a->strings["Generate encryption keys"] = "Schlüssel erzeugen";
 $a->strings["libCurl PHP module"] = "PHP: libCurl-Modul";
 $a->strings["GD graphics PHP module"] = "PHP: GD-Grafikmodul";
 $a->strings["OpenSSL PHP module"] = "PHP: OpenSSL-Modul";
-$a->strings["mysqli PHP module"] = "PHP: mysqli-Modul";
+$a->strings["PDO or MySQLi PHP module"] = "PDO oder MySQLi PHP Modul";
 $a->strings["mb_string PHP module"] = "PHP: mb_string-Modul";
-$a->strings["mcrypt PHP module"] = "PHP mcrypt Modul";
 $a->strings["XML PHP module"] = "XML PHP Modul";
 $a->strings["iconv module"] = "iconv module";
 $a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite module";
@@ -1551,13 +1651,10 @@ $a->strings["Error: Apache webserver mod-rewrite module is required but not inst
 $a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert.";
 $a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert.";
 $a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl-Modul von PHP ist nicht installiert.";
-$a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli-Modul von PHP ist nicht installiert.";
+$a->strings["Error: PDO or MySQLi PHP module required but not installed."] = "Fehler: PDO oder MySQLi PHP Modul erforderlich, aber nicht installiert.";
+$a->strings["Error: The MySQL driver for PDO is not installed."] = "Fehler: der MySQL Treiber für PDO ist nicht installiert";
 $a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert.";
-$a->strings["Error: mcrypt PHP module required but not installed."] = "Fehler: Das mcrypt Modul von PHP ist nicht installiert";
 $a->strings["Error: iconv PHP module required but not installed."] = "Fehler: Das iconv-Modul von PHP ist nicht installiert.";
-$a->strings["If you are using php_cli, please make sure that mcrypt module is enabled in its config file"] = "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. ";
-$a->strings["Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 encryption layer."] = "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren.";
-$a->strings["mcrypt_create_iv() function"] = "mcrypt_create_iv() function";
 $a->strings["Error, XML PHP module required but not installed."] = "Fehler: XML PHP Modul erforderlich aber nicht installiert.";
 $a->strings["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."] = "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun.";
 $a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast.";
@@ -1577,86 +1674,49 @@ $a->strings["ImageMagick supports GIF"] = "ImageMagick unterstützt GIF";
 $a->strings["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."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen.";
 $a->strings["<h1>What next</h1>"] = "<h1>Wie geht es weiter?</h1>";
 $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten.";
-$a->strings["Profile deleted."] = "Profil gelöscht.";
-$a->strings["Profile-"] = "Profil-";
-$a->strings["New profile created."] = "Neues Profil angelegt.";
-$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar.";
-$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
-$a->strings["Marital Status"] = "Familienstand";
-$a->strings["Romantic Partner"] = "Romanze";
-$a->strings["Work/Employment"] = "Arbeit / Beschäftigung";
-$a->strings["Religion"] = "Religion";
-$a->strings["Political Views"] = "Politische Ansichten";
-$a->strings["Gender"] = "Geschlecht";
-$a->strings["Sexual Preference"] = "Sexuelle Vorlieben";
-$a->strings["XMPP"] = "XMPP";
-$a->strings["Homepage"] = "Webseite";
-$a->strings["Interests"] = "Interessen";
-$a->strings["Address"] = "Adresse";
-$a->strings["Location"] = "Wohnort";
-$a->strings["Profile updated."] = "Profil aktualisiert.";
-$a->strings[" and "] = " und ";
-$a->strings["public profile"] = "öffentliches Profil";
-$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s hat %2\$s geändert auf &ldquo;%3\$s&rdquo;";
-$a->strings[" - Visit %1\$s's %2\$s"] = " – %1\$ss %2\$s besuchen";
-$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s hat folgendes aktualisiert %2\$s, verändert wurde %3\$s.";
-$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen";
-$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?";
-$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:";
-$a->strings["Profile Actions"] = "Profilaktionen";
-$a->strings["Edit Profile Details"] = "Profil bearbeiten";
-$a->strings["Change Profile Photo"] = "Profilbild ändern";
-$a->strings["View this profile"] = "Dieses Profil anzeigen";
-$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden";
-$a->strings["Clone this profile"] = "Dieses Profil duplizieren";
-$a->strings["Delete this profile"] = "Dieses Profil löschen";
-$a->strings["Basic information"] = "Grundinformationen";
-$a->strings["Profile picture"] = "Profilbild";
-$a->strings["Preferences"] = "Vorlieben";
-$a->strings["Status information"] = "Status Informationen";
-$a->strings["Additional information"] = "Zusätzliche Informationen";
-$a->strings["Relation"] = "Beziehung";
-$a->strings["Your Gender:"] = "Dein Geschlecht:";
-$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
-$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software";
-$a->strings["Profile Name:"] = "Profilname:";
-$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.";
-$a->strings["Your Full Name:"] = "Dein kompletter Name:";
-$a->strings["Title/Description:"] = "Titel/Beschreibung:";
-$a->strings["Street Address:"] = "Adresse:";
-$a->strings["Locality/City:"] = "Wohnort:";
-$a->strings["Region/State:"] = "Region/Bundesstaat:";
-$a->strings["Postal/Zip Code:"] = "Postleitzahl:";
-$a->strings["Country:"] = "Land:";
-$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
-$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
-$a->strings["Since [date]:"] = "Seit [Datum]:";
-$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …";
-$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse";
-$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können.";
-$a->strings["Homepage URL:"] = "Adresse der Homepage:";
-$a->strings["Religious Views:"] = "Religiöse Ansichten:";
-$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
-$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)";
-$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
-$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
-$a->strings["Musical interests"] = "Musikalische Interessen";
-$a->strings["Books, literature"] = "Bücher, Literatur";
-$a->strings["Television"] = "Fernsehen";
-$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung";
-$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
-$a->strings["Love/romance"] = "Liebe/Romantik";
-$a->strings["Work/employment"] = "Arbeit/Anstellung";
-$a->strings["School/education"] = "Schule/Ausbildung";
-$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke";
-$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile";
-$a->strings["Item has been removed."] = "Eintrag wurde entfernt.";
+$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
+$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
+$a->strings["System error. Post not saved."] = "Systemfehler. Beitrag konnte nicht gespeichert werden.";
+$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
+$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
+$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest.";
+$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
+$a->strings["Invalid request identifier."] = "Invalid request identifier.";
+$a->strings["Discard"] = "Verwerfen";
+$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
+$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
+$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
+$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
+$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
+$a->strings["Notification type: "] = "Benachrichtigungstyp: ";
+$a->strings["suggested by %s"] = "vorgeschlagen von %s";
+$a->strings["Post a new friend activity"] = "Neue-Kontakt Nachricht senden";
+$a->strings["if applicable"] = "falls anwendbar";
+$a->strings["Approve"] = "Genehmigen";
+$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: ";
+$a->strings["yes"] = "ja";
+$a->strings["no"] = "nein";
+$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
+$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
+$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
+$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
+$a->strings["Friend"] = "Kontakt";
+$a->strings["Sharer"] = "Teilenden";
+$a->strings["Subscriber"] = "Abonnent";
+$a->strings["No introductions."] = "Keine Kontaktanfragen.";
+$a->strings["Show unread"] = "Ungelesene anzeigen";
+$a->strings["Show all"] = "Alle anzeigen";
+$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen";
+$a->strings["{0} wants to be your friend"] = "{0} möchte mit Dir in Kontakt treten";
+$a->strings["{0} sent you a message"] = "{0} schickte Dir eine Nachricht";
+$a->strings["{0} requested registration"] = "{0} möchte sich registrieren";
 $a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert.";
 $a->strings["Site"] = "Seite";
 $a->strings["Users"] = "Nutzer";
 $a->strings["Themes"] = "Themen";
 $a->strings["DB updates"] = "DB Updates";
 $a->strings["Inspect Queue"] = "Warteschlange Inspizieren";
+$a->strings["Server Blocklist"] = "Server Blockliste";
 $a->strings["Federation Statistics"] = "Federation Statistik";
 $a->strings["Logs"] = "Protokolle";
 $a->strings["View Logs"] = "Protokolle anzeigen";
@@ -1665,10 +1725,27 @@ $a->strings["check webfinger"] = "Webfinger überprüfen";
 $a->strings["Plugin Features"] = "Plugin Features";
 $a->strings["diagnostics"] = "Diagnose";
 $a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten";
+$a->strings["The blocked domain"] = "Die blockierte Domain";
+$a->strings["The reason why you blocked this domain."] = "Die Begründung warum du diese Domain blockiert hast.";
+$a->strings["Delete domain"] = "Domain löschen";
+$a->strings["Check to delete this entry from the blocklist"] = "Markieren, um diesen Eintrag von der Blocklist zu entfernen";
+$a->strings["Administration"] = "Administration";
+$a->strings["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."] = "Auf dieser Seite kannst du die Liste der blockierten Domains aus dem föderalen Netzwerk verwalten, denen es untersagt ist mit deinem Knoten zu interagieren. Für jede der blockierten Domains musst du außerdem einen Grund für die Sperrung angeben.";
+$a->strings["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."] = "Die Liste der blockierten Domains wird auf der /friendica Seite öffentlich einsehbar gemacht, damit deine Nutzer und Personen die Kommunikationsprobleme erkunden, die Ursachen einfach finden können.";
+$a->strings["Add new entry to block list"] = "Neuen Eintrag in die Blockliste";
+$a->strings["Server Domain"] = "Domain des Servers";
+$a->strings["The domain of the new server to add to the block list. Do not include the protocol."] = "Der Domain-Name des Servers der geblockt werden soll. Gib das Protokoll nicht mit an!";
+$a->strings["Block reason"] = "Begründung der Blockierung";
+$a->strings["Add Entry"] = "Eintrag hinzufügen";
+$a->strings["Save changes to the blocklist"] = "Änderungen der Blockliste speichern";
+$a->strings["Current Entries in the Blocklist"] = "Aktuelle Einträge der Blockliste";
+$a->strings["Delete entry from blocklist"] = "Eintrag von der Blockliste entfernen";
+$a->strings["Delete entry from blocklist?"] = "Eintrag von der Blockliste entfernen?";
+$a->strings["Server added to blocklist."] = "Server zur Blockliste hinzugefügt.";
+$a->strings["Site blocklist updated."] = "Blockliste aktualisiert.";
 $a->strings["unknown"] = "Unbekannt";
 $a->strings["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."] = "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt.";
 $a->strings["The <em>Auto Discovered Contact Directory</em> feature is not enabled, it will improve the data displayed here."] = "Die Funktion um <em>Automatisch ein Kontaktverzeichnis erstellen</em> ist nicht aktiv. Es wird die hier angezeigten Daten verbessern.";
-$a->strings["Administration"] = "Administration";
 $a->strings["Currently this node is aware of %d nodes from the following platforms:"] = "Momentan kennt dieser Knoten %d andere Knoten der folgenden Plattformen:";
 $a->strings["ID"] = "ID";
 $a->strings["Recipient Name"] = "Empfänger Name";
@@ -1676,7 +1753,7 @@ $a->strings["Recipient Profile"] = "Empfänger Profil";
 $a->strings["Created"] = "Erstellt";
 $a->strings["Last Tried"] = "Zuletzt versucht";
 $a->strings["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."] = "Auf dieser Seite werden die in der Warteschlange eingereihten Beiträge aufgelistet. Bei diesen Beiträgen schlug die erste Zustellung fehl. Es wird später wiederholt versucht die Beiträge zuzustellen, bis sie schließlich gelöscht werden.";
-$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the <tt>convert_innodb.sql</tt> in the <tt>/util</tt> directory of your Friendica installation.<br />"] = "Deine DB enthält einige Tabellen die noch auf MyISAM laufen. Du solltest den Engine-Type auf InnoDB umstellen, da Friendica in Zukunft einige InnoDB Features nutzen wird. Eine Anleitung zur Umstellung kannst du <a href=\"%s\">hier</a> finden. Außerdem kannst du das <tt>convert_innodb.sql</tt> Skript verwenden, das du im <tt>/util</tt> Verzeichnis deiner Friendica Installation findest.";
+$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php toinnodb</tt> of your Friendica installation for an automatic conversion.<br />"] = "Deine DB verwendet derzeit noch MyISAM Tabellen. Du solltest die Datenbank Engine auf InnoDB umstellen, da Friendica in Zukunft InnoDB Features verwenden wird. Eine Anleitung zur Umstellung der Datenbank kannst du  <a href=\"%s\">hier</a>  finden. Du kannst außerdem mit dem Befehl <tt>php include/dbstructure.php toinnodb</tt> auf der Kommandozeile die Umstellung automatisch vornehmen lassen.";
 $a->strings["You are using a MySQL version which does not support all features that Friendica uses. You should consider switching to MariaDB."] = "Du verwendets eine MySQL Version die nicht alle Features unterstützt die Friendica verwendet. Wir empfehlen dir einen Wechsel auf MariaDB, falls dies möglich ist.";
 $a->strings["Normal Account"] = "Normales Konto";
 $a->strings["Soapbox Account"] = "Marktschreier-Konto";
@@ -1691,7 +1768,6 @@ $a->strings["Pending registrations"] = "Anstehende Anmeldungen";
 $a->strings["Version"] = "Version";
 $a->strings["Active plugins"] = "Aktive Plugins";
 $a->strings["Can not parse base url. Must have at least <scheme>://<domain>"] = "Die Basis-URL konnte nicht analysiert werden. Sie muss mindestens aus <protokoll>://<domain> bestehen";
-$a->strings["RINO2 needs mcrypt php extension to work."] = "RINO2 benötigt die PHP Extension mcrypt.";
 $a->strings["Site settings updated."] = "Seiteneinstellungen aktualisiert.";
 $a->strings["No community page"] = "Keine Gemeinschaftsseite";
 $a->strings["Public postings from users of this site"] = "Öffentliche Beiträge von Nutzer_innen dieser Seite";
@@ -1736,8 +1812,6 @@ $a->strings["SSL link policy"] = "Regeln für SSL Links";
 $a->strings["Determines whether generated links should be forced to use SSL"] = "Bestimmt, ob generierte Links SSL verwenden müssen";
 $a->strings["Force SSL"] = "Erzwinge SSL";
 $a->strings["Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops."] = "Erzinge alle Nicht-SSL Anfragen auf SSL - Achtung: auf manchen Systemen verursacht dies eine Endlosschleife.";
-$a->strings["Old style 'Share'"] = "Altes \"Teilen\" Element";
-$a->strings["Deactivates the bbcode element 'share' for repeating items."] = "Deaktiviert das BBCode Element \"share\" beim Wiederholen von Beiträgen.";
 $a->strings["Hide help entry from navigation menu"] = "Verberge den Menüeintrag für die Hilfe im Navigationsmenü";
 $a->strings["Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly."] = "Verbirgt den Menüeintrag für die Hilfe-Seiten im Navigationsmenü. Die Seiten können weiterhin über /help aufgerufen werden.";
 $a->strings["Single user instance"] = "Ein-Nutzer Instanz";
@@ -1783,8 +1857,6 @@ $a->strings["OpenID support"] = "OpenID Unterstützung";
 $a->strings["OpenID support for registration and logins."] = "OpenID-Unterstützung für Registrierung und Login.";
 $a->strings["Fullname check"] = "Namen auf Vollständigkeit überprüfen";
 $a->strings["Force users to register with a space between firstname and lastname in Full name, as an antispam measure"] = "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden.";
-$a->strings["UTF-8 Regular expressions"] = "UTF-8 Reguläre Ausdrücke";
-$a->strings["Use PHP UTF8 regular expressions"] = "PHP UTF8 Ausdrücke verwenden";
 $a->strings["Community Page Style"] = "Art der Gemeinschaftsseite";
 $a->strings["Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."] = "Welche Art der Gemeinschaftsseite soll verwendet werden? Globale Gemeinschaftsseite zeigt alle öffentlichen Beiträge eines offenen dezentralen Netzwerks an die auf diesem Server eintreffen.";
 $a->strings["Posts per user on community page"] = "Anzahl der Beiträge pro Benutzer auf der Gemeinschaftsseite";
@@ -1807,14 +1879,12 @@ $a->strings["Proxy user"] = "Proxy Nutzer";
 $a->strings["Proxy URL"] = "Proxy URL";
 $a->strings["Network timeout"] = "Netzwerk Wartezeit";
 $a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen).";
-$a->strings["Delivery interval"] = "Zustellungsintervall";
-$a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server.";
-$a->strings["Poll interval"] = "Abfrageintervall";
-$a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Verzögere Hintergrundprozesse um diese Anzahl an Sekunden, um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet.";
 $a->strings["Maximum Load Average"] = "Maximum Load Average";
 $a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50";
 $a->strings["Maximum Load Average (Frontend)"] = "Maximum Load Average (Frontend)";
 $a->strings["Maximum system load before the frontend quits service - default 50."] = "Maximale Systemlast bevor Vordergrundprozesse pausiert werden - Standard 50.";
+$a->strings["Minimal Memory"] = "Minimaler Speicher";
+$a->strings["Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated)."] = "Minimal freier Speicher in MB für den Poller. Benötigt Zugriff auf /proc/meminfo - Standard 0 (Deaktiviert).";
 $a->strings["Maximum table size for optimization"] = "Maximale Tabellengröße zur Optimierung";
 $a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = "Maximale Tabellengröße (in MB) für die automatische Optimierung - Standard 100 MB. Gib -1 für Deaktivierung ein.";
 $a->strings["Minimum level of fragmentation"] = "Minimaler Fragmentationsgrad";
@@ -1831,10 +1901,6 @@ $a->strings["Search the local directory"] = "Lokales Verzeichnis durchsuchen";
 $a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Suche im lokalen Verzeichnis anstelle des globalen Verzeichnisses durchführen. Jede Suche wird im Hintergrund auch im globalen Verzeichnis durchgeführt umd die Suchresultate zu verbessern, wenn diese Suche wiederholt wird.";
 $a->strings["Publish server information"] = "Server Informationen veröffentlichen";
 $a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details."] = "Wenn aktiviert, werden allgemeine Informationen über den Server und Nutzungsdaten veröffentlicht. Die Daten beinhalten den Namen sowie die Version des Servers, die Anzahl der Nutzer_innen mit öffentlichen Profilen, die Anzahl der Beiträge sowie aktivierte Protokolle und Connectoren. Für Details bitte <a href='http://the-federation.info/'>the-federation.info</a> aufrufen.";
-$a->strings["Use MySQL full text engine"] = "Nutze MySQL full text engine";
-$a->strings["Activates the full text engine. Speeds up search - but can only search for four and more characters."] = "Aktiviert die 'full text engine'. Beschleunigt die Suche - aber es kann nur nach vier oder mehr Zeichen gesucht werden.";
-$a->strings["Suppress Language"] = "Sprachinformation unterdrücken";
-$a->strings["Suppress language information in meta information about a posting."] = "Verhindert das Erzeugen der Meta-Information zur Spracherkennung eines Beitrags.";
 $a->strings["Suppress Tags"] = "Tags Unterdrücken";
 $a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Unterdrückt die Anzeige von Tags am Ende eines Beitrags.";
 $a->strings["Path to item cache"] = "Pfad zum Eintrag Cache";
@@ -1843,26 +1909,18 @@ $a->strings["Cache duration in seconds"] = "Cache-Dauer in Sekunden";
 $a->strings["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."] = "Wie lange sollen die gecachedten Dateien vorgehalten werden? Grundeinstellung sind 86400 Sekunden (ein Tag). Um den Item Cache zu deaktivieren, setze diesen Wert auf -1.";
 $a->strings["Maximum numbers of comments per post"] = "Maximale Anzahl von Kommentaren pro Beitrag";
 $a->strings["How much comments should be shown for each post? Default value is 100."] = "Wie viele Kommentare sollen pro Beitrag angezeigt werden? Standardwert sind 100.";
-$a->strings["Path for lock file"] = "Pfad für die Sperrdatei";
-$a->strings["The lock file is used to avoid multiple pollers at one time. Only define a folder here."] = "Die lock-Datei wird benutzt, damit nicht mehrere poller auf einmal laufen. Definiere hier einen Dateiverzeichnis.";
 $a->strings["Temp path"] = "Temp Pfad";
 $a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad.";
 $a->strings["Base path to installation"] = "Basis-Pfad zur Installation";
 $a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "Falls das System nicht den korrekten Pfad zu deiner Installation gefunden hat, gib den richtigen Pfad bitte hier ein. Du solltest hier den Pfad nur auf einem eingeschränkten System angeben müssen, bei dem du mit symbolischen Links auf dein Webverzeichnis verweist.";
 $a->strings["Disable picture proxy"] = "Bilder Proxy deaktivieren";
 $a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = "Der Proxy für Bilder verbessert die Leistung und Privatsphäre der Nutzer. Er sollte nicht auf Systemen verwendet werden, die nur über begrenzte Bandbreite verfügen.";
-$a->strings["Enable old style pager"] = "Den Old-Style Pager aktiviren";
-$a->strings["The old style pager has page numbers but slows down massively the page speed."] = "Der Old-Style Pager zeigt Seitennummern an, verlangsamt aber auch drastisch das Laden einer Seite.";
 $a->strings["Only search in tags"] = "Nur in Tags suchen";
 $a->strings["On large systems the text search can slow down the system extremely."] = "Auf großen Knoten kann die Volltext-Suche das System ausbremsen.";
 $a->strings["New base url"] = "Neue Basis-URL";
 $a->strings["Change base url for this server. Sends relocate message to all DFRN contacts of all users."] = "Ändert die Basis-URL dieses Servers und sendet eine Umzugsmitteilung an alle DFRN Kontakte deiner Nutzer_innen.";
 $a->strings["RINO Encryption"] = "RINO Verschlüsselung";
 $a->strings["Encryption layer between nodes."] = "Verschlüsselung zwischen Friendica Instanzen";
-$a->strings["Embedly API key"] = "Embedly  API Schlüssel";
-$a->strings["<a href='http://embed.ly'>Embedly</a> is used to fetch additional data for web pages. This is an optional parameter."] = "<a href='http://embed.ly'>Embedly</a> wird verwendet um zusätzliche Informationen von Webseiten zu laden. Dies ist ein optionaler Parameter.";
-$a->strings["Enable 'worker' background processing"] = "Aktiviere die 'Worker' Hintergrundprozesse";
-$a->strings["The worker background processing limits the number of parallel background jobs to a maximum number and respects the system load."] = "Der 'background worker' Prozess begrenzt die Zahl der Prozesse, die im Hintergrund parallel laufen und beachtet dabei die Systemlast.";
 $a->strings["Maximum number of parallel workers"] = "Maximale Anzahl parallel laufender Worker";
 $a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = "Wenn dein Knoten bei einem Shared Hoster ist, setzte diesen Wert auf 2. Auf größeren Systemen funktioniert ein Wert von 10 recht gut. Standardeinstellung sind 4.";
 $a->strings["Don't use 'proc_open' with the worker"] = "'proc_open' nicht mit den Workern verwenden";
@@ -1907,7 +1965,6 @@ $a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanen
 $a->strings["Request date"] = "Anfragedatum";
 $a->strings["No registrations."] = "Keine Neuanmeldungen.";
 $a->strings["Note from the user"] = "Hinweis vom Nutzer";
-$a->strings["Approve"] = "Genehmigen";
 $a->strings["Deny"] = "Verwehren";
 $a->strings["Site admin"] = "Seitenadministrator";
 $a->strings["Account expired"] = "Account ist abgelaufen";
@@ -1946,72 +2003,7 @@ $a->strings["PHP logging"] = "PHP Protokollieren";
 $a->strings["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."] = "Um PHP Warnungen und Fehler zu protokollieren, kannst du die folgenden Zeilen zur .htconfig.php Datei deiner Installation hinzufügen. Den Dateinamen der Log-Datei legst du in der Zeile mit dem 'error_log' fest,  Er ist relativ zum Friendica-Stammverzeichnis und muss schreibbar durch den Webserver sein. Eine \"1\" als Option für die Punkte 'log_errors' und 'display_errors' aktiviert die Funktionen zum Protokollieren bzw. Anzeigen der Fehler, eine \"0\" deaktiviert sie.";
 $a->strings["Lock feature %s"] = "Feature festlegen: %s";
 $a->strings["Manage Additional Features"] = "Zusätzliche Features Verwalten";
-$a->strings["No contacts."] = "Keine Kontakte.";
-$a->strings["Remove term"] = "Begriff entfernen";
-$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = array(
-       0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.",
-       1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.",
-);
-$a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden.";
-$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen.";
-$a->strings["Invalid contact."] = "Ungültiger Kontakt.";
-$a->strings["Commented Order"] = "Neueste Kommentare";
-$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren";
-$a->strings["Posted Order"] = "Neueste Beiträge";
-$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren";
-$a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht";
-$a->strings["New"] = "Neue";
-$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum";
-$a->strings["Shared Links"] = "Geteilte Links";
-$a->strings["Interesting Links"] = "Interessante Links";
-$a->strings["Starred"] = "Markierte";
-$a->strings["Favourite Posts"] = "Favorisierte Beiträge";
-$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet.";
-$a->strings["Too Many Requests"] = "Zu viele Abfragen";
-$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.";
-$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind";
-$a->strings["Invalid request identifier."] = "Invalid request identifier.";
-$a->strings["Discard"] = "Verwerfen";
-$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
-$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
-$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
-$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
-$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
-$a->strings["Notification type: "] = "Benachrichtigungstyp: ";
-$a->strings["suggested by %s"] = "vorgeschlagen von %s";
-$a->strings["Post a new friend activity"] = "Neue-Kontakt Nachricht senden";
-$a->strings["if applicable"] = "falls anwendbar";
-$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: ";
-$a->strings["yes"] = "ja";
-$a->strings["no"] = "nein";
-$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
-$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
-$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
-$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
-$a->strings["Friend"] = "Kontakt";
-$a->strings["Sharer"] = "Teilenden";
-$a->strings["Subscriber"] = "Abonnent";
-$a->strings["No introductions."] = "Keine Kontaktanfragen.";
-$a->strings["Show unread"] = "Ungelesene anzeigen";
-$a->strings["Show all"] = "Alle anzeigen";
-$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen";
 $a->strings["via"] = "via";
-$a->strings["Alignment"] = "Ausrichtung";
-$a->strings["Left"] = "Links";
-$a->strings["Center"] = "Mitte";
-$a->strings["Color scheme"] = "Farbschema";
-$a->strings["Posts font size"] = "Schriftgröße in Beiträgen";
-$a->strings["Textareas font size"] = "Schriftgröße in Eingabefeldern";
-$a->strings["Comma separated list of helper forums"] = "Komma-Separierte Liste der Helfer-Foren";
-$a->strings["Set style"] = "Stil auswählen";
-$a->strings["Community Pages"] = "Foren";
-$a->strings["Community Profiles"] = "Community-Profile";
-$a->strings["Help or @NewHere ?"] = "Hilfe oder @NewHere";
-$a->strings["Connect Services"] = "Verbinde Dienste";
-$a->strings["Find Friends"] = "Kontakte finden";
-$a->strings["Last users"] = "Letzte Nutzer";
-$a->strings["Local Directory"] = "Lokales Verzeichnis";
-$a->strings["Quick Start"] = "Schnell-Start";
 $a->strings["greenzero"] = "greenzero";
 $a->strings["purplezero"] = "purplezero";
 $a->strings["easterbunny"] = "easterbunny";
@@ -2019,28 +2011,6 @@ $a->strings["darkzero"] = "darkzero";
 $a->strings["comix"] = "comix";
 $a->strings["slackr"] = "slackr";
 $a->strings["Variations"] = "Variationen";
-$a->strings["Midnight"] = "Mitternacht";
-$a->strings["Zenburn"] = "Zenburn";
-$a->strings["Bootstrap"] = "Bootstrap";
-$a->strings["Shades of Pink"] = "Shades of Pink";
-$a->strings["Lime and Orange"] = "Lime and Orange";
-$a->strings["GeoCities Retro"] = "GeoCities Retro";
-$a->strings["Background Image"] = "Hintergrundbild";
-$a->strings["The URL to a picture (e.g. from your photo album) that should be used as background image."] = "Die URL zum Bild (z.B. aus deinem Foto Album), das als Hintergrundbild verwendet werden soll.";
-$a->strings["Background Color"] = "Hintergrundfarbe";
-$a->strings["HEX value for the background color. Don't include the #"] = "HEX Wert der Hintergrundfarbe, ohne das #";
-$a->strings["font size"] = "Zeichengröße";
-$a->strings["base font size for your interface"] = "Basiszeichengröße für das Interface";
-$a->strings["Display Accesskeys"] = "Accesskeys anzeigen";
-$a->strings["Diaplay the access keys assigned to some menu element in the web interface."] = "Einige Menüelemente sind über Accesskeys aufrufbar. Sollen diese angezeigt werden?";
-$a->strings["Repeat the image"] = "Bild wiederholen";
-$a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen.";
-$a->strings["Stretch"] = "Strecken";
-$a->strings["Will stretch to width/height of the image."] = "Streckt Breite/Höhe des Bildes.";
-$a->strings["Resize fill and-clip"] = "Größe anpassen - Ausfüllen und abschneiden";
-$a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten";
-$a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe";
-$a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten";
 $a->strings["Default"] = "Standard";
 $a->strings["Note: "] = "Hinweis:";
 $a->strings["Check image permissions if all users are allowed to visit the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen";
@@ -2051,8 +2021,32 @@ $a->strings["Link color"] = "Linkfarbe";
 $a->strings["Set the background color"] = "Hintergrundfarbe festlegen";
 $a->strings["Content background transparency"] = "Transparanz des Hintergrunds von Beiträgem";
 $a->strings["Set the background image"] = "Hintergrundbild festlegen";
+$a->strings["Repeat the image"] = "Bild wiederholen";
+$a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen.";
+$a->strings["Stretch"] = "Strecken";
+$a->strings["Will stretch to width/height of the image."] = "Streckt Breite/Höhe des Bildes.";
+$a->strings["Resize fill and-clip"] = "Größe anpassen - Ausfüllen und abschneiden";
+$a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten";
+$a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe";
+$a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten";
 $a->strings["Guest"] = "Gast";
 $a->strings["Visitor"] = "Besucher";
+$a->strings["Alignment"] = "Ausrichtung";
+$a->strings["Left"] = "Links";
+$a->strings["Center"] = "Mitte";
+$a->strings["Color scheme"] = "Farbschema";
+$a->strings["Posts font size"] = "Schriftgröße in Beiträgen";
+$a->strings["Textareas font size"] = "Schriftgröße in Eingabefeldern";
+$a->strings["Comma separated list of helper forums"] = "Komma-Separierte Liste der Helfer-Foren";
+$a->strings["Set style"] = "Stil auswählen";
+$a->strings["Community Pages"] = "Foren";
+$a->strings["Community Profiles"] = "Community-Profile";
+$a->strings["Help or @NewHere ?"] = "Hilfe oder @NewHere";
+$a->strings["Connect Services"] = "Verbinde Dienste";
+$a->strings["Find Friends"] = "Kontakte finden";
+$a->strings["Last users"] = "Letzte Nutzer";
+$a->strings["Local Directory"] = "Lokales Verzeichnis";
+$a->strings["Quick Start"] = "Schnell-Start";
 $a->strings["toggle mobile"] = "auf/von Mobile Ansicht wechseln";
 $a->strings["Delete this item?"] = "Diesen Beitrag löschen?";
 $a->strings["show fewer"] = "weniger anzeigen";
index e51b531b5ae1a7e628e6a04ca1a18be64688b3fc..5adef21a2da40da84c16ffef23524fdec4331c90 100644 (file)
@@ -1,19 +1,19 @@
-<!DOCTYPE html >\r
-<html itemscope itemtype="http://schema.org/Blog" lang="<?php echo $lang; ?>">\r
-<head>\r
-  <title><?php if(x($page,'title')) echo $page['title'] ?></title>\r
-  <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>\r
-  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>\r
-</head>\r
-<body>\r
-       <?php if(x($page,'nav')) echo $page['nav']; ?>\r
-       <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>\r
-       <section>\r
-               <?php if(x($page,'content')) echo $page['content']; ?>\r
-               <div id="pause"></div> <!-- The pause/resume Ajax indicator -->\r
-               <div id="page-footer"></div>\r
-       </section>\r
-       <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>\r
-       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>\r
-</body>\r
-</html>\r
+<!DOCTYPE html >
+<html itemscope itemtype="http://schema.org/Blog" lang="<?php echo $lang; ?>">
+<head>
+  <title><?php if(x($page,'title')) echo $page['title'] ?></title>
+  <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
+  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
+</head>
+<body>
+       <?php if(x($page,'nav')) echo $page['nav']; ?>
+       <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>
+       <section>
+               <?php if(x($page,'content')) echo $page['content']; ?>
+               <div id="pause"></div> <!-- The pause/resume Ajax indicator -->
+               <div id="page-footer"></div>
+       </section>
+       <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>
+       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
+</body>
+</html>
index e93aac11258ef7665a54e551ba9b8cc67c09973c..9831ca5e55fbc53a730d959fb78f75e1b5673393 100644 (file)
@@ -1,14 +1,13 @@
-<!DOCTYPE html >\r
-<html>\r
-<head>\r
-  <title><?php if(x($page,'title')) echo $page['title'] ?></title>\r
-  <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>\r
-  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>\r
-</head>\r
-<body>\r
-       <section class="minimal" style="margin:0px!important; padding:0px!important; float:none!important;display:block!important;"><?php if(x($page,'content')) echo $page['content']; ?>\r
-               <div id="page-footer"></div>\r
-       </section>\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html >
+<html>
+<head>
+  <title><?php if(x($page,'title')) echo $page['title'] ?></title>
+  <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
+  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
+</head>
+<body>
+       <section class="minimal" style="margin:0px!important; padding:0px!important; float:none!important;display:block!important;"><?php if(x($page,'content')) echo $page['content']; ?>
+               <div id="page-footer"></div>
+       </section>
+</body>
+</html>
diff --git a/view/templates/admin_blocklist.tpl b/view/templates/admin_blocklist.tpl
new file mode 100644 (file)
index 0000000..1484c98
--- /dev/null
@@ -0,0 +1,33 @@
+<script>
+       function confirm_delete(uname){
+               return confirm("{{$confirm_delete}}".format(uname));
+       }
+</script>
+<div id="adminpage">
+       <h1>{{$title}} - {{$page}}</h1>
+       <p>{{$intro}}</p>
+       <p>{{$public}}</p>
+
+       <h2>{{$addtitle}}</h2>
+       <form action="{{$baseurl}}/admin/blocklist" method="post">
+               <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+               {{include file="field_input.tpl" field=$newdomain}}
+               {{include file="field_input.tpl" field=$newreason}}
+               <div class="submit"><input type="submit" name="page_blocklist_save" value="{{$submit}}" /></div>
+       </form>
+
+       {{if $entries}}
+       <h2>{{$currenttitle}}</h2>
+       <p>{{$currentintro}}</p>
+       <form action="{{$baseurl}}/admin/blocklist" method="post">
+               <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+               {{foreach $entries as $e}}
+                       {{include file="field_input.tpl" field=$e.domain}}
+                       {{include file="field_input.tpl" field=$e.reason}}
+                       {{include file="field_checkbox.tpl" field=$e.delete}}
+               {{/foreach}}
+               <div class="submit"><input type="submit" name="page_blocklist_edit" value="{{$savechanges}}" /></div>
+               {{/if}}
+       </form>
+
+</div>
index 196bc479b5c5e330c9c4527d07589f195875c88b..6a3c3fbcdda85ef8e4fe77e56ecb3d6ec19c5961 100644 (file)
        {{include file="field_input.tpl" field=$proxy}}
        {{include file="field_input.tpl" field=$proxyuser}}
        {{include file="field_input.tpl" field=$timeout}}
-       {{include file="field_input.tpl" field=$maxloadavg}}
        {{include file="field_input.tpl" field=$maxloadavg_frontend}}
        {{include file="field_input.tpl" field=$optimize_max_tablesize}}
        {{include file="field_input.tpl" field=$optimize_fragmentation}}
        <div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
 
        <h3>{{$worker_title}}</h3>
+       {{include file="field_input.tpl" field=$maxloadavg}}
+       {{include file="field_input.tpl" field=$min_memory}}
        {{include file="field_input.tpl" field=$worker_queues}}
        {{include file="field_checkbox.tpl" field=$worker_dont_fork}}
        {{include file="field_checkbox.tpl" field=$worker_fastlane}}
index 9b8ff98708f3b65f6dc39b9e85e7acc4a640a63c..b9a6953d8b0099973a1aa509d58101f42bdcf301 100644 (file)
@@ -1,10 +1,12 @@
 
 <div class="group-delete-wrapper button" id="group-delete-wrapper-{{$id}}" >
-       <a href="group/drop/{{$id}}?t={{$form_security_token}}" 
-               onclick="return confirmDelete();" 
-               id="group-delete-icon-{{$id}}" 
-               class="icon drophide group-delete-icon" 
-               onmouseover="imgbright(this);" 
-               onmouseout="imgdull(this);" ></a>
+       <a href="group/drop/{{$id}}?t={{$form_security_token}}"
+               onclick="return confirmDelete();"
+               id="group-delete-icon-{{$id}}"
+               class="icon drophide group-delete-icon"
+               onmouseover="imgbright(this);"
+               onmouseout="imgdull(this);"
+               title="{{$delete}}">
+       </a>
 </div>
 <div class="group-delete-end"></div>
index 86458ded2e0d81c0151cd3b5b27ee7a3481250b4..bde686040b5648fea1670f1ad2cb3c842b3be4ee 100644 (file)
@@ -1,21 +1,61 @@
 
+{{* Template for the contact group list *}}
+
+{{* The contacts who are already members of the contact group *}}
 <div id="group">
-<h3>{{$groupeditor.label_members}}</h3>
-<div id="group-members" class="contact_list">
-{{if $groupeditor.members }}
-       {{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}}
-{{else}}
-{{$groupeditor.group_is_empty}}
-{{/if}}
-</div>
-<div id="group-members-end"></div>
-<hr id="group-separator" />
+       <h3>{{$groupeditor.label_members}}</h3>
+       <div id="group-members" class="contact_list">
+
+               {{if $groupeditor.members }}
+
+               {{foreach $groupeditor.members as $c}}
+                       {{* If there are too many contacts we use another view mode *}}
+                       {{if $shortmode}}
+                       <div class="contact-block-textdiv mpgroup">
+                               <a class="contact-block-link mpgroup  fakelink" target="redir" onclick="groupChangeMember({{$c.change_member.gid}},{{$c.change_member.cid}},'{{$c.change_member.sec_token}}'); return true;" title="{{$c.name}} [{{$c.itemurl}}]" alt="{{$c.name}}">
+                                       {{$c.name}}"
+                               </a>
+                       </div>
+                       {{else}}
+                       {{* The normal view mode *}}
+                       <div class="contact-block-div mpgroup">
+                               <a class="contact-block-link mpgroup  fakelink" target="redir" onclick="groupChangeMember({{$c.change_member.gid}},{{$c.change_member.cid}},'{{$c.change_member.sec_token}}'); return true;">
+                                       <img class="contact-block-img mpgroup " src="{{$c.thumb}}" title="{{$c.name}} [{{$c.itemurl}}]" alt="{{$c.name}}">
+                               </a>
+                       </div>
+                       {{/if}}
+               {{/foreach}}
+
+               {{else}}
+               {{$groupeditor.group_is_empty}}
+               {{/if}}
+       </div>
+
+       <div id="group-members-end"></div>
+               <hr id="group-separator" />
 </div>
 
+{{* The contacts who are not members of the contact group *}}
 <div id="contacts">
-<h3>{{$groupeditor.label_contacts}}</h3>
-<div id="group-all-contacts" class="contact_list">
-{{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}}
-</div>
-<div id="group-all-contacts-end"></div>
+       <h3>{{$groupeditor.label_contacts}}</h3>
+       <div id="group-all-contacts" class="contact_list">
+               {{foreach $groupeditor.contacts as $m}}
+                       {{* If there are too many contacts we use another view mode *}}
+                       {{if $shortmode}}
+                       <div class="contact-block-textdiv mpall">
+                               <a class="contact-block-link mpall  fakelink" target="redir" onclick="groupChangeMember({{$m.change_member.gid}},{{$m.change_member.cid}},'{{$m.change_member.sec_token}}'); return true;" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}">
+                                       {{$m.name}}
+                               </a>
+                       </div>
+                       {{else}}
+                       {{* The normal view mode *}}
+                       <div class="contact-block-div mpall">
+                               <a class="contact-block-link mpall  fakelink" target="redir" onclick="groupChangeMember({{$m.change_member.gid}},{{$m.change_member.cid}},'{{$m.change_member.sec_token}}'); return true;">
+                                       <img class="contact-block-img mpall " src="{{$m.thumb}}" title="{{$m.name}} [{{$m.itemurl}}]" alt="{{$m.name}}">
+                               </a>
+                       </div>
+                       {{/if}}
+               {{/foreach}}
+       </div>
+       <div id="group-all-contacts-end"></div>
 </div>
index e3933e3815cdd48ddac9f2f38b3f7ac79ac499df..2d0bf9bd06d46dd58f4b8e1b140944f1adb68088 100644 (file)
@@ -14,7 +14,7 @@
 <div class="intro-wrapper-end" id="intro-wrapper-end-{{$contact_id}}"></div>
 <form class="intro-form" action="notifications/{{$intro_id}}" method="post">
 <input class="intro-submit-ignore" type="submit" name="submit" value="{{$ignore|escape:'html'}}" />
-<input class="intro-submit-discard" type="submit" name="submit" value="{{$discard|escape:'html'}}" />
+{{if $discard}}<input class="intro-submit-discard" type="submit" name="submit" value="{{$discard|escape:'html'}}" />{{/if}}
 </form>
 <div class="intro-form-end"></div>
 
index 381b0671676fe1a5fd9e86f9bde8f33aa79bcd8b..b1ec4bae531c38d46d70daf2faa6130aa85c1696 100644 (file)
@@ -1,8 +1,11 @@
 <?php
+
 /**
  * Theme settings
  */
 
+use Friendica\App;
+
 function theme_content(App $a) {
        if (!local_user()) {
                return;
index 89f44d9c0454b3e6c7e05d6b5c86bb4c9c44f705..1095dfcc5d83ab1a57d17d9e3d32bedc048c539c 100644 (file)
@@ -6,7 +6,7 @@ $uid = get_theme_uid();
 
 $s_colorset = get_config('duepuntozero','colorset');
 $colorset = get_pconfig( $uid, 'duepuntozero', 'colorset');
-if (!x($colorset)) 
+if (!x($colorset))
     $colorset = $s_colorset;
 
 if ($colorset) {
@@ -25,5 +25,3 @@ if ($colorset) {
 }
 
 echo $setcss;
-
-?>
index c674a99d99ad848bb250c72667a8372860f80c97..dc8f29b2facfa0db1de9401a0a1e2eea25c1ea29 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Friendica\App;
+
 function duepuntozero_init(App $a) {
 
 set_template_engine($a, 'smarty3');
index 57e88265721a27a3814b541510a72827769801a8..229e863e93dc6b37ffa56982c3c3eae2bb2d3981 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Friendica\App;
+
 require_once('view/theme/frio/php/Image.php');
 
 function theme_content(App $a) {
index e787384eda6448b7a9d5fc11712467a3d427126e..8cc8997930ed7792b179cd26536b89fea4f1ba34 100644 (file)
@@ -98,7 +98,7 @@ blockquote {
 code {
     white-space: pre-wrap;
 }
-.help-content-wrapper code {display: inline}
+.help-content-wrapper code, .help-aside-wrapper code {display: inline}
 
 /**
  * mobile aside
@@ -194,6 +194,9 @@ code {
     padding: 8px 16px;
     color: inherit;
 }
+a.btn:hover {
+    color: #333;
+}
 
 .btn-default {
     background: #ededed;
@@ -241,6 +244,12 @@ code {
     padding-left: 0;
     padding-right: 0;
 }
+.btn-clear,
+.btn-clear:active {
+    border: 0;
+    background: transparent;
+    box-shadow: none;
+}
 .btn-eventnav, btn-eventnav:hover {
     font-size: 16px;
     background: none;
@@ -1424,6 +1433,12 @@ section #jotOpen {
     border-radius: 4px;
     position: relative;
 }
+.panel.panel-inline {
+    margin-left: -15px;
+    margin-right: -15px;
+    margin-top: 15px;
+    padding: 15px;
+}
 .panel .panel-body {
     padding: 15px;
     font-size: 14px;
@@ -1957,7 +1972,8 @@ ul.dropdown-menu li:hover {
     font-size: 12px;
 }
 .media-list > li:hover,
-.media-list > li.selected {
+.media-list > li.selected,
+.media-list > li.active {
     border-left: 3px solid $link_color;
     background-color: rgba(247, 247, 247, $contentbg_transp);
 }
@@ -2045,9 +2061,9 @@ ul.dropdown-menu li:hover {
 .allfriends-content-wrapper, .match-content-wrapper, .dirfind-content-wrapper,
 .directory-content-wrapper, .manage-content-wrapper, .notes-content-wrapper,
 .message-content-wrapper, .apps-content-wrapper, .photos-content-wrapper,
-.admin-content-wrapper, .group-content-wrapper, .viewcontacts-content-wrapper,
-.dfrn_request-content-wrapper, .friendica-content-wrapper, .credits-content-wrapper,
-.nogroup-content-wrapper, .profperm-content-wrapper {
+.admin-content-wrapper, .viewcontacts-content-wrapper, .dfrn_request-content-wrapper,
+.friendica-content-wrapper, .credits-content-wrapper, .nogroup-content-wrapper,
+.profperm-content-wrapper {
     min-height: calc(100vh - 150px);
     padding: 15px;
     padding-bottom: 20px;
@@ -2094,6 +2110,9 @@ ul.viewcontact_wrapper > li {
     position: relative;*/
     /*border-left: 3px solid white;*/
 }
+.contact-wrapper .contact-photo-wrapper button {
+    padding: 0;
+}
 .contact-wrapper.media {
     overflow: visible;
     word-wrap: break-word;
@@ -2124,6 +2143,9 @@ ul.viewcontact_wrapper > li {
 .contact-wrapper .contact-photo-overlay-content.xl {
     font-size: 48px;
 }
+.contact-wrapper .contact-photo-menu {
+    top: auto;
+}
 
 .contact-entry-desc {
     color: #555;
@@ -2197,6 +2219,61 @@ ul li:hover .contact-wrapper .contact-action-link:hover {
     padding-top: 10px;
 }
 
+/* group edit page */
+.group-actions {
+    margin-top: 20px;
+    margin-bottom: 10px;
+    font-size: 30px;
+}
+.group-actions button,
+.group-actions a {
+    font-size: 18px;
+}
+#group-edit-wrapper {
+    display: none;
+}
+#group-update-wrapper .contact-photo-overlay {
+    display: none;
+}
+#group-update-wrapper .viewcontact_wrapper .contact-group-actions {
+    height: 100%;
+    margin-top: -10px;
+    display: flex;
+}
+#group-update-wrapper .viewcontact_wrapper .contact-action-link {
+    opacity: 0.8;
+    font-size: 20px;
+    line-height: 50px;
+}
+#group-update-wrapper .viewcontact_wrapper .contact-action-link:hover {
+    opacity: 1;
+}
+#group-update-wrapper .shortmode {
+    height: 53px;
+    overflow: hidden;
+}
+#group-update-wrapper .shortmode .contact-photo {
+    height: 32px;
+    width: 32px;
+}
+#group-update-wrapper .shortmode .media {
+    overflow: hidden;
+}
+#group-update-wrapper .shortmode .contact-entry-desc {
+    font-size: 12px !important;
+}
+#group-update-wrapper .shortmode .contact-entry-desc h4.media-heading {
+    margin: 0;
+}
+#group-update-wrapper .shortmode .contact-entry-desc h4.media-heading a {
+    font-size: 13px !important;
+    white-space: nowrap;
+}
+#group-update-wrapper .shortmode .contact-entry-desc .contact-entry-rel,
+#group-update-wrapper .shortmode .contact-entry-desc .contact-entry-network {
+    display: none;
+}
+
 /* private mail */
 .message-content-wrapper > li {
 /* we need this overwriting because we have no template file
diff --git a/view/theme/frio/js/mod_group.js b/view/theme/frio/js/mod_group.js
new file mode 100644 (file)
index 0000000..bc513ac
--- /dev/null
@@ -0,0 +1,88 @@
+
+/**
+ * @file view/theme/frio/js/mod_group.js
+ * @brief The javascript for the group module
+ */
+
+
+$(document).ready(function() {
+       // Add an event listeners on buttons for switching the contact list view
+       $("body").on("click", ".group-list-switcher", function() {
+               switchGroupViewMode(this);
+       });
+});
+
+/**
+ * @brief Change the group membership of the contacts and fetch the new grup list
+ * as html
+ *
+ * @param {int} gid The group ID
+ * @param {int} cid The contact ID
+ * @param {string} sec_token The security token
+ *
+ * @returns {undefined}
+ */
+function groupChangeMember(gid, cid, sec_token) {
+       $("#contact-entry-wrapper-" + cid).fadeTo("fast", 0.33);
+       $(".tooltip").tooltip("hide");
+       $("body").css("cursor", "wait");
+
+       $.get('group/' + gid + '/' + cid + "?t=" + sec_token, function(data) {
+                       // Insert the new group member list
+                       $("#group-update-wrapper").html(data);
+
+                       // Apply the actual gropu list view mode to the new
+                       // group list html
+                       var activeMode = $(".group-list-switcher.active");
+                       switchGroupViewMode(activeMode[0]);
+
+                       $("body").css("cursor", "auto");
+       });
+}
+
+/**
+ * @brief Change the group list view mode
+ *
+ * @param {object} elm The button element of the view mode switcher
+ * @returns {undefined}
+ */
+function switchGroupViewMode(elm) {
+               // Remove the active class from group list switcher buttons
+               $(".group-list-switcher").removeClass("active");
+               // And add it to the active button element
+               $(elm).addClass("active");
+
+               // Add or remove the css classes for the group list with regard to the active view mode
+               if (elm.id === "group-list-small") {
+                       $("#contact-group-list > li").addClass("shortmode col-lg-6 col-md-6 col-sm-6 col-xs-12");
+               } else {
+                       $("#contact-group-list > li").removeClass("shortmode col-lg-6 col-md-6 col-sm-6 col-xs-12");
+               }
+}
+
+/**
+ * @brief Filter the group member list for contacts
+ *
+ * @returns {undefined}
+ */
+function filterList() {
+       // Declare variables
+       var input, filter, ul, li, a, i;
+       input = document.getElementById("contacts-search");
+       filter = input.value.toUpperCase();
+       li = document.querySelectorAll("#contact-group-list>li");
+
+       // Loop through all list items, and hide those who don't match the search query
+       for (i = 0; i < li.length; i++) {
+               // Get the heading element
+               var mh = li[i].getElementsByClassName("media-heading")[0];
+               // The first child of the heading element should contain
+               // the text which we want to filter
+               a = mh.firstChild;
+               if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
+                       li[i].style.display = "";
+               } else {
+                       li[i].style.display = "none";
+               }
+       }
+}
index c56f63d9e33fcba28ae2c4342d40616b9956472b..ef7e413ad828e1c691cab66c3eb58828d3142ac2 100644 (file)
 <head>
        <title><?php if(x($page,'title')) echo $page['title'] ?></title>
        <meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>">
-       <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>
+       <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
        <script>var frio="<?php echo "view/theme/frio"; ?>";</script>
-       <?php $baseurl = App::get_baseurl(); ?>
+       <?php $baseurl = Friendica\App::get_baseurl(); ?>
        <?php $frio = "view/theme/frio"; ?>
-       <?php 
+       <?php
                // Because we use minimal for modals the header and the included js stuff should be only loaded
                // if the page is an standard page (so we don't have it twice for modals)
-               // 
+               //
                /// @todo Think about to move js stuff in the footer
                if(!$minimal) {
                        if(x($page,'htmlhead')) echo $page['htmlhead'];
index 59a246bf99647cf53ad6eca0cb8086923a1b37f6..17fbb1fbac85a3433fd4e1ad9a3a1720010e4735 100644 (file)
@@ -3,10 +3,11 @@
 /**
  * @file view/theme/frio/php/frio_boot.php
  *
- * @brief This file contains functions for page contstruction
+ * @brief This file contains functions for page construction
  *
  */
 
+use Friendica\App;
 
 /**
  * @brief Load page template in dependence of the template mode
index 9e3d2ca638ab0595d1580a8f3481e3888c30d7fb..26a5859efca4bfb7b967b65685acc8d66e7cd9c5 100644 (file)
@@ -10,9 +10,9 @@
        <title><?php if(x($page,'title')) echo $page['title'] ?></title>
        <meta name="viewport" content="initial-scale=1.0">
        <meta request="<?php echo htmlspecialchars($_REQUEST['pagename']) ?>">
-       <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>
+       <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
        <script>var frio="<?php echo "view/theme/frio"; ?>";</script>
-       <?php $baseurl = App::get_baseurl(); ?>
+       <?php $baseurl = Friendica\App::get_baseurl(); ?>
        <?php $frio = "view/theme/frio"; ?>
        <?php if(x($page,'htmlhead')) echo $page['htmlhead']; ?>
 </head>
diff --git a/view/theme/frio/templates/admin_aside.tpl b/view/theme/frio/templates/admin_aside.tpl
new file mode 100644 (file)
index 0000000..ec19ec9
--- /dev/null
@@ -0,0 +1,85 @@
+<script>
+       // update pending count //
+       $(function(){
+               $("nav").bind('nav-update', function(e,data){
+                       var elm = $('#pending-update');
+                       var register = $(data).find('register').text();
+                       if (register=="0") { register = ""; }
+                       elm.html(register);
+               });
+       });
+</script>
+
+<div class="widget">
+       <h3><a href="{{$admurl}}">{{$admtxt}}</a></h3>
+
+       <ul role="menu">
+               {{foreach $subpages as $name => $item}}
+               <li role="menuitem" class="{{$item.2}}">
+                       <a href="{{$item.0}}" {{if $item.accesskey}}accesskey="{{$item.accesskey}}"{{/if}}>
+                               {{$item.1}}
+                               {{if $name == "users"}}
+                                <span id="pending-update" class="badge pull-right"></span>
+                               {{/if}}
+                       </a>
+               </li>
+               {{/foreach}}
+       </ul>
+
+       {{if $admin.update}}
+       <ul role="menu">
+               <li role="menuitem" class="{{$admin.update.2}}">
+                       <a href="{{$admin.update.0}}" {{if $admin.update.accesskey}}accesskey="{{$admin.update.accesskey}}"{{/if}}>
+                               {{$admin.update.1}}
+                       </a>
+               </li>
+       </ul>
+       {{/if}}
+</div>
+
+{{if $admin.plugins_admin}}
+<div class="widget">
+       <h3>{{$plugadmtxt}}</h3>
+       <ul role="menu">
+               {{foreach $admin.plugins_admin as $name => $item}}
+               <li role="menuitem" class="{{$item.2}}">
+                       <a href="{{$item.0}}" {{if $item.accesskey}}accesskey="{{$item.accesskey}}"{{/if}}>
+                               {{$item.1}}
+                       </a>
+               </li>
+               {{/foreach}}
+       </ul>
+</div>
+{{/if}}
+
+<div class="widget">
+       <h3>{{$logtxt}}</h3>
+       <ul role="menu">
+               <li role="menuitem" class="{{$admin.logs.2}}">
+                       <a href="{{$admin.logs.0}}" {{if $admin.logs.accesskey}}accesskey="{{$admin.logs.accesskey}}"{{/if}}>
+                               {{$admin.logs.1}}
+                       </a>
+               </li>
+               <li role="menuitem" class="{{$admin.viewlogs.2}}">
+                       <a href="{{$admin.viewlogs.0}}" {{if $admin.viewlogs.accesskey}}accesskey="{{$admin.viewlogs.accesskey}}"{{/if}}>
+                               {{$admin.viewlogs.1}}
+                       </a>
+               </li>
+       </ul>
+</div>
+
+<div class="widget">
+       <h3>{{$diagnosticstxt}}</h3>
+       <ul role="menu">
+               <li role="menuitem" class="{{$admin.diagnostics_probe.2}}">
+                       <a href="{{$admin.diagnostics_probe.0}}" {{if $admin.diagnostics_probe.accesskey}}accesskey="{{$admin.diagnostics_probe.accesskey}}"{{/if}}>
+                               {{$admin.diagnostics_probe.1}}
+                       </a>
+               </li>
+               <li role="menuitem" class="{{$admin.diagnostics_webfinger.2}}">
+                       <a href="{{$admin.diagnostics_webfinger.0}}" {{if $admin.viewlogs.accesskey}}accesskey="{{$admin.diagnostics_webfinger.accesskey}}"{{/if}}>
+                               {{$admin.diagnostics_webfinger.1}}
+                       </a>
+               </li>
+       </ul>
+</div>
index 36564cf3370d7b97d6c91b3e904d517a78d8f6da..e1c059eddf8dfdf3838390c965f70d1c273e7517 100644 (file)
@@ -1,11 +1,11 @@
 
-<div class="contact-wrapper media" id="contact-entry-wrapper-{{$contact.id}}" >
+<div class="contact-wrapper media" id="contact-entry-wrapper-{{$contact.id}}">
 
                {{* This is a wrapper for the contact picture and the dropdown menu with contact relating actions *}}
-               <div class="contact-photo-wrapper dropdown pull-left" >
-                       <div class="contact-entry-photo mframe" id="contact-entry-photo-{{$contact.id}}" >
+               <div class="contact-photo-wrapper dropdown media-left">
+                       <div class="contact-entry-photo mframe" id="contact-entry-photo-{{$contact.id}}">
 
-                               <button type="button" class="btn btn-link dropdown-toggle" id="contact-photo-menu-{{$contact.id}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
+                               <button type="button" class="btn btn-link dropdown-toggle" id="contact-photo-menu-{{$contact.id}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                        <div class="contact-photo-image-wrapper hidden-xs">
                                                <img class="contact-photo media-object xl" src="{{$contact.thumb}}" {{$contact.sparkle}} alt="{{$contact.name}}" />
 
                </div>
 
                <div class="media-body">
+                       {{if $contact.photo_menu}}
                        {{* The contact actions like private mail, delete contact, edit contact and so on *}}
                        <div class="contact-actions pull-right nav-pills preferences hidden-xs">
-                               {{if $contact.photo_menu.pm     }}<button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.pm.1}}')" data-toggle="tooltip" title="{{$contact.photo_menu.pm.0}}"><i class="fa fa-envelope" aria-hidden="true"></i></button>{{/if}}
-                               {{if $contact.photo_menu.poke   }}<button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.poke.1}}')" data-toggle="tooltip" title="{{$contact.photo_menu.poke.0}}"><i class="fa fa-heartbeat" aria-hidden="true"></i></button>{{/if}}
-                               {{if $contact.photo_menu.network}}<a class="contact-action-link btn-link" href="{{$contact.photo_menu.network.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.network.0}}"><i class="fa fa-cloud" aria-hidden="true"></i></a>{{/if}}
-                               {{if $contact.photo_menu.edit   }}<a class="contact-action-link btn-link" href="{{$contact.photo_menu.edit.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.edit.0}}"><i class="fa fa-user" aria-hidden="true"></i></a>{{/if}}
-                               {{if $contact.photo_menu.drop   }}<button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.drop.1}}')" data-toggle="tooltip" title="{{$contact.photo_menu.drop.0}}"><i class="fa fa-user-times" aria-hidden="true"></i></button>{{/if}}
-                               {{if $contact.photo_menu.follow }}<a class="contact-action-link btn-link" href="{{$contact.photo_menu.follow.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.follow.0}}"><i class="fa fa-user-plus" aria-hidden="true"></i></a>{{/if}}
-                               {{if $contact.photo_menu.hide   }}<a class="contact-action-link btn-link" href="{{$contact.photo_menu.hide.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.hide.0}}"><i class="fa fa-times" aria-hidden="true"></i></a>{{/if}}
+                               {{if $contact.photo_menu.pm}}
+                               <button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.pm.1}}'); return false;" data-toggle="tooltip" title="{{$contact.photo_menu.pm.0}}">
+                                       <i class="fa fa-envelope" aria-hidden="true"></i>
+                               </button>
+                               {{/if}}
+                               {{if $contact.photo_menu.poke}}
+                               <button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.poke.1}}'); return false;" data-toggle="tooltip" title="{{$contact.photo_menu.poke.0}}">
+                                       <i class="fa fa-heartbeat" aria-hidden="true"></i>
+                               </button>
+                               {{/if}}
+                               {{if $contact.photo_menu.network}}
+                               <a class="contact-action-link btn-link" href="{{$contact.photo_menu.network.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.network.0}}">
+                                       <i class="fa fa-cloud" aria-hidden="true"></i>
+                               </a>
+                               {{/if}}
+                               {{if $contact.photo_menu.edit}}
+                               <a class="contact-action-link btn-link" href="{{$contact.photo_menu.edit.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.edit.0}}">
+                                       <i class="fa fa-user" aria-hidden="true"></i>
+                               </a>
+                               {{/if}}
+                               {{if $contact.photo_menu.drop}}
+                               <button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.drop.1}}'); return false;" data-toggle="tooltip" title="{{$contact.photo_menu.drop.0}}">
+                                       <i class="fa fa-user-times" aria-hidden="true"></i>
+                               </button>
+                               {{/if}}
+                               {{if $contact.photo_menu.follow}}
+                               <a class="contact-action-link btn-link" href="{{$contact.photo_menu.follow.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.follow.0}}">
+                                       <i class="fa fa-user-plus" aria-hidden="true"></i>
+                               </a>
+                               {{/if}}
+                               {{if $contact.photo_menu.hide}}
+                               <a class="contact-action-link btn-link" href="{{$contact.photo_menu.hide.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.hide.0}}">
+                                       <i class="fa fa-times" aria-hidden="true"></i>
+                               </a>
+                               {{/if}}
+                       </div>
+                       {{/if}}
+
+                       {{* The button to add or remove contacts from a contact group - group edit page *}}
+                       {{if $contact.change_member}}
+                       <div class="contact-group-actions pull-right nav-pills preferences">
+                               <button type="button" class="contact-action-link btn-link" onclick="groupChangeMember({{$contact.change_member.gid}},{{$contact.change_member.cid}},'{{$contact.change_member.sec_token}}'); return true;" data-toggle="tooltip" title="{{$contact.change_member.title}}">
+                                       {{if $contact.label == "members"}}
+                                       <i class="fa fa-times-circle" aria-hidden="true"></i>
+                                       {{elseif $contact.label == "contacts"}}
+                                       <i class="fa fa-plus-circle" aria-hidden="true"></i>
+                                       {{/if}}
+                               </button>
                        </div>
+                       {{/if}}
 
                        {{* The contact description (e.g. Name, Network, kind of connection and so on *}}
                        <div class="contact-entry-desc">
-                               <div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}" >
+                               <div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}">
                                        <h4 class="media-heading"><a href="{{$contact.url}}">{{$contact.name}}</a>
                                        {{if $contact.account_type}} <small class="contact-entry-details" id="contact-entry-accounttype-{{$contact.id}}">({{$contact.account_type}})</small>{{/if}}
                                        {{if $contact.account_type == 'Forum'}}<i class="fa fa-comments-o" aria-hidden="true"></i>{{/if}}
                                        {{* @todo this needs some changing in core because $contact.account_type contains a translated string which may notbe the same in every language *}}
                                        </h4>
                                </div>
-                               {{if $contact.alt_text}}<div class="contact-entry-details" id="contact-entry-rel-{{$contact.id}}" >{{$contact.alt_text}}</div>{{/if}}
-                               {{if $contact.itemurl}}<div class="contact-entry-details" id="contact-entry-url-{{$contact.id}}" >{{$contact.itemurl}}</div>{{/if}}
+                               {{if $contact.alt_text}}<div class="contact-entry-details contact-entry-rel" id="contact-entry-rel-{{$contact.id}}" >{{$contact.alt_text}}</div>{{/if}}
+                               {{if $contact.itemurl}}<div class="contact-entry-details contact-entry-url" id="contact-entry-url-{{$contact.id}}" >{{$contact.itemurl}}</div>{{/if}}
                                {{if $contact.tags}}<div class="contact-entry-details" id="contact-entry-tags-{{$contact.id}}" >{{$contact.tags}}</div>{{/if}}
-                               {{if $contact.details}}<div class="contact-entry-details" id="contact-entry-details-{{$contact.id}}" >{{$contact.details}}</div>{{/if}}
-                               {{if $contact.network}}<div class="contact-entry-details" id="contact-entry-network-{{$contact.id}}" >{{$contact.network}}</div>{{/if}}
+                               {{if $contact.details}}<div class="contact-entry-details contact-entry-tags" id="contact-entry-details-{{$contact.id}}" >{{$contact.details}}</div>{{/if}}
+                               {{if $contact.network}}<div class="contact-entry-details contact-entry-network" id="contact-entry-network-{{$contact.id}}" >{{$contact.network}}</div>{{/if}}
                        </div>
 
                        {{* The checkbox to perform batch actions to these contacts (for batch actions have a look at contacts-template.tpl) *}}
 {{* the following part is a nearly a copy of the part above but it is modified for working with js.
 We use this part to filter the contacts with jquery.textcomplete *}}
 <div class="javascript-template" rel="contact-template" style="display: none">
-       <div class="contact-wrapper media" id="contact-entry-wrapper-{$id}" >
+       <div class="contact-wrapper media" id="contact-entry-wrapper-{$id}">
 
                        {{* This is a wrapper for the contact picture and the dropdown menu with contact relating actions *}}
-                       <div class="contact-photo-wrapper dropdown pull-left" >
-                               <div class="contact-entry-photo mframe" id="contact-entry-photo-{$id}" >
+                       <div class="contact-photo-wrapper dropdown media-left">
+                               <div class="contact-entry-photo mframe" id="contact-entry-photo-{$id}">
 
-                                       <button type="button" class="btn btn-link dropdown-toggle" id="contact-photo-menu-{$id}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
+                                       <button type="button" class="btn btn-link dropdown-toggle" id="contact-photo-menu-{$id}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                                <div class="contact-photo-image-wrapper hidden-xs">
                                                        <img class="contact-photo media-object xl" src="{$thumb}" {11} alt="{$name}" />
 
@@ -135,19 +178,58 @@ We use this part to filter the contacts with jquery.textcomplete *}}
                        </div>
 
                        <div class="media-body">
+                               {if $photo_menu}
                                {{* The contact actions like private mail, delete contact, edit contact and so on *}}
                                <div class="contact-actions pull-right nav-pills preferences hidden-xs">
-                                       {if $photo_menu.pm}<button type="button" class="contact-action-link btn-link" onclick="addToModal('{$photo_menu.pm.1}')" data-toggle="tooltip" title="{$photo_menu.pm.0}"><i class="fa fa-envelope" aria-hidden="true"></i></button>{/if}
-                                       {if $photo_menu.poke}<button type="button" class="contact-action-link btn-link" onclick="addToModal('{$photo_menu.poke.1}')" data-toggle="tooltip" title="{$photo_menu.poke.0}"><i class="fa fa-heartbeat" aria-hidden="true"></i></button>{/if}
-                                       {if $photo_menu.network}<a class="contact-action-link btn-link" href="{$photo_menu.network.1}" data-toggle="tooltip" title="{$photo_menu.network.0}"><i class="fa fa-cloud" aria-hidden="true"></i></a>{/if}
-                                       {if $photo_menu.edit}<a class="contact-action-link btn-link" href="{$photo_menu.edit.1}" data-toggle="tooltip" title="{$photo_menu.edit.0}"><i class="fa fa-pencil" aria-hidden="true"></i></a>{/if}
-                                       {if $photo_menu.drop}<a class="contact-action-link btn-link" href="{$photo_menu.drop.1}" data-toggle="tooltip" title="{$photo_menu.drop.0}"><i class="fa fa-user-times" aria-hidden="true"></i></a>{/if}
-                                       {if $photo_menu.follow}<a class="contact-action-link btn-link" href="{$photo_menu.follow.1}" data-toggle="tooltip" title="{$photo_menu.follow.0}"><i class="fa fa-user-plus" aria-hidden="true"></i></a>{/if}
+                                       {if $photo_menu.pm}
+                                       <button type="button" class="contact-action-link btn-link" onclick="addToModal('{$photo_menu.pm.1}')" data-toggle="tooltip" title="{$photo_menu.pm.0}">
+                                               <i class="fa fa-envelope" aria-hidden="true"></i>
+                                       </button>
+                                       {/if}
+                                       {if $photo_menu.poke}
+                                       <button type="button" class="contact-action-link btn-link" onclick="addToModal('{$photo_menu.poke.1}')" data-toggle="tooltip" title="{$photo_menu.poke.0}">
+                                               <i class="fa fa-heartbeat" aria-hidden="true"></i>
+                                       </button>
+                                       {/if}
+                                       {if $photo_menu.network}
+                                       <a class="contact-action-link btn-link" href="{$photo_menu.network.1}" data-toggle="tooltip" title="{$photo_menu.network.0}">
+                                               <i class="fa fa-cloud" aria-hidden="true"></i>
+                                       </a>
+                                       {/if}
+                                       {if $photo_menu.edit}
+                                       <a class="contact-action-link btn-link" href="{$photo_menu.edit.1}" data-toggle="tooltip" title="{$photo_menu.edit.0}">
+                                               <i class="fa fa-pencil" aria-hidden="true"></i>
+                                       </a>
+                                       {/if}
+                                       {if $photo_menu.drop}
+                                       <a class="contact-action-link btn-link" href="{$photo_menu.drop.1}" data-toggle="tooltip" title="{$photo_menu.drop.0}">
+                                               <i class="fa fa-user-times" aria-hidden="true"></i>
+                                       </a>
+                                       {/if}
+                                       {if $photo_menu.follow}
+                                       <a class="contact-action-link btn-link" href="{$photo_menu.follow.1}" data-toggle="tooltip" title="{$photo_menu.follow.0}">
+                                               <i class="fa fa-user-plus" aria-hidden="true"></i>
+                                       </a>
+                                       {/if}
+                               </div>
+                               {/if}
+
+                               {{* The button to add or remove contacts from a contact group - group edit page *}}
+                               {if $contact.change_member}
+                               <div class="contact-group-actions pull-right nav-pills preferences">
+                                       <button type="button" class="contact-action-link btn-link" onclick="groupChangeMember({$contact.change_member.gid},{$contact.change_member.cid},'{$contact.change_member.sec_token}'); return true;" data-toggle="tooltip" title="{$contact.change_member.title}">
+                                               {if $contact.label == "members"}
+                                               <i class="fa fa-times-circle" aria-hidden="true"></i>
+                                               {elseif $contact.label == "contacts"}
+                                               <i class="fa fa-plus-circle" aria-hidden="true"></i>
+                                               {/if}
+                                       </button>
                                </div>
+                               {/if}
 
                                {{* The contact description (e.g. Name, Network, kind of connection and so on *}}
                                <div class="contact-entry-desc">
-                                       <div class="contact-entry-name" id="contact-entry-name-{$id}" >
+                                       <div class="contact-entry-name" id="contact-entry-name-{$id}">
                                                <h4 class="media-heading"><a href="{$url}">{$name}</a>
                                                {if $account_type} <small class="contact-entry-details" id="contact-entry-accounttype-{$id}">({$account_type})</small>{/if}
                                                {if $account_type == 'Forum'}<i class="fa fa-comments-o" aria-hidden="true"></i>{/if}
diff --git a/view/theme/frio/templates/generic_links_widget.tpl b/view/theme/frio/templates/generic_links_widget.tpl
new file mode 100644 (file)
index 0000000..5510eae
--- /dev/null
@@ -0,0 +1,12 @@
+
+<div class="widget{{if $class}} {{$class}}{{/if}}">
+       {{if $title}}<h3>{{$title}}</h3>{{/if}}
+       {{if $desc}}<div class="desc">{{$desc}}</div>{{/if}}
+
+       <ul role="menu">
+               {{foreach $items as $item}}
+                       <li role="menuitem" class="{{if $item.selected}}selected{{/if}}"><a href="{{$item.url}}" {{if $item.accesskey}}accesskey="{{$item.accesskey}}"{{/if}}>{{$item.label}}</a></li>
+               {{/foreach}}
+       </ul>
+
+</div>
diff --git a/view/theme/frio/templates/group_drop.tpl b/view/theme/frio/templates/group_drop.tpl
new file mode 100644 (file)
index 0000000..edd27cc
--- /dev/null
@@ -0,0 +1,5 @@
+
+{{* Link for deleting contact groups *}}
+<a href="group/drop/{{$id}}?t={{$form_security_token}}" onclick="return confirmDelete();" id="group-delete-icon-{{$id}}" class="btn btn-clear" title="{{$delete}}" data-toggle="tooltip">
+       <i class="fa fa-trash" aria-hidden="true"></i>
+</a>
diff --git a/view/theme/frio/templates/group_edit.tpl b/view/theme/frio/templates/group_edit.tpl
new file mode 100644 (file)
index 0000000..d94dd33
--- /dev/null
@@ -0,0 +1,77 @@
+
+{{* This template is for the "group" module. It provides the user the possibility to
+    modify a specific contact group (remove contact group, edit contact group name,
+    add or remove contacts to the contact group.
+*}}
+
+<script type="text/javascript" src="view/theme/frio/js/mod_group.js"></script>
+
+<div class="generic-page-wrapper">
+
+       {{* The buttons for editing the contact group (edit name / remove contact group) *}}
+       <div class="group-actions pull-right">
+               <button type="button" id="group-rename" class="btn btn-clear" onclick="openClose('group-edit-wrapper'); return false;" title="{{$edit_name}}" data-toggle="tooltip">
+                       <i class="fa fa-pencil" aria-hidden="true"></i>
+               </button>
+               {{if $drop}}{{$drop}}{{/if}}
+       </div>
+
+       {{include file="section_title.tpl"}}
+
+       {{* Edit the name of the group *}}
+       <div id="group-edit-wrapper" class="panel panel-inline">
+               <form action="group/{{$gid}}" id="group-edit-form" method="post">
+                       <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+                       {{include file="field_input.tpl" field=$gname}}
+                       <div id="group-edit-submit-wrapper" class="form-group pull-right">
+                               <button class="btn btn-primary btn-small" type="submit" name="submit" value="{{$submit|escape:'html'}}">
+                                       {{$submit|escape:'html'}}
+                               </button>
+                       </div>
+                       <div id="group-edit-select-end" class="clear"></div>
+               </form>
+       </div>
+
+       {{* The search input field to search for contacts *}}
+       <div id="contacts-search-wrapper">
+               <div id="contacts-search-form" class="navbar-form" role="search">
+                       <div class="row">
+                               <div class="col-md-2"></div>
+                               <div class="col-md-8 ">
+                                       <div class="form-group form-group-search">
+                                               <input type="text"
+                                                       name="filter"
+                                                       id="contacts-search"
+                                                       class="search-input form-control form-search"
+                                                       onkeyup="filterList(); return false;"
+                                                       onfocus="this.select(); return false;"
+                                               />
+                                       </div>
+                               </div>
+                               <div class="col-md-2"></div>
+                       </div>
+               </div>
+       </div>
+
+       <hr>
+       <div id="contacts-search-end"></div>
+
+       {{if $groupeditor}}
+       {{* The buttons to switch between the different view modes *}}
+       <div id="group-list-view-switcher" class="btn-group btn-group-sm pull-right">
+               <botton type="button" id="group-list-big" class="active group-list-switcher btn btn-default">
+                       <i class="fa fa-align-justify" aria-hidden="true"></i>
+               </botton>
+               <button type="button" id="group-list-small" class="btn btn-default group-list-switcher">
+                       <i class="fa fa-th-large" aria-hidden="true"></i>
+               </button>
+       </div>
+       <div class="clear"></div>
+
+       {{* The contact group list *}}
+       <div id="group-update-wrapper">
+               {{include file="groupeditor.tpl"}}
+       </div>
+       {{/if}}
+</div>
diff --git a/view/theme/frio/templates/groupeditor.tpl b/view/theme/frio/templates/groupeditor.tpl
new file mode 100644 (file)
index 0000000..8d1db5b
--- /dev/null
@@ -0,0 +1,19 @@
+
+{{* Template for the contact group list *}}
+<div id="group" class="contact_list">
+
+       <ul id="contact-group-list" class="viewcontact_wrapper media-list">
+
+               {{* The contacts who are already members of the contact group *}}
+               {{foreach $groupeditor.members as $contact}}
+                       <li class="members active">{{include file="contact_template.tpl"}}</li>
+               {{/foreach}}
+
+               {{* The contacts who are not members of the contact group *}}
+               {{foreach $groupeditor.contacts as $contact}}
+                       <li class="contacts">{{include file="contact_template.tpl"}}</li>
+               {{/foreach}}
+
+       </ul>
+       <div class="clear"></div>
+</div>
index 8fd7ee609051b90cdaacb5acf48a7d9990ff4f60..1502a55aa21256a7fe774e653f5abfe5090bafb6 100644 (file)
@@ -13,7 +13,7 @@
 
                        <form class="intro-form" action="notifications/{{$intro_id}}" method="post">
                                <button class="btn-link intro-submit-ignore intro-action-link" type="submit" name="submit" value="{{$ignore|escape:'html'}}" title="{{$ignore|escape:'html'}}" data-toggle="tooltip"><i class="fa fa-ban" aria-hidden="true"></i></button>
-                               <button class="btn-link intro-submit-discard intro-action-link" type="submit" name="submit" value="{{$discard|escape:'html'}}" title="{{$discard|escape:'html'}}" data-toggle="tooltip"><i class="fa fa-trash-o" aria-hidden="true"></i></button>
+                               {{if $discard}}<button class="btn-link intro-submit-discard intro-action-link" type="submit" name="submit" value="{{$discard|escape:'html'}}" title="{{$discard|escape:'html'}}" data-toggle="tooltip"><i class="fa fa-trash-o" aria-hidden="true"></i></button>{{/if}}
                        </form>
                </div>
                <div class='intro-enty-name'><h4 class="media-heading"><a href="{{$zrl}}">{{$fullname}}</a></h4></div>
@@ -70,7 +70,7 @@
        <div class="intro-action-buttons">
                <form class="intro-form pull-left" action="notifications/{{$intro_id}}" method="post">
                        <button class="btn btn-small btn-default intro-submit-ignore" type="submit" name="submit" value="{{$ignore|escape:'html'}}">{{$ignore|escape:'html'}}</button>
-                       <button class="btn btn-small btn-default intro-submit-discard" type="submit" name="submit" value="{{$discard|escape:'html'}}">{{$discard|escape:'html'}}</button>&nbsp;
+                       {{if $discard}}<button class="btn btn-small btn-default intro-submit-discard" type="submit" name="submit" value="{{$discard|escape:'html'}}">{{$discard|escape:'html'}}</button>&nbsp;{{/if}}
                </form>
                <button class="btn btn-small btn-primary intro-submit-approve pull-right" onclick="addElmToModal('#intro-approve-wrapper-{{$contact_id}}')">{{$approve|escape:'html'}}</button>
        </div>
index f4387149290c75b178a3019463133cebe68b376f..69eef7a6a3c93676dd19d72437ad791432ff3798 100644 (file)
                </div>
                <div class="pull-right">
                        <ul class="nav navbar-nav navbar-right">
-                               <li><a href="register" data-toggle="tooltip" title="{{$register.title}}"><i class="fa fa-street-view fa-fw"></i> {{$register.desc}}</a></li>
+                               <li><a href="register" data-toggle="tooltip" title="{{$nav.register.3}}"><i class="fa fa-street-view fa-fw"></i></a></li>
                                <li>
                                        <a href="login?mode=none" id="nav-login"
                                                data-toggle="tooltip" title="{{$nav.login.3}}">
index a873e45131ca82a267dc5c4e57b1d0e9bfabed37..e0c382661a1be3b1099f626d9a9ffea4230537b8 100644 (file)
@@ -7,6 +7,8 @@
  *
  */
 
+use Friendica\App;
+
 $frio = "view/theme/frio";
 
 global $frio;
@@ -130,7 +132,7 @@ function frio_item_photo_menu(App $a, &$arr) {
  *  Additionally the profile, status and photo page links  will be changed
  *  to don't open in a new tab if the contact is a friendica contact.
  *
- * @param app $a The app data
+ * @param App $a The app data
  * @param array $args Contains contact data and the original photo_menu
  */
 function frio_contact_photo_menu(App $a, &$args){
@@ -182,7 +184,7 @@ function frio_contact_photo_menu(App $a, &$args){
  *  Some links will point to the local pages because the user would expect
  *  local page (these pages are: search, community, help, apps, directory).
  *
- * @param app $a The App class
+ * @param App $a The App class
  * @param array $nav The original nav menu
  */
 function frio_remote_nav($a,&$nav) {
@@ -271,7 +273,7 @@ function frio_remote_nav($a,&$nav) {
  * @param App $a The app data @TODO Unused
  * @param array $results The array with the originals from acl_lookup()
  */
-function frio_acl_lookup($a, &$results) {
+function frio_acl_lookup(App $a, &$results) {
        require_once("mod/contacts.php");
 
        $nets = ((x($_GET,"nets")) ? notags(trim($_GET["nets"])) : "");
index d739f56f269fb14f52dc4f8b1688367aac0ae073..9d920c2f62137f21e01e37b858fc83e0f5a5d5dc 100644 (file)
@@ -1,45 +1,45 @@
-<!DOCTYPE html >\r
-<html lang="<?php echo $lang; ?>">\r
-<head>\r
-  <title><?php if(x($page,'title')) echo $page['title'] ?></title>\r
-  <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>\r
-  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>\r
-</head>\r
-<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>\r
-       <?php if(x($page,'nav')) echo $page['nav']; ?>\r
-\r
-       <?php if( $a->module === 'home' ) { ?>\r
-       <center>\r
-       <div class="login-button">\r
-       <a href="login" class="login-button-link"><img class="login-button-image" src="images/friendica-1600.png" title="Click to log in"></a>\r
-       </div>\r
-       </center>\r
-\r
-       <?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {\r
-       ?>\r
-       <div class='section-wrapper'>\r
-       <section><?php if(x($page,'content')) echo $page['content']; ?>\r
-       </section>\r
-       </div>\r
-       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>\r
-\r
-       <?php } else { ?>\r
-       <div class='main-container'>\r
-<!--           <div class='main-content-container'>-->\r
-               <div class='section-wrapper'>\r
-               <?php if( ($a->module === 'settings' || $a->module === 'message' || $a->module === 'profile') && x($page,'aside')) echo $page['aside']; ?>\r
-               <section>\r
-                       <?php if(x($page,'content')) echo $page['content']; ?>\r
-                       <div id="pause"></div> <!-- The pause/resume Ajax indicator -->\r
-                       <div id="page-footer"></div>\r
-               </section>\r
-               </div>\r
-               <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>\r
-               <?php if( ($a->module === 'contacts') && x($page,'aside')) echo $page['aside']; ?>\r
-               <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>\r
-<!--           </div>-->\r
-       </div>\r
-       <?php } ?>\r
-       <?php if(x($page,'end')) echo $page['end']; ?>\r
-</body>\r
-</html>\r
+<!DOCTYPE html >
+<html lang="<?php echo $lang; ?>">
+<head>
+  <title><?php if(x($page,'title')) echo $page['title'] ?></title>
+  <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
+  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
+</head>
+<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>
+       <?php if(x($page,'nav')) echo $page['nav']; ?>
+
+       <?php if( $a->module === 'home' ) { ?>
+       <center>
+       <div class="login-button">
+       <a href="login" class="login-button-link"><img class="login-button-image" src="images/friendica-1600.png" title="Click to log in"></a>
+       </div>
+       </center>
+
+       <?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
+       ?>
+       <div class='section-wrapper'>
+       <section><?php if(x($page,'content')) echo $page['content']; ?>
+       </section>
+       </div>
+       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
+
+       <?php } else { ?>
+       <div class='main-container'>
+<!--           <div class='main-content-container'>-->
+               <div class='section-wrapper'>
+               <?php if( ($a->module === 'settings' || $a->module === 'message' || $a->module === 'profile') && x($page,'aside')) echo $page['aside']; ?>
+               <section>
+                       <?php if(x($page,'content')) echo $page['content']; ?>
+                       <div id="pause"></div> <!-- The pause/resume Ajax indicator -->
+                       <div id="page-footer"></div>
+               </section>
+               </div>
+               <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>
+               <?php if( ($a->module === 'contacts') && x($page,'aside')) echo $page['aside']; ?>
+               <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
+<!--           </div>-->
+       </div>
+       <?php } ?>
+       <?php if(x($page,'end')) echo $page['end']; ?>
+</body>
+</html>
index 7e4262cb6a46fc601c7228765405806d7b3cd752..24f41073e7cdace4aebf85385e4ba3cfce296a39 100644 (file)
@@ -9,6 +9,8 @@
  * Maintainer: Zach P <techcity@f.shmuz.in>
  */
 
+use Friendica\App;
+
 function frost_mobile_init(App $a) {
        $a->sourcename = 'Friendica mobile web';
        $a->videowidth = 250;
index 0fe3404f69c97dc7d157ce3e91ebcf54766fed31..65632ee0713d3001883bd8c4d807e69a468058e8 100644 (file)
@@ -1,43 +1,43 @@
-<!DOCTYPE html >\r
-<html lang="<?php echo $lang; ?>">\r
-<head>\r
-  <title><?php if(x($page,'title')) echo $page['title'] ?></title>\r
-  <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>\r
-  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>\r
-</head>\r
-<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>\r
-       <?php if(x($page,'nav')) echo $page['nav']; ?>\r
-\r
-       <?php if( $a->module === 'home' ) { ?>\r
-       <center>\r
-       <div class="login-button">\r
-       <a href="login" class="login-button-link"><img class="login-button-image" src="/images/friendica-1600.png" title="Click to log in"></a>\r
-       </div>\r
-       </center>\r
-\r
-       <?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {\r
-       ?>\r
-       <div class='section-wrapper'>\r
-       <section><?php if(x($page,'content')) echo $page['content']; ?>\r
-       </section>\r
-       </div>\r
-       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>\r
-\r
-       <?php } else { ?>\r
-       <div class='main-container'>\r
-               <!--<div class='main-content-loading'><img src="/view/theme/frost/images/ajax-loader.gif" alt="Please wait..."></div>-->\r
-               <div class='main-content-container'>\r
-               <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>\r
-               <section>\r
-                       <?php if(x($page,'content')) echo $page['content']; ?>\r
-                       <div id="pause"></div> <!-- The pause/resume Ajax indicator -->\r
-                       <div id="page-footer"></div>\r
-               </section>\r
-               <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>\r
-               <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>\r
-               </div>\r
-       </div>\r
-       <?php } ?>\r
-       <?php if(x($page,'end')) echo $page['end']; ?>\r
-</body>\r
-</html>\r
+<!DOCTYPE html >
+<html lang="<?php echo $lang; ?>">
+<head>
+  <title><?php if(x($page,'title')) echo $page['title'] ?></title>
+  <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
+  <?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
+</head>
+<body <?php if($a->module === 'home') echo 'onLoad="setTimeout(\'homeRedirect()\', 1500)"'?>>
+       <?php if(x($page,'nav')) echo $page['nav']; ?>
+
+       <?php if( $a->module === 'home' ) { ?>
+       <center>
+       <div class="login-button">
+       <a href="login" class="login-button-link"><img class="login-button-image" src="/images/friendica-1600.png" title="Click to log in"></a>
+       </div>
+       </center>
+
+       <?php } elseif ( $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
+       ?>
+       <div class='section-wrapper'>
+       <section><?php if(x($page,'content')) echo $page['content']; ?>
+       </section>
+       </div>
+       <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
+
+       <?php } else { ?>
+       <div class='main-container'>
+               <!--<div class='main-content-loading'><img src="/view/theme/frost/images/ajax-loader.gif" alt="Please wait..."></div>-->
+               <div class='main-content-container'>
+               <aside><?php if(x($page,'aside')) echo $page['aside']; ?></aside>
+               <section>
+                       <?php if(x($page,'content')) echo $page['content']; ?>
+                       <div id="pause"></div> <!-- The pause/resume Ajax indicator -->
+                       <div id="page-footer"></div>
+               </section>
+               <right_aside><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></right_aside>
+               <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
+               </div>
+       </div>
+       <?php } ?>
+       <?php if(x($page,'end')) echo $page['end']; ?>
+</body>
+</html>
index 4c22f0a11869664db5a6b58b4b1bfdc172fa0ad3..b09153876d67c09285609c27910d02ea35e33e24 100644 (file)
@@ -9,6 +9,8 @@
  * Maintainer: Zach P <techcity@f.shmuz.in>
  */
 
+use Friendica\App;
+
 function frost_init(App $a) {
        $a->videowidth = 400;
        $a->videoheight = 330;
index 993f778f87fc4def90d12e1deacdf9a79ee3fff6..47210012caa8f7ce95ae89640781a60ce78502c1 100644 (file)
@@ -1,8 +1,11 @@
 <?php
+
 /**
  * Theme settings
  */
 
+use Friendica\App;
+
 function theme_content(App $a) {
        if (!local_user()) {
                return;
index fc908522a1862144ccdf2f971dc9b77f44367136..5647fd493a88e1cd3f20a322df9abd54bb5af8e0 100644 (file)
@@ -7,6 +7,8 @@
  * Maintainer: Tobias <https://diekershoff.homeunix.net/friendica/profile/tobias>
  */
 
+use Friendica\App;
+
 function quattro_init(App $a) {
        $a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/tinycon.min.js"></script>';
        $a->page['htmlhead'] .= '<script src="'.App::get_baseurl().'/view/theme/quattro/js/quattro.js"></script>';;
index 1e97c6b462e70930defe99fa1e97757616482ca6..568f267c1c3e9fd7dc178ae6158f7065a00217e2 100644 (file)
@@ -2,7 +2,7 @@
 <html>
 <head>
   <title><?php if(x($page,'title')) echo $page['title'] ?></title>
-  <script>var baseurl="<?php echo App::get_baseurl() ?>";</script>
+  <script>var baseurl="<?php echo Friendica\App::get_baseurl() ?>";</script>
   <script type="text/javascript">
        function ScrollToBottom(){
        window.scrollTo(0,document.body.scrollHeight);
index 62713e00cd9e854d9bb7e9fab8a6d7c60c9d15d7..3efcf54f413a4a96c4f691f87c6a81f4964f78e7 100644 (file)
  * Screenshot: <a href="screenshot.png">Screenshot</a>
  */
 
+use Friendica\App;
+
 function smoothly_init(App $a) {
        set_template_engine($a, 'smarty3');
 
        $cssFile = null;
        $ssl_state = null;
        $baseurl = App::get_baseurl($ssl_state);
-$a->page['htmlhead'] .= <<< EOT
+       $a->page['htmlhead'] .= <<< EOT
 
 <script>
 function insertFormatting(BBcode, id) {
@@ -99,13 +101,12 @@ $(document).ready(function() {
 </script>
 EOT;
 
-       /** custom css **/
+       /** custom css **/
        if (!is_null($cssFile)) {
         $a->page['htmlhead'] .= sprintf('<link rel="stylesheet" type="text/css" href="%s" />', $cssFile);
        }
 
-_js_in_foot();
-
+       _js_in_foot();
 }
 
 if (! function_exists('_js_in_foot')) {
index 9fd19e8abae87c847db7a7de3415f7c6234879ec..0747770d3665052e23fa5dfd0aec419244e21d80 100644 (file)
@@ -1,9 +1,10 @@
 <?php
+
 /**
  * Theme settings
  */
 
-
+use Friendica\App;
 
 function theme_content(App $a) {
        if (!local_user()) {
index a42dfe6e13070d0b4d2cf2c58a8b0be8528ecf14..da2c08335dae02cb42c3e8579b8d7e33ac1b4cb3 100644 (file)
@@ -9,6 +9,8 @@
  * Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
  */
 
+use Friendica\App;
+
 require_once "include/plugin.php";
 require_once "include/socgraph.php";
 require_once "mod/proxy.php";