diff options
author | Mario Vavti <mario@mariovavti.com> | 2017-05-04 10:12:05 +0200 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2017-05-04 10:12:05 +0200 |
commit | a92b9b7adb2be489106138b6269a5f7fe8eea5aa (patch) | |
tree | abab4112741f5d28720185fe0308552de23f5e48 | |
parent | 263cfe2538a3e1a4e866c80b44ada158475cc792 (diff) | |
parent | bc776a9534b57231b83f4c65fefdc3637db0e024 (diff) | |
download | volse-hubzilla-a92b9b7adb2be489106138b6269a5f7fe8eea5aa.tar.gz volse-hubzilla-a92b9b7adb2be489106138b6269a5f7fe8eea5aa.tar.bz2 volse-hubzilla-a92b9b7adb2be489106138b6269a5f7fe8eea5aa.zip |
Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev
-rw-r--r-- | Zotlabs/Module/Import.php | 3 | ||||
-rwxr-xr-x | boot.php | 2 | ||||
-rw-r--r-- | composer.json | 2 | ||||
-rw-r--r-- | composer.lock | 15 | ||||
-rw-r--r-- | doc/about/hubzilla_project.bb | 3 | ||||
-rw-r--r-- | include/connections.php | 1 | ||||
-rw-r--r-- | include/zot.php | 4 | ||||
-rw-r--r-- | install/schema_mysql.sql | 2 | ||||
-rw-r--r-- | install/schema_postgres.sql | 2 | ||||
-rw-r--r-- | install/update.php | 11 | ||||
-rw-r--r-- | vendor/composer/autoload_classmap.php | 1 | ||||
-rw-r--r-- | vendor/composer/autoload_static.php | 1 | ||||
-rw-r--r-- | vendor/composer/installed.json | 14 | ||||
-rwxr-xr-x | vendor/simplepie/simplepie/library/SimplePie.php | 8 | ||||
-rw-r--r-- | vendor/simplepie/simplepie/library/SimplePie/Category.php | 65 | ||||
-rw-r--r-- | vendor/simplepie/simplepie/library/SimplePie/Item.php | 34 | ||||
-rw-r--r-- | view/de/hmessages.po | 16 |
17 files changed, 117 insertions, 67 deletions
diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php index 54bc7de81..ce3fd469a 100644 --- a/Zotlabs/Module/Import.php +++ b/Zotlabs/Module/Import.php @@ -318,6 +318,7 @@ class Import extends \Zotlabs\Web\Controller { unset($abook['abconfig']); unset($abook['abook_their_perms']); unset($abook['abook_my_perms']); + unset($abook['abook_not_here']); $abook['abook_account'] = $account_id; $abook['abook_channel'] = $channel['channel_id']; @@ -347,7 +348,7 @@ class Import extends \Zotlabs\Web\Controller { continue; } - create_table_from_array('abook',$abook); + abook_store_lowlevel($abook); $friends ++; if(intval($abook['abook_feed'])) @@ -52,7 +52,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'STD_VERSION', '2.5' ); define ( 'ZOT_REVISION', '1.2' ); -define ( 'DB_UPDATE_VERSION', 1190 ); +define ( 'DB_UPDATE_VERSION', 1191 ); define ( 'PROJECT_BASE', __DIR__ ); diff --git a/composer.json b/composer.json index 9ae0d2150..44606ff2b 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ "pixel418/markdownify": "^2.2", "bshaffer/oauth2-server-php": "^1.9", "ezyang/htmlpurifier": "^4.9", - "simplepie/simplepie": ">=1.4.4 || dev-master" + "simplepie/simplepie": "~1.5" }, "require-dev" : { "php" : ">=7.0", diff --git a/composer.lock b/composer.lock index bfab14cd5..bd902f197 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "62261cde663585403a8dd8fda5b85a95", + "content-hash": "21511c39f481ecdc20210f885d840787", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -671,16 +671,16 @@ }, { "name": "simplepie/simplepie", - "version": "dev-master", + "version": "1.5", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "59e7204610d3a8989822eba1c0cbf1d1680bd10d" + "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/59e7204610d3a8989822eba1c0cbf1d1680bd10d", - "reference": "59e7204610d3a8989822eba1c0cbf1d1680bd10d", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/5de5551953f95feef12cf355a7a26a70f94aa3ab", + "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab", "shasum": "" }, "require": { @@ -727,10 +727,10 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/master", + "source": "https://github.com/simplepie/simplepie/tree/1.5", "issues": "https://github.com/simplepie/simplepie/issues" }, - "time": "2017-04-06 03:36:48" + "time": "2017-04-17T07:29:31+00:00" } ], "packages-dev": [ @@ -3675,7 +3675,6 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "simplepie/simplepie": 20, "behat/behat": 0, "behat/mink-extension": 0, "behat/mink-goutte-driver": 0 diff --git a/doc/about/hubzilla_project.bb b/doc/about/hubzilla_project.bb index 7a584687d..f9bc920f8 100644 --- a/doc/about/hubzilla_project.bb +++ b/doc/about/hubzilla_project.bb @@ -182,4 +182,5 @@ even if we have had our occasional disagreements. [li]Simó Albert i Beltran[/li] [li]Manuel Reva[/li] [li]Manuel Jiménez Friaza[/li] -[/list]
\ No newline at end of file +[li]Gustav Wall aka "neue medienordnung plus"[/li] +[/list] diff --git a/include/connections.php b/include/connections.php index a8d7d8483..8f4f84e1a 100644 --- a/include/connections.php +++ b/include/connections.php @@ -23,6 +23,7 @@ function abook_store_lowlevel($arr) { 'abook_unconnected' => ((array_key_exists('abook_unconnected',$arr)) ? $arr['abook_unconnected'] : 0), 'abook_self' => ((array_key_exists('abook_self',$arr)) ? $arr['abook_self'] : 0), 'abook_feed' => ((array_key_exists('abook_feed',$arr)) ? $arr['abook_feed'] : 0), + 'abook_not_here' => ((array_key_exists('abook_not_here',$arr)) ? $arr['abook_not_here'] : 0), 'abook_profile' => ((array_key_exists('abook_profile',$arr)) ? $arr['abook_profile'] : ''), 'abook_incl' => ((array_key_exists('abook_incl',$arr)) ? $arr['abook_incl'] : ''), 'abook_excl' => ((array_key_exists('abook_excl',$arr)) ? $arr['abook_excl'] : ''), diff --git a/include/zot.php b/include/zot.php index 20a25ce3b..a168dff1b 100644 --- a/include/zot.php +++ b/include/zot.php @@ -3226,12 +3226,10 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) { } - $disallowed = array('abook_id','abook_account','abook_channel','abook_rating','abook_rating_text'); + $disallowed = array('abook_id','abook_account','abook_channel','abook_rating','abook_rating_text','abook_not_here'); foreach($arr['abook'] as $abook) { - - $abconfig = null; if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig'])) diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index b64c1ae61..602f7ac2f 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -34,6 +34,7 @@ CREATE TABLE IF NOT EXISTS `abook` ( `abook_unconnected` tinyint(4) NOT NULL DEFAULT '0', `abook_self` tinyint(4) NOT NULL DEFAULT '0', `abook_feed` tinyint(4) NOT NULL DEFAULT '0', + `abook_not_here` tinyint(4) NOT NULL DEFAULT '0', `abook_profile` char(64) NOT NULL DEFAULT '', `abook_incl` TEXT NOT NULL DEFAULT '', `abook_excl` TEXT NOT NULL DEFAULT '', @@ -58,6 +59,7 @@ CREATE TABLE IF NOT EXISTS `abook` ( KEY `abook_pending` (`abook_pending`), KEY `abook_unconnected` (`abook_unconnected`), KEY `abook_self` (`abook_self`), + KEY `abook_not_here` (`abook_not_here`), KEY `abook_feed` (`abook_feed`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index 0328040f4..774f355aa 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -32,6 +32,7 @@ CREATE TABLE "abook" ( "abook_unconnected" smallint NOT NULL DEFAULT '0', "abook_self" smallint NOT NULL DEFAULT '0', "abook_feed" smallint NOT NULL DEFAULT '0', + "abook_not_here" smallint NOT NULL DEFAULT '0', "abook_profile" char(64) NOT NULL DEFAULT '', "abook_incl" TEXT NOT NULL DEFAULT '', "abook_excl" TEXT NOT NULL DEFAULT '', @@ -55,6 +56,7 @@ CREATE TABLE "abook" ( create index "abook_unconnected" on abook ("abook_unconnected"); create index "abook_self" on abook ("abook_self"); create index "abook_feed" on abook ("abook_feed"); + create index "abook_not_here" on abook ("abook_not_here"); create index "abook_profile" on abook ("abook_profile"); create index "abook_dob" on abook ("abook_dob"); create index "abook_connected" on abook ("abook_connected"); diff --git a/install/update.php b/install/update.php index ce65d1db9..65506a2f7 100644 --- a/install/update.php +++ b/install/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1190 ); +define( 'UPDATE_VERSION' , 1191 ); /** * @@ -2532,3 +2532,12 @@ function update_r1189() { } +function update_r1190() { + $r1 = q("alter table abook add abook_not_here int(11) not null default '0' "); + + $r2 = q("create index abook_not_here on abook (abook_not_here)"); + + if($r1 && $r2) + return UPDATE_SUCCESS; + return UPDATE_FAILED; +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index cc1cd6bca..5899fb9ed 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -840,6 +840,7 @@ return array( 'Zotlabs\\Module\\Oembed' => $baseDir . '/Zotlabs/Module/Oembed.php', 'Zotlabs\\Module\\Oep' => $baseDir . '/Zotlabs/Module/Oep.php', 'Zotlabs\\Module\\Oexchange' => $baseDir . '/Zotlabs/Module/Oexchange.php', + 'Zotlabs\\Module\\Ofeed' => $baseDir . '/Zotlabs/Module/Ofeed.php', 'Zotlabs\\Module\\Online' => $baseDir . '/Zotlabs/Module/Online.php', 'Zotlabs\\Module\\Page' => $baseDir . '/Zotlabs/Module/Page.php', 'Zotlabs\\Module\\Pconfig' => $baseDir . '/Zotlabs/Module/Pconfig.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 6c000a27b..53b9b20c3 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -977,6 +977,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Oembed' => __DIR__ . '/../..' . '/Zotlabs/Module/Oembed.php', 'Zotlabs\\Module\\Oep' => __DIR__ . '/../..' . '/Zotlabs/Module/Oep.php', 'Zotlabs\\Module\\Oexchange' => __DIR__ . '/../..' . '/Zotlabs/Module/Oexchange.php', + 'Zotlabs\\Module\\Ofeed' => __DIR__ . '/../..' . '/Zotlabs/Module/Ofeed.php', 'Zotlabs\\Module\\Online' => __DIR__ . '/../..' . '/Zotlabs/Module/Online.php', 'Zotlabs\\Module\\Page' => __DIR__ . '/../..' . '/Zotlabs/Module/Page.php', 'Zotlabs\\Module\\Pconfig' => __DIR__ . '/../..' . '/Zotlabs/Module/Pconfig.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 2cb89e187..7e4f0bb29 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -686,17 +686,17 @@ }, { "name": "simplepie/simplepie", - "version": "dev-master", - "version_normalized": "9999999-dev", + "version": "1.5", + "version_normalized": "1.5.0.0", "source": { "type": "git", "url": "https://github.com/simplepie/simplepie.git", - "reference": "59e7204610d3a8989822eba1c0cbf1d1680bd10d" + "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/59e7204610d3a8989822eba1c0cbf1d1680bd10d", - "reference": "59e7204610d3a8989822eba1c0cbf1d1680bd10d", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/5de5551953f95feef12cf355a7a26a70f94aa3ab", + "reference": "5de5551953f95feef12cf355a7a26a70f94aa3ab", "shasum": "" }, "require": { @@ -708,7 +708,7 @@ "suggest": { "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" }, - "time": "2017-04-06T03:36:48+00:00", + "time": "2017-04-17T07:29:31+00:00", "type": "library", "installation-source": "source", "autoload": { @@ -745,7 +745,7 @@ "rss" ], "support": { - "source": "https://github.com/simplepie/simplepie/tree/master", + "source": "https://github.com/simplepie/simplepie/tree/1.5", "issues": "https://github.com/simplepie/simplepie/issues" } } diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php index 890497204..428bfc068 100755 --- a/vendor/simplepie/simplepie/library/SimplePie.php +++ b/vendor/simplepie/simplepie/library/SimplePie.php @@ -5,7 +5,7 @@ * A PHP-Based RSS and Atom Feed Framework. * Takes the hard work out of managing a complete RSS/Atom solution. * - * Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors + * Copyright (c) 2004-2017, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are @@ -33,8 +33,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @package SimplePie - * @version 1.4.3 - * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue + * @version 1.5 + * @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue * @author Ryan Parman * @author Geoffrey Sneddon * @author Ryan McCue @@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie'); /** * SimplePie Version */ -define('SIMPLEPIE_VERSION', '1.4.3'); +define('SIMPLEPIE_VERSION', '1.5'); /** * SimplePie Build diff --git a/vendor/simplepie/simplepie/library/SimplePie/Category.php b/vendor/simplepie/simplepie/library/SimplePie/Category.php index 92d511e1a..df0f13f9a 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Category.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Category.php @@ -56,7 +56,7 @@ class SimplePie_Category /** * Category identifier * - * @var string + * @var string|null * @see get_term */ var $term; @@ -64,7 +64,7 @@ class SimplePie_Category /** * Categorization scheme identifier * - * @var string + * @var string|null * @see get_scheme() */ var $scheme; @@ -72,23 +72,36 @@ class SimplePie_Category /** * Human readable label * - * @var string + * @var string|null * @see get_label() */ var $label; /** + * Category type + * + * category for <category> + * subject for <dc:subject> + * + * @var string|null + * @see get_type() + */ + var $type; + + /** * Constructor, used to input the data * - * @param string $term - * @param string $scheme - * @param string $label + * @param string|null $term + * @param string|null $scheme + * @param string|null $label + * @param string|null $type */ - public function __construct($term = null, $scheme = null, $label = null) + public function __construct($term = null, $scheme = null, $label = null, $type = null) { $this->term = $term; $this->scheme = $scheme; $this->label = $label; + $this->type = $type; } /** @@ -109,14 +122,7 @@ class SimplePie_Category */ public function get_term() { - if ($this->term !== null) - { - return $this->term; - } - else - { - return null; - } + return $this->term; } /** @@ -126,31 +132,32 @@ class SimplePie_Category */ public function get_scheme() { - if ($this->scheme !== null) - { - return $this->scheme; - } - else - { - return null; - } + return $this->scheme; } /** * Get the human readable label * + * @param bool $strict * @return string|null */ - public function get_label() + public function get_label($strict = false) { - if ($this->label !== null) - { - return $this->label; - } - else + if ($this->label === null && $strict !== true) { return $this->get_term(); } + return $this->label; + } + + /** + * Get the category type + * + * @return string|null + */ + public function get_type() + { + return $this->type; } } diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php index 89d4bacb6..00f4179bf 100644 --- a/vendor/simplepie/simplepie/library/SimplePie/Item.php +++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php @@ -206,9 +206,10 @@ class SimplePie_Item * * @since Beta 2 * @param boolean $hash Should we force using a hash instead of the supplied ID? - * @return string + * @param string|false $fn User-supplied function to generate an hash + * @return string|null */ - public function get_id($hash = false, $fn = '') + public function get_id($hash = false, $fn = 'md5') { if (!$hash) { @@ -237,7 +238,15 @@ class SimplePie_Item return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT); } } - if ($fn === '' || !is_callable($fn)) $fn = 'md5'; + if ($fn === false) + { + return null; + } + elseif (!is_callable($fn)) + { + trigger_error('User-supplied function $fn must be callable', E_USER_WARNING); + $fn = 'md5'; + } return call_user_func($fn, $this->get_permalink().$this->get_title().$this->get_content()); } @@ -460,7 +469,8 @@ class SimplePie_Item { $categories = array(); - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category) + $type = 'category'; + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, $type) as $category) { $term = null; $scheme = null; @@ -477,9 +487,9 @@ class SimplePie_Item { $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML); } - $categories[] = $this->registry->create('Category', array($term, $scheme, $label)); + $categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type)); } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, $type) as $category) { // This is really the label, but keep this as the term also for BC. // Label will also work on retrieving because that falls back to term. @@ -492,15 +502,17 @@ class SimplePie_Item { $scheme = null; } - $categories[] = $this->registry->create('Category', array($term, $scheme, null)); + $categories[] = $this->registry->create('Category', array($term, $scheme, null, $type)); } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) + + $type = 'subject'; + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category) { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null)); + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type)); } - foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category) + foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category) { - $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null)); + $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type)); } if (!empty($categories)) diff --git a/view/de/hmessages.po b/view/de/hmessages.po index 62f7fe602..e8c16faaa 100644 --- a/view/de/hmessages.po +++ b/view/de/hmessages.po @@ -13751,3 +13751,19 @@ msgstr "Cron-Aufgaben laufen nicht." #, php-format msgid "[hubzilla] Cron tasks not running on %s" msgstr "[hubzilla] Cron-Aufgaben für %s laufen nicht" + +#: ../../addon/demohub/demohub.php:41 +msgid "Welcome to the Hubzilla demo hub!" +msgstr "Willkommen auf dem Hubzilla demo Hub!" + +#: ../../addon/demohub/demohub.php:42 +msgid "This demo hub is designed to give you a chance to explore some of the features offered by the Hubzilla platform. The activities of the fictional characters illustrate only a few of the ways communities can use Hubzilla to collaborate and connect." +msgstr "Dieser demo Hub (Hubzilla-Knoten) ist konzipiert, um Ihnen eine Chance zu geben, einige Features der Hubzilla-Platform kennenzulernen. Die fiktive Aktivitäten illustrieren nur einige von vielen Möglichkeiten, die den Communities für die Kommunikation und Zusammenarbeit im Hubzilla-Netzwerk zur Verfügung stehen." + +#: ../../addon/demohub/demohub.php:45 +msgid "To really grasp what Hubzilla is offering in terms of nomadic identity and decentralized access control, you have to try it for yourself. Run your own hub or register on an open hub. You can always clone your channels and migrate to another hub later. With Hubzilla, <i>you</i> not only own your <b>data</b>, but your <b>identity</b> as well!</p><p>The demo resets every ten minutes, which may interrupt your session. Simply reload the page as necessary. You can return to this dialog using the blue info button in the navbar." +msgstr "Sie können selbst in der Praxis testen, welche Möglichkeiten Ihnen im Hubzilla-Netzwerk mit Nomadic Identity und mit dem dezentralen Zugang. Richten Sie einen eigenen Hubzilla-Knoten ein oder registrieren Sie sich auf einem offenen Hub. Sie können dann Ihren Kanal klonen oder mit diesem Kanal auf einen anderen Hub umziehen. Mit Hubzilla kontrollieren Sie Ihre Daten, aber auch Ihre Identität!</p><p>Die Demoinstanz wird im 10-Minuten-Takt zurückgesetzt, wobei Ihre Hubzilla-Sitzung evtl. unterbrochen wird. Laden Sie die Website #^https://demo.hubzilla.org/ einfach neu, um fortzufahren. Sie können dieses Dialog-Fenster mit einem Klick auf das blaue [i]-Symbol rechts oben in der Navigationsleiste." + +#: ../../addon/demohub/demohub.php:52 +msgid "Explore" +msgstr "Erforschen"
\ No newline at end of file |