diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2023-12-27 15:05:09 +0100 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2023-12-27 15:05:09 +0100 |
commit | f5a028fccf6a738c3b5722f0db661d0333f3faff (patch) | |
tree | e9c93a7b432d2d2cdec081431290e8d20a97571b | |
parent | 7cb8ecd36b128d07b5086904af48601b9096cdea (diff) | |
parent | c3a235242eb180860ac778743184d2297dd8f3a9 (diff) | |
download | volse-hubzilla-f5a028fccf6a738c3b5722f0db661d0333f3faff.tar.gz volse-hubzilla-f5a028fccf6a738c3b5722f0db661d0333f3faff.tar.bz2 volse-hubzilla-f5a028fccf6a738c3b5722f0db661d0333f3faff.zip |
Merge branch 'dev' into tests/test-db-setup-wip
-rw-r--r-- | CHANGELOG | 15 | ||||
-rw-r--r-- | Zotlabs/Lib/Config.php | 26 | ||||
-rw-r--r-- | Zotlabs/Module/Siteinfo.php | 2 | ||||
-rw-r--r-- | boot.php | 2 | ||||
-rw-r--r-- | include/text.php | 5 | ||||
-rw-r--r-- | tests/unit/Lib/ConfigTest.php | 61 | ||||
-rw-r--r-- | view/nb-no/hmessages.po | 76 | ||||
-rw-r--r-- | view/nb-no/hstrings.php | 72 | ||||
-rw-r--r-- | view/tpl/siteinfo.tpl | 20 |
9 files changed, 198 insertions, 81 deletions
@@ -1,3 +1,18 @@ +Hubzilla 8.8.4 (2023-12-20) + - Fix regression introduced in version 8.8.3 + - Add test for Lib/Config + - Add active addons and blocked sites to siteinfo + + +Hubzilla 8.8.3 (2023-12-17) + - Check return from Config::Load() and retry on failure + - Libzot::import() do not prozess items where we could not fetch the author + - Translation updates for Norwegian Bokmål (nb_NO) + - Add the app terms before syncing, otherwise the terms will be reset at the other end + - Addon statistics: deprecate nodeinfo 1.0 and implement nodeinfo 2.1 + - Addon cards: fix PHP error + + Hubzilla 8.8.2 (2023-12-06) - Fix missing includes - issue #1820 - Addon logger_stats: improved performance reading big log files diff --git a/Zotlabs/Lib/Config.php b/Zotlabs/Lib/Config.php index 40d5cc246..5e735be34 100644 --- a/Zotlabs/Lib/Config.php +++ b/Zotlabs/Lib/Config.php @@ -36,7 +36,7 @@ class Config { if (! array_key_exists('config_loaded', App::$config[$family])) { $r = q("SELECT * FROM config WHERE cat = '%s'", dbesc($family)); - if ($r === false) { + if ($r === false && !App::$install) { sleep(3); $recursionCounter ++; if ($recursionCounter > 10) { @@ -44,7 +44,7 @@ class Config { } self::Load($family, $recursionCounter); } - else { + elseif (is_array($r)) { foreach ($r as $rr) { $k = $rr['k']; App::$config[$family][$k] = $rr['v']; @@ -72,7 +72,7 @@ class Config { */ public static function Set($family, $key, $value) { // manage array value - $dbvalue = ((is_array($value)) ? serialise($value) : $value); + $dbvalue = ((is_array($value)) ? 'json:' . json_encode($value) : $value); $dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue); if (self::Get($family, $key) === false || (! self::get_from_storage($family, $key))) { @@ -121,6 +121,7 @@ class Config { * @return mixed Return value or false on error or if not set */ public static function Get($family, $key, $default = false) { + if ((! array_key_exists($family, App::$config)) || (! array_key_exists('config_loaded', App::$config[$family]))) { self::Load($family); } @@ -130,11 +131,20 @@ class Config { return $default; } - return ((! is_array(App::$config[$family][$key])) && (preg_match('|^a:[0-9]+:{.*}$|s', App::$config[$family][$key])) - ? unserialize(App::$config[$family][$key]) - : App::$config[$family][$key] - ); - + $value = App::$config[$family][$key]; + + if (! is_array($value)) { + if (substr($value, 0, 5) == 'json:') { + return json_decode(substr($value, 5), true); + } else if (preg_match('|^a:[0-9]+:{.*}$|s', $value)) { + // Unserialize in inherently unsafe. Try to mitigate by not + // allowing unserializing objects. Only kept for backwards + // compatibility. JSON serialization should be prefered. + return unserialize($value, array('allowed_classes' => false)); + } else { + return $value; + } + } } return $default; diff --git a/Zotlabs/Module/Siteinfo.php b/Zotlabs/Module/Siteinfo.php index ac33747f8..18eb703a2 100644 --- a/Zotlabs/Module/Siteinfo.php +++ b/Zotlabs/Module/Siteinfo.php @@ -38,6 +38,8 @@ class Siteinfo extends \Zotlabs\Web\Controller { '$prj_srctxt' => t('Developer homepage'), '$prj_link' => \Zotlabs\Lib\System::get_project_link(), '$prj_src' => \Zotlabs\Lib\System::get_project_srclink(), + '$addons' => array( t('Active addons'), \App::$plugins ), + '$blocked_sites' => array( t('Blocked sites'), \Zotlabs\Lib\Config::Get('system', 'blacklisted_sites') ) ] ); @@ -1403,7 +1403,7 @@ function x($s, $k = null) { * @ref include/system_unavailable.php will handle everything further. */ function system_unavailable() { - include('include/system_unavailable.php'); + require_once('include/system_unavailable.php'); system_down(); killme(); } diff --git a/include/text.php b/include/text.php index 5330e19c7..5ef28bfde 100644 --- a/include/text.php +++ b/include/text.php @@ -904,6 +904,8 @@ function get_tags($s) { $ret[] = $mtch; } } + + if(preg_match_all('/([@#\!]\".*?\")/',$s,$match)) { foreach($match[1] as $mtch) { $ret[] = $mtch; @@ -936,6 +938,8 @@ function get_tags($s) { // or quote remnants from the quoted strings we already picked out earlier if(strpos($mtch,'"')) continue; + if(strpos($mtch,'"')) + continue; $ret[] = $mtch; } @@ -1639,6 +1643,7 @@ function format_hashtags(&$item) { $s = ''; $terms = isset($item['term']) ? get_terms_oftype($item['term'], array(TERM_HASHTAG, TERM_COMMUNITYTAG)) : []; + if($terms) { foreach($terms as $t) { $term = htmlspecialchars($t['term'], ENT_COMPAT, 'UTF-8', false) ; diff --git a/tests/unit/Lib/ConfigTest.php b/tests/unit/Lib/ConfigTest.php new file mode 100644 index 000000000..a8ae3631b --- /dev/null +++ b/tests/unit/Lib/ConfigTest.php @@ -0,0 +1,61 @@ +<?php +declare(strict_types=1); + +/** + * Tests for the Zotlabs\Lib\Config class. + * + * Until we have database testing in place, we can only test the Congig::Get + * method for now. This should be improved once the database test framework is + * merged. + */ +class ConfigTest extends Zotlabs\Tests\Unit\UnitTestCase { + /* + * Hardcode a config that we can test against, and that we can + * reuse in all the test cases. + */ + public function setUp(): void { + \App::$config = array( + 'test' => array ( + 'plain' => 'plain value', + 'php-array' => 'a:3:{i:0;s:3:"one";i:1;s:3:"two";i:2;s:5:"three";}', + 'json-array' => 'json:["one","two","three"]', + 'object-injection' => 'a:1:{i:0;O:18:"Zotlabs\Lib\Config":0:{}}', + 'config_loaded' => true, + ), + ); + } + + public function testGetPlainTextValue(): void { + $this->assertEquals( + Zotlabs\Lib\Config::Get('test', 'plain'), + 'plain value' + ); + } + + public function testGetJSONSerializedArray(): void { + $this->assertEquals( + Zotlabs\Lib\Config::Get('test', 'json-array'), + array('one', 'two', 'three') + ); + } + + /* + * Test that we can retreive old style serialized arrays that were + * serialized with th PHP `serialize()` function. + */ + public function testGetPHPSerializedArray(): void { + $this->assertEquals( + Zotlabs\Lib\Config::Get('test', 'php-array'), + array('one', 'two', 'three') + ); + } + + /* + * Make sure we're not vulnerable to PHP Object injection attacks when + * using the PHP `unserialize()` function. + */ + public function testGetMaliciousPHPSerializedArray(): void { + $value = Zotlabs\Lib\Config::Get('test', 'object-injection'); + $this->assertEquals($value[0]::class, '__PHP_Incomplete_Class'); + } +} diff --git a/view/nb-no/hmessages.po b/view/nb-no/hmessages.po index eb91de095..d8f0bffc4 100644 --- a/view/nb-no/hmessages.po +++ b/view/nb-no/hmessages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: 8.6RC1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-07-04 17:57+0000\n" -"PO-Revision-Date: 2023-09-09 15:38+0200\n" +"PO-Revision-Date: 2023-12-15 22:33+0100\n" "Last-Translator: Harald Eilertsen <haraldei@anduin.net>\n" "Language-Team: Norwegian Bokmal <l10n-no@lister.huftis.org>\n" "Language: nb_NO\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Lokalize 23.08.4\n" #: ../../view/theme/redbasic/php/config.php:15 #: ../../addon/cart/submodules/orderoptions.php:335 @@ -7234,31 +7234,31 @@ msgstr "OpenWebAuth: %1$s ønsker %2$s velkommen" #: ../../Zotlabs/Widget/Activity_order.php:96 msgid "Commented Date" -msgstr "" +msgstr "Sist kommentert" #: ../../Zotlabs/Widget/Activity_order.php:100 msgid "Order by last commented date" -msgstr "" +msgstr "Sorter etter dato for siste kommentar" #: ../../Zotlabs/Widget/Activity_order.php:103 msgid "Posted Date" -msgstr "" +msgstr "Innleggsdato" #: ../../Zotlabs/Widget/Activity_order.php:107 msgid "Order by last posted date" -msgstr "" +msgstr "Sorter etter dato innlegg ble postet" #: ../../Zotlabs/Widget/Activity_order.php:110 msgid "Date Unthreaded" -msgstr "" +msgstr "Utrådet" #: ../../Zotlabs/Widget/Activity_order.php:114 msgid "Order unthreaded by date" -msgstr "" +msgstr "Sorter innlegg og kommentarer uavhengig av hverandre etter dato" #: ../../Zotlabs/Widget/Activity_order.php:129 msgid "Stream Order" -msgstr "" +msgstr "Sortering av innlegg" #: ../../Zotlabs/Widget/Tokens.php:41 msgid "Add new guest" @@ -7534,7 +7534,7 @@ msgstr "Bokmerkede chatrom" #: ../../Zotlabs/Widget/Appcategories.php:49 msgid "App Categories" -msgstr "" +msgstr "Appkategorier" #: ../../Zotlabs/Widget/Hq_controls.php:23 msgid "Toggle post editor" @@ -7710,15 +7710,15 @@ msgstr "Filtere for tidslinjen" #: ../../Zotlabs/Widget/Appstore.php:16 msgid "App Collections" -msgstr "" +msgstr "Appsamlinger" #: ../../Zotlabs/Widget/Appstore.php:18 msgid "Installed apps" -msgstr "" +msgstr "Installerte apper" #: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:51 msgid "Available Apps" -msgstr "" +msgstr "Tilgjengelige apper" #: ../../Zotlabs/Widget/Privacygroups.php:45 msgid "Add new group" @@ -10610,7 +10610,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Site.php:427 ../../Zotlabs/Module/Siteinfo.php:24 msgid "Site Information" -msgstr "" +msgstr "Nettstedsinformasjon" #: ../../Zotlabs/Module/Admin/Site.php:427 msgid "" @@ -11408,11 +11408,11 @@ msgstr "" #: ../../Zotlabs/Module/Apps.php:51 msgid "Installed Apps" -msgstr "" +msgstr "Installerte apper" #: ../../Zotlabs/Module/Apps.php:54 msgid "Manage Apps" -msgstr "" +msgstr "Behandle apper" #: ../../Zotlabs/Module/Apps.php:55 msgid "Create Custom App" @@ -11925,7 +11925,7 @@ msgstr "Kanalnavn" #: ../../Zotlabs/Module/New_channel.php:178 #: ../../Zotlabs/Module/Settings/Channel.php:233 msgid "Channel role" -msgstr "" +msgstr "Kanalrolle" #: ../../Zotlabs/Module/New_channel.php:181 msgid "Create a Channel" @@ -11971,7 +11971,7 @@ msgstr "Angi ditt nåværende humør og fortell dine venner" #: ../../Zotlabs/Module/Siteinfo.php:21 msgid "About this site" -msgstr "" +msgstr "Om dette nettstedet " #: ../../Zotlabs/Module/Siteinfo.php:22 #, fuzzy @@ -11984,20 +11984,20 @@ msgstr "Administrator" #: ../../Zotlabs/Module/Siteinfo.php:29 msgid "Software and Project information" -msgstr "" +msgstr "Program- og prosjektinformasjon" #: ../../Zotlabs/Module/Siteinfo.php:30 msgid "This site is powered by $Projectname" -msgstr "" +msgstr "Dette nettstedet drives av $Projectname" #: ../../Zotlabs/Module/Siteinfo.php:31 msgid "" "Federated and decentralised networking and identity services provided by Zot" -msgstr "" +msgstr "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot" #: ../../Zotlabs/Module/Siteinfo.php:34 msgid "Additional federated transport protocols:" -msgstr "" +msgstr "Øvrige fødererte transportprotokoller:" #: ../../Zotlabs/Module/Siteinfo.php:36 #, php-format @@ -12006,11 +12006,11 @@ msgstr "Versjon %s" #: ../../Zotlabs/Module/Siteinfo.php:37 msgid "Project homepage" -msgstr "" +msgstr "Prosjektets hjemmeside" #: ../../Zotlabs/Module/Siteinfo.php:38 msgid "Developer homepage" -msgstr "" +msgstr "Utviklers hjemmeside" #: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56 msgid "App installed." @@ -13601,7 +13601,7 @@ msgstr "Ekstra funksjoner" #: ../../Zotlabs/Module/Settings/Channel.php:105 #: ../../Zotlabs/Module/Settings/Channel.php:217 msgid "Please select a channel role" -msgstr "" +msgstr "Velg en kanalrolle" #: ../../Zotlabs/Module/Settings/Channel.php:194 msgid "Your channel address is" @@ -13609,7 +13609,7 @@ msgstr "Din kanaladresse er" #: ../../Zotlabs/Module/Settings/Channel.php:197 msgid "Your files/photos are accessible via WebDAV at" -msgstr "" +msgstr "Dine filer og foto er tilgjengelig via WebDAV på" #: ../../Zotlabs/Module/Settings/Channel.php:228 msgid "Channel Settings" @@ -13621,11 +13621,11 @@ msgstr "Grunninnstillinger" #: ../../Zotlabs/Module/Settings/Channel.php:236 msgid "Channel timezone:" -msgstr "" +msgstr "Tidssone for kanalen:" #: ../../Zotlabs/Module/Settings/Channel.php:237 msgid "Default post location:" -msgstr "" +msgstr "Standard plassering for innlegg:" #: ../../Zotlabs/Module/Settings/Channel.php:237 msgid "Geographical location to display on your posts" @@ -13637,11 +13637,12 @@ msgstr "" #: ../../Zotlabs/Module/Settings/Channel.php:239 msgid "Adult content" -msgstr "" +msgstr "Voksent innhold" #: ../../Zotlabs/Module/Settings/Channel.php:239 msgid "This channel frequently or regularly publishes adult content" msgstr "" +"Denne kanalen vil ofte, eller regelmessig poste innlegg med voksent innhold" #: ../../Zotlabs/Module/Settings/Channel.php:240 msgid "Maximum Friend Requests/Day:" @@ -13851,7 +13852,7 @@ msgstr "Annet kanal innhold utløper etter så mange dager" #: ../../Zotlabs/Module/Settings/Channel.php:284 msgid "0 or blank to use the website limit." -msgstr "" +msgstr "0 eller la være tomt for å bruke grensen til nettstedet." #: ../../Zotlabs/Module/Settings/Channel.php:284 #, php-format @@ -13860,11 +13861,11 @@ msgstr "" #: ../../Zotlabs/Module/Settings/Channel.php:284 msgid "This website does not expire imported content." -msgstr "" +msgstr "Dette nettstedet sletter ikke importert innhold." #: ../../Zotlabs/Module/Settings/Channel.php:284 msgid "The website limit takes precedence if lower than your limit." -msgstr "" +msgstr "Nettstedets grense vil gjelde dersom den er lavere enn din grense." #: ../../Zotlabs/Module/Settings/Channel.php:285 #: ../../Zotlabs/Module/Settings/Channel.php:286 @@ -13872,6 +13873,8 @@ msgid "" "Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - " "leave blank to import all posts" msgstr "" +"Ett ord per linje eller #emneknagger, $kategorier, /mønster/, lang=xx," +" lang!=xx - la være tomt for å importere alle innlegg" #: ../../Zotlabs/Module/Settings/Account.php:21 msgid "Not valid email." @@ -15436,19 +15439,19 @@ msgstr "" #: ../../Zotlabs/Lib/Apps.php:611 msgid "Add to app-tray" -msgstr "" +msgstr "Legg til i meny" #: ../../Zotlabs/Lib/Apps.php:612 msgid "Remove from app-tray" -msgstr "" +msgstr "Fjern fra meny" #: ../../Zotlabs/Lib/Apps.php:613 msgid "Pin to navbar" -msgstr "" +msgstr "Fest til navigasjonslinjen" #: ../../Zotlabs/Lib/Apps.php:614 msgid "Unpin from navbar" -msgstr "" +msgstr "Fjern fra navigasjonslinjen" #: ../../Zotlabs/Lib/Techlevels.php:10 msgid "0. Beginner/Basic" @@ -16048,3 +16051,4 @@ msgstr "Cron/planlagte oppgaver kjører ikke." #~ msgid "Page owner information could not be retrieved." #~ msgstr "Informasjon om sideeier kunne ikke hentes." + diff --git a/view/nb-no/hstrings.php b/view/nb-no/hstrings.php index f66946062..7b1bf396d 100644 --- a/view/nb-no/hstrings.php +++ b/view/nb-no/hstrings.php @@ -1596,13 +1596,13 @@ App::$strings[" on "] = "På"; App::$strings["Embedded content"] = "Innebygget innhold"; App::$strings["Embedding disabled"] = "Innbygging avskrudd"; App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s ønsker %2\$s velkommen"; -App::$strings["Commented Date"] = ""; -App::$strings["Order by last commented date"] = ""; -App::$strings["Posted Date"] = ""; -App::$strings["Order by last posted date"] = ""; -App::$strings["Date Unthreaded"] = ""; -App::$strings["Order unthreaded by date"] = ""; -App::$strings["Stream Order"] = ""; +App::$strings["Commented Date"] = "Sist kommentert"; +App::$strings["Order by last commented date"] = "Sorter etter dato for siste kommentar"; +App::$strings["Posted Date"] = "Innleggsdato"; +App::$strings["Order by last posted date"] = "Sorter etter dato innlegg ble postet"; +App::$strings["Date Unthreaded"] = "Utrådet"; +App::$strings["Order unthreaded by date"] = "Sorter innlegg og kommentarer uavhengig av hverandre etter dato"; +App::$strings["Stream Order"] = "Sortering av innlegg"; App::$strings["Add new guest"] = ""; App::$strings["Guest access"] = ""; App::$strings["Archives"] = "Arkiv"; @@ -1670,7 +1670,7 @@ App::$strings["Ignore/Hide"] = "Ignorer/Skjul"; App::$strings["Suggestions"] = "Forslag"; App::$strings["See more..."] = "Se mer..."; App::$strings["Bookmarked Chatrooms"] = "Bokmerkede chatrom"; -App::$strings["App Categories"] = ""; +App::$strings["App Categories"] = "Appkategorier"; App::$strings["Toggle post editor"] = "Vis redigering av innlegg"; App::$strings["Toggle personal notes"] = ""; App::$strings["Channel activities"] = ""; @@ -1711,9 +1711,9 @@ App::$strings["Panel search"] = ""; App::$strings["Filter by name"] = "Filtrer etter navn"; App::$strings["Remove active filter"] = ""; App::$strings["Stream Filters"] = "Filtere for tidslinjen"; -App::$strings["App Collections"] = ""; -App::$strings["Installed apps"] = ""; -App::$strings["Available Apps"] = ""; +App::$strings["App Collections"] = "Appsamlinger"; +App::$strings["Installed apps"] = "Installerte apper"; +App::$strings["Available Apps"] = "Tilgjengelige apper"; App::$strings["Add new group"] = ""; App::$strings["Privacy groups"] = "Personverngrupper"; App::$strings["Rating Tools"] = "Vurderingsverktøy"; @@ -2343,7 +2343,7 @@ App::$strings["Banner/Logo"] = "Banner/Logo"; App::$strings["Unfiltered HTML/CSS/JS is allowed"] = ""; App::$strings["Administrator Information"] = "Administratorinformasjon"; App::$strings["Contact information for site administrators. Displayed on siteinfo page. BBCode can be used here"] = "Kontaktinformasjon til nettstedsadministratorer. Vises på siteinfo-siden. BBCode kan brukes her"; -App::$strings["Site Information"] = ""; +App::$strings["Site Information"] = "Nettstedsinformasjon"; App::$strings["Publicly visible description of this site. Displayed on siteinfo page. BBCode can be used here"] = ""; App::$strings["System theme"] = "Systemtema"; App::$strings["Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"] = "Standard systemtema - kan overstyres av brukerprofiler - <a href='#' id='cnftheme'>endre temainnstillinger</a>"; @@ -2516,8 +2516,8 @@ App::$strings["Manage Repos"] = ""; App::$strings["Installed Addon Repositories"] = ""; App::$strings["Install a New Addon Repository"] = ""; App::$strings["Switch branch"] = ""; -App::$strings["Installed Apps"] = ""; -App::$strings["Manage Apps"] = ""; +App::$strings["Installed Apps"] = "Installerte apper"; +App::$strings["Manage Apps"] = "Behandle apper"; App::$strings["Create Custom App"] = ""; App::$strings["Some blurb about what to do when you're new here"] = "En standardtekst om hva du bør gjøre som ny her"; App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av kontopassordet."; @@ -2632,7 +2632,7 @@ App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \ App::$strings["This will be used to create a unique network address (like an email address)."] = ""; App::$strings["Allowed characters are a-z 0-9, - and _"] = ""; App::$strings["Channel name"] = "Kanalnavn"; -App::$strings["Channel role"] = ""; +App::$strings["Channel role"] = "Kanalrolle"; App::$strings["Create a Channel"] = ""; App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = ""; App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "eller <a href=\"import\">importer en eksisterende kanal</a> fra et annet sted."; @@ -2642,16 +2642,16 @@ App::$strings["Entry OK"] = ""; App::$strings["No service class restrictions found."] = "Ingen restriksjoner er funnet i tjenesteklasse."; App::$strings["Mood"] = "Stemning"; App::$strings["Set your current mood and tell your friends"] = "Angi ditt nåværende humør og fortell dine venner"; -App::$strings["About this site"] = ""; +App::$strings["About this site"] = "Om dette nettstedet "; App::$strings["Site Name"] = "Nettstedets navn"; App::$strings["Administrator"] = "Administrator"; -App::$strings["Software and Project information"] = ""; -App::$strings["This site is powered by \$Projectname"] = ""; -App::$strings["Federated and decentralised networking and identity services provided by Zot"] = ""; -App::$strings["Additional federated transport protocols:"] = ""; +App::$strings["Software and Project information"] = "Program- og prosjektinformasjon"; +App::$strings["This site is powered by \$Projectname"] = "Dette nettstedet drives av \$Projectname"; +App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Fødererte og desentraliserte nettverks- og identitetstjenester via Zot"; +App::$strings["Additional federated transport protocols:"] = "Øvrige fødererte transportprotokoller:"; App::$strings["Version %s"] = "Versjon %s"; -App::$strings["Project homepage"] = ""; -App::$strings["Developer homepage"] = ""; +App::$strings["Project homepage"] = "Prosjektets hjemmeside"; +App::$strings["Developer homepage"] = "Utviklers hjemmeside"; App::$strings["App installed."] = "App installert."; App::$strings["Malformed app."] = "Feil oppsett for app-en."; App::$strings["Embed code"] = "Innbyggingskode"; @@ -3010,17 +3010,17 @@ App::$strings["Max height of content (in pixels)"] = "Maks høyde for innhold (i App::$strings["Click to expand content exceeding this height"] = "Klikk for å vise hele innlegg som overskrider denne grensen"; App::$strings["Stream Settings"] = "Instillinger for tidslinjen"; App::$strings["Additional Features"] = "Ekstra funksjoner"; -App::$strings["Please select a channel role"] = ""; +App::$strings["Please select a channel role"] = "Velg en kanalrolle"; App::$strings["Your channel address is"] = "Din kanaladresse er"; -App::$strings["Your files/photos are accessible via WebDAV at"] = ""; +App::$strings["Your files/photos are accessible via WebDAV at"] = "Dine filer og foto er tilgjengelig via WebDAV på"; App::$strings["Channel Settings"] = "Kanalinnstillinger"; App::$strings["Basic Settings"] = "Grunninnstillinger"; -App::$strings["Channel timezone:"] = ""; -App::$strings["Default post location:"] = ""; +App::$strings["Channel timezone:"] = "Tidssone for kanalen:"; +App::$strings["Default post location:"] = "Standard plassering for innlegg:"; App::$strings["Geographical location to display on your posts"] = "Geografisk plassering som vises på dine innlegg"; App::$strings["Use browser location"] = ""; -App::$strings["Adult content"] = ""; -App::$strings["This channel frequently or regularly publishes adult content"] = ""; +App::$strings["Adult content"] = "Voksent innhold"; +App::$strings["This channel frequently or regularly publishes adult content"] = "Denne kanalen vil ofte, eller regelmessig poste innlegg med voksent innhold"; App::$strings["Maximum Friend Requests/Day:"] = "Maksimalt antall venneforespørsler per dag:"; App::$strings["May reduce spam activity"] = "Kan redusere søppelpostaktivitet"; App::$strings["Notification Settings"] = "Varslingsinnstillinger"; @@ -3070,11 +3070,11 @@ App::$strings["%Y - current year, %m - current month"] = "%Y - nåværende år, App::$strings["Default file upload folder"] = "Standard mappe for opplasting av filer"; App::$strings["Remove this channel."] = "Fjern denne kanalen."; App::$strings["Expire other channel content after this many days"] = "Annet kanal innhold utløper etter så mange dager"; -App::$strings["0 or blank to use the website limit."] = ""; +App::$strings["0 or blank to use the website limit."] = "0 eller la være tomt for å bruke grensen til nettstedet."; App::$strings["This website expires after %d days."] = ""; -App::$strings["This website does not expire imported content."] = ""; -App::$strings["The website limit takes precedence if lower than your limit."] = ""; -App::$strings["Words one per line or #tags, \$categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts"] = ""; +App::$strings["This website does not expire imported content."] = "Dette nettstedet sletter ikke importert innhold."; +App::$strings["The website limit takes precedence if lower than your limit."] = "Nettstedets grense vil gjelde dersom den er lavere enn din grense."; +App::$strings["Words one per line or #tags, \$categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts"] = "Ett ord per linje eller #emneknagger, \$kategorier, /mønster/, lang=xx, lang!=xx - la være tomt for å importere alle innlegg"; App::$strings["Not valid email."] = "Ikke gyldig e-post."; App::$strings["Protected email address. Cannot change to that email."] = "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen."; App::$strings["System failure storing new email. Please try again."] = "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen."; @@ -3428,10 +3428,10 @@ App::$strings["My Chatrooms"] = ""; App::$strings["Channel Export"] = ""; App::$strings["Purchase"] = "Kjøp"; App::$strings["Undelete"] = ""; -App::$strings["Add to app-tray"] = ""; -App::$strings["Remove from app-tray"] = ""; -App::$strings["Pin to navbar"] = ""; -App::$strings["Unpin from navbar"] = ""; +App::$strings["Add to app-tray"] = "Legg til i meny"; +App::$strings["Remove from app-tray"] = "Fjern fra meny"; +App::$strings["Pin to navbar"] = "Fest til navigasjonslinjen"; +App::$strings["Unpin from navbar"] = "Fjern fra navigasjonslinjen"; App::$strings["0. Beginner/Basic"] = ""; App::$strings["1. Novice - not skilled but willing to learn"] = ""; App::$strings["2. Intermediate - somewhat comfortable"] = ""; diff --git a/view/tpl/siteinfo.tpl b/view/tpl/siteinfo.tpl index fef3b961e..6cf7da756 100644 --- a/view/tpl/siteinfo.tpl +++ b/view/tpl/siteinfo.tpl @@ -12,6 +12,26 @@ <div>{{if $admin_about}}{{$admin_about}}{{else}}--{{/if}}</div> +{{if $addons.1}} +<br> +<h3>{{$addons.0}}</h3> +<ul> + {{foreach $addons.1 as $addon}} + <li>{{$addon}}</li> + {{/foreach}} +</ul> +{{/if}} + +{{if $blocked_sites.1}} +<br> +<h3>{{$blocked_sites.0}}</h3> +<ul> + {{foreach $blocked_sites.1 as $site}} + <li>{{$site}}</li> + {{/foreach}} +</ul> +{{/if}} + <br><br> <div><a href="help/TermsOfService">{{$terms}}</a></div> |