mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-23 01:36:14 -04:00
Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d655e1d765 | ||
|
|
db70ed006d | ||
|
|
ce1dd5c632 | ||
|
|
9e2a253dda | ||
|
|
95c645865d | ||
|
|
f2f9cfaf28 | ||
|
|
62db8c3969 | ||
|
|
ae3db366e5 | ||
|
|
57570c144a | ||
|
|
c3a235242e | ||
|
|
b629eb5657 | ||
|
|
2e674cd0b3 | ||
|
|
3330e9a19a | ||
|
|
c5f6208396 | ||
|
|
c0d93bbcf4 | ||
|
|
db941e7007 | ||
|
|
4761857157 | ||
|
|
3aefe23184 | ||
|
|
6f852814fd | ||
|
|
b15e521b0e | ||
|
|
63c401e6d6 | ||
|
|
e59750e8de | ||
|
|
9c184ddfd0 | ||
|
|
9df6e821d8 | ||
|
|
9551dc5ecd | ||
|
|
d372daff60 | ||
|
|
f742e6e394 | ||
|
|
414b2b0e4c | ||
|
|
603c5692ae | ||
|
|
b35e994d1b | ||
|
|
abe2ab229a | ||
|
|
5ad9939bcf | ||
|
|
ce451128ba | ||
|
|
70470016cc | ||
|
|
2122ea77e1 | ||
|
|
69266cd6c6 | ||
|
|
062d61567e | ||
|
|
d6120fc908 | ||
|
|
91f8e7a07b | ||
|
|
f57d89245c | ||
|
|
c307a71f53 | ||
|
|
1e4e59bb57 | ||
|
|
f62d16d274 | ||
|
|
f175712d4b | ||
|
|
5f942d78e6 | ||
|
|
538c8885ad | ||
|
|
c8158c3d62 | ||
|
|
1f4762060f | ||
|
|
81c3682781 | ||
|
|
2e6e1fdd55 | ||
|
|
1a09cd560b | ||
|
|
8c9d2bc6f6 | ||
|
|
78ad5ca713 | ||
|
|
43c2e71b25 | ||
|
|
5b9f32fade | ||
|
|
76a1a6da34 | ||
|
|
a2b0abc90d |
35
CHANGELOG
35
CHANGELOG
@@ -1,3 +1,36 @@
|
||||
Hubzilla 8.8.5 (2024-01-01)
|
||||
Fix possible loop if DB is not reachable (introduced in 8.8.3)
|
||||
Fix some errors and deprecation warnings with PHP 8.2
|
||||
Deprecate simplepie idna_convert in favor of PHP native function
|
||||
Fix double processed quoted strings in get_tags()
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
Hubzilla 8.8.1 (2023-11-27)
|
||||
- Fix error in cards addon
|
||||
- Fix error in articles addon
|
||||
- Fix double left and right template css
|
||||
|
||||
|
||||
Hubzilla 8.8 (2023-11-25)
|
||||
- Add additional observer and channel info for nav templates
|
||||
- Do not provide confidential channel info for templates
|
||||
@@ -30,7 +63,6 @@ Hubzilla 8.8 (2023-11-25)
|
||||
- Transparent background for colorbox controls icons
|
||||
- Use body background color for colorboxes in redbasic
|
||||
|
||||
|
||||
Bugfixes
|
||||
- Remove fragment from actor urls
|
||||
- HTTPsig case insensitive digest algorithm
|
||||
@@ -45,7 +77,6 @@ Hubzilla 8.8 (2023-11-25)
|
||||
- Fix sabre/dav caldav php warnings
|
||||
- Fix public stream comments/reactions not allowed if item_fetched is set
|
||||
|
||||
|
||||
Addons
|
||||
- Superblock: fix php warnings
|
||||
- Pubcrawl: restrict mod ap_probe to admin and add checkbox for signed requests
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Zotlabs\Lib;
|
||||
|
||||
use App;
|
||||
|
||||
class Config {
|
||||
|
||||
@@ -14,20 +15,41 @@ class Config {
|
||||
* @param string $family
|
||||
* The category of the configuration value
|
||||
*/
|
||||
static public function Load($family) {
|
||||
if(! array_key_exists($family, \App::$config))
|
||||
\App::$config[$family] = array();
|
||||
public static function Load($family, $recursionCounter = 0) {
|
||||
if (! array_key_exists($family, App::$config)) {
|
||||
App::$config[$family] = [];
|
||||
}
|
||||
|
||||
if(! array_key_exists('config_loaded', \App::$config[$family])) {
|
||||
// We typically continue when presented with minor DB issues,
|
||||
// but loading the site configuration is more important.
|
||||
|
||||
// Check for query returning false and give it approx 30 seconds
|
||||
// to recover if there's a problem. This is intended to fix a
|
||||
// rare issue on Galera where temporary sync issues were causing
|
||||
// the site encryption keys to be regenerated, which was causing
|
||||
// communication issues for members.
|
||||
|
||||
// This code probably belongs at the database layer, but we don't
|
||||
// necessarily want to shut the site down for problematic queries
|
||||
// caused by bad data. That could be used in a denial of service
|
||||
// attack. Those do need to be (and they are) logged.
|
||||
|
||||
if (! array_key_exists('config_loaded', App::$config[$family])) {
|
||||
$r = q("SELECT * FROM config WHERE cat = '%s'", dbesc($family));
|
||||
if($r !== false) {
|
||||
if($r) {
|
||||
foreach($r as $rr) {
|
||||
$k = $rr['k'];
|
||||
\App::$config[$family][$k] = $rr['v'];
|
||||
}
|
||||
if ($r === false && !App::$install) {
|
||||
sleep(3);
|
||||
$recursionCounter ++;
|
||||
if ($recursionCounter > 10) {
|
||||
system_unavailable();
|
||||
}
|
||||
\App::$config[$family]['config_loaded'] = true;
|
||||
self::Load($family, $recursionCounter);
|
||||
}
|
||||
elseif (is_array($r)) {
|
||||
foreach ($r as $rr) {
|
||||
$k = $rr['k'];
|
||||
App::$config[$family][$k] = $rr['v'];
|
||||
}
|
||||
App::$config[$family]['config_loaded'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,19 +68,19 @@ class Config {
|
||||
* @return mixed
|
||||
* Return the set value, or false if the database update failed
|
||||
*/
|
||||
static public function Set($family, $key, $value) {
|
||||
public static function Set($family, $key, $value) {
|
||||
// manage array value
|
||||
$dbvalue = ((is_array($value)) ? serialize($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))) {
|
||||
if (self::Get($family, $key) === false || (! self::get_from_storage($family, $key))) {
|
||||
$ret = q("INSERT INTO config ( cat, k, v ) VALUES ( '%s', '%s', '%s' ) ",
|
||||
dbesc($family),
|
||||
dbesc($key),
|
||||
dbesc($dbvalue)
|
||||
);
|
||||
if($ret) {
|
||||
\App::$config[$family][$key] = $value;
|
||||
if ($ret) {
|
||||
App::$config[$family][$key] = $value;
|
||||
$ret = $value;
|
||||
}
|
||||
return $ret;
|
||||
@@ -70,8 +92,8 @@ class Config {
|
||||
dbesc($key)
|
||||
);
|
||||
|
||||
if($ret) {
|
||||
\App::$config[$family][$key] = $value;
|
||||
if ($ret) {
|
||||
App::$config[$family][$key] = $value;
|
||||
$ret = $value;
|
||||
}
|
||||
|
||||
@@ -96,18 +118,31 @@ class Config {
|
||||
* @param string $default (optional) default false
|
||||
* @return mixed Return value or false on error or if not set
|
||||
*/
|
||||
static public function Get($family, $key, $default = false) {
|
||||
if((! array_key_exists($family, \App::$config)) || (! array_key_exists('config_loaded', \App::$config[$family])))
|
||||
self::Load($family);
|
||||
public static function Get($family, $key, $default = false) {
|
||||
|
||||
if(array_key_exists('config_loaded', \App::$config[$family])) {
|
||||
if(! array_key_exists($key, \App::$config[$family])) {
|
||||
if ((! array_key_exists($family, App::$config)) || (! array_key_exists('config_loaded', App::$config[$family]))) {
|
||||
self::Load($family);
|
||||
}
|
||||
|
||||
if (array_key_exists('config_loaded', App::$config[$family])) {
|
||||
if (! array_key_exists($key, App::$config[$family])) {
|
||||
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;
|
||||
@@ -125,12 +160,13 @@ class Config {
|
||||
* The configuration key to delete
|
||||
* @return mixed
|
||||
*/
|
||||
static public function Delete($family, $key) {
|
||||
public static function Delete($family, $key) {
|
||||
|
||||
$ret = false;
|
||||
|
||||
if(array_key_exists($family, \App::$config) && array_key_exists($key, \App::$config[$family]))
|
||||
unset(\App::$config[$family][$key]);
|
||||
if (array_key_exists($family, App::$config) && array_key_exists($key, App::$config[$family])) {
|
||||
unset(App::$config[$family][$key]);
|
||||
}
|
||||
|
||||
$ret = q("DELETE FROM config WHERE cat = '%s' AND k = '%s'",
|
||||
dbesc($family),
|
||||
@@ -153,7 +189,7 @@ class Config {
|
||||
* The configuration key to query
|
||||
* @return mixed
|
||||
*/
|
||||
static private function get_from_storage($family,$key) {
|
||||
private static function get_from_storage($family, $key) {
|
||||
$ret = q("SELECT * FROM config WHERE cat = '%s' AND k = '%s' LIMIT 1",
|
||||
dbesc($family),
|
||||
dbesc($key)
|
||||
@@ -161,5 +197,4 @@ class Config {
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1234,17 +1234,16 @@ class Libzot {
|
||||
if ($z) {
|
||||
$r = Activity::get_actor_hublocs($author_url);
|
||||
}
|
||||
|
||||
if (!$r) {
|
||||
logger('Could not fetch author');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ($r) {
|
||||
$r = self::zot_record_preferred($r);
|
||||
$item['author_xchan'] = $r['hubloc_hash'];
|
||||
}
|
||||
$r = self::zot_record_preferred($r);
|
||||
|
||||
if (! $item['author_xchan']) {
|
||||
logger('No author!');
|
||||
return;
|
||||
}
|
||||
$item['author_xchan'] = $r['hubloc_hash'];
|
||||
|
||||
$item['owner_xchan'] = $env['sender'];
|
||||
|
||||
|
||||
@@ -110,6 +110,11 @@ class Appman extends \Zotlabs\Web\Controller {
|
||||
dbesc($papp['guid'])
|
||||
);
|
||||
|
||||
$sync[0]['term'] = q("select * from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($sync[0]['id'])
|
||||
);
|
||||
|
||||
if (intval($sync[0]['app_system'])) {
|
||||
Libsync::build_sync_packet(local_channel(), ['sysapp' => $sync]);
|
||||
}
|
||||
@@ -126,6 +131,11 @@ class Appman extends \Zotlabs\Web\Controller {
|
||||
dbesc($papp['guid'])
|
||||
);
|
||||
|
||||
$sync[0]['term'] = q("select * from term where otype = %d and oid = %d",
|
||||
intval(TERM_OBJ_APP),
|
||||
intval($sync[0]['id'])
|
||||
);
|
||||
|
||||
if (intval($sync[0]['app_system'])) {
|
||||
Libsync::build_sync_packet(local_channel(), ['sysapp' => $sync]);
|
||||
}
|
||||
|
||||
@@ -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') )
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
@@ -17,11 +17,11 @@ class PhotoGd extends PhotoDriver {
|
||||
$t = [];
|
||||
|
||||
$t['image/jpeg'] = 'jpg';
|
||||
if(imagetypes() & IMG_PNG)
|
||||
if(\imagetypes() & IMG_PNG)
|
||||
$t['image/png'] = 'png';
|
||||
if(imagetypes() & IMG_GIF)
|
||||
if(\imagetypes() & IMG_GIF)
|
||||
$t['image/gif'] = 'gif';
|
||||
if(imagetypes() & IMG_WEBP)
|
||||
if(\imagetypes() & IMG_WEBP)
|
||||
$t['image/webp'] = 'webp';
|
||||
|
||||
return $t;
|
||||
|
||||
@@ -24,7 +24,7 @@ class Tagadelic {
|
||||
$x ++;
|
||||
}
|
||||
|
||||
usort($tags,'self::tags_sort');
|
||||
usort($tags, [self::class, 'tags_sort']);
|
||||
|
||||
$range = max(.01, $max - $min) * 1.0001;
|
||||
|
||||
@@ -41,4 +41,4 @@ class Tagadelic {
|
||||
return((strtolower($a[0]) < strtolower($b[0])) ? -1 : 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ class Receiver {
|
||||
protected $prvkey;
|
||||
protected $rawdata;
|
||||
protected $sigdata;
|
||||
protected $hub;
|
||||
|
||||
function __construct($handler, $localdata = null) {
|
||||
|
||||
|
||||
10
boot.php
10
boot.php
@@ -58,9 +58,11 @@ require_once('include/hubloc.php');
|
||||
require_once('include/attach.php');
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/conversation.php');
|
||||
require_once('include/acl_selectors.php');
|
||||
|
||||
define('PLATFORM_NAME', 'hubzilla');
|
||||
define('STD_VERSION', '8.8');
|
||||
define('STD_VERSION', '8.8.5');
|
||||
define('ZOT_REVISION', '6.0');
|
||||
|
||||
define('DB_UPDATE_VERSION', 1259);
|
||||
@@ -678,8 +680,8 @@ function sys_boot() {
|
||||
* Load configs from db. Overwrite configs from .htconfig.php
|
||||
*/
|
||||
|
||||
load_config('system');
|
||||
load_config('feature');
|
||||
Config::Load('system');
|
||||
Config::Load('feature');
|
||||
|
||||
App::$session = new Zotlabs\Web\Session();
|
||||
App::$session->init();
|
||||
@@ -1401,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();
|
||||
}
|
||||
|
||||
@@ -85,16 +85,16 @@ There are several ways to deploy a new hub.
|
||||
Example config scripts are available for these platforms in doc/install.
|
||||
Apache and nginx have the most support.
|
||||
|
||||
* PHP 7.1 or later.
|
||||
* Note that on some shared hosting environments, the _command line_
|
||||
version of PHP might differ from the _webserver_ version
|
||||
* PHP 8.1 or later.
|
||||
Note that on some shared hosting environments, the _command line_
|
||||
version of PHP might differ from the _webserver_ version
|
||||
|
||||
* PHP *command line* access with register_argc_argv set to true in the
|
||||
php.ini file * and with no hosting provider restrictions on the use of
|
||||
php.ini file, and with no hosting provider restrictions on the use of
|
||||
exec() and proc_open().
|
||||
|
||||
* curl, gd (with at least jpeg and png support), mysqli, mbstring, zip,
|
||||
and openssl extensions. The imagick extension is not required but desirable.
|
||||
* curl, gd (with at least jpeg and png support), pdo-mysql (or pdo-postgres), mbstring, zip,
|
||||
and openssl extensions. The imagick extension is not required, but recommended.
|
||||
|
||||
* xml extension is required if you want webdav to work.
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ function reload_plugins() {
|
||||
$plugins = get_config('system', 'addon');
|
||||
if(strlen($plugins)) {
|
||||
$r = dbq("SELECT * FROM addon WHERE installed = 1");
|
||||
if(count($r))
|
||||
if($r)
|
||||
$installed = $r;
|
||||
else
|
||||
$installed = array();
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
require_once("include/network.php");
|
||||
|
||||
function system_down() {
|
||||
http_status(503, 'Service Unavailable');
|
||||
// Set $skiplog to true here. Otherwise we will run into a loop
|
||||
// when system_unavailable() -> system_down() is called from Zotlabs\Lib\Config::Load()
|
||||
// but the DB is not available.
|
||||
http_status(503, 'Service Unavailable', true);
|
||||
echo <<< EOT
|
||||
<html>
|
||||
<head><title>System Unavailable</title></head>
|
||||
@@ -12,4 +15,4 @@ Apologies but this site is unavailable at the moment. Please try again later.
|
||||
</body>
|
||||
</html>
|
||||
EOT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ function store_item_tag($uid,$iid,$otype,$type,$term,$url = '') {
|
||||
function get_terms_oftype($arr, $type) {
|
||||
$ret = [];
|
||||
|
||||
if(!is_array($arr) && count($arr))
|
||||
if(!is_array($arr))
|
||||
return $ret;
|
||||
|
||||
if(! is_array($type))
|
||||
|
||||
@@ -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) ;
|
||||
@@ -3834,30 +3839,21 @@ function featured_sort($a,$b) {
|
||||
}
|
||||
|
||||
|
||||
// Be aware that punify will convert domain names and pathnames
|
||||
function unpunify($s) {
|
||||
if (function_exists('idn_to_utf8') && isset($s)) {
|
||||
return idn_to_utf8($s);
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
function punify($s) {
|
||||
require_once('vendor/simplepie/simplepie/idn/idna_convert.class.php');
|
||||
$x = new idna_convert(['encoding' => 'utf8']);
|
||||
return $x->encode($s);
|
||||
|
||||
if (function_exists('idn_to_ascii') && isset($s)) {
|
||||
return idn_to_ascii($s);
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Be aware that unpunify() will only convert domain names and not pathnames.
|
||||
*
|
||||
* @param string $s
|
||||
* @return string
|
||||
*/
|
||||
function unpunify($s) {
|
||||
require_once('vendor/simplepie/simplepie/idn/idna_convert.class.php');
|
||||
$x = new idna_convert(['encoding' => 'utf8']);
|
||||
|
||||
return $x->decode($s);
|
||||
}
|
||||
|
||||
|
||||
function unique_multidim_array($array, $key) {
|
||||
$temp_array = array();
|
||||
$i = 0;
|
||||
|
||||
61
tests/unit/Lib/ConfigTest.php
Normal file
61
tests/unit/Lib/ConfigTest.php
Normal file
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -19,13 +19,15 @@ main {
|
||||
#region_1 {
|
||||
position: relative;
|
||||
order: 1;
|
||||
padding: 4.5rem 7px 0px 7px;
|
||||
padding: 0 7px 0 7px;
|
||||
width: 25%;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
#region_2 {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
order: 2;
|
||||
padding: 4.5rem 7px 200px 7px;
|
||||
padding: 0 7px 200px 7px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
@@ -20,12 +20,14 @@ main {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
order: 1;
|
||||
padding: 4.5rem 7px 200px 7px;
|
||||
padding: 0 7px 200px 7px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
#region_2 {
|
||||
position: relative;
|
||||
order: 2;
|
||||
padding: 4.5rem 7px 0px 7px;
|
||||
padding: 0 7px 0 7px;
|
||||
width: 25%;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
@@ -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."
|
||||
|
||||
|
||||
@@ -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"] = "";
|
||||
|
||||
@@ -1487,6 +1487,7 @@ dl.bb-dl > dd > li {
|
||||
|
||||
.onoffswitch-inner {
|
||||
display: block; width: 200%; margin-left: -100%;
|
||||
color: var(--bs-secondary-color);
|
||||
transition: margin 0.19s ease-in-out;
|
||||
}
|
||||
|
||||
@@ -1498,15 +1499,15 @@ dl.bb-dl > dd > li {
|
||||
.onoffswitch-inner:before {
|
||||
content: attr(data-on);
|
||||
padding-right: 21px;
|
||||
background-color: var(--bs-secondary-bg);
|
||||
text-align: right;
|
||||
background-color: var(--bs-tertiary-bg);
|
||||
}
|
||||
|
||||
.onoffswitch-inner:after {
|
||||
content: attr(data-off);
|
||||
padding-left: 21px;
|
||||
background-color: var(--bs-secondary-bg);
|
||||
text-align: left;
|
||||
background-color: var(--bs-tertiary-bg);
|
||||
}
|
||||
|
||||
.onoffswitch-switch {
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user