diff options
90 files changed, 11068 insertions, 9916 deletions
@@ -49,16 +49,14 @@ define ( 'RED_PLATFORM', 'redmatrix' ); define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R'); define ( 'ZOT_REVISION', 1 ); -define ( 'DB_UPDATE_VERSION', 1139 ); +define ( 'DB_UPDATE_VERSION', 1140 ); /** - * Constant with a HTML line break. + * @brief Constant with a HTML line break. * * Contains a HTML line break (br) element and a real carriage return with line * feed for the source. * This can be used in HTML and JavaScript where needed a line break. - * - * @var string */ define ( 'EOL', '<br>' . "\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); @@ -707,8 +705,6 @@ class App { * * Mostly unimplemented yet. Only options 'template_engine' and * beyond are used. - * - * @var array */ private $theme = array( 'sourcename' => '', @@ -721,15 +717,11 @@ class App { ); /** - * array of registered template engines ('name'=>'class name') - * - * @var array + * @brief An array of registered template engines ('name'=>'class name') */ public $template_engines = array(); /** - * array of instanced template engines ('name'=>'instance') - * - * @var array + * @brief An array of instanced template engines ('name'=>'instance') */ public $template_engine_instance = array(); @@ -806,9 +798,7 @@ class App { if(substr($this->cmd, 0, 1) === '~') $this->cmd = 'channel/' . substr($this->cmd, 1); - - /** - * + /* * 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: @@ -816,25 +806,22 @@ class App { * [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->argv = explode('/', $this->cmd); $this->argc = count($this->argv); - if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) { + 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 { + } else { $this->argc = 1; $this->argv = array('home'); $this->module = 'home'; } - /** + /* * See if there is any page number information, and initialise * pagination */ @@ -846,7 +833,7 @@ class App { $this->pager['start'] = 0; $this->pager['total'] = 0; - /** + /* * Detect mobile devices */ @@ -858,7 +845,7 @@ class App { BaseObject::set_app($this); - /** + /* * register template engines */ $dc = get_declared_classes(); @@ -1239,8 +1226,9 @@ function absurl($path) { function os_mkdir($path, $mode = 0777, $recursive = false) { $oldumask = @umask(0); - @mkdir($path, $mode, $recursive); - @umask($oldumask); + $result = @mkdir($path, $mode, $recursive); + @umask($oldumask); + return $result; } /** @@ -2028,7 +2016,7 @@ function curPageURL() { * @return mixed */ function get_custom_nav(&$a, $navname) { - if(! $navname) + if (! $navname) return $a->page['nav']; // load custom nav menu by name here } @@ -2044,7 +2032,7 @@ function get_custom_nav(&$a, $navname) { function load_pdl(&$a) { require_once('include/comanche.php'); - if(! count($a->layout)) { + if (! count($a->layout)) { $n = 'mod_' . $a->module . '.pdl' ; $u = comanche_get_channel_id(); if($u) @@ -2070,7 +2058,6 @@ function exec_pdl(&$a) { } - /** * @brief build the page. * @@ -2080,7 +2067,6 @@ function exec_pdl(&$a) { */ function construct_page(&$a) { - exec_pdl($a); $comanche = ((count($a->layout)) ? true : false); @@ -2089,28 +2075,27 @@ function construct_page(&$a) { $installing = false; - if($a->module == 'setup') { + if ($a->module == 'setup') { $installing = true; } else { nav($a); } - if($comanche) { - - if($a->layout['nav']) { + if ($comanche) { + if ($a->layout['nav']) { $a->page['nav'] = get_custom_nav($a, $a->layout['nav']); } } - if(($p = theme_include(current_theme() . '.js')) != '') + if (($p = theme_include(current_theme() . '.js')) != '') head_add_js($p); - if(($p = theme_include('mod_' . $a->module . '.php')) != '') + if (($p = theme_include('mod_' . $a->module . '.php')) != '') require_once($p); require_once('include/js_strings.php'); - if(x($a->page, 'template_style')) + if (x($a->page, 'template_style')) head_add_css($a->page['template_style'] . '.css'); else head_add_css(((x($a->page, 'template')) ? $a->page['template'] : 'default' ) . '.css'); @@ -2147,7 +2132,6 @@ function construct_page(&$a) { call_hooks('construct_page', $arr); $a->layout = $arr['layout']; - foreach($a->layout as $k => $v) { if((strpos($k, 'region_') === 0) && strlen($v)) { if(strpos($v, '$region_') !== false) { @@ -2249,11 +2233,11 @@ function get_directory_realm() { */ function get_directory_primary() { - $dirmode = intval(get_config('system','directory_mode')); + $dirmode = intval(get_config('system','directory_mode')); - if($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_PRIMARY) { + if($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_PRIMARY) { return z_root(); - } + } if($x = get_config('system', 'directory_primary')) return $x; @@ -2262,13 +2246,11 @@ function get_directory_primary() { } - /** - * @brief return relative date of last completed poller execution + * @brief return relative date of last completed poller execution. */ - function get_poller_runtime() { - $t = get_config('system','lastpoll'); + $t = get_config('system', 'lastpoll'); return relative_date($t); } @@ -2302,7 +2284,12 @@ function z_check_cert() { } - +/** + * @brief Send email to admin if server has an invalid certificate. + * + * If a RedMatrix hub is available over https it must have a publicly valid + * certificate. + */ function cert_bad_email() { $a = get_app(); @@ -2319,13 +2306,12 @@ function cert_bad_email() { 'From: Administrator' . '@' . $a->get_hostname() . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . 'Content-transfer-encoding: 8bit' ); - } -// send warnings every 3-5 days if cron is not running. - - +/** + * @brief Send warnings every 3-5 days if cron is not running. + */ function check_cron_broken() { $t = get_config('system','lastpollcheck'); diff --git a/doc/db_account.bb b/doc/db_account.bb index 203f72bf0..354f2d3a8 100644 --- a/doc/db_account.bb +++ b/doc/db_account.bb @@ -1,42 +1,67 @@ [table] [tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra [/th][/tr] -[tr][td]account_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment +[tr][td]account_id[/td][td]table index[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment [/td][/tr] -[tr][td]account_parent[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[tr][td]account_parent[/td][td]for hierarchical accounts, the account_id of the parent to this one, if account_parent = account_id, this is the top level account[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] [/td][/tr] -[tr][td]account_default_channel[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[tr][td]account_default_channel[/td][td]channel_id of channel to connect on login[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] [/td][/tr] -[tr][td]account_salt[/td][td][/td][td]char(32)[/td][td]NO[/td][td][/td][td][/td][td] +[tr][td]account_salt[/td][td]complexity token for account_password[/td][td]char(32)[/td][td]NO[/td][td][/td][td][/td][td] [/td][/tr] -[tr][td]account_password[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[tr][td]account_password[/td][td]hashed password for this account[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] [/td][/tr] -[tr][td]account_email[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[tr][td]account_email[/td][td]essentially the login ID, although it is usually possible to login with a channel address[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] [/td][/tr] -[tr][td]account_external[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[tr][td]account_external[/td][td]Currently unused[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td] [/td][/tr] -[tr][td]account_language[/td][td][/td][td]char(16)[/td][td]NO[/td][td][/td][td]en[/td][td] +[tr][td]account_language[/td][td]default language (closest available browser-accept language when account was created)[/td][td]char(16)[/td][td]NO[/td][td][/td][td]en[/td][td] [/td][/tr] -[tr][td]account_created[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]account_created[/td][td]timestamp of account creation[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] [/td][/tr] -[tr][td]account_lastlog[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]account_lastlog[/td][td]timestamp of last login (or daily update if "remember me" is in effect)[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] [/td][/tr] -[tr][td]account_flags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[tr][td]account_flags[/td][td]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] [/td][/tr] -[tr][td]account_roles[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[tr][td]account_roles[/td][td]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] [/td][/tr] -[tr][td]account_reset[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] +[tr][td]account_reset[/td][td]verification token for password reset[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td] [/td][/tr] -[tr][td]account_expires[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]account_expires[/td][td]timestamp when account expires and will be deleted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] [/td][/tr] -[tr][td]account_expire_notified[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]account_expire_notified[/td][td]timestamp of last warning of account expiration[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td] [/td][/tr] -[tr][td]account_service_class[/td][td][/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] +[tr][td]account_service_class[/td][td]service class for this account, determines what if any limits/restrictions are in place[/td][td]char(32)[/td][td]NO[/td][td]MUL[/td][td][/td][td] [/td][/tr] -[tr][td]account_level[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] +[tr][td]account_level[/td][td]future use[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td] [/td][/tr] -[tr][td]account_password_changed[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] +[tr][td]account_password_changed[/td][td]timestamp of last password change - to limit account deletion for 48 hours to prevent malicious activity[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td] [/td][/tr] [/table] +Notes: + + + +/** + * Account Flags + */ + +define ( 'ACCOUNT_OK', 0x0000 ); +define ( 'ACCOUNT_UNVERIFIED', 0x0001 ); +define ( 'ACCOUNT_BLOCKED', 0x0002 ); +define ( 'ACCOUNT_EXPIRED', 0x0004 ); +define ( 'ACCOUNT_REMOVED', 0x0008 ); +define ( 'ACCOUNT_PENDING', 0x0010 ); + +/** + * Account roles + */ + +define ( 'ACCOUNT_ROLE_ALLOWCODE', 0x0001 ); // 1 - this account can create content with PHP/Javascript +define ( 'ACCOUNT_ROLE_SYSTEM', 0x0002 ); // 2 - this is the special system account +define ( 'ACCOUNT_ROLE_DEVELOPER', 0x0004 ); +define ( 'ACCOUNT_ROLE_ADMIN', 0x1000 ); // 4096 - this account is an administrator + + Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
\ No newline at end of file diff --git a/doc/diaspora_compat.md b/doc/diaspora_compat.md index 3829a9c64..eb7ec656d 100644 --- a/doc/diaspora_compat.md +++ b/doc/diaspora_compat.md @@ -11,6 +11,9 @@ Access control only works on posts and comments. Diaspora members will get permi Edited posts will not be delivered. Diaspora members will see the original post/comment without edits. There is no mechanism in the protocol to update an existing post. We cannot delete it and submit another invisibly because the message-id will change and we need to keep the same message-id on our own network. The only workaround is to delete the post/comment and do it over. We may eventually provide a way to delete the out of date copy only from Diaspora and keep it intact on networks that can handle edits. +Some comments from external services will not deliver to Diaspora, as they have no Diaspora service discovery. Currently this applies to comments from WordPress blogs which are imported into your stream; but will extend to most any service that has no Diaspora discover mechanism. + + Nomadic identity will not work with Diaspora. We will eventually provide an **option** which will allow you to "start sharing" from all of your clones when you make the first connection. The Diaspora person does not have to accept this, but it will allow your communications to continue if they accept this connection. Without this option, if you go to another server from where you made the connection originally or you make the connection before creating the clone, you will need to make friends with them again from the new location. Post expiration is not supported on Diaspora. We will provide you an option to not send expiring posts to that network. In the future this may be provided with a remote delete request. diff --git a/doc/hidden_configs.bb b/doc/hidden_configs.bb index ea945f8d2..b992c5487 100644 --- a/doc/hidden_configs.bb +++ b/doc/hidden_configs.bb @@ -88,9 +88,9 @@ This document assumes you're an administrator. are running, but also keeps things a bit faster while it's not. There also exist CLI utilities for performing this operation, which you may prefer, especially if you're a large site. - [b]system > default_expire_days[/b] - When creating a new channel, set the default expiration of connections - posts to this number of days. + [b]system > expire_limit + Don't expire any more than this number of posts per channel per + expiration run to keep from exhausting memory. Default 5000. [b]system > dlogfile[/b] Logfile to use for logging development errors. Exactly the same as logger otherwise. This isn't magic, and requires your own logging @@ -107,7 +107,7 @@ This document assumes you're an administrator. [b]system > auto_follow[/b] Make the first channel of an account auto-follow channels listed here - comma separated list of webbies (member@hub addresses). [b]system > admin_email[/b] - Specifies the administrators email for this site. This is initially set during install. + Specifies the administrator's email for this site. This is initially set during install. [b]system > cron_hour[/b] Specify an hour in which to run cron_daily. By default with no config, this will run at midnight UTC. [b]system > minimum_feedcheck_minutes[/b] @@ -117,7 +117,7 @@ This document assumes you're an administrator. [b]system > ignore_imagick[/b] Ignore imagick and use GD, even if imagick is installed on the server. Prevents some issues with PNG files in older versions of imagick. [b]system > no_age_restriction[/b] - Do not restric registration to people over the age of 13 + Do not restrict registration to people over the age of 13. This carries legal responsibilities in many countries to require that age be provided and to block all personal information from minors, so please check your local laws before changing. [b]system > override_poll_lockfile[/b] Ignore the lock file in the poller process to allow more than one process to run at a time. [b]system > projecthome[/b] diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb index e0e3d7f96..713885f92 100644 --- a/doc/to_do_code.bb +++ b/doc/to_do_code.bb @@ -8,7 +8,6 @@ We need much more than this, but here are areas where developers can help. Pleas [li]Infinite scroll improvements (i.e. embedded page links) see http://scrollsample.appspot.com/items
[li]Finish the anti-spam bayesian engine[/li]
[li]implement an email permission denied bounce message from the sys channel[/li]
-[li]finish Wordpress connector - import wordpress comments back to redmatrix[/li]
[li]provide a way for xchans with a certain network type to upgrade (unknown to rss, rss to statusnet, friendica-over-diaspora to friendica, for instance) based on new knowledge and/or redmatrix ability[/li]
[li]If DAV folders exist, add an option to the Settings page to set a default folder for attachment uploads.[/li]
[li]Integrate the "open site" list with the register page[/li]
diff --git a/include/ITemplateEngine.php b/include/ITemplateEngine.php index 53c1845f4..7bd559a63 100755 --- a/include/ITemplateEngine.php +++ b/include/ITemplateEngine.php @@ -1,11 +1,10 @@ -<?php
-require_once 'boot.php';
-
-
-/**
- * Interface for template engines
- */
-interface ITemplateEngine {
- public function replace_macros($s,$v);
- public function get_markup_template($file, $root='');
-}
+<?php +require_once 'boot.php'; + +/** + * @brief Interface for template engines. + */ +interface ITemplateEngine { + public function replace_macros($s, $v); + public function get_markup_template($file, $root=''); +} diff --git a/include/RedDAV/RedBrowser.php b/include/RedDAV/RedBrowser.php index e651562ec..56d18ded6 100644 --- a/include/RedDAV/RedBrowser.php +++ b/include/RedDAV/RedBrowser.php @@ -95,6 +95,7 @@ class RedBrowser extends DAV\Browser\Plugin { '{DAV:}getlastmodified', ), 1); + $parent = $this->server->tree->getNodeForPath($path); $parentpath = array(); @@ -167,6 +168,7 @@ class RedBrowser extends DAV\Browser\Plugin { $fullPath = DAV\URLUtil::encodePath('/' . trim($this->server->getBaseUri() . ($path ? $path . '/' : '') . $name, '/')); + $displayName = isset($file[200]['{DAV:}displayname']) ? $file[200]['{DAV:}displayname'] : $name; $displayName = $this->escapeHTML($displayName); diff --git a/include/RedDAV/RedDirectory.php b/include/RedDAV/RedDirectory.php index 68186d21b..922be378d 100644 --- a/include/RedDAV/RedDirectory.php +++ b/include/RedDAV/RedDirectory.php @@ -49,6 +49,7 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota { * @param RedBasicAuth &$auth_plugin */ public function __construct($ext_path, &$auth_plugin) { +// $ext_path = urldecode($ext_path); //logger('directory ' . $ext_path, LOGGER_DATA); $this->ext_path = $ext_path; // remove "/cloud" from the beginning of the path diff --git a/include/account.php b/include/account.php index caac0b178..5926e05c1 100644 --- a/include/account.php +++ b/include/account.php @@ -1,4 +1,8 @@ -<?php /** @file */ +<?php +/** + * @file include/account.php + * @brief Somme account related functions. + */ require_once('include/config.php'); require_once('include/network.php'); @@ -43,15 +47,14 @@ function check_account_email($email) { function check_account_password($password) { $result = array('error' => false, 'message' => ''); - // The only validation we perform by default is pure Javascript to + // The only validation we perform by default is pure Javascript to // check minimum length and that both entered passwords match. - // Use hooked functions to perform complexity requirement checks. + // Use hooked functions to perform complexity requirement checks. $arr = array('password' => $password, 'result' => $result); call_hooks('check_account_password', $arr); return $arr['result']; - } function check_account_invite($invite_code) { @@ -75,7 +78,6 @@ function check_account_invite($invite_code) { call_hooks('check_account_invite', $arr); return $arr['result']; - } function check_account_admin($arr) { @@ -109,7 +111,7 @@ function create_account($arr) { $flags = ((x($arr,'account_flags')) ? intval($arr['account_flags']) : ACCOUNT_OK); $roles = ((x($arr,'account_roles')) ? intval($arr['account_roles']) : 0 ); $expires = ((x($arr,'expires')) ? intval($arr['expires']) : NULL_DATE); - + $default_service_class = get_config('system','default_service_class'); if($default_service_class === false) @@ -132,16 +134,16 @@ function create_account($arr) { // allow the admin_email account to be admin, but only if it's the first account. $c = account_total(); - if(($c === 0) && (check_account_admin($arr))) + if (($c === 0) && (check_account_admin($arr))) $roles |= ACCOUNT_ROLE_ADMIN; - // Ensure that there is a host keypair. + // Ensure that there is a host keypair. - if((! get_config('system','pubkey')) && (! get_config('system','prvkey'))) { - $hostkey = new_keypair(4096); - set_config('system','pubkey',$hostkey['pubkey']); - set_config('system','prvkey',$hostkey['prvkey']); - } + if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) { + $hostkey = new_keypair(4096); + set_config('system', 'pubkey', $hostkey['pubkey']); + set_config('system', 'prvkey', $hostkey['prvkey']); + } $invite_result = check_account_invite($invite_code); if($invite_result['error']) { @@ -180,7 +182,6 @@ function create_account($arr) { dbesc($roles), dbesc($expires), dbesc($default_service_class) - ); if(! $r) { logger('create_account: DB INSERT failed.'); @@ -195,7 +196,7 @@ function create_account($arr) { if($r && count($r)) { $result['account'] = $r[0]; } - else { + else { logger('create_account: could not retrieve newly created account'); } @@ -215,8 +216,8 @@ function create_account($arr) { $result['success'] = true; $result['email'] = $email; $result['password'] = $password; - return $result; + return $result; } @@ -255,7 +256,6 @@ function verify_email_address($arr) { logger('send_reg_approval_email: failed to ' . $admin['email'] . 'account_id: ' . $arr['account']['account_id']); return $res; - } @@ -292,7 +292,6 @@ function send_reg_approval_email($arr) { $details = (($ip) ? $ip . ' [' . gethostbyaddr($ip) . ']' : '[unknown or stealth IP]'); - $delivered = 0; foreach($admins as $admin) { @@ -346,11 +345,14 @@ function send_verification_email($email,$password) { return($res ? true : false); } - +/** + * @brief Allows a user registration. + * + * @param string $hash + * @return array|boolean + */ function user_allow($hash) { - $a = get_app(); - $ret = array('success' => false); $register = q("SELECT * FROM `register` WHERE `hash` = '%s' LIMIT 1", @@ -363,7 +365,7 @@ function user_allow($hash) { $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", intval($register[0]['uid']) ); - + if(! $account) return $ret; @@ -381,7 +383,7 @@ function user_allow($hash) { intval(ACCOUNT_PENDING), intval($register[0]['uid']) ); - + push_lang($register[0]['language']); $email_tpl = get_intltext_template("register_open_eml.tpl"); @@ -402,18 +404,23 @@ function user_allow($hash) { pop_lang(); - if($res) { + if ($res) { info( t('Account approved.') . EOL ); return true; - } - + } } -// This does not have to go through user_remove() and save the nickname -// permanently against re-registration, as the person was not yet -// allowed to have friends on this system - +/** + * @brief Denies a user registration. + * + * This does not have to go through user_remove() and save the nickname + * permanently against re-registration, as the person was not yet + * allowed to have friends on this system + * + * @param string $hash + * @return boolean + */ function user_deny($hash) { $register = q("SELECT * FROM register WHERE hash = '%s' LIMIT 1", @@ -426,7 +433,7 @@ function user_deny($hash) { $account = q("SELECT account_id, account_email FROM account WHERE account_id = %d LIMIT 1", intval($register[0]['uid']) ); - + if(! $account) return false; @@ -438,15 +445,14 @@ function user_deny($hash) { dbesc($register[0]['id']) ); notice( sprintf(t('Registration revoked for %s'), $account[0]['account_email']) . EOL); + return true; - + } function user_approve($hash) { - $a = get_app(); - $ret = array('success' => false); $register = q("SELECT * FROM `register` WHERE `hash` = '%s' and password = 'verify' LIMIT 1", @@ -459,7 +465,7 @@ function user_approve($hash) { $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", intval($register[0]['uid']) ); - + if(! $account) return $ret; @@ -482,21 +488,16 @@ function user_approve($hash) { intval(ACCOUNT_UNVERIFIED), intval($register[0]['uid']) ); - + info( t('Account verified. Please login.') . EOL ); return true; - } - - - - /** - * @function downgrade_accounts() - * Checks for accounts that have past their expiration date. + * @brief Checks for accounts that have past their expiration date. + * * If the account has a service class which is not the site default, * the service class is reset to the site default and expiration reset to never. * If the account has no service class it is expired and subsequently disabled. @@ -506,8 +507,6 @@ function user_approve($hash) { * not the job of this function, but this can be implemented by plugin if desired. * Default behaviour is to stop allowing additional resources to be consumed. */ - - function downgrade_accounts() { $r = q("select * from account where not ( account_flags & %d )>0 @@ -604,7 +603,7 @@ function service_class_allows($uid, $property, $usage = false) { * * @param int $aid The account_id to check * @param string $property The service class property to check for - * @param int|boolean $usage, (optional) The value to check against + * @param int|boolean $usage (optional) The value to check against * @return boolean */ function account_service_class_allows($aid, $property, $usage = false) { diff --git a/include/api.php b/include/api.php index 8c0e32ecc..3ac8ddbda 100644 --- a/include/api.php +++ b/include/api.php @@ -622,10 +622,14 @@ require_once('include/items.php'); function api_red_xchan(&$a,$type) { + logger('api_xchan'); + if(api_user() === false) return false; + logger('api_xchan'); require_once('include/hubloc.php'); - if($_SERVER['request_method'] === 'POST') { + + if($_SERVER['REQUEST_METHOD'] === 'POST') { $r = xchan_store($_REQUEST); } $r = xchan_fetch($_REQUEST); @@ -727,6 +731,16 @@ require_once('include/items.php'); else $_REQUEST['parent_mid'] = $parent; + if($_REQUEST['namespace'] && $parent) { + $x = q("select iid from item_id where service = '%s' and sid = '%s' limit 1", + dbesc($_REQUEST['namespace']), + dbesc($parent) + ); + if($x) { + $_REQUEST['parent'] = $x[0]['iid']; + } + } + if(requestdata('lat') && requestdata('long')) $_REQUEST['coord'] = sprintf("%s %s",requestdata('lat'),requestdata('long')); diff --git a/include/attach.php b/include/attach.php index 1daa42aef..415859b39 100644 --- a/include/attach.php +++ b/include/attach.php @@ -1,10 +1,10 @@ <?php - -/** @file +/** + * @file include/attach.php * * @brief File/attach API with the potential for revision control. * - * TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename + * @TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename * which is inaccessible from the web). This could get around PHP storage limits and store videos and larger * items, using fread or OS methods or native code to read/write or chunk it through. * Also an 'append' option to the storage function might be a useful addition. @@ -15,10 +15,10 @@ require_once('include/security.php'); /** * @brief Guess the mimetype from file ending. - * + * * This function takes a file name and guess the mimetype from the * filename extension. - * + * * @param $filename a string filename * @return string The mimetype according to a file ending. */ @@ -117,23 +117,22 @@ function z_mime_content_type($filename) { /** * @brief Count files/attachments. - * - * - * @param $channel_id - * @param $observer - * @param $hash (optional) - * @param $filename (optional) - * @param $filetype (optional) - * @return array - * $ret['success'] boolean - * $ret['results'] amount of found results, or false - * $ret['message'] string with error messages if any + * + * @param int $channel_id + * @param string $observer + * @param string $hash (optional) + * @param string $filename (optional) + * @param string $filetype (optional) + * @return assoziative array with: + * * \e boolean \b success + * * \e int|boolean \b results amount of found results, or false + * * \e string \b message with error messages if any */ function attach_count_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '') { $ret = array('success' => false); - if(! perm_is_allowed($channel_id,$observer, 'read_storage')) { + if(! perm_is_allowed($channel_id, $observer, 'read_storage')) { $ret['message'] = t('Permission denied.'); return $ret; } @@ -219,8 +218,9 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $ * * This could exhaust memory so most useful only when immediately sending the data. * - * @param $hash - * @param $rev + * @param string $hash + * @param int $rev Revision + * @return array */ function attach_by_hash($hash, $rev = 0) { @@ -234,7 +234,6 @@ function attach_by_hash($hash, $rev = 0) { elseif($rev) $sql_extra = " and revision = " . intval($rev) . " "; - $r = q("SELECT uid FROM attach WHERE hash = '%s' $sql_extra LIMIT 1", dbesc($hash) ); @@ -270,9 +269,9 @@ function attach_by_hash($hash, $rev = 0) { /** * @brief Find an attachment by hash and revision. - * + * * Returns the entire attach structure excluding data. - * + * * @see attach_by_hash() * @param $hash * @param $rev revision default 0 @@ -561,7 +560,7 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') { } else $paths = array($pathname); - + $r = q("select id, aid, uid, hash, creator, filename, filetype, filesize, revision, folder, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where id = %d and folder = '%s' and filename = '%s' and (flags & %d )>0 " . permissions_sql($channel_id), intval($channel_id), dbesc($parent_hash), @@ -579,24 +578,22 @@ function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') { } /** - * @function attach_mkdir($channel,$observer_hash,$arr); - * * @brief Create directory. * * @param array $channel channel array of owner * @param string $observer_hash hash of current observer * @param array $arr parameter array to fulfil request - * Required: - * $arr['filename'] - * $arr['folder'] // hash of parent directory, empty string for root directory - * Optional: - * $arr['hash'] // precumputed hash for this node - * $arr['allow_cid'] - * $arr['allow_gid'] - * $arr['deny_cid'] - * $arr['deny_gid'] + * - Required: + * * \e string \b filename + * * \e string \b folder hash of parent directory, empty string for root directory + * - Optional: + * * \e string \b hash precumputed hash for this node + * * \e tring \b allow_cid + * * \e string \b allow_gid + * * \e string \b deny_cid + * * \e string \b deny_gid + * @return array */ - function attach_mkdir($channel, $observer_hash, $arr = null) { $ret = array('success' => false); @@ -706,7 +703,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { ); } else { - logger('attach_mkdir: ' . mkdir . ' ' . $path . 'failed.'); + logger('attach_mkdir: ' . mkdir . ' ' . $path . ' failed.'); $ret['message'] = t('mkdir failed.'); } } @@ -720,13 +717,13 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { /** * @brief Changes permissions of a file. * - * @param $channel_id - * @param $resource - * @param $allow_cid - * @param $allow_gid - * @param $deny_cid - * @param $deny_gid - * @param $recurse + * @param int $channel_id + * @param array $resource + * @param string $allow_cid + * @param string $allow_gid + * @param string $deny_cid + * @param string $deny_gid + * @param boolean $recurse (optional) default false */ function attach_change_permissions($channel_id, $resource, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $recurse = false) { @@ -836,7 +833,6 @@ function attach_delete($channel_id, $resource) { ); file_activity($channel_id, $object, $object['allow_cid'], $object['allow_gid'], $object['deny_cid'], $object['deny_gid'], 'update', $no_activity=false); - } /** @@ -844,8 +840,8 @@ function attach_delete($channel_id, $resource) { * * @warning This function cannot be used with mod/dav as it always returns a * path valid under mod/cloud. - * - * @param array assoziative array with: + * + * @param array $arr assoziative array with: * * \e int \b uid the channel's uid * * \e string \b folder * * \e string \b filename @@ -973,9 +969,22 @@ function pipe_streams($in, $out) { $size = 0; while (!feof($in)) $size += fwrite($out, fread($in, 8192)); + return $size; } +/** + * @brief Activity for files. + * + * @param int $channel_id + * @param array $object + * @param string $allow_cid + * @param string $allow_gid + * @param string $deny_cid + * @param string $deny_gid + * @param string $verb + * @param boolean $no_activity + */ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $verb, $no_activity) { require_once('include/items.php'); @@ -1016,7 +1025,6 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, //filter out receivers which do not have permission to view filestorage $arr_allow_cid = check_list_permissions($channel_id, $arr_allow_cid, 'view_storage'); - } $mid = item_message_id(); @@ -1030,7 +1038,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $jsonobject = json_encode($object); //check if item for this object exists - $y = q("SELECT * FROM item WHERE verb = '%s' AND obj_type = '%s' AND resource_id = '%s' AND uid = %d LIMIT 1", + $y = q("SELECT mid FROM item WHERE verb = '%s' AND obj_type = '%s' AND resource_id = '%s' AND uid = %d LIMIT 1", dbesc(ACTIVITY_POST), dbesc($objtype), dbesc($object['hash']), @@ -1097,7 +1105,6 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $update = false; //notice( t('File activity updated') . EOL); - } if($no_activity) { @@ -1140,9 +1147,15 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, //(($verb === 'post') ? notice( t('File activity posted') . EOL) : notice( t('File activity dropped') . EOL)); return; - } +/** + * @brief Create file activity object + * + * @param int $channel_id + * @param string $hash + * @param string $cloudpath + */ function get_file_activity_object($channel_id, $hash, $cloudpath) { $x = q("SELECT creator, filename, filetype, filesize, revision, folder, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid FROM attach WHERE uid = %d AND hash = '%s' LIMIT 1", @@ -1180,10 +1193,19 @@ function get_file_activity_object($channel_id, $hash, $cloudpath) { 'deny_cid' => $x[0]['deny_cid'], 'deny_gid' => $x[0]['deny_gid'] ); - return $object; + return $object; } +/** + * @brief Returns array of channels which have recursive permission for a file + * + * @param $arr_allow_cid + * @param $arr_allow_gid + * @param $arr_deny_cid + * @param $arr_deny_gid + * @param $folder_hash + */ function recursive_activity_recipients($arr_allow_cid, $arr_allow_gid, $arr_deny_cid, $arr_deny_gid, $folder_hash) { $ret = array(); @@ -1295,6 +1317,12 @@ function recursive_activity_recipients($arr_allow_cid, $arr_allow_gid, $arr_deny return $ret; } + +/** + * @brief Returns members of a group + * + * @param $group_id + */ function in_group($group_id) { $group_members = array(); diff --git a/include/auth.php b/include/auth.php index 6c9c33861..643894e32 100644 --- a/include/auth.php +++ b/include/auth.php @@ -29,7 +29,8 @@ function nuke_session() { unset($_SESSION['mobile_theme']); unset($_SESSION['show_mobile']); unset($_SESSION['page_flags']); - unset($_SESSION['submanage']); + unset($_SESSION['delegate']); + unset($_SESSION['delegate_channel']); unset($_SESSION['my_url']); unset($_SESSION['my_address']); unset($_SESSION['addr']); diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index fa3aa3aa2..118e78639 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -1,4 +1,8 @@ -<?php /** @file */ +<?php +/** + * @file include/bb2diaspora.php + * @brief Some functions for BB conversions for Diaspora protocol. + */ require_once("include/oembed.php"); require_once("include/event.php"); @@ -107,14 +111,19 @@ function diaspora_mention_callback($matches) { } - -// we don't want to support a bbcode specific markdown interpreter -// and the markdown library we have is pretty good, but provides HTML output. -// So we'll use that to convert to HTML, then convert the HTML back to bbcode, -// and then clean up a few Diaspora specific constructs. - -function diaspora2bb($s,$use_zrl = false) { - +/** + * @brief + * + * We don't want to support a bbcode specific markdown interpreter + * and the markdown library we have is pretty good, but provides HTML output. + * So we'll use that to convert to HTML, then convert the HTML back to bbcode, + * and then clean up a few Diaspora specific constructs. + * + * @param string $s + * @param boolean $use_zrl default false + * @return string + */ +function diaspora2bb($s, $use_zrl = false) { $s = str_replace("
","\r",$s); $s = str_replace("
\n>","",$s); @@ -150,7 +159,6 @@ function diaspora2bb($s,$use_zrl = false) { } else { $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3]$2$3[/url]',$s); - } //$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); @@ -217,18 +225,33 @@ function diaspora_ol($s) { ////////////////////// // Non-Markdownify versions of "diaspora_ol" and "diaspora_ul" ////////////////////// +/** + * @brief + * + * Replace "[\\*]" followed by any number (including zero) of + * spaces by "* " to match Diaspora's list format. + * + * @param string $s + * @return string + */ function diaspora_ul($s) { - // Replace "[\\*]" followed by any number (including zero) of - // spaces by "* " to match Diaspora's list format return preg_replace("/\[\\\\\*\]( *)/", "* ", $s[1]); } +/** + * @brief + * + * A hack: Diaspora will create a properly-numbered ordered list even + * if you use '1.' for each element of the list, like: + * \code + * 1. First element + * 1. Second element + * 1. Third element + * \endcode + * @param string $s + * @return string + */ function diaspora_ol($s) { - // A hack: Diaspora will create a properly-numbered ordered list even - // if you use '1.' for each element of the list, like: - // 1. First element - // 1. Second element - // 1. Third element return preg_replace("/\[\\\\\*\]( *)/", "1. ", $s[1]); } @@ -240,8 +263,8 @@ function bb2dmention_callback($match) { if($r) return '@{' . $match[3] . ' ; ' . $r[0]['xchan_addr'] . '}'; - return '@' . $match[3]; + return '@' . $match[3]; } @@ -272,14 +295,15 @@ function bb2diaspora_itemwallwall(&$item) { } // $item['author'] might cause a surprise further down the line if it wasn't expected to be here. - - if(! $author_exists) - $unset($item['author']); + if(! $author_exists) + unset($item['author']); } -function bb2diaspora_itembody($item,$force_update = false) { +function bb2diaspora_itembody($item, $force_update = false) { + + $matches = array(); if(($item['diaspora_meta']) && (! $force_update)) { $diaspora_meta = json_decode($item['diaspora_meta'],true); @@ -344,8 +368,8 @@ function bb2diaspora_itembody($item,$force_update = false) { $body = "## " . $title . "\n\n" . $body; if($item['attach']) { - $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER); - if(cnt) { + $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism', $item['attach'], $matches, PREG_SET_ORDER); + if($cnt) { $body .= "\n" . t('Attachments:') . "\n"; foreach($matches as $mtch) { $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n"; @@ -356,7 +380,6 @@ function bb2diaspora_itembody($item,$force_update = false) { // logger('bb2diaspora_itembody : ' . $body, LOGGER_DATA); return html_entity_decode($body); - } function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { @@ -365,7 +388,7 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // The bbcode parser now handles youtube-links (and the other stuff) correctly. // Additionally the html code is now fixed so that lists are now working. - /** + /* * Transform #tags, strip off the [url] and replace spaces with underscore */ $Text = preg_replace_callback('/#\[([zu])rl\=(\w+.*?)\](\w+.*?)\[\/[(zu)]rl\]/i', create_function('$match', @@ -451,5 +474,6 @@ function format_event_diaspora($ev) { . "\n"; $o .= "\n"; + return $o; } diff --git a/include/comanche.php b/include/comanche.php index 1ddabb693..62bfd0ddc 100644 --- a/include/comanche.php +++ b/include/comanche.php @@ -79,28 +79,29 @@ function comanche_parser(&$a, $s, $pass = 0) { if($cnt) $a->layout['theme'] = trim($matches[1]); - } - else { - $cnt = preg_match_all("/\[region=(.*?)\](.*?)\[\/region\]/ism", $s, $matches, PREG_SET_ORDER); + $cnt = preg_match_all("/\[webpage\](.*?)\[\/webpage\]/ism", $s, $matches, PREG_SET_ORDER); if($cnt) { + // only the last webpage definition is used if there is more than one foreach($matches as $mtch) { - $a->layout['region_' . $mtch[1]] = comanche_region($a,$mtch[2]); + $a->layout['webpage'] = comanche_webpage($a,$mtch[1]); } } - $cnt = preg_match_all("/\[webpage\](.*?)\[\/webpage\]/ism", $s, $matches, PREG_SET_ORDER); + } + else { + $cnt = preg_match_all("/\[region=(.*?)\](.*?)\[\/region\]/ism", $s, $matches, PREG_SET_ORDER); if($cnt) { - // only the last webpage definition is used if there is more than one foreach($matches as $mtch) { - $a->layout['webpage'] = comanche_webpage($a,$mtch[1]); + $a->layout['region_' . $mtch[1]] = comanche_region($a,$mtch[2]); } } + } } -function comanche_menu($name,$class = '') { +function comanche_menu($name, $class = '') { $channel_id = comanche_get_channel_id(); if($channel_id) { $m = menu_fetch($name,$channel_id, get_observer_hash()); @@ -110,20 +111,23 @@ function comanche_menu($name,$class = '') { function comanche_replace_region($match) { $a = get_app(); - if(array_key_exists($match[1], $a->page)) { + if (array_key_exists($match[1], $a->page)) { return $a->page[$match[1]]; } } /** - * @function comanche_get_channel_id() - * Returns the channel_id of the profile owner of the page, or the local_channel if there is no profile owner. - * Otherwise returns 0 - */ - + * @brief Returns the channel_id of the profile owner of the page. + * + * Returns the channel_id of the profile owner of the page, or the local_channel + * if there is no profile owner. Otherwise returns 0. + * + * @return channel_id + */ function comanche_get_channel_id() { $channel_id = ((is_array(get_app()->profile)) ? get_app()->profile['profile_uid'] : 0); - if((! $channel_id) && (local_channel())) + + if ((! $channel_id) && (local_channel())) $channel_id = local_channel(); return $channel_id; @@ -172,23 +176,26 @@ function comanche_webpage(&$a,$s) { } -// Widgets will have to get any operational arguments from the session, -// the global app environment, or config storage until we implement argument passing - - +/** + * Widgets will have to get any operational arguments from the session, the + * global app environment, or config storage until we implement argument passing + * + * @param string $name + * @param string $text + */ function comanche_widget($name, $text) { $vars = array(); $matches = array(); $cnt = preg_match_all("/\[var=(.*?)\](.*?)\[\/var\]/ism", $text, $matches, PREG_SET_ORDER); - if($cnt) { - foreach($matches as $mtch) { + if ($cnt) { + foreach ($matches as $mtch) { $vars[$mtch[1]] = $mtch[2]; } } $func = 'widget_' . trim($name); - if(function_exists($func)) + if (function_exists($func)) return $func($vars); } diff --git a/include/config.php b/include/config.php index b459e2c7d..c94d25eb8 100644 --- a/include/config.php +++ b/include/config.php @@ -3,8 +3,7 @@ * @file include/config.php * @brief Arbitrary configuration storage. * - * Note: - * Please do not store booleans - convert to 0/1 integer values + * @note Please do not store booleans - convert to 0/1 integer values. * The get_?config() functions return boolean false for keys that are unset, * and this could lead to subtle bugs. * @@ -18,19 +17,20 @@ * - <b>pconfig</b> is used for channel specific configurations and takes a * <i>channel_id</i> as identifier. It stores for example which features are * enabled per channel. The storage is of size MEDIUMTEXT. - * @code $var = get_pconfig(local_channel(), 'category', 'key');@endcode + * @code{.php} $var = get_pconfig(local_channel(), 'category', 'key');@endcode * - <b>xconfig</b> is the same as pconfig, except that it uses <i>xchan</i> as * an identifier. This is for example for people who do not have a local account. * The storage is of size MEDIUMTEXT. - * @code $observer = $a->get_observer_hash(); + * @code{.php} + * $observer = $a->get_observer_hash(); * if ($observer) { * $var = get_xconfig($observer, 'category', 'key'); * }@endcode * * - get_config() and set_config() can also be done through the command line tool - * @ref util/config + * @ref util/config.md "util/config" * - get_pconfig() and set_pconfig() can also be done through the command line tool - * @ref util/pconfig and takes a channel_id as first argument. + * @ref util/pconfig.md "util/pconfig" and takes a channel_id as first argument. * */ @@ -123,7 +123,7 @@ function get_config_from_storage($family, $key) { * * Stores a config value ($value) in the category ($family) under the key ($key). * - * Please do not store booleans - convert to 0/1 integer values! + * @note Please do not store booleans - convert to 0/1 integer values! * * @param string $family * The category of the configuration value @@ -272,14 +272,16 @@ function get_pconfig($uid, $family, $key, $instore = false) { * Stores a config value ($value) in the category ($family) under the key ($key) * for the channel_id $uid. * - * Please do not store booleans - convert to 0/1 integer values! + * @note Please do not store booleans - convert to 0/1 integer values! * * @param string $uid * The channel_id * @param string $family * The category of the configuration value * @param string $key - * The configuration key to query + * The configuration key to set + * @param string $value + * The value to store * @return mixed Stored $value or false */ function set_pconfig($uid, $family, $key, $value) { @@ -315,6 +317,7 @@ function set_pconfig($uid, $family, $key, $value) { ); if($ret) return $value; + return $ret; } @@ -339,6 +342,7 @@ function set_pconfig($uid, $family, $key, $value) { if($ret) return $value; + return $ret; } @@ -360,13 +364,14 @@ function del_pconfig($uid, $family, $key) { global $a; $ret = false; - if(x($a->config[$uid][$family], $key)) + if (x($a->config[$uid][$family], $key)) unset($a->config[$uid][$family][$key]); $ret = q("DELETE FROM pconfig WHERE uid = %d AND cat = '%s' AND k = '%s'", intval($uid), dbesc($family), dbesc($key) ); + return $ret; } @@ -448,7 +453,7 @@ function get_xconfig($xchan, $family, $key) { * Stores a config value ($value) in the category ($family) under the key ($key) * for the observer's $xchan hash. * - * Please do not store booleans - convert to 0/1 integer values! + * @note Please do not store booleans - convert to 0/1 integer values! * * @param string $xchan * The observer's hash @@ -456,6 +461,8 @@ function get_xconfig($xchan, $family, $key) { * The category of the configuration value * @param string $key * The configuration key to set + * @param string $value + * The value to store * @return mixed Stored $value or false */ function set_xconfig($xchan, $family, $key, $value) { diff --git a/include/conversation.php b/include/conversation.php index 8a834f339..042d01b3e 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1044,7 +1044,6 @@ function builtin_activity_puller($item, &$conv_responses) { return; } } - } @@ -1053,7 +1052,7 @@ function builtin_activity_puller($item, &$conv_responses) { * * @param int $cnt number of people who like/dislike the item * @param array $arr array of pre-linked names of likers/dislikers - * @param string $typ eone of 'like, 'dislike' + * @param string $type one of 'like, 'dislike' * @param int $id item id * @return string formatted text */ @@ -1146,7 +1145,6 @@ function status_editor($a, $x, $popup = false) { '$expireswhen' => t('Expires YYYY-MM-DD HH:MM') )); - $tpl = get_markup_template('jot.tpl'); $jotplugins = ''; @@ -1158,6 +1156,8 @@ function status_editor($a, $x, $popup = false) { $preview = ''; $defexpire = ((($z = get_pconfig($x['profile_uid'], 'system', 'default_post_expire')) && (! $webpage)) ? $z : ''); + if($defexpire) + $defexpire = datetime_convert('UTC',date_default_timezone_get(),$defexpire,'Y-m-d H:i'); $cipher = get_pconfig($x['profile_uid'], 'system', 'default_cipher'); if(! $cipher) @@ -1459,8 +1459,8 @@ function network_tabs() { if ($no_active=='active' && x($_GET,'order')) { switch($_GET['order']){ - case 'post': $postord_active = 'active'; $no_active=''; break; - case 'comment' : $all_active = 'active'; $no_active=''; break; + case 'post': $postord_active = 'active'; $no_active=''; break; + case 'comment' : $all_active = 'active'; $no_active=''; break; } } diff --git a/include/crypto.php b/include/crypto.php index ab083cfaa..a4ce2cf98 100644 --- a/include/crypto.php +++ b/include/crypto.php @@ -300,7 +300,6 @@ function salmon_key($pubkey) { // used in Friendica 'RINO'. This function is messy and should be retired. -if(! function_exists('aes_decrypt')) { function aes_decrypt($val,$ky) { $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; @@ -310,10 +309,10 @@ function aes_decrypt($val,$ky) $enc = MCRYPT_RIJNDAEL_128; $dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) ); return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null)); -}} +} + -if(! function_exists('aes_encrypt')) { function aes_encrypt($val,$ky) { $key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; @@ -323,6 +322,14 @@ function aes_encrypt($val,$ky) $enc=MCRYPT_RIJNDAEL_128; $val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16))); return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM)); -}} +} +function z_obscure($s) { + return json_encode(crypto_encapsulate($s,get_config('system','pubkey'))); +} +function z_unobscure($s) { + if(strpos($s,"{\"") !== 0) + return $s; + return crypto_unencapsulate(json_decode($s,true),get_config('system','prvkey')); +} diff --git a/include/datetime.php b/include/datetime.php index a387d84c4..b0167edb2 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -1,54 +1,71 @@ -<?php /** @file */ - -// two-level sort for timezones. +<?php +/** + * @file include/datetime.php + * @brief Some functions for date and time related tasks. + */ +/** + * @brief Two-level sort for timezones. + * + * @param string $a + * @param string $b + * @return number + */ function timezone_cmp($a, $b) { if(strstr($a,'/') && strstr($b,'/')) { if ( t($a) == t($b)) return 0; return ( t($a) < t($b)) ? -1 : 1; } - if(strstr($a,'/')) return -1; - if(strstr($b,'/')) return 1; + if (strstr($a,'/')) return -1; + if (strstr($b,'/')) return 1; if ( t($a) == t($b)) return 0; + return ( t($a) < t($b)) ? -1 : 1; } -// Return timezones grouped (primarily) by continent +/** + * @brief Return timezones grouped (primarily) by continent. + * + * @return array + */ function get_timezones( ){ $timezone_identifiers = DateTimeZone::listIdentifiers(); usort($timezone_identifiers, 'timezone_cmp'); $continent = ''; $continents = array(); - foreach($timezone_identifiers as $value) { + foreach ($timezone_identifiers as $value) { $ex = explode("/", $value); - if(count($ex) > 1) { + if (count($ex) > 1) { $continent = t($ex[0]); - if(count($ex) > 2) - $city = substr($value,strpos($value,'/')+1); + if (count($ex) > 2) + $city = substr($value, strpos($value, '/')+1); else $city = $ex[1]; - } - else { + } else { $city = $ex[0]; $continent = t('Miscellaneous'); } $city = str_replace('_', ' ', t($city)); - if(!x($continents,$ex[0])) $continents[$ex[0]] = array(); + if (!x($continents, $ex[0])) $continents[$ex[0]] = array(); $continents[$continent][$value] = $city; } + return $continents; } -// General purpose date parse/convert function. -// $from = source timezone -// $to = dest timezone -// $s = some parseable date/time string -// $fmt = output format - - +/** + * @brief General purpose date parse/convert function. + * + * @param string $from source timezone + * @param string $to dest timezone + * @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 + */ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") { // Defaults to UTC if nothing is set, but throws an exception if set to empty string. @@ -68,44 +85,46 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d if(substr($s,0,10) == '0000-00-00') { $d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC')); - return str_replace('1','0',$d->format($fmt)); + return str_replace('1', '0', $d->format($fmt)); } try { $from_obj = new DateTimeZone($from); - } - catch(Exception $e) { + } catch(Exception $e) { $from_obj = new DateTimeZone('UTC'); } try { $d = new DateTime($s, $from_obj); - } - catch(Exception $e) { + } catch(Exception $e) { logger('datetime_convert: exception: ' . $e->getMessage()); $d = new DateTime('now', $from_obj); } try { $to_obj = new DateTimeZone($to); - } - catch(Exception $e) { + } catch(Exception $e) { $to_obj = new DateTimeZone('UTC'); } $d->setTimeZone($to_obj); + return($d->format($fmt)); } -// wrapper for date selector, tailored for use in birthday fields - +/** + * @brief Wrapper for date selector, tailored for use in birthday fields. + * + * @param string $dob Date of Birth + * @return string + */ function dob($dob) { - list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d'); - $f = get_config('system','birthday_input_format'); - if(! $f) + list($year, $month, $day) = sscanf($dob, '%4d-%2d-%2d'); + $f = get_config('system', 'birthday_input_format'); + if (! $f) $f = 'ymd'; - if($dob === '0000-00-00') + if ($dob === '0000-00-00') $value = ''; else $value = (($year) ? datetime_convert('UTC','UTC',$dob,'Y-m-d') : datetime_convert('UTC','UTC',$dob,'m-d')); @@ -120,7 +139,6 @@ function dob($dob) { return $o; } - /** * returns a date selector * @param $format @@ -135,7 +153,7 @@ function dob($dob) { * id and name of datetimepicker (defaults to "datetimepicker") */ function datesel($format, $min, $max, $default, $id = 'datepicker') { - return datetimesel($format,$min,$max,$default,$id,true,false, '',''); + return datetimesel($format, $min, $max, $default, $id,true, false, '', ''); } /** @@ -154,7 +172,8 @@ function timesel($format, $h, $m, $id='timepicker') { } /** - * returns a datetime selector + * @brief Returns a datetime selector. + * * @param $format * format string, e.g. 'ymd' or 'mdy'. Not currently supported * @param $min @@ -163,21 +182,25 @@ function timesel($format, $h, $m, $id='timepicker') { * unix timestap of maximum date * @param $default * unix timestamp of default date - * @param $id + * @param string $id * id and name of datetimepicker (defaults to "datetimepicker") - * @param $pickdate + * @param boolean $pickdate * true to show date picker (default) - * @param $picktime + * @param boolean $picktime * true to show time picker (default) * @param $minfrom * set minimum date from picker with id $minfrom (none by default) * @param $maxfrom * set maximum date from picker with id $maxfrom (none by default) + * @param boolean $required default false + * @return string Parsed HTML output. + * + * @todo Once browser support is better this could probably be replaced with + * native HTML5 date picker. */ -function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '',$required = false) { - // Once browser support is better this could probably be replaced with native HTML5 date picker - $o = ''; +function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false) { + $o = ''; $dateformat = ''; if($pickdate) $dateformat .= 'Y-m-d'; @@ -186,7 +209,7 @@ function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pic $minjs = $min ? ",minDate: new Date({$min->getTimestamp()}*1000), yearStart: " . $min->format('Y') : ''; $maxjs = $max ? ",maxDate: new Date({$max->getTimestamp()}*1000), yearEnd: " . $max->format('Y') : ''; - + $input_text = $default ? 'value="' . date($dateformat, $default->getTimestamp()) . '"' : ''; $defaultdatejs = $default ? ",defaultDate: new Date({$default->getTimestamp()}*1000)" : ''; @@ -212,31 +235,39 @@ function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pic $o .= (($required) ? '<span class="required" title="' . t('Required') . '" >*</span>' : ''); $o .= '</div>'; $o .= "<script type='text/javascript'>\$(function () {var picker = \$('#$id').datetimepicker({step:5,format:'$dateformat' $minjs $maxjs $pickers $defaultdatejs}); $extra_js})</script>"; + return $o; } -// implements "3 seconds ago" etc. -// based on $posted_date, (UTC). -// Results relative to current timezone -// Limited to range of timestamps - - -function relative_date($posted_date,$format = null) { +/** + * @brief Returns a relative date string. + * + * Implements "3 seconds ago" etc. + * Based on $posted_date, (UTC). + * Results relative to current timezone. + * Limited to range of timestamps. + * + * @param string $posted_date + * @param string $format (optional) parsed with sprintf() + * <tt>%1$d %2$s ago</tt>, e.g. 22 hours ago, 1 minute ago + * @return string with relative date + */ +function relative_date($posted_date, $format = null) { - $localtime = datetime_convert('UTC',date_default_timezone_get(),$posted_date); + $localtime = datetime_convert('UTC', date_default_timezone_get(), $posted_date); $abs = strtotime($localtime); - - if (is_null($posted_date) || $posted_date === NULL_DATE || $abs === False) { - return t('never'); + + if (is_null($posted_date) || $posted_date === NULL_DATE || $abs === false) { + return t('never'); } $etime = time() - $abs; - + if ($etime < 1) { return t('less than a second ago'); } - + $a = array( 12 * 30 * 24 * 60 * 60 => array( t('year'), t('years')), 30 * 24 * 60 * 60 => array( t('month'), t('months')), 7 * 24 * 60 * 60 => array( t('week'), t('weeks')), @@ -245,231 +276,256 @@ function relative_date($posted_date,$format = null) { 60 => array( t('minute'), t('minutes')), 1 => array( t('second'), t('seconds')) ); - + foreach ($a as $secs => $str) { $d = $etime / $secs; if ($d >= 1) { $r = round($d); - // translators - e.g. 22 hours ago, 1 minute ago - if(! $format) - $format = t('%1$d %2$s ago'); - return sprintf( $format,$r, (($r == 1) ? $str[0] : $str[1])); - } - } -} - + if (! $format) + $format = t('%1$d %2$s ago', 'e.g. 22 hours ago, 1 minute ago'); + return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1])); + } + } +} -// Returns age in years, given a date of birth, -// the timezone of the person whose date of birth is provided, -// and the timezone of the person viewing the result. -// Why? Bear with me. Let's say I live in Mittagong, Australia, and my -// birthday is on New Year's. You live in San Bruno, California. -// When exactly are you going to see my age increase? -// A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start -// celebrating and become a year older. If you wish me happy birthday -// on January 1 (San Bruno time), you'll be a day late. - -function age($dob,$owner_tz = '',$viewer_tz = '') { - if(! intval($dob)) +/** + * @brief Returns timezone correct age in years. + * + * Returns the age in years, given a date of birth, the timezone of the person + * whose date of birth is provided, and the timezone of the person viewing the + * result. + * + * Why? Bear with me. Let's say I live in Mittagong, Australia, and my birthday + * is on New Year's. You live in San Bruno, California. + * When exactly are you going to see my age increase? + * + * A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start celebrating + * and become a year older. If you wish me happy birthday on January 1 + * (San Bruno time), you'll be a day late. + * + * @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 number + */ +function age($dob, $owner_tz = '', $viewer_tz = '') { + if (! intval($dob)) return 0; - if(! $owner_tz) + if (! $owner_tz) $owner_tz = date_default_timezone_get(); - if(! $viewer_tz) + if (! $viewer_tz) $viewer_tz = date_default_timezone_get(); - $birthdate = datetime_convert('UTC',$owner_tz,$dob . ' 00:00:00+00:00','Y-m-d'); - list($year,$month,$day) = explode("-",$birthdate); - $year_diff = datetime_convert('UTC',$viewer_tz,'now','Y') - $year; - $curr_month = datetime_convert('UTC',$viewer_tz,'now','m'); - $curr_day = datetime_convert('UTC',$viewer_tz,'now','d'); + $birthdate = datetime_convert('UTC', $owner_tz, $dob . ' 00:00:00+00:00','Y-m-d'); + list($year,$month,$day) = explode("-", $birthdate); + $year_diff = datetime_convert('UTC', $viewer_tz, 'now', 'Y') - $year; + $curr_month = datetime_convert('UTC', $viewer_tz, 'now', 'm'); + $curr_day = datetime_convert('UTC', $viewer_tz, 'now', 'd'); - if(($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day))) + if (($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day))) $year_diff--; + return $year_diff; } +/** + * @brief Get days of a month in a given year. + * + * Returns number of days in the month of the given year. + * $m = 1 is 'January' to match human usage. + * + * @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) { + $dim = array( 0, + 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 + ); + if ($m != 2) + return $dim[$m]; -// Get days in month -// get_dim($year, $month); -// returns number of days. -// $month[1] = 'January'; -// to match human usage. - - -function get_dim($y,$m) { + if (((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0)) + return 29; - $dim = array( 0, - 31, 28, 31, 30, 31, 30, - 31, 31, 30, 31, 30, 31); - - if($m != 2) - return $dim[$m]; - if(((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0)) - return 29; - return $dim[2]; + return $dim[2]; } +/** + * @brief Returns the first day in month for a given month, year. + * + * Months start at 1. + * + * @param int $y Year + * @param int $m Month (1=January, 12=December) + * @return day 0 = Sunday through 6 = Saturday + */ +function get_first_dim($y, $m) { + $d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m)); -// Returns the first day in month for a given month, year -// get_first_dim($year,$month) -// returns 0 = Sunday through 6 = Saturday -// Months start at 1. - - -function get_first_dim($y,$m) { - $d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m)); - return datetime_convert('UTC','UTC',$d,'w'); + return datetime_convert('UTC', 'UTC', $d, 'w'); } -// output a calendar for the given month, year. -// if $links are provided (array), e.g. $links[12] => 'http://mylink' , -// date 12 will be linked appropriately. Today's date is also noted by -// altering td class. -// Months count from 1. - - -// TODO: provide (prev,next) links, define class variations for different size calendars - -function cal($y = 0,$m = 0, $links = false, $class='') { - +/** + * @brief Output a calendar for the given month, year. + * + * If $links are provided (array), e.g. $links[12] => 'http://mylink' , + * date 12 will be linked appropriately. Today's date is also noted by + * altering td class. + * Months count from 1. + * + * @param number $y Year + * @param number $m Month + * @param string $links (default false) + * @param string $class + * @return string + * + * @todo provide (prev,next) links, define class variations for different size calendars + */ +function cal($y = 0, $m = 0, $links = false, $class='') { // month table - start at 1 to match human usage. $mtab = array(' ', - 'January','February','March', - 'April','May','June', - 'July','August','September', - 'October','November','December' - ); + 'January','February','March', + 'April','May','June', + 'July','August','September', + 'October','November','December' + ); $thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y'); $thismonth = datetime_convert('UTC',date_default_timezone_get(),'now','m'); - if(! $y) + if (! $y) $y = $thisyear; - if(! $m) + if (! $m) $m = intval($thismonth); - $dn = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); - $f = get_first_dim($y,$m); - $l = get_dim($y,$m); - $d = 1; - $dow = 0; - $started = false; + $dn = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); + $f = get_first_dim($y, $m); + $l = get_dim($y, $m); + $d = 1; + $dow = 0; + $started = false; - if(($y == $thisyear) && ($m == $thismonth)) - $tddate = intval(datetime_convert('UTC',date_default_timezone_get(),'now','j')); + if (($y == $thisyear) && ($m == $thismonth)) + $tddate = intval(datetime_convert('UTC',date_default_timezone_get(),'now','j')); $str_month = day_translate($mtab[$m]); - $o = '<table class="calendar' . $class . '">'; - $o .= "<caption>$str_month $y</caption><tr>"; - for($a = 0; $a < 7; $a ++) - $o .= '<th>' . mb_substr(day_translate($dn[$a]),0,3,'UTF-8') . '</th>'; - $o .= '</tr><tr>'; - - while($d <= $l) { - if(($dow == $f) && (! $started)) - $started = true; - $today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : ''); - $o .= "<td $today>"; - $day = str_replace(' ',' ',sprintf('%2.2d', $d)); - if($started) { - if(is_array($links) && isset($links[$d])) - $o .= "<a href=\"{$links[$d]}\">$day</a>"; - else - $o .= $day; - $d ++; - } - else - $o .= ' '; - $o .= '</td>'; - $dow ++; - if(($dow == 7) && ($d <= $l)) { - $dow = 0; - $o .= '</tr><tr>'; - } - } - if($dow) - for($a = $dow; $a < 7; $a ++) - $o .= '<td> </td>'; - $o .= '</tr></table>'."\r\n"; - - return $o; -} + $o = '<table class="calendar' . $class . '">'; + $o .= "<caption>$str_month $y</caption><tr>"; + for ($a = 0; $a < 7; $a ++) + $o .= '<th>' . mb_substr(day_translate($dn[$a]),0,3,'UTF-8') . '</th>'; + + $o .= '</tr><tr>'; + + while ($d <= $l) { + if (($dow == $f) && (! $started)) + $started = true; + + $today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : ''); + $o .= "<td $today>"; + $day = str_replace(' ',' ',sprintf('%2.2d', $d)); + if ($started) { + if (is_array($links) && isset($links[$d])) + $o .= "<a href=\"{$links[$d]}\">$day</a>"; + else + $o .= $day; + + $d ++; + } else { + $o .= ' '; + } + + $o .= '</td>'; + $dow ++; + if (($dow == 7) && ($d <= $l)) { + $dow = 0; + $o .= '</tr><tr>'; + } + } + if ($dow) + for ($a = $dow; $a < 7; $a ++) + $o .= '<td> </td>'; + + $o .= '</tr></table>'."\r\n"; + return $o; +} /** - * Return the next birthday, converted from the owner's timezone to UTC. + * @brief Return the next birthday, converted from the owner's timezone to UTC. + * * This makes it globally portable. * If the provided birthday lacks a month and or day, return an empty string. * A missing year is acceptable. + * + * @param string $dob Date of Birth + * @param string $tz Timezone + * @param string $format + * @return string */ +function z_birthday($dob, $tz, $format="Y-m-d H:i:s") { - -function z_birthday($dob,$tz,$format="Y-m-d H:i:s") { - - if(! strlen($tz)) + if (! strlen($tz)) $tz = 'UTC'; $birthday = ''; $tmp_dob = substr($dob,5); $tmp_d = substr($dob,8); - if(intval($tmp_dob) && intval($tmp_d)) { + if (intval($tmp_dob) && intval($tmp_d)) { $y = datetime_convert($tz,$tz,'now','Y'); $bd = $y . '-' . $tmp_dob . ' 00:00'; $t_dob = strtotime($bd); $now = strtotime(datetime_convert($tz,$tz,'now')); - if($t_dob < $now) + if ($t_dob < $now) $bd = $y + 1 . '-' . $tmp_dob . ' 00:00'; + $birthday = datetime_convert($tz,'UTC',$bd,$format); } return $birthday; - } /** + * @brief Create a birthday event for any connections with a birthday in the next 1-2 weeks. * - * Create a birthday event for any connections with a birthday in the next 1-2 weeks. * Update the year so that we don't create another event until next year. - * */ - - function update_birthdays() { require_once('include/event.php'); require_once('include/permissions.php'); - $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash + $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash WHERE abook_dob > %s + interval %s and abook_dob < %s + interval %s", db_utcnow(), db_quoteinterval('7 day'), db_utcnow(), db_quoteinterval('14 day') - ); - if($r) { - foreach($r as $rr) { - - if(! perm_is_allowed($rr['abook_channel'],$rr['xchan_hash'],'send_stream')) + ); + if ($r) { + foreach ($r as $rr) { + if (! perm_is_allowed($rr['abook_channel'], $rr['xchan_hash'], 'send_stream')) continue; $ev = array(); $ev['uid'] = $rr['abook_channel']; $ev['account'] = $rr['abook_account']; $ev['event_xchan'] = $rr['xchan_hash']; - $ev['start'] = datetime_convert('UTC','UTC', $rr['abook_dob']); - $ev['finish'] = datetime_convert('UTC','UTC', $rr['abook_dob'] . ' + 1 day '); + $ev['start'] = datetime_convert('UTC', 'UTC', $rr['abook_dob']); + $ev['finish'] = datetime_convert('UTC', 'UTC', $rr['abook_dob'] . ' + 1 day '); $ev['adjust'] = 1; - $ev['summary'] = sprintf( t('%1$s\'s birthday'), $rr['xchan_name']); - $ev['description'] = sprintf( t('Happy Birthday %1$s'), + $ev['summary'] = sprintf( t('%1$s\'s birthday'), $rr['xchan_name']); + $ev['description'] = sprintf( t('Happy Birthday %1$s'), '[zrl=' . $rr['xchan_url'] . ']' . $rr['xchan_name'] . '[/zrl]') ; $ev['type'] = 'birthday'; - + $z = event_store_event($ev); - if($z) { - $item_id = event_store_item($ev,$z); + if ($z) { + $item_id = event_store_item($ev, $z); q("update abook set abook_dob = '%s' where abook_id = %d", - dbesc(intval($rr['abook_dob']) + 1 . substr($rr['abook_dob'],4)), + dbesc(intval($rr['abook_dob']) + 1 . substr($rr['abook_dob'], 4)), intval($rr['abook_id']) ); } diff --git a/include/diaspora.php b/include/diaspora.php index 1e0e48a86..75eac7681 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -698,6 +698,57 @@ function diaspora_request($importer,$xml) { return; } + +//FIXME +/* + if(feature_enabled($channel['channel_id'],'premium_channel')) { + $myaddr = $importer['channel_address'] . '@' . get_app()->get_hostname(); + $cnv = random_string(); + $mid = random_string(); + + $msg = t('You have started sharing with a Redmatrix premium channel.'); + $msg .= t('Redmatrix premium channels are not available for sharing with Diaspora members. This sharing request has been blocked.') . "\r"; + $msg .= t('Please do not reply to this message, as this channel is not sharing with you and any reply will not be seen by the recipient.') . "\r"; + + $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C'); + $signed_text = $mid . ';' . $cnv . ';' . $msg . ';' + . $created . ';' . $myaddr . ';' . $cnv; + + $sig = base64_encode(rsa_sign($signed_text,$importer['channel_prvkey'],'sha256')); + + $conv = array( + 'guid' => xmlify($cnv), + 'subject' => xmlify(t('Sharing request failed.')), + 'created_at' => xmlify($created), + 'diaspora_handle' => xmlify($myaddr), + 'participant_handles' => xmlify($myaddr . ';' . $sender_handle) + ); + + $msg = array( + 'guid' => xmlify($mid), + 'parent_guid' => xmlify($cnv), + 'parent_author_signature' => xmlify($sig), + 'author_signature' => xmlify($sig), + 'text' => xmlify($msg), + 'created_at' => xmlify($created), + 'diaspora_handle' => xmlify($myaddr), + 'conversation_guid' => xmlify($cnv) + ); + + $conv['messages'] = array($msg); + $tpl = get_markup_template('diaspora_conversation.tpl'); + $xmsg = replace_macros($tpl, array('$conv' => $conv)); + + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($xmsg,$importer,$ret,$importer['channel_prvkey'],$ret['xchan_pubkey'],false))); + + diaspora_transmit($importer,$ret,$slap,false); + return; + } + +*/ +// End FIXME + + $role = get_pconfig($channel['channel_id'],'system','permissions_role'); if($role) { $x = get_role_perms($role); @@ -843,7 +894,7 @@ function diaspora_post($importer,$xml,$msg) { // Look for tags and linkify them - $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $results = linkify_tags(get_app(), $body, $importer['channel_id'], true); $datarray['term'] = array(); @@ -1062,7 +1113,7 @@ function diaspora_reshare($importer,$xml,$msg) { $datarray = array(); // Look for tags and linkify them - $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $results = linkify_tags(get_app(), $body, $importer['channel_id'], true); $datarray['term'] = array(); @@ -1397,7 +1448,7 @@ function diaspora_comment($importer,$xml,$msg) { $datarray = array(); // Look for tags and linkify them - $results = linkify_tags(get_app(), $body, $importer['channel_id']); + $results = linkify_tags(get_app(), $body, $importer['channel_id'], true); $datarray['term'] = array(); diff --git a/include/dir_fns.php b/include/dir_fns.php index 4c6c40f15..d1e26b637 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -1,14 +1,23 @@ -<?php /** @file */ +<?php +/** + * @file include/dir_fns.php + */ require_once('include/permissions.php'); +/** + * @brief + * + * @param int $dirmode + * @return array + */ function find_upstream_directory($dirmode) { global $DIRECTORY_FALLBACK_SERVERS; $preferred = get_config('system','directory_server'); - if(! $preferred) { + if (! $preferred) { - /** + /* * No directory has yet been set. For most sites, pick one at random * from our list of directory servers. However, if we're a directory * server ourself, point at the local instance @@ -18,41 +27,40 @@ function find_upstream_directory($dirmode) { */ $dirmode = intval(get_config('system','directory_mode')); - if($dirmode == DIRECTORY_MODE_NORMAL) { + if ($dirmode == DIRECTORY_MODE_NORMAL) { $toss = mt_rand(0,count($DIRECTORY_FALLBACK_SERVERS)); $preferred = $DIRECTORY_FALLBACK_SERVERS[$toss]; set_config('system','directory_server',$preferred); - } - else{ + } else{ set_config('system','directory_server',z_root()); } } + return array('url' => $preferred); } +/** + * Directories may come and go over time. We will need to check that our + * directory server is still valid occasionally, and reset to something that + * is if our directory has gone offline for any reason + */ function check_upstream_directory() { - /** - * Directories may come and go over time. We will need to check that our - * directory server is still valid occasionally, and reset to something that - * is if our directory has gone offline for any reason - */ - - $directory = get_config('system','directory_server'); + $directory = get_config('system', 'directory_server'); // it's possible there is no directory server configured and the local hub is being used. // If so, default to preserving the absence of a specific server setting. - $isadir = true; + $isadir = true; - if($directory) { + if ($directory) { $h = parse_url($directory); - if($h) { + if ($h) { $x = zot_finger('[system]@' . $h['host']); - if($x['success']) { - $j = json_decode($x['body'],true); - if(array_key_exists('site',$j) && array_key_exists('directory_mode',$j['site'])) { - if($j['site']['directory_mode'] === 'normal') { + if ($x['success']) { + $j = json_decode($x['body'], true); + if (array_key_exists('site', $j) && array_key_exists('directory_mode', $j['site'])) { + if ($j['site']['directory_mode'] === 'normal') { $isadir = false; } } @@ -60,9 +68,8 @@ function check_upstream_directory() { } } - if(! $isadir) - set_config('system','directory_server',''); - return; + if (! $isadir) + set_config('system', 'directory_server', ''); } function get_globaldir_setting($observer) { @@ -95,12 +102,8 @@ function get_safemode_setting($observer) { } /** - * @function dir_sort_links() - * Called by the directory_sort widget + * @brief Called by the directory_sort widget. */ - - - function dir_sort_links() { $safe_mode = 1; @@ -110,7 +113,7 @@ function dir_sort_links() { $safe_mode = get_safemode_setting($observer); $globaldir = get_globaldir_setting($observer); - // Build urls without order and pubforums so it's easy to tack on the changed value + // Build urls without order and pubforums so it's easy to tack on the changed value // Probably there's an easier way to do this $current_order = (($_REQUEST['order']) ? $_REQUEST['order'] : 'date'); @@ -145,38 +148,34 @@ function dir_sort_links() { '$pubforums' => array('pubforums', t('Public Forums Only'),(x($_REQUEST,'pubforums') ? $_REQUEST['pubforums'] : ''),'','',' onchange=\'window.location.href="' . $forumsurl . '&pubforums="+(this.checked ? 1 : 0)\''), '$globaldir' => array('globaldir', t('This Website Only'), 1-intval($globaldir),'','',' onchange=\'window.location.href="' . $forumsurl . '&global="+(this.checked ? 0 : 1)\''), )); + return $o; } - /** - * @function sync_directories($mode) - * - * @param int $mode; + * @brief Checks the directory mode of this hub. * * Checks the directory mode of this hub to see if it is some form of directory server. If it is, * get the directory realm of this hub. Fetch a list of all other directory servers in this realm and request * a directory sync packet. This will contain both directory updates and new ratings. Store these all in the DB. * In the case of updates, we will query each of them asynchronously from a poller task. Ratings are stored - * directly if the rater's signature matches. + * directly if the rater's signature matches. * + * @param int $dirmode; */ - - function sync_directories($dirmode) { - if($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_NORMAL) + if ($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_NORMAL) return; $realm = get_directory_realm(); - if($realm == DIRECTORY_REALM) { + if ($realm == DIRECTORY_REALM) { $r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and ( site_realm = '%s' or site_realm = '') ", intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY), dbesc(z_root()), dbesc($realm) ); - } - else { + } else { $r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and site_realm like '%s' ", intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY), dbesc(z_root()), @@ -185,9 +184,9 @@ function sync_directories($dirmode) { } // If there are no directory servers, setup the fallback master - // FIXME - what to do if we're in a different realm? + /** @FIXME What to do if we're in a different realm? */ - if((! $r) && (z_root() != DIRECTORY_FALLBACK_MASTER)) { + if ((! $r) && (z_root() != DIRECTORY_FALLBACK_MASTER)) { $r = array(); $r[] = array( 'site_url' => DIRECTORY_FALLBACK_MASTER, @@ -211,32 +210,30 @@ function sync_directories($dirmode) { intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY), dbesc(z_root()) ); - - } - if(! $r) + } + if (! $r) return; - foreach($r as $rr) { - if(! $rr['site_directory']) + foreach ($r as $rr) { + if (! $rr['site_directory']) continue; logger('sync directories: ' . $rr['site_directory']); // for brand new directory servers, only load the last couple of days. // It will take about a month for a new directory to obtain the full current repertoire of channels. - // FIXME - go back and pick up earlier ratings if this is a new directory server. These do not get refreshed. + /** @FIXME Go back and pick up earlier ratings if this is a new directory server. These do not get refreshed. */ $token = get_config('system','realm_token'); - $syncdate = (($rr['site_sync'] === NULL_DATE) ? datetime_convert('UTC','UTC','now - 2 days') : $rr['site_sync']); $x = z_fetch_url($rr['site_directory'] . '?f=&sync=' . urlencode($syncdate) . (($token) ? '&t=' . $token : '')); - if(! $x['success']) + if (! $x['success']) continue; $j = json_decode($x['body'],true); - if(!($j['transactions']) || ($j['ratings'])) + if (!($j['transactions']) || ($j['ratings'])) continue; q("update site set site_sync = '%s' where site_url = '%s'", @@ -246,17 +243,18 @@ function sync_directories($dirmode) { logger('sync_directories: ' . $rr['site_url'] . ': ' . print_r($j,true), LOGGER_DATA); - if(is_array($j['transactions']) && count($j['transactions'])) { - foreach($j['transactions'] as $t) { + if (is_array($j['transactions']) && count($j['transactions'])) { + foreach ($j['transactions'] as $t) { $r = q("select * from updates where ud_guid = '%s' limit 1", dbesc($t['transaction_id']) ); if($r) continue; + $ud_flags = 0; - if(is_array($t['flags']) && in_array('deleted',$t['flags'])) + if (is_array($t['flags']) && in_array('deleted',$t['flags'])) $ud_flags |= UPDATE_FLAGS_DELETED; - if(is_array($t['flags']) && in_array('forced',$t['flags'])) + if (is_array($t['flags']) && in_array('forced',$t['flags'])) $ud_flags |= UPDATE_FLAGS_FORCED; $z = q("insert into updates ( ud_hash, ud_guid, ud_date, ud_flags, ud_addr ) @@ -269,42 +267,41 @@ function sync_directories($dirmode) { ); } } - if(is_array($j['ratings']) && count($j['ratings'])) { - foreach($j['ratings'] as $rr) { + if (is_array($j['ratings']) && count($j['ratings'])) { + foreach ($j['ratings'] as $rr) { $x = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1", dbesc($rr['channel']), dbesc($rr['target']) ); - if($x && $x[0]['xlink_updated'] >= $rr['edited']) + if ($x && $x[0]['xlink_updated'] >= $rr['edited']) continue; // Ratings are signed by the rater. We need to verify before we can accept it. - // TODO - queue or defer if the xchan is not yet present on our site + /** @TODO Queue or defer if the xchan is not yet present on our site */ $y = q("select xchan_pubkey from xchan where xchan_hash = '%s' limit 1", dbesc($rr['channel']) ); - if(! $y) { + if (! $y) { logger('key unavailable on this site for ' . $rr['channel']); continue; } - if(! rsa_verify($rr['target'] . '.' . $rr['rating'] . '.' . $rr['rating_text'], base64url_decode($rr['signature']),$y[0]['xchan_pubkey'])) { - logger('failed to verify rating'); + if (! rsa_verify($rr['target'] . '.' . $rr['rating'] . '.' . $rr['rating_text'], base64url_decode($rr['signature']),$y[0]['xchan_pubkey'])) { + logger('failed to verify rating'); continue; } - if($x) { + if ($x) { $z = q("update xlink set xlink_rating = %d, xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s' where xlink_id = %d", intval($rr['rating']), dbesc($rr['rating_text']), dbesc($rr['signature']), dbesc(datetime_convert()), intval($x[0]['xlink_id']) - ); - logger('rating updated'); - } - else { - $z = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_sig, xlink_updated, xlink_static ) values( '%s', '%s', %d, '%s', '%s', '%s', 1 ) ", + ); + logger('rating updated'); + } else { + $z = q("insert into xlink ( xlink_xchan, xlink_link, xlink_rating, xlink_rating_text, xlink_sig, xlink_updated, xlink_static ) values( '%s', '%s', %d, '%s', '%s', '%s', 1 ) ", dbesc($rr['channel']), dbesc($rr['target']), intval($rr['rating']), @@ -321,50 +318,51 @@ function sync_directories($dirmode) { /** - * $function update_directory_entry($ud) + * @brief * - * @param array $ud; // Entry from update table - * Given an update record, probe the channel, grab a zot-info packet and refresh/sync the data + * Given an update record, probe the channel, grab a zot-info packet and refresh/sync the data. * - * Ignore updating records marked as deleted + * Ignore updating records marked as deleted. * - * If successful, - * sets ud_last in the DB to the current datetime for this reddress/webbie + * If successful, sets ud_last in the DB to the current datetime for this + * reddress/webbie. + * + * @param array $ud Entry from update table */ - function update_directory_entry($ud) { logger('update_directory_entry: ' . print_r($ud,true), LOGGER_DATA); - if($ud['ud_addr'] && (! ($ud['ud_flags'] & UPDATE_FLAGS_DELETED))) { + if ($ud['ud_addr'] && (! ($ud['ud_flags'] & UPDATE_FLAGS_DELETED))) { $success = false; - $x = zot_finger($ud['ud_addr'],''); - if($x['success']) { - $j = json_decode($x['body'],true); - if($j) + $x = zot_finger($ud['ud_addr'], ''); + if ($x['success']) { + $j = json_decode($x['body'], true); + if ($j) $success = true; - $y = import_xchan($j,0,$ud); + + $y = import_xchan($j, 0, $ud); } - if(! $success) { - $r = q("update updates set ud_last = '%s' where ud_addr = '%s'", + if (! $success) { + q("update updates set ud_last = '%s' where ud_addr = '%s'", dbesc(datetime_convert()), dbesc($ud['ud_addr']) ); } } - } /** - * @function local_dir_update($uid,$force) - * push local channel updates to a local directory server - * This is called from include/directory.php if a profile is to be pushed - * to the directory and the local hub in this case is any kind of directory server. + * @brief Push local channel updates to a local directory server. * + * This is called from include/directory.php if a profile is to be pushed to the + * directory and the local hub in this case is any kind of directory server. + * + * @param int $uid + * @param boolean $force */ - -function local_dir_update($uid,$force) { +function local_dir_update($uid, $force) { logger('local_dir_update: uid: ' . $uid, LOGGER_DEBUG); @@ -375,12 +373,12 @@ function local_dir_update($uid,$force) { $profile = array(); $profile['encoding'] = 'zot'; - if($p) { + if ($p) { $hash = $p[0]['channel_hash']; $profile['description'] = $p[0]['pdesc']; $profile['birthday'] = $p[0]['dob']; - if($age = age($p[0]['dob'],$p[0]['channel_timezone'],'')) + if ($age = age($p[0]['dob'],$p[0]['channel_timezone'],'')) $profile['age'] = $age; $profile['gender'] = $p[0]['gender']; @@ -394,14 +392,15 @@ function local_dir_update($uid,$force) { $profile['homepage'] = $p[0]['homepage']; $profile['hometown'] = $p[0]['hometown']; - if($p[0]['keywords']) { + if ($p[0]['keywords']) { $tags = array(); - $k = explode(' ',$p[0]['keywords']); - if($k) - foreach($k as $kk) - if(trim($kk)) + $k = explode(' ', $p[0]['keywords']); + if ($k) + foreach ($k as $kk) + if (trim($kk)) $tags[] = trim($kk); - if($tags) + + if ($tags) $profile['keywords'] = $tags; } @@ -414,26 +413,23 @@ function local_dir_update($uid,$force) { ); // Be careful - XCHAN_FLAGS_HIDDEN should evaluate to 1 - if(($r[0]['xchan_flags'] & XCHAN_FLAGS_HIDDEN) != $hidden) + if (($r[0]['xchan_flags'] & XCHAN_FLAGS_HIDDEN) != $hidden) $new_flags = $r[0]['xchan_flags'] ^ XCHAN_FLAGS_HIDDEN; else $new_flags = $r[0]['xchan_flags']; - - if($new_flags != $r[0]['xchan_flags']) { + if ($new_flags != $r[0]['xchan_flags']) { $r = q("update xchan set xchan_flags = %d where xchan_hash = '%s'", intval($new_flags), dbesc($p[0]['channel_hash']) ); - } $address = $p[0]['channel_address'] . '@' . get_app()->get_hostname(); - if(perm_is_allowed($uid,'','view_profile')) { - import_directory_profile($hash,$profile,$address,0); - } - else { + if (perm_is_allowed($uid, '', 'view_profile')) { + import_directory_profile($hash, $profile, $address, 0); + } else { // they may have made it private $r = q("delete from xprof where xprof_hash = '%s'", dbesc($hash) @@ -445,7 +441,5 @@ function local_dir_update($uid,$force) { } $ud_hash = random_string() . '@' . get_app()->get_hostname(); - update_modtime($hash,$ud_hash,$p[0]['channel_address'] . '@' . get_app()->get_hostname(),(($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); - + update_modtime($hash, $ud_hash, $p[0]['channel_address'] . '@' . get_app()->get_hostname(),(($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); } - diff --git a/include/directory.php b/include/directory.php index 801d4ec8e..9ab1d805b 100644 --- a/include/directory.php +++ b/include/directory.php @@ -1,14 +1,23 @@ -<?php /** @file */ +<?php +/** + * @file include/directory.php + * @brief executes directory_run() + */ require_once('boot.php'); require_once('include/zot.php'); require_once('include/cli_startup.php'); require_once('include/dir_fns.php'); - +/** + * @brief + * + * @param array $argv + * @param array $argc + */ function directory_run($argv, $argc){ - cli_startup(); + cli_startup(); if($argc < 2) return; @@ -37,7 +46,6 @@ function directory_run($argv, $argc){ $channel = $x[0]; - if($dirmode != DIRECTORY_MODE_NORMAL) { // this is an in-memory update and we don't need to send a network packet. @@ -70,8 +78,9 @@ function directory_run($argv, $argc){ if(! $z['success']) { - // FIXME - we aren't updating channel_dirdate if we have to queue - // the directory packet. That means we'll try again on the next poll run. + /** @FIXME we aren't updating channel_dirdate if we have to queue + * the directory packet. That means we'll try again on the next poll run. + */ $hash = random_string(); q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) @@ -87,8 +96,7 @@ function directory_run($argv, $argc){ dbesc($packet), dbesc('') ); - } - else { + } else { q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id']) @@ -101,7 +109,7 @@ function directory_run($argv, $argc){ } -if (array_search(__file__,get_included_files())===0){ - directory_run($argv,$argc); - killme(); +if (array_search(__file__, get_included_files()) === 0) { + directory_run($argv, $argc); + killme(); } diff --git a/include/enotify.php b/include/enotify.php index 36d457c10..e801c3100 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -1,33 +1,50 @@ -<?php /** @file */ - +<?php +/** + * @file include/enotify.php + * + * @brief File with functions and a class for email notifications. + */ + +/** + * @brief + * + * @param array $params an assoziative array with: + * * \e string \b from_xchan sender xchan hash + * * \e string \b to_xchan recipient xchan hash + * * \e array \b item an assoziative array + * * \e int \b type one of the NOTIFY_* constants from boot.php + * * \e string \b link + * * \e string \b parent_mid + * * \e string \b otype + * * \e string \b verb + * * \e string \b activity + */ function notification($params) { logger('notification: entry', LOGGER_DEBUG); // throw a small amount of entropy into the system to breakup duplicates arriving at the same precise instant. - usleep(mt_rand(0,10000)); - + usleep(mt_rand(0, 10000)); $a = get_app(); - if($params['from_xchan']) { + if ($params['from_xchan']) { $x = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($params['from_xchan']) ); } - if($params['to_xchan']) { + if ($params['to_xchan']) { $y = q("select channel.*, account.* from channel left join account on channel_account_id = account_id where channel_hash = '%s' and not (channel_pageflags & %d)>0 limit 1", dbesc($params['to_xchan']), intval(PAGE_REMOVED) ); } - if($x & $y) { + if ($x & $y) { $sender = $x[0]; $recip = $y[0]; - } - else { + } else { logger('notification: no sender or recipient.'); logger('sender: ' . $params['from_xchan']); logger('recip: ' . $params['to_xchan']); @@ -55,10 +72,10 @@ function notification($params) { $additional_mail_header = ""; - if(array_key_exists('item',$params)) { + if (array_key_exists('item', $params)) { require_once('include/conversation.php'); // if it's a normal item... - if(array_key_exists('verb',$params['item'])) { + if (array_key_exists('verb', $params['item'])) { // localize_item() alters the original item so make a copy first $i = $params['item']; logger('calling localize'); @@ -66,13 +83,11 @@ function notification($params) { $title = $i['title']; $body = $i['body']; $private = (($i['item_private']) || ($i['item_flags'] & ITEM_OBSCURED)); - } - else { + } else { $title = $params['item']['title']; $body = $params['item']['body']; } - } - else { + } else { $title = $body = ''; } @@ -80,7 +95,7 @@ function notification($params) { // e.g. "your post", "David's photo", etc. $possess_desc = t('%s <!item_type!>'); - if($params['type'] == NOTIFY_MAIL) { + if ($params['type'] == NOTIFY_MAIL) { logger('notification: mail'); $subject = sprintf( t('[Red:Notify] New mail received at %s'),$sitename); @@ -92,28 +107,27 @@ function notification($params) { $itemlink = $siteurl . '/mail/' . $params['item']['id']; } - if($params['type'] == NOTIFY_COMMENT) { + if ($params['type'] == NOTIFY_COMMENT) { // logger("notification: params = " . print_r($params, true), LOGGER_DEBUG); $itemlink = $params['link']; - // ignore like/unlike activity on posts - they probably require a sepearate notification preference - if(array_key_exists('item',$params) && (! visible_activity($params['item']))) + if (array_key_exists('item',$params) && (! visible_activity($params['item']))) return; $parent_mid = $params['parent_mid']; // Check to see if there was already a notify for this post. // If so don't create a second notification - + $p = null; $p = q("select id from notify where link = '%s' and uid = %d limit 1", dbesc($params['link']), intval($recip['channel_id']) ); - if($p) { + if ($p) { logger('notification: comment already notified'); pop_lang(); return; @@ -182,26 +196,26 @@ function notification($params) { $subject = sprintf( t('[Red:Notify] %s posted to your profile wall') , $sender['xchan_name']); $preamble = sprintf( t('%1$s, %2$s posted to your profile wall at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename); - + $epreamble = sprintf( t('%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]') , $recip['channel_name'], '[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]', $params['link']); - + $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf( $sitelink, $siteurl ); $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } - if($params['type'] == NOTIFY_TAGSELF) { + if ($params['type'] == NOTIFY_TAGSELF) { $p = null; $p = q("select id from notify where link = '%s' and uid = %d limit 1", dbesc($params['link']), intval($recip['channel_id']) ); - if($p) { + if ($p) { logger('enotify: tag: already notified about this post'); pop_lang(); return; @@ -220,8 +234,7 @@ function notification($params) { $itemlink = $params['link']; } - if($params['type'] == NOTIFY_POKE) { - + if ($params['type'] == NOTIFY_POKE) { $subject = sprintf( t('[Red:Notify] %1$s poked you') , $sender['xchan_name']); $preamble = sprintf( t('%1$s, %2$s poked you at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename); $epreamble = sprintf( t('%1$s, %2$s [zrl=%2$s]poked you[/zrl].') , @@ -239,7 +252,7 @@ function notification($params) { $itemlink = $params['link']; } - if($params['type'] == NOTIFY_TAGSHARE) { + if ($params['type'] == NOTIFY_TAGSHARE) { $subject = sprintf( t('[Red:Notify] %s tagged your post') , $sender['xchan_name']); $preamble = sprintf( t('%1$s, %2$s tagged your post at %3$s') , $recip['channel_name'],$sender['xchan_name'], $sitename); $epreamble = sprintf( t('%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]') , @@ -253,7 +266,7 @@ function notification($params) { $itemlink = $params['link']; } - if($params['type'] == NOTIFY_INTRO) { + if ($params['type'] == NOTIFY_INTRO) { $subject = sprintf( t('[Red:Notify] Introduction received')); $preamble = sprintf( t('%1$s, you\'ve received an new connection request from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename); $epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a new connection request[/zrl] from %3$s.'), @@ -268,7 +281,7 @@ function notification($params) { $itemlink = $params['link']; } - if($params['type'] == NOTIFY_SUGGEST) { + if ($params['type'] == NOTIFY_SUGGEST) { $subject = sprintf( t('[Red:Notify] Friend suggestion received')); $preamble = sprintf( t('%1$s, you\'ve received a friend suggestion from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename); $epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from %4$s.'), @@ -276,7 +289,7 @@ function notification($params) { $itemlink, '[zrl=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/zrl]', '[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]'); - + $body = t('Name:') . ' ' . $params['item']['name'] . "\n"; $body .= t('Photo:') . ' ' . $params['item']['photo'] . "\n"; $body .= sprintf( t('You may visit their profile at %s'),$params['item']['url']); @@ -287,27 +300,27 @@ function notification($params) { $itemlink = $params['link']; } - if($params['type'] == NOTIFY_CONFIRM) { - + if ($params['type'] == NOTIFY_CONFIRM) { + // ? } - if($params['type'] == NOTIFY_SYSTEM) { - + if ($params['type'] == NOTIFY_SYSTEM) { + // ? } $h = array( - 'params' => $params, + 'params' => $params, 'subject' => $subject, - 'preamble' => $preamble, - 'epreamble' => $epreamble, - 'body' => $body, + 'preamble' => $preamble, + 'epreamble' => $epreamble, + 'body' => $body, 'sitelink' => $sitelink, 'tsitelink' => $tsitelink, 'hsitelink' => $hsitelink, 'itemlink' => $itemlink ); - - call_hooks('enotify',$h); + + call_hooks('enotify', $h); $subject = $h['subject']; $preamble = $h['preamble']; @@ -319,16 +332,16 @@ function notification($params) { $itemlink = $h['itemlink']; - require_once('include/html2bbcode.php'); + require_once('include/html2bbcode.php'); do { $dups = false; $hash = random_string(); - $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", + $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", dbesc($hash)); - if(count($r)) + if (count($r)) $dups = true; - } while($dups == true); + } while ($dups === true); $datarray = array(); @@ -348,10 +361,10 @@ function notification($params) { $datarray['abort'] = false; $datarray['item'] = $params['item']; - + call_hooks('enotify_store', $datarray); - if($datarray['abort']) { + if ($datarray['abort']) { pop_lang(); return; } @@ -365,8 +378,8 @@ function notification($params) { // So easiest solution to hide them from Notices is to mark them as seen right away. // Another option would be to not add them to the DB, and change how emails are handled (probably would be better that way) $always_show_in_notices = get_pconfig($recip['channel_id'],'system','always_show_in_notices'); - if(!$always_show_in_notices) { - if(($params['type'] == NOTIFY_WALL) || ($params['type'] == NOTIFY_MAIL) || ($params['type'] == NOTIFY_INTRO)) { + if (!$always_show_in_notices) { + if (($params['type'] == NOTIFY_WALL) || ($params['type'] == NOTIFY_MAIL) || ($params['type'] == NOTIFY_INTRO)) { $seen = 1; } } @@ -392,9 +405,9 @@ function notification($params) { dbesc($hash), intval($recip['channel_id']) ); - if($r) + if ($r) { $notify_id = $r[0]['id']; - else { + } else { logger('notification not found.'); pop_lang(); return; @@ -405,7 +418,7 @@ function notification($params) { // wretched hack, but we don't want to duplicate all the preamble variations and we also don't want to screw up a translation - if(($a->language === 'en' || (! $a->language)) && strpos($msg,', ')) + if (($a->language === 'en' || (! $a->language)) && strpos($msg,', ')) $msg = substr($msg,strpos($msg,', ')+1); $r = q("update notify set msg = '%s' where id = %d and uid = %d", @@ -413,12 +426,11 @@ function notification($params) { intval($notify_id), intval($datarray['uid']) ); - // send email notification if notification preferences permit require_once('bbcode.php'); - if((intval($recip['channel_notifyflags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM) { + if ((intval($recip['channel_notifyflags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM) { logger('notification: sending notification email'); @@ -429,8 +441,6 @@ function notification($params) { return; } - - $textversion = strip_tags(html_entity_decode(bbcode(stripslashes(str_replace(array("\\r", "\\n"), array( "", "\n"), $body))),ENT_QUOTES,'UTF-8')); $htmlversion = bbcode(stripslashes(str_replace(array("\\r","\\n"), array("","<br />\n"),$body))); @@ -450,7 +460,6 @@ function notification($params) { unset($_SESSION['zid_override']); unset($_SESSION['zrl_override']); - $datarray = array(); $datarray['banner'] = $banner; $datarray['product'] = $product; @@ -485,13 +494,13 @@ function notification($params) { $private_activity = false; - if(! $datarray['email_secure']) { - switch($params['type']) { + if (! $datarray['email_secure']) { + switch ($params['type']) { case NOTIFY_WALL: case NOTIFY_TAGSELF: case NOTIFY_POKE: case NOTIFY_COMMENT: - if(! $private) + if (! $private) break; $private_activity = true; case NOTIFY_MAIL: @@ -503,11 +512,12 @@ function notification($params) { } } - if($private_activity - && intval(get_pconfig($datarray['uid'],'system','ignore_private_notifications'))) { + if ($private_activity + && intval(get_pconfig($datarray['uid'], 'system', 'ignore_private_notifications'))) { + pop_lang(); return; - } + } // load the template for private message notifications $tpl = get_markup_template('email_notify_html.tpl'); @@ -525,13 +535,13 @@ function notification($params) { '$hitemlink' => $datarray['hitemlink'], '$thanks' => $datarray['thanks'], '$site_admin' => $datarray['site_admin'], - '$title' => $datarray['title'], - '$htmlversion' => $datarray['htmlversion'], + '$title' => $datarray['title'], + '$htmlversion' => $datarray['htmlversion'], )); - + // load the template for private message notifications $tpl = get_markup_template('email_notify_text.tpl'); - $email_text_body = replace_macros($tpl,array( + $email_text_body = replace_macros($tpl, array( '$banner' => $datarray['banner'], '$product' => $datarray['product'], '$preamble' => $datarray['preamble'], @@ -545,8 +555,8 @@ function notification($params) { '$titemlink' => $datarray['titemlink'], '$thanks' => $datarray['thanks'], '$site_admin' => $datarray['site_admin'], - '$title' => $datarray['title'], - '$textversion' => $datarray['textversion'], + '$title' => $datarray['title'], + '$textversion' => $datarray['textversion'], )); // logger('text: ' . $email_text_body); @@ -570,41 +580,48 @@ function notification($params) { } +/** + * @brief A class for sending email notifications. + * + * @fixme Class names start mostly with capital letter to distinguish them easier. + */ class enotify { /** - * Send a multipart/alternative message with Text and HTML versions + * @brief Send a multipart/alternative message with Text and HTML versions. * - * @param fromName name of the sender - * @param fromEmail email fo the sender - * @param replyTo replyTo address to direct responses - * @param toEmail destination email address - * @param messageSubject subject of the message - * @param htmlVersion html version of the message - * @param textVersion text only version of the message - * @param additionalMailHeader additions to the smtp mail header + * @param array $params an assoziative array with: + * * \e string \b fromName name of the sender + * * \e string \b fromEmail email of the sender + * * \e string \b replyTo replyTo address to direct responses + * * \e string \b toEmail destination email address + * * \e string \b messageSubject subject of the message + * * \e string \b htmlVersion html version of the message + * * \e string \b textVersion text only version of the message + * * \e string \b additionalMailHeader additions to the smtp mail header */ static public function send($params) { $fromName = email_header_encode(html_entity_decode($params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8'); $messageSubject = email_header_encode(html_entity_decode($params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8'); - + // generate a mime boundary - $mimeBoundary =rand(0,9)."-" - .rand(10000000000,9999999999)."-" - .rand(10000000000,9999999999)."=:" - .rand(10000,99999); + $mimeBoundary = rand(0, 9) . "-" + .rand(10000000000, 9999999999) . "-" + .rand(10000000000, 9999999999) . "=:" + .rand(10000, 99999); // generate a multipart/alternative message header $messageHeader = $params['additionalMailHeader'] . - "From: $fromName <{$params['fromEmail']}>\n" . + "From: $fromName <{$params['fromEmail']}>\n" . "Reply-To: $fromName <{$params['replyTo']}>\n" . "MIME-Version: 1.0\n" . "Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\""; // assemble the final multipart message body with the text and html types included - $textBody = chunk_split(base64_encode($params['textVersion'])); - $htmlBody = chunk_split(base64_encode($params['htmlVersion'])); + $textBody = chunk_split(base64_encode($params['textVersion'])); + $htmlBody = chunk_split(base64_encode($params['htmlVersion'])); + $multipartMessageBody = "--" . $mimeBoundary . "\n" . // plain text section "Content-Type: text/plain; charset=UTF-8\n" . @@ -618,12 +635,11 @@ class enotify { // send the message $res = mail( - $params['toEmail'], // send to address + $params['toEmail'], // send to address $messageSubject, // subject - $multipartMessageBody, // message body + $multipartMessageBody, // message body $messageHeader // message headers ); logger("notification: enotify::send returns " . $res, LOGGER_DEBUG); } -} - +}
\ No newline at end of file diff --git a/include/event.php b/include/event.php index 1ed541d99..05f01535c 100644 --- a/include/event.php +++ b/include/event.php @@ -1,6 +1,14 @@ -<?php /** @file */ - - +<?php +/** + * @file include/event.php + */ + +/** + * @brief Returns an event as HTML + * + * @param array $ev + * @return string + */ function format_event_html($ev) { require_once('include/bbcode.php'); @@ -12,13 +20,12 @@ function format_event_html($ev) { $o = '<div class="vevent">' . "\r\n"; - $o .= '<p class="summary event-summary">' . bbcode($ev['summary']) . '</p>' . "\r\n"; $o .= '<p class="description event-description">' . bbcode($ev['description']) . '</p>' . "\r\n"; $o .= '<p class="event-start">' . t('Starts:') . ' <abbr class="dtstart" title="' - . datetime_convert('UTC','UTC',$ev['start'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )) + . datetime_convert('UTC', 'UTC', $ev['start'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )) . '" >' . (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $ev['start'] , $bd_format )) @@ -38,15 +45,15 @@ function format_event_html($ev) { if(strlen($ev['location'])) $o .= '<p class="event-location"> ' . t('Location:') . ' <span class="location">' - . bbcode($ev['location']) + . bbcode($ev['location']) . '</span></p>' . "\r\n"; $o .= '</div>' . "\r\n"; + return $o; } - function ical_wrapper($ev) { if(! ((is_array($ev)) && count($ev))) @@ -56,7 +63,7 @@ function ical_wrapper($ev) { $o .= "\nVERSION:2.0"; $o .= "\nMETHOD:PUBLISH"; $o .= "\nPRODID:-//" . get_config('system','sitename') . "//" . RED_PLATFORM . "//" . strtoupper(get_app()->language). "\n"; - if(array_key_exists('start',$ev)) + if(array_key_exists('start', $ev)) $o .= format_event_ical($ev); else { foreach($ev as $e) { @@ -84,13 +91,15 @@ function format_event_ical($ev) { if($ev['description']) $o .= "\nDESCRIPTION:" . format_ical_text($ev['description']); $o .= "\nEND:VEVENT\n"; + return $o; } -function format_ical_text($s) { +function format_ical_text($s) { require_once('include/bbcode.php'); require_once('include/html2plain.php'); + return(wordwrap(html2plain(bbcode($s)),72,"\n ",true)); } @@ -117,16 +126,16 @@ function format_event_bbcode($ev) { if($ev['adjust']) $o .= '[event-adjust]' . $ev['adjust'] . '[/event-adjust]'; - return $o; - } + function bbtovcal($s) { $o = ''; $ev = bbtoevent($s); if($ev['description']) $o = format_event_html($ev); + return $o; } @@ -154,27 +163,41 @@ function bbtoevent($s) { if(preg_match("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",$s,$match)) $ev['adjust'] = $match[1]; $ev['nofinish'] = (((x($ev, 'start') && $ev['start']) && (!x($ev, 'finish') || !$ev['finish'])) ? 1 : 0); - return $ev; + return $ev; } - +/** + * @brief Sorts the given array of events by date. + * + * @see ev_compare() + * @param array $arr + * @return sorted array + */ function sort_by_date($arr) { - if(is_array($arr)) - usort($arr,'ev_compare'); + if (is_array($arr)) + usort($arr, 'ev_compare'); + return $arr; } - -function ev_compare($a,$b) { +/** + * @brief Compare function for events. + * + * @see sort_by_date() + * @param array $a + * @param array $b + * @return number return values like strcmp() + */ +function ev_compare($a, $b) { $date_a = (($a['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$a['start']) : $a['start']); $date_b = (($b['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$b['start']) : $b['start']); - if($date_a === $date_b) - return strcasecmp($a['description'],$b['description']); - - return strcmp($date_a,$date_b); + if ($date_a === $date_b) + return strcasecmp($a['description'], $b['description']); + + return strcmp($date_a, $date_b); } @@ -182,11 +205,9 @@ function event_store_event($arr) { $arr['created'] = (($arr['created']) ? $arr['created'] : datetime_convert()); $arr['edited'] = (($arr['edited']) ? $arr['edited'] : datetime_convert()); - $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' ); + $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' ); $arr['event_xchan'] = (($arr['event_xchan']) ? $arr['event_xchan'] : ''); - - // Existing event being modified if($arr['id'] || $arr['event_hash']) { @@ -206,7 +227,6 @@ function event_store_event($arr) { ); } - if(! $r) return false; @@ -216,7 +236,7 @@ function event_store_event($arr) { } $hash = $r[0]['event_hash']; - + // The event changed. Update it. $r = q("UPDATE `event` SET @@ -251,14 +271,12 @@ function event_store_event($arr) { intval($r[0]['id']), intval($arr['uid']) ); - } - else { + } else { - // New event. Store it. + // New event. Store it. $hash = random_string(); - $r = q("INSERT INTO event ( uid,aid,event_xchan,event_hash,created,edited,start,finish,summary,description,location,type, adjust,nofinish,allow_cid,allow_gid,deny_cid,deny_gid) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", @@ -280,7 +298,6 @@ function event_store_event($arr) { dbesc($arr['allow_gid']), dbesc($arr['deny_cid']), dbesc($arr['deny_gid']) - ); } @@ -292,7 +309,6 @@ function event_store_event($arr) { return $r[0]; return false; - } function event_addtocal($item_id, $uid) { @@ -339,22 +355,21 @@ function event_addtocal($item_id, $uid) { intval($item['id']), intval($channel['channel_id']) ); + return true; } } + return false; } - -function event_store_item($arr,$event) { +function event_store_item($arr, $event) { require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/bbcode.php'); - $a = get_app(); - $item = null; if($arr['mid'] && $arr['uid']) { @@ -370,28 +385,28 @@ function event_store_item($arr,$event) { $item_arr = array(); $prefix = ''; - $birthday = false; +// $birthday = false; if($event['type'] === 'birthday') { $prefix = t('This event has been added to your calendar.'); - $birthday = true; +// $birthday = true; // The event is created on your own site by the system, but appears to belong // to the birthday person. It also isn't propagated - so we need to prevent // folks from trying to comment on it. If you're looking at this and trying to // fix it, you'll need to completely change the way birthday events are created - // and send them out from the source. This has its own issues. + // and send them out from the source. This has its own issues. $item_arr['comment_policy'] = 'none'; } $r = q("SELECT * FROM item left join xchan on author_xchan = xchan_hash WHERE resource_id = '%s' AND resource_type = 'event' and uid = %d LIMIT 1", - dbesc($event['event_hash']), + dbesc($event['event_hash']), intval($arr['uid']) ); if($r) { - $obj = json_encode(array( + $object = json_encode(array( 'type' => ACTIVITY_OBJ_EVENT, 'id' => z_root() . '/event/' . $r[0]['resource_id'], 'title' => $arr['summary'], @@ -424,8 +439,7 @@ function event_store_item($arr,$event) { intval($arr['uid']) ); - - $s = q("delete from term where oid = %d and otype = %d", + q("delete from term where oid = %d and otype = %d", intval($r[0]['id']), intval(TERM_OBJ_POST) ); @@ -442,21 +456,19 @@ function event_store_item($arr,$event) { dbesc($t['url']) ); } - } + } $item_id = $r[0]['id']; call_hooks('event_updated', $event['id']); + return $item_id; - } - else { + } else { $z = q("select * from channel where channel_id = %d limit 1", intval($arr['uid']) ); - $private = (($arr['allow_cid'] || $arr['allow_gid'] || $arr['deny_cid'] || $arr['deny_gid']) ? 1 : 0); - if($item) { $item_arr['id'] = $item['id']; @@ -469,8 +481,7 @@ function event_store_item($arr,$event) { $item_flags |= ITEM_WALL; $item_flags |= ITEM_ORIGIN; } - $item_arr['item_flags'] = $item_flags; - + $item_arr['item_flags'] = $item_flags; } if(! $arr['mid']) @@ -482,7 +493,6 @@ function event_store_item($arr,$event) { $item_arr['mid'] = $arr['mid']; $item_arr['parent_mid'] = $arr['mid']; - $item_arr['owner_xchan'] = (($wall) ? $z[0]['channel_hash'] : $arr['event_xchan']); $item_arr['author_xchan'] = $arr['event_xchan']; $item_arr['title'] = $arr['summary']; @@ -493,9 +503,8 @@ function event_store_item($arr,$event) { $item_arr['item_private'] = $private; $item_arr['verb'] = ACTIVITY_POST; - - if(array_key_exists('term',$arr)) - $item_arr['term'] = $arr['term']; + if(array_key_exists('term', $arr)) + $item_arr['term'] = $arr['term']; $item_arr['resource_type'] = 'event'; $item_arr['resource_id'] = $event['event_hash']; @@ -512,15 +521,13 @@ function event_store_item($arr,$event) { else $item_arr['plink'] = z_root() . '/display/' . $item_arr['mid']; - $x = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($arr['event_xchan']) ); if($x) { - $item_arr['object'] = json_encode(array( 'type' => ACTIVITY_OBJ_EVENT, - 'id' => z_root() . '/event/' . $hash, + 'id' => z_root() . '/event/' . $event['event_hash'], 'title' => $arr['summary'], 'content' => format_event_bbcode($arr), 'author' => array( @@ -539,7 +546,7 @@ function event_store_item($arr,$event) { $item_id = $res['item_id']; - call_hooks("event_created", $event['id']); + call_hooks('event_created', $event['id']); return $item_id; } diff --git a/include/expire.php b/include/expire.php index a229bd4ac..e5d456896 100644 --- a/include/expire.php +++ b/include/expire.php @@ -1,4 +1,7 @@ -<?php /** @file */ +<?php +/** + * @file include/expire.php + */ require_once('boot.php'); require_once('include/cli_startup.php'); @@ -7,59 +10,93 @@ function expire_run($argv, $argc){ cli_startup(); - $r = q("select id from item where (item_restrict & %d)>0 and not (item_restrict & %d)>0 and changed < %s - INTERVAL %s", + // perform final cleanup on previously delete items + + $r = q("select id from item where (item_restrict & %d) > 0 and (item_restrict & %d) = 0 + and changed < %s - INTERVAL %s", intval(ITEM_DELETED), intval(ITEM_PENDING_REMOVE), db_utcnow(), db_quoteinterval('10 DAY') ); - if($r) { - foreach($r as $rr) { - drop_item($rr['id'],false,DROPITEM_PHASE2); + if ($r) { + foreach ($r as $rr) { + drop_item($rr['id'], false, DROPITEM_PHASE2); } } // physically remove anything that has been deleted for more than two months + /** @FIXME - this is a wretchedly inefficient query */ - $r = q("delete from item where ( item_restrict & %d )>0 and changed < %s - INTERVAL %s", + $r = q("delete from item where ( item_restrict & %d ) > 0 and changed < %s - INTERVAL %s", intval(ITEM_PENDING_REMOVE), db_utcnow(), db_quoteinterval('36 DAY') ); - // make this optional as it could have a performance impact on large sites + /** @FIXME make this optional as it could have a performance impact on large sites */ - if(intval(get_config('system','optimize_items'))) + if (intval(get_config('system', 'optimize_items'))) q("optimize table item"); logger('expire: start', LOGGER_DEBUG); - - $r = q("SELECT channel_id, channel_address, channel_expire_days from channel where channel_expire_days != 0"); - if($r && count($r)) { - foreach($r as $rr) { - logger('Expire: ' . $rr['channel_address'] . ' interval: ' . $rr['channel_expire_days'], LOGGER_DEBUG); - item_expire($rr['channel_id'],$rr['channel_expire_days']); + $site_expire = get_config('system', 'default_expire_days'); + + logger('site_expire: ' . $site_expire); + + $r = q("SELECT channel_id, channel_address, channel_pageflags, channel_expire_days from channel where true"); + + if ($r) { + foreach ($r as $rr) { + + // expire the sys channel separately + if ($rr['channel_pageflags'] & PAGE_SYSTEM) + continue; + + // service class default (if non-zero) over-rides the site default + + $service_class_expire = service_class_fetch($rr['channel_id'], 'expire_days'); + if (intval($service_class_expire)) + $channel_expire = $service_class_expire; + else + $channel_expire = $site_expire; + + if (intval($channel_expire) && (intval($channel_expire) < intval($rr['channel_expire_days'])) || + intval($rr['channel_expire_days'] == 0)) { + $expire_days = $channel_expire; + } else { + $expire_days = $rr['channel_expire_days']; + } + + // if the site or service class expiration is non-zero and less than person expiration, use that + logger('Expire: ' . $rr['channel_address'] . ' interval: ' . $expire_days, LOGGER_DEBUG); + item_expire($rr['channel_id'], $expire_days); } } - $x = get_sys_channel(); - if($x) { + if ($x) { // this should probably just fetch the channel_expire_days from the sys channel, // but there's no convenient way to set it. - $expire_days = get_config('externals','expire_days'); - if($expire_days === false) + $expire_days = get_config('system', 'sys_expire_days'); + if ($expire_days === false) $expire_days = 30; - if($expire_days) - item_expire($x['channel_id'],$expire_days); - } + if (intval($site_expire) && (intval($site_expire) < intval($expire_days))) { + $expire_days = $site_expire; + } - return; + logger('Expire: sys interval: ' . $expire_days, LOGGER_DEBUG); + + if ($expire_days) + item_expire($x['channel_id'], $expire_days); + + logger('Expire: sys: done', LOGGER_DEBUG); + } } -if (array_search(__file__,get_included_files())===0){ - expire_run($argv,$argc); - killme(); +if (array_search(__file__, get_included_files()) === 0){ + expire_run($argv, $argc); + killme(); } diff --git a/include/features.php b/include/features.php index 3a1752052..4121880a4 100644 --- a/include/features.php +++ b/include/features.php @@ -46,9 +46,6 @@ function get_features() { array('nav_channel_select', t('Navigation Channel Select'), t('Change channels directly from within the navigation dropdown menu'),false), array('photo_location', t('Photo Location'), t('If location data is available on uploaded photos, link this to a map.'),false), - - //FIXME - needs a description, but how the hell do we explain this to normals? - array('sendzid', t('Extended Identity Sharing'), t('Share your identity with all websites on the internet. When disabled, identity is only shared with sites in the matrix.'),false), array('expert', t('Expert Mode'), t('Enable Expert Mode to provide advanced configuration options'),false), array('premium_channel', t('Premium Channel'), t('Allows you to set restrictions and terms on those that connect with your channel'),false), ), @@ -62,7 +59,7 @@ function get_features() { array('channel_sources', t('Channel Sources'), t('Automatically import channel content from other channels or feeds'),false), array('content_encrypt', t('Even More Encryption'), t('Allow optional encryption of content end-to-end with a shared secret key'),false), array('consensus_tools', t('Enable voting tools'), t('Provide a class of post which others can vote on'),false), - array('adult_photo_flagging', t('Flag Adult Photos'), t('Provide photo edit option to hide adult photos from default album view'),false), + ), // Network Tools diff --git a/include/group.php b/include/group.php index 70668a355..19bdf03f9 100644 --- a/include/group.php +++ b/include/group.php @@ -297,7 +297,7 @@ function group_side($every="connections",$each="group",$edit = false, $group_id $o = replace_macros($tpl, array( '$title' => t('Collections'), '$edittext' => t('Edit collection'), - '$createtext' => t('Create a new collection'), + '$createtext' => t('New collection'), '$ungrouped' => (($every === 'contacts') ? t('Channels not in any collection') : ''), '$groups' => $groups, '$add' => t('add'), diff --git a/include/hubloc.php b/include/hubloc.php index 98c1a21f3..a4efe1c75 100644 --- a/include/hubloc.php +++ b/include/hubloc.php @@ -184,6 +184,8 @@ function hubloc_mark_as_down($posturl) { function xchan_store($arr) { + logger('xchan_store: ' . print_r($arr,true)); + if(! $arr['hash']) $arr['hash'] = $arr['guid']; if(! $arr['hash']) @@ -202,7 +204,7 @@ function xchan_store($arr) { if(! $arr['url']) $arr['url'] = z_root(); if(! $arr['photo']) - $arr['photo'] = get_default_profile_photo(); + $arr['photo'] = z_root() . '/' . get_default_profile_photo(); $r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_guid_sig, xchan_pubkey, xchan_addr, xchan_url, xchan_connurl, xchan_follow, xchan_connpage, xchan_name, xchan_network, xchan_instance_url, xchan_flags, xchan_name_date ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s','%s',%d,'%s') ", dbesc($arr['hash']), @@ -256,12 +258,12 @@ function xchan_fetch($arr) { if(! $key) return false; - $r = q("select * from xchan where $key = '$v'"); + $r = q("select * from xchan where $key = '$v' limit 1"); if(! $r) return false; $ret = array(); - foreach($r as $k => $v) { + foreach($r[0] as $k => $v) { if($k === 'xchan_addr') $ret['address'] = $v; else diff --git a/include/identity.php b/include/identity.php index 079c1a245..7884c04d2 100644 --- a/include/identity.php +++ b/include/identity.php @@ -1,27 +1,29 @@ -<?php /** @file */ +<?php +/** + * @file include/identity.php + */ require_once('include/zot.php'); require_once('include/crypto.php'); /** - * @function identity_check_service_class($account_id) - * Called when creating a new channel. Checks the account's service class and number - * of current channels to determine whether creating a new channel is within the current - * service class constraints. + * @brief Called when creating a new channel. + * + * Checks the account's service class and number of current channels to determine + * whether creating a new channel is within the current service class constraints. * * @param int $account_id * Account_id used for this request * - * @returns array - * 'success' => boolean true if creating a new channel is allowed for this account - * 'message' => if success is false, optional error text + * @returns assoziative array with: + * * \e boolean \b success boolean true if creating a new channel is allowed for this account + * * \e string \b message (optional) if success is false, optional error text + * * \e int \b total_identities */ - - function identity_check_service_class($account_id) { - $ret = array('success' => false, $message => ''); - + $ret = array('success' => false, 'message' => ''); + $r = q("select count(channel_id) as total from channel where channel_account_id = %d and not ( channel_pageflags & %d )>0 ", intval($account_id), intval(PAGE_REMOVED) @@ -30,68 +32,67 @@ function identity_check_service_class($account_id) { $ret['total_identities'] = 0; $ret['message'] = t('Unable to obtain identity information from database'); return $ret; - } + } $ret['total_identities'] = intval($r[0]['total']); - if(! account_service_class_allows($account_id,'total_identities',$r[0]['total'])) { - $result['message'] .= upgrade_message(); - return $result; + if (! account_service_class_allows($account_id, 'total_identities', $r[0]['total'])) { + $ret['message'] .= upgrade_message(); + return $ret; } $ret['success'] = true; + return $ret; } /** - * @function validate_channelname($name) - * Determine if the channel name is allowed when creating a new channel. + * @brief Determine if the channel name is allowed when creating a new channel. + * * This action is pluggable. + * We're currently only checking for an empty name or one that exceeds our + * storage limit (255 chars). 255 chars is probably going to create a mess on + * some pages. + * Plugins can set additional policies such as full name requirements, character + * sets, multi-byte length, etc. * * @param string $name * * @returns nil return if name is valid, or string describing the error state. - * - * We're currently only checking for an empty name or one that exceeds our storage limit (255 chars). - * 255 chars is probably going to create a mess on some pages. - * Plugins can set additional policies such as full name requirements, character sets, multi-byte - * length, etc. - * */ - function validate_channelname($name) { - if(! $name) + if (! $name) return t('Empty name'); - if(strlen($name) > 255) + + if (strlen($name) > 255) return t('Name too long'); + $arr = array('name' => $name); - call_hooks('validate_channelname',$arr); - if(x($arr,'message')) + call_hooks('validate_channelname', $arr); + + if (x($arr, 'message')) return $arr['message']; - return; } /** - * @function create_sys_channel() - * Create a system channel - which has no account attached + * @brief Create a system channel - which has no account attached. * */ - function create_sys_channel() { - if(get_sys_channel()) + if (get_sys_channel()) return; - // Ensure that there is a host keypair. + // Ensure that there is a host keypair. - if((! get_config('system','pubkey')) && (! get_config('system','prvkey'))) { + if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) { require_once('include/crypto.php'); - $hostkey = new_keypair(4096); - set_config('system','pubkey',$hostkey['pubkey']); - set_config('system','prvkey',$hostkey['prvkey']); - } + $hostkey = new_keypair(4096); + set_config('system', 'pubkey', $hostkey['pubkey']); + set_config('system', 'prvkey', $hostkey['prvkey']); + } create_identity(array( 'account_id' => 'xxx', // This will create an identity with an (integer) account_id of 0, but account_id is required @@ -103,63 +104,79 @@ function create_sys_channel() { )); } + +/** + * @brief Returns the sys channel. + * + * @return array|boolean + */ function get_sys_channel() { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where (channel_pageflags & %d)>0 limit 1", intval(PAGE_SYSTEM) ); - if($r) + + if ($r) return $r[0]; + return false; } + +/** + * @brief Checks if $channel_id is sys channel. + * + * @param int $channel_id + * @return boolean + */ function is_sys_channel($channel_id) { $r = q("select channel_pageflags from channel where channel_id = %d limit 1", intval($channel_id) ); - if(($r) && ($r[0]['channel_pageflags'] & PAGE_SYSTEM)) + + if (($r) && ($r[0]['channel_pageflags'] & PAGE_SYSTEM)) return true; + return false; } /** - * @channel_total() - * Return the total number of channels on this site. No filtering is performed except to check PAGE_REMOVED + * @brief Return the total number of channels on this site. * - * @returns int - * on error returns boolean false + * No filtering is performed except to check PAGE_REMOVED. * + * @returns int|booleean + * on error returns boolean false */ - function channel_total() { $r = q("select channel_id from channel where not ( channel_pageflags & %d )>0", intval(PAGE_REMOVED) ); - if(is_array($r)) + if (is_array($r)) return count($r); + return false; } /** - * @function create_identity($arr) - * Create a new channel - * Also creates the related xchan, hubloc, profile, and "self" abook records, and an - * empty "Friends" group/collection for the new channel + * @brief Create a new channel. * - * @param array $arr - * 'name' => full name of channel - * 'nickname' => "email/url-compliant" nickname - * 'account_id' => account_id to attach with this channel - * [other identity fields as desired] + * Also creates the related xchan, hubloc, profile, and "self" abook records, + * and an empty "Friends" group/collection for the new channel. + * + * @param array $arr assoziative array with: + * * \e string \b name full name of channel + * * \e string \b nickname "email/url-compliant" nickname + * * \e int \b account_id to attach with this channel + * * [other identity fields as desired] * * @returns array * 'success' => boolean true or false * 'message' => optional error text if success is false * 'channel' => if successful the created channel array */ - function create_identity($arr) { $a = get_app(); @@ -176,7 +193,6 @@ function create_identity($arr) { // save this for auto_friending $total_identities = $ret['total_identities']; - $nick = mb_strtolower(trim($arr['nickname'])); if(! $nick) { $ret['message'] = t('Nickname is required.'); @@ -205,7 +221,6 @@ function create_identity($arr) { $guid = zot_new_uid($nick); $key = new_keypair(4096); - $sig = base64url_encode(rsa_sign($guid,$key['prvkey'])); $hash = make_xchan_hash($guid,$sig); @@ -221,9 +236,6 @@ function create_identity($arr) { if(array_key_exists('primary', $arr)) $primary = intval($arr['primary']); - - $perms_sql = ''; - $role_permissions = null; $global_perms = get_perms(); @@ -249,9 +261,7 @@ function create_identity($arr) { } } - - $expire = get_config('system', 'default_expire_days'); - $expire = (($expire===false)? '0': $expire); + $expire = 0; $r = q("insert into channel ( channel_account_id, channel_primary, channel_name, channel_address, channel_guid, channel_guid_sig, @@ -271,7 +281,6 @@ function create_identity($arr) { intval($expire), dbesc($a->timezone) ); - $r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1", @@ -283,7 +292,7 @@ function create_identity($arr) { $ret['message'] = t('Unable to retrieve created identity'); return $ret; } - + $ret['channel'] = $r[0]; if(intval($arr['account_id'])) @@ -309,7 +318,6 @@ function create_identity($arr) { if(! $r) logger('create_identity: Unable to store hub location'); - $newuid = $ret['channel']['channel_id']; $r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_guid_sig, xchan_pubkey, xchan_photo_l, xchan_photo_m, xchan_photo_s, xchan_addr, xchan_url, xchan_follow, xchan_connurl, xchan_name, xchan_network, xchan_photo_date, xchan_name_date, xchan_flags ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)", @@ -331,9 +339,8 @@ function create_identity($arr) { intval($xchanflags) ); - // Not checking return value. + // Not checking return value. // It's ok for this to fail if it's an imported channel, and therefore the hash is a duplicate - $r = q("INSERT INTO profile ( aid, uid, profile_guid, profile_name, is_default, publish, name, photo, thumb) VALUES ( %d, %d, '%s', '%s', %d, %d, '%s', '%s', '%s') ", @@ -420,37 +427,31 @@ function create_identity($arr) { } call_hooks('register_account', $newuid); - + proc_run('php','include/directory.php', $ret['channel']['channel_id']); } $ret['success'] = true; return $ret; - } - /** - * @function set_default_login_identity($account_id, $channel_id, $force = true) - * Set default channel to be used on login + * @brief Set default channel to be used on login. * * @param int $account_id * login account * @param int $channel_id * channel id to set as default for this account - * @param boolean force + * @param boolean $force * if true, set this default unconditionally * if $force is false only do this if there is no existing default - * - * @returns nil */ - -function set_default_login_identity($account_id,$channel_id,$force = true) { +function set_default_login_identity($account_id, $channel_id, $force = true) { $r = q("select account_default_channel from account where account_id = %d limit 1", intval($account_id) ); - if($r) { - if((intval($r[0]['account_default_channel']) == 0) || ($force)) { + if ($r) { + if ((intval($r[0]['account_default_channel']) == 0) || ($force)) { $r = q("update account set account_default_channel = %d where account_id = %d", intval($channel_id), intval($account_id) @@ -460,8 +461,7 @@ function set_default_login_identity($account_id,$channel_id,$force = true) { } /** - * @function identity_basic_export($channel_id,$items = false) - * Create an array representing the important channel information + * @brief Create an array representing the important channel information * which would be necessary to create a nomadic identity clone. This includes * most channel resources and connection information with the exception of content. * @@ -472,9 +472,7 @@ function set_default_login_identity($account_id,$channel_id,$force = true) { * * @returns array * See function for details - * */ - function identity_basic_export($channel_id, $items = false) { /* @@ -538,7 +536,6 @@ function identity_basic_export($channel_id, $items = false) { if($r) $ret['config'] = $r; - $r = q("select type, data from photo where scale = 4 and profile = 1 and uid = %d limit 1", intval($channel_id) ); @@ -565,11 +562,9 @@ function identity_basic_export($channel_id, $items = false) { if($r) $ret['obj'] = $r; - if(! $items) return $ret; - $r = q("select likes.*, item.mid from likes left join item on likes.iid = item.id where likes.channel_id = %d", intval($channel_id) ); @@ -577,17 +572,16 @@ function identity_basic_export($channel_id, $items = false) { if($r) $ret['likes'] = $r; - $r = q("select item_id.*, item.mid from item_id left join item on item_id.iid = item.id where item_id.uid = %d", intval($channel_id) ); - + if($r) - $ret['item_id'] = $r; + $ret['item_id'] = $r; - $key = get_config('system','prvkey'); + //$key = get_config('system','prvkey'); - // warning: this may run into memory limits on smaller systems + /** @warning this may run into memory limits on smaller systems */ $r = q("select * from item where (item_flags & %d)>0 and not (item_restrict & %d)>0 and uid = %d", intval(ITEM_WALL), @@ -600,25 +594,17 @@ function identity_basic_export($channel_id, $items = false) { $r = fetch_post_tags($r,true); foreach($r as $rr) $ret['item'][] = encode_item($rr,true); - } - return $ret; + return $ret; } - /** + * @brief Loads a profile into the App structure. * - * @function : profile_load(&$a, $nickname, $profile) - * Generate - * @param App $a - * @param string $nickname - * @param string $profile - * - * Summary: Loads a profile into the App structure. - * The function requires a writeable copy of the main App structure, and the nickname - * of a valid channel. + * The function requires a writeable copy of the main App structure, and the + * nickname of a valid channel. * * Permissions of the current observer are checked. If a restricted profile is available * to the current observer, that will be loaded instead of the channel default profile. @@ -627,9 +613,10 @@ function identity_basic_export($channel_id, $items = false) { * * The channel default theme is also selected for use, unless over-riden elsewhere. * + * @param[in,out] App &$a + * @param string $nickname + * @param string $profile */ - - function profile_load(&$a, $nickname, $profile = '') { logger('profile_load: ' . $nickname . (($profile) ? ' profile: ' . $profile : '')); @@ -637,7 +624,7 @@ function profile_load(&$a, $nickname, $profile = '') { $user = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($nickname) ); - + if(! $user) { logger('profile error: ' . $a->query_string, LOGGER_DEBUG); notice( t('Requested channel is not available.') . EOL ); @@ -685,7 +672,6 @@ function profile_load(&$a, $nickname, $profile = '') { ); } - if(! $p) { logger('profile error: ' . $a->query_string, LOGGER_DEBUG); notice( t('Requested profile is not available.') . EOL ); @@ -731,10 +717,11 @@ function profile_load(&$a, $nickname, $profile = '') { $p[0]['picdate'] = $z[0]['xchan_photo_date']; $p[0]['reddress'] = str_replace('@','@',$z[0]['xchan_addr']); } - + // fetch user tags if this isn't the default profile if(! $p[0]['is_default']) { + /** @BUG $profile_uid is undefinded for this query, so should not work. */ $x = q("select `keywords` from `profile` where uid = %d and `is_default` = 1 limit 1", intval($profile_uid) ); @@ -746,7 +733,6 @@ function profile_load(&$a, $nickname, $profile = '') { $keywords = str_replace(array('#',',',' ',',,'),array('',' ',',',','),$p[0]['keywords']); if(strlen($keywords) && $can_view_profile) $a->page['htmlhead'] .= '<meta name="keywords" content="' . htmlentities($keywords,ENT_COMPAT,'UTF-8') . '" />' . "\r\n" ; - } $a->profile = $p[0]; @@ -758,7 +744,6 @@ function profile_load(&$a, $nickname, $profile = '') { if($can_view_profile) { $online = get_online_status($nickname); $a->profile['online_status'] = $online['result']; - } if(local_channel()) { @@ -766,7 +751,7 @@ function profile_load(&$a, $nickname, $profile = '') { $_SESSION['mobile_theme'] = $a->profile['channel_mobile_theme']; } - /** + /* * load/reload current theme info */ @@ -778,36 +763,34 @@ function profile_load(&$a, $nickname, $profile = '') { // if (file_exists($theme_info_file)){ // require_once($theme_info_file); // } - - return; } -function profile_create_sidebar(&$a,$connect = true) { +/** + * @brief + * + * @param App &$a + * @param boolean $connect + */ +function profile_create_sidebar(&$a, $connect = true) { - $block = (((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) ? true : false); + $block = (((get_config('system', 'block_public')) && (! local_channel()) && (! remote_channel())) ? true : false); - $a->set_widget('profile',profile_sidebar($a->profile, $block, $connect)); - return; + $a->set_widget('profile', profile_sidebar($a->profile, $block, $connect)); } - /** + * @brief Formats a profile for display in the sidebar. * - * Function: profile_sidebar - * - * Formats a profile for display in the sidebar. * It is very difficult to templatise the HTML completely * because of all the conditional logic. * - * @parameter: array $profile + * @param array $profile + * @param int $block + * @param boolean $show_connect * - * Returns HTML string stuitable for sidebar inclusion + * @return HTML string suitable for sidebar inclusion * Exceptions: Returns empty string if passed $profile is wrong type or not populated - * */ - - - function profile_sidebar($profile, $block = 0, $show_connect = true) { $a = get_app(); @@ -816,14 +799,12 @@ function profile_sidebar($profile, $block = 0, $show_connect = true) { $o = ''; $location = false; - $address = false; $pdesc = true; $reddress = true; if((! is_array($profile)) && (! count($profile))) return $o; - head_set_icon($profile['thumb']); $is_owner = (($profile['uid'] == local_channel()) ? true : false); @@ -851,13 +832,11 @@ function profile_sidebar($profile, $block = 0, $show_connect = true) { // show edit profile to yourself if($is_owner) { - $profile['menu'] = array( 'chg_photo' => t('Change profile photo'), 'entries' => array(), ); - $multi_profiles = feature_enabled(local_channel(), 'multi_profiles'); if($multi_profiles) { $profile['edit'] = array($a->get_baseurl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles')); @@ -865,10 +844,9 @@ function profile_sidebar($profile, $block = 0, $show_connect = true) { } else $profile['edit'] = array($a->get_baseurl() . '/profiles/' . $profile['id'], t('Edit Profile'),'',t('Edit Profile')); - + $r = q("SELECT * FROM `profile` WHERE `uid` = %d", local_channel()); - if($r) { foreach($r as $rr) { @@ -901,21 +879,21 @@ function profile_sidebar($profile, $block = 0, $show_connect = true) { $marital = ((x($profile,'marital') == 1) ? t('Status:') : False); $homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False); $profile['online'] = (($profile['online_status'] === 'online') ? t('Online Now') : False); -logger('online: ' . $profile['online']); + logger('online: ' . $profile['online']); if(! perm_is_allowed($profile['uid'],((is_array($observer)) ? $observer['xchan_hash'] : ''),'view_profile')) { $block = true; } if(($profile['hidewall'] && (! local_channel()) && (! remote_channel())) || $block ) { - $location = $reddress = $pdesc = $gender = $marital = $homepage = $online = False; + $location = $reddress = $pdesc = $gender = $marital = $homepage = False; } $firstname = ((strpos($profile['channel_name'],' ')) ? trim(substr($profile['channel_name'],0,strpos($profile['channel_name'],' '))) : $profile['channel_name']); $lastname = (($firstname === $profile['channel_name']) ? '' : trim(substr($profile['channel_name'],strlen($firstname)))); - $diaspora = array( + $diaspora = array( 'podloc' => z_root(), 'searchable' => (($block) ? 'false' : 'true'), 'nickname' => $profile['channel_address'], @@ -972,9 +950,9 @@ logger('online: ' . $profile['online']); } -// FIXME or remove - - +/** + * @FIXME or remove + */ function get_birthdays() { $a = get_app(); @@ -1032,7 +1010,6 @@ logger('online: ' . $profile['online']); $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : ''); $rr['startime'] = Null; $rr['today'] = $today; - } } } @@ -1046,14 +1023,13 @@ logger('online: ' . $profile['online']); '$events' => $r, '$lbr' => '{', // raw brackets mess up if/endif macro processing '$rbr' => '}' - )); } -// FIXME - - +/** + * @FIXME + */ function get_events() { require_once('include/bbcode.php'); @@ -1087,7 +1063,6 @@ logger('online: ' . $profile['online']); } $classtoday = (($istoday) ? 'event-today' : ''); - foreach($r as &$rr) { if($rr['adjust']) $md = datetime_convert('UTC',$a->timezone,$rr['start'],'Y/m'); @@ -1134,19 +1109,19 @@ function advanced_profile(&$a) { if($a->profile['name']) { $tpl = get_markup_template('profile_advanced.tpl'); - + $profile = array(); - + $profile['fullname'] = array( t('Full Name:'), $a->profile['name'] ) ; - + if($a->profile['gender']) $profile['gender'] = array( t('Gender:'), $a->profile['gender'] ); - + $ob_hash = get_observer_hash(); if($ob_hash && perm_is_allowed($a->profile['profile_uid'],$ob_hash,'post_like')) { $profile['canlike'] = true; $profile['likethis'] = t('Like this channel'); $profile['profile_guid'] = $a->profile['profile_guid']; - } + } $likers = q("select liker, xchan.* from likes left join xchan on liker = xchan_hash where channel_id = %d and target_type = '%s' and verb = '%s'", intval($a->profile['profile_uid']), @@ -1177,19 +1152,19 @@ function advanced_profile(&$a) { : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],5) . ' 00:00 +00:00',$short_bd_format))); } $profile['birthday'] = array( t('Birthday:'), $val); - } - 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($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['with']) $profile['marital']['with'] = bbcode($a->profile['with']); + if($a->profile['with']) + $profile['marital']['with'] = bbcode($a->profile['with']); if(strlen($a->profile['howlong']) && $a->profile['howlong'] !== NULL_DATE) { - $profile['howlong'] = relative_date($a->profile['howlong'], t('for %1$d %2$s')); + $profile['howlong'] = relative_date($a->profile['howlong'], t('for %1$d %2$s')); } if($a->profile['sexual']) $profile['sexual'] = array( t('Sexual Preference:'), $a->profile['sexual'] ); @@ -1245,54 +1220,55 @@ function advanced_profile(&$a) { // logger('mod_profile: things: ' . print_r($things,true), LOGGER_DATA); - return replace_macros($tpl, array( - '$title' => t('Profile'), + return replace_macros($tpl, array( + '$title' => t('Profile'), '$canlike' => (($profile['canlike'])? true : false), '$likethis' => t('Like this thing'), - '$profile' => $profile, + '$profile' => $profile, '$things' => $things - )); - } + )); + } return ''; } - - function get_my_url() { - if(x($_SESSION,'zrl_override')) + if(x($_SESSION, 'zrl_override')) return $_SESSION['zrl_override']; - if(x($_SESSION,'my_url')) + if(x($_SESSION, 'my_url')) return $_SESSION['my_url']; + return false; } function get_my_address() { - if(x($_SESSION,'zid_override')) + if(x($_SESSION, 'zid_override')) return $_SESSION['zid_override']; - if(x($_SESSION,'my_address')) + if(x($_SESSION, 'my_address')) return $_SESSION['my_address']; + return false; } /** - * @function zid_init(&$a) - * If somebody arrives at our site using a zid, add their xchan to our DB if we don't have it already. - * And if they aren't already authenticated here, attempt reverse magic auth. + * @brief + * + * If somebody arrives at our site using a zid, add their xchan to our DB if we don't have it already. + * And if they aren't already authenticated here, attempt reverse magic auth. + * + * @param App &$a * * @hooks 'zid_init' * string 'zid' - their zid * string 'url' - the destination url - * */ - function zid_init(&$a) { $tmp_str = get_my_address(); if(validate_email($tmp_str)) { proc_run('php','include/gprobe.php',bin2hex($tmp_str)); $arr = array('zid' => $tmp_str, 'url' => $a->cmd); - call_hooks('zid_init',$arr); + call_hooks('zid_init',$arr); if(! local_channel()) { $r = q("select * from hubloc where hubloc_addr = '%s' order by hubloc_connected desc limit 1", dbesc($tmp_str) @@ -1314,8 +1290,8 @@ function zid_init(&$a) { } /** - * @function zid($s,$address = '') - * Adds a zid parameter to a url + * @brief Adds a zid parameter to a url. + * * @param string $s * The url to accept the zid * @param boolean $address @@ -1327,31 +1303,33 @@ function zid_init(&$a) { * string zid - urlencoded zid * string result - the return string we calculated, change it if you want to return something else */ - - function zid($s,$address = '') { - if(! strlen($s) || strpos($s,'zid=')) + if (! strlen($s) || strpos($s,'zid=')) return $s; + $has_params = ((strpos($s,'?')) ? true : false); - $num_slashes = substr_count($s,'/'); - if(! $has_params) - $has_params = ((strpos($s,'&')) ? true : false); + $num_slashes = substr_count($s, '/'); + if (! $has_params) + $has_params = ((strpos($s, '&')) ? true : false); + $achar = strpos($s,'?') ? '&' : '?'; $mine = get_my_url(); $myaddr = (($address) ? $address : get_my_address()); - // FIXME checking against our own channel url is no longer reliable. We may have a lot - // of urls attached to out channel. Should probably match against our site, since we - // will not need to remote authenticate on our own site anyway. + /** @FIXME checking against our own channel url is no longer reliable. We may have a lot + * of urls attached to out channel. Should probably match against our site, since we + * will not need to remote authenticate on our own site anyway. + */ - if($mine && $myaddr && (! link_compare($mine,$s))) + if ($mine && $myaddr && (! link_compare($mine,$s))) $zurl = $s . (($num_slashes >= 3) ? '' : '/') . $achar . 'zid=' . urlencode($myaddr); else $zurl = $s; $arr = array('url' => $s, 'zid' => urlencode($myaddr), 'result' => $zurl); call_hooks('zid', $arr); + return $arr['result']; } @@ -1371,55 +1349,45 @@ function get_theme_uid() { $x = get_sys_channel(); if($x) return $x['channel_id']; - } + } + return $uid; } /** -* @function get_default_profile_photo($size = 175) -* Retrieves the path of the default_profile_photo for this system -* with the specified size. +* @brief Retrieves the path of the default_profile_photo for this system +* with the specified size. +* * @param int $size -* one of (175, 80, 48) +* one of (175, 80, 48) * @returns string -* */ - function get_default_profile_photo($size = 175) { - $scheme = get_config('system','default_profile_photo'); - if(! $scheme) - $scheme = 'rainbow_man'; - return 'images/default_profile_photos/' . $scheme . '/' . $size . '.png'; -} + $scheme = get_config('system','default_profile_photo'); + if(! $scheme) + $scheme = 'rainbow_man'; + return 'images/default_profile_photos/' . $scheme . '/' . $size . '.png'; +} /** + * @brief Test whether a given identity is NOT a member of the Red Matrix. * - * @function is_foreigner($s) - * Test whether a given identity is NOT a member of the Red Matrix * @param string $s; * xchan_hash of the identity in question - * * @returns boolean true or false - * */ - function is_foreigner($s) { - return((strpbrk($s,'.:@')) ? true : false); + return((strpbrk($s, '.:@')) ? true : false); } - /** + * @brief Test whether a given identity is a member of the Red Matrix. * - * @function is_member($s) - * Test whether a given identity is a member of the Red Matrix * @param string $s; * xchan_hash of the identity in question - * * @returns boolean true or false - * */ - function is_member($s) { return((is_foreigner($s)) ? false : true); } @@ -1466,8 +1434,8 @@ function remote_online_status($webbie) { if($j) $result = (($j['result']) ? $j['result'] : false); } - return $result; + return $result; } @@ -1479,17 +1447,20 @@ function get_channel_by_nick($nick) { } - +/** + * @brief + * + * @return string + */ function identity_selector() { - if(local_channel()) { + if (local_channel()) { $r = q("select channel.*, xchan.* from channel left join xchan on channel.channel_hash = xchan.xchan_hash where channel.channel_account_id = %d and (channel_pageflags & %d) = 0 order by channel_name ", intval(get_account_id()), intval(PAGE_REMOVED) ); - if(count($r) > 1) { - $selected_channel = null; - $account = get_app()->get_account(); - $o = replace_macros(get_markup_template('channel_id_select.tpl'),array( + if (count($r) > 1) { + //$account = get_app()->get_account(); + $o = replace_macros(get_markup_template('channel_id_select.tpl'), array( '$channels' => $r, '$selected' => local_channel() )); @@ -1509,6 +1480,7 @@ function is_public_profile() { $channel = get_app()->get_channel(); if($channel && $channel['channel_r_profile'] == PERMS_PUBLIC) return true; + return false; } @@ -1524,7 +1496,6 @@ function get_profile_fields_basic($filter = 0) { $x[$f] = 1; return $x; - } @@ -1538,6 +1509,7 @@ function get_profile_fields_advanced($filter = 0) { if($basic) foreach($basic as $f => $v) $x[$f] = $v; + if($profile_fields_advanced) foreach($profile_fields_advanced as $f) $x[$f] = 1; @@ -1546,28 +1518,26 @@ function get_profile_fields_advanced($filter = 0) { } /** - * @function notifications_off($channel_id) - * Clear notifyflags for a channel - most likely during bulk import of content or other activity that is likely - * to generate huge amounts of undesired notifications. + * @brief Clear notifyflags for a channel. + * + * Most likely during bulk import of content or other activity that is likely + * to generate huge amounts of undesired notifications. + * * @param int $channel_id * The channel to disable notifications for * @returns int * Current notification flag value. Send this to notifications_on() to restore the channel settings when finished * with the activity requiring notifications_off(); */ - - - function notifications_off($channel_id) { $r = q("select channel_notifyflags from channel where channel_id = %d limit 1", intval($channel_id) ); - $x = q("update channel set channel_notifyflags = 0 where channel_id = %d", + q("update channel set channel_notifyflags = 0 where channel_id = %d", intval($channel_id) ); return intval($r[0]['channel_notifyflags']); - } @@ -1588,5 +1558,6 @@ function get_channel_default_perms($uid) { ); if($r) return $r[0]['abook_my_perms']; + return 0; } diff --git a/include/items.php b/include/items.php index 8e293d761..4b83ce3e3 100755 --- a/include/items.php +++ b/include/items.php @@ -1,4 +1,7 @@ -<?php /** @file */ +<?php +/** + * @file include/items.php + */ require_once('include/bbcode.php'); require_once('include/oembed.php'); @@ -6,8 +9,14 @@ require_once('include/crypto.php'); require_once('include/photo/photo_driver.php'); require_once('include/permissions.php'); - -function collect_recipients($item,&$private_envelope) { +/** + * @brief Collects recipients. + * + * @param array $item + * @param[out] boolean $private_envelope + * @return array containing the recipients + */ +function collect_recipients($item, &$private_envelope) { require_once('include/group.php'); @@ -67,7 +76,7 @@ function collect_recipients($item,&$private_envelope) { $private_envelope = false; require_once('include/identity.php'); - $sys = get_sys_channel(); + //$sys = get_sys_channel(); if(array_key_exists('public_policy',$item) && $item['public_policy'] !== 'self') { $r = q("select abook_xchan, xchan_network from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and not (abook_flags & %d)>0 ", @@ -84,7 +93,7 @@ function collect_recipients($item,&$private_envelope) { switch($policy) { case 'net': case 'aut': - case 'sit': + case 'sit': case 'any': case 'con': if($rr['xchan_network'] != 'zot') @@ -103,7 +112,6 @@ function collect_recipients($item,&$private_envelope) { } } - // This is a somewhat expensive operation but important. // Don't send this item to anybody who isn't allowed to see it @@ -129,7 +137,6 @@ function collect_recipients($item,&$private_envelope) { $recipients[] = $item['owner_xchan']; return $recipients; - } /** @@ -139,30 +146,35 @@ function collect_recipients($item,&$private_envelope) { * They can still be addressed individually. * Networks may need to be added or removed from this list as circumstances change. * - * Update: this may need to be the default, which will force people to opt-in to sending stuff - * privately to insecure platforms. + * Update: this may need to be the default, which will force people to opt-in to + * sending stuff privately to insecure platforms. + * + * @param int $channel_id + * @param array $arr + * @return array containing the sane xchan_hashes */ - -function filter_insecure($channel_id,$arr) { +function filter_insecure($channel_id, $arr) { $insecure_nets = " and not xchan_network in ('diaspora', 'friendica-over-diaspora') "; $ret = array(); - if((! intval(get_config($channel_id,'system','filter_insecure_collections'))) || (! $arr)) + if((! intval(get_config($channel_id, 'system', 'filter_insecure_collections'))) || (! $arr)) return $arr; $str = ''; foreach($arr as $rr) { if(strlen($str)) $str .= ','; + $str .= "'" . dbesc($rr) . "'"; } - $r = q("select xchan_hash from xchan where xchan_hash in ($str) $insecure_nets "); + $r = q("select xchan_hash from xchan where xchan_hash in ($str) $insecure_nets"); if($r) { foreach($r as $rr) { $ret[] = $rr['xchan_hash']; } } + return $ret; } @@ -173,12 +185,13 @@ function comments_are_now_closed($item) { if($d > $item['comments_closed']) return true; } + return false; } /** - * @function can_comment_on_post($observer_xchan,$item); + * @brief * * This function examines the comment_policy attached to an item and decides if the current observer has * sufficient privileges to comment. This will normally be called on a remote site where perm_is_allowed() @@ -187,16 +200,18 @@ function comments_are_now_closed($item) { * If it is, you should be able to use perm_is_allowed( ... 'post_comments'), and if it isn't you need to call * can_comment_on_post() * We also check the comments_closed date/time on the item if this is set. + * + * @param string $observer_xchan + * @param array $item + * @return boolean */ - -function can_comment_on_post($observer_xchan,$item) { +function can_comment_on_post($observer_xchan, $item) { // logger('can_comment_on_post: comment_policy: ' . $item['comment_policy'], LOGGER_DEBUG); if(! $observer_xchan) return false; - if($item['comment_policy'] === 'none') return false; @@ -205,6 +220,7 @@ function can_comment_on_post($observer_xchan,$item) { if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) return true; + switch($item['comment_policy']) { case 'self': if($observer_xchan === $item['author_xchan'] || $observer_xchan === $item['owner_xchan']) @@ -233,36 +249,36 @@ function can_comment_on_post($observer_xchan,$item) { return true; if(strstr($item['comment_policy'],'site:') && strstr($item['comment_policy'],get_app()->get_hostname())) return true; - + return false; } /** - * @function add_source_route($iid,$hash) - * Adds $hash to the item source route specified by $iid - * @param integer $iid - * item['id'] of target item - * @param string $hash - * xchan_hash of the channel that sent the item - * Modifies item pointed to by $iid + * @brief Adds $hash to the item source route specified by $iid. * * $item['route'] contains a comma-separated list of xchans that sent the current message, * somewhat analogous to the * Received: header line in email. We can use this to perform * loop detection and to avoid sending a particular item to any "upstream" sender (they - * already have a copy because they sent it to us). + * already have a copy because they sent it to us). + * + * Modifies item in the database pointed to by $iid. * + * @param integer $iid + * item['id'] of target item + * @param string $hash + * xchan_hash of the channel that sent the item */ - -function add_source_route($iid,$hash) { +function add_source_route($iid, $hash) { // logger('add_source_route ' . $iid . ' ' . $hash, LOGGER_DEBUG); if((! $iid) || (! $hash)) return; + $r = q("select route from item where id = %d limit 1", intval($iid) ); if($r) { - $new_route = (($r[0]['route']) ? $r[0]['route'] . ',' : '') . $hash; + $new_route = (($r[0]['route']) ? $r[0]['route'] . ',' : '') . $hash; q("update item set route = '%s' where id = %d", (dbesc($new_route)), intval($iid) @@ -271,17 +287,17 @@ function add_source_route($iid,$hash) { } - /** - * @function red_zrl_callback - * preg_match function when fixing 'naked' links in mod item.php - * Check if we've got a hubloc for the site and use a zrl if we do, a url if we don't. - * Remove any existing zid= param which may have been pasted by mistake - and will have - * the author's credentials. zid's are dynamic and can't really be passed around like - * that. + * @brief preg_match function when fixing 'naked' links in mod item.php. + * + * Check if we've got a hubloc for the site and use a zrl if we do, a url if we don't. + * Remove any existing zid= param which may have been pasted by mistake - and will have + * the author's credentials. zid's are dynamic and can't really be passed around like + * that. + * + * @param array $matches + * @return string */ - - function red_zrl_callback($matches) { require_once('include/hubloc.php'); $zrl = is_matrix_url($matches[2]); @@ -296,19 +312,24 @@ function red_zrl_callback($matches) { $matches[1] = ''; if($zrl) return $matches[1] . '#^[zrl=' . $matches[2] . ']' . $matches[2] . '[/zrl]'; + return $matches[1] . '#^[url=' . $matches[2] . ']' . $matches[2] . '[/url]'; } - -// If we've got a url or zrl tag with a naked url somewhere in the link text, -// escape it with quotes unless the naked url is a linked photo. - +/** + * If we've got a url or zrl tag with a naked url somewhere in the link text, + * escape it with quotes unless the naked url is a linked photo. + * + * @param array $matches + * @return string + */ function red_escape_zrl_callback($matches) { // Uncertain why the url/zrl forms weren't picked up by the non-greedy regex. - if((strpos($matches[3],'zmg') !== false) || (strpos($matches[3],'img') !== false) || (strpos($matches[3],'zrl') !== false) || (strpos($matches[3],'url') !== false)) + if((strpos($matches[3], 'zmg') !== false) || (strpos($matches[3], 'img') !== false) || (strpos($matches[3],'zrl') !== false) || (strpos($matches[3],'url') !== false)) return $matches[0]; + return '[' . $matches[1] . 'rl' . $matches[2] . ']' . $matches[3] . '"' . $matches[4] . '"' . $matches[5] . '[/' . $matches[6] . 'rl]'; } @@ -318,7 +339,6 @@ function red_escape_codeblock($m) { function red_unescape_codeblock($m) { return '[' . $m[2] . base64_decode($m[1]) . '[/' . $m[2] . ']'; - } @@ -334,28 +354,23 @@ function red_zrlify_img_callback($matches) { if($zrl) return '[zmg' . $matches[1] . ']' . $matches[2] . '[/zmg]'; + return $matches[0]; } - - /** - * @function post_activity_item($arr) - * - * post an activity - * - * @param array $arr + * @brief Post an activity. * * In its simplest form one needs only to set $arr['body'] to post a note to the logged in channel's wall. * Much more complex activities can be created. Permissions are checked. No filtering, tag expansion * or other processing is performed. * - * @returns array - * 'success' => true or false - * 'activity' => the resulting activity if successful + * @param array $arr + * @returns array + * * \e boolean \b success true or false + * * \e array \b activity the resulting activity if successful */ - function post_activity_item($arr) { $ret = array('success' => false); @@ -369,14 +384,13 @@ function post_activity_item($arr) { $arr['item_flags'] = ITEM_ORIGIN; else $arr['item_flags'] = ITEM_ORIGIN | ITEM_WALL | ITEM_THREAD_TOP; - } - + } $channel = get_app()->get_channel(); $observer = get_app()->get_observer(); - $arr['aid'] = ((x($arr,'aid')) ? $arr['aid'] : $channel['channel_account_id']); - $arr['uid'] = ((x($arr,'uid')) ? $arr['uid'] : $channel['channel_id']); + $arr['aid'] = ((x($arr,'aid')) ? $arr['aid'] : $channel['channel_account_id']); + $arr['uid'] = ((x($arr,'uid')) ? $arr['uid'] : $channel['channel_id']); if(! perm_is_allowed($arr['uid'],$observer['xchan_hash'],(($is_comment) ? 'post_comments' : 'post_wall'))) { $ret['message'] = t('Permission denied'); @@ -410,19 +424,18 @@ function post_activity_item($arr) { $arr['body'] = json_encode(crypto_encapsulate($arr['body'],$key)); } - $arr['mid'] = ((x($arr,'mid')) ? $arr['mid'] : item_message_id()); - $arr['parent_mid'] = ((x($arr,'parent_mid')) ? $arr['parent_mid'] : $arr['mid']); - $arr['thr_parent'] = ((x($arr,'thr_parent')) ? $arr['thr_parent'] : $arr['mid']); + $arr['mid'] = ((x($arr,'mid')) ? $arr['mid'] : item_message_id()); + $arr['parent_mid'] = ((x($arr,'parent_mid')) ? $arr['parent_mid'] : $arr['mid']); + $arr['thr_parent'] = ((x($arr,'thr_parent')) ? $arr['thr_parent'] : $arr['mid']); - $arr['owner_xchan'] = ((x($arr,'owner_xchan')) ? $arr['owner_xchan'] : $channel['channel_hash']); - $arr['author_xchan'] = ((x($arr,'author_xchan')) ? $arr['author_xchan'] : $observer['xchan_hash']); + $arr['owner_xchan'] = ((x($arr,'owner_xchan')) ? $arr['owner_xchan'] : $channel['channel_hash']); + $arr['author_xchan'] = ((x($arr,'author_xchan')) ? $arr['author_xchan'] : $observer['xchan_hash']); - $arr['verb'] = ((x($arr,'verb')) ? $arr['verb'] : ACTIVITY_POST); - $arr['obj_type'] = ((x($arr,'obj_type')) ? $arr['obj_type'] : ACTIVITY_OBJ_NOTE); + $arr['verb'] = ((x($arr,'verb')) ? $arr['verb'] : ACTIVITY_POST); + $arr['obj_type'] = ((x($arr,'obj_type')) ? $arr['obj_type'] : ACTIVITY_OBJ_NOTE); if($is_comment) $arr['obj_type'] = ACTIVITY_OBJ_COMMENT; - $arr['allow_cid'] = ((x($arr,'allow_cid')) ? $arr['allow_cid'] : $channel['channel_allow_cid']); $arr['allow_gid'] = ((x($arr,'allow_gid')) ? $arr['allow_gid'] : $channel['channel_allow_gid']); $arr['deny_cid'] = ((x($arr,'deny_cid')) ? $arr['deny_cid'] : $channel['channel_deny_cid']); @@ -430,7 +443,6 @@ function post_activity_item($arr) { $arr['comment_policy'] = map_scope($channel['channel_w_comment']); - if ((! $arr['plink']) && ($arr['item_flags'] & ITEM_THREAD_TOP)) { $arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid']; } @@ -447,7 +459,6 @@ function post_activity_item($arr) { return $ret; } - $post = item_store($arr); if($post['success']) $post_id = $post['item_id']; @@ -465,15 +476,15 @@ function post_activity_item($arr) { } return $ret; - } /** - * @function get_public_feed($channel,$params) - * generate an Atom feed + * @brief Generate an Atom feed. + * + * @param array $channel + * @param array $params */ - -function get_public_feed($channel,$params) { +function get_public_feed($channel, $params) { $type = 'xml'; $begin = NULL_DATE; @@ -494,7 +505,7 @@ function get_public_feed($channel,$params) { $params['direction'] = ((x($params,'direction')) ? $params['direction'] : 'desc'); $params['pages'] = ((x($params,'pages')) ? intval($params['pages']) : 0); $params['top'] = ((x($params,'top')) ? intval($params['top']) : 0); - + switch($params['type']) { case 'json': header("Content-type: application/atom+json"); @@ -505,24 +516,26 @@ function get_public_feed($channel,$params) { break; } - - return get_feed_for($channel,get_observer_hash(),$params); + return get_feed_for($channel, get_observer_hash(), $params); } - - - +/** + * @brief + * + * @param array $channel + * @param string $observer_hash + * @param array $params + * @return string + */ function get_feed_for($channel, $observer_hash, $params) { if(! channel) http_status_exit(401); - if($params['pages']) { if(! perm_is_allowed($channel['channel_id'],$observer_hash,'view_pages')) http_status_exit(403); - } - else { + } else { if(! perm_is_allowed($channel['channel_id'],$observer_hash,'view_stream')) http_status_exit(403); } @@ -538,7 +551,6 @@ function get_feed_for($channel, $observer_hash, $params) { 'top' => $params['top'] ), $channel, $observer_hash, CLIENT_MODE_NORMAL, get_app()->module); - $feed_template = get_markup_template('atom_feed.tpl'); $atom = ''; @@ -571,7 +583,8 @@ function get_feed_for($channel, $observer_hash, $params) { if($item['item_private']) continue; - $atom .= atom_entry($item,$type,null,$owner,true); + /** @BUG $owner is undefined in this call */ + $atom .= atom_entry($item, $type, null, $owner, true); } } @@ -604,11 +617,11 @@ function construct_activity_object($item) { if($r->title) $o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n"; if($r->links) { - // FIXME!! + /** @FIXME!! */ if(substr($r->link,0,1) === '<') { $r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link); $o .= $r->link; - } + } else $o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n"; } @@ -635,7 +648,7 @@ function construct_activity_target($item) { if($r->title) $o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n"; if($r->links) { - // FIXME !!! + /** @FIXME !!! */ if(substr($r->link,0,1) === '<') { if(strstr($r->link,'&') && (! strstr($r->link,'&'))) $r->link = str_replace('&','&', $r->link); @@ -654,12 +667,15 @@ function construct_activity_target($item) { return ''; } -/* limit_body_size() +/** + * @brief Limit lenght on imported system messages. * - * The purpose of this function is to apply system message length limits to - * imported messages without including any embedded photos in the length + * The purpose of this function is to apply system message length limits to + * imported messages without including any embedded photos in the length. + * + * @param string $body + * @return string|unknown */ - function limit_body_size($body) { $maxlen = get_max_import_size(); @@ -671,7 +687,6 @@ function limit_body_size($body) { $orig_body = $body; $new_body = ''; $textlen = 0; - $max_found = false; $img_start = strpos($orig_body, '[img'); $img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false); @@ -700,7 +715,6 @@ function limit_body_size($body) { $new_body = $new_body . substr($orig_body, $img_start, $img_end - $img_start); } else { - if( ($textlen + $img_end) > $maxlen ) { if($textlen < $maxlen) { $new_body = $new_body . substr($orig_body, 0, $maxlen - $textlen); @@ -836,12 +850,8 @@ function get_item_elements($x) { $arr['item_flags'] = 0; - if(array_key_exists('flags',$x) && in_array('consensus',$x['flags'])) $arr['item_flags'] |= ITEM_CONSENSUS; - - - if(array_key_exists('flags',$x) && in_array('deleted',$x['flags'])) $arr['item_restrict'] |= ITEM_DELETED; if(array_key_exists('flags',$x) && in_array('hidden',$x['flags'])) @@ -868,7 +878,6 @@ function get_item_elements($x) { return array(); } - if($arr['sig']) { $r = q("select xchan_pubkey from xchan where xchan_hash = '%s' limit 1", dbesc($arr['author_xchan']) @@ -885,7 +894,6 @@ function get_item_elements($x) { // and we need plaintext to do that. - if(intval($arr['item_private'])) { $arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; if($arr['title']) @@ -914,7 +922,6 @@ function get_item_elements($x) { } return $arr; - } @@ -998,7 +1005,6 @@ function import_author_rss($x) { } return false; - } function import_author_unknown($x) { @@ -1043,7 +1049,6 @@ function import_author_unknown($x) { } return false; - } function encode_item($item,$mirror = false) { @@ -1150,7 +1155,6 @@ function encode_item($item,$mirror = false) { logger('encode_item: ' . print_r($x,true), LOGGER_DATA); return $x; - } @@ -1174,7 +1178,7 @@ function map_scope($scope,$strip = false) { default: return 'contacts'; } -} +} function translate_scope($scope) { if(! $scope || $scope === 'public') @@ -1269,12 +1273,16 @@ function decode_tags($t) { } return $ret; } - return ''; + return ''; } -// santise a potentially complex array - +/** + * @brief Santise a potentially complex array. + * + * @param array $arr + * @return array|string + */ function activity_sanitise($arr) { if($arr) { if(is_array($arr)) { @@ -1291,11 +1299,16 @@ function activity_sanitise($arr) { return htmlspecialchars($arr, ENT_COMPAT,'UTF-8', false); } } + return ''; } -// sanitise a simple linear array - +/** + * @brief Sanitise a simple linear array. + * + * @param array $arr + * @return array|string + */ function array_sanitise($arr) { if($arr) { $ret = array(); @@ -1304,6 +1317,7 @@ function array_sanitise($arr) { } return $ret; } + return ''; } @@ -1326,7 +1340,7 @@ function encode_item_flags($item) { $ret[] = 'consensus'; if($item['item_private']) $ret[] = 'private'; - + return $ret; } @@ -1419,7 +1433,6 @@ function get_mail_elements($x) { return array(); return $arr; - } @@ -1448,15 +1461,17 @@ function get_profile_elements($x) { $arr['keywords'] = (($x['keywords'] && is_array($x['keywords'])) ? array_sanitise($x['keywords']) : array()); return $arr; - } +/** + * @param object $feed + * @param array $item + * @param[out] array $author + * @return multitype:multitype: string NULL number Ambigous <NULL, string, number> Ambigous <mixed, string> Ambigous <multitype:multitype:string Ambigous <NULL, string> , multitype:multitype:string unknown > multitype:NULL unknown + */ +function get_atom_elements($feed, $item, &$author) { - -function get_atom_elements($feed,$item,&$author) { - - - $best_photo = array(); + //$best_photo = array(); $res = array(); @@ -1531,7 +1546,7 @@ function get_atom_elements($feed,$item,&$author) { if($rawmedia && $rawmedia[0]['attribs']['']['url']) { $author['author_photo'] = strip_tags(unxmlify($rawmedia[0]['attribs']['']['url'])); } - } + } // No photo/profile-link on the item - look at the feed level @@ -1573,9 +1588,9 @@ function get_atom_elements($feed,$item,&$author) { $apps = $item->get_item_tags(NAMESPACE_STATUSNET,'notice_info'); if($apps && $apps[0]['attribs']['']['source']) { $res['app'] = strip_tags(unxmlify($apps[0]['attribs']['']['source'])); - } + } - /** + /* * If there's a copy of the body content which is guaranteed to have survived mangling in transit, use it. */ @@ -1593,10 +1608,8 @@ function get_atom_elements($feed,$item,&$author) { // create a term table item for them. For now just make sure they stay as links. $res['body'] = preg_replace('/\[bookmark(.*?)\](.*?)\[\/bookmark\]/','[url$1]$2[/url]',$res['body']); - } - $res['body'] = limit_body_size($res['body']); // It isn't certain at this point whether our content is plaintext or html and we'd be foolish to trust @@ -1620,8 +1633,6 @@ function get_atom_elements($feed,$item,&$author) { $res['body'] = purify_html($res['body']); $res['body'] = @html2bbcode($res['body']); - - } elseif(! $have_real_body) { @@ -1652,7 +1663,6 @@ function get_atom_elements($feed,$item,&$author) { ); } - $private = $item->get_item_tags(NAMESPACE_DFRN,'private'); if($private && intval($private[0]['data']) > 0) $res['item_private'] = ((intval($private[0]['data'])) ? 1 : 0); @@ -1663,12 +1673,10 @@ function get_atom_elements($feed,$item,&$author) { if($rawlocation) $res['location'] = unxmlify($rawlocation[0]['data']); - $rawcreated = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'published'); if($rawcreated) $res['created'] = unxmlify($rawcreated[0]['data']); - $rawedited = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'updated'); if($rawedited) $res['edited'] = unxmlify($rawedited[0]['data']); @@ -1735,7 +1743,7 @@ function get_atom_elements($feed,$item,&$author) { } // translate OStatus unfollow to activity streams if it happened to get selected - + if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow')) $res['verb'] = ACTIVITY_UNFOLLOW; @@ -1765,7 +1773,7 @@ function get_atom_elements($feed,$item,&$author) { 'url' => $termurl, 'term' => $termterm, ); - } + } } } @@ -1790,6 +1798,7 @@ function get_atom_elements($feed,$item,&$author) { $title = ' '; if(! $type) $type = 'application/octet-stream'; + $res['attach'][] = array('href' => $link, 'length' => $len, 'type' => $type, 'title' => $title ); } } @@ -1817,10 +1826,8 @@ function get_atom_elements($feed,$item,&$author) { // preserve a copy of the original body content in case we later need to parse out any microformat information, e.g. events $obj['orig'] = xmlify($body); if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = purify_html($body); $body = html2bbcode($body); - } $obj['content'] = $body; @@ -1838,7 +1845,7 @@ function get_atom_elements($feed,$item,&$author) { if($child[NAMESPACE_ACTIVITY]['obj_type'][0]['data']) { $res['tgt_type'] = $child[NAMESPACE_ACTIVITY]['obj_type'][0]['data']; $obj['type'] = $child[NAMESPACE_ACTIVITY]['obj_type'][0]['data']; - } + } if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'id') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data']) $obj['id'] = $child[SIMPLEPIE_NAMESPACE_ATOM_10]['id'][0]['data']; if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'link') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['link']) @@ -1849,13 +1856,12 @@ function get_atom_elements($feed,$item,&$author) { $body = $child[SIMPLEPIE_NAMESPACE_ATOM_10]['content'][0]['data']; if(! $body) $body = $child[SIMPLEPIE_NAMESPACE_ATOM_10]['summary'][0]['data']; + // preserve a copy of the original body content in case we later need to parse out any microformat information, e.g. events $obj['orig'] = xmlify($body); if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = purify_html($body); $body = html2bbcode($body); - } $obj['content'] = $body; @@ -1896,6 +1902,7 @@ function encode_rel_links($links) { $o .= 'media:height="' . $link['attribs'][NAMESPACE_MEDIA]['height'] . '" '; $o .= ' />' . "\n" ; } + return xmlify($o); } @@ -1915,7 +1922,7 @@ function item_store($arr,$allow_exec = false) { return $ret; } - $uplinked_comment = false; + //$uplinked_comment = false; // If a page layout is provided, ensure it exists and belongs to us. @@ -1955,8 +1962,6 @@ function item_store($arr,$allow_exec = false) { $arr['item_private'] = ((x($arr,'item_private')) ? intval($arr['item_private']) : 0 ); $arr['item_flags'] = ((x($arr,'item_flags')) ? intval($arr['item_flags']) : 0 ); - - // only detect language if we have text content, and if the post is private but not yet // obscured, make it so. @@ -1966,7 +1971,6 @@ function item_store($arr,$allow_exec = false) { // apply the input filter here - if it is obscured it has been filtered already $arr['body'] = z_input_filter($arr['uid'],$arr['body'],$arr['mimetype']); - if(local_channel() && (! $arr['sig'])) { $channel = get_app()->get_channel(); if($channel['channel_hash'] === $arr['author_xchan']) { @@ -1995,7 +1999,6 @@ function item_store($arr,$allow_exec = false) { if($arr['body']) $arr['body'] = json_encode(crypto_encapsulate($arr['body'],$key)); } - } if((x($arr,'object')) && is_array($arr['object'])) { @@ -2042,13 +2045,12 @@ function item_store($arr,$allow_exec = false) { $arr['public_policy'] = ((x($arr,'public_policy')) ? notags(trim($arr['public_policy'])) : '' ); $arr['comment_policy'] = ((x($arr,'comment_policy')) ? notags(trim($arr['comment_policy'])) : 'contacts' ); - + $arr['item_unseen'] = ((array_key_exists('item_unseen',$arr)) ? intval($arr['item_unseen']) : 1); if($arr['comment_policy'] == 'none') $arr['item_flags'] = $arr['item_flags'] | ITEM_NOCOMMENT; - // handle time travelers // Allow a bit of fudge in case somebody just has a slightly slow/fast clock @@ -2062,8 +2064,6 @@ function item_store($arr,$allow_exec = false) { if(! $arr['plink']) $arr['plink'] = $arr['llink']; - - if($arr['parent_mid'] === $arr['mid']) { $parent_id = 0; $parent_deleted = 0; @@ -2134,13 +2134,12 @@ function item_store($arr,$allow_exec = false) { if($r[0]['item_flags'] & ITEM_WALL) $arr['item_flags'] = $arr['item_flags'] | ITEM_WALL; - // An uplinked comment might arrive with a downstream owner. // Fix it. if($r[0]['owner_xchan'] !== $arr['owner_xchan']) { $arr['owner_xchan'] = $r[0]['owner_xchan']; - $uplinked_comment = true; +// $uplinked_comment = true; } // if the parent is private, force privacy for the entire conversation @@ -2164,8 +2163,7 @@ function item_store($arr,$allow_exec = false) { if($parent_deleted) $arr['item_restrict'] = $arr['item_restrict'] | ITEM_DELETED; - - + $r = q("SELECT `id` FROM `item` WHERE `mid` = '%s' AND `uid` = %d LIMIT 1", dbesc($arr['mid']), intval($arr['uid']) @@ -2270,7 +2268,7 @@ function item_store($arr,$allow_exec = false) { } $arr['term'] = $terms; - } + } call_hooks('post_remote_end',$arr); @@ -2337,7 +2335,7 @@ function item_store_update($arr,$allow_exec = false) { logger('item_store_update: original post not found: ' . $orig_post_id); $ret['message'] = 'no original'; return $ret; - } + } // override the unseen flag with the original @@ -2350,13 +2348,12 @@ function item_store_update($arr,$allow_exec = false) { if($orig[0]['item_flags'] & ITEM_OBSCURED) $orig[0]['item_flags'] = $orig[0]['item_flags'] ^ ITEM_OBSCURED; - $arr['item_flags'] = intval($arr['item_flags']) | $orig[0]['item_flags']; $arr['item_restrict'] = intval($arr['item_restrict']) | $orig[0]['item_restrict']; - if(array_key_exists('edit',$arr)) - unset($arr['edit']); + unset($arr['edit']); + $arr['mimetype'] = ((x($arr,'mimetype')) ? notags(trim($arr['mimetype'])) : 'text/bbcode'); if(($arr['mimetype'] == 'application/x-php') && (! $allow_exec)) { @@ -2365,19 +2362,19 @@ function item_store_update($arr,$allow_exec = false) { return $ret; } - if(! ($arr['item_flags'] & ITEM_OBSCURED)) { + if(! ($arr['item_flags'] & ITEM_OBSCURED)) { $arr['lang'] = detect_language($arr['body']); - // apply the input filter here - if it is obscured it has been filtered already - $arr['body'] = z_input_filter($arr['uid'],$arr['body'],$arr['mimetype']); - - if(local_channel() && (! $arr['sig'])) { - $channel = get_app()->get_channel(); - if($channel['channel_hash'] === $arr['author_xchan']) { - $arr['sig'] = base64url_encode(rsa_sign($arr['body'],$channel['channel_prvkey'])); - $arr['item_flags'] |= ITEM_VERIFIED; - } - } + // apply the input filter here - if it is obscured it has been filtered already + $arr['body'] = z_input_filter($arr['uid'],$arr['body'],$arr['mimetype']); + + if(local_channel() && (! $arr['sig'])) { + $channel = get_app()->get_channel(); + if($channel['channel_hash'] === $arr['author_xchan']) { + $arr['sig'] = base64url_encode(rsa_sign($arr['body'],$channel['channel_prvkey'])); + $arr['item_flags'] |= ITEM_VERIFIED; + } + } $allowed_languages = get_pconfig($arr['uid'],'system','allowed_languages'); @@ -2392,17 +2389,15 @@ function item_store_update($arr,$allow_exec = false) { $arr = $translate['item']; } if($arr['item_private']) { - $key = get_config('system','pubkey'); - $arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; - if($arr['title']) - $arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); - if($arr['body']) - $arr['body'] = json_encode(crypto_encapsulate($arr['body'],$key)); - } - + $key = get_config('system','pubkey'); + $arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; + if($arr['title']) + $arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); + if($arr['body']) + $arr['body'] = json_encode(crypto_encapsulate($arr['body'],$key)); + } } - if((x($arr,'object')) && is_array($arr['object'])) { activity_sanitise($arr['object']); $arr['object'] = json_encode($arr['object']); @@ -2418,7 +2413,6 @@ function item_store_update($arr,$allow_exec = false) { $arr['attach'] = json_encode($arr['attach']); } - unset($arr['id']); unset($arr['uid']); unset($arr['aid']); @@ -2465,15 +2459,13 @@ function item_store_update($arr,$allow_exec = false) { $arr['app'] = ((x($arr,'app')) ? notags(trim($arr['app'])) : $orig[0]['app']); // $arr['item_restrict'] = ((x($arr,'item_restrict')) ? intval($arr['item_restrict']) : $orig[0]['item_restrict'] ); // $arr['item_flags'] = ((x($arr,'item_flags')) ? intval($arr['item_flags']) : $orig[0]['item_flags'] ); - + $arr['sig'] = ((x($arr,'sig')) ? $arr['sig'] : ''); $arr['layout_mid'] = ((array_key_exists('layout_mid',$arr)) ? dbesc($arr['layout_mid']) : $orig[0]['layout_mid'] ); $arr['public_policy'] = ((x($arr,'public_policy')) ? notags(trim($arr['public_policy'])) : $orig[0]['public_policy'] ); $arr['comment_policy'] = ((x($arr,'comment_policy')) ? notags(trim($arr['comment_policy'])) : $orig[0]['comment_policy'] ); - - call_hooks('post_remote_update',$arr); if(x($arr,'cancel')) { @@ -2495,11 +2487,11 @@ function item_store_update($arr,$allow_exec = false) { logger('item_store_update: ' . print_r($arr,true), LOGGER_DATA); $str = ''; - foreach($arr as $k => $v) { - if($str) - $str .= ","; - $str .= " `" . $k . "` = '" . $v . "' "; - } + foreach($arr as $k => $v) { + if($str) + $str .= ","; + $str .= " `" . $k . "` = '" . $v . "' "; + } $r = dbq("update `item` set " . $str . " where id = " . $orig_post_id ); @@ -2530,7 +2522,7 @@ function item_store_update($arr,$allow_exec = false) { } $arr['term'] = $terms; - } + } call_hooks('post_remote_update_end',$arr); @@ -2568,8 +2560,9 @@ function store_diaspora_comment_sig($datarray, $channel, $parent_item, $post_id, $signed_text = $datarray['mid'] . ';' . $parent_item['mid'] . ';' . $signed_body . ';' . $diaspora_handle; + /** @FIXME $uprvkey is undefined, do we still need this if-statement? */ if( $uprvkey !== false ) - $authorsig = base64_encode(rsa_sign($signed_text,$channel['channel_prvkey'],'sha256')); + $authorsig = base64_encode(rsa_sign($signed_text, $channel['channel_prvkey'], 'sha256')); else $authorsig = ''; @@ -2630,7 +2623,6 @@ function send_status_notifications($post_id,$item) { $link = get_app()->get_baseurl() . '/display/' . $item['mid']; - $y = q("select id from notify where link = '%s' and uid = %d limit 1", dbesc($link), intval($item['uid']) @@ -2641,50 +2633,50 @@ function send_status_notifications($post_id,$item) { if(! $notify) return; + require_once('include/enotify.php'); notification(array( 'type' => NOTIFY_COMMENT, 'from_xchan' => $item['author_xchan'], 'to_xchan' => $r[0]['channel_hash'], 'item' => $item, - 'link' => $link, + 'link' => $link, 'verb' => ACTIVITY_POST, 'otype' => 'item', 'parent' => $parent, 'parent_mid' => $item['parent_mid'] )); - return; } - - - - function get_item_contact($item,$contacts) { if(! count($contacts) || (! is_array($item))) return false; + foreach($contacts as $contact) { if($contact['id'] == $item['contact-id']) { return $contact; break; // NOTREACHED } } + return false; } - -function tag_deliver($uid,$item_id) { - - // Called when we deliver things that might be tagged in ways that require delivery processing. - // Handles community tagging of posts and also look for mention tags - // and sets up a second delivery chain if appropriate - - $a = get_app(); +/** + * @brief Called when we deliver things that might be tagged in ways that require delivery processing. + * + * Handles community tagging of posts and also look for mention tags and sets up + * a second delivery chain if appropriate. + * + * @param int $uid + * @param int $item_id + */ +function tag_deliver($uid, $item_id) { $mention = false; - /** + /* * Fetch stuff we need - a channel and an item */ @@ -2693,7 +2685,7 @@ function tag_deliver($uid,$item_id) { ); if(! $u) return; - + $i = q("select * from item where id = %d and uid = %d limit 1", intval($item_id), intval($uid) @@ -2713,8 +2705,7 @@ function tag_deliver($uid,$item_id) { return; } - - /** + /* * Seems like a good place to plug in a poke notification. */ @@ -2722,7 +2713,7 @@ function tag_deliver($uid,$item_id) { $poke_notify = true; if(($item['obj_type'] == "") || ($item['obj_type'] !== ACTIVITY_OBJ_PERSON) || (! $item['object'])) - $poke_notify = false; + $poke_notify = false; $obj = json_decode_plus($item['object']); if($obj) { @@ -2732,7 +2723,6 @@ function tag_deliver($uid,$item_id) { if($item['item_restrict'] & ITEM_DELETED) $poke_notify = false; - $verb = urldecode(substr($item['verb'],strpos($item['verb'],'#')+1)); if($poke_notify) { require_once('include/enotify.php'); @@ -2749,7 +2739,7 @@ function tag_deliver($uid,$item_id) { } } - /** + /* * Do community tagging */ @@ -2783,7 +2773,7 @@ function tag_deliver($uid,$item_id) { dbesc(datetime_convert()), dbesc($j_tgt['id']), intval($u[0]['channel_id']) - ); + ); proc_run('php','include/notifier.php','edit_post',$p[0]['id']); } } @@ -2793,7 +2783,7 @@ function tag_deliver($uid,$item_id) { logger('tag_deliver: tag permission denied for ' . $u[0]['channel_address']); } - /** + /* * A "union" is a message which our channel has sourced from another channel. * This sets up a second delivery chain just like forum tags do. * Find out if this is a source-able post. @@ -2819,11 +2809,10 @@ function tag_deliver($uid,$item_id) { } - /** + /* * Now we've got those out of the way. Let's see if this is a post that's tagged for re-delivery */ - $terms = get_terms_oftype($item['term'],TERM_MENTION); if($terms) @@ -2833,20 +2822,20 @@ function tag_deliver($uid,$item_id) { if($terms) { foreach($terms as $term) { - if(link_compare($term['url'],$link)) { + if(link_compare($term['url'],$link)) { $mention = true; break; } } - } + } if($mention) { logger('tag_deliver: mention found for ' . $u[0]['channel_name']); - + $r = q("update item set item_flags = ( item_flags | %d ) where id = %d", intval(ITEM_MENTIONSME), intval($item_id) - ); + ); // At this point we've determined that the person receiving this post was mentioned in it or it is a union. // Now let's check if this mention was inside a reshare so we don't spam a forum @@ -2866,6 +2855,7 @@ function tag_deliver($uid,$item_id) { $tagged = false; $plustagged = false; + $matches = array(); $pattern = '/@\!?\[zrl\=' . preg_quote($term['url'],'/') . '\]' . preg_quote($term['term'],'/') . '\[\/zrl\]/'; if(preg_match($pattern,$body,$matches)) @@ -2898,7 +2888,7 @@ function tag_deliver($uid,$item_id) { $arr = array('channel_id' => $uid, 'item' => $item, 'body' => $body); call_hooks('tagged',$arr); - /** + /* * Kill two birds with one stone. As long as we're here, send a mention notification. */ @@ -2926,7 +2916,6 @@ function tag_deliver($uid,$item_id) { logger('tag_delivery denied for uid ' . $uid . ' and xchan ' . $item['author_xchan']); return; } - } if((! $mention) && (! $union)) { @@ -2948,25 +2937,18 @@ function tag_deliver($uid,$item_id) { logger('tag_deliver: creating second delivery chain.'); start_delivery_chain($u[0],$item,$item_id,null); - } /** - * @function tgroup_check($uid,$item) + * @brief This function is called pre-deliver to see if a post matches the criteria to be tag delivered. * - * This function is called pre-deliver to see if a post matches the criteria to be tag delivered. * We don't actually do anything except check that it matches the criteria. * This is so that the channel with tag_delivery enabled can receive the post even if they turn off * permissions for the sender to send their stream. tag_deliver() can't be called until the post is actually stored. * By then it would be too late to reject it. */ - - - function tgroup_check($uid,$item) { - $a = get_app(); - $mention = false; // check that the message originated elsewhere and is a top-level post @@ -2980,6 +2962,7 @@ function tgroup_check($uid,$item) { ); if($r) return true; + return false; } if(! perm_is_allowed($uid,$item['author_xchan'],'tag_deliver')) @@ -3001,13 +2984,12 @@ function tgroup_check($uid,$item) { if($terms) { foreach($terms as $term) { - if(link_compare($term['url'],$link)) { + if(link_compare($term['url'],$link)) { $mention = true; break; } } - } - + } if($mention) { logger('tgroup_check: mention found for ' . $u[0]['channel_name']); @@ -3029,12 +3011,12 @@ function tgroup_check($uid,$item) { $body = preg_replace('/\[share(.*?)\[\/share\]/','',$body); - // $pattern = '/@\!?\[zrl\=' . preg_quote($term['url'],'/') . '\]' . preg_quote($term['term'] . '+','/') . '\[\/zrl\]/'; $pattern = '/@\!?\[zrl\=([^\]]*?)\]((?:.(?!\[zrl\=))*?)\+\[\/zrl\]/'; $found = false; + $matches = array(); if(preg_match_all($pattern,$body,$matches,PREG_SET_ORDER)) { $max_forums = get_config('system','max_tagged_forums'); @@ -3059,7 +3041,6 @@ function tgroup_check($uid,$item) { } return true; - } /** @@ -3067,10 +3048,13 @@ function tgroup_check($uid,$item) { * receiving the post. This starts the second delivery chain, by resetting permissions and ensuring * that ITEM_UPLINK is set on the parent post, and storing the current owner_xchan as the source_xchan. * We'll become the new owner. If called without $parent, this *is* the parent post. + * + * @param array $channel + * @param array $item + * @param int $item_id + * @param boolean $parent */ - -function start_delivery_chain($channel,$item,$item_id,$parent) { - +function start_delivery_chain($channel, $item, $item_id, $parent) { // Change this copy of the post to a forum head message and deliver to all the tgroup members // also reset all the privacy bits to the forum default permissions @@ -3093,7 +3077,6 @@ function start_delivery_chain($channel,$item,$item_id,$parent) { if(! $parent) $flag_bits = $flag_bits | ITEM_ORIGIN; - // unset the nocomment bit if it's there. if($flag_bits & ITEM_NOCOMMENT) @@ -3113,7 +3096,7 @@ function start_delivery_chain($channel,$item,$item_id,$parent) { $r = q("update item set source_xchan = owner_xchan where id = %d", intval($item_id) ); - } + } $title = $item['title']; $body = $item['body']; @@ -3155,39 +3138,28 @@ function start_delivery_chain($channel,$item,$item_id,$parent) { intval($item_id) ); - - if($r) proc_run('php','include/notifier.php','tgroup',$item_id); else - logger('start_delivery_chain: failed to update item'); - - return; + logger('start_delivery_chain: failed to update item'); } - - /** - * @function check_item_source($uid,$item) - * @param $uid - * @param $item + * @brief * - * @description * Checks to see if this item owner is referenced as a source for this channel and if the post * matches the rules for inclusion in this channel. Returns true if we should create a second delivery * chain and false if none of the rules apply, or if the item is private. + * + * @param int $uid + * @param array $item */ - - -function check_item_source($uid,$item) { - - +function check_item_source($uid, $item) { $r = q("select * from source where src_channel_id = %d and ( src_xchan = '%s' or src_xchan = '*' ) limit 1", intval($uid), dbesc(($item['source_xchan']) ? $item['source_xchan'] : $item['owner_xchan']) ); - if(! $r) return false; @@ -3196,18 +3168,15 @@ function check_item_source($uid,$item) { dbesc($item['owner_xchan']) ); - if(! $x) return false; - if(! ($x[0]['abook_their_perms'] & PERMS_A_REPUBLISH)) return false; if($item['item_private'] && (! ($x[0]['abook_flags'] & ABOOK_FLAG_FEED))) return false; - if($r[0]['src_channel_xchan'] === $item['owner_xchan']) return false; @@ -3218,6 +3187,7 @@ function check_item_source($uid,$item) { $text = prepare_text($item['body'],$item['mimetype']); $text = html2plain($text); + /** @BUG $items is undefined, should this be $item? */ $tags = ((count($items['term'])) ? $items['term'] : false); $words = explode("\n",$r[0]['src_patt']); @@ -3232,12 +3202,11 @@ function check_item_source($uid,$item) { return true; } } + return false; } - - function mail_store($arr) { if(! $arr['channel_id']) { @@ -3262,7 +3231,6 @@ function mail_store($arr) { $arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : ''); $arr['mail_flags'] = ((x($arr,'mail_flags')) ? intval($arr['mail_flags']) : 0 ); - if(! $arr['parent_mid']) { logger('mail_store: missing parent'); @@ -3328,9 +3296,9 @@ function mail_store($arr) { 'type' => NOTIFY_MAIL, 'item' => $arr, 'verb' => ACTIVITY_POST, - 'otype' => 'mail' + 'otype' => 'mail' ); - + notification($notif_params); } @@ -3338,35 +3306,35 @@ function mail_store($arr) { return $current_post; } - /** + * @brief Process atom feed and update anything/everything we might need to update. * - * consume_feed - process atom feed and update anything/everything we might need to update - * - * $xml = the (atom) feed to consume - RSS isn't as fully supported but may work for simple feeds. - * - * $importer = the contact_record (joined to user_record) of the local user who owns this relationship. - * It is this person's stuff that is going to be updated. - * $contact = the person who is sending us stuff. If not set, we MAY be processing a "follow" activity - * from an external network and MAY create an appropriate contact record. Otherwise, we MUST - * have a contact record. * $hub = should we find a hub declation in the feed, pass it back to our calling process, who might (or * might not) try and subscribe to it. * $datedir sorts in reverse order - * $pass - by default ($pass = 0) we cannot guarantee that a parent item has been - * imported prior to its children being seen in the stream unless we are certain - * of how the feed is arranged/ordered. - * With $pass = 1, we only pull parent items out of the stream. - * With $pass = 2, we only pull children (comments/likes). + * + * @param array $xml + * The (atom) feed to consume - RSS isn't as fully supported but may work for simple feeds. + * @param $importer + * The contact_record (joined to user_record) of the local user who owns this + * relationship. It is this person's stuff that is going to be updated. + * @param $contact + * The person who is sending us stuff. If not set, we MAY be processing a "follow" activity + * from an external network and MAY create an appropriate contact record. Otherwise, we MUST + * have a contact record. + * @param int $pass by default ($pass = 0) we cannot guarantee that a parent item has been + * imported prior to its children being seen in the stream unless we are certain + * of how the feed is arranged/ordered. + * * With $pass = 1, we only pull parent items out of the stream. + * * With $pass = 2, we only pull children (comments/likes). * * So running this twice, first with pass 1 and then with pass 2 will do the right * thing regardless of feed ordering. This won't be adequate in a fully-threaded * model where comments can have sub-threads. That would require some massive sorting * to get all the feed items into a mostly linear ordering, and might still require - * recursion. + * recursion. */ - -function consume_feed($xml,$importer,&$contact,$pass = 0) { +function consume_feed($xml, $importer, &$contact, $pass = 0) { require_once('library/simplepie/simplepie.inc'); @@ -3403,7 +3371,6 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { $when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s'); } - if($deleted && is_array($contact)) { $r = q("SELECT * from item where mid = '%s' and author_xchan = '%s' and uid = %d limit 1", dbesc(base64url_encode($mid)), @@ -3418,7 +3385,7 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { logger('consume_feed: deleting item ' . $item['id'] . ' mid=' . base64url_decode($item['mid']), LOGGER_DEBUG); drop_item($item['id'],false); } - } + } } } } @@ -3449,7 +3416,6 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { if($pass == 1) continue; - // Have we seen it? If not, import it. $item_id = base64url_encode($item->get_id()); @@ -3469,15 +3435,12 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { $x = import_author_unknown(array('name' => $author['author_name'],'url' => $author['author_link'],'photo' => array('src' => $author['author_photo']))); if($x) $datarray['author_xchan'] = $x; - } if(! $datarray['author_xchan']) $datarray['author_xchan'] = $contact['xchan_hash']; - $datarray['owner_xchan'] = $contact['xchan_hash']; - $r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1", dbesc($item_id), intval($importer['channel_id']) @@ -3501,15 +3464,12 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { $datarray['parent_mid'] = $parent_mid; $datarray['uid'] = $importer['channel_id']; - - logger('consume_feed: ' . print_r($datarray,true),LOGGER_DATA); $xx = item_store($datarray); $r = $xx['item_id']; continue; } - else { // Head post of a conversation. Have we seen it? If not, import it. @@ -3538,15 +3498,12 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { $x = import_author_unknown(array('name' => $author['author_name'],'url' => $author['author_link'],'photo' => array('src' => $author['author_photo']))); if($x) $datarray['author_xchan'] = $x; - } if(! $datarray['author_xchan']) $datarray['author_xchan'] = $contact['xchan_hash']; - $datarray['owner_xchan'] = $contact['xchan_hash']; - $r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1", dbesc($item_id), intval($importer['channel_id']) @@ -3568,7 +3525,6 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { continue; } - $datarray['parent_mid'] = $item_id; $datarray['uid'] = $importer['channel_id']; @@ -3581,24 +3537,18 @@ function consume_feed($xml,$importer,&$contact,$pass = 0) { logger('consume_feed: author ' . print_r($author,true),LOGGER_DEBUG); - logger('consume_feed: ' . print_r($datarray,true),LOGGER_DATA); $xx = item_store($datarray); $r = $xx['item_id']; continue; - } } } - - } function update_feed_item($uid,$datarray) { - logger('update_feed_item: not implemented! ' . $uid . ' ' . print_r($datarray,true), LOGGER_DATA); - } @@ -3608,6 +3558,7 @@ function handle_feed($uid,$abook_id,$url) { $channel = channelx_by_n($uid); if(! $channel) return; + $x = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_channel = %d limit 1", dbesc($abook_id), intval($uid) @@ -3629,13 +3580,13 @@ function atom_author($tag,$name,$uri,$h,$w,$type,$photo) { $o = ''; if(! $tag) return $o; + $name = xmlify($name); $uri = xmlify($uri); $h = intval($h); $w = intval($w); $photo = xmlify($photo); - $o .= "<$tag>\r\n"; $o .= "<name>$name</name>\r\n"; $o .= "<uri>$uri</uri>\r\n"; @@ -3645,13 +3596,12 @@ function atom_author($tag,$name,$uri,$h,$w,$type,$photo) { call_hooks('atom_author', $o); $o .= "</$tag>\r\n"; + return $o; } function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { - $a = get_app(); - if(! $item['parent']) return; @@ -3664,7 +3614,6 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { else $body = $item['body']; - $o = "\r\n\r\n<entry>\r\n"; if(is_array($author)) @@ -3698,11 +3647,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { if(($item['item_private']) || strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])) $o .= '<zot:private>' . (($item['item_private']) ? $item['item_private'] : 1) . '</zot:private>' . "\r\n"; - if($item['app']) $o .= '<statusnet:notice_info local_id="' . $item['id'] . '" source="' . xmlify($item['app']) . '" ></statusnet:notice_info>' . "\r\n"; - $verb = construct_verb($item); $o .= '<as:verb>' . xmlify($verb) . '</as:verb>' . "\r\n"; $actobj = construct_activity_object($item); @@ -3730,7 +3677,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { call_hooks('atom_entry', $o); $o .= '</entry>' . "\r\n"; - + return $o; } @@ -3753,7 +3700,6 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) { logger('fix_private_photos: found photo ' . $image, LOGGER_DEBUG); - if(stristr($image , $site . '/photo/')) { // Only embed locally hosted photos $replace = false; @@ -3815,7 +3761,7 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) { } } } - } + } $new_body = $new_body . substr($orig_body, 0, $img_start + $img_st_close) . $image . '[/zmg]'; $orig_body = substr($orig_body, $img_start + $img_st_close + $img_len + strlen('[/zmg]')); @@ -3836,6 +3782,7 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) { function has_permissions($obj) { if(($obj['allow_cid'] != '') || ($obj['allow_gid'] != '') || ($obj['deny_cid'] != '') || ($obj['deny_gid'] != '')) return true; + return false; } @@ -3858,10 +3805,15 @@ function compare_permissions($obj1,$obj2) { return false; } -// returns an array of contact-ids that are allowed to see this object - +/** + * @brief Returns an array of contact-ids that are allowed to see this object. + * + * @param object $obj + * @return array + */ function enumerate_permissions($obj) { require_once('include/group.php'); + $allow_people = expand_acl($obj['allow_cid']); $allow_groups = expand_groups(expand_acl($obj['allow_gid'])); $deny_people = expand_acl($obj['deny_cid']); @@ -3869,6 +3821,7 @@ function enumerate_permissions($obj) { $recipients = array_unique(array_merge($allow_people,$allow_groups)); $deny = array_unique(array_merge($deny_people,$deny_groups)); $recipients = array_diff($recipients,$deny); + return $recipients; } @@ -3885,6 +3838,7 @@ function item_getfeedtags($item) { $ret[] = array('@',$term['url'],$term['term']); } } + return $ret; } @@ -3905,11 +3859,11 @@ function item_getfeedattach($item) { } } } + return $ret; } - function item_expire($uid,$days) { if((! $uid) || ($days < 1)) @@ -3922,15 +3876,19 @@ function item_expire($uid,$days) { $expire_network_only = 1; - $sql_extra = ((intval($expire_network_only)) ? " AND not (item_flags & " . intval(ITEM_WALL) . ")>0 " : ""); + $expire_limit = get_config('system','expire_limit'); + if(! intval($expire_limit)) + $expire_limit = 5000; + + $sql_extra = ((intval($expire_network_only)) ? " AND (item_flags & " . intval(ITEM_WALL) . ") = 0 " : ""); $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `created` < %s - INTERVAL %s AND `id` = `parent` $sql_extra - AND NOT ( item_flags & %d )>0 - AND (item_restrict = 0 ) ", + AND ( item_flags & %d ) = 0 + AND ( item_restrict = 0 ) LIMIT $expire_limit ", intval($uid), db_utcnow(), db_quoteinterval(intval($days).' DAY'), intval(ITEM_RETAINED) @@ -3966,7 +3924,6 @@ function item_expire($uid,$days) { } // proc_run('php',"include/notifier.php","expire","$uid"); - } function retain_item($id) { @@ -4008,7 +3965,6 @@ function drop_items($items) { function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = false) { - $a = get_app(); // locate item to be deleted @@ -4053,7 +4009,6 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = fal intval($item['id']) ); - $arr = array('item' => $item, 'interactive' => $interactive, 'stage' => $stage); call_hooks('drop_item', $arr ); @@ -4085,7 +4040,6 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = fal proc_run('php','include/notifier.php','drop',$notify_id); goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); - } else { if(! $interactive) @@ -4093,14 +4047,20 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL,$force = fal notice( t('Permission denied.') . EOL); goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); } - } -// This function does not check for permission and does not send notifications and does not check recursion. -// It merely destroys all resources associated with an item. -// Please do not use without a suitable wrapper. - -function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL,$force = false) { +/** + * @warning This function does not check for permission and does not send + * notifications and does not check recursion. + * It merely destroys all resources associated with an item. + * Please do not use without a suitable wrapper. + * + * @param array $item + * @param int $stage + * @param boolean $force + * @return boolean + */ +function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL, $force = false) { $linked_item = (($item['resource_id']) ? true : false); @@ -4148,7 +4108,6 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL,$force = false) { break; } - // immediately remove any undesired profile likes. q("delete from likes where iid = %d and channel_id = %d", @@ -4156,7 +4115,6 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL,$force = false) { intval($item['uid']) ); - // network deletion request. Keep the message structure so that we can deliver delete notifications. // Come back after several days (or perhaps a month) to do the lowlevel delete (DROPITEM_PHASE2). @@ -4178,7 +4136,7 @@ function delete_item_lowlevel($item,$stage = DROPITEM_NORMAL,$force = false) { intval(TERM_OBJ_POST) ); - // FIXME remove notifications for this item + /** @FIXME remove notifications for this item */ return true; } @@ -4199,6 +4157,7 @@ function first_post_date($uid,$wall = false) { // logger('first_post_date: ' . $r[0]['id'] . ' ' . $r[0]['created'], LOGGER_DATA); return substr(datetime_convert('',date_default_timezone_get(),$r[0]['created']),0,10); } + return false; } @@ -4206,15 +4165,19 @@ function first_post_date($uid,$wall = false) { * modified posted_dates() {below} to arrange the list in years, which we'll eventually * use to make a menu of years with collapsible sub-menus for the months instead of the * current flat list of all representative dates. + * + * @param int $uid + * @param unknown $wall + * @param unknown $mindate + * @return array */ - -function list_post_dates($uid,$wall,$mindate) { +function list_post_dates($uid, $wall, $mindate) { $dnow = datetime_convert('',date_default_timezone_get(),'now','Y-m-d'); if($mindate) - $dthen = datetime_convert('',date_default_timezone_get(),$mindate); + $dthen = datetime_convert('',date_default_timezone_get(), $mindate); else - $dthen = first_post_date($uid,$wall); + $dthen = first_post_date($uid, $wall); if(! $dthen) return array(); @@ -4241,6 +4204,7 @@ function list_post_dates($uid,$wall,$mindate) { $ret[$dyear][] = array($str,$end_month,$start_month); $dnow = datetime_convert('','',$dnow . ' -1 month', 'Y-m-d'); } + return $ret; } @@ -4303,7 +4267,6 @@ function fetch_post_tags($items,$link = false) { ); } - for($x = 0; $x < count($items); $x ++) { if($tags) { foreach($tags as $t) { @@ -4334,7 +4297,6 @@ function fetch_post_tags($items,$link = false) { function zot_feed($uid,$observer_xchan,$arr) { - $result = array(); $mindate = null; $message_id = null; @@ -4347,9 +4309,9 @@ function zot_feed($uid,$observer_xchan,$arr) { $message_id = $arr['message_id']; } - if(! $mindate) $mindate = NULL_DATE; + $mindate = dbesc($mindate); logger('zot_feed: requested for uid ' . $uid . ' from observer ' . $observer_xchan, LOGGER_DEBUG); @@ -4366,12 +4328,11 @@ function zot_feed($uid,$observer_xchan,$arr) { $sql_extra = item_permissions_sql($uid); } + $limit = " LIMIT 100 "; + if($mindate != NULL_DATE) { $sql_extra .= " and ( created > '$mindate' or edited > '$mindate' ) "; - $limit = ""; } - else - $limit = " limit 0, 50 "; if($message_id) { $sql_extra .= " and mid = '" . dbesc($message_id) . "' "; @@ -4380,22 +4341,28 @@ function zot_feed($uid,$observer_xchan,$arr) { $items = array(); + /** @FIXME fix this part for PostgreSQL */ + + if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { + return array(); + } + if(is_sys_channel($uid)) { require_once('include/security.php'); - $r = q("SELECT distinct parent, created from item + $r = q("SELECT parent, created from item WHERE uid != %d - and uid in (" . stream_perms_api_uids(PERMS_PUBLIC) . ") AND item_restrict = 0 - AND (item_flags & %d)>0 - and item_private = 0 $sql_extra ORDER BY created ASC $limit", + AND item_private = 0 AND item_restrict = 0 AND uid in (" . stream_perms_api_uids(PERMS_PUBLIC,10,1) . ") + AND (item_flags & %d) > 0 + $sql_extra GROUP BY parent ORDER BY created ASC $limit", intval($uid), intval(ITEM_WALL) ); } else { - $r = q("SELECT distinct parent, created from item + $r = q("SELECT parent, created from item WHERE uid = %d AND item_restrict = 0 - AND (item_flags & %d)>0 - $sql_extra ORDER BY created ASC $limit", + AND (item_flags & %d) > 0 + $sql_extra GROUP BY parent ORDER BY created ASC $limit", intval($uid), intval(ITEM_WALL) ); @@ -4417,12 +4384,10 @@ function zot_feed($uid,$observer_xchan,$arr) { $items = fetch_post_tags($items); require_once('include/conversation.php'); $items = conv_sort($items,'ascending'); - } else $items = array(); - logger('zot_feed: number items: ' . count($items),LOGGER_DEBUG); foreach($items as $item) @@ -4443,13 +4408,13 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C $sql_nets = ''; $sql_options = ''; $sql_extra2 = ''; - $sql_extra3 = ''; + $sql_extra3 = ''; $def_acl = ''; $item_uids = ' true '; - + if ($arr['uid']) $uid= $arr['uid']; - + if($channel) { $uid = $channel['channel_id']; $uidhash = $channel['channel_hash']; @@ -4461,65 +4426,64 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C if($arr['wall']) $sql_options .= " and (item_flags & " . intval(ITEM_WALL) . ")>0 "; - + $sql_extra = " AND item.parent IN ( SELECT parent FROM item WHERE (item_flags & " . intval(ITEM_THREAD_TOP) . ")>0 $sql_options ) "; - + if($arr['since_id']) - $sql_extra .= " and item.id > " . $since_id . " "; - - if($arr['gid'] && $uid) { - $r = q("SELECT * FROM `groups` WHERE id = %d AND uid = %d LIMIT 1", - intval($arr['group']), - intval($uid) - ); - if(! $r) { + $sql_extra .= " and item.id > " . $since_id . " "; + + if($arr['gid'] && $uid) { + $r = q("SELECT * FROM `groups` WHERE id = %d AND uid = %d LIMIT 1", + intval($arr['group']), + intval($uid) + ); + if(! $r) { $result['message'] = t('Collection not found.'); return $result; - } + } $contact_str = ''; - $contacts = group_get_members($group); - if($contacts) { + /** @FIXME $group is undefined */ + $contacts = group_get_members($group); + if ($contacts) { foreach($contacts as $c) { if($contact_str) $contact_str .= ','; - $contact_str .= "'" . $c['xchan'] . "'"; + + $contact_str .= "'" . $c['xchan'] . "'"; } - } - else { + } else { $contact_str = ' 0 '; $result['message'] = t('Collection is empty.'); return $result; - } + } - $sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND (( author_xchan IN ( $contact_str ) OR owner_xchan in ( $contact_str)) or allow_gid like '" . protect_sprintf('%<' . dbesc($r[0]['hash']) . '>%') . "' ) and id = parent and item_restrict = 0 ) "; + $sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND (( author_xchan IN ( $contact_str ) OR owner_xchan in ( $contact_str)) or allow_gid like '" . protect_sprintf('%<' . dbesc($r[0]['hash']) . '>%') . "' ) and id = parent and item_restrict = 0 ) "; $x = group_rec_byhash($uid,$r[0]['hash']); $result['headline'] = sprintf( t('Collection: %s'),$x['name']); + } + elseif($arr['cid'] && $uid) { - } - elseif($arr['cid'] && $uid) { - - $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_channel = %d and not ( abook_flags & " . intval(ABOOK_FLAG_BLOCKED) . ")>0 limit 1", + $r = q("SELECT abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_channel = %d and not ( abook_flags & " . intval(ABOOK_FLAG_BLOCKED) . ")>0 limit 1", intval($arr['cid']), intval(local_channel()) - ); - if($r) { - $sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND uid = " . intval($arr['uid']) . " AND ( author_xchan = '" . dbesc($r[0]['abook_xchan']) . "' or owner_xchan = '" . dbesc($r[0]['abook_xchan']) . "' ) and item_restrict = 0 ) "; + ); + if ($r) { + $sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND uid = " . intval($arr['uid']) . " AND ( author_xchan = '" . dbesc($r[0]['abook_xchan']) . "' or owner_xchan = '" . dbesc($r[0]['abook_xchan']) . "' ) and item_restrict = 0 ) "; $result['headline'] = sprintf( t('Connection: %s'),$r[0]['xchan_name']); - } - else { + } else { $result['message'] = t('Connection not found.'); return $result; - } - } + } + } - if($arr['datequery']) { - $sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$arr['datequery'])))); - } - if($arr['datequery2']) { - $sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$arr['datequery2'])))); - } + if ($arr['datequery']) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$arr['datequery'])))); + } + if ($arr['datequery2']) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$arr['datequery2'])))); + } if(! array_key_exists('nouveau',$arr)) { $sql_extra2 = " AND item.parent = item.id "; @@ -4533,37 +4497,33 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C $sql_extra .= sprintf(" AND item.body like '%s' ", dbesc(protect_sprintf('%' . $arr['search'] . '%')) ); - } - - if(strlen($arr['file'])) { - $sql_extra .= term_query('item',$arr['files'],TERM_FILE); - } - - if($arr['conv'] && $channel) { - $sql_extra .= sprintf(" AND parent IN (SELECT distinct parent from item where ( author_xchan like '%s' or ( item_flags & %d )>0)) ", - dbesc(protect_sprintf($uidhash)), - intval(ITEM_MENTIONSME) - ); - } - + } - if(($client_mode & CLIENT_MODE_UPDATE) && (! ($client_mode & CLIENT_MODE_LOAD))) { + if (strlen($arr['file'])) { + $sql_extra .= term_query('item',$arr['files'],TERM_FILE); + } - // only setup pagination on initial page view - $pager_sql = ''; + if ($arr['conv'] && $channel) { + $sql_extra .= sprintf(" AND parent IN (SELECT distinct parent from item where ( author_xchan like '%s' or ( item_flags & %d )>0)) ", + dbesc(protect_sprintf($uidhash)), + intval(ITEM_MENTIONSME) + ); + } - } - else { - $itemspage = (($channel) ? get_pconfig($uid,'system','itemspage') : 20); - $a->set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(get_app()->pager['itemspage']), intval(get_app()->pager['start'])); - } + if (($client_mode & CLIENT_MODE_UPDATE) && (! ($client_mode & CLIENT_MODE_LOAD))) { + // only setup pagination on initial page view + $pager_sql = ''; + } else { + $itemspage = (($channel) ? get_pconfig($uid,'system','itemspage') : 20); + $a->set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(get_app()->pager['itemspage']), intval(get_app()->pager['start'])); + } - if(isset($arr['start']) && isset($arr['records'])) - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval($arr['records']), intval($arr['start'])); + if (isset($arr['start']) && isset($arr['records'])) + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval($arr['records']), intval($arr['start'])); - if(array_key_exists('cmin',$arr) || array_key_exists('cmax',$arr)) { - if(($arr['cmin'] != 0) || ($arr['cmax'] != 99)) { + if (array_key_exists('cmin',$arr) || array_key_exists('cmax',$arr)) { + if (($arr['cmin'] != 0) || ($arr['cmax'] != 99)) { // Not everybody who shows up in the network stream will be in your address book. // By default those that aren't are assumed to have closeness = 99; but this isn't @@ -4572,33 +4532,32 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C $sql_nets .= " AND "; - if($arr['cmax'] == 99) + if ($arr['cmax'] == 99) $sql_nets .= " ( "; $sql_nets .= "( abook.abook_closeness >= " . intval($arr['cmin']) . " "; $sql_nets .= " AND abook.abook_closeness <= " . intval($arr['cmax']) . " ) "; - if($cmax == 99) + if ($cmax == 99) $sql_nets .= " OR abook.abook_closeness IS NULL ) "; - } + } } - $simple_update = (($client_mode & CLIENT_MODE_UPDATE) ? " and ( item.item_unseen = 1 ) " : ''); - if($client_mode & CLIENT_MODE_LOAD) - $simple_update = ''; + $simple_update = (($client_mode & CLIENT_MODE_UPDATE) ? " and ( item.item_unseen = 1 ) " : ''); + if ($client_mode & CLIENT_MODE_LOAD) + $simple_update = ''; - $start = dba_timer(); + //$start = dba_timer(); require_once('include/security.php'); $sql_extra .= item_permissions_sql($channel['channel_id']); - if($arr['pages']) + if ($arr['pages']) $item_restrict = " AND (item_restrict & " . ITEM_WEBPAGE . ") "; else $item_restrict = " AND item_restrict = 0 "; - - if($arr['nouveau'] && ($client_mode & CLIENT_MODE_LOAD) && $channel) { - // "New Item View" - show all items unthreaded in reverse created date order + if ($arr['nouveau'] && ($client_mode & CLIENT_MODE_LOAD) && $channel) { + // "New Item View" - show all items unthreaded in reverse created date order $items = q("SELECT item.*, item.id AS item_id FROM item WHERE $item_uids $item_restrict @@ -4607,22 +4566,21 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C ORDER BY item.received DESC $pager_sql " ); - require_once('include/items.php'); + require_once('include/items.php'); - xchan_query($items); + xchan_query($items); - $items = fetch_post_tags($items,true); - } - else { + $items = fetch_post_tags($items,true); + } else { - // Normal conversation view + // Normal conversation view - if($arr['order'] === 'post') + if($arr['order'] === 'post') $ordering = "created"; - else + else $ordering = "commented"; - if(($client_mode & CLIENT_MODE_LOAD) || ($client_mode == CLIENT_MODE_NORMAL)) { + if(($client_mode & CLIENT_MODE_LOAD) || ($client_mode == CLIENT_MODE_NORMAL)) { // Fetch a page full of parent items for this page @@ -4648,48 +4606,46 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C ); } - $first = dba_timer(); + //$first = dba_timer(); - // Then fetch all the children of the parents that are on this page + // Then fetch all the children of the parents that are on this page - if($r) { + if($r) { - $parents_str = ids_to_querystr($r,'item_id'); + $parents_str = ids_to_querystr($r,'item_id'); if($arr['top']) $sql_extra = ' and id = parent ' . $sql_extra; - $items = q("SELECT item.*, item.id AS item_id FROM item - WHERE $item_uids $item_restrict - AND item.parent IN ( %s ) - $sql_extra ", - dbesc($parents_str) - ); + $items = q("SELECT item.*, item.id AS item_id FROM item + WHERE $item_uids $item_restrict + AND item.parent IN ( %s ) + $sql_extra ", + dbesc($parents_str) + ); - $second = dba_timer(); + $second = dba_timer(); - xchan_query($items); + xchan_query($items); - $third = dba_timer(); + //$third = dba_timer(); - $items = fetch_post_tags($items,true); + $items = fetch_post_tags($items,true); - $fourth = dba_timer(); + //$fourth = dba_timer(); require_once('include/conversation.php'); - $items = conv_sort($items,$ordering); - - //logger('items: ' . print_r($items,true)); + $items = conv_sort($items,$ordering); - } - else { - $items = array(); - } + //logger('items: ' . print_r($items,true)); + } else { + $items = array(); + } - if($parents_str && $arr['mark_seen']) - $update_unseen = ' AND parent IN ( ' . dbesc($parents_str) . ' )'; - // FIXME finish mark unseen sql - } + if($parents_str && $arr['mark_seen']) + $update_unseen = ' AND parent IN ( ' . dbesc($parents_str) . ' )'; + /** @FIXME finish mark unseen sql */ + } return $items; } @@ -4710,7 +4666,7 @@ function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remo $pagetitle = $remote_id; } - if($page_type) { + if($page_type) { // store page info as an alternate message_id so we can access it via // https://sitename/page/$channelname/$pagetitle @@ -4738,17 +4694,17 @@ function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remo ); } } - } - /** - * change access control for item with message_id $mid and channel_id $uid + * @brief Change access control for item with message_id $mid and channel_id $uid. + * + * @param string $xchan_hash + * @param string $mid + * @param int $uid */ - - -function item_add_cid($xchan_hash,$mid,$uid) { +function item_add_cid($xchan_hash, $mid, $uid) { $r = q("select id from item where mid = '%s' and uid = %d and allow_cid like '%s'", dbesc($mid), intval($uid), @@ -4800,27 +4756,28 @@ function set_linkified_perms($linkified, &$str_contact_allow, &$str_group_allow, } if(strpos($access_tag,'cid:') === 0) { $str_contact_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; + $access_tag = ''; } elseif(strpos($access_tag,'gid:') === 0) { $str_group_allow .= '<' . substr($access_tag,4) . '>'; - $access_tag = ''; + $access_tag = ''; } } } } - -/* - * We can't trust ITEM_ORIGIN to tell us if this is a local comment +/** + * We can't trust ITEM_ORIGIN to tell us if this is a local comment * which needs to be relayed, because it was misconfigured at one point for several * months and set for some remote items (in alternate delivery chains). This could * cause looping, so use this hackish but accurate method. + * + * @param array $item + * @return boolean */ - - function comment_local_origin($item) { - if(stripos($item['mid'],get_app()->get_hostname()) && ($item['parent'] != $item['id'])) + if(stripos($item['mid'], get_app()->get_hostname()) && ($item['parent'] != $item['id'])) return true; - return false; + + return false; } diff --git a/include/language.php b/include/language.php index ec5fa84fa..1e8528dc1 100644 --- a/include/language.php +++ b/include/language.php @@ -1,8 +1,8 @@ <?php /** - * @file + * @file include/language.php * - * @brief translation support + * @brief Translation support. * * This file contains functions to work with translations and other * language related tasks. @@ -26,7 +26,7 @@ function get_browser_language() { $langs = array(); $lang_parse = array(); - if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) { + if (x($_SERVER, 'HTTP_ACCEPT_LANGUAGE')) { // break up string into pieces (languages and q factors) preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse); @@ -110,9 +110,12 @@ function pop_lang() { $a->language = $a->langsave; } - -// load string translation table for alternate language - +/** + * @brief Load string translation table for alternate language. + * + * @param string $lang language code in 2-letter ISO 639-1 (en, de, fr) format + * @param boolean $install (optional) default false + */ function load_translation_table($lang, $install = false) { global $a; @@ -139,14 +142,13 @@ function load_translation_table($lang, $install = false) { if(file_exists("view/local-$lang/strings.php")) { include("view/local-$lang/strings.php"); } - } /** - * @brief translate string if translation exists. + * @brief Translate string if translation exists. * * @param string $s string that should get translated - * @param string $ctx optional context to appear in po file + * @param string $ctx (optional) context to appear in po file * @return translated string if exists, otherwise return $s * */ @@ -154,37 +156,53 @@ function t($s, $ctx = '') { global $a; $cs = $ctx ? '__ctx:' . $ctx . '__ ' . $s : $s; - if(x($a->strings, $cs)) { + if (x($a->strings, $cs)) { $t = $a->strings[$cs]; + return is_array($t) ? $t[0] : $t; } + return $s; } - +/** + * @brief + * + * @param string $singular + * @param string $plural + * @param int $count + * @param string $ctx + * @return string + */ function tt($singular, $plural, $count, $ctx = ''){ $a = get_app(); - $cs = $ctx?"__ctx:".$ctx."__ ".$singular:$singular; - if(x($a->strings,$cs)) { + $cs = $ctx ? "__ctx:" . $ctx . "__ " . $singular : $singular; + if (x($a->strings,$cs)) { $t = $a->strings[$cs]; $f = 'string_plural_select_' . str_replace('-', '_', $a->language); - if(! function_exists($f)) + if (! function_exists($f)) $f = 'string_plural_select_default'; + $k = $f($count); + return is_array($t) ? $t[$k] : $t; } - - if ($count != 1){ + + if ($count != 1) { return $plural; } else { return $singular; } } -// provide a fallback which will not collide with -// a function defined in any language file - +/** + * @brief Provide a fallback which will not collide with a function defined in + * any language file. + * + * @param int $n + * @return boolean + */ function string_plural_select_default($n) { return ($n != 1); } @@ -200,25 +218,25 @@ function string_plural_select_default($n) { * returned through config['system']['language_detect_min_confidence']. * * @see http://pear.php.net/package/Text_LanguageDetect - * @param s A string to examine + * @param string $s A string to examine * @return Language code in 2-letter ISO 639-1 (en, de, fr) format */ function detect_language($s) { require_once('Text/LanguageDetect.php'); $min_length = get_config('system', 'language_detect_min_length'); - if($min_length === false) + if ($min_length === false) $min_length = LANGUAGE_DETECT_MIN_LENGTH; $min_confidence = get_config('system', 'language_detect_min_confidence'); - if($min_confidence === false) + if ($min_confidence === false) $min_confidence = LANGUAGE_DETECT_MIN_CONFIDENCE; // embedded apps have long base64 strings which will trip up the detector. $naked_body = preg_replace('/\[app\](.*?)\[\/app\]/','',$s); // strip off bbcode $naked_body = preg_replace('/\[(.+?)\]/', '', $naked_body); - if(mb_strlen($naked_body) < intval($min_length)) { + if (mb_strlen($naked_body) < intval($min_length)) { logger('string length less than ' . intval($min_length), LOGGER_DATA); return ''; } @@ -233,11 +251,11 @@ function detect_language($s) { logger('detect language exception: ' . $e->getMessage(), LOGGER_DATA); } - if((! $lng) || (! (x($lng,'language')))) { + if ((! $lng) || (! (x($lng,'language')))) { return ''; } - if($lng['confidence'] < (float) $min_confidence) { + if ($lng['confidence'] < (float) $min_confidence) { logger('detect language: confidence less than ' . (float) $min_confidence, LOGGER_DATA); return ''; } @@ -251,38 +269,37 @@ function detect_language($s) { * By default we use the localized language name. You can switch the result * to any language with the optional 2nd parameter $l. * - * $s and $l should be in 2-letter ISO 639-1 format + * $s and $l should be in 2-letter ISO 639-1 format. * * If nothing could be looked up it returns $s. * - * @param $s Language code to look up - * @param $l (optional) In which language to return the name + * @param string $s Language code to look up + * @param string $l (optional) In which language to return the name * @return string with the language name, or $s if unrecognized + * + * @todo include CommerceGuys\Intl through composer like SabreDAV. */ require_once(__DIR__ . '/../library/intl/vendor/autoload.php'); use CommerceGuys\Intl\Language\LanguageRepository; function get_language_name($s, $l = null) { // get() expects the second part to be in upper case - if(strpos($s,'-') !== false) $s = substr($s,0,2) . strtoupper(substr($s,2)); - if($l !== null && strpos($l,'-') !== false) $l = substr($l,0,2) . strtoupper(substr($l,2)); + if (strpos($s, '-') !== false) $s = substr($s, 0, 2) . strtoupper(substr($s, 2)); + if ($l !== null && strpos($l, '-') !== false) $l = substr($l, 0, 2) . strtoupper(substr($l, 2)); $languageRepository = new LanguageRepository; // Sometimes intl doesn't like the second part at all ... try { $language = $languageRepository->get($s, $l); - } - catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) { - $s = substr($s,0,2); - if($l !== null) $l = substr($s,0,2); + } catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) { + $s = substr($s, 0, 2); + if($l !== null) $l = substr($s, 0, 2); try { $language = $languageRepository->get($s, $l); - } - catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) { + } catch (CommerceGuys\Intl\Exception\UnknownLanguageException $e) { return $s; // Give up } - } + } return $language->getName(); } - diff --git a/include/network.php b/include/network.php index 6aefc0b30..a0782692e 100644 --- a/include/network.php +++ b/include/network.php @@ -1,33 +1,39 @@ -<?php /** @file */ - - +<?php +/** + * @file include/network.php + */ +/** + * @brief Returns path to CA file. + * + * @return string + */ function get_capath() { return appdirpath() . '/library/cacert.pem'; } /** - * @function z_fetch_url + * @brief fetches an URL. + * * @param string $url * URL to fetch - * @param boolean $binary = false + * @param boolean $binary default false * TRUE if asked to return binary results (file download) - * @param int $redirects = 0 + * @param int $redirects default 0 * internal use, recursion counter - * @param array $opts (optional parameters) - * 'accept_content' => supply Accept: header with 'accept_content' as the value - * 'timeout' => int seconds, default system config value or 60 seconds - * 'http_auth' => username:password - * 'novalidate' => do not validate SSL certs, default is to validate using our CA list - * 'nobody' => only return the header - * - * @returns array - * 'return_code' => HTTP return code or 0 if timeout or failure - * 'success' => boolean true (if HTTP 2xx result) or false - * 'header' => HTTP headers - * 'body' => fetched content + * @param array $opts (optional parameters) assoziative array with: + * * \b accept_content => supply Accept: header with 'accept_content' as the value + * * \b timeout => int seconds, default system config value or 60 seconds + * * \b http_auth => username:password + * * \b novalidate => do not validate SSL certs, default is to validate using our CA list + * * \b nobody => only return the header + * + * @return array an assoziative array with: + * * \e int \b return_code => HTTP return code or 0 if timeout or failure + * * \e boolean \b success => boolean true (if HTTP 2xx result) or false + * * \e string \b header => HTTP headers + * * \e string \b body => fetched content */ - function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) { $ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => ""); @@ -129,14 +135,15 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) { if(x($opts,'debug')) { $ret['debug'] = $curl_info; } - + @curl_close($ch); return($ret); } /** - * @function z_post_url + * @brief + * * @param string $url * URL to post * @param mixed $params @@ -151,17 +158,15 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) { * 'timeout' => int seconds, default system config value or 60 seconds * 'http_auth' => username:password * 'novalidate' => do not validate SSL certs, default is to validate using our CA list - * - * @returns array - * 'return_code' => HTTP return code or 0 if timeout or failure - * 'success' => boolean true (if HTTP 2xx result) or false - * 'header' => HTTP headers - * 'body' => fetched content + * @return array an assoziative array with: + * * \e int \b return_code => HTTP return code or 0 if timeout or failure + * * \e boolean \b success => boolean true (if HTTP 2xx result) or false + * * \e string \b header => HTTP headers + * * \e string \b body => content + * * \e string \b debug => from curl_info() */ - - function z_post_url($url,$params, $redirects = 0, $opts = array()) { - + $ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => ""); $ch = curl_init($url); @@ -257,24 +262,35 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) { logger('z_post_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')) { $ret['debug'] = $curl_info; } - curl_close($ch); return($ret); } +/** + * @brief Like z_post_url() but with an application/json HTTP header. + * + * Add a "Content-Type: application/json" HTTP-header to $opts and call z_post_url(). + * + * @see z_post_url() + * + * @param string $url + * @param array $params + * @param number $redirects default 0 + * @param array $opts (optional) curl options + * @return z_post_url() + */ +function z_post_url_json($url, $params, $redirects = 0, $opts = array()) { -function z_post_url_json($url,$params,$redirects = 0, $opts = array()) { + $opts = array_merge($opts, array('headers' => array('Content-Type: application/json'))); - $opts = array_merge($opts,array('headers' => array('Content-Type: application/json'))); return z_post_url($url,json_encode($params),$redirects,$opts); - } @@ -305,22 +321,19 @@ function xml_status($st, $message = '') { } /** - * @function http_status_exit - * - * Send HTTP status header and exit + * @brief Send HTTP status header and exit. + * * @param int $val * integer HTTP status result value * @param string $msg * optional message * @returns (does not return, process is terminated) */ +function http_status_exit($val, $msg = '') { -function http_status_exit($val,$msg = '') { - - $err = ''; - if($val >= 400) + if ($val >= 400) $msg = (($msg) ? $msg : 'Error'); - if($val >= 200 && $val < 300) + if ($val >= 200 && $val < 300) $msg = (($msg) ? $msg : 'OK'); logger('http_status_exit ' . $val . ' ' . $msg); diff --git a/include/permissions.php b/include/permissions.php index 4d7def346..82145066b 100644 --- a/include/permissions.php +++ b/include/permissions.php @@ -1,6 +1,6 @@ <?php /** - * @file incldue/permissions.php + * @file include/permissions.php * * This file conntains functions to check and work with permissions. */ @@ -445,21 +445,21 @@ function site_default_perms() { /** - * @function get_role_perms($role) - * @param string $role - * - * Given a string for the channel role ('social','forum', etc) + * @brief Return an array of all permissions for this role. + * + * Given a string for the channel role ('social','forum', etc) * return an array of all permission fields pre-filled for this role. * This includes the channel permission scope indicators (anything beginning with 'channel_') as well as - * perms_auto: true or false to create auto-permissions for this channel - * perms_follow: The permissions to apply when initiating a connection request to another channel - * perms_accept: The permissions to apply when accepting a connection request from another channel (not automatic) - * default_collection: true or false to make the default ACL include the channel's default collection - * directory_publish: true or false to publish this channel in the directory + * * perms_auto: true or false to create auto-permissions for this channel + * * perms_follow: The permissions to apply when initiating a connection request to another channel + * * perms_accept: The permissions to apply when accepting a connection request from another channel (not automatic) + * * default_collection: true or false to make the default ACL include the channel's default collection + * * directory_publish: true or false to publish this channel in the directory * Any attributes may be extended (new roles defined) and modified (specific permissions altered) by plugins * + * @param string $role + * @return array */ - function get_role_perms($role) { $ret = array(); @@ -800,9 +800,8 @@ function get_role_perms($role) { } /** - * @brief Returns a list or roles, grouped by type + * @brief Returns a list or roles, grouped by type. * - * @param string $current The current role * @return string Returns an array of roles, grouped by type */ function get_roles() { @@ -811,7 +810,8 @@ function get_roles() { t('Community Forum') => array('forum' => t('Mostly Public'), 'forum_restricted' => t('Restricted'), 'forum_private' => t('Private')), t('Feed Republish') => array('feed' => t('Mostly Public'), 'feed_restricted' => t('Restricted')), t('Special Purpose') => array('soapbox' => t('Celebrity/Soapbox'), 'repository' => t('Group Repository')), - t('Other') => array('custom' => t('Custom/Expert Mode'))); + t('Other') => array('custom' => t('Custom/Expert Mode')) + ); return $roles; } diff --git a/include/photos.php b/include/photos.php index c4d5a33aa..1672e310a 100644 --- a/include/photos.php +++ b/include/photos.php @@ -1,10 +1,21 @@ -<?php /** @file */ +<?php +/** + * @file include/photos.php + * @brief Functions related to photo handling. + */ require_once('include/permissions.php'); require_once('include/items.php'); require_once('include/photo/photo_driver.php'); - +/** + * @brief + * + * @param array $channel + * @param array $observer + * @param array $args + * @return array + */ function photo_upload($channel, $observer, $args) { $ret = array('success' => false); @@ -18,12 +29,12 @@ function photo_upload($channel, $observer, $args) { call_hooks('photo_upload_begin', $args); - /** + /* * Determine the album to use */ - $album = $args['album']; - $newalbum = $args['newalbum']; + $album = $args['album']; + $newalbum = $args['newalbum']; logger('photo_upload: album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG); @@ -44,8 +55,7 @@ function photo_upload($channel, $observer, $args) { $str_group_deny = perms2str(((is_array($args['group_deny'])) ? $args['group_deny'] : explode(',',$args['group_deny']))); $str_contact_deny = perms2str(((is_array($args['contact_deny'])) ? $args['contact_deny'] : explode(',',$args['contact_deny']))); - - if($args['data']) { + if ($args['data']) { // allow an import from a binary string representing the image. // This bypasses the upload step and max size limit checking @@ -56,23 +66,21 @@ function photo_upload($channel, $observer, $args) { // this is going to be deleted if it exists $src = '/tmp/deletemenow'; $type = $args['type']; - } - else { + } else { $f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); call_hooks('photo_upload_file',$f); - if(x($f,'src') && x($f,'filesize')) { + if (x($f,'src') && x($f,'filesize')) { $src = $f['src']; $filename = $f['filename']; $filesize = $f['filesize']; $type = $f['type']; - } - else { - $src = $_FILES['userfile']['tmp_name']; - $filename = basename($_FILES['userfile']['name']); - $filesize = intval($_FILES['userfile']['size']); - $type = $_FILES['userfile']['type']; + } else { + $src = $_FILES['userfile']['tmp_name']; + $filename = basename($_FILES['userfile']['name']); + $filesize = intval($_FILES['userfile']['size']); + $type = $_FILES['userfile']['type']; } if (! $type) @@ -82,14 +90,14 @@ function photo_upload($channel, $observer, $args) { $maximagesize = get_config('system','maximagesize'); - if(($maximagesize) && ($filesize > $maximagesize)) { + if (($maximagesize) && ($filesize > $maximagesize)) { $ret['message'] = sprintf ( t('Image exceeds website size limit of %lu bytes'), $maximagesize); @unlink($src); call_hooks('photo_upload_end',$ret); return $ret; } - if(! $filesize) { + if (! $filesize) { $ret['message'] = t('Image file is empty.'); @unlink($src); call_hooks('photo_post_end',$ret); @@ -101,14 +109,13 @@ function photo_upload($channel, $observer, $args) { $imagedata = @file_get_contents($src); } - $r = q("select sum(size) as total from photo where aid = %d and scale = 0 ", intval($account_id) ); $limit = service_class_fetch($channel_id,'photo_upload_limit'); - if(($r) && ($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) { + if (($r) && ($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) { $ret['message'] = upgrade_message(); @unlink($src); call_hooks('photo_post_end',$ret); @@ -117,7 +124,7 @@ function photo_upload($channel, $observer, $args) { $ph = photo_factory($imagedata, $type); - if(! $ph->is_valid()) { + if (! $ph->is_valid()) { $ret['message'] = t('Unable to process image'); logger('photo_upload: unable to process image'); @unlink($src); @@ -127,13 +134,12 @@ function photo_upload($channel, $observer, $args) { $exif = $ph->orient($src); - @unlink($src); $max_length = get_config('system','max_image_length'); - if(! $max_length) + if (! $max_length) $max_length = MAX_IMAGE_LENGTH; - if($max_length > 0) + if ($max_length > 0) $ph->scaleImage($max_length); $width = $ph->getWidth(); @@ -144,7 +150,7 @@ function photo_upload($channel, $observer, $args) { $photo_hash = (($args['resource_id']) ? $args['resource_id'] : photo_new_resource()); $visitor = ''; - if($channel['channel_hash'] !== $observer['xchan_hash']) + if ($channel['channel_hash'] !== $observer['xchan_hash']) $visitor = $observer['xchan_hash']; $errors = false; @@ -163,7 +169,6 @@ function photo_upload($channel, $observer, $args) { if($args['description']) $p['description'] = $args['description']; - $r1 = $ph->save($p); if(! $r1) $errors = true; @@ -214,8 +219,6 @@ function photo_upload($channel, $observer, $args) { } } - - $item_flags = ITEM_WALL|ITEM_ORIGIN|ITEM_THREAD_TOP; $item_restrict = (($visible) ? ITEM_VISIBLE : ITEM_HIDDEN); $title = ''; @@ -263,10 +266,9 @@ function photo_upload($channel, $observer, $args) { $tag = '[zmg]'; } - - $arr['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']' - . $tag . z_root() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/zmg]' - . '[/zrl]'; + $arr['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']' + . $tag . z_root() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/zmg]' + . '[/zrl]'; $result = item_store($arr); $item_id = $result['item_id']; @@ -304,7 +306,7 @@ function photos_albums_list($channel, $observer) { if(! perm_is_allowed($channel_id, $observer_xchan, 'view_photos')) return false; - // FIXME - create a permissions SQL which works on arbitrary observers and channels, regardless of login or web status + /** @FIXME create a permissions SQL which works on arbitrary observers and channels, regardless of login or web status */ $sql_extra = permissions_sql($channel_id); @@ -327,7 +329,8 @@ function photos_albums_list($channel, $observer) { 'total' => $album['total'], 'url' => z_root() . '/photos/' . $channel['channel_address'] . '/album/' . bin2hex($album['album']), 'urlencode' => urlencode($album['album']), - 'bin2hex' => bin2hex($album['album'])); + 'bin2hex' => bin2hex($album['album']) + ); $ret['albums'][] = $entry; } } @@ -360,11 +363,19 @@ function photos_album_widget($channelx,$observer,$albums = null) { ? t('Upload New Photos') : '') )); } + return $o; } - -function photos_list_photos($channel,$observer,$album = '') { +/** + * @brief + * + * @param array $channel + * @param array $observer + * @param string $album default empty + * @return boolean|array + */ +function photos_list_photos($channel, $observer, $album = '') { $channel_id = $channel['channel_id']; $observer_xchan = (($observer) ? $observer['xchan_hash'] : ''); @@ -384,7 +395,7 @@ function photos_list_photos($channel,$observer,$album = '') { intval(PHOTO_NORMAL), intval(PHOTO_PROFILE) ); - + if($r) { for($x = 0; $x < count($r); $x ++) { $r[$x]['src'] = z_root() . '/photo/' . $r[$x]['resource_id'] . '-' . $r[$x]['scale']; @@ -416,6 +427,7 @@ function photos_album_exists($channel_id, $album) { * @brief Renames a photo album in a channel. * * @todo Do we need to check if new album name already exists? + * * @param int $channel_id id of the channel * @param string $oldname The name of the album to rename * @param string $newname The new name of the album @@ -429,25 +441,31 @@ function photos_album_rename($channel_id, $oldname, $newname) { ); } +/** + * @brief + * + * @param int $channel_id + * @param string $album + * @param string $remote_xchan + * @return string|boolean + */ +function photos_album_get_db_idstr($channel_id, $album, $remote_xchan = '') { -function photos_album_get_db_idstr($channel_id,$album,$remote_xchan = '') { - - if($remote_xchan) { + if ($remote_xchan) { $r = q("SELECT distinct resource_id as from photo where xchan = '%s' and uid = %d and album = '%s' ", dbesc($remote_xchan), intval($channel_id), dbesc($album) ); - } - else { + } else { $r = q("SELECT distinct resource_id from photo where uid = %d and album = '%s' ", intval($channel_id), dbesc($album) ); } - if($r) { + if ($r) { $arr = array(); - foreach($r as $rr) { + foreach ($r as $rr) { $arr[] = "'" . dbesc($rr['resource_id']) . "'" ; } $str = implode(',',$arr); @@ -457,6 +475,15 @@ function photos_album_get_db_idstr($channel_id,$album,$remote_xchan = '') { return false; } +/** + * @brief Creates a new photo item. + * + * @param array $channel + * @param string $creator_hash + * @param array $photo + * @param boolean $visible default false + * @return int item_id + */ function photos_create_item($channel, $creator_hash, $photo, $visible = false) { // Create item container @@ -506,7 +533,6 @@ function getGps($exifCoord, $hemi) { $flip = ($hemi == 'W' or $hemi == 'S') ? -1 : 1; return floatval($flip * ($degrees + ($minutes / 60) + ($seconds / 3600))); - } function gps2Num($coordPart) { @@ -521,4 +547,3 @@ function gps2Num($coordPart) { return floatval($parts[0]) / floatval($parts[1]); } - diff --git a/include/plugin.php b/include/plugin.php index b6cfc8d89..4d8405b62 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -7,13 +7,12 @@ require_once("include/smarty.php"); + /** * @brief unloads an addon. * * @param string $plugin name of the addon - * @return void */ - function unload_plugin($plugin){ logger("Addons: unloading " . $plugin, LOGGER_DEBUG); @@ -28,9 +27,8 @@ function unload_plugin($plugin){ * @brief uninstalls an addon. * * @param string $plugin name of the addon - * @return bool + * @return boolean */ - function uninstall_plugin($plugin) { unload_plugin($plugin); @@ -70,7 +68,7 @@ function install_plugin($plugin) { $plugin_admin = (function_exists($plugin . '_plugin_admin') ? 1 : 0); - $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ", + q("INSERT INTO `addon` (`name`, `installed`, `timestamp`, `plugin_admin`) VALUES ( '%s', 1, %d , %d ) ", dbesc($plugin), intval($t), $plugin_admin @@ -196,6 +194,7 @@ function register_hook($hook, $file, $function, $priority = 0) { dbesc($function), dbesc($priority) ); + return $r; } @@ -206,7 +205,7 @@ function register_hook($hook, $file, $function, $priority = 0) { * @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 - * @return mixed + * @return array */ function unregister_hook($hook, $file, $function) { $r = q("DELETE FROM hook WHERE hook = '%s' AND `file` = '%s' AND `function` = '%s'", @@ -214,6 +213,7 @@ function unregister_hook($hook, $file, $function) { dbesc($file), dbesc($function) ); + return $r; } @@ -243,8 +243,7 @@ function load_hooks() { } /** - * - * @function insert_hook($hook,$fn) + * @brief Inserts a hook into a page request. * * Insert a short-lived hook into the running page request. * Hooks are normally persistent so that they can be called @@ -255,9 +254,9 @@ function load_hooks() { * which will not persist beyond the life of this page request * or the current process. * - * @param string $hook; + * @param string $hook * name of hook to attach callback - * @param string $fn; + * @param string $fn * function name of callback handler */ function insert_hook($hook, $fn) { @@ -305,9 +304,10 @@ function call_hooks($name, &$data = null) { /** - * @brief parse plugin comment in search of plugin infos. + * @brief Parse plugin comment in search of plugin infos. * * like + * \code * * Name: Plugin * * Description: A plugin which plugs in * * Version: 1.2.3 @@ -315,7 +315,7 @@ function call_hooks($name, &$data = null) { * * Author: Jane <email> * * Compat: Red [(version)], Friendica [(version)] * * - * + *\endcode * @param string $plugin the name of the plugin * @return array with the plugin information */ @@ -363,9 +363,10 @@ function get_plugin_info($plugin){ /** - * @brief parse theme comment in search of theme infos. + * @brief Parse theme comment in search of theme infos. * * like + * \code * * Name: My Theme * * Description: My Cool Theme * * Version: 1.2.3 @@ -373,7 +374,7 @@ function get_plugin_info($plugin){ * * Maintainer: Jane <profile url> * * Compat: Friendica [(version)], Red [(version)] * * - * + * \endcode * @param string $theme the name of the theme * @return array */ @@ -456,13 +457,11 @@ function get_theme_screenshot($theme) { return($a->get_baseurl() . '/images/blank.png'); } - /** - * @brief add CSS to <head> + * @brief add CSS to \<head\> * * @param string $src * @param string $media change media attribute (default to 'screen') - * @return void */ function head_add_css($src, $media = 'screen') { get_app()->css_sources[] = array($src, $media); @@ -471,21 +470,23 @@ function head_add_css($src, $media = 'screen') { function head_remove_css($src, $media = 'screen') { $a = get_app(); $index = array_search(array($src, $media), $a->css_sources); - if($index !== false) + if ($index !== false) unset($a->css_sources[$index]); } function head_get_css() { $str = ''; $sources = get_app()->css_sources; - if(count($sources)) - foreach($sources as $source) + if (count($sources)) { + foreach ($sources as $source) $str .= format_css_if_exists($source); + } + return $str; } function format_css_if_exists($source) { - if(strpos($source[0], '/') !== false) + if (strpos($source[0], '/') !== false) $path = $source[0]; else $path = theme_include($source[0]); @@ -592,6 +593,7 @@ function theme_include($file, $root = '') { if(file_exists($p)) return $p; } + return ''; } diff --git a/include/poller.php b/include/poller.php index 43cc3f3c0..4786188af 100644 --- a/include/poller.php +++ b/include/poller.php @@ -41,6 +41,12 @@ function poller_run($argv, $argc){ // run queue delivery process in the background proc_run('php',"include/queue.php"); + + + // maintenance for mod sharedwithme - check for updated items and remove them + + require_once('include/sharedwithme.php'); + apply_updates(); // expire any expired mail @@ -82,11 +88,13 @@ function poller_run($argv, $argc){ } // publish any applicable items that were set to be published in the future - // (time travel posts) + // (time travel posts). Restrict to items that have come of age in the last + // couple of days to limit the query to something reasonable. - $r = q("select id from item where ( item_restrict & %d ) > 0 and created <= %s ", + $r = q("select id from item where ( item_restrict & %d ) > 0 and created <= %s and created > '%s' ", intval(ITEM_DELAYED_PUBLISH), - db_utcnow() + db_utcnow(), + dbesc(datetime_convert('UTC','UTC','now - 2 days')) ); if($r) { foreach($r as $rr) { diff --git a/include/security.php b/include/security.php index e9b41dcf9..c3b0e9763 100644 --- a/include/security.php +++ b/include/security.php @@ -396,13 +396,15 @@ function init_groups_visitor($contact_id) { // will likely be too expensive. // Returns a string list of comma separated channel_ids suitable for direct inclusion in a SQL query -function stream_perms_api_uids($perms = NULL ) { +function stream_perms_api_uids($perms = NULL, $limit = 0, $rand = 0 ) { $perms = is_null($perms) ? (PERMS_SITE|PERMS_NETWORK|PERMS_PUBLIC) : $perms; $ret = array(); + $limit_sql = (($limit) ? " LIMIT " . intval($limit) . " " : ''); + $random_sql = (($rand) ? " ORDER BY " . db_getfunc('RAND') . " " : ''); if(local_channel()) $ret[] = local_channel(); - $r = q("select channel_id from channel where channel_r_stream > 0 and (channel_r_stream & %d)>0 and not (channel_pageflags & %d)>0", + $r = q("select channel_id from channel where channel_r_stream > 0 and ( channel_r_stream & %d )>0 and ( channel_pageflags & %d ) = 0 $random_sql $limit_sql ", intval($perms), intval(PAGE_ADULT|PAGE_CENSORED|PAGE_SYSTEM|PAGE_REMOVED) ); diff --git a/include/sharedwithme.php b/include/sharedwithme.php index 3936dc90f..b01764ad3 100644 --- a/include/sharedwithme.php +++ b/include/sharedwithme.php @@ -3,7 +3,7 @@ function apply_updates() { //check for updated items and remove them - $x = q("SELECT mid, object FROM item WHERE verb = '%s' AND obj_type = '%s' GROUP BY mid", + $x = q("SELECT mid, max(object) AS object FROM item WHERE verb = '%s' AND obj_type = '%s' GROUP BY mid", dbesc(ACTIVITY_UPDATE), dbesc(ACTIVITY_OBJ_FILE) ); diff --git a/include/template_processor.php b/include/template_processor.php index 74acc9c67..d2bf283e3 100755 --- a/include/template_processor.php +++ b/include/template_processor.php @@ -1,305 +1,307 @@ <?php - require_once 'include/ITemplateEngine.php'; - - define ("KEY_NOT_EXISTS", '^R_key_not_Exists^'); - - class Template implements ITemplateEngine { - static $name ="internal"; - - var $r; - var $search; - var $replace; - var $stack = array(); - var $nodes = array(); - var $done = false; - var $d = false; - var $lang = null; - var $debug=false; - - private function _preg_error(){ - - switch(preg_last_error()){ - case PREG_INTERNAL_ERROR: echo('PREG_INTERNAL_ERROR'); break; - case PREG_BACKTRACK_LIMIT_ERROR: echo('PREG_BACKTRACK_LIMIT_ERROR'); break; - case PREG_RECURSION_LIMIT_ERROR: echo('PREG_RECURSION_LIMIT_ERROR'); break; - case PREG_BAD_UTF8_ERROR: echo('PREG_BAD_UTF8_ERROR'); break; +require_once 'include/ITemplateEngine.php'; + +define ("KEY_NOT_EXISTS", '^R_key_not_Exists^'); + +class Template implements ITemplateEngine { + static $name ="internal"; + + var $r; + var $search; + var $replace; + var $stack = array(); + var $nodes = array(); + var $done = false; + var $d = false; + var $lang = null; + var $debug=false; + + private function _preg_error() { + switch(preg_last_error()) { + case PREG_INTERNAL_ERROR: echo('PREG_INTERNAL_ERROR'); break; + case PREG_BACKTRACK_LIMIT_ERROR: echo('PREG_BACKTRACK_LIMIT_ERROR'); break; + case PREG_RECURSION_LIMIT_ERROR: echo('PREG_RECURSION_LIMIT_ERROR'); break; + case PREG_BAD_UTF8_ERROR: echo('PREG_BAD_UTF8_ERROR'); break; // This is only valid for php > 5.3, not certain how to code around it for unit tests -// case PREG_BAD_UTF8_OFFSET_ERROR: echo('PREG_BAD_UTF8_OFFSET_ERROR'); break; - default: - //die("Unknown preg error."); - return; - } - echo "<hr><pre>"; - debug_print_backtrace(); - die(); +// case PREG_BAD_UTF8_OFFSET_ERROR: echo('PREG_BAD_UTF8_OFFSET_ERROR'); break; + default: + //die("Unknown preg error."); + return; } - - - private function _push_stack(){ - $this->stack[] = array($this->r, $this->nodes); - } - private function _pop_stack(){ - list($this->r, $this->nodes) = array_pop($this->stack); - - } - - private function _get_var($name, $retNoKey=false){ - $keys = array_map('trim',explode(".",$name)); - if ($retNoKey && !array_key_exists($keys[0], $this->r)) return KEY_NOT_EXISTS; - $val = $this->r; - foreach($keys as $k) { - $val = (isset($val[$k]) ? $val[$k] : null); - } - return template_escape($val); + echo "<hr><pre>"; + debug_print_backtrace(); + die(); + } + + private function _push_stack() { + $this->stack[] = array($this->r, $this->nodes); + } + + private function _pop_stack(){ + list($this->r, $this->nodes) = array_pop($this->stack); + } + + private function _get_var($name, $retNoKey=false) { + $keys = array_map('trim',explode(".",$name)); + if ($retNoKey && !array_key_exists($keys[0], $this->r)) + return KEY_NOT_EXISTS; + + $val = $this->r; + foreach($keys as $k) { + $val = (isset($val[$k]) ? $val[$k] : null); } - - /** - * IF node - * - * {{ if <$var> }}...[{{ else }} ...] {{ endif }} - * {{ if <$var>==<val|$var> }}...[{{ else }} ...]{{ endif }} - * {{ if <$var>!=<val|$var> }}...[{{ else }} ...]{{ endif }} - */ - private function _replcb_if($args){ - if (strpos($args[2],"==")>0){ - list($a,$b) = array_map("trim",explode("==",$args[2])); - $a = $this->_get_var($a); - if ($b[0]=="$") $b = $this->_get_var($b); - $val = ($a == $b); - } else if (strpos($args[2],"!=")>0){ - list($a,$b) = array_map("trim", explode("!=",$args[2])); - $a = $this->_get_var($a); - if ($b[0]=="$") $b = $this->_get_var($b); - $val = ($a != $b); - } else { - $val = $this->_get_var($args[2]); - } - $x = preg_split("|{{ *else *}}|", $args[3]); - return ( ($val) ? $x[0] : (isset($x[1]) ? $x[1] : "")); + + return template_escape($val); + } + + /** + * IF node + * \code + * {{ if <$var> }}...[{{ else }} ...] {{ endif }} + * {{ if <$var>==<val|$var> }}...[{{ else }} ...]{{ endif }} + * {{ if <$var>!=<val|$var> }}...[{{ else }} ...]{{ endif }} + * \endcode + */ + private function _replcb_if($args) { + if (strpos($args[2],"==")>0){ + list($a,$b) = array_map("trim",explode("==",$args[2])); + $a = $this->_get_var($a); + if ($b[0]=="$") $b = $this->_get_var($b); + $val = ($a == $b); + } else if (strpos($args[2],"!=")>0){ + list($a,$b) = array_map("trim", explode("!=",$args[2])); + $a = $this->_get_var($a); + if ($b[0]=="$") $b = $this->_get_var($b); + $val = ($a != $b); + } else { + $val = $this->_get_var($args[2]); } - - /** - * FOR node - * - * {{ for <$var> as $name }}...{{ endfor }} - * {{ for <$var> as $key=>$name }}...{{ endfor }} - */ - private function _replcb_for($args){ - $m = array_map('trim', explode(" as ", $args[2])); - $x = explode("=>",$m[1]); - if (count($x) == 1) { - $varname = $x[0]; - $keyname = ""; - } else { - list($keyname, $varname) = $x; - } - if ($m[0]=="" || $varname=="" || is_null($varname)) die("template error: 'for ".$m[0]." as ".$varname."'") ; - //$vals = $this->r[$m[0]]; - $vals = $this->_get_var($m[0]); - $ret=""; - if (!is_array($vals)) return $ret; - foreach ($vals as $k=>$v){ - $this->_push_stack(); - $r = $this->r; - $r[$varname] = $v; - if ($keyname!='') $r[$keyname] = (($k === 0) ? '0' : $k); - $ret .= $this->replace($args[3], $r); - $this->_pop_stack(); - } - return $ret; + $x = preg_split("|{{ *else *}}|", $args[3]); + + return ( ($val) ? $x[0] : (isset($x[1]) ? $x[1] : "")); + } + + /** + * FOR node + * \code + * {{ for <$var> as $name }}...{{ endfor }} + * {{ for <$var> as $key=>$name }}...{{ endfor }} + * \endcode + */ + private function _replcb_for($args) { + $m = array_map('trim', explode(" as ", $args[2])); + $x = explode("=>",$m[1]); + if (count($x) == 1) { + $varname = $x[0]; + $keyname = ""; + } else { + list($keyname, $varname) = $x; } + if ($m[0]=="" || $varname=="" || is_null($varname)) die("template error: 'for ".$m[0]." as ".$varname."'") ; + //$vals = $this->r[$m[0]]; + $vals = $this->_get_var($m[0]); + $ret=""; + if (!is_array($vals)) return $ret; - /** - * INC node - * - * {{ inc <templatefile> [with $var1=$var2] }}{{ endinc }} - */ - private function _replcb_inc($args){ - if (strpos($args[2],"with")) { - list($tplfile, $newctx) = array_map('trim', explode("with",$args[2])); - } else { - $tplfile = trim($args[2]); - $newctx = null; - } - - if ($tplfile[0]=="$") $tplfile = $this->_get_var($tplfile); - + foreach ($vals as $k=>$v){ $this->_push_stack(); $r = $this->r; - if (!is_null($newctx)) { - list($a,$b) = array_map('trim', explode("=",$newctx)); - $r[$a] = $this->_get_var($b); - } - $this->nodes = Array(); - $tpl = get_markup_template($tplfile); - $ret = $this->replace($tpl, $r); + $r[$varname] = $v; + if ($keyname!='') $r[$keyname] = (($k === 0) ? '0' : $k); + $ret .= $this->replace($args[3], $r); $this->_pop_stack(); - return $ret; - } - - /** - * DEBUG node - * - * {{ debug $var [$var [$var [...]]] }}{{ enddebug }} - * - * replace node with <pre>var_dump($var, $var, ...);</pre> - */ - private function _replcb_debug($args){ - $vars = array_map('trim', explode(" ",$args[2])); - $vars[] = $args[1]; - - $ret = "<pre>"; - foreach ($vars as $var){ - $ret .= htmlspecialchars(var_export( $this->_get_var($var), true )); - $ret .= "\n"; - } - $ret .= "</pre>"; - return $ret; + + return $ret; + } + + /** + * INC node + * \code + * {{ inc <templatefile> [with $var1=$var2] }}{{ endinc }} + * \endcode + */ + private function _replcb_inc($args) { + if (strpos($args[2],"with")) { + list($tplfile, $newctx) = array_map('trim', explode("with",$args[2])); + } else { + $tplfile = trim($args[2]); + $newctx = null; } - private function _replcb_node($m) { - $node = $this->nodes[$m[1]]; - if (method_exists($this, "_replcb_".$node[1])){ - $s = call_user_func(array($this, "_replcb_".$node[1]), $node); - } else { - $s = ""; - } - $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); - return $s; + if ($tplfile[0]=="$") $tplfile = $this->_get_var($tplfile); + + $this->_push_stack(); + $r = $this->r; + if (!is_null($newctx)) { + list($a,$b) = array_map('trim', explode("=",$newctx)); + $r[$a] = $this->_get_var($b); + } + $this->nodes = Array(); + $tpl = get_markup_template($tplfile); + $ret = $this->replace($tpl, $r); + $this->_pop_stack(); + + return $ret; + } + + /** + * DEBUG node + * \code + * {{ debug $var [$var [$var [...]]] }}{{ enddebug }} + * \endcode + * replace node with <pre>var_dump($var, $var, ...);</pre> + */ + private function _replcb_debug($args) { + $vars = array_map('trim', explode(" ",$args[2])); + $vars[] = $args[1]; + + $ret = "<pre>"; + foreach ($vars as $var){ + $ret .= htmlspecialchars(var_export( $this->_get_var($var), true )); + $ret .= "\n"; } - - private function _replcb($m){ - //var_dump(array_map('htmlspecialchars', $m)); - $this->done = false; - $this->nodes[] = (array) $m; - return "||". (count($this->nodes)-1) ."||"; + $ret .= "</pre>"; + + return $ret; + } + + private function _replcb_node($m) { + $node = $this->nodes[$m[1]]; + if (method_exists($this, "_replcb_".$node[1])){ + $s = call_user_func(array($this, "_replcb_".$node[1]), $node); + } else { + $s = ""; } - - private function _build_nodes($s){ - $this->done = false; - while (!$this->done){ - $this->done=true; - $s = preg_replace_callback('|{{ *([a-z]*) *([^}]*)}}([^{]*({{ *else *}}[^{]*)?){{ *end\1 *}}|', array($this, "_replcb"), $s); - if ($s==Null) $this->_preg_error(); - } - //({{ *else *}}[^{]*)? - krsort($this->nodes); - return $s; + $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); + + return $s; + } + + private function _replcb($m) { + //var_dump(array_map('htmlspecialchars', $m)); + $this->done = false; + $this->nodes[] = (array) $m; + + return "||". (count($this->nodes)-1) ."||"; + } + + private function _build_nodes($s) { + $this->done = false; + while (!$this->done) { + $this->done=true; + $s = preg_replace_callback('|{{ *([a-z]*) *([^}]*)}}([^{]*({{ *else *}}[^{]*)?){{ *end\1 *}}|', array($this, "_replcb"), $s); + if ($s==Null) $this->_preg_error(); } - - - private function var_replace($s){ - $m = array(); - /** regexp: - * \$ literal $ - * (\[)? optional open square bracket - * ([a-zA-Z0-9-_]+\.?)+ var name, followed by optional - * dot, repeated at least 1 time - * (?(1)\]) if there was opened square bracket - * (subgrup 1), match close bracket - */ - if (preg_match_all('/\$(\[)?([a-zA-Z0-9-_]+\.?)+(?(1)\])/', $s,$m)){ - foreach($m[0] as $var){ - - $exp = str_replace(array("[", "]"), array("", ""), $var); - $exptks = explode("|", $exp); - - $varn = $exptks[0]; - unset($exptks[0]); - $val = $this->_get_var($varn, true); - if ($val != KEY_NOT_EXISTS) { - /* run filters */ - /* - * Filter are in form of: - * filtername:arg:arg:arg - * - * "filtername" is function name - * "arg"s are optional, var value is appended to the end - * if one "arg"==='x' , is replaced with var value - * - * examples: - * $item.body|htmlspecialchars // escape html chars - * $item.body|htmlspecialchars|strtoupper // escape html and uppercase result - * $item.created|date:%Y %M %j // format date (created is a timestamp) - * $item.body|str_replace:cat:dog // replace all "cat" with "dog" - * $item.body|str_replace:cat:dog:x:1 // replace one "cat" with "dog" - - */ - foreach ($exptks as $filterstr) { - $filter = explode(":", $filterstr); - $filtername = $filter[0]; - unset($filter[0]); - $valkey = array_search("x", $filter); - if ($valkey === false) { - $filter[] = $val; - } else { - $filter[$valkey] = $val; - } - if (function_exists($filtername)) { - $val = call_user_func_array($filtername, $filter); - } - } - $s = str_replace($var, $val, $s); + //({{ *else *}}[^{]*)? + krsort($this->nodes); + + return $s; + } + private function var_replace($s) { + $m = array(); + /** regexp: + * \$ literal $ + * (\[)? optional open square bracket + * ([a-zA-Z0-9-_]+\.?)+ var name, followed by optional + * dot, repeated at least 1 time + * (?(1)\]) if there was opened square bracket + * (subgrup 1), match close bracket + */ + if (preg_match_all('/\$(\[)?([a-zA-Z0-9-_]+\.?)+(?(1)\])/', $s,$m)) { + foreach ($m[0] as $var) { + $exp = str_replace(array("[", "]"), array("", ""), $var); + $exptks = explode("|", $exp); + + $varn = $exptks[0]; + unset($exptks[0]); + $val = $this->_get_var($varn, true); + if ($val != KEY_NOT_EXISTS) { + /* run filters */ + /* + * Filter are in form of: + * filtername:arg:arg:arg + * + * "filtername" is function name + * "arg"s are optional, var value is appended to the end + * if one "arg"==='x' , is replaced with var value + * + * examples: + * $item.body|htmlspecialchars // escape html chars + * $item.body|htmlspecialchars|strtoupper // escape html and uppercase result + * $item.created|date:%Y %M %j // format date (created is a timestamp) + * $item.body|str_replace:cat:dog // replace all "cat" with "dog" + * $item.body|str_replace:cat:dog:x:1 // replace one "cat" with "dog" + */ + foreach ($exptks as $filterstr) { + $filter = explode(":", $filterstr); + $filtername = $filter[0]; + unset($filter[0]); + $valkey = array_search("x", $filter); + if ($valkey === false) { + $filter[] = $val; + } else { + $filter[$valkey] = $val; + } + if (function_exists($filtername)) { + $val = call_user_func_array($filtername, $filter); + } } + $s = str_replace($var, $val, $s); } } - - return $s; - } - - private function replace($s,$r) { - $this->replace_macros($s, $r); - } - - // TemplateEngine interface - public function replace_macros($s, $r) { - $this->r = $r; - - $s = $this->_build_nodes($s); - - $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); - if ($s==Null) $this->_preg_error(); - - // remove comments block - $s = preg_replace('/{#[^#]*#}/', "" , $s); - - $t2 = dba_timer(); - - // replace strings recursively (limit to 10 loops) - $os = ""; $count=0; - while(($os !== $s) && $count<10){ - $os=$s; $count++; - $s = $this->var_replace($s); - } - return $s; } - public function get_markup_template($file, $root='') { - $template_file = theme_include($file, $root); - if ($template_file) { - $content = file_get_contents($template_file); - } - return $content; - } + return $s; } - + private function replace($s, $r) { + $this->replace_macros($s, $r); + } + // TemplateEngine interface + public function replace_macros($s, $r) { + $this->r = $r; + $s = $this->_build_nodes($s); -function template_escape($s) { + $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); + if ($s == Null) + $this->_preg_error(); - return str_replace(array('$','{{'),array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),$s); + // remove comments block + $s = preg_replace('/{#[^#]*#}/', "" , $s); + //$t2 = dba_timer(); -} + // replace strings recursively (limit to 10 loops) + $os = ""; + $count=0; + while (($os !== $s) && $count<10) { + $os=$s; + $count++; + $s = $this->var_replace($s); + } -function template_unescape($s) { + return $s; + } - return str_replace(array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),array('$','{{'),$s); + public function get_markup_template($file, $root='') { + $template_file = theme_include($file, $root); + if ($template_file) { + $content = file_get_contents($template_file); + } + return $content; + } +} +function template_escape($s) { + return str_replace(array('$','{{'),array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),$s); +} + +function template_unescape($s) { + return str_replace(array('!_Doll^Ars1Az_!','!_DoubLe^BraceS4Rw_!'),array('$','{{'),$s); } diff --git a/include/text.php b/include/text.php index 86da3ee42..664d5f83d 100644 --- a/include/text.php +++ b/include/text.php @@ -1,18 +1,26 @@ -<?php /** @file */ - +<?php +/** + * @file include/text.php + */ require_once("include/template_processor.php"); require_once("include/smarty.php"); +// random string, there are 86 characters max in text mode, 128 for hex +// output is urlsafe + +define('RANDOM_STRING_HEX', 0x00 ); +define('RANDOM_STRING_TEXT', 0x01 ); + /** - * This is our template processor + * @brief This is our template processor. * * @param string|FriendicaSmarty $s the string requiring macro substitution, - * or an instance of FriendicaSmarty + * or an instance of FriendicaSmarty * @param array $r key value pairs (search => replace) * @return string substituted string */ -function replace_macros($s,$r) { +function replace_macros($s, $r) { $a = get_app(); $arr = array('template' => $s, 'params' => $r); @@ -24,40 +32,38 @@ function replace_macros($s,$r) { return $output; } - -// random string, there are 86 characters max in text mode, 128 for hex -// output is urlsafe - -define('RANDOM_STRING_HEX', 0x00 ); -define('RANDOM_STRING_TEXT', 0x01 ); - - -function random_string($size = 64,$type = RANDOM_STRING_HEX) { +/** + * @brief Generates a random string. + * + * @param number $size + * @param int $type + * @return string + */ +function random_string($size = 64, $type = RANDOM_STRING_HEX) { // generate a bit of entropy and run it through the whirlpool $s = hash('whirlpool', (string) rand() . uniqid(rand(),true) . (string) rand(),(($type == RANDOM_STRING_TEXT) ? true : false)); $s = (($type == RANDOM_STRING_TEXT) ? str_replace("\n","",base64url_encode($s,true)) : $s); - return(substr($s,0,$size)); + + return(substr($s, 0, $size)); } /** - * This is our primary input filter. + * @brief This is our primary input filter. * * The high bit hack only involved some old IE browser, forget which (IE5/Mac?) * that had an XSS attack vector due to stripping the high-bit on an 8-bit character * after cleansing, and angle chars with the high bit set could get through as markup. - * + * * This is now disabled because it was interfering with some legitimate unicode sequences * and hopefully there aren't a lot of those browsers left. * * Use this on any text input where angle chars are not valid or permitted * They will be replaced with safer brackets. This may be filtered further - * if these are not allowed either. + * if these are not allowed either. * * @param string $string Input string * @return string Filtered string */ - - function notags($string) { return(str_replace(array("<",">"), array('[',']'), $string)); @@ -105,7 +111,6 @@ function z_input_filter($channel_id,$s,$type = 'text/bbcode') { return purify_html($s); return escape_tags($s); - } @@ -114,39 +119,38 @@ function purify_html($s) { require_once('library/HTMLPurifier.auto.php'); require_once('include/html2bbcode.php'); -// FIXME this function has html output, not bbcode - so safely purify these -// $s = html2bb_video($s); -// $s = oembed_html2bbcode($s); +/** + * @FIXME this function has html output, not bbcode - so safely purify these + * $s = html2bb_video($s); + * $s = oembed_html2bbcode($s); + */ $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); $config->set('Attr.EnableID', true); $purifier = new HTMLPurifier($config); + return $purifier->purify($s); } - - -// generate a string that's random, but usually pronounceable. -// used to generate initial passwords - - /** - * generate a string that's random, but usually pronounceable. - * used to generate initial passwords + * @brief generate a string that's random, but usually pronounceable. + * + * Used to generate initial passwords. + * * @param int $len * @return string */ function autoname($len) { - if($len <= 0) + if ($len <= 0) return ''; $vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u'); - if(mt_rand(0,5) == 4) + if (mt_rand(0, 5) == 4) $vowels[] = 'y'; $cons = array( @@ -178,8 +182,8 @@ function autoname($len) { $noend = array('bl', 'br', 'cl','cr','dr','fl','fr','gl','gr', 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh'); - $start = mt_rand(0,2); - if($start == 0) + $start = mt_rand(0, 2); + if ($start == 0) $table = $vowels; else $table = $cons; @@ -190,33 +194,30 @@ function autoname($len) { $r = mt_rand(0,count($table) - 1); $word .= $table[$r]; - if($table == $vowels) - $table = array_merge($cons,$midcons); + if ($table == $vowels) + $table = array_merge($cons, $midcons); else $table = $vowels; - } $word = substr($word,0,$len); - foreach($noend as $noe) { - if((strlen($word) > 2) && (substr($word,-2) == $noe)) { + foreach ($noend as $noe) { + if ((strlen($word) > 2) && (substr($word,-2) == $noe)) { $word = substr($word,0,-1); break; } } - if(substr($word,-1) == 'q') - $word = substr($word,0,-1); + if (substr($word, -1) == 'q') + $word = substr($word, 0, -1); + return $word; } -// escape text ($str) for XML transport -// returns escaped text. - - /** - * escape text ($str) for XML transport + * @brief escape text ($str) for XML transport + * * @param string $str * @return string Escaped text. */ @@ -228,7 +229,6 @@ function xmlify($str) { $char = mb_substr($str,$x,1); switch( $char ) { - case "\r" : break; case "&" : @@ -252,9 +252,10 @@ function xmlify($str) { default : $buffer .= $char; break; - } + } } $buffer = trim($buffer); + return($buffer); } @@ -268,10 +269,12 @@ function unxmlify($s) { return $ret; } -// convenience wrapper, reverse the operation "bin2hex" - -// This is a built-in function in php >= 5.4 - +/** + * Convenience wrapper, reverse the operation "bin2hex" + * This is a built-in function in php >= 5.4 + * + * @FIXME We already have php >= 5.4 requirements, so can we remove this? + */ if(! function_exists('hex2bin')) { function hex2bin($s) { if(! (is_string($s) && strlen($s))) @@ -381,14 +384,16 @@ function alt_pager(&$a, $i, $more = '', $less = '') { } -// Turn user/group ACLs stored as angle bracketed text into arrays - - +/** + * @brief Turn user/group ACLs stored as angle bracketed text into arrays. + * + * turn string array of angle-bracketed elements into string array + * e.g. "<123xyz><246qyo><sxo33e>" => array(123xyz,246qyo,sxo33e); + * + * @param string $s + * @return array + */ function expand_acl($s) { - - // turn string array of angle-bracketed elements into string array - // e.g. "<123xyz><246qyo><sxo33e>" => array(123xyz,246qyo,sxo33e); - $ret = array(); if(strlen($s)) { @@ -399,34 +404,41 @@ function expand_acl($s) { $ret[] = $aa; } } + return $ret; } -// Used to wrap ACL elements in angle brackets for storage - - +/** + * @brief Used to wrap ACL elements in angle brackets for storage. + * + * @param[in,out] array &$item + */ function sanitise_acl(&$item) { - if(strlen($item)) + if (strlen($item)) $item = '<' . notags(trim($item)) . '>'; else unset($item); } - -// Convert an ACL array to a storable string - +/** + * @brief Convert an ACL array to a storable string. + * + * @param array $p + * @return array + */ function perms2str($p) { $ret = ''; - if(is_array($p)) + if (is_array($p)) $tmp = $p; else - $tmp = explode(',',$p); + $tmp = explode(',', $p); - if(is_array($tmp)) { - array_walk($tmp,'sanitise_acl'); - $ret = implode('',$tmp); + if (is_array($tmp)) { + array_walk($tmp, 'sanitise_acl'); + $ret = implode('', $tmp); } + return $ret; } @@ -858,51 +870,48 @@ function valid_email($x){ return false; } - /** + * @brief Replace naked text hyperlink with HTML formatted hyperlink. * - * Function: linkify - * - * Replace naked text hyperlink with HTML formatted hyperlink - * + * @param string $s + * @param boolean $me (optional) default false + * @return string */ - - -function linkify($s,$me = false) { +function linkify($s, $me = false) { $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\@\~\#\'\%\$\!\+\,\@]*)/", (($me) ? ' <a href="$1" rel="me" >$1</a>' : ' <a href="$1" >$1</a>'), $s); $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$s); + return($s); } - /** - * @function sslify($s) - * Replace media element using http url with https to a local redirector if using https locally - * @param string $s + * @brief Replace media element using http url with https to a local redirector + * if using https locally. * * Looks for HTML tags containing src elements that are http when we're viewing an https page * Typically this throws an insecure content violation in the browser. So we redirect them * to a local redirector which uses https and which redirects to the selected content * + * @param string $s * @returns string */ function sslify($s) { - if(strpos(z_root(),'https:') === false) + if (strpos(z_root(),'https:') === false) return $s; $matches = null; $cnt = preg_match_all("/\<(.*?)src=\"(http\:.*?)\"(.*?)\>/",$s,$matches,PREG_SET_ORDER); - if($cnt) { - foreach($matches as $match) { - $filename = basename( parse_url($match[2],PHP_URL_PATH) ); + if ($cnt) { + foreach ($matches as $match) { + $filename = basename( parse_url($match[2], PHP_URL_PATH) ); $s = str_replace($match[2],z_root() . '/sslify/' . $filename . '?f=&url=' . urlencode($match[2]),$s); } } + return $s; } - function get_poke_verbs() { // index is present tense verb // value is array containing past tense verb, translation of present, translation of past @@ -1033,47 +1042,42 @@ function list_smilies() { $params = array('texts' => $texts, 'icons' => $icons); call_hooks('smilie', $params); + return $params; } /** - * - * Function: smilies - * - * Description: - * Replaces text emoticons with graphical images - * - * @Parameter: string $s - * - * Returns string + * @brief Replaces text emoticons with graphical images. * * It is expected that this function will be called using HTML text. * We will escape text between HTML pre and code blocks, and HTML attributes * (such as urls) from being processed. - * + * * At a higher level, the bbcode [nosmile] tag can be used to prevent this * function from being executed by the prepare_text() routine when preparing - * bbcode source for HTML display + * bbcode source for HTML display. * + * @param string $s + * @param boolean $sample (optional) default false + * @return string */ function smilies($s, $sample = false) { - if(intval(get_config('system','no_smilies')) - || (local_channel() && intval(get_pconfig(local_channel(),'system','no_smilies')))) + if(intval(get_config('system', 'no_smilies')) + || (local_channel() && intval(get_pconfig(local_channel(), 'system', 'no_smilies')))) return $s; - $s = preg_replace_callback('{<(pre|code)>.*?</\1>}ism','smile_shield',$s); - $s = preg_replace_callback('/<[a-z]+ .*?>/ism','smile_shield',$s); + $s = preg_replace_callback('{<(pre|code)>.*?</\1>}ism', 'smile_shield', $s); + $s = preg_replace_callback('/<[a-z]+ .*?>/ism', 'smile_shield', $s); $params = list_smilies(); $params['string'] = $s; - if($sample) { + if ($sample) { $s = '<div class="smiley-sample">'; - for($x = 0; $x < count($params['texts']); $x ++) { + for ($x = 0; $x < count($params['texts']); $x ++) { $s .= '<dl><dt>' . $params['texts'][$x] . '</dt><dd>' . $params['icons'][$x] . '</dd></dl>'; } - } - else { + } else { $params['string'] = preg_replace_callback('/<(3+)/','preg_heart',$params['string']); $s = str_replace($params['texts'],$params['icons'],$params['string']); } @@ -1083,6 +1087,12 @@ function smilies($s, $sample = false) { return $s; } +/** + * @brief + * + * @param array $m + * @return string + */ function smile_shield($m) { return '<!--base64:' . base64url_encode($m[0]) . '-->'; } @@ -1091,16 +1101,22 @@ function smile_unshield($m) { return base64url_decode($m[1]); } -// expand <3333 to the correct number of hearts - +/** + * @brief Expand <3333 to the correct number of hearts. + * + * @param array $x + */ function preg_heart($x) { $a = get_app(); - if(strlen($x[1]) == 1) + if (strlen($x[1]) == 1) return $x[0]; + $t = ''; for($cnt = 0; $cnt < strlen($x[1]); $cnt ++) $t .= '<img class="smiley" src="' . $a->get_baseurl() . '/images/smiley-heart.gif" alt="<3" />'; + $r = str_replace($x[0],$t,$x[0]); + return $r; } @@ -1118,27 +1134,33 @@ function day_translate($s) { return $ret; } - - +/** + * @brief normalises a string. + * + * @param string $url + * @return string + */ function normalise_link($url) { - $ret = str_replace(array('https:','//www.'), array('http:','//'), $url); - return(rtrim($ret,'/')); + $ret = str_replace(array('https:', '//www.'), array('http:', '//'), $url); + + return(rtrim($ret, '/')); } /** + * @brief Compare two URLs to see if they are the same. * - * Compare two URLs to see if they are the same, but ignore - * slight but hopefully insignificant differences such as if one - * is https and the other isn't, or if one is www.something and - * the other isn't - and also ignore case differences. + * But ignore slight but hopefully insignificant differences such as if one + * is https and the other isn't, or if one is www.something and the other + * isn't - and also ignore case differences. * - * Return true if the URLs match, otherwise false. + * @see normalis_link() * + * @param string $a + * @param string $b + * @return true if the URLs match, otherwise false */ - - -function link_compare($a,$b) { - if(strcasecmp(normalise_link($a),normalise_link($b)) === 0) +function link_compare($a, $b) { + if (strcasecmp(normalise_link($a), normalise_link($b)) === 0) return true; return false; @@ -1167,8 +1189,10 @@ function theme_attachments(&$item) { $icon = ''; $icontype = substr($r['type'],0,strpos($r['type'],'/')); - // FIXME This should probably be a giant "if" statement in the template so that we don't have icon names - // embedded in php code + /** + * @FIXME This should probably be a giant "if" statement in the + * template so that we don't have icon names embedded in php code. + */ switch($icontype) { case 'video': @@ -1309,13 +1333,13 @@ function generate_map($coord) { $coord = str_replace(array(',','/',' '),array(' ',' ',' '),$coord); $arr = array('lat' => trim(substr($coord,0,strpos($coord,' '))), 'lon' => trim(substr($coord,strpos($coord,' ')+1)), 'html' => ''); call_hooks('generate_map',$arr); - return $arr['html']; + return (($arr['html']) ? $arr['html'] : $coord); } function generate_named_map($location) { $arr = array('location' => $location, 'html' => ''); call_hooks('generate_named_map',$arr); - return $arr['html']; + return (($arr['html']) ? $arr['html'] : $location); } @@ -1394,11 +1418,14 @@ function prepare_body(&$item,$attach = false) { return $prep_arr['html']; } - -// Given a text string, convert from bbcode to html and add smilie icons. - - -function prepare_text($text,$content_type = 'text/bbcode') { +/** + * @brief Given a text string, convert from bbcode to html and add smilie icons. + * + * @param string $text + * @param sting $content_type + * @return string + */ +function prepare_text($text, $content_type = 'text/bbcode') { switch($content_type) { case 'text/plain': @@ -1451,19 +1478,21 @@ function prepare_text($text,$content_type = 'text/bbcode') { /** * zidify_callback() and zidify_links() work together to turn any HTML a tags with class="zrl" into zid links - * These will typically be generated by a bbcode '[zrl]' tag. This is done inside prepare_text() rather than bbcode() + * These will typically be generated by a bbcode '[zrl]' tag. This is done inside prepare_text() rather than bbcode() * because the latter is used for general purpose conversions and the former is used only when preparing text for * immediate display. - * + * * Issues: Currently the order of HTML parameters in the text is somewhat rigid and inflexible. - * We assume it looks like <a class="zrl" href="xxxxxxxxxx"> and will not work if zrl and href appear in a different order. + * We assume it looks like \<a class="zrl" href="xxxxxxxxxx"\> and will not work if zrl and href appear in a different order. + * + * @param array $match + * @return string */ - - function zidify_callback($match) { $is_zid = ((feature_enabled(local_channel(),'sendzid')) || (strpos($match[1],'zrl')) ? true : false); $replace = '<a' . $match[1] . ' href="' . (($is_zid) ? zid($match[2]) : $match[2]) . '"'; $x = str_replace($match[0],$replace,$match[0]); + return $x; } @@ -1472,6 +1501,7 @@ function zidify_img_callback($match) { $replace = '<img' . $match[1] . ' src="' . (($is_zid) ? zid($match[2]) : $match[2]) . '"'; $x = str_replace($match[0],$replace,$match[0]); + return $x; } @@ -1479,16 +1509,17 @@ function zidify_img_callback($match) { function zidify_links($s) { $s = preg_replace_callback('/\<a(.*?)href\=\"(.*?)\"/ism','zidify_callback',$s); $s = preg_replace_callback('/\<img(.*?)src\=\"(.*?)\"/ism','zidify_img_callback',$s); + return $s; } - /** - * return atom link elements for all of our hubs + * @brief Return atom link elements for all of our hubs. + * + * @return string */ - function feed_hublinks() { - $hub = get_config('system','huburl'); + $hub = get_config('system', 'huburl'); $hubxml = ''; if(strlen($hub)) { @@ -1498,6 +1529,7 @@ function feed_hublinks() { $h = trim($h); if(! strlen($h)) continue; + $hubxml .= '<link rel="hub" href="' . xmlify($h) . '" />' . "\n" ; } } @@ -1855,9 +1887,13 @@ function check_webbie($arr) { function ids_to_querystr($arr,$idx = 'id') { $t = array(); - foreach($arr as $x) - $t[] = $x[$idx]; - + if($arr) { + foreach($arr as $x) { + if(! in_array($x[$idx],$t)) { + $t[] = $x[$idx]; + } + } + } return(implode(',', $t)); } @@ -2090,18 +2126,19 @@ function extra_query_args() { } /** - * This function removes the tag $tag from the text $body and replaces it with - * the appropiate link. - * - * @param unknown_type $body the text to replace the tag in - * @param unknown_type $access_tag - used to return tag ACL exclusions e.g. @!foo - * @param unknown_type $str_tags string to add the tag to - * @param unknown_type $profile_uid - * @param unknown_type $tag the tag to replace + * @brief This function removes the tag $tag from the text $body and replaces it + * with the appropiate link. * + * @param App $a + * @param[in,out] string &$body the text to replace the tag in + * @param[in,out] string &$access_tag used to return tag ACL exclusions e.g. @!foo + * @param[in,out] string &$str_tags string to add the tag to + * @param int $profile_uid + * @param string $tag the tag to replace + * @param boolean $diaspora default false * @return boolean true if replaced, false if not replaced */ -function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { +function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag, $diaspora = false) { $replaced = false; $r = null; @@ -2169,7 +2206,7 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { if(strpos($tag,'@') === 0) { // The @! tag will alter permissions - $exclusive = ((strpos($tag,'!') === 1) ? true : false); + $exclusive = ((strpos($tag,'!') === 1 && (! $diaspora)) ? true : false); //is it already replaced? if(strpos($tag,'[zrl=')) @@ -2198,10 +2235,19 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { // Here we're looking for an address book entry as provided by the auto-completer // of the form something+nnn where nnn is an abook_id or the first chars of xchan_hash - if(strrpos($newname,'+')) { + + // If there's a +nnn in the string make sure there isn't a space preceding it + + $t1 = strpos($newname,' '); + $t2 = strrpos($newname,'+'); + + if($t1 && $t2 && $t1 < $t2) + $t2 = 0; + + if(($t2) && (! $diaspora)) { //get the id - $tagcid = substr($newname,strrpos($newname,'+') + 1); + $tagcid = substr($newname,$t2 + 1); if(strrpos($tagcid,' ')) $tagcid = substr($tagcid,0,strrpos($tagcid,' ')); @@ -2346,7 +2392,7 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag) { return array('replaced' => $replaced, 'termtype' => $termtype, 'term' => $newname, 'url' => $url, 'contact' => $r[0]); } -function linkify_tags($a, &$body, $uid) { +function linkify_tags($a, &$body, $uid, $diaspora = false) { $str_tags = ''; $tagged = array(); $results = array(); @@ -2370,7 +2416,7 @@ function linkify_tags($a, &$body, $uid) { if($fullnametagged) continue; - $success = handle_tag($a, $body, $access_tag, $str_tags, ($uid) ? $uid : $a->profile_uid , $tag); + $success = handle_tag($a, $body, $access_tag, $str_tags, ($uid) ? $uid : $a->profile_uid , $tag, $diaspora); $results[] = array('success' => $success, 'access_tag' => $access_tag); if($success['replaced']) $tagged[] = $tag; } diff --git a/include/zot.php b/include/zot.php index 99a787cd9..28a2e8957 100644 --- a/include/zot.php +++ b/include/zot.php @@ -1,110 +1,113 @@ -<?php /** @file */ - -require_once('include/crypto.php'); -require_once('include/items.php'); -require_once('include/hubloc.php'); - +<?php /** - * Red implementation of zot protocol. + * @file include/zot.php + * @brief RedMatrix implementation of zot protocol. * * https://github.com/friendica/red/wiki/zot * https://github.com/friendica/red/wiki/Zot---A-High-Level-Overview * */ +require_once('include/crypto.php'); +require_once('include/items.php'); +require_once('include/hubloc.php'); + /** + * @brief Generates a unique string for use as a zot guid. * - * @function zot_new_uid($channel_nick) - * - * Generates a unique string for use as a zot guid using our DNS-based url, the channel nickname and some entropy. - * The entropy ensures uniqueness against re-installs where the same URL and nickname are chosen. - * NOTE: zot doesn't require this to be unique. Internally we use a whirlpool hash of this guid and the signature - * of this guid signed with the channel private key. This can be verified and should make the probability of - * collision of the verified result negligible within the constraints of our immediate universe. + * Generates a unique string for use as a zot guid using our DNS-based url, the + * channel nickname and some entropy. + * The entropy ensures uniqueness against re-installs where the same URL and + * nickname are chosen. * - * @param string channel_nickname = unique nickname of controlling entity + * @note zot doesn't require this to be unique. Internally we use a whirlpool + * hash of this guid and the signature of this guid signed with the channel + * private key. This can be verified and should make the probability of + * collision of the verified result negligible within the constraints of our + * immediate universe. * + * @param string $channel_nick a unique nickname of controlling entity * @returns string - * */ - function zot_new_uid($channel_nick) { $rawstr = z_root() . '/' . $channel_nick . '.' . mt_rand(); - return(base64url_encode(hash('whirlpool',$rawstr,true),true)); + return(base64url_encode(hash('whirlpool', $rawstr, true), true)); } - /** + * @brief Generates a portable hash identifier for a channel. * - * function make_xchan_hash($guid,$guid_sig) - * - * Generates a portable hash identifier for the channel identified by $guid and signed with $guid_sig - * This ID is portable across the network but MUST be calculated locally by verifying the signature - * and can not be trusted as an identity. + * Generates a portable hash identifier for the channel identified by $guid and + * signed with $guid_sig. + * This ID is portable across the network but MUST be calculated locally by + * verifying the signature and can not be trusted as an identity. * + * @param string $guid + * @param string $guid_sig */ - -function make_xchan_hash($guid,$guid_sig) { - return base64url_encode(hash('whirlpool',$guid . $guid_sig, true)); +function make_xchan_hash($guid, $guid_sig) { + return base64url_encode(hash('whirlpool', $guid . $guid_sig, true)); } /** - * @function zot_get_hublocs($hash) - * Given a zot hash, return all distinct hubs. - * This function is used in building the zot discovery packet - * and therefore should only be used by channels which are defined - * on this hub - * @param string $hash - xchan_hash - * @retuns array of hubloc (hub location structures) - * hubloc_id int - * hubloc_guid char(255) - * hubloc_guid_sig text - * hubloc_hash char(255) - * hubloc_addr char(255) - * hubloc_flags int - * hubloc_status int - * hubloc_url char(255) - * hubloc_url_sig text - * hubloc_host char(255) - * hubloc_callback char(255) - * hubloc_connect char(255) - * hubloc_sitekey text - * hubloc_updated datetime - * hubloc_connected datetime + * @brief Given a zot hash, return all distinct hubs. + * + * This function is used in building the zot discovery packet and therefore + * should only be used by channels which are defined on this hub. * + * @param string $hash - xchan_hash + * @returns array of hubloc (hub location structures) + * * \b hubloc_id int + * * \b hubloc_guid char(255) + * * \b hubloc_guid_sig text + * * \b hubloc_hash char(255) + * * \b hubloc_addr char(255) + * * \b hubloc_flags int + * * \b hubloc_status int + * * \b hubloc_url char(255) + * * \b hubloc_url_sig text + * * \b hubloc_host char(255) + * * \b hubloc_callback char(255) + * * \b hubloc_connect char(255) + * * \b hubloc_sitekey text + * * \b hubloc_updated datetime + * * \b hubloc_connected datetime */ - function zot_get_hublocs($hash) { - /** Only search for active hublocs - e.g. those that haven't been marked deleted */ + /* Only search for active hublocs - e.g. those that haven't been marked deleted */ $ret = q("select * from hubloc where hubloc_hash = '%s' and not ( hubloc_flags & %d )>0 order by hubloc_url ", dbesc($hash), intval(HUBLOC_FLAGS_DELETED) ); + return $ret; } /** + * @brief Builds a zot notification packet. * - * @function zot_build_packet($channel,$type = 'notify',$recipients = null, $remote_key = null, $secret = null) - * builds a zot notification packet that you can either - * store in the queue with a message array or call zot_zot to immediately - * zot it to the other side - * - * @param array $channel => sender channel structure - * @param string $type => packet type: one of 'ping', 'pickup', 'purge', 'refresh', 'force_refresh', 'notify', 'auth_check' - * @param array $recipients => envelope information, array ( 'guid' => string, 'guid_sig' => string ); empty for public posts - * @param string $remote_key => optional public site key of target hub used to encrypt entire packet - * NOTE: remote_key and encrypted packets are required for 'auth_check' packets, optional for all others - * @param string $secret => random string, required for packets which require verification/callback - * e.g. 'pickup', 'purge', 'notify', 'auth_check'. Packet types 'ping', 'force_refresh', and 'refresh' do not require verification + * Builds a zot notification packet that you can either store in the queue with + * a message array or call zot_zot to immediately zot it to the other side. * + * @param array $channel + * sender channel structure + * @param string $type + * packet type: one of 'ping', 'pickup', 'purge', 'refresh', 'force_refresh', 'notify', 'auth_check' + * @param array $recipients + * envelope information, array ( 'guid' => string, 'guid_sig' => string ); empty for public posts + * @param string $remote_key + * optional public site key of target hub used to encrypt entire packet + * NOTE: remote_key and encrypted packets are required for 'auth_check' packets, optional for all others + * @param string $secret + * random string, required for packets which require verification/callback + * e.g. 'pickup', 'purge', 'notify', 'auth_check'. Packet types 'ping', 'force_refresh', and 'refresh' do not require verification + * @param string $extra * @returns string json encoded zot packet */ - -function zot_build_packet($channel,$type = 'notify',$recipients = null, $remote_key = null, $secret = null, $extra = null) { +function zot_build_packet($channel, $type = 'notify', $recipients = null, $remote_key = null, $secret = null, $extra = null) { $data = array( 'type' => $type, @@ -118,84 +121,76 @@ function zot_build_packet($channel,$type = 'notify',$recipients = null, $remote_ 'version' => ZOT_REVISION ); - if($recipients) { - for($x = 0; $x < count($recipients); $x ++) + if ($recipients) { + for ($x = 0; $x < count($recipients); $x ++) unset($recipients[$x]['hash']); $data['recipients'] = $recipients; } - if($secret) { + if ($secret) { $data['secret'] = $secret; $data['secret_sig'] = base64url_encode(rsa_sign($secret,$channel['channel_prvkey'])); } - if($extra) { - foreach($extra as $k => $v) + if ($extra) { + foreach ($extra as $k => $v) $data[$k] = $v; } - logger('zot_build_packet: ' . print_r($data,true), LOGGER_DATA); // Hush-hush ultra top-secret mode - if($remote_key) { + if ($remote_key) { $data = crypto_encapsulate(json_encode($data),$remote_key); } return json_encode($data); } - /** - * @function: zot_zot - * @param: string $url - * @param: array $data + * @brief + * + * @see z_post_url() * - * @returns: array => see z_post_url for returned data format + * @param string $url + * @param array $data + * @return array see z_post_url() for returned data format */ - - - -function zot_zot($url,$data) { - return z_post_url($url,array('data' => $data)); +function zot_zot($url, $data) { + return z_post_url($url, array('data' => $data)); } /** - * @function: zot_finger + * @brief Look up information about channel. * - * Look up information about channel - * @param: string $webbie - * does not have to be host qualified e.g. 'foo' is treated as 'foo@thishub' - * @param: array $channel + * @param string $webbie + * does not have to be host qualified e.g. 'foo' is treated as 'foo\@thishub' + * @param array $channel * (optional), if supplied permissions will be enumerated specifically for $channel - * @param: boolean $autofallback + * @param boolean $autofallback * fallback/failover to http if https connection cannot be established. Default is true. * - * @returns: array => see z_post_url and mod/zfinger.php + * @return array see z_post_url() and \ref mod/zfinger.php */ +function zot_finger($webbie, $channel = null, $autofallback = true) { - -function zot_finger($webbie,$channel = null,$autofallback = true) { - - - if(strpos($webbie,'@') === false) { + if (strpos($webbie,'@') === false) { $address = $webbie; $host = get_app()->get_hostname(); - } - else { + } else { $address = substr($webbie,0,strpos($webbie,'@')); $host = substr($webbie,strpos($webbie,'@')+1); } $xchan_addr = $address . '@' . $host; - if((! $address) || (! $xchan_addr)) { + if ((! $address) || (! $xchan_addr)) { logger('zot_finger: no address :' . $webbie); return array('success' => false); - } + } logger('using xchan_addr: ' . $xchan_addr, LOGGER_DATA); - + // potential issue here; the xchan_addr points to the primary hub. // The webbie we were called with may not, so it might not be found // unless we query for hubloc_addr instead of xchan_addr @@ -207,26 +202,24 @@ function zot_finger($webbie,$channel = null,$autofallback = true) { intval(HUBLOC_FLAGS_PRIMARY) ); - if($r) { + if ($r) { $url = $r[0]['hubloc_url']; - if($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') { + if ($r[0]['hubloc_network'] && $r[0]['hubloc_network'] !== 'zot') { logger('zot_finger: alternate network: ' . $webbie); logger('url: '.$url.', net: '.var_export($r[0]['hubloc_network'],true), LOGGER_DATA); return array('success' => false); - } - } - else { + } + } else { $url = 'https://' . $host; } - $rhs = '/.well-known/zot-info'; $https = ((strpos($url,'https://') === 0) ? true : false); logger('zot_finger: ' . $address . ' at ' . $url, LOGGER_DEBUG); - if($channel) { + if ($channel) { $postvars = array( 'address' => $address, 'target' => $channel['channel_guid'], @@ -236,88 +229,85 @@ function zot_finger($webbie,$channel = null,$autofallback = true) { $result = z_post_url($url . $rhs,$postvars); - - if((! $result['success']) && ($autofallback)) { - if($https) { + if ((! $result['success']) && ($autofallback)) { + if ($https) { logger('zot_finger: https failed. falling back to http'); $result = z_post_url('http://' . $host . $rhs,$postvars); } } - } - else { + } else { $rhs .= '?f=&address=' . urlencode($address); $result = z_fetch_url($url . $rhs); - if((! $result['success']) && ($autofallback)) { - if($https) { + if ((! $result['success']) && ($autofallback)) { + if ($https) { logger('zot_finger: https failed. falling back to http'); $result = z_fetch_url('http://' . $host . $rhs); } } } - - if(! $result['success']) - logger('zot_finger: no results'); - return $result; + if (! $result['success']) + logger('zot_finger: no results'); + return $result; } /** - * @function: zot_refresh($them, $channel = null, $force = false) + * @brief Refreshes after permission changed or friending, etc. + * + * zot_refresh is typically invoked when somebody has changed permissions of a channel and they are notified + * to fetch new permissions via a finger/discovery operation. This may result in a new connection + * (abook entry) being added to a local channel and it may result in auto-permissions being granted. + * + * Friending in zot is accomplished by sending a refresh packet to a specific channel which indicates a + * permission change has been made by the sender which affects the target channel. The hub controlling + * the target channel does targetted discovery (a zot-finger request requesting permissions for the local + * channel). These are decoded here, and if necessary and abook structure (addressbook) is created to store + * the permissions assigned to this channel. + * + * Initially these abook structures are created with a 'pending' flag, so that no reverse permissions are + * implied until this is approved by the owner channel. A channel can also auto-populate permissions in + * return and send back a refresh packet of its own. This is used by forum and group communication channels + * so that friending and membership in the channel's "club" is automatic. * - * zot_refresh is typically invoked when somebody has changed permissions of a channel and they are notified - * to fetch new permissions via a finger/discovery operation. This may result in a new connection - * (abook entry) being added to a local channel and it may result in auto-permissions being granted. - * - * Friending in zot is accomplished by sending a refresh packet to a specific channel which indicates a - * permission change has been made by the sender which affects the target channel. The hub controlling - * the target channel does targetted discovery (a zot-finger request requesting permissions for the local - * channel). These are decoded here, and if necessary and abook structure (addressbook) is created to store - * the permissions assigned to this channel. - * - * Initially these abook structures are created with a 'pending' flag, so that no reverse permissions are - * implied until this is approved by the owner channel. A channel can also auto-populate permissions in - * return and send back a refresh packet of its own. This is used by forum and group communication channels - * so that friending and membership in the channel's "club" is automatic. - * * @param array $them => xchan structure of sender * @param array $channel => local channel structure of target recipient, required for "friending" operations + * @param array $force default false * - * @returns boolean true if successful, else false + * @returns boolean true if successful, else false */ +function zot_refresh($them, $channel = null, $force = false) { -function zot_refresh($them,$channel = null, $force = false) { - - if(array_key_exists('xchan_network',$them) && ($them['xchan_network'] !== 'zot')) { + if (array_key_exists('xchan_network', $them) && ($them['xchan_network'] !== 'zot')) { logger('zot_refresh: not got zot. ' . $them['xchan_name']); return true; } logger('zot_refresh: them: ' . print_r($them,true), LOGGER_DATA); - if($channel) + if ($channel) logger('zot_refresh: channel: ' . print_r($channel,true), LOGGER_DATA); $url = null; - if($them['hubloc_url']) + if ($them['hubloc_url']) { $url = $them['hubloc_url']; - else { + } else { $r = q("select hubloc_url, hubloc_flags from hubloc where hubloc_hash = '%s'", dbesc($them['xchan_hash']) ); - if($r) { - foreach($r as $rr) { - if($rr['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY) { + if ($r) { + foreach ($r as $rr) { + if ($rr['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY) { $url = $rr['hubloc_url']; break; } } - if(! $url) + if (! $url) $url = $r[0]['hubloc_url']; } } - if(! $url) { + if (! $url) { logger('zot_refresh: no url'); return false; } @@ -330,12 +320,13 @@ function zot_refresh($them,$channel = null, $force = false) { $postvars['key'] = $channel['channel_pubkey']; } - if(array_key_exists('xchan_addr',$them) && $them['xchan_addr']) + if (array_key_exists('xchan_addr',$them) && $them['xchan_addr']) $postvars['address'] = $them['xchan_addr']; - if(array_key_exists('xchan_hash',$them) && $them['xchan_hash']) + if (array_key_exists('xchan_hash',$them) && $them['xchan_hash']) $postvars['guid_hash'] = $them['xchan_hash']; - if(array_key_exists('xchan_guid',$them) && $them['xchan_guid'] + if (array_key_exists('xchan_guid',$them) && $them['xchan_guid'] && array_key_exists('xchan_guid_sig',$them) && $them['xchan_guid_sig']) { + $postvars['guid'] = $them['xchan_guid']; $postvars['guid_sig'] = $them['xchan_guid_sig']; } @@ -343,19 +334,19 @@ function zot_refresh($them,$channel = null, $force = false) { $rhs = '/.well-known/zot-info'; $result = z_post_url($url . $rhs,$postvars); - + logger('zot_refresh: zot-info: ' . print_r($result,true), LOGGER_DATA); - if($result['success']) { + if ($result['success']) { $j = json_decode($result['body'],true); - if(! (($j) && ($j['success']))) { + if (! (($j) && ($j['success']))) { logger('zot_refresh: result not decodable'); return false; } - $x = import_xchan($j,(($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); + $x = import_xchan($j, (($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); if(! $x['success']) return false; @@ -415,7 +406,7 @@ function zot_refresh($them,$channel = null, $force = false) { $next_birthday = $r[0]['abook_dob']; $current_abook_connected = (($r[0]['abook_flags'] & ABOOK_FLAG_UNCONNECTED) ? 0 : 1); - + $y = q("update abook set abook_their_perms = %d, abook_dob = '%s' where abook_xchan = '%s' and abook_channel = %d and not (abook_flags & %d) > 0 ", @@ -430,8 +421,8 @@ function zot_refresh($them,$channel = null, $force = false) { // if they are in your address book but you aren't in theirs, and/or this does not // match your current connected state setting, toggle it. - // FIXME: uncoverted to postgres - // FIXME: when this was enabled, all contacts became unconnected. Currently disabled intentionally + /** @FIXME uncoverted to postgres */ + /** @FIXME when this was enabled, all contacts became unconnected. Currently disabled intentionally */ // $y1 = q("update abook set abook_flags = (abook_flags ^ %d) // where abook_xchan = '%s' and abook_channel = %d // and not (abook_flags & %d) limit 1", @@ -505,7 +496,7 @@ function zot_refresh($them,$channel = null, $force = false) { 'type' => NOTIFY_INTRO, 'from_xchan' => $x['hash'], 'to_xchan' => $channel['channel_hash'], - 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'], + 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'], )); } @@ -514,7 +505,6 @@ function zot_refresh($them,$channel = null, $force = false) { || (! ($new_connection[0]['abook_flags'] & ABOOK_FLAG_PENDING)) ) proc_run('php','include/onepoll.php',$new_connection[0]['abook_id']); } - } } } @@ -524,25 +514,22 @@ function zot_refresh($them,$channel = null, $force = false) { } /** - * @function: zot_gethub + * @brief Look up if channel is known and previously verified. * - * A guid and a url, both signed by the sender, distinguish a known sender at a known location - * This function looks these up to see if the channel is known and therefore previously verified. - * If not, we will need to verify it. + * A guid and a url, both signed by the sender, distinguish a known sender at a + * known location. + * This function looks these up to see if the channel is known and therefore + * previously verified. If not, we will need to verify it. * - * @param array $arr - * $arr must contain: - * string $arr['guid'] => guid of conversant - * string $arr['guid_sig'] => guid signed with conversant's private key - * string $arr['url'] => URL of the origination hub of this communication - * string $arr['url_sig'] => URL signed with conversant's private key - * + * @param array $arr an assoziative array which must contain: + * * \e string \b guid => guid of conversant + * * \e string \b guid_sig => guid signed with conversant's private key + * * \e string \b url => URL of the origination hub of this communication + * * \e string \b url_sig => URL signed with conversant's private key * - * @returns: array => hubloc record + * @returns array|null null if site is blacklisted or not found, otherwise an + * array with an hubloc record */ - - - function zot_gethub($arr) { if($arr['guid'] && $arr['guid_sig'] && $arr['url'] && $arr['url_sig']) { @@ -581,26 +568,23 @@ function zot_gethub($arr) { } /** - * @function zot_register_hub($arr) + * @brief Registers an unknown hup. * - * A communication has been received which has an unknown (to us) sender. - * Perform discovery based on our calculated hash of the sender at the origination address. - * This will fetch the discovery packet of the sender, which contains the public key we - * need to verify our guid and url signatures. + * A communication has been received which has an unknown (to us) sender. + * Perform discovery based on our calculated hash of the sender at the + * origination address. This will fetch the discovery packet of the sender, + * which contains the public key we need to verify our guid and url signatures. * - * @param array $arr - * $arr must contain: - * string $arr['guid'] => guid of conversant - * string $arr['guid_sig'] => guid signed with conversant's private key - * string $arr['url'] => URL of the origination hub of this communication - * string $arr['url_sig'] => URL signed with conversant's private key - * + * @param array $arr an assoziative array which must contain: + * * \e string \b guid => guid of conversant + * * \e string \b guid_sig => guid signed with conversant's private key + * * \e string \b url => URL of the origination hub of this communication + * * \e string \b url_sig => URL signed with conversant's private key * - * @returns array => 'success' (boolean true or false) - * 'message' (optional error string only if success is false) + * @returns array an assoziative array with: + * * \b success boolean true or false + * * \b message (optional) error string only if success is false */ - - function zot_register_hub($arr) { $result = array('success' => false); @@ -640,15 +624,14 @@ function zot_register_hub($arr) { } } } + return $result; } - /** - * @function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED) - * Takes an associative array of a fetched discovery packet and updates + * @brief Takes an associative array of a fetched discovery packet and updates * all internal data structures which need to be updated as a result. - * + * * @param array $arr => json_decoded discovery packet * @param int $ud_flags * Determines whether to create a directory update record if any changes occur, default is UPDATE_FLAGS_UPDATED @@ -659,13 +642,12 @@ function zot_register_hub($arr) { * If set [typically by update_directory_entry()] indicates a specific update table row and more particularly * contains a particular address (ud_addr) which needs to be updated in that table. * - * @returns array => 'success' (boolean true or false) - * 'message' (optional error string only if success is false) + * @return associative array + * * \e boolean \b success boolean true or false + * * \e string \b message (optional) error string only if success is false */ - function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { - call_hooks('import_xchan', $arr); $ret = array('success' => false); @@ -700,11 +682,11 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($xchan_hash) - ); + ); if(! array_key_exists('connect_url', $arr)) - $arr['connect_url'] = ''; - + $arr['connect_url'] = ''; + if(strpos($arr['address'],'/') !== false) $arr['address'] = substr($arr['address'],0,strpos($arr['address'],'/')); @@ -713,14 +695,13 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $import_photos = true; // if we import an entry from a site that's not ours and either or both of us is off the grid - hide the entry. - // TODO: check if we're the same directory realm, which would mean we are allowed to see it + /** @TODO: check if we're the same directory realm, which would mean we are allowed to see it */ $dirmode = get_config('system','directory_mode'); if((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root())) $arr['searchable'] = false; - $hidden = (1 - intval($arr['searchable'])); // Be careful - XCHAN_FLAGS_HIDDEN should evaluate to 1 @@ -770,11 +751,9 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $what .= 'xchan '; $changed = true; } - } - else { + } else { $import_photos = true; - if((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root())) $arr['searchable'] = false; @@ -789,7 +768,7 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $new_flags |= XCHAN_FLAGS_SELFCENSORED; if(array_key_exists('deleted',$arr) && $arr['deleted']) $new_flags |= XCHAN_FLAGS_DELETED; - + $x = q("insert into xchan ( xchan_hash, xchan_guid, xchan_guid_sig, xchan_pubkey, xchan_photo_mimetype, xchan_photo_l, xchan_addr, xchan_url, xchan_connurl, xchan_follow, xchan_connpage, xchan_name, xchan_network, xchan_photo_date, xchan_name_date, xchan_flags) values ( '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d) ", @@ -813,11 +792,9 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $what .= 'new_xchan'; $changed = true; + } - } - - - if($import_photos) { + if ($import_photos) { require_once('include/photo/photo_driver.php'); @@ -826,9 +803,9 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $local = q("select channel_account_id, channel_id from channel where channel_hash = '%s' limit 1", dbesc($xchan_hash) ); - if($local) { - $ph = z_fetch_url($arr['photo'],true); - if($ph['success']) { + if ($local) { + $ph = z_fetch_url($arr['photo'], true); + if ($ph['success']) { import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'],$local[0]['channel_id']); // reset the names in case they got messed up when we had a bug in this function $photos = array( @@ -839,12 +816,11 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { false ); } + } else { + $photos = import_profile_photo($arr['photo'], $xchan_hash); } - else { - $photos = import_profile_photo($arr['photo'],$xchan_hash); - } - if($photos) { - if($photos[4]) { + if ($photos) { + if ($photos[4]) { // importing the photo failed somehow. Leave the photo_date alone so we can try again at a later date. // This often happens when somebody joins the matrix with a bad cert. $r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' @@ -855,8 +831,7 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { dbesc($photos[3]), dbesc($xchan_hash) ); - } - else { + } else { $r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'", dbescdate(datetime_convert('UTC','UTC',$arr['photo_updated'])), @@ -875,8 +850,7 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { // what we are missing for true hub independence is for any changes in the primary hub to // get reflected not only in the hublocs, but also to update the URLs and addr in the appropriate xchan - - $s = sync_locations($arr,$arr); + $s = sync_locations($arr, $arr); if($s) { if($s['change_message']) @@ -915,8 +889,7 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $what .= 'profile '; $changed = true; } - } - else { + } else { logger('import_xchan: profile not available - hiding'); // they may have made it private $r = q("delete from xprof where xprof_hash = '%s'", @@ -935,7 +908,6 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $changed = true; } } - if(($changed) || ($ud_flags == UPDATE_FLAGS_FORCED)) { $guid = random_string() . '@' . get_app()->get_hostname(); @@ -956,60 +928,52 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $ret['hash'] = $xchan_hash; } - - logger('import_xchan: result: ' . print_r($ret,true), LOGGER_DATA); return $ret; } /** - * @function zot_process_response($hub,$arr,$outq) { - * Called immediately after sending a zot message which is using queue processing - * Updates the queue item according to the response result and logs any information - * returned to aid communications troubleshooting. + * @brief Called immediately after sending a zot message which is using queue processing. + * + * Updates the queue item according to the response result and logs any information + * returned to aid communications troubleshooting. * * @param string $hub - url of site we just contacted * @param array $arr - output of z_post_url() * @param array $outq - The queue structure attached to this request - * - * @returns nothing */ +function zot_process_response($hub, $arr, $outq) { - -function zot_process_response($hub,$arr,$outq) { - - if(! $arr['success']) { + if (! $arr['success']) { logger('zot_process_response: failed: ' . $hub); return; } - $x = json_decode($arr['body'],true); + $x = json_decode($arr['body'], true); - if(! $x) { + if (! $x) { logger('zot_process_response: No json from ' . $hub); logger('zot_process_response: headers: ' . print_r($arr['header'],true), LOGGER_DATA); } // update the timestamp for this site - $r = q("update site set site_update = '%s' where site_url = '%s'", + q("update site set site_update = '%s' where site_url = '%s'", dbesc(datetime_convert()), dbesc(dirname($hub)) ); - // synchronous message types are handled immediately // async messages remain in the queue until processed. - if(intval($outq['outq_async'])) { - $r = q("update outq set outq_delivered = 1, outq_updated = '%s' where outq_hash = '%s' and outq_channel = %d", + if (intval($outq['outq_async'])) { + q("update outq set outq_delivered = 1, outq_updated = '%s' where outq_hash = '%s' and outq_channel = %d", dbesc(datetime_convert()), dbesc($outq['outq_hash']), intval($outq['outq_channel']) ); - } - else { - $r = q("delete from outq where outq_hash = '%s' and outq_channel = %d", + } else { + q("delete from outq where outq_hash = '%s' and outq_channel = %d", dbesc($outq['outq_hash']), intval($outq['outq_channel']) ); @@ -1019,19 +983,20 @@ function zot_process_response($hub,$arr,$outq) { } /** - * @function zot_fetch($arr) + * @brief + * + * We received a notification packet (in mod/post.php) that a message is waiting for us, and we've verified the sender. + * Now send back a pickup message, using our message tracking ID ($arr['secret']), which we will sign with our site private key. + * The entire pickup message is encrypted with the remote site's public key. + * If everything checks out on the remote end, we will receive back a packet containing one or more messages, + * which will be processed and delivered before this function ultimately returns. + * + * @see zot_import() * - * We received a notification packet (in mod/post.php) that a message is waiting for us, and we've verified the sender. - * Now send back a pickup message, using our message tracking ID ($arr['secret']), which we will sign with our site private key. - * The entire pickup message is encrypted with the remote site's public key. - * If everything checks out on the remote end, we will receive back a packet containing one or more messages, - * which will be processed and delivered before this function ultimately returns. - * * @param array $arr * decrypted and json decoded notify packet from remote site + * @return array from zot_import() */ - - function zot_fetch($arr) { logger('zot_fetch: ' . print_r($arr,true), LOGGER_DATA); @@ -1054,31 +1019,36 @@ function zot_fetch($arr) { ); $datatosend = json_encode(crypto_encapsulate(json_encode($data),$ret_hub['hubloc_sitekey'])); - + $fetch = zot_zot($url,$datatosend); $result = zot_import($fetch, $arr['sender']['url']); + return $result; } /** - * @function zot_import + * @brief Process incoming array of messages. * * Process an incoming array of messages which were obtained via pickup, and * import, update, delete as directed. - * - * @param array $arr => 'pickup' structure returned from remote site - * @param string $sender_url => the url specified by the sender in the initial communication - * we will verify the sender and url in each returned message structure and also verify - * that all the messages returned match the site url that we are currently processing. - * - * The message types handled here are 'activity' (e.g. posts), 'mail' , 'profile', 'location', - * and 'channel_sync' - * - * @returns array => array ( [0] => string $channel_hash, [1] => string $delivery_status, [2] => string $address ) - * suitable for logging remotely, enumerating the processing results of each message/recipient combination. - * + * + * The message types handled here are 'activity' (e.g. posts), 'mail' , + * 'profile', 'location' and 'channel_sync'. + * + * @param array $arr + * 'pickup' structure returned from remote site + * @param string $sender_url + * the url specified by the sender in the initial communication. + * We will verify the sender and url in each returned message structure and + * also verify that all the messages returned match the site url that we are + * currently processing. + * + * @returns array + * suitable for logging remotely, enumerating the processing results of each message/recipient combination + * * [0] => \e string $channel_hash + * * [1] => \e string $delivery_status + * * [2] => \e string $address */ - function zot_import($arr, $sender_url) { $data = json_decode($arr['body'],true); @@ -1168,7 +1138,7 @@ function zot_import($arr, $sender_url) { } } - logger('public post'); + logger('public post'); // Public post. look for any site members who are or may be accepting posts from this sender // and who are allowed to see them based on the sender's permissions @@ -1190,7 +1160,6 @@ function zot_import($arr, $sender_url) { $i['message']['flags'] = array(); if(! in_array('private',$i['message']['flags'])) $i['message']['flags'][] = 'private'; - } } @@ -1215,8 +1184,8 @@ function zot_import($arr, $sender_url) { logger('zot_import: no deliveries on this site'); continue; } - - if($i['message']) { + + if($i['message']) { if($i['message']['type'] === 'activity') { $arr = get_item_elements($i['message']); @@ -1230,7 +1199,6 @@ function zot_import($arr, $sender_url) { $relay = ((array_key_exists('flags',$i['message']) && in_array('relay',$i['message']['flags'])) ? true : false); $result = process_delivery($i['notify']['sender'],$arr,$deliveries,$relay,false,$message_request); - } elseif($i['message']['type'] === 'mail') { $arr = get_mail_elements($i['message']); @@ -1238,9 +1206,7 @@ function zot_import($arr, $sender_url) { logger('Mail received: ' . print_r($arr,true), LOGGER_DATA); logger('Mail recipients: ' . print_r($deliveries,true), LOGGER_DATA); - $result = process_mail_delivery($i['notify']['sender'],$arr,$deliveries); - } elseif($i['message']['type'] === 'profile') { $arr = get_profile_elements($i['message']); @@ -1249,9 +1215,7 @@ function zot_import($arr, $sender_url) { logger('Profile recipients: ' . print_r($deliveries,true), LOGGER_DATA); $result = process_profile_delivery($i['notify']['sender'],$arr,$deliveries); - } - elseif($i['message']['type'] === 'channel_sync') { // $arr = get_channelsync_elements($i['message']); @@ -1270,31 +1234,34 @@ function zot_import($arr, $sender_url) { $result = process_location_delivery($i['notify']['sender'],$arr,$deliveries); } - } if($result){ - $return = array_merge($return,$result); + $return = array_merge($return, $result); } } } return $return; - } // A public message with no listed recipients can be delivered to anybody who -// has PERMS_NETWORK for that type of post, PERMS_AUTHED (in-network senders are +// has PERMS_NETWORK for that type of post, PERMS_AUTHED (in-network senders are // by definition authenticated) or PERMS_SITE and is one the same // site, or PERMS_SPECIFIC and the sender is a contact who is granted // permissions via their connection permissions in the address book. // Here we take a given message and construct a list of hashes of everybody -// on the site that we should try and deliver to. +// on the site that we should try and deliver to. // Some of these will be rejected, but this gives us a place to start. +/** + * @brief + * + * @param array $msg + * @return NULL|array + */ function public_recips($msg) { - require_once('include/identity.php'); $check_mentions = false; @@ -1363,7 +1330,6 @@ function public_recips($msg) { or ( " . $col . " & " . intval(PERMS_PUBLIC) . ") > 0 or ( " . $col . " & " . intval(PERMS_AUTHED) . ") > 0 ) "; - $r = q("select channel_hash as hash from channel $sql or channel_hash = '%s' and ( channel_pageflags & " . intval(PAGE_REMOVED) . " ) = 0 ", dbesc($msg['notify']['sender']['hash']) @@ -1514,7 +1480,6 @@ function allowed_public_recips($msg) { return $results; } - return array(); } @@ -1544,7 +1509,6 @@ function process_delivery($sender,$arr,$deliveries,$relay,$public = false,$reque continue; } - $channel = $r[0]; // allow public postings to the sys channel regardless of permissions, but not @@ -1763,7 +1727,6 @@ function remove_community_tag($sender,$arr,$uid) { return; logger('remove_community_tag: invoked'); - if(! get_pconfig($uid,'system','blocktags')) { logger('remove_community tag: permission denied.'); @@ -1806,8 +1769,8 @@ function remove_community_tag($sender,$arr,$uid) { logger('remove_community_tag: no parent message'); return; } - - $x = q("delete from term where uid = %d and oid = %d and otype = %d and type = %d and term = '%s' and url = '%s'", + + q("delete from term where uid = %d and oid = %d and otype = %d and type = %d and term = '%s' and url = '%s'", intval($uid), intval($r[0]['id']), intval(TERM_OBJ_POST), @@ -1815,8 +1778,6 @@ function remove_community_tag($sender,$arr,$uid) { dbesc($i['object']['title']), dbesc(get_rel_link($i['object']['link'],'alternate')) ); - - return; } function update_imported_item($sender,$item,$uid) { @@ -1826,12 +1787,20 @@ function update_imported_item($sender,$item,$uid) { logger('update_imported_item: failed: ' . $x['message']); else logger('update_imported_item'); - } -function delete_imported_item($sender,$item,$uid,$relay) { +/** + * @brief Deletes an imported item. + * + * @param array $sender + * @param array $item + * @param int $uid + * @param unknown $relay + * @return boolean|int post_id + */ +function delete_imported_item($sender, $item, $uid, $relay) { - logger('delete_imported_item invoked',LOGGER_DEBUG); + logger('delete_imported_item invoked', LOGGER_DEBUG); $ownership_valid = false; $item_found = false; @@ -1841,13 +1810,13 @@ function delete_imported_item($sender,$item,$uid,$relay) { dbesc($item['mid']), intval($uid) ); - if($r) { - if($r[0]['author_xchan'] === $sender['hash'] || $r[0]['owner_xchan'] === $sender['hash'] || $r[0]['source_xchan'] === $sender['hash']) + if ($r) { + if ($r[0]['author_xchan'] === $sender['hash'] || $r[0]['owner_xchan'] === $sender['hash'] || $r[0]['source_xchan'] === $sender['hash']) $ownership_valid = true; + $post_id = $r[0]['id']; $item_found = true; - } - else { + } else { // perhaps the item is still in transit and the delete notification got here before the actual item did. Store it with the deleted flag set. // item_store() won't try to deliver any notifications or start delivery chains if this flag is set. @@ -1855,22 +1824,24 @@ function delete_imported_item($sender,$item,$uid,$relay) { // But this will ensure that if the (undeleted) original post comes in at a later date, we'll reject it because it will have an older timestamp. logger('delete received for non-existent item - storing item data.'); - if($arr['author_xchan'] === $sender['hash'] || $arr['owner_xchan'] === $sender['hash'] || $arr['source_xchan'] === $sender['hash']) { + + /** @BUG $arr is undefined here, so this is dead code */ + if ($arr['author_xchan'] === $sender['hash'] || $arr['owner_xchan'] === $sender['hash'] || $arr['source_xchan'] === $sender['hash']) { $ownership_valid = true; $item_result = item_store($arr); $post_id = $item_result['item_id']; } } - if($ownership_valid == false) { + if ($ownership_valid === false) { logger('delete_imported_item: failed: ownership issue'); return false; } - if($item_found) { - if($r[0]['item_restrict'] & ITEM_DELETED) { + if ($item_found) { + if ($r[0]['item_restrict'] & ITEM_DELETED) { logger('delete_imported_item: item was already deleted'); - if(! $relay) + if (! $relay) return false; // This is a bit hackish, but may have to suffice until the notification/delivery loop is optimised @@ -1879,9 +1850,9 @@ function delete_imported_item($sender,$item,$uid,$relay) { // code path downstream can relay it again (causing a loop). Since it's already gone it's not coming // back, and we aren't going to (or shouldn't at any rate) delete it again in the future - so losing // this information from the metadata should have no other discernible impact. - - if(($r[0]['id'] != $r[0]['parent']) && ($r[0]['item_flags'] & ITEM_ORIGIN)) { - $x = q("update item set item_flags = %d where id = %d and uid = %d", + + if (($r[0]['id'] != $r[0]['parent']) && ($r[0]['item_flags'] & ITEM_ORIGIN)) { + q("update item set item_flags = %d where id = %d and uid = %d", intval($r[0]['item_flags'] ^ ITEM_ORIGIN), intval($r[0]['id']), intval($r[0]['uid']) @@ -1889,14 +1860,13 @@ function delete_imported_item($sender,$item,$uid,$relay) { } } - require_once('include/items.php'); // Use phased deletion to set the deleted flag, call both tag_deliver and the notifier to notify downstream channels // and then clean up after ourselves with a cron job after several days to do the delete_item_lowlevel() (DROPITEM_PHASE2). - drop_item($post_id,false, DROPITEM_PHASE1); - tag_deliver($uid,$post_id); + drop_item($post_id, false, DROPITEM_PHASE1); + tag_deliver($uid, $post_id); } return $post_id; @@ -1904,17 +1874,13 @@ function delete_imported_item($sender,$item,$uid,$relay) { function process_mail_delivery($sender,$arr,$deliveries) { - $result = array(); - if($sender['hash'] != $arr['from_xchan']) { logger('process_mail_delivery: sender is not mail author'); return; } - - foreach($deliveries as $d) { $r = q("select * from channel where channel_hash = '%s' limit 1", dbesc($d['hash']) @@ -1946,7 +1912,7 @@ function process_mail_delivery($sender,$arr,$deliveries) { $result[] = array($d['hash'],'mail recalled',$channel['channel_name'],$arr['mid']); logger('mail_recalled'); } - else { + else { $result[] = array($d['hash'],'duplicate mail received',$channel['channel_name'],$arr['mid']); logger('duplicate mail received'); } @@ -1974,7 +1940,6 @@ function process_rating_delivery($sender,$arr) { dbesc($sender['hash']) ); - if((! $z) || (! rsa_verify($arr['target'] . '.' . $arr['rating'] . '.' . $arr['rating_text'], base64url_decode($arr['signature']),$z[0]['xchan_pubkey']))) { logger('failed to verify rating'); return; @@ -2012,7 +1977,6 @@ function process_rating_delivery($sender,$arr) { ); logger('rating created'); } - return; } @@ -2080,7 +2044,6 @@ function sync_locations($sender,$arr,$absolute = false) { continue; } - for($x = 0; $x < count($xisting); $x ++) { if(($xisting[$x]['hubloc_url'] === $location['url']) && ($xisting[$x]['hubloc_sitekey'] === $location['sitekey'])) { @@ -2250,7 +2213,7 @@ function sync_locations($sender,$arr,$absolute = false) { ); if($r) hubloc_change_primary($r[0]); - } + } } // get rid of any hubs we have for this channel which weren't reported. @@ -2275,17 +2238,23 @@ function sync_locations($sender,$arr,$absolute = false) { $ret['changed'] = $changed; return $ret; - } - +/** + * @brief Returns an array with all known distinct hubs for this channel. + * + * @see zot_get_hublocs() + * @param array $channel an assoziative array which must contain + * * \e string \b channel_hash the hash of the channel + * @return array an array with assoziated arrays + */ function zot_encode_locations($channel) { $ret = array(); $x = zot_get_hublocs($channel['channel_hash']); - if($x && count($x)) { - foreach($x as $hub) { - if(! ($hub['hubloc_flags'] & HUBLOC_FLAGS_UNVERIFIED)) { + if ($x && count($x)) { + foreach ($x as $hub) { + if (! ($hub['hubloc_flags'] & HUBLOC_FLAGS_UNVERIFIED)) { $ret[] = array( 'host' => $hub['hubloc_host'], 'address' => $hub['hubloc_addr'], @@ -2299,24 +2268,25 @@ function zot_encode_locations($channel) { } } } + return $ret; } - - - -/* - * @function import_directory_profile +/** + * @brief Imports a directory profile. * - * @returns boolean $updated if something changed - * + * @param string $hash + * @param array $profile + * @param string $addr + * @param number $ud_flags + * @param number $suppress_update default 0 + * @return boolean $updated if something changed */ - -function import_directory_profile($hash,$profile,$addr,$ud_flags = UPDATE_FLAGS_UPDATED, $suppress_update = 0) { +function import_directory_profile($hash, $profile, $addr, $ud_flags = UPDATE_FLAGS_UPDATED, $suppress_update = 0) { logger('import_directory_profile', LOGGER_DEBUG); - if(! $hash) + if (! $hash) return false; $arr = array(); @@ -2337,11 +2307,11 @@ function import_directory_profile($hash,$profile,$addr,$ud_flags = UPDATE_FLAGS_ $arr['xprof_hometown'] = (($profile['hometown']) ? htmlspecialchars($profile['hometown'], ENT_COMPAT,'UTF-8',false) : ''); $clean = array(); - if(array_key_exists('keywords',$profile) and is_array($profile['keywords'])) { + if (array_key_exists('keywords', $profile) and is_array($profile['keywords'])) { import_directory_keywords($hash,$profile['keywords']); - foreach($profile['keywords'] as $kw) { - $kw = trim(htmlspecialchars($kw,ENT_COMPAT,'UTF-8',false)); - $kw = trim($kw,','); + foreach ($profile['keywords'] as $kw) { + $kw = trim(htmlspecialchars($kw,ENT_COMPAT, 'UTF-8', false)); + $kw = trim($kw, ','); $clean[] = $kw; } } @@ -2352,48 +2322,47 @@ function import_directory_profile($hash,$profile,$addr,$ud_flags = UPDATE_FLAGS_ // These are not translated, so the German "erwachsenen" keyword will not censor the directory profile. Only the English form - "adult". - if(in_arrayi('nsfw',$clean) || in_arrayi('adult',$clean)) { + if (in_arrayi('nsfw', $clean) || in_arrayi('adult', $clean)) { q("update xchan set xchan_flags = (xchan_flags | %d) where xchan_hash = '%s'", intval(XCHAN_FLAGS_SELFCENSORED), dbesc($hash) ); } - $r = q("select * from xprof where xprof_hash = '%s' limit 1", dbesc($hash) ); - - if($arr['xprof_age'] > 150) + + if ($arr['xprof_age'] > 150) $arr['xprof_age'] = 150; - if($arr['xprof_age'] < 0) + if ($arr['xprof_age'] < 0) $arr['xprof_age'] = 0; - - if($r) { + + if ($r) { $update = false; - foreach($r[0] as $k => $v) { - if((array_key_exists($k,$arr)) && ($arr[$k] != $v)) { + foreach ($r[0] as $k => $v) { + if ((array_key_exists($k,$arr)) && ($arr[$k] != $v)) { logger('import_directory_profile: update ' . $k . ' => ' . $arr[$k]); $update = true; break; } } - if($update) { - $x = q("update xprof set + if ($update) { + q("update xprof set xprof_desc = '%s', xprof_dob = '%s', - xprof_age = %d, + xprof_age = %d, xprof_gender = '%s', xprof_marital = '%s', xprof_sexual = '%s', xprof_locale = '%s', xprof_region = '%s', xprof_postcode = '%s', - xprof_country = '%s', - xprof_about = '%s', - xprof_homepage = '%s', - xprof_hometown = '%s', - xprof_keywords = '%s' + xprof_country = '%s', + xprof_about = '%s', + xprof_homepage = '%s', + xprof_hometown = '%s', + xprof_keywords = '%s' where xprof_hash = '%s'", dbesc($arr['xprof_desc']), dbesc($arr['xprof_dob']), @@ -2412,11 +2381,10 @@ function import_directory_profile($hash,$profile,$addr,$ud_flags = UPDATE_FLAGS_ dbesc($arr['xprof_hash']) ); } - } - else { + } else { $update = true; logger('import_directory_profile: new profile '); - $x = q("insert into xprof (xprof_hash, xprof_desc, xprof_dob, xprof_age, xprof_gender, xprof_marital, xprof_sexual, xprof_locale, xprof_region, xprof_postcode, xprof_country, xprof_about, xprof_homepage, xprof_hometown, xprof_keywords) values ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ", + q("insert into xprof (xprof_hash, xprof_desc, xprof_dob, xprof_age, xprof_gender, xprof_marital, xprof_sexual, xprof_locale, xprof_region, xprof_postcode, xprof_country, xprof_about, xprof_homepage, xprof_hometown, xprof_keywords) values ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ", dbesc($arr['xprof_hash']), dbesc($arr['xprof_desc']), dbesc($arr['xprof_dob']), @@ -2438,8 +2406,9 @@ function import_directory_profile($hash,$profile,$addr,$ud_flags = UPDATE_FLAGS_ $d = array('xprof' => $arr, 'profile' => $profile, 'update' => $update); call_hooks('import_directory_profile', $d); - if(($d['update']) && (! $suppress_update)) + if (($d['update']) && (! $suppress_update)) update_modtime($arr['xprof_hash'],random_string() . '@' . get_app()->get_hostname(), $addr, $ud_flags); + return $d['update']; } @@ -2528,7 +2497,6 @@ function import_site($arr,$pubkey) { $site_directory = 0; if($arr['directory_mode'] == 'normal') $site_directory = DIRECTORY_MODE_NORMAL; - if($arr['directory_mode'] == 'primary') $site_directory = DIRECTORY_MODE_PRIMARY; if($arr['directory_mode'] == 'secondary') @@ -2536,9 +2504,6 @@ function import_site($arr,$pubkey) { if($arr['directory_mode'] == 'standalone') $site_directory = DIRECTORY_MODE_STANDALONE; - - - $register_policy = 0; if($arr['register_policy'] == 'closed') $register_policy = REGISTER_CLOSED; @@ -2569,16 +2534,16 @@ function import_site($arr,$pubkey) { if(! $x['success']) $access_policy = ACCESS_PRIVATE; } - + $directory_url = htmlspecialchars($arr['directory_url'],ENT_COMPAT,'UTF-8',false); $url = htmlspecialchars(strtolower($arr['url']),ENT_COMPAT,'UTF-8',false); $sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false); $site_location = htmlspecialchars($arr['location'],ENT_COMPAT,'UTF-8',false); $site_realm = htmlspecialchars($arr['realm'],ENT_COMPAT,'UTF-8',false); - // You can have one and only one primary directory per realm. + // You can have one and only one primary directory per realm. // Downgrade any others claiming to be primary. As they have - // flubbed up this badly already, don't let them be directory servers at all. + // flubbed up this badly already, don't let them be directory servers at all. if(($site_directory === DIRECTORY_MODE_PRIMARY) && ($site_realm === get_directory_realm()) @@ -2586,7 +2551,6 @@ function import_site($arr,$pubkey) { $site_directory = DIRECTORY_MODE_NORMAL; } - if($exists) { if(($siterecord['site_flags'] != $site_directory) || ($siterecord['site_access'] != $access_policy) @@ -2644,11 +2608,9 @@ function import_site($arr,$pubkey) { } return $update; - } - /** * Send a zot packet to all hubs where this channel is duplicated, refreshing * such things as personal settings, channel permissions, address book updates, etc. @@ -2714,7 +2676,7 @@ function build_sync_packet($uid = 0, $packet = null, $groups_changed = false) { $info['config'] = $settings; } } - + if($channel) { $info['channel'] = array(); foreach($channel as $k => $v) { @@ -2775,23 +2737,20 @@ function build_sync_packet($uid = 0, $packet = null, $groups_changed = false) { if($interval) @time_sleep_until(microtime(true) + (float) $interval); } - - } function process_channel_sync_delivery($sender,$arr,$deliveries) { -// FIXME - this will sync red structures (channel, pconfig and abook). Eventually we need to make this application agnostic. - + /** @FIXME this will sync red structures (channel, pconfig and abook). Eventually we need to make this application agnostic. */ $result = array(); - - foreach($deliveries as $d) { + + foreach ($deliveries as $d) { $r = q("select * from channel where channel_hash = '%s' limit 1", dbesc($d['hash']) ); - if(! $r) { + if (! $r) { $result[] = array($d['hash'],'not found'); continue; } @@ -2801,7 +2760,6 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { $max_friends = service_class_fetch($channel['channel_id'],'total_channels'); $max_feeds = account_service_class_fetch($channel['channel_account_id'],'total_feeds'); - if($channel['channel_hash'] != $sender['hash']) { logger('process_channel_sync_delivery: possible forgery. Sender ' . $sender['hash'] . ' is not ' . $channel['channel_hash']); $result[] = array($d['hash'],'channel mismatch',$channel['channel_name'],''); @@ -2832,8 +2790,6 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { } } - - if(array_key_exists('abook',$arr) && is_array($arr['abook']) && count($arr['abook'])) { $total_friends = 0; $total_feeds = 0; @@ -2922,7 +2878,7 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { } if($max_feeds !== false && ($clean['abook_flags'] & ABOOK_FLAG_FEED) && $total_feeds > $max_feeds) { logger('process_channel_sync_delivery: total_feeds service class limit exceeded'); - continue; + continue; } q("insert into abook ( abook_xchan, abook_channel ) values ('%s', %d ) ", dbesc($clean['abook_xchan']), @@ -2931,7 +2887,7 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { $total_friends ++; if($clean['abook_flags'] & ABOOK_FLAG_FEED) $total_feeds ++; - } + } if(count($clean)) { foreach($clean as $k => $v) { @@ -2975,7 +2931,7 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { if(intval($cl['deleted']) && (! intval($y['deleted']))) { q("delete from group_member where gid = %d", intval($y['id']) - ); + ); } } } @@ -3095,7 +3051,7 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { if(! $x) { q("insert into profile ( profile_guid, aid, uid ) values ('%s', %d, %d)", dbesc($profile['profile_guid']), - intval($channel['channel_account_id']), + intval($channel['channel_account_id']), intval($channel['channel_id']) ); $x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1", @@ -3109,9 +3065,12 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { foreach($profile as $k => $v) { if(in_array($k,$disallowed)) continue; + $clean[$k] = $v; - // TODO - check if these are allowed, otherwise we'll error - // We also need to import local photos if a custom photo is selected + /** + * @TODO check if these are allowed, otherwise we'll error + * We also need to import local photos if a custom photo is selected + */ } if(count($clean)) { foreach($clean as $k => $v) { @@ -3121,49 +3080,58 @@ function process_channel_sync_delivery($sender,$arr,$deliveries) { } } } - - $result[] = array($d['hash'],'channel sync updated',$channel['channel_name'],''); - + $result[] = array($d['hash'],'channel sync updated',$channel['channel_name'],''); } + return $result; } // We probably should make rpost discoverable. - + function get_rpost_path($observer) { if(! $observer) return ''; + $parsed = parse_url($observer['xchan_url']); - return $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f='; + return $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f='; } + +/** + * @brief + * + * @param array $x + * @return boolean|string return false or a hash + */ function import_author_zot($x) { - $hash = make_xchan_hash($x['guid'],$x['guid_sig']); + $hash = make_xchan_hash($x['guid'], $x['guid_sig']); $r = q("select hubloc_url from hubloc where hubloc_guid = '%s' and hubloc_guid_sig = '%s' and (hubloc_flags & %d)>0 limit 1", dbesc($x['guid']), dbesc($x['guid_sig']), intval(HUBLOC_FLAGS_PRIMARY) ); - if($r) { + if ($r) { logger('import_author_zot: in cache', LOGGER_DEBUG); return $hash; } logger('import_author_zot: entry not in cache - probing: ' . print_r($x,true), LOGGER_DEBUG); - - $them = array('hubloc_url' => $x['url'],'xchan_guid' => $x['guid'], 'xchan_guid_sig' => $x['guid_sig']); - if(zot_refresh($them)) + + $them = array('hubloc_url' => $x['url'], 'xchan_guid' => $x['guid'], 'xchan_guid_sig' => $x['guid_sig']); + if (zot_refresh($them)) return $hash; + return false; } /** - * @function zot_process_message_request($data) - * If a site receives a comment to a post but finds they have no parent to attach it with, they + * @brief Process a message request. + * + * If a site receives a comment to a post but finds they have no parent to attach it with, they * may send a 'request' packet containing the message_id of the missing parent. This is the handler * for that packet. We will create a message_list array of the entire conversation starting with * the missing parent and invoke delivery to the sender of the packet. @@ -3173,20 +3141,21 @@ function import_author_zot($x) { * processed/delivered in order. * * Called from mod/post.php - */ - - + * + * @param array $data + * @return array + */ function zot_process_message_request($data) { $ret = array('success' => false); - if(! $data['message_id']) { + if (! $data['message_id']) { $ret['message'] = 'no message_id'; logger('no message_id'); return $ret; } $sender = $data['sender']; - $sender_hash = make_xchan_hash($sender['guid'],$sender['guid_sig']); + $sender_hash = make_xchan_hash($sender['guid'], $sender['guid_sig']); /* * Find the local channel in charge of this post (the first and only recipient of the request packet) @@ -3197,7 +3166,7 @@ function zot_process_message_request($data) { $c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1", dbesc($recip_hash) ); - if(! $c) { + if (! $c) { logger('recipient channel not found.'); $ret['message'] .= 'recipient not found.' . EOL; return $ret; @@ -3209,7 +3178,7 @@ function zot_process_message_request($data) { $messages = zot_feed($c[0]['channel_id'],$sender_hash,array('message_id' => $data['message_id'])); - if($messages) { + if ($messages) { $env_recips = null; $r = q("select hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host @@ -3219,20 +3188,18 @@ function zot_process_message_request($data) { intval(HUBLOC_FLAGS_DELETED), intval(HUBLOC_OFFLINE) ); - if(! $r) { + if (! $r) { logger('no hubs'); return $ret; } $hubs = $r; - $hublist = array(); - $keys = array(); - $private = ((array_key_exists('flags',$messages[0]) && in_array('private',$messages[0]['flags'])) ? true : false); + $private = ((array_key_exists('flags', $messages[0]) && in_array('private',$messages[0]['flags'])) ? true : false); if($private) - $env_recips = array('guid' => $sender['guid'],'guid_sig' => $sender['guid_sig'],'hash' => $sender_hash); + $env_recips = array('guid' => $sender['guid'], 'guid_sig' => $sender['guid_sig'], 'hash' => $sender_hash); $data_packet = json_encode(array('message_list' => $messages)); - + foreach($hubs as $hub) { $hash = random_string(); @@ -3260,10 +3227,10 @@ function zot_process_message_request($data) { * invoke delivery to send out the notify packet */ - proc_run('php','include/deliver.php',$hash); + proc_run('php', 'include/deliver.php', $hash); } - } $ret['success'] = true; + return $ret; } diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index b3f992500..c2cefd07d 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -219,6 +219,7 @@ CREATE TABLE IF NOT EXISTS `channel` ( `channel_notifyflags` int(10) unsigned NOT NULL DEFAULT '65535', `channel_pageflags` int(10) unsigned NOT NULL DEFAULT '0', `channel_dirdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `channel_lastpost` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `channel_deleted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `channel_max_anon_mail` int(10) unsigned NOT NULL DEFAULT '10', `channel_max_friend_req` int(10) unsigned NOT NULL DEFAULT '10', @@ -282,6 +283,7 @@ CREATE TABLE IF NOT EXISTS `channel` ( KEY `channel_deleted` (`channel_deleted`), KEY `channel_a_republish` (`channel_a_republish`), KEY `channel_dirdate` (`channel_dirdate`), + KEY `channel_lastpost` (`channel_lastpost`), KEY `channel_w_like` (`channel_w_like`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index bc72be445..438b29d49 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -166,6 +166,7 @@ CREATE TABLE "channel" ( "channel_notifyflags" bigint NOT NULL DEFAULT '65535', "channel_pageflags" bigint NOT NULL DEFAULT '0', "channel_dirdate" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', + "channel_lastpost" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "channel_deleted" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "channel_max_anon_mail" bigint NOT NULL DEFAULT '10', "channel_max_friend_req" bigint NOT NULL DEFAULT '10', @@ -231,6 +232,7 @@ create index "channel_deleted" on channel ("channel_deleted"); create index "channel_a_republish" on channel ("channel_a_republish"); create index "channel_w_like" on channel ("channel_w_like"); create index "channel_dirdate" on channel ("channel_dirdate"); +create index "channel_lastpost" on channel ("channel_lastpost"); CREATE TABLE "chat" ( "chat_id" serial NOT NULL, "chat_room" bigint NOT NULL DEFAULT '0', diff --git a/install/update.php b/install/update.php index 75805513d..36aa20373 100644 --- a/install/update.php +++ b/install/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1139 ); +define( 'UPDATE_VERSION' , 1140 ); /** * @@ -1589,3 +1589,17 @@ function update_r1138() { return UPDATE_SUCCESS; return UPDATE_FAILED; } + +function update_r1139() { + if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { + $r1 = q("ALTER TABLE channel ADD channel_lastpost timestamp NOT NULL DEFAULT '0001-01-01 00:00:00'"); + $r2 = q("create index channel_lastpost on channel ( channel_lastpost ) "); + $r = $r1 && $r2; + } + else + $r = q("ALTER TABLE `channel` ADD `channel_lastpost` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `channel_dirdate` , ADD INDEX ( `channel_lastpost` ) "); + if($r) + return UPDATE_SUCCESS; + return UPDATE_FAILED; + +}
\ No newline at end of file diff --git a/mod/admin.php b/mod/admin.php index e991fee27..fd2ba510b 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -73,7 +73,7 @@ function admin_post(&$a){ } /** - * @param App $$a + * @param App &$a * @return string */ function admin_content(&$a) { @@ -84,7 +84,7 @@ function admin_content(&$a) { return login(false); } - /** + /* * Side bar links */ @@ -125,7 +125,7 @@ function admin_content(&$a) { )); - /** + /* * Page content */ $o = ''; @@ -183,7 +183,7 @@ function admin_content(&$a) { /** * @brief Returns content for Admin Summary Page. * - * @param App $$a + * @param App &$a * @return string HTML from parsed admin_summary.tpl */ function admin_page_summary(&$a) { @@ -252,8 +252,9 @@ function admin_page_summary(&$a) { /** - * Admin Site Page - * @param App $a + * @brief POST handler for Admin Site Page. + * + * @param App &$a */ function admin_page_site_post(&$a){ if (!x($_POST, 'page_site')){ @@ -277,15 +278,16 @@ function admin_page_site_post(&$a){ $register_text = ((x($_POST,'register_text')) ? notags(trim($_POST['register_text'])) : ''); - $allowed_sites = ((x($_POST,'allowed_sites')) ? notags(trim($_POST['allowed_sites'])) : ''); - $allowed_email = ((x($_POST,'allowed_email')) ? notags(trim($_POST['allowed_email'])) : ''); - $not_allowed_email = ((x($_POST,'not_allowed_email')) ? notags(trim($_POST['not_allowed_email'])) : ''); - $block_public = ((x($_POST,'block_public')) ? True : False); - $force_publish = ((x($_POST,'publish_all')) ? True : False); - $disable_discover_tab = ((x($_POST,'disable_discover_tab')) ? True : False); - $no_login_on_homepage = ((x($_POST,'no_login_on_homepage')) ? True : False); - $global_directory = ((x($_POST,'directory_submit_url')) ? notags(trim($_POST['directory_submit_url'])) : ''); - $no_community_page = !((x($_POST,'no_community_page')) ? True : False); + $allowed_sites = ((x($_POST,'allowed_sites')) ? notags(trim($_POST['allowed_sites'])) : ''); + $allowed_email = ((x($_POST,'allowed_email')) ? notags(trim($_POST['allowed_email'])) : ''); + $not_allowed_email = ((x($_POST,'not_allowed_email')) ? notags(trim($_POST['not_allowed_email'])) : ''); + $block_public = ((x($_POST,'block_public')) ? True : False); + $force_publish = ((x($_POST,'publish_all')) ? True : False); + $disable_discover_tab = ((x($_POST,'disable_discover_tab')) ? True : False); + $no_login_on_homepage = ((x($_POST,'no_login_on_homepage')) ? True : False); + $global_directory = ((x($_POST,'directory_submit_url')) ? notags(trim($_POST['directory_submit_url'])) : ''); + $no_community_page = !((x($_POST,'no_community_page')) ? True : False); + $default_expire_days = ((array_key_exists('default_expire_days',$_POST)) ? intval($_POST['default_expire_days']) : 0); $verifyssl = ((x($_POST,'verifyssl')) ? True : False); $proxyuser = ((x($_POST,'proxyuser')) ? notags(trim($_POST['proxyuser'])) : ''); @@ -306,6 +308,7 @@ function admin_page_site_post(&$a){ set_config('system', 'sitename', $sitename); set_config('system', 'no_login_on_homepage', $no_login_on_homepage); set_config('system', 'verify_email', $verify_email); + set_config('system', 'default_expire_days', $default_expire_days); if ($banner == '') { del_config('system', 'banner'); @@ -358,6 +361,8 @@ function admin_page_site_post(&$a){ } /** + * @brief Admin page site. + * * @param App $a * @return string */ @@ -475,10 +480,11 @@ function admin_page_site(&$a) { '$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("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.")), '$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")), '$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.")), + '$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (matrix/network) content'), intval(get_config('system','default_expire_days')), t('0 for no expiration of imported content')), '$form_security_token' => get_form_security_token("admin_site"), )); - } + function admin_page_hubloc_post(&$a){ check_form_security_token_redirectOnErr('/admin/hubloc', 'admin_hubloc'); require_once('include/zot.php'); @@ -614,7 +620,6 @@ function admin_page_queue($a) { ); } - $r = q("select count(outq_posturl) as total, max(outq_priority) as priority, outq_posturl from outq where outq_delivered = 0 group by outq_posturl order by total desc"); @@ -623,7 +628,6 @@ function admin_page_queue($a) { $r[$x]['connected'] = datetime_convert('UTC',date_default_timezone_get(),$r[$x]['connected'],'Y-m-d'); } - $o = replace_macros(get_markup_template('admin_queue.tpl'), array( '$banner' => t('Queue Statistics'), '$numentries' => t('Total Entries'), @@ -760,13 +764,11 @@ function admin_page_users(&$a){ } -// WEe'll still need to link email addresses to admin/users/channels or some such, but this bit doesn't exist yet. +// We'll still need to link email addresses to admin/users/channels or some such, but this bit doesn't exist yet. // That's where we need to be doing last post/channel flags/etc, not here. - $serviceclass = (($_REQUEST['class']) ? " and account_service_class = '" . dbesc($_REQUEST['class']) . "' " : ''); - $order = " order by account_email asc "; if($_REQUEST['order'] === 'expires') $order = " order by account_expires desc "; @@ -800,7 +802,6 @@ function admin_page_users(&$a){ // } // $users = array_map("_setup_users", $users); - $t = get_markup_template('admin_users.tpl'); $o = replace_macros($t, array( // strings // @@ -838,9 +839,9 @@ function admin_page_users(&$a){ /** - * Channels admin page + * @brief Channels admin page. * - * @param App $a + * @param App &$a */ function admin_page_channels_post(&$a) { $channels = ( x($_POST, 'channel') ? $_POST['channel'] : Array() ); @@ -869,7 +870,9 @@ function admin_page_channels_post(&$a) { } /** - * @param App $a + * @brief + * + * @param App &$a * @return string */ function admin_page_channels(&$a){ @@ -972,7 +975,7 @@ function admin_page_channels(&$a){ */ function admin_page_plugins(&$a){ - /** + /* * Single plugin */ if ($a->argc == 3){ @@ -1052,7 +1055,7 @@ function admin_page_plugins(&$a){ } - /** + /* * List plugins */ $plugins = array(); @@ -1084,7 +1087,7 @@ function admin_page_plugins(&$a){ * @param string $th * @param int $result */ -function toggle_theme(&$themes,$th,&$result) { +function toggle_theme(&$themes, $th, &$result) { for($x = 0; $x < count($themes); $x ++) { if($themes[$x]['name'] === $th) { if($themes[$x]['allowed']) { @@ -1139,9 +1142,9 @@ function rebuild_theme_table($themes) { /** - * Themes admin page + * @brief Themes admin page. * - * @param App $a + * @param App &$a * @return string */ function admin_page_themes(&$a){ @@ -1171,7 +1174,7 @@ function admin_page_themes(&$a){ return ''; } - /** + /* * Single theme */ @@ -1250,8 +1253,7 @@ function admin_page_themes(&$a){ )); } - - /** + /* * List themes */ @@ -1278,9 +1280,9 @@ function admin_page_themes(&$a){ /** - * Logs admin page + * @brief POST handler for logs admin page. * - * @param App $a + * @param App &$a */ function admin_page_logs_post(&$a) { if (x($_POST, 'page_logs')) { @@ -1300,6 +1302,8 @@ function admin_page_logs_post(&$a) { } /** + * @brief Logs admin page. + * * @param App $a * @return string */ @@ -1432,5 +1436,4 @@ function admin_page_profs(&$a) { '$submit' => t('Save') )); } - }
\ No newline at end of file diff --git a/mod/channel.php b/mod/channel.php index 3fc4a9269..022def2a8 100644 --- a/mod/channel.php +++ b/mod/channel.php @@ -158,13 +158,11 @@ function channel_content(&$a, $update = 0, $load = false) { $simple_update = (($update) ? " AND item_unseen = 1 " : ''); - if($update && $_SESSION['loadtime']) - $simple_update .= " and item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' "; + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; if($load) $simple_update = ''; - if(($update) && (! $load)) { if ($mid) { $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d AND item_restrict = 0 @@ -185,6 +183,7 @@ function channel_content(&$a, $update = 0, $load = false) { intval(ITEM_WALL), intval(ABOOK_FLAG_BLOCKED) ); + $_SESSION['loadtime'] = datetime_convert(); } } diff --git a/mod/events.php b/mod/events.php index 010f1f7c4..289ddfb15 100755 --- a/mod/events.php +++ b/mod/events.php @@ -548,12 +548,14 @@ function events_content(&$a) { if(! x($orig_event)) $sh_checked = ''; else - $sh_checked = (($orig_event['allow_cid'] === '<' . $channel['channel_hash'] . '>' && (! $orig_event['allow_gid']) && (! $orig_event['deny_cid']) && (! $orig_event['deny_gid'])) ? '' : ' checked="checked" ' ); + $sh_checked = ((($orig_event['allow_cid'] === '<' . $channel['channel_hash'] . '>' || (! $orig_event['allow_cid'])) && (! $orig_event['allow_gid']) && (! $orig_event['deny_cid']) && (! $orig_event['deny_gid'])) ? '' : ' checked="checked" ' ); if($orig_event['event_xchan']) $sh_checked .= ' disabled="disabled" '; + + $sdt = ((x($orig_event)) ? $orig_event['start'] : 'now'); $fdt = ((x($orig_event)) ? $orig_event['finish'] : 'now'); diff --git a/mod/home.php b/mod/home.php index c449a0561..f4358da5c 100644 --- a/mod/home.php +++ b/mod/home.php @@ -185,7 +185,7 @@ function home_content(&$a, $update = 0, $load = false) { $simple_update = (($update) ? " and item.item_unseen = 1 " : ''); if($update && $_SESSION['loadtime']) - $simple_update .= " and item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' "; + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; if($load) $simple_update = ''; @@ -221,6 +221,7 @@ function home_content(&$a, $update = 0, $load = false) { $sql_extra3 $sql_extra $sql_nets", intval(ABOOK_FLAG_BLOCKED) ); + $_SESSION['loadtime'] = datetime_convert(); } // Then fetch all the children of the parents that are on this page $parents_str = ''; diff --git a/mod/id.php b/mod/id.php index 05a2f3dc5..bd4c1fa89 100644 --- a/mod/id.php +++ b/mod/id.php @@ -1,45 +1,51 @@ <?php - - require 'library/openid/provider/provider.php'; - - - - $attrMap = array( - 'namePerson/first' => t('First Name'), - 'namePerson/last' => t('Last Name'), - 'namePerson/friendly' => t('Nickname'), - 'namePerson' => t('Full Name'), - 'contact/internet/email' => t('Email'), - 'contact/email' => t('Email'), - 'media/image/aspect11' => t('Profile Photo'), - 'media/image' => t('Profile Photo'), - 'media/image/default' => t('Profile Photo'), - 'media/image/16x16' => t('Profile Photo 16px'), - 'media/image/32x32' => t('Profile Photo 32px'), - 'media/image/48x48' => t('Profile Photo 48px'), - 'media/image/64x64' => t('Profile Photo 64px'), - 'media/image/80x80' => t('Profile Photo 80px'), - 'media/image/128x128' => t('Profile Photo 128px'), - 'timezone' => t('Timezone'), - 'contact/web/default' => t('Homepage URL'), - 'language/pref' => t('Language'), - 'birthDate/birthYear' => t('Birth Year'), - 'birthDate/birthMonth' => t('Birth Month'), - 'birthDate/birthday' => t('Birth Day'), - 'birthDate' => t('Birthdate'), - 'gender' => t('Gender'), - ); - - - +/** + * @file mod/id.php + * @brief OpenID implementation + */ + +require 'library/openid/provider/provider.php'; + + +$attrMap = array( + 'namePerson/first' => t('First Name'), + 'namePerson/last' => t('Last Name'), + 'namePerson/friendly' => t('Nickname'), + 'namePerson' => t('Full Name'), + 'contact/internet/email' => t('Email'), + 'contact/email' => t('Email'), + 'media/image/aspect11' => t('Profile Photo'), + 'media/image' => t('Profile Photo'), + 'media/image/default' => t('Profile Photo'), + 'media/image/16x16' => t('Profile Photo 16px'), + 'media/image/32x32' => t('Profile Photo 32px'), + 'media/image/48x48' => t('Profile Photo 48px'), + 'media/image/64x64' => t('Profile Photo 64px'), + 'media/image/80x80' => t('Profile Photo 80px'), + 'media/image/128x128' => t('Profile Photo 128px'), + 'timezone' => t('Timezone'), + 'contact/web/default' => t('Homepage URL'), + 'language/pref' => t('Language'), + 'birthDate/birthYear' => t('Birth Year'), + 'birthDate/birthMonth' => t('Birth Month'), + 'birthDate/birthday' => t('Birth Day'), + 'birthDate' => t('Birthdate'), + 'gender' => t('Gender'), +); + + +/** + * @brief Entrypoint for the OpenID implementation. + * + * @param App &$a + */ function id_init(&$a) { - logger('id: ' . print_r($_REQUEST,true)); - + logger('id: ' . print_r($_REQUEST, true)); - if(argc() > 1) + if(argc() > 1) { $which = argv(1); - else { + } else { $a->error = 404; return; } @@ -48,41 +54,45 @@ function id_init(&$a) { $channel = $a->get_channel(); profile_load($a,$which,$profile); - - $op = new MysqlProvider; $op->server(); - } - -function getUserData($handle=null) { - if(! local_channel()) { +/** + * @brief Returns user data needed for OpenID. + * + * If no $handle is provided we will use local_channel() by default. + * + * @param string $handle (default null) + * @return boolean|array + */ +function getUserData($handle = null) { + if (! local_channel()) { notice( t('Permission denied.') . EOL); get_app()->page['content'] = login(); + return false; } // logger('handle: ' . $handle); - if($handle) { + if ($handle) { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_address = '%s' limit 1", dbesc($handle) ); - } - else { + } else { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d", intval(local_channel()) ); } - if(! r) + if (! r) return false; $x = q("select * from account where account_id = %d limit 1", intval($r[0]['channel_account_id']) ); - if($x) + if ($x) $r[0]['email'] = $x[0]['account_email']; $p = q("select * from profile where is_default = 1 and uid = %d limit 1", @@ -90,11 +100,11 @@ function getUserData($handle=null) { ); $gender = ''; - if($p[0]['gender'] == t('Male')) + if ($p[0]['gender'] == t('Male')) $gender = 'M'; - if($p[0]['gender'] == t('Female')) + if ($p[0]['gender'] == t('Female')) $gender = 'F'; - + $r[0]['firstName'] = ((strpos($r[0]['channel_name'],' ')) ? substr($r[0]['channel_name'],0,strpos($r[0]['channel_name'],' ')) : $r[0]['channel_name']); $r[0]['lastName'] = ((strpos($r[0]['channel_name'],' ')) ? substr($r[0]['channel_name'],strpos($r[0]['channel_name'],' ')+1) : ''); $r[0]['namePerson'] = $r[0]['channel_name']; @@ -113,7 +123,7 @@ function getUserData($handle=null) { $r[0]['birthday'] = ((intval(substr($p[0]['dob'],8,2))) ? intval(substr($p[0]['dob'],8,2)) : ''); $r[0]['birthdate'] = (($r[0]['birthyear'] && $r[0]['birthmonth'] && $r[0]['birthday']) ? $p[0]['dob'] : ''); $r[0]['gender'] = $gender; - + return $r[0]; /* @@ -144,20 +154,20 @@ function getUserData($handle=null) { } - - -class MysqlProvider extends LightOpenIDProvider -{ - +/** + * @brief MySQL provider for OpenID implementation. + * + */ +class MysqlProvider extends LightOpenIDProvider { // See http://openid.net/specs/openid-attribute-properties-list-1_0-01.html // This list contains a few variations of these attributes to maintain // compatibility with legacy clients - private $attrFieldMap = array( - 'namePerson/first' => 'firstName', - 'namePerson/last' => 'lastName', - 'namePerson/friendly' => 'channel_address', + private $attrFieldMap = array( + 'namePerson/first' => 'firstName', + 'namePerson/last' => 'lastName', + 'namePerson/friendly' => 'channel_address', 'namePerson' => 'namePerson', 'contact/internet/email' => 'email', 'contact/email' => 'email', @@ -178,11 +188,9 @@ class MysqlProvider extends LightOpenIDProvider 'birthDate/birthday' => 'birthday', 'birthDate' => 'birthdate', 'gender' => 'gender', - ); - - - function setup($identity, $realm, $assoc_handle, $attributes) - { + ); + + function setup($identity, $realm, $assoc_handle, $attributes) { global $attrMap; // logger('identity: ' . $identity); @@ -190,10 +198,10 @@ class MysqlProvider extends LightOpenIDProvider // logger('assoc_handle: ' . $assoc_handle); // logger('attributes: ' . print_r($attributes,true)); - $data = getUserData($assoc_handle); + $data = getUserData($assoc_handle); -// FIXME this needs to be a template with localised strings +/** @FIXME this needs to be a template with localised strings */ $o .= '<form action="" method="post">' . '<input type="hidden" name="openid.assoc_handle" value="' . $assoc_handle . '">' @@ -203,7 +211,7 @@ class MysqlProvider extends LightOpenIDProvider if($attributes['required'] || $attributes['optional']) { $o .= " It also requests following information (required fields marked with *):" . '<ul>'; - + foreach($attributes['required'] as $attr) { if(isset($this->attrMap[$attr])) { $o .= '<li>' @@ -211,7 +219,7 @@ class MysqlProvider extends LightOpenIDProvider . $this->attrMap[$attr] . ' <span class="required">*</span></li>'; } } - + foreach($attributes['optional'] as $attr) { if(isset($this->attrMap[$attr])) { $o .= '<li>' @@ -228,27 +236,23 @@ class MysqlProvider extends LightOpenIDProvider . '</form>'; get_app()->page['content'] .= $o; + } - } - - function checkid($realm, &$attributes) - { + function checkid($realm, &$attributes) { logger('checkid: ' . $realm); - logger('checkid attrs: ' . print_r($attributes,true)); + if(isset($_POST['cancel'])) { + $this->cancel(); + } - if(isset($_POST['cancel'])) { - $this->cancel(); - } - - $data = getUserData(); - if(! $data) { - return false; - } + $data = getUserData(); + if(! $data) { + return false; + } - $q = get_pconfig(local_channel(),'openid',$realm); + $q = get_pconfig(local_channel(), 'openid', $realm); $attrs = array(); if($q) { @@ -265,57 +269,42 @@ class MysqlProvider extends LightOpenIDProvider $attributes[$attr] = $data[$this->attrFieldMap[$attr]]; } } - - if(isset($_POST['always'])) { + + if(isset($_POST['always'])) { set_pconfig(local_channel(),'openid',$realm,array_keys($attributes)); - } - - return z_root() . '/id/' . $data['channel_address']; - } - - function assoc_handle() - { - logger('assoc_handle'); + } + + return z_root() . '/id/' . $data['channel_address']; + } + + function assoc_handle() { + logger('assoc_handle'); $channel = get_app()->get_channel(); + return z_root() . '/channel/' . $channel['channel_address']; + } - } - - function setAssoc($handle, $data) - { + function setAssoc($handle, $data) { logger('setAssoc'); $channel = channelx_by_nick(basename($handle)); if($channel) set_pconfig($channel['channel_id'],'openid','associate',$data); - } - - function getAssoc($handle) - { + } + + function getAssoc($handle) { logger('getAssoc: ' . $handle); $channel = channelx_by_nick(basename($handle)); if($channel) - return get_pconfig($channel['channel_id'],'openid','associate'); + return get_pconfig($channel['channel_id'], 'openid', 'associate'); + return false; - } - - function delAssoc($handle) - { + } + + function delAssoc($handle) { logger('delAssoc'); $channel = channelx_by_nick(basename($handle)); if($channel) - return del_pconfig($channel['channel_id'],'openid','associate'); - } - + return del_pconfig($channel['channel_id'], 'openid', 'associate'); + } } - - - - - - - - - - - diff --git a/mod/item.php b/mod/item.php index dad883f50..fa40aea03 100644 --- a/mod/item.php +++ b/mod/item.php @@ -35,6 +35,23 @@ function item_post(&$a) { $channel = null; $observer = null; + + /** + * Is this a reply to something? + */ + + $parent = ((x($_REQUEST,'parent')) ? intval($_REQUEST['parent']) : 0); + $parent_mid = ((x($_REQUEST,'parent_mid')) ? trim($_REQUEST['parent_mid']) : ''); + + $remote_xchan = ((x($_REQUEST,'remote_xchan')) ? trim($_REQUEST['remote_xchan']) : false); + $r = q("select * from xchan where xchan_hash = '%s' limit 1", + dbesc($remote_xchan) + ); + if($r) + $remote_observer = $r[0]; + else + $remote_xchan = $remote_observer = false; + $profile_uid = ((x($_REQUEST,'profile_uid')) ? intval($_REQUEST['profile_uid']) : 0); require_once('include/identity.php'); $sys = get_sys_channel(); @@ -116,13 +133,6 @@ function item_post(&$a) { $item_flags = $item_restrict = 0; - /** - * Is this a reply to something? - */ - - $parent = ((x($_REQUEST,'parent')) ? intval($_REQUEST['parent']) : 0); - $parent_mid = ((x($_REQUEST,'parent_mid')) ? trim($_REQUEST['parent_mid']) : ''); - $route = ''; $parent_item = null; $parent_contact = null; @@ -275,6 +285,9 @@ function item_post(&$a) { $walltowall = false; $walltowall_comment = false; + if($remote_xchan) + $observer = $remote_observer; + if($observer) { logger('mod_item: post accepted from ' . $observer['xchan_name'] . ' for ' . $owner_xchan['xchan_name'], LOGGER_DEBUG); @@ -847,6 +860,13 @@ function item_post(&$a) { 'otype' => 'item' )); } + + if($uid && $uid == $profile_uid && (! $datarray['item_restrict'])) { + q("update channel set channel_lastpost = '%s' where channel_id = %d", + dbesc(datetime_convert()), + intval($uid) + ); + } } // photo comments turn the corresponding item visible to the profile wall @@ -1058,37 +1078,37 @@ function fix_attached_file_permissions($channel,$observer_hash,$body, function item_check_service_class($channel_id,$iswebpage) { $ret = array('success' => false, $message => ''); + if ($iswebpage) { - $r = q("select count(i.id) as total from item i - right join channel c on (i.author_xchan=c.channel_hash and i.uid=c.channel_id ) - and i.parent=i.id and (i.item_restrict & %d)>0 and not (i.item_restrict & %d)>0 and i.uid= %d ", + $r = q("select count(id) as total from item where parent = id + and ( item_restrict & %d ) > 0 and ( item_restrict & %d ) = 0 and uid = %d ", intval(ITEM_WEBPAGE), intval(ITEM_DELETED), - intval($channel_id) - ); + intval($channel_id) + ); } else { - $r = q("select count(i.id) as total from item i - right join channel c on (i.author_xchan=c.channel_hash and i.uid=c.channel_id ) - and i.parent=i.id and (i.item_restrict=0) and i.uid= %d ", - intval($channel_id) - ); + $r = q("select count(id) as total from item where parent = id and item_restrict = 0 and uid = %d ", + intval($channel_id) + ); } - if(! ($r && count($r))) { - $ret['message'] = t('Unable to obtain identity information from database'); + + if(! $r) { + $ret['message'] = t('Unable to obtain post information from database.'); return $ret; } + if (!$iswebpage) { - if(! service_class_allows($channel_id,'total_items',$r[0]['total'])) { - $result['message'] .= upgrade_message().sprintf(t("You have reached your limit of %1$.0f top level posts."),$r[0]['total']); - return $result; - } + if(! service_class_allows($channel_id,'total_items',$r[0]['total'])) { + $result['message'] .= upgrade_message() . sprintf( t('You have reached your limit of %1$.0f top level posts.'),$r[0]['total']); + return $result; + } } else { - if(! service_class_allows($channel_id,'total_pages',$r[0]['total'])) { - $result['message'] .= upgrade_message().sprintf(t("You have reached your limit of %1$.0f webpages."),$r[0]['total']); - return $result; - } + if(! service_class_allows($channel_id,'total_pages',$r[0]['total'])) { + $result['message'] .= upgrade_message() . sprintf( t('You have reached your limit of %1$.0f webpages.'),$r[0]['total']); + return $result; + } } $ret['success'] = true; diff --git a/mod/like.php b/mod/like.php index dc4531fbb..d3b6f3ecf 100755 --- a/mod/like.php +++ b/mod/like.php @@ -303,7 +303,7 @@ function like_content(&$a) { $multi_undo = 1; } - $r = q("SELECT id FROM item WHERE verb in ( $verbs ) AND item_restrict = 0 + $r = q("SELECT id, parent, uid, verb FROM item WHERE verb in ( $verbs ) AND item_restrict = 0 AND author_xchan = '%s' AND ( parent = %d OR thr_parent = '%s') and uid = %d ", dbesc($observer['xchan_hash']), intval($item_id), @@ -316,6 +316,16 @@ function like_content(&$a) { require_once('include/items.php'); foreach($r as $rr) { drop_item($rr['id'],false,DROPITEM_PHASE1); + // set the changed timestamp on the parent so we'll see the update without a page reload + $z = q("update item set changed = '%s' where id = %d and uid = %d", + dbesc(datetime_convert()), + intval($rr['parent']), + intval($rr['uid']) + ); + // Prior activity was a duplicate of the one we're submitting, just undo it; + // don't fall through and create another + if(activity_match($rr['verb'],$activity)) + $multi_undo = false; } if($interactive) diff --git a/mod/match.php b/mod/match.php index 5a01ba645..fd739ba2c 100644 --- a/mod/match.php +++ b/mod/match.php @@ -1,14 +1,20 @@ <?php -// FIXME - this has never been properly ported from Friendica -// It takes keywords from your profile and queries the directory server for -// matching keywords from other profiles. - - +/** + * @brief Controller for /match. + * + * It takes keywords from your profile and queries the directory server for + * matching keywords from other profiles. + * + * @FIXME this has never been properly ported from Friendica. + * + * @param App &$a + * @return void|string + */ function match_content(&$a) { $o = ''; - if(! local_channel()) + if (! local_channel()) return; $_SESSION['return_url'] = $a->get_baseurl() . '/' . $a->cmd; @@ -18,22 +24,22 @@ function match_content(&$a) { $r = q("SELECT `keywords` FROM `profile` WHERE `is_default` = 1 AND `uid` = %d LIMIT 1", intval(local_channel()) ); - if(! count($r)) - return; - if(! $r[0]['keywords']) { - notice( t('No keywords to match. Please add keywords to your default profile.') . EOL); + if (! count($r)) return; + if (! $r[0]['keywords']) { + notice( t('No keywords to match. Please add keywords to your default profile.') . EOL); + return; } $params = array(); $tags = trim($r[0]['keywords']); - - if($tags) { + + if ($tags) { $params['s'] = $tags; - if($a->pager['page'] != 1) + if ($a->pager['page'] != 1) $params['p'] = $a->pager['page']; - + // if(strlen(get_config('system','directory_submit_url'))) // $x = post_url('http://dir.friendica.com/msearch', $params); // else @@ -41,18 +47,14 @@ function match_content(&$a) { $j = json_decode($x); - if($j->total) { + if ($j->total) { $a->set_pager_total($j->total); $a->set_pager_itemspage($j->items_page); } - if(count($j->results)) { - - - + if (count($j->results)) { $tpl = get_markup_template('match.tpl'); - foreach($j->results as $jj) { - + foreach ($j->results as $jj) { $connlnk = $a->get_baseurl() . '/follow/?url=' . $jj->url; $o .= replace_macros($tpl,array( '$url' => zid($jj->url), @@ -64,14 +66,13 @@ function match_content(&$a) { '$tags' => $jj->tags )); } - } - else { + } else { info( t('No matches') . EOL); - } - + } } $o .= cleardiv(); $o .= paginate($a); + return $o; } diff --git a/mod/network.php b/mod/network.php index f71a7569a..8db3bfd58 100644 --- a/mod/network.php +++ b/mod/network.php @@ -396,7 +396,7 @@ function network_content(&$a, $update = 0, $load = false) { // which are both ITEM_UNSEEN and have "changed" since that time. Cross fingers... if($update && $_SESSION['loadtime']) - $simple_update .= " and item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' "; + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; if($load) $simple_update = ''; @@ -444,16 +444,15 @@ function network_content(&$a, $update = 0, $load = false) { } else { - if(! $firehose) { - // update - $r = q("SELECT item.parent AS item_id FROM item - left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) - WHERE true $uids AND item.item_restrict = 0 $simple_update - and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) - $sql_extra3 $sql_extra $sql_nets ", - intval(ABOOK_FLAG_BLOCKED) - ); - } + // this is an update + $r = q("SELECT item.parent AS item_id FROM item + left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) + WHERE true $uids AND item.item_restrict = 0 $simple_update + and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null) + $sql_extra3 $sql_extra $sql_nets ", + intval(ABOOK_FLAG_BLOCKED) + ); + $_SESSION['loadtime'] = datetime_convert(); } // Then fetch all the children of the parents that are on this page diff --git a/mod/ping.php b/mod/ping.php index 001c5594d..b676726fe 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -274,7 +274,7 @@ function ping_init(&$a) { $r = q("SELECT * FROM item WHERE item_restrict = 0 and item_unseen = 1 and uid = %d - and author_xchan != '%s' ORDER BY created DESC", + and author_xchan != '%s' ORDER BY created DESC limit 300", intval(local_channel()), dbesc($ob_hash) ); @@ -295,7 +295,7 @@ function ping_init(&$a) { if(argc() > 1 && (argv(1) === 'intros')) { $result = array(); - $r = q("SELECT * FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and (abook_flags & %d) > 0 and not ((abook_flags & %d) > 0 or (xchan_flags & %d) > 0) ORDER BY abook_created DESC", + $r = q("SELECT * FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and (abook_flags & %d) > 0 and not ((abook_flags & %d) > 0 or (xchan_flags & %d) > 0) ORDER BY abook_created DESC LIMIT 50", intval(local_channel()), intval(ABOOK_FLAG_PENDING), intval(ABOOK_FLAG_SELF|ABOOK_FLAG_IGNORED), @@ -327,7 +327,7 @@ function ping_init(&$a) { $r = q("SELECT * FROM event left join xchan on event_xchan = xchan_hash WHERE `event`.`uid` = %d AND start < '%s' AND start > '%s' and `ignore` = 0 - ORDER BY `start` DESC ", + ORDER BY `start` DESC LIMIT 1000", intval(local_channel()), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) diff --git a/mod/post.php b/mod/post.php index 31b688221..37002b249 100644 --- a/mod/post.php +++ b/mod/post.php @@ -1,20 +1,21 @@ -<?php /** @file */ +<?php /** - * Zot endpoint + * @file mod/post.php + * + * @brief Zot endpoint. + * */ - require_once('include/zot.php'); - -function post_init(&$a) { - - // Most access to this endpoint is via the post method. - // Here we will pick out the magic auth params which arrive - // as a get request, and the only communications to arrive this way. - /** + * @brief HTTP POST entry point for Zot. + * + * Most access to this endpoint is via the post method. + * Here we will pick out the magic auth params which arrive as a get request, + * and the only communications to arrive this way. + * * Magic Auth * ========== * @@ -24,67 +25,68 @@ function post_init(&$a) { * The endpoint is typically https://$remotesite/post - or whatever was specified as the callback url in prior communications * (we will bootstrap an address and fetch a zot info packet if possible where no prior communications exist) * - * Four GET parameters are supplied: - * - ** auth => the urlencoded webbie (channel@host.domain) of the channel requesting access - ** dest => the desired destination URL (urlencoded) - ** sec => a random string which is also stored on $mysite for use during the verification phase. - ** version => the zot revision - ** delegate => optional urlencoded webbie of a local channel to invoke delegation rights for + * Five GET parameters are supplied: + * * auth => the urlencoded webbie (channel@host.domain) of the channel requesting access + * * dest => the desired destination URL (urlencoded) + * * sec => a random string which is also stored on $mysite for use during the verification phase. + * * version => the zot revision + * * delegate => optional urlencoded webbie of a local channel to invoke delegation rights for * * When this packet is received, an "auth-check" zot message is sent to $mysite. * (e.g. if $_GET['auth'] is foobar@podunk.edu, a zot packet is sent to the podunk.edu zot endpoint, which is typically /post) * If no information has been recorded about the requesting identity a zot information packet will be retrieved before * continuing. - * + * * The sender of this packet is an arbitrary/random site channel. The recipients will be a single recipient corresponding * to the guid and guid_sig we have associated with the requesting auth identity * - * - * { - * "type":"auth_check", - * "sender":{ - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TApz...", - * "url":"http:\/\/podunk.edu", - * "url_sig":"T8Bp7j..." - * }, - * "recipients":{ - * { - * "guid":"ZHSqb...", - * "guid_sig":"JsAAXi..." - * } - * } - * "callback":"\/post", - * "version":1, - * "secret":"1eaa661", - * "secret_sig":"eKV968b1..." - * } - * + * \code{.json} + * { + * "type":"auth_check", + * "sender":{ + * "guid":"kgVFf_...", + * "guid_sig":"PT9-TApz...", + * "url":"http:\/\/podunk.edu", + * "url_sig":"T8Bp7j..." + * }, + * "recipients":{ + * { + * "guid":"ZHSqb...", + * "guid_sig":"JsAAXi..." + * } + * } + * "callback":"\/post", + * "version":1, + * "secret":"1eaa661", + * "secret_sig":"eKV968b1..." + * } + * \endcode * * auth_check messages MUST use encapsulated encryption. This message is sent to the origination site, which checks the 'secret' to see * if it is the same as the 'sec' which it passed originally. It also checks the secret_sig which is the secret signed by the * destination channel's private key and base64url encoded. If everything checks out, a json packet is returned: * - * { - * "success":1, - * "confirm":"q0Ysovd1u..." - * "service_class":(optional) - * "level":(optional) - * } + * \code{.json} + * { + * "success":1, + * "confirm":"q0Ysovd1u...", + * "service_class":(optional) + * "level":(optional) + * } + * \endcode * * 'confirm' in this case is the base64url encoded RSA signature of the concatenation of 'secret' with the * base64url encoded whirlpool hash of the requestor's guid and guid_sig; signed with the source channel private key. * This prevents a man-in-the-middle from inserting a rogue success packet. Upon receipt and successful * verification of this packet, the destination site will redirect to the original destination URL and indicate a successful remote login. * Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is - * a string whose contents are not defined by protocol. Example: "basic" or "gold". - * - * + * a string whose contents are not defined by protocol. Example: "basic" or "gold". * + * @param[in,out] App &$a */ - - if(array_key_exists('auth',$_REQUEST)) { +function post_init(&$a) { + + if (array_key_exists('auth', $_REQUEST)) { $ret = array('success' => false, 'message' => ''); @@ -95,7 +97,7 @@ function post_init(&$a) { $version = $_REQUEST['version']; $delegate = $_REQUEST['delegate']; - $test = ((x($_REQUEST,'test')) ? intval($_REQUEST['test']) : 0); + $test = ((x($_REQUEST, 'test')) ? intval($_REQUEST['test']) : 0); // They are authenticating ultimately to the site and not to a particular channel. // Any channel will do, providing it's currently active. We just need to have an @@ -105,10 +107,10 @@ function post_init(&$a) { intval(PAGE_REMOVED) ); - if(! $c) { + if (! $c) { // nobody here logger('mod_zot: auth: unable to find a response channel'); - if($test) { + if ($test) { $ret['message'] .= 'no local channels found.' . EOL; json_return_and_die($ret); } @@ -121,12 +123,12 @@ function post_init(&$a) { dbesc($address) ); - if(! $x) { + if (! $x) { // finger them if they can't be found. - $ret = zot_finger($address,null); - if($ret['success']) { - $j = json_decode($ret['body'],true); - if($j) + $ret = zot_finger($address, null); + if ($ret['success']) { + $j = json_decode($ret['body'], true); + if ($j) import_xchan($j); $x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash where hubloc_addr = '%s' order by hubloc_id desc limit 1", dbesc($address) @@ -166,61 +168,60 @@ function post_init(&$a) { $j = array(); - if(! $already_authed) { + if (! $already_authed) { // Auth packets MUST use ultra top-secret hush-hush mode - e.g. the entire packet is encrypted using the site private key // The actual channel sending the packet ($c[0]) is not important, but this provides a generic zot packet with a sender // which can be verified $p = zot_build_packet($c[0],$type = 'auth_check', array(array('guid' => $x[0]['hubloc_guid'],'guid_sig' => $x[0]['hubloc_guid_sig'])), $x[0]['hubloc_sitekey'], $sec); - if($test) { + if ($test) { $ret['message'] .= 'auth check packet created using sitekey ' . $x[0]['hubloc_sitekey'] . EOL; $ret['message'] .= 'packet contents: ' . $p . EOL; } $result = zot_zot($x[0]['hubloc_callback'],$p); - - if(! $result['success']) { + if (! $result['success']) { logger('mod_zot: auth_check callback failed.'); - if($test) { + if ($test) { $ret['message'] .= 'auth check request to your site returned .' . print_r($result, true) . EOL; json_return_and_die($ret); } goaway($desturl); } - $j = json_decode($result['body'],true); - if(! $j) { + $j = json_decode($result['body'], true); + if (! $j) { logger('mod_zot: auth_check json data malformed.'); if($test) { $ret['message'] .= 'json malformed: ' . $result['body'] . EOL; json_return_and_die($ret); } - } + } } - if($test) { + if ($test) { $ret['message'] .= 'auth check request returned .' . print_r($j, true) . EOL; - } + } - if($already_authed || $j['success']) { - if($j['success']) { + if ($already_authed || $j['success']) { + if ($j['success']) { // legit response, but we do need to check that this wasn't answered by a man-in-middle - if(! rsa_verify($sec . $x[0]['xchan_hash'],base64url_decode($j['confirm']),$x[0]['xchan_pubkey'])) { + if (! rsa_verify($sec . $x[0]['xchan_hash'],base64url_decode($j['confirm']),$x[0]['xchan_pubkey'])) { logger('mod_zot: auth: final confirmation failed.'); - if($test) { + if ($test) { $ret['message'] .= 'final confirmation failed. ' . $sec . print_r($j,true) . print_r($x[0],true); json_return_and_die($ret); } - + goaway($desturl); } - if(array_key_exists('service_class',$j)) + if (array_key_exists('service_class',$j)) $remote_service_class = $j['service_class']; - if(array_key_exists('level',$j)) + if (array_key_exists('level',$j)) $remote_level = $j['level']; - if(array_key_exists('DNT',$j)) + if (array_key_exists('DNT',$j)) $DNT = $j['DNT']; } // everything is good... maybe @@ -229,35 +230,33 @@ function post_init(&$a) { // tell them to logout if they're logged in locally as anything but the target remote account // in which case just shut up because they don't need to be doing this at all. - if($a->channel['channel_hash'] != $x[0]['xchan_hash']) { + if ($a->channel['channel_hash'] != $x[0]['xchan_hash']) { logger('mod_zot: auth: already authenticated locally as somebody else.'); notice( t('Remote authentication blocked. You are logged into this site locally. Please logout and retry.') . EOL); - if($test) { + if ($test) { $ret['message'] .= 'already logged in locally with a conflicting identity.' . EOL; json_return_and_die($ret); } - } goaway($desturl); } - // log them in - if($test) { + if ($test) { $ret['success'] = true; $ret['message'] .= 'Authentication Success!' . EOL; json_return_and_die($ret); } $delegation_success = false; - if($delegate) { + if ($delegate) { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where xchan_addr = '%s' limit 1", dbesc($delegate) ); - if($r && intval($r[0]['channel_id'])) { + if ($r && intval($r[0]['channel_id'])) { $allowed = perm_is_allowed($r[0]['channel_id'],$x[0]['xchan_hash'],'delegate'); - if($allowed) { + if ($allowed) { $_SESSION['delegate_channel'] = $r[0]['channel_id']; $_SESSION['delegate'] = $x[0]['xchan_hash']; $_SESSION['account_id'] = intval($r[0]['channel_account_id']); @@ -267,12 +266,9 @@ function post_init(&$a) { } } } - - - $_SESSION['authenticated'] = 1; - if(! $delegation_success) { + if (! $delegation_success) { $_SESSION['visitor_id'] = $x[0]['xchan_hash']; $_SESSION['my_url'] = $x[0]['xchan_url']; $_SESSION['my_address'] = $address; @@ -289,18 +285,15 @@ function post_init(&$a) { $a->set_groups(init_groups_visitor($_SESSION['visitor_id'])); info(sprintf( t('Welcome %s. Remote authentication successful.'),$x[0]['xchan_name'])); logger('mod_zot: auth success from ' . $x[0]['xchan_addr']); - q("update hubloc set hubloc_status = (hubloc_status | %d ) where hubloc_id = %d ", - intval(HUBLOC_WORKS), - intval($x[0]['hubloc_id']) - ); - - + q("update hubloc set hubloc_status = (hubloc_status | %d ) where hubloc_id = %d ", + intval(HUBLOC_WORKS), + intval($x[0]['hubloc_id']) + ); } else { - if($test) { + if ($test) { $ret['message'] .= 'auth failure. ' . print_r($_REQUEST,true) . print_r($j,true) . EOL; json_return_and_die($ret); } - logger('mod_zot: magic-auth failure - not authenticated: ' . $x[0]['xchan_addr']); q("update hubloc set hubloc_status = (hubloc_status | %d ) where hubloc_id = %d ", intval(HUBLOC_RECEIVE_ERROR), @@ -308,11 +301,14 @@ function post_init(&$a) { ); } - // FIXME - we really want to save the return_url in the session before we visit rmagic. - // This does however prevent a recursion if you visit rmagic directly, as it would otherwise send you back here again. - // But z_root() probably isn't where you really want to go. + /** + * @FIXME we really want to save the return_url in the session before we + * visit rmagic. This does however prevent a recursion if you visit + * rmagic directly, as it would otherwise send you back here again. + * But z_root() probably isn't where you really want to go. + */ - if($test) { + if ($test) { $ret['message'] .= 'auth failure fallthrough ' . print_r($_REQUEST,true) . print_r($j,true) . EOL; json_return_and_die($ret); } @@ -322,41 +318,40 @@ function post_init(&$a) { goaway($desturl); } - return; } /** - * @function post_post(&$a) - * zot communications and messaging + * @brief zot communications and messaging. * - * Sender HTTP posts to this endpoint ($site/post typically) with 'data' parameter set to json zot message packet. - * This packet is optionally encrypted, which we will discover if the json has an 'iv' element. - * $contents => array( 'alg' => 'aes256cbc', 'iv' => initialisation vector, 'key' => decryption key, 'data' => encrypted data); - * $contents->iv and $contents->key are random strings encrypted with this site's RSA public key and then base64url encoded. - * Currently only 'aes256cbc' is used, but this is extensible should that algorithm prove inadequate. + * Sender HTTP posts to this endpoint ($site/post typically) with 'data' parameter set to json zot message packet. + * This packet is optionally encrypted, which we will discover if the json has an 'iv' element. + * $contents => array( 'alg' => 'aes256cbc', 'iv' => initialisation vector, 'key' => decryption key, 'data' => encrypted data); + * $contents->iv and $contents->key are random strings encrypted with this site's RSA public key and then base64url encoded. + * Currently only 'aes256cbc' is used, but this is extensible should that algorithm prove inadequate. * - * Once decrypted, one will find the normal json_encoded zot message packet. + * Once decrypted, one will find the normal json_encoded zot message packet. * * Defined packet types are: notify, purge, refresh, force_refresh, auth_check, ping, and pickup * * Standard packet: (used by notify, purge, refresh, force_refresh, and auth_check) - * + * \code{.json} * { - * "type": "notify", - * "sender":{ - * "guid":"kgVFf_1...", - * "guid_sig":"PT9-TApzp...", - * "url":"http:\/\/podunk.edu", - * "url_sig":"T8Bp7j5...", - * }, - * "recipients": { optional recipient array }, - * "callback":"\/post", - * "version":1, - * "secret":"1eaa...", - * "secret_sig": "df89025470fac8..." + * "type": "notify", + * "sender":{ + * "guid":"kgVFf_1...", + * "guid_sig":"PT9-TApzp...", + * "url":"http:\/\/podunk.edu", + * "url_sig":"T8Bp7j5...", + * }, + * "recipients": { optional recipient array }, + * "callback":"\/post", + * "version":1, + * "secret":"1eaa...", + * "secret_sig": "df89025470fac8..." * } - * + * \endcode + * * Signature fields are all signed with the sender channel private key and base64url encoded. * Recipients are arrays of guid and guid_sig, which were previously signed with the recipients private * key and base64url encoded and later obtained via channel discovery. Absence of recipients indicates @@ -364,108 +359,116 @@ function post_init(&$a) { * * "pickup" packet: * The pickup packet is sent in response to a notify packet from another site - * + * \code{.json} * { - * "type":"pickup", - * "url":"http:\/\/example.com", - * "callback":"http:\/\/example.com\/post", - * "callback_sig":"teE1_fLI...", - * "secret":"1eaa...", - * "secret_sig":"O7nB4_..." + * "type":"pickup", + * "url":"http:\/\/example.com", + * "callback":"http:\/\/example.com\/post", + * "callback_sig":"teE1_fLI...", + * "secret":"1eaa...", + * "secret_sig":"O7nB4_..." * } + * \endcode * - * In the pickup packet, the sig fields correspond to the respective data element signed with this site's system - * private key and then base64url encoded. + * In the pickup packet, the sig fields correspond to the respective data + * element signed with this site's system private key and then base64url encoded. * The "secret" is the same as the original secret from the notify packet. * - * If verification is successful, a json structure is returned - * containing a success indicator and an array of type 'pickup'. - * Each pickup element contains the original notify request and a message field whose contents are - * dependent on the message type + * If verification is successful, a json structure is returned containing a + * success indicator and an array of type 'pickup'. + * Each pickup element contains the original notify request and a message field + * whose contents are dependent on the message type. * - * This JSON array is AES encapsulated using the site public key of the site that sent the initial zot pickup packet. + * This JSON array is AES encapsulated using the site public key of the site + * that sent the initial zot pickup packet. * Using the above example, this would be example.com. - * - * + * + * \code{.json} * { - * "success":1, - * "pickup":{ - * "notify":{ - * "type":"notify", - * "sender":{ - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TApz...", - * "url":"http:\/\/z.podunk.edu", - * "url_sig":"T8Bp7j5D..." - * }, - * "callback":"\/post", - * "version":1, - * "secret":"1eaa661..." - * }, - * "message":{ - * "type":"activity", - * "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", - * "created":"2012-11-20 04:04:16", - * "edited":"2012-11-20 04:04:16", - * "title":"", - * "body":"Hi Nickordo", - * "app":"", - * "verb":"post", - * "object_type":"", - * "target_type":"", - * "permalink":"", - * "location":"", - * "longlat":"", - * "owner":{ - * "name":"Indigo", - * "address":"indigo@podunk.edu", - * "url":"http:\/\/podunk.edu", - * "photo":{ - * "mimetype":"image\/jpeg", - * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + * "success":1, + * "pickup":{ + * "notify":{ + * "type":"notify", + * "sender":{ + * "guid":"kgVFf_...", + * "guid_sig":"PT9-TApz...", + * "url":"http:\/\/z.podunk.edu", + * "url_sig":"T8Bp7j5D..." * }, - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TAp...", + * "callback":"\/post", + * "version":1, + * "secret":"1eaa661..." * }, - * "author":{ - * "name":"Indigo", - * "address":"indigo@podunk.edu", - * "url":"http:\/\/podunk.edu", - * "photo":{ - * "mimetype":"image\/jpeg", - * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + * "message":{ + * "type":"activity", + * "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + * "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + * "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu", + * "created":"2012-11-20 04:04:16", + * "edited":"2012-11-20 04:04:16", + * "title":"", + * "body":"Hi Nickordo", + * "app":"", + * "verb":"post", + * "object_type":"", + * "target_type":"", + * "permalink":"", + * "location":"", + * "longlat":"", + * "owner":{ + * "name":"Indigo", + * "address":"indigo@podunk.edu", + * "url":"http:\/\/podunk.edu", + * "photo":{ + * "mimetype":"image\/jpeg", + * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + * }, + * "guid":"kgVFf_...", + * "guid_sig":"PT9-TAp...", * }, - * "guid":"kgVFf_...", - * "guid_sig":"PT9-TAp..." + * "author":{ + * "name":"Indigo", + * "address":"indigo@podunk.edu", + * "url":"http:\/\/podunk.edu", + * "photo":{ + * "mimetype":"image\/jpeg", + * "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5" + * }, + * "guid":"kgVFf_...", + * "guid_sig":"PT9-TAp..." + * } * } * } * } - *} + * \endcode * - * Currently defined message types are 'activity', 'mail', 'profile', 'location' and 'channel_sync', - * which each have different content schemas. + * Currently defined message types are 'activity', 'mail', 'profile', 'location' + * and 'channel_sync', which each have different content schemas. * * Ping packet: - * A ping packet does not require any parameters except the type. It may or may not be encrypted. - * + * A ping packet does not require any parameters except the type. It may or may + * not be encrypted. + * + * \code{.json} * { - * "type": "ping" + * "type": "ping" * } - * + * \endcode + * * On receipt of a ping packet a ping response will be returned: * + * \code{.json} * { * "success" : 1, * "site" { - * "url":"http:\/\/podunk.edu", - * "url_sig":"T8Bp7j5...", - * "sitekey": "-----BEGIN PUBLIC KEY----- - * MIICIjANBgkqhkiG9w0BAQE..." - * } + * "url": "http:\/\/podunk.edu", + * "url_sig": "T8Bp7j5...", + * "sitekey": "-----BEGIN PUBLIC KEY----- + * MIICIjANBgkqhkiG9w0BAQE..." + * } * } - * + * \endcode + * * The ping packet can be used to verify that a site has not been re-installed, and to * initiate corrective action if it has. The url_sig is signed with the site private key * and base64url encoded - and this should verify with the enclosed sitekey. Failure to @@ -479,21 +482,19 @@ function post_init(&$a) { * If you have no records which match this url_sig and key - no corrective action should * be taken as this packet may have been returned by an imposter. * + * @param[in,out] App &$a */ - - function post_post(&$a) { - $encrypted_packet = false; $ret = array('success' => false); $data = json_decode($_REQUEST['data'],true); - - /** - * Many message packets will arrive encrypted. The existence of an 'iv' element - * tells us we need to unencapsulate the AES-256-CBC content using the site private key + /* + * Many message packets will arrive encrypted. The existence of an 'iv' + * element tells us we need to unencapsulate the AES-256-CBC content using + * the site private key. */ if($data && array_key_exists('iv',$data)) { @@ -539,12 +540,11 @@ function post_post(&$a) { if($msgtype === 'pickup') { - /** + /* * The 'pickup' message arrives with a tracking ID which is associated with a particular outq_hash * First verify that that the returned signatures verify, then check that we have an outbound queue item * with the correct hash. * If everything verifies, find any/all outbound messages in the queue for this hubloc and send them back - * */ if((! $data['secret']) || (! $data['secret_sig'])) { @@ -597,7 +597,7 @@ function post_post(&$a) { json_return_and_die($ret); } - /** + /* * If we made it to here, the signatures verify, but we still don't know if the tracking ID is valid. * It wouldn't be an error if the tracking ID isn't found, because we may have sent this particular * queue item with another pickup (after the tracking ID for the other pickup was verified). @@ -613,7 +613,7 @@ function post_post(&$a) { json_return_and_die($ret); } - /** + /* * Everything is good if we made it here, so find all messages that are going to this location * and send them all. */ @@ -651,33 +651,31 @@ function post_post(&$a) { $encrypted = crypto_encapsulate(json_encode($ret),$sitekey); json_return_and_die($encrypted); - /** pickup: end */ + /* pickup: end */ } - - - /** + /* * All other message types require us to verify the sender. This is a generic check, so we * will do it once here and bail if anything goes wrong. */ - if(array_key_exists('sender',$data)) { + if (array_key_exists('sender',$data)) { $sender = $data['sender']; - } + } - /** Check if the sender is already verified here */ + /* Check if the sender is already verified here */ $hub = zot_gethub($sender); - if(! $hub) { + if (! $hub) { - /** Have never seen this guid or this guid coming from this location. Check it and register it. */ + /* Have never seen this guid or this guid coming from this location. Check it and register it. */ // (!!) this will validate the sender $result = zot_register_hub($sender); - if((! $result['success']) || (! ($hub = zot_gethub($sender)))) { + if ((! $result['success']) || (! ($hub = zot_gethub($sender)))) { $ret['message'] = 'Hub not available.'; logger('mod_zot: no hub'); json_return_and_die($ret); @@ -695,12 +693,12 @@ function post_post(&$a) { // a dead hub came back to life - reset any tombstones we might have - if($hub['hubloc_status'] & HUBLOC_OFFLINE) { + if ($hub['hubloc_status'] & HUBLOC_OFFLINE) { q("update hubloc set hubloc_status = (hubloc_status & ~%d) where hubloc_id = %d", intval(HUBLOC_OFFLINE), intval($hub['hubloc_id']) ); - if($r[0]['hubloc_flags'] & HUBLOC_FLAGS_ORPHANCHECK) { + if ($r[0]['hubloc_flags'] & HUBLOC_FLAGS_ORPHANCHECK) { q("update hubloc set hubloc_flags = (hubloc_flags & ~%d) where hubloc_id = %d", intval(HUBLOC_FLAGS_ORPHANCHECK), intval($hub['hubloc_id']) @@ -711,15 +709,13 @@ function post_post(&$a) { intval(XCHAN_FLAGS_ORPHAN), dbesc($hub['hubloc_hash']) ); - } - + } - /** + /* * This hub has now been proven to be valid. * Any hub with the same URL and a different sitekey cannot be valid. * Get rid of them (mark them deleted). There's a good chance they were re-installs. - * */ q("update hubloc set hubloc_flags = ( hubloc_flags | %d ) where hubloc_url = '%s' and hubloc_sitekey != '%s' ", @@ -728,15 +724,15 @@ function post_post(&$a) { dbesc($hub['hubloc_sitekey']) ); - // TODO: check which hub is primary and take action if mismatched + /** @TODO check which hub is primary and take action if mismatched */ - if(array_key_exists('recipients',$data)) + if (array_key_exists('recipients', $data)) $recipients = $data['recipients']; - if($msgtype === 'auth_check') { + if ($msgtype === 'auth_check') { - /** + /* * Requestor visits /magic/?dest=somewhere on their own site with a browser * magic redirects them to $destsite/post [with auth args....] * $destsite sends an auth_check packet to originator site @@ -751,12 +747,12 @@ function post_post(&$a) { */ logger('mod_zot: auth_check', LOGGER_DEBUG); - if(! $encrypted_packet) { + if (! $encrypted_packet) { logger('mod_zot: auth_check packet was not encrypted.'); $ret['message'] .= 'no packet encryption' . EOL; json_return_and_die($ret); } - + $arr = $data['sender']; $sender_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); @@ -774,7 +770,7 @@ function post_post(&$a) { // First verify their signature. We will have obtained a zot-info packet from them as part of the sender // verification. - if((! $y) || (! rsa_verify($data['secret'],base64url_decode($data['secret_sig']),$y[0]['xchan_pubkey']))) { + if ((! $y) || (! rsa_verify($data['secret'], base64url_decode($data['secret_sig']),$y[0]['xchan_pubkey']))) { logger('mod_zot: auth_check: sender not found or secret_sig invalid.'); $ret['message'] .= 'sender not found or sig invalid ' . print_r($y,true) . EOL; json_return_and_die($ret); @@ -784,14 +780,14 @@ function post_post(&$a) { $ret['message'] .= 'recipients ' . print_r($recipients,true) . EOL; - if($data['recipients']) { + if ($data['recipients']) { $arr = $data['recipients'][0]; - $recip_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); + $recip_hash = make_xchan_hash($arr['guid'], $arr['guid_sig']); $c = q("select channel_id, channel_account_id, channel_prvkey from channel where channel_hash = '%s' limit 1", dbesc($recip_hash) ); - if(! $c) { + if (! $c) { logger('mod_zot: auth_check: recipient channel not found.'); $ret['message'] .= 'recipient not found.' . EOL; json_return_and_die($ret); @@ -807,7 +803,7 @@ function post_post(&$a) { dbesc($data['secret']), dbesc($data['sender']['url']) ); - if(! $z) { + if (! $z) { logger('mod_zot: auth_check: verification key not found.'); $ret['message'] .= 'verification key not found' . EOL; json_return_and_die($ret); @@ -823,70 +819,66 @@ function post_post(&$a) { logger('mod_zot: auth_check: success', LOGGER_DEBUG); $ret['success'] = true; $ret['confirm'] = $confirm; - if($u && $u[0]['account_service_class']) + if ($u && $u[0]['account_service_class']) $ret['service_class'] = $u[0]['account_service_class']; // Set "do not track" flag if this site or this channel's profile is restricted // in some way - if(intval(get_config('system','block_public'))) + if (intval(get_config('system','block_public'))) $ret['DNT'] = true; - if(! perm_is_allowed($c[0]['channel_id'],'','view_profile')) + if (! perm_is_allowed($c[0]['channel_id'],'','view_profile')) $ret['DNT'] = true; - if(get_pconfig($c[0]['channel_id'],'system','do_not_track')) + if (get_pconfig($c[0]['channel_id'],'system','do_not_track')) $ret['DNT'] = true; - if(get_pconfig($c[0]['channel_id'],'system','hide_online_status')) + if (get_pconfig($c[0]['channel_id'],'system','hide_online_status')) $ret['DNT'] = true; json_return_and_die($ret); - } json_return_and_die($ret); } - if($msgtype === 'request') { + if ($msgtype === 'request') { // request a particular post/conversation by message_id $x = zot_process_message_request($data); json_return_and_die($x); } - - if($msgtype === 'purge') { - if($recipients) { + if ($msgtype === 'purge') { + if ($recipients) { // basically this means "unfriend" - foreach($recipients as $recip) { + foreach ($recipients as $recip) { $r = q("select channel.*,xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_guid = '%s' and channel_guid_sig = '%s' limit 1", dbesc($recip['guid']), dbesc($recip['guid_sig']) ); - if($r) { + if ($r) { $r = q("select abook_id from abook where uid = %d and abook_xchan = '%s' limit 1", intval($r[0]['channel_id']), dbesc(make_xchan_hash($sender['guid'],$sender['guid_sig'])) ); - if($r) { + if ($r) { contact_remove($r[0]['channel_id'],$r[0]['abook_id']); } } } - } - else { + } else { // Unfriend everybody - basically this means the channel has committed suicide $arr = $data['sender']; $sender_hash = make_xchan_hash($arr['guid'],$arr['guid_sig']); - + require_once('include/Contact.php'); remove_all_xchan_resources($sender_hash); $ret['success'] = true; json_return_and_die($ret); - } } - if(($msgtype === 'refresh') || ($msgtype === 'force_refresh')) { + if (($msgtype === 'refresh') || ($msgtype === 'force_refresh')) { // remote channel info (such as permissions or photo or something) // has been updated. Grab a fresh copy and sync it. @@ -894,11 +886,11 @@ function post_post(&$a) { // force_refresh unconditionally creates a directory update record, // even if no changes were detected upon processing. - if($recipients) { + if ($recipients) { // This would be a permissions update, typically for one connection - foreach($recipients as $recip) { + foreach ($recipients as $recip) { $r = q("select channel.*,xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_guid = '%s' and channel_guid_sig = '%s' limit 1", @@ -910,44 +902,37 @@ function post_post(&$a) { 'xchan_guid' => $sender['guid'], 'xchan_guid_sig' => $sender['guid_sig'], 'hubloc_url' => $sender['url'] - ),$r[0], (($msgtype === 'force_refresh') ? true : false)); + ), $r[0], (($msgtype === 'force_refresh') ? true : false)); } - } - else { + } else { // system wide refresh - + $x = zot_refresh(array( 'xchan_guid' => $sender['guid'], 'xchan_guid_sig' => $sender['guid_sig'], 'hubloc_url' => $sender['url'] - ),null,(($msgtype === 'force_refresh') ? true : false)); + ), null, (($msgtype === 'force_refresh') ? true : false)); } $ret['success'] = true; json_return_and_die($ret); } - if($msgtype === 'notify') { + if ($msgtype === 'notify') { $async = get_config('system','queued_fetch'); - if($async) { + if ($async) { // add to receive queue // qreceive_add($data); - } - else { + } else { $x = zot_fetch($data); $ret['delivery_report'] = $x; } $ret['success'] = true; json_return_and_die($ret); - } - // catchall json_return_and_die($ret); - - } - diff --git a/mod/randprof.php b/mod/randprof.php index bddb3251a..9817685c8 100644 --- a/mod/randprof.php +++ b/mod/randprof.php @@ -6,6 +6,7 @@ function randprof_init(&$a) { $x = random_profile(); if($x) goaway(chanlink_url($x)); - // FIXME this doesn't work at the moment as a fallback + + /** FIXME this doesn't work at the moment as a fallback */ goaway($a->get_baseurl() . '/profile'); } diff --git a/mod/regdir.php b/mod/regdir.php index 5331c1dd4..025be220b 100644 --- a/mod/regdir.php +++ b/mod/regdir.php @@ -1,18 +1,17 @@ <?php - /** - * With args, register a directory server for this realm - * With no args, return a JSON array of directory servers for this realm - - * FIXME: Not yet implemented: Some realms may require authentication to join their realm. - * The RED_GLOBAL realm does not require authentication. + * With args, register a directory server for this realm. + * With no args, return a JSON array of directory servers for this realm. + * + * @FIXME Not yet implemented: Some realms may require authentication to join their realm. + * The RED_GLOBAL realm does not require authentication. * We would then need a flag in the site table to indicate that they've been * validated by the PRIMARY directory for that realm. Sites claiming to be PRIMARY - * but are not the realm PRIMARY will be marked invalid. + * but are not the realm PRIMARY will be marked invalid. + * + * @param App &$a */ - - function regdir_init(&$a) { $result = array('success' => false); @@ -31,8 +30,7 @@ function regdir_init(&$a) { if($realm === DIRECTORY_REALM) { $valid = 1; - } - else { + } else { $token = get_config('system','realm_token'); if($token && $access_token != $token) { $result['message'] = 'This realm requires an access token'; @@ -40,19 +38,19 @@ function regdir_init(&$a) { } $valid = 1; } - + $dirmode = intval(get_config('system','directory_mode')); - if($dirmode == DIRECTORY_MODE_NORMAL) { + if ($dirmode == DIRECTORY_MODE_NORMAL) { $ret['message'] = t('This site is not a directory server'); json_return_and_die($ret); } $m = null; - if($url) { + if ($url) { $m = parse_url($url); - if((! $m) || (! @dns_get_record($m['host'], DNS_A + DNS_CNAME + DNS_PTR)) || (! filter_var($m['host'], FILTER_VALIDATE_IP) )) { + if ((! $m) || (! @dns_get_record($m['host'], DNS_A + DNS_CNAME + DNS_PTR)) || (! filter_var($m['host'], FILTER_VALIDATE_IP) )) { $result['message'] = 'unparseable url'; json_return_and_die($result); } @@ -75,31 +73,28 @@ function regdir_init(&$a) { ); json_return_and_die($result); - } - else { + } else { // We can put this in the sql without the condition after 31 april 2015 assuming // most directory servers will have updated by then // This just makes sure it happens if I forget $sql_extra = ((datetime_convert() > datetime_convert('UTC','UTC','2015-04-31')) ? ' and site_valid = 1 ' : '' ); - if($dirmode == DIRECTORY_MODE_STANDALONE) { + if ($dirmode == DIRECTORY_MODE_STANDALONE) { $r = array(array('site_url' => z_root())); - } - else { + } else { $r = q("select site_url from site where site_flags in ( 1, 2 ) and site_realm = '%s' $sql_extra ", dbesc(get_directory_realm()) ); } - if($r) { + if ($r) { $result['success'] = true; $result['directories'] = array(); - foreach($r as $rr) + foreach ($r as $rr) $result['directories'][] = $rr['site_url']; + json_return_and_die($result); } } json_return_and_die($result); - - -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/mod/share.php b/mod/share.php index 923971694..d5a389bdf 100644 --- a/mod/share.php +++ b/mod/share.php @@ -13,7 +13,6 @@ function share_init(&$a) { if(! (local_channel() || remote_channel())) killme(); - $r = q("SELECT * from item left join xchan on author_xchan = xchan_hash WHERE id = %d LIMIT 1", intval($post_id) ); @@ -30,13 +29,12 @@ function share_init(&$a) { if(! $r) killme(); - // FIXME - we only share bbcode + /** @FIXME we only share bbcode */ if($r[0]['mimetype'] !== 'text/bbcode') killme(); - // FIXME - eventually we want to post remotely via rpost - // on your home site. + /** @FIXME eventually we want to post remotely via rpost on your home site */ // When that works remove this next bit: if(! local_channel()) @@ -64,20 +62,20 @@ function share_init(&$a) { echo $o; killme(); } - + $observer = $a->get_observer(); $parsed = $observer['xchan_url']; if($parsed) { $post_url = $parsed['scheme'] . ':' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost'; - // FIXME - we were probably called from JS - // so we don't know the return page. - // in fact we won't be able to load the remote page. - // we might need an iframe + + /** + * @FIXME we were probably called from JS so we don't know the return page. + * In fact we won't be able to load the remote page. + * we might need an iframe + */ $x = z_post_url($post_url, array('f' => '', 'body' => $o )); killme(); } - - } diff --git a/mod/sharedwithme.php b/mod/sharedwithme.php index b77c9dad1..bee072ea7 100644 --- a/mod/sharedwithme.php +++ b/mod/sharedwithme.php @@ -42,7 +42,7 @@ function sharedwithme_content(&$a) { } //list files - $r = q("SELECT * FROM item WHERE verb = '%s' AND obj_type = '%s' AND uid = %d AND owner_xchan != '%s'", + $r = q("SELECT id, uid, object, item_unseen FROM item WHERE verb = '%s' AND obj_type = '%s' AND uid = %d AND owner_xchan != '%s'", dbesc(ACTIVITY_POST), dbesc(ACTIVITY_OBJ_FILE), intval(local_channel()), @@ -50,8 +50,10 @@ function sharedwithme_content(&$a) { ); $items =array(); + $ids = ''; if($r) { + foreach($r as $rr) { $object = json_decode($rr['object'],true); @@ -63,10 +65,27 @@ function sharedwithme_content(&$a) { $item['objfilename'] = $object['filename']; $item['objfilesize'] = userReadableSize($object['filesize']); $item['objedited'] = $object['edited']; + $item['unseen'] = $rr['item_unseen']; $items[] = $item; + if($item['unseen'] > 0) { + $ids .= " '" . $rr['id'] . "',"; + } + } + + } + + if($ids) { + + //remove trailing , + $ids = rtrim($ids, ","); + + q("UPDATE item SET item_unseen = 0 WHERE id IN ( $ids ) AND uid = %d", + intval(local_channel()) + ); + } $o = profile_tabs($a, $is_owner, $channel['channel_address']); @@ -74,6 +93,7 @@ function sharedwithme_content(&$a) { $o .= replace_macros(get_markup_template('sharedwithme.tpl'), array( '$header' => t('Files: shared with me'), '$name' => t('Name'), + '$label_new' => t('NEW'), '$size' => t('Size'), '$lastmod' => t('Last Modified'), '$dropall' => t('Remove all files'), diff --git a/mod/siteinfo.php b/mod/siteinfo.php index 2ad9f7cde..ab6891e25 100644 --- a/mod/siteinfo.php +++ b/mod/siteinfo.php @@ -72,6 +72,8 @@ function siteinfo_init(&$a) { $channels_active_monthly_stat = intval(get_config('system','channels_active_monthly_stat')); $local_posts_stat = intval(get_config('system','local_posts_stat')); $hide_in_statistics = intval(get_config('system','hide_in_statistics')); + $site_expire = intval(get_config('system', 'default_expire_days')); + $data = Array( 'version' => $version, @@ -84,6 +86,7 @@ function siteinfo_init(&$a) { 'language' => get_config('system','language'), 'diaspora_emulation' => get_config('system','diaspora_enabled'), 'rss_connections' => get_config('system','feed_contacts'), + 'expiration' => $site_expire, 'default_service_restrictions' => $service_class, 'admin' => $admin, 'site_name' => (($site_name) ? $site_name : ''), @@ -150,7 +153,7 @@ function siteinfo_content(&$a) { $o = replace_macros(get_markup_template('siteinfo.tpl'), array( '$title' => t('Red'), - '$description' => t('This is a hub of the Red Matrix - a global cooperative network of decentralized privacy enhanced websites.'), + '$description' => t('This is a hub of redmatrix - a global cooperative network of decentralized privacy enhanced websites.'), '$version' => $version, '$tag_txt' => t('Tag: '), '$tag' => $tag, @@ -158,7 +161,7 @@ function siteinfo_content(&$a) { '$lastpoll' => get_poller_runtime(), '$commit' => $commit, '$web_location' => t('Running at web location') . ' ' . z_root(), - '$visit' => t('Please visit <a href="https://redmatrix.me">RedMatrix.me</a> to learn more about the Red Matrix.'), + '$visit' => t('Please visit <a href="https://redmatrix.me">redmatrix.me</a> to learn more about the Red Matrix.'), '$bug_text' => t('Bug reports and issues: please visit'), '$bug_link_url' => 'https://github.com/friendica/red/issues', '$bug_link_text' => 'redmatrix issues', diff --git a/mod/thing.php b/mod/thing.php index 4ec10f5a6..c6b70fbb4 100644 --- a/mod/thing.php +++ b/mod/thing.php @@ -1,4 +1,8 @@ -<?php /** @file */ +<?php +/** + * @file mod/thing.php + * @brief + */ require_once('include/items.php'); require_once('include/contact_selectors.php'); @@ -9,9 +13,6 @@ function thing_init(&$a) { if(! local_channel()) return; - - - $account_id = $a->get_account(); $channel = $a->get_channel(); @@ -26,19 +27,18 @@ function thing_init(&$a) { $hash = random_string(); - $verbs = obj_verbs(); - /** + /** * verbs: [0] = first person singular, e.g. "I want", [1] = 3rd person singular, e.g. "Bill wants" * We use the first person form when creating an activity, but the third person for use in activities - * FIXME: There is no accounting for verb gender for languages where this is significant. We may eventually + * @FIXME There is no accounting for verb gender for languages where this is significant. We may eventually * require obj_verbs() to provide full conjugations and specify which form to use in the $_REQUEST params to this module. */ $translated_verb = $verbs[$verb][1]; - /** + /* * The site administrator can do things that normals cannot. * This is restricted because it will likely cause * an activitystreams protocol violation and the activity might @@ -50,14 +50,14 @@ function thing_init(&$a) { if(! $translated_verb) { if(is_site_admin()) $translated_verb = $verb; - } - - /** + } + + /* * Things, objects: We do not provide definite (a, an) or indefinite (the) articles or singular/plural designators * That needs to be specified in your thing. e.g. Mike has "a carrot", Greg wants "balls", Bob likes "the Boston Red Sox". */ - /** + /* * Future work on this module might produce more complex activities with targets, e.g. Phillip likes Karen's moustache * and to describe other non-thing objects like channels, such as Karl wants Susan - where Susan represents a channel profile. */ @@ -65,8 +65,6 @@ function thing_init(&$a) { if((! $name) || (! $translated_verb)) return; - - if($term_hash) { $t = q("select * from obj left join term on obj_obj = term_hash where term_hash != '' and obj_type = %d and term_hash = '%s' limit 1", intval(TERM_OBJ_THING), @@ -115,7 +113,6 @@ function thing_init(&$a) { $local_photo_type = $arr[3]; } - $r = q("select * from term where uid = %d and otype = %d and type = %d and term = '%s' limit 1", intval(local_channel()), intval(TERM_OBJ_THING), @@ -159,14 +156,12 @@ function thing_init(&$a) { info( t('Thing added')); - if($activity) { $arr = array(); $links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $term['url'])); if($local_photo) $links[] = array('rel' => 'photo', 'type' => $local_photo_type, 'href' => $local_photo); - $objtype = ACTIVITY_OBJ_THING; $obj = json_encode(array( @@ -182,9 +177,8 @@ function thing_init(&$a) { $arr['owner_xchan'] = $channel['channel_hash']; $arr['author_xchan'] = $channel['channel_hash']; - $arr['item_flags'] = ITEM_ORIGIN|ITEM_WALL|ITEM_THREAD_TOP; - + $ulink = '[zrl=' . $channel['xchan_url'] . ']' . $channel['channel_name'] . '[/zrl]'; $plink = '[zrl=' . $term['url'] . ']' . $term['term'] . '[/zrl]'; @@ -212,14 +206,14 @@ function thing_init(&$a) { else $arr['allow_cid'] = '<' . get_observer_hash() . '>'; } - + $ret = post_activity_item($arr); } } function thing_content(&$a) { - + if(argc() == 2) { $r = q("select * from obj left join term on obj_obj = term_hash where term_hash != '' and obj_type = %d and term_hash = '%s' limit 1", @@ -249,12 +243,10 @@ function thing_content(&$a) { } $thing_hash = ''; - if(argc() == 3 && argv(1) === 'edit') { $thing_hash = argv(2); - $r = q("select * from obj left join term on obj_obj = term_hash where term_hash != '' and obj_type = %d and term_hash = '%s' limit 1", intval(TERM_OBJ_THING), dbesc($thing_hash) @@ -265,7 +257,6 @@ function thing_content(&$a) { return ''; } - $o .= replace_macros(get_markup_template('thing_edit.tpl'),array( '$thing_hdr' => t('Edit Thing'), '$multiprof' => feature_enabled(local_channel(),'multi_profiles'), @@ -300,7 +291,6 @@ function thing_content(&$a) { return ''; } - $x = q("delete from obj where obj_obj = '%s' and obj_type = %d and obj_channel = %d", dbesc($thing_hash), intval(TERM_OBJ_THING), @@ -310,6 +300,7 @@ function thing_content(&$a) { dbesc($thing_hash), intval(local_channel()) ); + return $o; } @@ -328,6 +319,4 @@ function thing_content(&$a) { )); return $o; - - } diff --git a/mod/zotfeed.php b/mod/zotfeed.php index 7bf91d4db..78a667330 100644 --- a/mod/zotfeed.php +++ b/mod/zotfeed.php @@ -9,7 +9,7 @@ function zotfeed_init(&$a) { $mindate = (($_REQUEST['mindate']) ? datetime_convert('UTC','UTC',$_REQUEST['mindate']) : ''); if(! $mindate) - $mindate = datetime_convert('UTC','UTC', 'now - 1 month'); + $mindate = datetime_convert('UTC','UTC', 'now - 4 days'); if(get_config('system','block_public') && (! get_account_id()) && (! remote_channel())) { $result['message'] = 'Public access denied'; @@ -21,7 +21,7 @@ function zotfeed_init(&$a) { $channel_address = ((argc() > 1) ? argv(1) : ''); if($channel_address) { - $r = q("select channel_id, channel_name from channel where channel_address = '%s' and not (channel_pageflags & %d)>0 limit 1", + $r = q("select channel_id, channel_name from channel where channel_address = '%s' and not (channel_pageflags & %d) > 0 limit 1", dbesc(argv(1)), intval(PAGE_REMOVED) ); @@ -30,6 +30,7 @@ function zotfeed_init(&$a) { $x = get_sys_channel(); if($x) $r = array($x); + $mindate = datetime_convert('UTC','UTC', 'now - 2 days'); } if(! $r) { $result['message'] = 'Channel not found.'; diff --git a/util/Doxyfile b/util/Doxyfile index 44fef3838..f700c2abe 100644 --- a/util/Doxyfile +++ b/util/Doxyfile @@ -1,4 +1,4 @@ -INPUT = index.php boot.php mod/ include/ setup/ util/ view/ +INPUT = README.md index.php boot.php mod/ include/ util/ view/ version.inc RECURSIVE = YES PROJECT_NAME = "The RedMatrix" PROJECT_LOGO = images/rm-64.png @@ -12,9 +12,12 @@ GENERATE_LATEX = NO EXTRACT_ALL = YES EXTRACT_PRIVATE = YES GENERATE_TODOLIST = YES -USE_MDFILE_AS_MAINPAGE = README +USE_MDFILE_AS_MAINPAGE = README.md REFERENCED_BY_RELATION = YES GENERATE_TREEVIEW = YES HTML_FOOTER = util/Doxygen.footer ALIASES += "license=@par License:\n" ALIASES += "fixme=\xrefitem fixme \"Fixme\" \"Fixme List\"" +ALIASES += "FIXME=\fixme" +ALIASES += "TODO=\todo" +ALIASES += "BUG=\bug" diff --git a/util/messages.po b/util/messages.po index 43c36f167..37e1520df 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 2015-03-20.977\n" +"Project-Id-Version: 2015-03-27.984\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-20 00:03-0700\n" +"POT-Creation-Date: 2015-03-27 00:03-0700\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" @@ -54,7 +54,7 @@ msgstr "" msgid "Default privacy group for new contacts" msgstr "" -#: ../../include/group.php:254 ../../mod/admin.php:821 +#: ../../include/group.php:254 ../../mod/admin.php:824 msgid "All Channels" msgstr "" @@ -125,7 +125,7 @@ msgstr "" msgid "$1 wrote:" msgstr "" -#: ../../include/identity.php:31 ../../mod/item.php:1078 +#: ../../include/identity.php:31 msgid "Unable to obtain identity information from database" msgstr "" @@ -154,16 +154,16 @@ msgid "" "Nickname has unsupported characters or is already being used on this site." msgstr "" -#: ../../include/identity.php:283 +#: ../../include/identity.php:281 msgid "Unable to retrieve created identity" msgstr "" -#: ../../include/identity.php:343 +#: ../../include/identity.php:341 msgid "Default Profile" msgstr "" -#: ../../include/identity.php:387 ../../include/identity.php:388 -#: ../../include/identity.php:395 ../../include/widgets.php:430 +#: ../../include/identity.php:385 ../../include/identity.php:386 +#: ../../include/identity.php:393 ../../include/widgets.php:430 #: ../../include/profile_selectors.php:80 ../../mod/settings.php:339 #: ../../mod/settings.php:343 ../../mod/settings.php:344 #: ../../mod/settings.php:347 ../../mod/settings.php:358 @@ -171,129 +171,129 @@ msgstr "" msgid "Friends" msgstr "" -#: ../../include/identity.php:643 +#: ../../include/identity.php:641 msgid "Requested channel is not available." msgstr "" -#: ../../include/identity.php:691 ../../mod/profile.php:16 +#: ../../include/identity.php:689 ../../mod/profile.php:16 #: ../../mod/achievements.php:11 ../../mod/blocks.php:29 #: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/editlayout.php:28 -#: ../../mod/editwebpage.php:28 ../../mod/filestorage.php:53 +#: ../../mod/editwebpage.php:28 ../../mod/filestorage.php:54 #: ../../mod/webpages.php:29 ../../mod/editblock.php:29 #: ../../mod/layouts.php:29 msgid "Requested profile is not available." msgstr "" -#: ../../include/identity.php:842 ../../include/widgets.php:136 -#: ../../include/widgets.php:175 ../../include/conversation.php:940 +#: ../../include/identity.php:840 ../../include/widgets.php:136 +#: ../../include/widgets.php:175 ../../include/conversation.php:945 #: ../../include/Contact.php:107 ../../mod/match.php:62 #: ../../mod/directory.php:291 ../../mod/suggest.php:51 msgid "Connect" msgstr "" -#: ../../include/identity.php:856 ../../mod/profiles.php:774 +#: ../../include/identity.php:854 ../../mod/profiles.php:774 msgid "Change profile photo" msgstr "" -#: ../../include/identity.php:863 +#: ../../include/identity.php:861 msgid "Profiles" msgstr "" -#: ../../include/identity.php:863 +#: ../../include/identity.php:861 msgid "Manage/edit profiles" msgstr "" -#: ../../include/identity.php:864 ../../mod/profiles.php:775 +#: ../../include/identity.php:862 ../../mod/profiles.php:775 msgid "Create New Profile" msgstr "" -#: ../../include/identity.php:867 ../../include/nav.php:95 +#: ../../include/identity.php:865 ../../include/nav.php:95 msgid "Edit Profile" msgstr "" -#: ../../include/identity.php:880 ../../mod/profiles.php:786 +#: ../../include/identity.php:878 ../../mod/profiles.php:786 msgid "Profile Image" msgstr "" -#: ../../include/identity.php:883 +#: ../../include/identity.php:881 msgid "visible to everybody" msgstr "" -#: ../../include/identity.php:884 ../../mod/profiles.php:669 +#: ../../include/identity.php:882 ../../mod/profiles.php:669 #: ../../mod/profiles.php:790 msgid "Edit visibility" msgstr "" -#: ../../include/identity.php:896 ../../include/bb2diaspora.php:450 -#: ../../include/event.php:40 ../../mod/events.php:645 +#: ../../include/identity.php:894 ../../include/bb2diaspora.php:473 +#: ../../include/event.php:40 ../../mod/events.php:647 #: ../../mod/directory.php:223 msgid "Location:" msgstr "" -#: ../../include/identity.php:900 ../../include/identity.php:1142 +#: ../../include/identity.php:898 ../../include/identity.php:1140 msgid "Gender:" msgstr "" -#: ../../include/identity.php:901 ../../include/identity.php:1186 +#: ../../include/identity.php:899 ../../include/identity.php:1184 msgid "Status:" msgstr "" -#: ../../include/identity.php:902 ../../include/identity.php:1197 +#: ../../include/identity.php:900 ../../include/identity.php:1195 msgid "Homepage:" msgstr "" -#: ../../include/identity.php:903 +#: ../../include/identity.php:901 msgid "Online Now" msgstr "" -#: ../../include/identity.php:986 ../../include/identity.php:1066 +#: ../../include/identity.php:984 ../../include/identity.php:1064 #: ../../mod/ping.php:324 msgid "g A l F d" msgstr "" -#: ../../include/identity.php:987 ../../include/identity.php:1067 +#: ../../include/identity.php:985 ../../include/identity.php:1065 msgid "F d" msgstr "" -#: ../../include/identity.php:1032 ../../include/identity.php:1107 +#: ../../include/identity.php:1030 ../../include/identity.php:1105 #: ../../mod/ping.php:346 msgid "[today]" msgstr "" -#: ../../include/identity.php:1044 +#: ../../include/identity.php:1042 msgid "Birthday Reminders" msgstr "" -#: ../../include/identity.php:1045 +#: ../../include/identity.php:1043 msgid "Birthdays this week:" msgstr "" -#: ../../include/identity.php:1100 +#: ../../include/identity.php:1098 msgid "[No description]" msgstr "" -#: ../../include/identity.php:1118 +#: ../../include/identity.php:1116 msgid "Event Reminders" msgstr "" -#: ../../include/identity.php:1119 +#: ../../include/identity.php:1117 msgid "Events this week:" msgstr "" -#: ../../include/identity.php:1132 ../../include/identity.php:1249 +#: ../../include/identity.php:1130 ../../include/identity.php:1247 #: ../../include/apps.php:138 ../../mod/profperm.php:112 msgid "Profile" msgstr "" -#: ../../include/identity.php:1140 ../../mod/settings.php:1045 +#: ../../include/identity.php:1138 ../../mod/settings.php:1045 msgid "Full Name:" msgstr "" -#: ../../include/identity.php:1147 +#: ../../include/identity.php:1145 msgid "Like this channel" msgstr "" -#: ../../include/identity.php:1158 ../../include/conversation.php:1692 +#: ../../include/identity.php:1156 ../../include/conversation.php:1698 #: ../../include/ItemObject.php:179 ../../include/taxonomy.php:391 #: ../../mod/photos.php:1007 msgctxt "noun" @@ -302,100 +302,100 @@ msgid_plural "Likes" msgstr[0] "" msgstr[1] "" -#: ../../include/identity.php:1171 +#: ../../include/identity.php:1169 msgid "j F, Y" msgstr "" -#: ../../include/identity.php:1172 +#: ../../include/identity.php:1170 msgid "j F" msgstr "" -#: ../../include/identity.php:1179 +#: ../../include/identity.php:1177 msgid "Birthday:" msgstr "" -#: ../../include/identity.php:1183 +#: ../../include/identity.php:1181 msgid "Age:" msgstr "" -#: ../../include/identity.php:1192 +#: ../../include/identity.php:1190 #, php-format msgid "for %1$d %2$s" msgstr "" -#: ../../include/identity.php:1195 ../../mod/profiles.php:691 +#: ../../include/identity.php:1193 ../../mod/profiles.php:691 msgid "Sexual Preference:" msgstr "" -#: ../../include/identity.php:1199 ../../mod/profiles.php:693 +#: ../../include/identity.php:1197 ../../mod/profiles.php:693 msgid "Hometown:" msgstr "" -#: ../../include/identity.php:1201 +#: ../../include/identity.php:1199 msgid "Tags:" msgstr "" -#: ../../include/identity.php:1203 ../../mod/profiles.php:694 +#: ../../include/identity.php:1201 ../../mod/profiles.php:694 msgid "Political Views:" msgstr "" -#: ../../include/identity.php:1205 +#: ../../include/identity.php:1203 msgid "Religion:" msgstr "" -#: ../../include/identity.php:1207 +#: ../../include/identity.php:1205 msgid "About:" msgstr "" -#: ../../include/identity.php:1209 +#: ../../include/identity.php:1207 msgid "Hobbies/Interests:" msgstr "" -#: ../../include/identity.php:1211 ../../mod/profiles.php:697 +#: ../../include/identity.php:1209 ../../mod/profiles.php:697 msgid "Likes:" msgstr "" -#: ../../include/identity.php:1213 ../../mod/profiles.php:698 +#: ../../include/identity.php:1211 ../../mod/profiles.php:698 msgid "Dislikes:" msgstr "" -#: ../../include/identity.php:1215 +#: ../../include/identity.php:1213 msgid "Contact information and Social Networks:" msgstr "" -#: ../../include/identity.php:1217 +#: ../../include/identity.php:1215 msgid "My other channels:" msgstr "" -#: ../../include/identity.php:1219 +#: ../../include/identity.php:1217 msgid "Musical interests:" msgstr "" -#: ../../include/identity.php:1221 +#: ../../include/identity.php:1219 msgid "Books, literature:" msgstr "" -#: ../../include/identity.php:1223 +#: ../../include/identity.php:1221 msgid "Television:" msgstr "" -#: ../../include/identity.php:1225 +#: ../../include/identity.php:1223 msgid "Film/dance/culture/entertainment:" msgstr "" -#: ../../include/identity.php:1227 +#: ../../include/identity.php:1225 msgid "Love/Romance:" msgstr "" -#: ../../include/identity.php:1229 +#: ../../include/identity.php:1227 msgid "Work/employment:" msgstr "" -#: ../../include/identity.php:1231 +#: ../../include/identity.php:1229 msgid "School/education:" msgstr "" -#: ../../include/identity.php:1251 +#: ../../include/identity.php:1249 msgid "Like this thing" msgstr "" @@ -420,8 +420,8 @@ msgstr "" msgid "View" msgstr "" -#: ../../include/page_widgets.php:40 ../../include/conversation.php:1152 -#: ../../include/ItemObject.php:677 ../../mod/events.php:651 +#: ../../include/page_widgets.php:40 ../../include/conversation.php:1155 +#: ../../include/ItemObject.php:677 ../../mod/events.php:653 #: ../../mod/webpages.php:166 ../../mod/photos.php:970 msgid "Preview" msgstr "" @@ -460,7 +460,7 @@ msgstr "" msgid "System" msgstr "" -#: ../../include/widgets.php:94 ../../include/conversation.php:1498 +#: ../../include/widgets.php:94 ../../include/conversation.php:1501 msgid "Personal" msgstr "" @@ -507,7 +507,7 @@ msgstr "" #: ../../include/widgets.php:192 ../../include/text.php:833 #: ../../include/text.php:845 ../../mod/rbmark.php:28 ../../mod/rbmark.php:98 -#: ../../mod/filer.php:50 ../../mod/admin.php:1412 ../../mod/admin.php:1432 +#: ../../mod/filer.php:50 ../../mod/admin.php:1415 ../../mod/admin.php:1435 msgid "Save" msgstr "" @@ -603,8 +603,8 @@ msgid "Channel Sources" msgstr "" #: ../../include/widgets.php:537 ../../include/nav.php:208 -#: ../../include/apps.php:134 ../../mod/admin.php:1035 -#: ../../mod/admin.php:1235 +#: ../../include/apps.php:134 ../../mod/admin.php:1038 +#: ../../mod/admin.php:1238 msgid "Settings" msgstr "" @@ -650,14 +650,14 @@ msgid "Public Hubs" msgstr "" #: ../../include/conversation.php:120 ../../include/text.php:1747 -#: ../../include/diaspora.php:2030 ../../mod/like.php:335 +#: ../../include/diaspora.php:2030 ../../mod/like.php:346 #: ../../mod/subthread.php:72 ../../mod/subthread.php:174 #: ../../mod/tagger.php:43 msgid "photo" msgstr "" #: ../../include/conversation.php:123 ../../include/text.php:1750 -#: ../../mod/like.php:337 ../../mod/tagger.php:47 +#: ../../mod/like.php:348 ../../mod/tagger.php:47 msgid "event" msgstr "" @@ -666,7 +666,7 @@ msgid "channel" msgstr "" #: ../../include/conversation.php:148 ../../include/text.php:1753 -#: ../../include/diaspora.php:2030 ../../mod/like.php:335 +#: ../../include/diaspora.php:2030 ../../mod/like.php:346 #: ../../mod/subthread.php:72 ../../mod/subthread.php:174 #: ../../mod/tagger.php:51 msgid "status" @@ -678,12 +678,12 @@ msgid "comment" msgstr "" #: ../../include/conversation.php:164 ../../include/diaspora.php:2059 -#: ../../mod/like.php:383 +#: ../../mod/like.php:394 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" -#: ../../include/conversation.php:167 ../../mod/like.php:385 +#: ../../include/conversation.php:167 ../../mod/like.php:396 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "" @@ -702,109 +702,109 @@ msgstr "" msgid "poked" msgstr "" -#: ../../include/conversation.php:261 ../../mod/mood.php:63 +#: ../../include/conversation.php:260 ../../mod/mood.php:63 #, php-format msgctxt "mood" msgid "%1$s is %2$s" msgstr "" -#: ../../include/conversation.php:556 ../../mod/photos.php:984 +#: ../../include/conversation.php:572 ../../mod/photos.php:984 msgctxt "title" msgid "Likes" msgstr "" -#: ../../include/conversation.php:556 ../../mod/photos.php:984 +#: ../../include/conversation.php:572 ../../mod/photos.php:984 msgctxt "title" msgid "Dislikes" msgstr "" -#: ../../include/conversation.php:557 ../../mod/photos.php:985 +#: ../../include/conversation.php:573 ../../mod/photos.php:985 msgctxt "title" msgid "Agree" msgstr "" -#: ../../include/conversation.php:557 ../../mod/photos.php:985 +#: ../../include/conversation.php:573 ../../mod/photos.php:985 msgctxt "title" msgid "Disagree" msgstr "" -#: ../../include/conversation.php:557 ../../mod/photos.php:985 +#: ../../include/conversation.php:573 ../../mod/photos.php:985 msgctxt "title" msgid "Abstain" msgstr "" -#: ../../include/conversation.php:558 ../../mod/photos.php:986 +#: ../../include/conversation.php:574 ../../mod/photos.php:986 msgctxt "title" msgid "Attending" msgstr "" -#: ../../include/conversation.php:558 ../../mod/photos.php:986 +#: ../../include/conversation.php:574 ../../mod/photos.php:986 msgctxt "title" msgid "Not attending" msgstr "" -#: ../../include/conversation.php:558 ../../mod/photos.php:986 +#: ../../include/conversation.php:574 ../../mod/photos.php:986 msgctxt "title" msgid "Might attend" msgstr "" -#: ../../include/conversation.php:644 ../../include/ItemObject.php:126 +#: ../../include/conversation.php:659 ../../include/ItemObject.php:126 msgid "Select" msgstr "" -#: ../../include/conversation.php:645 ../../include/RedDAV/RedBrowser.php:268 +#: ../../include/conversation.php:660 ../../include/RedDAV/RedBrowser.php:268 #: ../../include/ItemObject.php:120 ../../include/apps.php:255 #: ../../mod/settings.php:645 ../../mod/connedit.php:533 -#: ../../mod/group.php:176 ../../mod/thing.php:234 ../../mod/admin.php:816 -#: ../../mod/admin.php:945 ../../mod/photos.php:1050 +#: ../../mod/group.php:176 ../../mod/thing.php:234 ../../mod/admin.php:819 +#: ../../mod/admin.php:948 ../../mod/photos.php:1050 msgid "Delete" msgstr "" -#: ../../include/conversation.php:652 ../../include/ItemObject.php:89 +#: ../../include/conversation.php:667 ../../include/ItemObject.php:89 msgid "Private Message" msgstr "" -#: ../../include/conversation.php:659 ../../include/ItemObject.php:227 +#: ../../include/conversation.php:674 ../../include/ItemObject.php:227 msgid "Message signature validated" msgstr "" -#: ../../include/conversation.php:660 ../../include/ItemObject.php:228 +#: ../../include/conversation.php:675 ../../include/ItemObject.php:228 msgid "Message signature incorrect" msgstr "" -#: ../../include/conversation.php:680 +#: ../../include/conversation.php:692 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: ../../include/conversation.php:695 +#: ../../include/conversation.php:707 msgid "Categories:" msgstr "" -#: ../../include/conversation.php:696 +#: ../../include/conversation.php:708 msgid "Filed under:" msgstr "" -#: ../../include/conversation.php:704 ../../include/ItemObject.php:312 +#: ../../include/conversation.php:716 ../../include/ItemObject.php:312 #, php-format msgid " from %s" msgstr "" -#: ../../include/conversation.php:707 ../../include/ItemObject.php:315 +#: ../../include/conversation.php:719 ../../include/ItemObject.php:315 #, php-format msgid "last edited: %s" msgstr "" -#: ../../include/conversation.php:708 ../../include/ItemObject.php:316 +#: ../../include/conversation.php:720 ../../include/ItemObject.php:316 #, php-format msgid "Expires: %s" msgstr "" -#: ../../include/conversation.php:723 +#: ../../include/conversation.php:735 msgid "View in context" msgstr "" -#: ../../include/conversation.php:725 ../../include/conversation.php:1203 +#: ../../include/conversation.php:737 ../../include/conversation.php:1208 #: ../../include/ItemObject.php:364 ../../mod/editlayout.php:153 #: ../../mod/editwebpage.php:188 ../../mod/editpost.php:130 #: ../../mod/editblock.php:157 ../../mod/photos.php:950 ../../mod/mail.php:241 @@ -812,52 +812,52 @@ msgstr "" msgid "Please wait" msgstr "" -#: ../../include/conversation.php:838 +#: ../../include/conversation.php:846 msgid "remove" msgstr "" -#: ../../include/conversation.php:842 ../../include/nav.php:247 +#: ../../include/conversation.php:850 ../../include/nav.php:247 msgid "Loading..." msgstr "" -#: ../../include/conversation.php:843 +#: ../../include/conversation.php:851 msgid "Delete Selected Items" msgstr "" -#: ../../include/conversation.php:934 +#: ../../include/conversation.php:939 msgid "View Source" msgstr "" -#: ../../include/conversation.php:935 +#: ../../include/conversation.php:940 msgid "Follow Thread" msgstr "" -#: ../../include/conversation.php:936 +#: ../../include/conversation.php:941 msgid "View Status" msgstr "" -#: ../../include/conversation.php:937 ../../include/nav.php:91 +#: ../../include/conversation.php:942 ../../include/nav.php:91 #: ../../mod/connedit.php:484 ../../mod/connedit.php:634 msgid "View Profile" msgstr "" -#: ../../include/conversation.php:938 +#: ../../include/conversation.php:943 msgid "View Photos" msgstr "" -#: ../../include/conversation.php:939 +#: ../../include/conversation.php:944 msgid "Matrix Activity" msgstr "" -#: ../../include/conversation.php:941 +#: ../../include/conversation.php:946 msgid "Edit Contact" msgstr "" -#: ../../include/conversation.php:942 +#: ../../include/conversation.php:947 msgid "Send PM" msgstr "" -#: ../../include/conversation.php:943 ../../include/apps.php:145 +#: ../../include/conversation.php:948 ../../include/apps.php:145 msgid "Poke" msgstr "" @@ -868,373 +868,373 @@ msgstr "" msgid "Unknown" msgstr "" -#: ../../include/conversation.php:1061 +#: ../../include/conversation.php:1063 #, php-format msgid "%s likes this." msgstr "" -#: ../../include/conversation.php:1061 +#: ../../include/conversation.php:1063 #, php-format msgid "%s doesn't like this." msgstr "" -#: ../../include/conversation.php:1065 +#: ../../include/conversation.php:1067 #, php-format msgid "<span %1$s>%2$d people</span> like this." msgid_plural "<span %1$s>%2$d people</span> like this." msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1067 +#: ../../include/conversation.php:1069 #, php-format msgid "<span %1$s>%2$d people</span> don't like this." msgid_plural "<span %1$s>%2$d people</span> don't like this." msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1073 +#: ../../include/conversation.php:1075 msgid "and" msgstr "" -#: ../../include/conversation.php:1076 +#: ../../include/conversation.php:1078 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1077 +#: ../../include/conversation.php:1079 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:1077 +#: ../../include/conversation.php:1079 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:1136 +#: ../../include/conversation.php:1139 msgid "Visible to <strong>everybody</strong>" msgstr "" -#: ../../include/conversation.php:1137 ../../mod/mail.php:174 +#: ../../include/conversation.php:1140 ../../mod/mail.php:174 #: ../../mod/mail.php:289 msgid "Please enter a link URL:" msgstr "" -#: ../../include/conversation.php:1138 +#: ../../include/conversation.php:1141 msgid "Please enter a video link/URL:" msgstr "" -#: ../../include/conversation.php:1139 +#: ../../include/conversation.php:1142 msgid "Please enter an audio link/URL:" msgstr "" -#: ../../include/conversation.php:1140 +#: ../../include/conversation.php:1143 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:1141 ../../mod/filer.php:49 +#: ../../include/conversation.php:1144 ../../mod/filer.php:49 msgid "Save to Folder:" msgstr "" -#: ../../include/conversation.php:1142 +#: ../../include/conversation.php:1145 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:1143 ../../mod/editpost.php:52 +#: ../../include/conversation.php:1146 ../../mod/editpost.php:52 #: ../../mod/mail.php:175 ../../mod/mail.php:290 msgid "Expires YYYY-MM-DD HH:MM" msgstr "" -#: ../../include/conversation.php:1169 ../../mod/editlayout.php:198 +#: ../../include/conversation.php:1174 ../../mod/editlayout.php:198 #: ../../mod/editwebpage.php:235 ../../mod/editblock.php:203 #: ../../mod/photos.php:949 ../../mod/layouts.php:168 msgid "Share" msgstr "" -#: ../../include/conversation.php:1171 ../../mod/editwebpage.php:170 +#: ../../include/conversation.php:1176 ../../mod/editwebpage.php:170 msgid "Page link title" msgstr "" -#: ../../include/conversation.php:1174 +#: ../../include/conversation.php:1179 msgid "Post as" msgstr "" -#: ../../include/conversation.php:1176 ../../include/ItemObject.php:669 +#: ../../include/conversation.php:1181 ../../include/ItemObject.php:669 #: ../../mod/editlayout.php:140 ../../mod/editwebpage.php:175 #: ../../mod/editpost.php:114 ../../mod/editblock.php:144 msgid "Bold" msgstr "" -#: ../../include/conversation.php:1177 ../../include/ItemObject.php:670 +#: ../../include/conversation.php:1182 ../../include/ItemObject.php:670 #: ../../mod/editlayout.php:141 ../../mod/editwebpage.php:176 #: ../../mod/editpost.php:115 ../../mod/editblock.php:145 msgid "Italic" msgstr "" -#: ../../include/conversation.php:1178 ../../include/ItemObject.php:671 +#: ../../include/conversation.php:1183 ../../include/ItemObject.php:671 #: ../../mod/editlayout.php:142 ../../mod/editwebpage.php:177 #: ../../mod/editpost.php:116 ../../mod/editblock.php:146 msgid "Underline" msgstr "" -#: ../../include/conversation.php:1179 ../../include/ItemObject.php:672 +#: ../../include/conversation.php:1184 ../../include/ItemObject.php:672 #: ../../mod/editlayout.php:143 ../../mod/editwebpage.php:178 #: ../../mod/editpost.php:117 ../../mod/editblock.php:147 msgid "Quote" msgstr "" -#: ../../include/conversation.php:1180 ../../include/ItemObject.php:673 +#: ../../include/conversation.php:1185 ../../include/ItemObject.php:673 #: ../../mod/editlayout.php:144 ../../mod/editwebpage.php:179 #: ../../mod/editpost.php:118 ../../mod/editblock.php:148 msgid "Code" msgstr "" -#: ../../include/conversation.php:1181 ../../mod/editlayout.php:145 +#: ../../include/conversation.php:1186 ../../mod/editlayout.php:145 #: ../../mod/editwebpage.php:180 ../../mod/editpost.php:119 #: ../../mod/editblock.php:149 ../../mod/mail.php:238 ../../mod/mail.php:352 msgid "Upload photo" msgstr "" -#: ../../include/conversation.php:1182 +#: ../../include/conversation.php:1187 msgid "upload photo" msgstr "" -#: ../../include/conversation.php:1183 ../../mod/editlayout.php:146 +#: ../../include/conversation.php:1188 ../../mod/editlayout.php:146 #: ../../mod/editwebpage.php:181 ../../mod/editpost.php:120 #: ../../mod/editblock.php:150 ../../mod/mail.php:239 ../../mod/mail.php:353 msgid "Attach file" msgstr "" -#: ../../include/conversation.php:1184 +#: ../../include/conversation.php:1189 msgid "attach file" msgstr "" -#: ../../include/conversation.php:1185 ../../mod/editlayout.php:147 +#: ../../include/conversation.php:1190 ../../mod/editlayout.php:147 #: ../../mod/editwebpage.php:182 ../../mod/editpost.php:121 #: ../../mod/editblock.php:151 ../../mod/mail.php:240 ../../mod/mail.php:354 msgid "Insert web link" msgstr "" -#: ../../include/conversation.php:1186 +#: ../../include/conversation.php:1191 msgid "web link" msgstr "" -#: ../../include/conversation.php:1187 +#: ../../include/conversation.php:1192 msgid "Insert video link" msgstr "" -#: ../../include/conversation.php:1188 +#: ../../include/conversation.php:1193 msgid "video link" msgstr "" -#: ../../include/conversation.php:1189 +#: ../../include/conversation.php:1194 msgid "Insert audio link" msgstr "" -#: ../../include/conversation.php:1190 +#: ../../include/conversation.php:1195 msgid "audio link" msgstr "" -#: ../../include/conversation.php:1191 ../../mod/editlayout.php:151 +#: ../../include/conversation.php:1196 ../../mod/editlayout.php:151 #: ../../mod/editwebpage.php:186 ../../mod/editpost.php:125 #: ../../mod/editblock.php:155 msgid "Set your location" msgstr "" -#: ../../include/conversation.php:1192 +#: ../../include/conversation.php:1197 msgid "set location" msgstr "" -#: ../../include/conversation.php:1193 ../../mod/editpost.php:127 +#: ../../include/conversation.php:1198 ../../mod/editpost.php:127 msgid "Toggle voting" msgstr "" -#: ../../include/conversation.php:1196 ../../mod/editlayout.php:152 +#: ../../include/conversation.php:1201 ../../mod/editlayout.php:152 #: ../../mod/editwebpage.php:187 ../../mod/editpost.php:126 #: ../../mod/editblock.php:156 msgid "Clear browser location" msgstr "" -#: ../../include/conversation.php:1197 +#: ../../include/conversation.php:1202 msgid "clear location" msgstr "" -#: ../../include/conversation.php:1199 ../../mod/editlayout.php:164 +#: ../../include/conversation.php:1204 ../../mod/editlayout.php:164 #: ../../mod/editwebpage.php:203 ../../mod/editpost.php:141 #: ../../mod/editblock.php:169 msgid "Title (optional)" msgstr "" -#: ../../include/conversation.php:1202 ../../mod/editlayout.php:167 +#: ../../include/conversation.php:1207 ../../mod/editlayout.php:167 #: ../../mod/editwebpage.php:205 ../../mod/editpost.php:143 #: ../../mod/editblock.php:172 msgid "Categories (optional, comma-separated list)" msgstr "" -#: ../../include/conversation.php:1204 ../../mod/editlayout.php:154 +#: ../../include/conversation.php:1209 ../../mod/editlayout.php:154 #: ../../mod/editwebpage.php:189 ../../mod/editpost.php:131 #: ../../mod/editblock.php:158 msgid "Permission settings" msgstr "" -#: ../../include/conversation.php:1205 +#: ../../include/conversation.php:1210 msgid "permissions" msgstr "" -#: ../../include/conversation.php:1212 ../../mod/editlayout.php:161 +#: ../../include/conversation.php:1217 ../../mod/editlayout.php:161 #: ../../mod/editwebpage.php:198 ../../mod/editpost.php:138 #: ../../mod/editblock.php:166 msgid "Public post" msgstr "" -#: ../../include/conversation.php:1214 ../../mod/editlayout.php:168 +#: ../../include/conversation.php:1219 ../../mod/editlayout.php:168 #: ../../mod/editwebpage.php:206 ../../mod/editpost.php:144 #: ../../mod/editblock.php:173 msgid "Example: bob@example.com, mary@example.com" msgstr "" -#: ../../include/conversation.php:1227 ../../mod/editlayout.php:178 +#: ../../include/conversation.php:1232 ../../mod/editlayout.php:178 #: ../../mod/editwebpage.php:215 ../../mod/editpost.php:155 #: ../../mod/editblock.php:183 ../../mod/mail.php:245 ../../mod/mail.php:359 msgid "Set expiration date" msgstr "" -#: ../../include/conversation.php:1229 ../../include/ItemObject.php:680 +#: ../../include/conversation.php:1234 ../../include/ItemObject.php:680 #: ../../mod/editpost.php:157 ../../mod/mail.php:247 ../../mod/mail.php:361 msgid "Encrypt text" msgstr "" -#: ../../include/conversation.php:1231 ../../mod/events.php:635 +#: ../../include/conversation.php:1236 ../../mod/events.php:637 #: ../../mod/editpost.php:159 msgid "OK" msgstr "" -#: ../../include/conversation.php:1232 ../../mod/settings.php:583 +#: ../../include/conversation.php:1237 ../../mod/settings.php:583 #: ../../mod/settings.php:609 ../../mod/tagrm.php:11 ../../mod/tagrm.php:134 -#: ../../mod/events.php:634 ../../mod/fbrowser.php:82 +#: ../../mod/events.php:636 ../../mod/fbrowser.php:82 #: ../../mod/fbrowser.php:117 ../../mod/editpost.php:160 msgid "Cancel" msgstr "" -#: ../../include/conversation.php:1475 +#: ../../include/conversation.php:1478 msgid "Discover" msgstr "" -#: ../../include/conversation.php:1478 +#: ../../include/conversation.php:1481 msgid "Imported public streams" msgstr "" -#: ../../include/conversation.php:1483 +#: ../../include/conversation.php:1486 msgid "Commented Order" msgstr "" -#: ../../include/conversation.php:1486 +#: ../../include/conversation.php:1489 msgid "Sort by Comment Date" msgstr "" -#: ../../include/conversation.php:1490 +#: ../../include/conversation.php:1493 msgid "Posted Order" msgstr "" -#: ../../include/conversation.php:1493 +#: ../../include/conversation.php:1496 msgid "Sort by Post Date" msgstr "" -#: ../../include/conversation.php:1501 +#: ../../include/conversation.php:1504 msgid "Posts that mention or involve you" msgstr "" -#: ../../include/conversation.php:1507 ../../mod/connections.php:212 +#: ../../include/conversation.php:1510 ../../mod/connections.php:212 #: ../../mod/connections.php:225 ../../mod/menu.php:80 msgid "New" msgstr "" -#: ../../include/conversation.php:1510 +#: ../../include/conversation.php:1513 msgid "Activity Stream - by date" msgstr "" -#: ../../include/conversation.php:1516 +#: ../../include/conversation.php:1519 msgid "Starred" msgstr "" -#: ../../include/conversation.php:1519 +#: ../../include/conversation.php:1522 msgid "Favourite Posts" msgstr "" -#: ../../include/conversation.php:1526 +#: ../../include/conversation.php:1529 msgid "Spam" msgstr "" -#: ../../include/conversation.php:1529 +#: ../../include/conversation.php:1532 msgid "Posts flagged as SPAM" msgstr "" -#: ../../include/conversation.php:1568 ../../mod/admin.php:949 +#: ../../include/conversation.php:1576 ../../mod/admin.php:952 msgid "Channel" msgstr "" -#: ../../include/conversation.php:1571 +#: ../../include/conversation.php:1579 msgid "Status Messages and Posts" msgstr "" -#: ../../include/conversation.php:1580 +#: ../../include/conversation.php:1588 msgid "About" msgstr "" -#: ../../include/conversation.php:1583 +#: ../../include/conversation.php:1591 msgid "Profile Details" msgstr "" -#: ../../include/conversation.php:1589 ../../include/nav.php:97 +#: ../../include/conversation.php:1597 ../../include/nav.php:97 #: ../../include/apps.php:139 ../../mod/fbrowser.php:25 msgid "Photos" msgstr "" -#: ../../include/conversation.php:1592 ../../include/photos.php:356 +#: ../../include/conversation.php:1600 ../../include/photos.php:356 msgid "Photo Albums" msgstr "" -#: ../../include/conversation.php:1598 ../../include/RedDAV/RedBrowser.php:249 +#: ../../include/conversation.php:1606 ../../include/RedDAV/RedBrowser.php:249 #: ../../include/nav.php:98 ../../include/apps.php:135 #: ../../mod/fbrowser.php:114 msgid "Files" msgstr "" -#: ../../include/conversation.php:1601 +#: ../../include/conversation.php:1609 msgid "Files and Storage" msgstr "" -#: ../../include/conversation.php:1611 ../../include/conversation.php:1614 +#: ../../include/conversation.php:1619 ../../include/conversation.php:1622 msgid "Chatrooms" msgstr "" -#: ../../include/conversation.php:1624 ../../include/nav.php:109 +#: ../../include/conversation.php:1632 ../../include/nav.php:109 #: ../../include/apps.php:129 msgid "Bookmarks" msgstr "" -#: ../../include/conversation.php:1627 +#: ../../include/conversation.php:1635 msgid "Saved Bookmarks" msgstr "" -#: ../../include/conversation.php:1635 ../../include/nav.php:113 +#: ../../include/conversation.php:1642 ../../include/nav.php:113 #: ../../include/apps.php:136 ../../mod/webpages.php:160 msgid "Webpages" msgstr "" -#: ../../include/conversation.php:1638 +#: ../../include/conversation.php:1645 msgid "Manage Webpages" msgstr "" -#: ../../include/conversation.php:1667 ../../include/ItemObject.php:175 +#: ../../include/conversation.php:1674 ../../include/ItemObject.php:175 #: ../../include/ItemObject.php:187 ../../mod/photos.php:1003 #: ../../mod/photos.php:1015 msgid "View all" msgstr "" -#: ../../include/conversation.php:1695 ../../include/ItemObject.php:184 +#: ../../include/conversation.php:1701 ../../include/ItemObject.php:184 #: ../../mod/photos.php:1012 msgctxt "noun" msgid "Dislike" @@ -1242,42 +1242,42 @@ msgid_plural "Dislikes" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1698 +#: ../../include/conversation.php:1704 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1701 +#: ../../include/conversation.php:1707 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1704 +#: ../../include/conversation.php:1710 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1707 +#: ../../include/conversation.php:1713 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1710 +#: ../../include/conversation.php:1716 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1713 +#: ../../include/conversation.php:1719 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -1286,9 +1286,9 @@ msgstr[1] "" #: ../../include/attach.php:137 ../../include/attach.php:184 #: ../../include/attach.php:247 ../../include/attach.php:261 -#: ../../include/attach.php:301 ../../include/attach.php:315 -#: ../../include/attach.php:339 ../../include/attach.php:532 -#: ../../include/attach.php:606 ../../include/items.php:4093 +#: ../../include/attach.php:305 ../../include/attach.php:319 +#: ../../include/attach.php:344 ../../include/attach.php:540 +#: ../../include/attach.php:614 ../../include/items.php:4097 #: ../../include/photos.php:15 ../../include/chat.php:131 #: ../../mod/profile.php:64 ../../mod/profile.php:72 #: ../../mod/achievements.php:30 ../../mod/manage.php:6 @@ -1298,8 +1298,8 @@ msgstr[1] "" #: ../../mod/block.php:22 ../../mod/block.php:72 ../../mod/like.php:178 #: ../../mod/events.php:219 ../../mod/connedit.php:321 ../../mod/group.php:9 #: ../../mod/setup.php:207 ../../mod/common.php:35 ../../mod/id.php:61 -#: ../../mod/connections.php:169 ../../mod/item.php:197 ../../mod/item.php:205 -#: ../../mod/item.php:938 ../../mod/thing.php:247 ../../mod/thing.php:264 +#: ../../mod/connections.php:169 ../../mod/item.php:207 ../../mod/item.php:215 +#: ../../mod/item.php:958 ../../mod/thing.php:247 ../../mod/thing.php:264 #: ../../mod/thing.php:299 ../../mod/pdledit.php:21 ../../mod/authtest.php:13 #: ../../mod/editlayout.php:64 ../../mod/editlayout.php:89 #: ../../mod/chat.php:90 ../../mod/chat.php:95 ../../mod/editwebpage.php:64 @@ -1307,8 +1307,8 @@ msgstr[1] "" #: ../../mod/rate.php:110 ../../mod/editpost.php:13 ../../mod/invite.php:13 #: ../../mod/invite.php:104 ../../mod/locs.php:77 ../../mod/sources.php:66 #: ../../mod/menu.php:61 ../../mod/filestorage.php:18 -#: ../../mod/filestorage.php:72 ../../mod/filestorage.php:87 -#: ../../mod/filestorage.php:114 ../../mod/fsuggest.php:78 +#: ../../mod/filestorage.php:73 ../../mod/filestorage.php:88 +#: ../../mod/filestorage.php:115 ../../mod/fsuggest.php:78 #: ../../mod/poke.php:128 ../../mod/profiles.php:188 #: ../../mod/profiles.php:576 ../../mod/viewsrc.php:14 #: ../../mod/webpages.php:67 ../../mod/viewconnections.php:22 @@ -1317,70 +1317,70 @@ msgstr[1] "" #: ../../mod/mitem.php:106 ../../mod/mood.php:111 ../../mod/layouts.php:67 #: ../../mod/layouts.php:74 ../../mod/layouts.php:85 ../../mod/mail.php:114 #: ../../mod/notifications.php:66 ../../mod/regmod.php:17 -#: ../../mod/network.php:12 ../../mod/new_channel.php:68 -#: ../../mod/new_channel.php:99 ../../mod/appman.php:66 ../../mod/page.php:28 -#: ../../mod/page.php:78 ../../mod/bookmarks.php:46 ../../mod/channel.php:95 -#: ../../mod/channel.php:206 ../../mod/channel.php:249 +#: ../../mod/new_channel.php:68 ../../mod/new_channel.php:99 +#: ../../mod/appman.php:66 ../../mod/network.php:12 ../../mod/page.php:28 +#: ../../mod/page.php:78 ../../mod/bookmarks.php:46 ../../mod/channel.php:100 +#: ../../mod/channel.php:219 ../../mod/channel.php:262 #: ../../mod/suggest.php:26 ../../mod/service_limits.php:7 #: ../../mod/sharedwithme.php:7 ../../index.php:190 ../../index.php:393 msgid "Permission denied." msgstr "" -#: ../../include/attach.php:242 ../../include/attach.php:296 +#: ../../include/attach.php:242 ../../include/attach.php:300 msgid "Item was not found." msgstr "" -#: ../../include/attach.php:352 +#: ../../include/attach.php:357 msgid "No source file." msgstr "" -#: ../../include/attach.php:369 +#: ../../include/attach.php:375 msgid "Cannot locate file to replace" msgstr "" -#: ../../include/attach.php:387 +#: ../../include/attach.php:393 msgid "Cannot locate file to revise/update" msgstr "" -#: ../../include/attach.php:398 +#: ../../include/attach.php:404 #, php-format msgid "File exceeds size limit of %d" msgstr "" -#: ../../include/attach.php:410 +#: ../../include/attach.php:416 #, php-format msgid "You have reached your limit of %1$.0f Mbytes attachment storage." msgstr "" -#: ../../include/attach.php:493 +#: ../../include/attach.php:499 msgid "File upload failed. Possible system limit or action terminated." msgstr "" -#: ../../include/attach.php:505 +#: ../../include/attach.php:511 msgid "Stored file could not be verified. Upload failed." msgstr "" -#: ../../include/attach.php:547 ../../include/attach.php:564 +#: ../../include/attach.php:555 ../../include/attach.php:572 msgid "Path not available." msgstr "" -#: ../../include/attach.php:611 +#: ../../include/attach.php:619 msgid "Empty pathname" msgstr "" -#: ../../include/attach.php:627 +#: ../../include/attach.php:635 msgid "duplicate filename or path" msgstr "" -#: ../../include/attach.php:651 +#: ../../include/attach.php:659 msgid "Path not found." msgstr "" -#: ../../include/attach.php:702 +#: ../../include/attach.php:710 msgid "mkdir failed." msgstr "" -#: ../../include/attach.php:706 +#: ../../include/attach.php:714 msgid "database storage failed." msgstr "" @@ -1535,21 +1535,21 @@ msgstr "" #: ../../mod/settings.php:710 ../../mod/settings.php:738 #: ../../mod/settings.php:761 ../../mod/settings.php:843 #: ../../mod/settings.php:1039 ../../mod/xchan.php:11 ../../mod/connect.php:93 -#: ../../mod/events.php:654 ../../mod/connedit.php:653 ../../mod/group.php:81 +#: ../../mod/events.php:656 ../../mod/connedit.php:653 ../../mod/group.php:81 #: ../../mod/setup.php:313 ../../mod/setup.php:358 ../../mod/thing.php:284 #: ../../mod/thing.php:327 ../../mod/pdledit.php:58 ../../mod/import.php:504 #: ../../mod/chat.php:177 ../../mod/chat.php:211 ../../mod/rate.php:167 #: ../../mod/invite.php:142 ../../mod/locs.php:105 ../../mod/sources.php:104 -#: ../../mod/sources.php:138 ../../mod/filestorage.php:155 +#: ../../mod/sources.php:138 ../../mod/filestorage.php:156 #: ../../mod/fsuggest.php:108 ../../mod/poke.php:166 -#: ../../mod/profiles.php:667 ../../mod/admin.php:441 ../../mod/admin.php:809 -#: ../../mod/admin.php:943 ../../mod/admin.php:1074 ../../mod/admin.php:1269 -#: ../../mod/admin.php:1352 ../../mod/photos.php:565 ../../mod/photos.php:642 +#: ../../mod/profiles.php:667 ../../mod/admin.php:443 ../../mod/admin.php:812 +#: ../../mod/admin.php:946 ../../mod/admin.php:1077 ../../mod/admin.php:1272 +#: ../../mod/admin.php:1355 ../../mod/photos.php:565 ../../mod/photos.php:642 #: ../../mod/photos.php:929 ../../mod/photos.php:969 ../../mod/photos.php:1087 #: ../../mod/mood.php:134 ../../mod/mail.php:355 ../../mod/appman.php:99 #: ../../mod/poll.php:68 ../../mod/bulksetclose.php:24 #: ../../view/theme/apw/php/config.php:256 -#: ../../view/theme/redbasic/php/config.php:97 +#: ../../view/theme/redbasic/php/config.php:97 ../../wppost/wppost.php:104 msgid "Submit" msgstr "" @@ -1635,7 +1635,7 @@ msgstr "" msgid "parent" msgstr "" -#: ../../include/RedDAV/RedBrowser.php:130 ../../include/text.php:2395 +#: ../../include/RedDAV/RedBrowser.php:130 ../../include/text.php:2407 msgid "Collection" msgstr "" @@ -1690,8 +1690,8 @@ msgid "Upload" msgstr "" #: ../../include/RedDAV/RedBrowser.php:262 ../../mod/settings.php:584 -#: ../../mod/settings.php:610 ../../mod/admin.php:950 -#: ../../mod/sharedwithme.php:100 +#: ../../mod/settings.php:610 ../../mod/admin.php:953 +#: ../../mod/sharedwithme.php:95 msgid "Name" msgstr "" @@ -1699,11 +1699,11 @@ msgstr "" msgid "Type" msgstr "" -#: ../../include/RedDAV/RedBrowser.php:264 ../../mod/sharedwithme.php:101 +#: ../../include/RedDAV/RedBrowser.php:264 ../../mod/sharedwithme.php:97 msgid "Size" msgstr "" -#: ../../include/RedDAV/RedBrowser.php:265 ../../mod/sharedwithme.php:102 +#: ../../include/RedDAV/RedBrowser.php:265 ../../mod/sharedwithme.php:98 msgid "Last Modified" msgstr "" @@ -1720,7 +1720,7 @@ msgstr "" msgid "%1$s's bookmarks" msgstr "" -#: ../../include/comanche.php:34 ../../mod/admin.php:381 +#: ../../include/comanche.php:34 ../../mod/admin.php:383 #: ../../view/theme/apw/php/config.php:185 msgid "Default" msgstr "" @@ -1976,79 +1976,6 @@ msgstr "" msgid "Provide a personal tag cloud on your channel page" msgstr "" -#: ../../include/items.php:382 ../../mod/like.php:270 -#: ../../mod/subthread.php:49 ../../mod/group.php:68 ../../mod/profperm.php:23 -#: ../../mod/bulksetclose.php:11 ../../index.php:392 -msgid "Permission denied" -msgstr "" - -#: ../../include/items.php:979 ../../include/items.php:1024 -msgid "(Unknown)" -msgstr "" - -#: ../../include/items.php:1181 -msgid "Visible to anybody on the internet." -msgstr "" - -#: ../../include/items.php:1183 -msgid "Visible to you only." -msgstr "" - -#: ../../include/items.php:1185 -msgid "Visible to anybody in this network." -msgstr "" - -#: ../../include/items.php:1187 -msgid "Visible to anybody authenticated." -msgstr "" - -#: ../../include/items.php:1189 -#, php-format -msgid "Visible to anybody on %s." -msgstr "" - -#: ../../include/items.php:1191 -msgid "Visible to all connections." -msgstr "" - -#: ../../include/items.php:1193 -msgid "Visible to approved connections." -msgstr "" - -#: ../../include/items.php:1195 -msgid "Visible to specific connections." -msgstr "" - -#: ../../include/items.php:4023 ../../mod/thing.php:76 -#: ../../mod/display.php:32 ../../mod/filestorage.php:27 -#: ../../mod/viewsrc.php:20 ../../mod/admin.php:167 ../../mod/admin.php:981 -#: ../../mod/admin.php:1181 -msgid "Item not found." -msgstr "" - -#: ../../include/items.php:4476 ../../mod/group.php:38 ../../mod/group.php:140 -#: ../../mod/bulksetclose.php:51 -msgid "Collection not found." -msgstr "" - -#: ../../include/items.php:4491 -msgid "Collection is empty." -msgstr "" - -#: ../../include/items.php:4498 -#, php-format -msgid "Collection: %s" -msgstr "" - -#: ../../include/items.php:4509 -#, php-format -msgid "Connection: %s" -msgstr "" - -#: ../../include/items.php:4512 -msgid "Connection not found." -msgstr "" - #: ../../include/contact_selectors.php:56 msgid "Frequently" msgstr "" @@ -2086,7 +2013,7 @@ msgid "RSS/Atom" msgstr "" #: ../../include/contact_selectors.php:79 ../../mod/id.php:12 -#: ../../mod/id.php:13 ../../mod/admin.php:812 ../../mod/admin.php:821 +#: ../../mod/id.php:13 ../../mod/admin.php:815 ../../mod/admin.php:824 #: ../../boot.php:1554 msgid "Email" msgstr "" @@ -2315,86 +2242,86 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: ../../include/datetime.php:212 ../../mod/events.php:633 +#: ../../include/datetime.php:214 ../../mod/events.php:635 #: ../../mod/appman.php:91 ../../mod/appman.php:92 msgid "Required" msgstr "" -#: ../../include/datetime.php:231 ../../boot.php:2356 +#: ../../include/datetime.php:233 ../../boot.php:2356 msgid "never" msgstr "" -#: ../../include/datetime.php:237 +#: ../../include/datetime.php:239 msgid "less than a second ago" msgstr "" -#: ../../include/datetime.php:240 +#: ../../include/datetime.php:242 msgid "year" msgstr "" -#: ../../include/datetime.php:240 +#: ../../include/datetime.php:242 msgid "years" msgstr "" -#: ../../include/datetime.php:241 +#: ../../include/datetime.php:243 msgid "month" msgstr "" -#: ../../include/datetime.php:241 +#: ../../include/datetime.php:243 msgid "months" msgstr "" -#: ../../include/datetime.php:242 +#: ../../include/datetime.php:244 msgid "week" msgstr "" -#: ../../include/datetime.php:242 +#: ../../include/datetime.php:244 msgid "weeks" msgstr "" -#: ../../include/datetime.php:243 +#: ../../include/datetime.php:245 msgid "day" msgstr "" -#: ../../include/datetime.php:243 +#: ../../include/datetime.php:245 msgid "days" msgstr "" -#: ../../include/datetime.php:244 +#: ../../include/datetime.php:246 msgid "hour" msgstr "" -#: ../../include/datetime.php:244 +#: ../../include/datetime.php:246 msgid "hours" msgstr "" -#: ../../include/datetime.php:245 +#: ../../include/datetime.php:247 msgid "minute" msgstr "" -#: ../../include/datetime.php:245 +#: ../../include/datetime.php:247 msgid "minutes" msgstr "" -#: ../../include/datetime.php:246 +#: ../../include/datetime.php:248 msgid "second" msgstr "" -#: ../../include/datetime.php:246 +#: ../../include/datetime.php:248 msgid "seconds" msgstr "" -#: ../../include/datetime.php:255 +#: ../../include/datetime.php:257 #, php-format msgid "%1$d %2$s ago" msgstr "" -#: ../../include/datetime.php:463 +#: ../../include/datetime.php:465 #, php-format msgid "%1$s's birthday" msgstr "" -#: ../../include/datetime.php:464 +#: ../../include/datetime.php:466 #, php-format msgid "Happy Birthday %1$s" msgstr "" @@ -2407,31 +2334,104 @@ msgstr "" msgid "Open the selected location in a different window or browser tab" msgstr "" -#: ../../include/Contact.php:215 ../../mod/admin.php:726 +#: ../../include/Contact.php:215 ../../mod/admin.php:729 #, php-format msgid "User '%s' deleted" msgstr "" -#: ../../include/bb2diaspora.php:349 +#: ../../include/bb2diaspora.php:373 msgid "Attachments:" msgstr "" -#: ../../include/bb2diaspora.php:428 ../../include/event.php:11 +#: ../../include/bb2diaspora.php:451 ../../include/event.php:11 msgid "l F d, Y \\@ g:i A" msgstr "" -#: ../../include/bb2diaspora.php:430 +#: ../../include/bb2diaspora.php:453 msgid "Redmatrix event notification:" msgstr "" -#: ../../include/bb2diaspora.php:434 ../../include/event.php:20 +#: ../../include/bb2diaspora.php:457 ../../include/event.php:20 msgid "Starts:" msgstr "" -#: ../../include/bb2diaspora.php:442 ../../include/event.php:30 +#: ../../include/bb2diaspora.php:465 ../../include/event.php:30 msgid "Finishes:" msgstr "" +#: ../../include/items.php:382 ../../mod/like.php:270 +#: ../../mod/subthread.php:49 ../../mod/group.php:68 ../../mod/profperm.php:23 +#: ../../mod/bulksetclose.php:11 ../../index.php:392 +msgid "Permission denied" +msgstr "" + +#: ../../include/items.php:979 ../../include/items.php:1024 +msgid "(Unknown)" +msgstr "" + +#: ../../include/items.php:1181 +msgid "Visible to anybody on the internet." +msgstr "" + +#: ../../include/items.php:1183 +msgid "Visible to you only." +msgstr "" + +#: ../../include/items.php:1185 +msgid "Visible to anybody in this network." +msgstr "" + +#: ../../include/items.php:1187 +msgid "Visible to anybody authenticated." +msgstr "" + +#: ../../include/items.php:1189 +#, php-format +msgid "Visible to anybody on %s." +msgstr "" + +#: ../../include/items.php:1191 +msgid "Visible to all connections." +msgstr "" + +#: ../../include/items.php:1193 +msgid "Visible to approved connections." +msgstr "" + +#: ../../include/items.php:1195 +msgid "Visible to specific connections." +msgstr "" + +#: ../../include/items.php:4027 ../../mod/thing.php:76 +#: ../../mod/display.php:36 ../../mod/filestorage.php:27 +#: ../../mod/viewsrc.php:20 ../../mod/admin.php:167 ../../mod/admin.php:984 +#: ../../mod/admin.php:1184 +msgid "Item not found." +msgstr "" + +#: ../../include/items.php:4479 ../../mod/group.php:38 ../../mod/group.php:140 +#: ../../mod/bulksetclose.php:51 +msgid "Collection not found." +msgstr "" + +#: ../../include/items.php:4494 +msgid "Collection is empty." +msgstr "" + +#: ../../include/items.php:4501 +#, php-format +msgid "Collection: %s" +msgstr "" + +#: ../../include/items.php:4512 +#, php-format +msgid "Connection: %s" +msgstr "" + +#: ../../include/items.php:4515 +msgid "Connection not found." +msgstr "" + #: ../../include/nav.php:87 ../../include/nav.php:120 ../../boot.php:1551 msgid "Logout" msgstr "" @@ -2536,7 +2536,7 @@ msgstr "" #: ../../include/nav.php:165 ../../include/apps.php:147 #: ../../include/text.php:832 ../../include/text.php:844 -#: ../../mod/search.php:34 +#: ../../mod/search.php:38 msgid "Search" msgstr "" @@ -2726,14 +2726,10 @@ msgstr "" msgid "This event has been added to your calendar." msgstr "" -#: ../../include/api.php:1081 +#: ../../include/api.php:1095 msgid "Public Timeline" msgstr "" -#: ../../include/network.php:620 -msgid "view full size" -msgstr "" - #: ../../include/dir_fns.php:134 msgid "Directory Options" msgstr "" @@ -2791,15 +2787,15 @@ msgstr "" msgid "Unable to verify site signature for %s" msgstr "" -#: ../../include/auth.php:130 +#: ../../include/auth.php:131 msgid "Logged out." msgstr "" -#: ../../include/auth.php:271 +#: ../../include/auth.php:272 msgid "Failed authentication" msgstr "" -#: ../../include/auth.php:285 ../../mod/openid.php:190 +#: ../../include/auth.php:286 ../../mod/openid.php:190 msgid "Login failed." msgstr "" @@ -3005,7 +3001,7 @@ msgid_plural "%d invitations available" msgstr[0] "" msgstr[1] "" -#: ../../include/contact_widgets.php:19 ../../mod/admin.php:445 +#: ../../include/contact_widgets.php:19 ../../mod/admin.php:447 msgid "Advanced" msgstr "" @@ -3070,8 +3066,8 @@ msgstr "" msgid "Don't show" msgstr "" -#: ../../include/acl_selectors.php:248 ../../mod/events.php:652 -#: ../../mod/chat.php:209 ../../mod/filestorage.php:146 +#: ../../include/acl_selectors.php:248 ../../mod/events.php:654 +#: ../../mod/chat.php:209 ../../mod/filestorage.php:147 #: ../../mod/photos.php:559 ../../mod/photos.php:922 msgid "Permissions" msgstr "" @@ -3686,23 +3682,23 @@ msgstr "" msgid "activity" msgstr "" -#: ../../include/text.php:2047 +#: ../../include/text.php:2051 msgid "Design" msgstr "" -#: ../../include/text.php:2050 +#: ../../include/text.php:2054 msgid "Blocks" msgstr "" -#: ../../include/text.php:2051 +#: ../../include/text.php:2055 msgid "Menus" msgstr "" -#: ../../include/text.php:2052 +#: ../../include/text.php:2056 msgid "Layouts" msgstr "" -#: ../../include/text.php:2053 +#: ../../include/text.php:2057 msgid "Pages" msgstr "" @@ -3856,6 +3852,10 @@ msgstr "" msgid "Custom/Expert Mode" msgstr "" +#: ../../include/network.php:619 +msgid "view full size" +msgstr "" + #: ../../mod/achievements.php:34 msgid "Some blurb about what to do when you're new here" msgstr "" @@ -3943,15 +3943,17 @@ msgstr "" msgid "Settings updated." msgstr "" -#: ../../mod/settings.php:573 ../../mod/api.php:106 ../../mod/admin.php:419 +#: ../../mod/settings.php:573 ../../mod/api.php:106 ../../mod/admin.php:421 #: ../../mod/removeme.php:60 ../../view/theme/redbasic/php/config.php:102 -#: ../../view/theme/redbasic/php/config.php:127 ../../boot.php:1556 +#: ../../view/theme/redbasic/php/config.php:127 ../../wppost/wppost.php:80 +#: ../../wppost/wppost.php:96 ../../wppost/wppost.php:100 ../../boot.php:1556 msgid "No" msgstr "" -#: ../../mod/settings.php:573 ../../mod/api.php:105 ../../mod/admin.php:421 +#: ../../mod/settings.php:573 ../../mod/api.php:105 ../../mod/admin.php:423 #: ../../mod/removeme.php:60 ../../view/theme/redbasic/php/config.php:102 -#: ../../view/theme/redbasic/php/config.php:127 ../../boot.php:1556 +#: ../../view/theme/redbasic/php/config.php:127 ../../wppost/wppost.php:80 +#: ../../wppost/wppost.php:96 ../../wppost/wppost.php:100 ../../boot.php:1556 msgid "Yes" msgstr "" @@ -4090,7 +4092,7 @@ msgstr "" msgid "%s - (Experimental)" msgstr "" -#: ../../mod/settings.php:805 ../../mod/admin.php:391 +#: ../../mod/settings.php:805 ../../mod/admin.php:393 msgid "mobile" msgstr "" @@ -4610,11 +4612,11 @@ msgstr "" msgid "Fetching URL returns error: %1$s" msgstr "" -#: ../../mod/home.php:48 +#: ../../mod/home.php:53 msgid "Red Matrix - "The Network"" msgstr "" -#: ../../mod/home.php:101 +#: ../../mod/home.php:106 #, php-format msgid "Welcome to %s" msgstr "" @@ -4699,7 +4701,7 @@ msgstr "" msgid "Channel not found." msgstr "" -#: ../../mod/block.php:75 ../../mod/help.php:79 ../../mod/display.php:102 +#: ../../mod/block.php:75 ../../mod/help.php:79 ../../mod/display.php:106 #: ../../mod/page.php:81 ../../index.php:241 msgid "Page not found." msgstr "" @@ -4734,41 +4736,41 @@ msgstr "" msgid "Previous action reversed." msgstr "" -#: ../../mod/like.php:387 +#: ../../mod/like.php:398 #, php-format msgid "%1$s agrees with %2$s's %3$s" msgstr "" -#: ../../mod/like.php:389 +#: ../../mod/like.php:400 #, php-format msgid "%1$s doesn't agree with %2$s's %3$s" msgstr "" -#: ../../mod/like.php:391 +#: ../../mod/like.php:402 #, php-format msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "" -#: ../../mod/like.php:393 +#: ../../mod/like.php:404 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: ../../mod/like.php:395 +#: ../../mod/like.php:406 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "" -#: ../../mod/like.php:397 +#: ../../mod/like.php:408 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "" -#: ../../mod/like.php:481 +#: ../../mod/like.php:492 msgid "Action completed." msgstr "" -#: ../../mod/like.php:482 +#: ../../mod/like.php:493 msgid "Thank you." msgstr "" @@ -4824,49 +4826,49 @@ msgstr "" msgid "Failed to remove event" msgstr "" -#: ../../mod/events.php:625 +#: ../../mod/events.php:627 msgid "Event details" msgstr "" -#: ../../mod/events.php:626 +#: ../../mod/events.php:628 msgid "Starting date and Title are required." msgstr "" -#: ../../mod/events.php:628 +#: ../../mod/events.php:630 msgid "Categories (comma-separated list)" msgstr "" -#: ../../mod/events.php:630 +#: ../../mod/events.php:632 msgid "Event Starts:" msgstr "" -#: ../../mod/events.php:637 +#: ../../mod/events.php:639 msgid "Finish date/time is not known or not relevant" msgstr "" -#: ../../mod/events.php:639 +#: ../../mod/events.php:641 msgid "Event Finishes:" msgstr "" -#: ../../mod/events.php:641 ../../mod/events.php:642 +#: ../../mod/events.php:643 ../../mod/events.php:644 msgid "Adjust for viewer timezone" msgstr "" -#: ../../mod/events.php:641 +#: ../../mod/events.php:643 msgid "" "Important for events that happen in a particular place. Not practical for " "global holidays." msgstr "" -#: ../../mod/events.php:643 +#: ../../mod/events.php:645 msgid "Description:" msgstr "" -#: ../../mod/events.php:647 +#: ../../mod/events.php:649 msgid "Title:" msgstr "" -#: ../../mod/events.php:649 +#: ../../mod/events.php:651 msgid "Share this event" msgstr "" @@ -5020,12 +5022,12 @@ msgid "View recent posts and comments" msgstr "" #: ../../mod/connedit.php:507 ../../mod/connedit.php:694 -#: ../../mod/admin.php:818 +#: ../../mod/admin.php:821 msgid "Unblock" msgstr "" #: ../../mod/connedit.php:507 ../../mod/connedit.php:694 -#: ../../mod/admin.php:817 +#: ../../mod/admin.php:820 msgid "Block" msgstr "" @@ -5314,57 +5316,57 @@ msgstr "" msgid "Click on a channel to add or remove." msgstr "" -#: ../../mod/siteinfo.php:106 +#: ../../mod/siteinfo.php:112 #, php-format msgid "Version %s" msgstr "" -#: ../../mod/siteinfo.php:127 +#: ../../mod/siteinfo.php:133 msgid "Installed plugins/addons/apps:" msgstr "" -#: ../../mod/siteinfo.php:140 +#: ../../mod/siteinfo.php:146 msgid "No installed plugins/addons/apps" msgstr "" -#: ../../mod/siteinfo.php:149 +#: ../../mod/siteinfo.php:155 msgid "Red" msgstr "" -#: ../../mod/siteinfo.php:150 +#: ../../mod/siteinfo.php:156 msgid "" -"This is a hub of the Red Matrix - a global cooperative network of " -"decentralized privacy enhanced websites." +"This is a hub of redmatrix - a global cooperative network of decentralized " +"privacy enhanced websites." msgstr "" -#: ../../mod/siteinfo.php:152 +#: ../../mod/siteinfo.php:158 msgid "Tag: " msgstr "" -#: ../../mod/siteinfo.php:154 +#: ../../mod/siteinfo.php:160 msgid "Last background fetch: " msgstr "" -#: ../../mod/siteinfo.php:157 +#: ../../mod/siteinfo.php:163 msgid "Running at web location" msgstr "" -#: ../../mod/siteinfo.php:158 +#: ../../mod/siteinfo.php:164 msgid "" -"Please visit <a href=\"https://redmatrix.me\">RedMatrix.me</a> to learn more " +"Please visit <a href=\"https://redmatrix.me\">redmatrix.me</a> to learn more " "about the Red Matrix." msgstr "" -#: ../../mod/siteinfo.php:159 +#: ../../mod/siteinfo.php:165 msgid "Bug reports and issues: please visit" msgstr "" -#: ../../mod/siteinfo.php:162 +#: ../../mod/siteinfo.php:168 msgid "" "Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot com" msgstr "" -#: ../../mod/siteinfo.php:164 +#: ../../mod/siteinfo.php:170 msgid "Site Administrators" msgstr "" @@ -5946,33 +5948,37 @@ msgstr "" msgid "RedMatrix - Guests: Username: {your email address}, Password: +++" msgstr "" -#: ../../mod/item.php:165 +#: ../../mod/item.php:175 msgid "Unable to locate original post." msgstr "" -#: ../../mod/item.php:424 +#: ../../mod/item.php:437 msgid "Empty post discarded." msgstr "" -#: ../../mod/item.php:466 +#: ../../mod/item.php:479 msgid "Executable content type not permitted to this channel." msgstr "" -#: ../../mod/item.php:865 +#: ../../mod/item.php:885 msgid "System error. Post not saved." msgstr "" -#: ../../mod/item.php:1083 +#: ../../mod/item.php:1097 +msgid "Unable to obtain post information from database." +msgstr "" + +#: ../../mod/item.php:1103 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "" -#: ../../mod/item.php:1089 +#: ../../mod/item.php:1109 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "" -#: ../../mod/search.php:13 ../../mod/display.php:9 ../../mod/ratings.php:82 +#: ../../mod/search.php:13 ../../mod/display.php:13 ../../mod/ratings.php:82 #: ../../mod/directory.php:47 ../../mod/viewconnections.php:17 #: ../../mod/photos.php:429 msgid "Public access denied." @@ -6637,47 +6643,47 @@ msgstr "" msgid "Modify" msgstr "" -#: ../../mod/filestorage.php:81 +#: ../../mod/filestorage.php:82 msgid "Permission Denied." msgstr "" -#: ../../mod/filestorage.php:97 +#: ../../mod/filestorage.php:98 msgid "File not found." msgstr "" -#: ../../mod/filestorage.php:140 +#: ../../mod/filestorage.php:141 msgid "Edit file permissions" msgstr "" -#: ../../mod/filestorage.php:149 +#: ../../mod/filestorage.php:150 msgid "Set/edit permissions" msgstr "" -#: ../../mod/filestorage.php:150 +#: ../../mod/filestorage.php:151 msgid "Include all files and sub folders" msgstr "" -#: ../../mod/filestorage.php:151 +#: ../../mod/filestorage.php:152 msgid "Return to file list" msgstr "" -#: ../../mod/filestorage.php:153 +#: ../../mod/filestorage.php:154 msgid "Copy/paste this code to attach file to a post" msgstr "" -#: ../../mod/filestorage.php:154 +#: ../../mod/filestorage.php:155 msgid "Copy/paste this URL to link file from a web page" msgstr "" -#: ../../mod/filestorage.php:156 +#: ../../mod/filestorage.php:157 msgid "Attach this file to a new post" msgstr "" -#: ../../mod/filestorage.php:157 +#: ../../mod/filestorage.php:158 msgid "Show URL to this file" msgstr "" -#: ../../mod/filestorage.php:158 +#: ../../mod/filestorage.php:159 msgid "Do not show in shared with me folder of your connections" msgstr "" @@ -6815,7 +6821,7 @@ msgstr "" msgid "Interests" msgstr "" -#: ../../mod/profiles.php:447 ../../mod/admin.php:950 +#: ../../mod/profiles.php:447 ../../mod/admin.php:953 msgid "Address" msgstr "" @@ -7120,7 +7126,7 @@ msgstr "" msgid "Theme settings updated." msgstr "" -#: ../../mod/admin.php:93 ../../mod/admin.php:440 +#: ../../mod/admin.php:93 ../../mod/admin.php:442 msgid "Site" msgstr "" @@ -7128,15 +7134,15 @@ msgstr "" msgid "Accounts" msgstr "" -#: ../../mod/admin.php:95 ../../mod/admin.php:942 +#: ../../mod/admin.php:95 ../../mod/admin.php:945 msgid "Channels" msgstr "" -#: ../../mod/admin.php:96 ../../mod/admin.php:1033 ../../mod/admin.php:1073 +#: ../../mod/admin.php:96 ../../mod/admin.php:1036 ../../mod/admin.php:1076 msgid "Plugins" msgstr "" -#: ../../mod/admin.php:97 ../../mod/admin.php:1233 ../../mod/admin.php:1268 +#: ../../mod/admin.php:97 ../../mod/admin.php:1236 ../../mod/admin.php:1271 msgid "Themes" msgstr "" @@ -7152,7 +7158,7 @@ msgstr "" msgid "DB updates" msgstr "" -#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1351 +#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1354 msgid "Logs" msgstr "" @@ -7196,10 +7202,10 @@ msgstr "" msgid "Message queues" msgstr "" -#: ../../mod/admin.php:240 ../../mod/admin.php:439 ../../mod/admin.php:533 -#: ../../mod/admin.php:807 ../../mod/admin.php:941 ../../mod/admin.php:1032 -#: ../../mod/admin.php:1072 ../../mod/admin.php:1232 ../../mod/admin.php:1267 -#: ../../mod/admin.php:1350 +#: ../../mod/admin.php:240 ../../mod/admin.php:441 ../../mod/admin.php:536 +#: ../../mod/admin.php:810 ../../mod/admin.php:944 ../../mod/admin.php:1035 +#: ../../mod/admin.php:1075 ../../mod/admin.php:1235 ../../mod/admin.php:1270 +#: ../../mod/admin.php:1353 msgid "Administration" msgstr "" @@ -7211,7 +7217,7 @@ msgstr "" msgid "Registered accounts" msgstr "" -#: ../../mod/admin.php:245 ../../mod/admin.php:537 +#: ../../mod/admin.php:245 ../../mod/admin.php:540 msgid "Pending registrations" msgstr "" @@ -7219,7 +7225,7 @@ msgstr "" msgid "Registered channels" msgstr "" -#: ../../mod/admin.php:247 ../../mod/admin.php:538 +#: ../../mod/admin.php:247 ../../mod/admin.php:541 msgid "Active plugins" msgstr "" @@ -7227,611 +7233,619 @@ msgstr "" msgid "Version" msgstr "" -#: ../../mod/admin.php:356 +#: ../../mod/admin.php:358 msgid "Site settings updated." msgstr "" -#: ../../mod/admin.php:393 +#: ../../mod/admin.php:395 msgid "experimental" msgstr "" -#: ../../mod/admin.php:395 +#: ../../mod/admin.php:397 msgid "unsupported" msgstr "" -#: ../../mod/admin.php:420 +#: ../../mod/admin.php:422 msgid "Yes - with approval" msgstr "" -#: ../../mod/admin.php:426 +#: ../../mod/admin.php:428 msgid "My site is not a public server" msgstr "" -#: ../../mod/admin.php:427 +#: ../../mod/admin.php:429 msgid "My site has paid access only" msgstr "" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:430 msgid "My site has free access only" msgstr "" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:431 msgid "My site offers free accounts with optional paid upgrades" msgstr "" -#: ../../mod/admin.php:442 ../../mod/register.php:207 +#: ../../mod/admin.php:444 ../../mod/register.php:207 msgid "Registration" msgstr "" -#: ../../mod/admin.php:443 +#: ../../mod/admin.php:445 msgid "File upload" msgstr "" -#: ../../mod/admin.php:444 +#: ../../mod/admin.php:446 msgid "Policies" msgstr "" -#: ../../mod/admin.php:449 +#: ../../mod/admin.php:451 msgid "Site name" msgstr "" -#: ../../mod/admin.php:450 +#: ../../mod/admin.php:452 msgid "Banner/Logo" msgstr "" -#: ../../mod/admin.php:451 +#: ../../mod/admin.php:453 msgid "Administrator Information" msgstr "" -#: ../../mod/admin.php:451 +#: ../../mod/admin.php:453 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "" -#: ../../mod/admin.php:452 +#: ../../mod/admin.php:454 msgid "System language" msgstr "" -#: ../../mod/admin.php:453 +#: ../../mod/admin.php:455 msgid "System theme" msgstr "" -#: ../../mod/admin.php:453 +#: ../../mod/admin.php:455 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "" -#: ../../mod/admin.php:454 +#: ../../mod/admin.php:456 msgid "Mobile system theme" msgstr "" -#: ../../mod/admin.php:454 +#: ../../mod/admin.php:456 msgid "Theme for mobile devices" msgstr "" -#: ../../mod/admin.php:456 +#: ../../mod/admin.php:458 msgid "Enable Diaspora Protocol" msgstr "" -#: ../../mod/admin.php:456 +#: ../../mod/admin.php:458 msgid "Communicate with Diaspora and Friendica - experimental" msgstr "" -#: ../../mod/admin.php:457 +#: ../../mod/admin.php:459 msgid "Allow Feeds as Connections" msgstr "" -#: ../../mod/admin.php:457 +#: ../../mod/admin.php:459 msgid "(Heavy system resource usage)" msgstr "" -#: ../../mod/admin.php:458 +#: ../../mod/admin.php:460 msgid "Maximum image size" msgstr "" -#: ../../mod/admin.php:458 +#: ../../mod/admin.php:460 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "" -#: ../../mod/admin.php:459 +#: ../../mod/admin.php:461 msgid "Does this site allow new member registration?" msgstr "" -#: ../../mod/admin.php:460 +#: ../../mod/admin.php:462 msgid "Which best describes the types of account offered by this hub?" msgstr "" -#: ../../mod/admin.php:461 +#: ../../mod/admin.php:463 msgid "Register text" msgstr "" -#: ../../mod/admin.php:461 +#: ../../mod/admin.php:463 msgid "Will be displayed prominently on the registration page." msgstr "" -#: ../../mod/admin.php:462 +#: ../../mod/admin.php:464 msgid "Accounts abandoned after x days" msgstr "" -#: ../../mod/admin.php:462 +#: ../../mod/admin.php:464 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "" -#: ../../mod/admin.php:463 +#: ../../mod/admin.php:465 msgid "Allowed friend domains" msgstr "" -#: ../../mod/admin.php:463 +#: ../../mod/admin.php:465 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: ../../mod/admin.php:464 +#: ../../mod/admin.php:466 msgid "Allowed email domains" msgstr "" -#: ../../mod/admin.php:464 +#: ../../mod/admin.php:466 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/admin.php:465 +#: ../../mod/admin.php:467 msgid "Not allowed email domains" msgstr "" -#: ../../mod/admin.php:465 +#: ../../mod/admin.php:467 msgid "" "Comma separated list of domains which are not allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains, unless allowed domains have been defined." msgstr "" -#: ../../mod/admin.php:466 +#: ../../mod/admin.php:468 msgid "Block public" msgstr "" -#: ../../mod/admin.php:466 +#: ../../mod/admin.php:468 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "" -#: ../../mod/admin.php:467 +#: ../../mod/admin.php:469 msgid "Verify Email Addresses" msgstr "" -#: ../../mod/admin.php:467 +#: ../../mod/admin.php:469 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "" -#: ../../mod/admin.php:468 +#: ../../mod/admin.php:470 msgid "Force publish" msgstr "" -#: ../../mod/admin.php:468 +#: ../../mod/admin.php:470 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "" -#: ../../mod/admin.php:469 +#: ../../mod/admin.php:471 msgid "Disable discovery tab" msgstr "" -#: ../../mod/admin.php:469 +#: ../../mod/admin.php:471 msgid "" "Remove the tab in the network view with public content pulled from sources " "chosen for this site." msgstr "" -#: ../../mod/admin.php:470 +#: ../../mod/admin.php:472 msgid "No login on Homepage" msgstr "" -#: ../../mod/admin.php:470 +#: ../../mod/admin.php:472 msgid "" "Check to hide the login form from your sites homepage when visitors arrive " "who are not logged in (e.g. when you put the content of the homepage in via " "the site channel)." msgstr "" -#: ../../mod/admin.php:472 +#: ../../mod/admin.php:474 msgid "Proxy user" msgstr "" -#: ../../mod/admin.php:473 +#: ../../mod/admin.php:475 msgid "Proxy URL" msgstr "" -#: ../../mod/admin.php:474 +#: ../../mod/admin.php:476 msgid "Network timeout" msgstr "" -#: ../../mod/admin.php:474 +#: ../../mod/admin.php:476 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: ../../mod/admin.php:475 +#: ../../mod/admin.php:477 msgid "Delivery interval" msgstr "" -#: ../../mod/admin.php:475 +#: ../../mod/admin.php:477 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 "" -#: ../../mod/admin.php:476 +#: ../../mod/admin.php:478 msgid "Poll interval" msgstr "" -#: ../../mod/admin.php:476 +#: ../../mod/admin.php:478 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "" -#: ../../mod/admin.php:477 +#: ../../mod/admin.php:479 msgid "Maximum Load Average" msgstr "" -#: ../../mod/admin.php:477 +#: ../../mod/admin.php:479 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "" -#: ../../mod/admin.php:525 +#: ../../mod/admin.php:480 +msgid "Expiration period in days for imported (matrix/network) content" +msgstr "" + +#: ../../mod/admin.php:480 +msgid "0 for no expiration of imported content" +msgstr "" + +#: ../../mod/admin.php:528 msgid "No server found" msgstr "" -#: ../../mod/admin.php:532 ../../mod/admin.php:821 +#: ../../mod/admin.php:535 ../../mod/admin.php:824 msgid "ID" msgstr "" -#: ../../mod/admin.php:532 +#: ../../mod/admin.php:535 msgid "for channel" msgstr "" -#: ../../mod/admin.php:532 +#: ../../mod/admin.php:535 msgid "on server" msgstr "" -#: ../../mod/admin.php:532 +#: ../../mod/admin.php:535 msgid "Status" msgstr "" -#: ../../mod/admin.php:534 +#: ../../mod/admin.php:537 msgid "Server" msgstr "" -#: ../../mod/admin.php:551 +#: ../../mod/admin.php:554 msgid "Update has been marked successful" msgstr "" -#: ../../mod/admin.php:561 +#: ../../mod/admin.php:564 #, php-format msgid "Executing %s failed. Check system logs." msgstr "" -#: ../../mod/admin.php:564 +#: ../../mod/admin.php:567 #, php-format msgid "Update %s was successfully applied." msgstr "" -#: ../../mod/admin.php:568 +#: ../../mod/admin.php:571 #, php-format msgid "Update %s did not return a status. Unknown if it succeeded." msgstr "" -#: ../../mod/admin.php:571 +#: ../../mod/admin.php:574 #, php-format msgid "Update function %s could not be found." msgstr "" -#: ../../mod/admin.php:587 +#: ../../mod/admin.php:590 msgid "No failed updates." msgstr "" -#: ../../mod/admin.php:591 +#: ../../mod/admin.php:594 msgid "Failed Updates" msgstr "" -#: ../../mod/admin.php:593 +#: ../../mod/admin.php:596 msgid "Mark success (if update was manually applied)" msgstr "" -#: ../../mod/admin.php:594 +#: ../../mod/admin.php:597 msgid "Attempt to execute this update step automatically" msgstr "" -#: ../../mod/admin.php:628 +#: ../../mod/admin.php:631 msgid "Queue Statistics" msgstr "" -#: ../../mod/admin.php:629 +#: ../../mod/admin.php:632 msgid "Total Entries" msgstr "" -#: ../../mod/admin.php:630 +#: ../../mod/admin.php:633 msgid "Priority" msgstr "" -#: ../../mod/admin.php:631 +#: ../../mod/admin.php:634 msgid "Destination URL" msgstr "" -#: ../../mod/admin.php:632 +#: ../../mod/admin.php:635 msgid "Mark hub permanently offline" msgstr "" -#: ../../mod/admin.php:633 +#: ../../mod/admin.php:636 msgid "Empty queue for this hub" msgstr "" -#: ../../mod/admin.php:634 +#: ../../mod/admin.php:637 msgid "Last known contact" msgstr "" -#: ../../mod/admin.php:670 +#: ../../mod/admin.php:673 #, php-format msgid "%s user blocked/unblocked" msgid_plural "%s users blocked/unblocked" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:678 +#: ../../mod/admin.php:681 #, php-format msgid "%s user deleted" msgid_plural "%s users deleted" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:714 +#: ../../mod/admin.php:717 msgid "Account not found" msgstr "" -#: ../../mod/admin.php:734 +#: ../../mod/admin.php:737 #, php-format msgid "User '%s' blocked" msgstr "" -#: ../../mod/admin.php:742 +#: ../../mod/admin.php:745 #, php-format msgid "User '%s' unblocked" msgstr "" -#: ../../mod/admin.php:808 ../../mod/admin.php:820 +#: ../../mod/admin.php:811 ../../mod/admin.php:823 msgid "Users" msgstr "" -#: ../../mod/admin.php:810 ../../mod/admin.php:944 +#: ../../mod/admin.php:813 ../../mod/admin.php:947 msgid "select all" msgstr "" -#: ../../mod/admin.php:811 +#: ../../mod/admin.php:814 msgid "User registrations waiting for confirm" msgstr "" -#: ../../mod/admin.php:812 +#: ../../mod/admin.php:815 msgid "Request date" msgstr "" -#: ../../mod/admin.php:813 +#: ../../mod/admin.php:816 msgid "No registrations." msgstr "" -#: ../../mod/admin.php:814 +#: ../../mod/admin.php:817 msgid "Approve" msgstr "" -#: ../../mod/admin.php:815 +#: ../../mod/admin.php:818 msgid "Deny" msgstr "" -#: ../../mod/admin.php:821 +#: ../../mod/admin.php:824 msgid "Register date" msgstr "" -#: ../../mod/admin.php:821 +#: ../../mod/admin.php:824 msgid "Last login" msgstr "" -#: ../../mod/admin.php:821 +#: ../../mod/admin.php:824 msgid "Expires" msgstr "" -#: ../../mod/admin.php:821 +#: ../../mod/admin.php:824 msgid "Service Class" msgstr "" -#: ../../mod/admin.php:823 +#: ../../mod/admin.php:826 msgid "" "Selected users will be deleted!\\n\\nEverything these users had posted on " "this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../mod/admin.php:824 +#: ../../mod/admin.php:827 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/admin.php:858 +#: ../../mod/admin.php:861 #, php-format msgid "%s channel censored/uncensored" msgid_plural "%s channels censored/uncensored" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:865 +#: ../../mod/admin.php:868 #, php-format msgid "%s channel deleted" msgid_plural "%s channels deleted" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:883 +#: ../../mod/admin.php:886 msgid "Channel not found" msgstr "" -#: ../../mod/admin.php:894 +#: ../../mod/admin.php:897 #, php-format msgid "Channel '%s' deleted" msgstr "" -#: ../../mod/admin.php:905 +#: ../../mod/admin.php:908 #, php-format msgid "Channel '%s' uncensored" msgstr "" -#: ../../mod/admin.php:905 +#: ../../mod/admin.php:908 #, php-format msgid "Channel '%s' censored" msgstr "" -#: ../../mod/admin.php:946 +#: ../../mod/admin.php:949 msgid "Censor" msgstr "" -#: ../../mod/admin.php:947 +#: ../../mod/admin.php:950 msgid "Uncensor" msgstr "" -#: ../../mod/admin.php:950 +#: ../../mod/admin.php:953 msgid "UID" msgstr "" -#: ../../mod/admin.php:952 +#: ../../mod/admin.php:955 msgid "" "Selected channels will be deleted!\\n\\nEverything that was posted in these " "channels on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../mod/admin.php:953 +#: ../../mod/admin.php:956 msgid "" "The channel {0} will be deleted!\\n\\nEverything that was posted in this " "channel on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../mod/admin.php:993 +#: ../../mod/admin.php:996 #, php-format msgid "Plugin %s disabled." msgstr "" -#: ../../mod/admin.php:997 +#: ../../mod/admin.php:1000 #, php-format msgid "Plugin %s enabled." msgstr "" -#: ../../mod/admin.php:1007 ../../mod/admin.php:1205 +#: ../../mod/admin.php:1010 ../../mod/admin.php:1208 msgid "Disable" msgstr "" -#: ../../mod/admin.php:1010 ../../mod/admin.php:1207 +#: ../../mod/admin.php:1013 ../../mod/admin.php:1210 msgid "Enable" msgstr "" -#: ../../mod/admin.php:1034 ../../mod/admin.php:1234 +#: ../../mod/admin.php:1037 ../../mod/admin.php:1237 msgid "Toggle" msgstr "" -#: ../../mod/admin.php:1042 ../../mod/admin.php:1244 +#: ../../mod/admin.php:1045 ../../mod/admin.php:1247 msgid "Author: " msgstr "" -#: ../../mod/admin.php:1043 ../../mod/admin.php:1245 +#: ../../mod/admin.php:1046 ../../mod/admin.php:1248 msgid "Maintainer: " msgstr "" -#: ../../mod/admin.php:1170 +#: ../../mod/admin.php:1173 msgid "No themes found." msgstr "" -#: ../../mod/admin.php:1226 +#: ../../mod/admin.php:1229 msgid "Screenshot" msgstr "" -#: ../../mod/admin.php:1273 +#: ../../mod/admin.php:1276 msgid "[Experimental]" msgstr "" -#: ../../mod/admin.php:1274 +#: ../../mod/admin.php:1277 msgid "[Unsupported]" msgstr "" -#: ../../mod/admin.php:1298 +#: ../../mod/admin.php:1301 msgid "Log settings updated." msgstr "" -#: ../../mod/admin.php:1353 +#: ../../mod/admin.php:1356 msgid "Clear" msgstr "" -#: ../../mod/admin.php:1359 +#: ../../mod/admin.php:1362 msgid "Debugging" msgstr "" -#: ../../mod/admin.php:1360 +#: ../../mod/admin.php:1363 msgid "Log file" msgstr "" -#: ../../mod/admin.php:1360 +#: ../../mod/admin.php:1363 msgid "" "Must be writable by web server. Relative to your Red top-level directory." msgstr "" -#: ../../mod/admin.php:1361 +#: ../../mod/admin.php:1364 msgid "Log level" msgstr "" -#: ../../mod/admin.php:1407 +#: ../../mod/admin.php:1410 msgid "New Profile Field" msgstr "" -#: ../../mod/admin.php:1408 ../../mod/admin.php:1428 +#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 msgid "Field nickname" msgstr "" -#: ../../mod/admin.php:1408 ../../mod/admin.php:1428 +#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 msgid "System name of field" msgstr "" -#: ../../mod/admin.php:1409 ../../mod/admin.php:1429 +#: ../../mod/admin.php:1412 ../../mod/admin.php:1432 msgid "Input type" msgstr "" -#: ../../mod/admin.php:1410 ../../mod/admin.php:1430 +#: ../../mod/admin.php:1413 ../../mod/admin.php:1433 msgid "Field Name" msgstr "" -#: ../../mod/admin.php:1410 ../../mod/admin.php:1430 +#: ../../mod/admin.php:1413 ../../mod/admin.php:1433 msgid "Label on profile pages" msgstr "" -#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 +#: ../../mod/admin.php:1414 ../../mod/admin.php:1434 msgid "Help text" msgstr "" -#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 +#: ../../mod/admin.php:1414 ../../mod/admin.php:1434 msgid "Additional info (optional)" msgstr "" -#: ../../mod/admin.php:1421 +#: ../../mod/admin.php:1424 msgid "Field definition not found" msgstr "" -#: ../../mod/admin.php:1427 +#: ../../mod/admin.php:1430 msgid "Edit Profile Field" msgstr "" @@ -8388,30 +8402,6 @@ msgstr "" msgid "Please login." msgstr "" -#: ../../mod/network.php:90 -msgid "No such group" -msgstr "" - -#: ../../mod/network.php:128 -msgid "Search Results For:" -msgstr "" - -#: ../../mod/network.php:182 -msgid "Collection is empty" -msgstr "" - -#: ../../mod/network.php:190 -msgid "Collection: " -msgstr "" - -#: ../../mod/network.php:203 -msgid "Connection: " -msgstr "" - -#: ../../mod/network.php:206 -msgid "Invalid connection." -msgstr "" - #: ../../mod/new_channel.php:109 msgid "Add a Channel" msgstr "" @@ -8519,6 +8509,34 @@ msgstr "" msgid "posted an event" msgstr "" +#: ../../mod/network.php:91 +msgid "No such group" +msgstr "" + +#: ../../mod/network.php:129 +msgid "No such channel" +msgstr "" + +#: ../../mod/network.php:143 +msgid "Search Results For:" +msgstr "" + +#: ../../mod/network.php:198 +msgid "Collection is empty" +msgstr "" + +#: ../../mod/network.php:207 +msgid "Collection: " +msgstr "" + +#: ../../mod/network.php:226 +msgid "Connection: " +msgstr "" + +#: ../../mod/network.php:233 +msgid "Invalid connection." +msgstr "" + #: ../../mod/bookmarks.php:38 msgid "Bookmark added" msgstr "" @@ -8531,7 +8549,7 @@ msgstr "" msgid "My Connections Bookmarks" msgstr "" -#: ../../mod/channel.php:92 +#: ../../mod/channel.php:97 msgid "Insufficient permissions. Request redirected to profile page." msgstr "" @@ -8553,15 +8571,19 @@ msgstr "" msgid "No service class restrictions found." msgstr "" -#: ../../mod/sharedwithme.php:99 +#: ../../mod/sharedwithme.php:94 msgid "Files: shared with me" msgstr "" -#: ../../mod/sharedwithme.php:103 +#: ../../mod/sharedwithme.php:96 +msgid "NEW" +msgstr "" + +#: ../../mod/sharedwithme.php:99 msgid "Remove all files" msgstr "" -#: ../../mod/sharedwithme.php:104 +#: ../../mod/sharedwithme.php:100 msgid "Remove this file" msgstr "" @@ -8836,6 +8858,58 @@ msgstr "" msgid "Set size of followup author photos" msgstr "" +#: ../../randpost/randpost.php:96 +msgid "You're welcome." +msgstr "" + +#: ../../randpost/randpost.php:97 +msgid "Ah shucks..." +msgstr "" + +#: ../../randpost/randpost.php:98 +msgid "Don't mention it." +msgstr "" + +#: ../../randpost/randpost.php:99 +msgid "<blush>" +msgstr "" + +#: ../../wppost/wppost.php:43 +msgid "Post to WordPress" +msgstr "" + +#: ../../wppost/wppost.php:80 +msgid "Enable WordPress Post Plugin" +msgstr "" + +#: ../../wppost/wppost.php:84 +msgid "WordPress username" +msgstr "" + +#: ../../wppost/wppost.php:88 +msgid "WordPress password" +msgstr "" + +#: ../../wppost/wppost.php:92 +msgid "WordPress API URL" +msgstr "" + +#: ../../wppost/wppost.php:96 +msgid "Post to WordPress by default" +msgstr "" + +#: ../../wppost/wppost.php:100 +msgid "Forward comments (requires post_to_red plugin)" +msgstr "" + +#: ../../wppost/wppost.php:104 +msgid "WordPress Post Settings" +msgstr "" + +#: ../../wppost/wppost.php:119 +msgid "Wordpress Settings saved." +msgstr "" + #: ../../boot.php:1357 #, php-format msgid "Update %s failed. See error logs." diff --git a/version.inc b/version.inc index 35d00274e..378e67747 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2015-03-21.978 +2015-03-30.987 diff --git a/view/css/conversation.css b/view/css/conversation.css index 591a4e767..dced812b7 100644 --- a/view/css/conversation.css +++ b/view/css/conversation.css @@ -11,16 +11,19 @@ code { .jothidden input { border: 0px; margin: 0px; - padding: 8px; height: 39px; - width: 70%; - margin-bottom: 5px; + width: 100%; } .jothidden { display:none; } +#jot-title-wrap input { + padding: 8px; + margin-bottom: 5px; +} + #profile-jot-text { height: 39px; padding: 8px; diff --git a/view/css/mod_events.css b/view/css/mod_events.css index f57c06a9d..f2ffb9a2e 100644 --- a/view/css/mod_events.css +++ b/view/css/mod_events.css @@ -8,23 +8,33 @@ float: left; } -#event-summary, #start_text, #finish_text { - width: 300px; +#event-summary, #start_text { + width: 95%; float: left; } +#finish_text { + width: 100%; + float: left; +} + + #event-category-wrap { margin-top: 15px; } .event-cats { margin-top: 15px; - width: 400px; +} + +.bootstrap-tagsinput { + width: 100%; } .required { float: left; + cursor: default; } #event-datetime-break { @@ -40,4 +50,4 @@ #event-edit-preview-btn { margin-right: 15px; -}
\ No newline at end of file +} diff --git a/view/css/mod_sharedwithme.css b/view/css/mod_sharedwithme.css index 79fe0d7a9..8bf626deb 100644 --- a/view/css/mod_sharedwithme.css +++ b/view/css/mod_sharedwithme.css @@ -21,4 +21,3 @@ .cloud-index-tool { padding: 7px 10px; } - diff --git a/view/js/main.js b/view/js/main.js index d86b74345..b9fb9f85e 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -275,7 +275,7 @@ $(function() { }); /* setup field_richtext */ - setupFieldRichtext(); + //setupFieldRichtext(); /* Turn elements with one of our special rel tags into popup menus */ @@ -616,12 +616,20 @@ function updateConvItems(mode,data) { function collapseHeight() { $(".wall-item-body, .contact-info").each(function() { - if($(this).height() > divmore_height + 10) { + var orgHeight = $(this).height(); + if(orgHeight > divmore_height + 10) { if(! $(this).hasClass('divmore')) { $(this).readmore({ collapsedHeight: divmore_height, moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>', - lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>' + lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>', + beforeToggle: function(trigger, element, expanded) { + if(expanded) { + if((($(element).offset().top + divmore_height) - $(window).scrollTop()) < 65 ) { + $('html, body').animate( { scrollTop: $(window).scrollTop() - (orgHeight - divmore_height) }, {duration: 100 } ); + } + } + } }); $(this).addClass('divmore'); } @@ -666,8 +674,10 @@ function liveUpdate() { else update_mode = 'append'; } - else + else { update_mode = 'update'; + var orgHeight = $("#region_2").height(); + } $.get(update_url, function(data) { page_load = false; @@ -676,6 +686,10 @@ function liveUpdate() { $("#page-spinner").spin(false); $("#profile-jot-text-loading").spin(false); + if(update_mode === 'update') { + $(window).scrollTop($(window).scrollTop() + $("#region_2").height() - orgHeight); + } + in_progress = false; // FIXME - the following lines were added so that almost @@ -1046,9 +1060,9 @@ function fcFileBrowser (field_name, url, type, win) { return false; } -function setupFieldRichtext(){ - return; /* +function setupFieldRichtext(){ + tinyMCE.init({ theme : "advanced", mode : "specific_textareas", @@ -1072,9 +1086,9 @@ function setupFieldRichtext(){ theme_advanced_path : false, file_browser_callback : "fcFileBrowser", }); -*/ -} +} +*/ /** * sprintf in javascript @@ -1340,4 +1354,4 @@ function zid(s) { s = s + achar + 'f=&zid=' + zid; return s; -}
\ No newline at end of file +} diff --git a/view/nb-no/messages.po b/view/nb-no/messages.po index a2f67253f..1ab598252 100644 --- a/view/nb-no/messages.po +++ b/view/nb-no/messages.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the Red package. # # Translators: -# Haakon Meland Eriksen <haakon.eriksen@far.no>, 2013-2014 +# Haakon Meland Eriksen <haakon.eriksen@far.no>, 2013-2015 msgid "" msgstr "" "Project-Id-Version: Red Matrix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-14 00:04-0800\n" -"PO-Revision-Date: 2014-11-22 11:05+0000\n" +"POT-Creation-Date: 2015-03-20 00:03-0700\n" +"PO-Revision-Date: 2015-03-25 13:13+0000\n" "Last-Translator: Haakon Meland Eriksen <haakon.eriksen@far.no>\n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/red-matrix/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,673 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../include/dba/dba_driver.php:132 +#: ../../include/dba/dba_driver.php:141 #, php-format msgid "Cannot locate DNS info for database server '%s'" msgstr "Kan ikke finne DNS-informasjon om databasetjener '%s'" -#: ../../include/photo/photo_driver.php:680 ../../include/photos.php:52 -#: ../../mod/photos.php:91 ../../mod/photos.php:654 -#: ../../mod/profile_photo.php:142 ../../mod/profile_photo.php:301 -#: ../../mod/profile_photo.php:423 +#: ../../include/photo/photo_driver.php:687 ../../mod/profile_photo.php:143 +#: ../../mod/profile_photo.php:302 ../../mod/profile_photo.php:424 +#: ../../mod/photos.php:91 ../../mod/photos.php:625 msgid "Profile Photos" msgstr "Profilbilder" -#: ../../include/conversation.php:120 ../../include/diaspora.php:1923 -#: ../../include/text.php:1747 ../../mod/subthread.php:72 -#: ../../mod/subthread.php:174 ../../mod/tagger.php:45 ../../mod/like.php:298 +#: ../../include/security.php:349 +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 "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn." + +#: ../../include/notify.php:23 +msgid "created a new post" +msgstr "laget et nytt innlegg" + +#: ../../include/notify.php:24 +#, php-format +msgid "commented on %s's post" +msgstr "kommenterte på %s sitt innlegg" + +#: ../../include/group.php:26 +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 "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn." + +#: ../../include/group.php:235 +msgid "Default privacy group for new contacts" +msgstr "Standard personverngruppe for nye kontakter" + +#: ../../include/group.php:254 ../../mod/admin.php:821 +msgid "All Channels" +msgstr "Alle kanaler" + +#: ../../include/group.php:276 +msgid "edit" +msgstr "endre" + +#: ../../include/group.php:298 +msgid "Collections" +msgstr "Samlinger" + +#: ../../include/group.php:299 +msgid "Edit collection" +msgstr "Endre samling" + +#: ../../include/group.php:300 +msgid "Create a new collection" +msgstr "Lag en ny samling" + +#: ../../include/group.php:301 +msgid "Channels not in any collection" +msgstr "Kanaler som ikke er i noen samling" + +#: ../../include/group.php:303 ../../include/widgets.php:275 +msgid "add" +msgstr "legg til" + +#: ../../include/bbcode.php:115 ../../include/bbcode.php:694 +#: ../../include/bbcode.php:697 ../../include/bbcode.php:702 +#: ../../include/bbcode.php:705 ../../include/bbcode.php:708 +#: ../../include/bbcode.php:711 ../../include/bbcode.php:716 +#: ../../include/bbcode.php:719 ../../include/bbcode.php:724 +#: ../../include/bbcode.php:727 ../../include/bbcode.php:730 +#: ../../include/bbcode.php:733 +msgid "Image/photo" +msgstr "Bilde/fotografi" + +#: ../../include/bbcode.php:150 ../../include/bbcode.php:744 +msgid "Encrypted content" +msgstr "Kryptert innhold" + +#: ../../include/bbcode.php:168 +msgid "Install design element: " +msgstr "Installer designelement:" + +#: ../../include/bbcode.php:174 +msgid "QR code" +msgstr "QR-kode" + +#: ../../include/bbcode.php:223 +#, php-format +msgid "%1$s wrote the following %2$s %3$s" +msgstr "%1$s skrev følgende %2$s %3$s" + +#: ../../include/bbcode.php:225 +msgid "post" +msgstr "innlegg" + +#: ../../include/bbcode.php:447 +msgid "Different viewers will see this text differently" +msgstr "Denne teksten vil se forskjellig ut for ulike besøkende" + +#: ../../include/bbcode.php:662 +msgid "$1 spoiler" +msgstr "$1 avsløring" + +#: ../../include/bbcode.php:682 +msgid "$1 wrote:" +msgstr "$1 skrev:" + +#: ../../include/identity.php:31 ../../mod/item.php:1078 +msgid "Unable to obtain identity information from database" +msgstr "Klarer ikke å få tak i identitetsinformasjon fra databasen" + +#: ../../include/identity.php:66 +msgid "Empty name" +msgstr "Mangler navn" + +#: ../../include/identity.php:68 +msgid "Name too long" +msgstr "Navnet er for langt" + +#: ../../include/identity.php:169 +msgid "No account identifier" +msgstr "Ingen kontoidentifikator" + +#: ../../include/identity.php:182 +msgid "Nickname is required." +msgstr "Kallenavn er påkrevd." + +#: ../../include/identity.php:196 +msgid "Reserved nickname. Please choose another." +msgstr "Reservert kallenavn. Vennligst velg et annet." + +#: ../../include/identity.php:201 ../../include/dimport.php:34 +msgid "" +"Nickname has unsupported characters or is already being used on this site." +msgstr "Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk på dette nettstedet." + +#: ../../include/identity.php:283 +msgid "Unable to retrieve created identity" +msgstr "Klarer ikke å hente den lagede identiteten" + +#: ../../include/identity.php:343 +msgid "Default Profile" +msgstr "Standardprofil" + +#: ../../include/identity.php:387 ../../include/identity.php:388 +#: ../../include/identity.php:395 ../../include/widgets.php:430 +#: ../../include/profile_selectors.php:80 ../../mod/settings.php:339 +#: ../../mod/settings.php:343 ../../mod/settings.php:344 +#: ../../mod/settings.php:347 ../../mod/settings.php:358 +#: ../../mod/connedit.php:567 +msgid "Friends" +msgstr "Venner" + +#: ../../include/identity.php:643 +msgid "Requested channel is not available." +msgstr "Forespurt kanal er ikke tilgjengelig." + +#: ../../include/identity.php:691 ../../mod/profile.php:16 +#: ../../mod/achievements.php:11 ../../mod/blocks.php:29 +#: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/editlayout.php:28 +#: ../../mod/editwebpage.php:28 ../../mod/filestorage.php:53 +#: ../../mod/webpages.php:29 ../../mod/editblock.php:29 +#: ../../mod/layouts.php:29 +msgid "Requested profile is not available." +msgstr "Forespurt profil er ikke tilgjengelig." + +#: ../../include/identity.php:842 ../../include/widgets.php:136 +#: ../../include/widgets.php:175 ../../include/conversation.php:940 +#: ../../include/Contact.php:107 ../../mod/match.php:62 +#: ../../mod/directory.php:291 ../../mod/suggest.php:51 +msgid "Connect" +msgstr "Koble" + +#: ../../include/identity.php:856 ../../mod/profiles.php:774 +msgid "Change profile photo" +msgstr "Endre profilbilde" + +#: ../../include/identity.php:863 +msgid "Profiles" +msgstr "Profiler" + +#: ../../include/identity.php:863 +msgid "Manage/edit profiles" +msgstr "Håndtere/endre profiler" + +#: ../../include/identity.php:864 ../../mod/profiles.php:775 +msgid "Create New Profile" +msgstr "Lag ny profil" + +#: ../../include/identity.php:867 ../../include/nav.php:95 +msgid "Edit Profile" +msgstr "Endre profil" + +#: ../../include/identity.php:880 ../../mod/profiles.php:786 +msgid "Profile Image" +msgstr "Profilbilde" + +#: ../../include/identity.php:883 +msgid "visible to everybody" +msgstr "synlig for alle" + +#: ../../include/identity.php:884 ../../mod/profiles.php:669 +#: ../../mod/profiles.php:790 +msgid "Edit visibility" +msgstr "Endre synlighet" + +#: ../../include/identity.php:896 ../../include/bb2diaspora.php:450 +#: ../../include/event.php:40 ../../mod/events.php:645 +#: ../../mod/directory.php:223 +msgid "Location:" +msgstr "Plassering:" + +#: ../../include/identity.php:900 ../../include/identity.php:1142 +msgid "Gender:" +msgstr "Kjønn:" + +#: ../../include/identity.php:901 ../../include/identity.php:1186 +msgid "Status:" +msgstr "Status:" + +#: ../../include/identity.php:902 ../../include/identity.php:1197 +msgid "Homepage:" +msgstr "Hjemmeside:" + +#: ../../include/identity.php:903 +msgid "Online Now" +msgstr "Online nå" + +#: ../../include/identity.php:986 ../../include/identity.php:1066 +#: ../../mod/ping.php:324 +msgid "g A l F d" +msgstr "g A l F d" + +#: ../../include/identity.php:987 ../../include/identity.php:1067 +msgid "F d" +msgstr "F d" + +#: ../../include/identity.php:1032 ../../include/identity.php:1107 +#: ../../mod/ping.php:346 +msgid "[today]" +msgstr "[idag]" + +#: ../../include/identity.php:1044 +msgid "Birthday Reminders" +msgstr "Fødselsdagspåminnnelser" + +#: ../../include/identity.php:1045 +msgid "Birthdays this week:" +msgstr "Fødselsdager denne uken:" + +#: ../../include/identity.php:1100 +msgid "[No description]" +msgstr "[Ingen beskrivelse]" + +#: ../../include/identity.php:1118 +msgid "Event Reminders" +msgstr "Hendelsespåminnelser" + +#: ../../include/identity.php:1119 +msgid "Events this week:" +msgstr "Hendelser denne uken:" + +#: ../../include/identity.php:1132 ../../include/identity.php:1249 +#: ../../include/apps.php:138 ../../mod/profperm.php:112 +msgid "Profile" +msgstr "Profil" + +#: ../../include/identity.php:1140 ../../mod/settings.php:1045 +msgid "Full Name:" +msgstr "Fullt navn:" + +#: ../../include/identity.php:1147 +msgid "Like this channel" +msgstr "Lik denne kanalen" + +#: ../../include/identity.php:1158 ../../include/conversation.php:1692 +#: ../../include/ItemObject.php:179 ../../include/taxonomy.php:391 +#: ../../mod/photos.php:1007 +msgctxt "noun" +msgid "Like" +msgid_plural "Likes" +msgstr[0] "Liker" +msgstr[1] "Liker" + +#: ../../include/identity.php:1171 +msgid "j F, Y" +msgstr "j F, Y" + +#: ../../include/identity.php:1172 +msgid "j F" +msgstr "j F" + +#: ../../include/identity.php:1179 +msgid "Birthday:" +msgstr "Fødselsdag:" + +#: ../../include/identity.php:1183 +msgid "Age:" +msgstr "Alder:" + +#: ../../include/identity.php:1192 +#, php-format +msgid "for %1$d %2$s" +msgstr "for %1$d %2$s" + +#: ../../include/identity.php:1195 ../../mod/profiles.php:691 +msgid "Sexual Preference:" +msgstr "Seksuell preferanse:" + +#: ../../include/identity.php:1199 ../../mod/profiles.php:693 +msgid "Hometown:" +msgstr "Hjemby:" + +#: ../../include/identity.php:1201 +msgid "Tags:" +msgstr "Merkelapper:" + +#: ../../include/identity.php:1203 ../../mod/profiles.php:694 +msgid "Political Views:" +msgstr "Politiske synspunkter:" + +#: ../../include/identity.php:1205 +msgid "Religion:" +msgstr "Religion:" + +#: ../../include/identity.php:1207 +msgid "About:" +msgstr "Om:" + +#: ../../include/identity.php:1209 +msgid "Hobbies/Interests:" +msgstr "Hobbyer/interesser:" + +#: ../../include/identity.php:1211 ../../mod/profiles.php:697 +msgid "Likes:" +msgstr "Liker:" + +#: ../../include/identity.php:1213 ../../mod/profiles.php:698 +msgid "Dislikes:" +msgstr "Misliker:" + +#: ../../include/identity.php:1215 +msgid "Contact information and Social Networks:" +msgstr "Kontaktinformasjon og sosiale nettverk:" + +#: ../../include/identity.php:1217 +msgid "My other channels:" +msgstr "Mine andre kanaler:" + +#: ../../include/identity.php:1219 +msgid "Musical interests:" +msgstr "Musikkinteresse:" + +#: ../../include/identity.php:1221 +msgid "Books, literature:" +msgstr "Bøker, litteratur:" + +#: ../../include/identity.php:1223 +msgid "Television:" +msgstr "TV:" + +#: ../../include/identity.php:1225 +msgid "Film/dance/culture/entertainment:" +msgstr "Film/dans/kultur/underholdning:" + +#: ../../include/identity.php:1227 +msgid "Love/Romance:" +msgstr "Kjærlighet/romantikk:" + +#: ../../include/identity.php:1229 +msgid "Work/employment:" +msgstr "Arbeid/sysselsetting:" + +#: ../../include/identity.php:1231 +msgid "School/education:" +msgstr "Skole/utdannelse:" + +#: ../../include/identity.php:1251 +msgid "Like this thing" +msgstr "Lik denne tingen" + +#: ../../include/page_widgets.php:6 +msgid "New Page" +msgstr "Ny side" + +#: ../../include/page_widgets.php:8 ../../include/page_widgets.php:36 +#: ../../include/RedDAV/RedBrowser.php:267 ../../include/ItemObject.php:100 +#: ../../include/apps.php:254 ../../include/menu.php:42 +#: ../../mod/settings.php:644 ../../mod/blocks.php:132 +#: ../../mod/connections.php:382 ../../mod/connections.php:395 +#: ../../mod/connections.php:414 ../../mod/thing.php:233 +#: ../../mod/editlayout.php:139 ../../mod/editwebpage.php:174 +#: ../../mod/editpost.php:113 ../../mod/menu.php:78 ../../mod/webpages.php:162 +#: ../../mod/editblock.php:143 ../../mod/layouts.php:167 +msgid "Edit" +msgstr "Endre" + +#: ../../include/page_widgets.php:39 ../../mod/blocks.php:135 +#: ../../mod/webpages.php:165 ../../mod/layouts.php:171 +msgid "View" +msgstr "Vis" + +#: ../../include/page_widgets.php:40 ../../include/conversation.php:1152 +#: ../../include/ItemObject.php:677 ../../mod/events.php:651 +#: ../../mod/webpages.php:166 ../../mod/photos.php:970 +msgid "Preview" +msgstr "Forhåndsvisning" + +#: ../../include/page_widgets.php:41 ../../mod/webpages.php:167 +msgid "Actions" +msgstr "Handlinger" + +#: ../../include/page_widgets.php:42 ../../mod/webpages.php:168 +msgid "Page Link" +msgstr "Sidelenke" + +#: ../../include/page_widgets.php:43 ../../mod/webpages.php:169 +msgid "Title" +msgstr "Tittel" + +#: ../../include/page_widgets.php:44 ../../mod/webpages.php:170 +msgid "Created" +msgstr "Laget" + +#: ../../include/page_widgets.php:45 ../../mod/webpages.php:171 +msgid "Edited" +msgstr "Endret" + +#: ../../include/widgets.php:35 ../../include/taxonomy.php:264 +#: ../../include/contact_widgets.php:92 +msgid "Categories" +msgstr "Kategorier" + +#: ../../include/widgets.php:91 ../../include/nav.php:163 +#: ../../mod/apps.php:34 +msgid "Apps" +msgstr "Apper" + +#: ../../include/widgets.php:92 +msgid "System" +msgstr "System" + +#: ../../include/widgets.php:94 ../../include/conversation.php:1498 +msgid "Personal" +msgstr "Personlig" + +#: ../../include/widgets.php:95 +msgid "Create Personal App" +msgstr "Lag personlig app" + +#: ../../include/widgets.php:96 +msgid "Edit Personal App" +msgstr "Endre personlig app" + +#: ../../include/widgets.php:138 ../../mod/suggest.php:53 +msgid "Ignore/Hide" +msgstr "Ignorer/Skjul" + +#: ../../include/widgets.php:143 ../../mod/connections.php:268 +msgid "Suggestions" +msgstr "Forslag" + +#: ../../include/widgets.php:144 +msgid "See more..." +msgstr "Se mer..." + +#: ../../include/widgets.php:166 +#, php-format +msgid "You have %1$.0f of %2$.0f allowed connections." +msgstr "Du har %1$.0f av %2$.0f tillate forbindelser." + +#: ../../include/widgets.php:172 +msgid "Add New Connection" +msgstr "Legg til ny forbindelse" + +#: ../../include/widgets.php:173 +msgid "Enter the channel address" +msgstr "Skriv kanal-adressen" + +#: ../../include/widgets.php:174 +msgid "Example: bob@example.com, http://example.com/barbara" +msgstr "Eksempel: ola.nordmann@eksempel.no, http://eksempel.no/karinordmann" + +#: ../../include/widgets.php:190 +msgid "Notes" +msgstr "Merknader" + +#: ../../include/widgets.php:192 ../../include/text.php:833 +#: ../../include/text.php:845 ../../mod/rbmark.php:28 ../../mod/rbmark.php:98 +#: ../../mod/filer.php:50 ../../mod/admin.php:1412 ../../mod/admin.php:1432 +msgid "Save" +msgstr "Lagre" + +#: ../../include/widgets.php:266 +msgid "Remove term" +msgstr "Fjern begrep" + +#: ../../include/widgets.php:274 ../../include/features.php:73 +msgid "Saved Searches" +msgstr "Lagrede søk" + +#: ../../include/widgets.php:304 ../../include/features.php:85 +#: ../../include/contact_widgets.php:57 +msgid "Saved Folders" +msgstr "Lagrede mapper" + +#: ../../include/widgets.php:307 ../../include/contact_widgets.php:60 +#: ../../include/contact_widgets.php:95 +msgid "Everything" +msgstr "Alt" + +#: ../../include/widgets.php:349 +msgid "Archives" +msgstr "Arkiv" + +#: ../../include/widgets.php:427 +msgid "Refresh" +msgstr "Forny" + +#: ../../include/widgets.php:428 ../../mod/connedit.php:563 +msgid "Me" +msgstr "Meg" + +#: ../../include/widgets.php:429 ../../mod/connedit.php:566 +msgid "Best Friends" +msgstr "Bestevenner" + +#: ../../include/widgets.php:431 +msgid "Co-workers" +msgstr "Medarbeidere" + +#: ../../include/widgets.php:432 ../../mod/connedit.php:568 +msgid "Former Friends" +msgstr "Tidligere venner" + +#: ../../include/widgets.php:433 ../../mod/connedit.php:569 +msgid "Acquaintances" +msgstr "Bekjente" + +#: ../../include/widgets.php:434 +msgid "Everybody" +msgstr "Alle" + +#: ../../include/widgets.php:468 +msgid "Account settings" +msgstr "Kontoinnstillinger" + +#: ../../include/widgets.php:474 +msgid "Channel settings" +msgstr "Kanalinnstillinger" + +#: ../../include/widgets.php:480 +msgid "Additional features" +msgstr "Tilleggsfunksjoner" + +#: ../../include/widgets.php:486 +msgid "Feature/Addon settings" +msgstr "Funksjons-/Tilleggsinnstillinger" + +#: ../../include/widgets.php:492 +msgid "Display settings" +msgstr "Visningsinnstillinger" + +#: ../../include/widgets.php:498 +msgid "Connected apps" +msgstr "Tilkoblede app-er" + +#: ../../include/widgets.php:504 +msgid "Export channel" +msgstr "Eksporter kanal" + +#: ../../include/widgets.php:513 ../../mod/connedit.php:627 +msgid "Connection Default Permissions" +msgstr "Forbindelsens standard tillatelser" + +#: ../../include/widgets.php:521 +msgid "Premium Channel Settings" +msgstr "Premiumkanal-innstillinger" + +#: ../../include/widgets.php:529 ../../include/features.php:62 +#: ../../mod/sources.php:88 +msgid "Channel Sources" +msgstr "Kanalkilder" + +#: ../../include/widgets.php:537 ../../include/nav.php:208 +#: ../../include/apps.php:134 ../../mod/admin.php:1035 +#: ../../mod/admin.php:1235 +msgid "Settings" +msgstr "Innstillinger" + +#: ../../include/widgets.php:550 ../../mod/message.php:31 +#: ../../mod/mail.php:128 +msgid "Messages" +msgstr "Meldinger" + +#: ../../include/widgets.php:553 +msgid "Check Mail" +msgstr "Sjekk meldinger" + +#: ../../include/widgets.php:558 ../../include/nav.php:199 +msgid "New Message" +msgstr "Ny melding" + +#: ../../include/widgets.php:633 +msgid "Chat Rooms" +msgstr "Chatrom" + +#: ../../include/widgets.php:653 +msgid "Bookmarked Chatrooms" +msgstr "Bokmerkede chatrom" + +#: ../../include/widgets.php:673 +msgid "Suggested Chatrooms" +msgstr "Foreslåtte chatrom" + +#: ../../include/widgets.php:800 ../../include/widgets.php:858 +msgid "photo/image" +msgstr "foto/bilde" + +#: ../../include/widgets.php:953 ../../include/widgets.php:955 +msgid "Rate Me" +msgstr "Vurder meg" + +#: ../../include/widgets.php:959 +msgid "View Ratings" +msgstr "Vis vurderinger" + +#: ../../include/widgets.php:970 +msgid "Public Hubs" +msgstr "Offentlige huber" + +#: ../../include/conversation.php:120 ../../include/text.php:1747 +#: ../../include/diaspora.php:2030 ../../mod/like.php:335 +#: ../../mod/subthread.php:72 ../../mod/subthread.php:174 +#: ../../mod/tagger.php:43 msgid "photo" msgstr "foto" #: ../../include/conversation.php:123 ../../include/text.php:1750 -#: ../../mod/tagger.php:49 +#: ../../mod/like.php:337 ../../mod/tagger.php:47 msgid "event" msgstr "hendelse" -#: ../../include/conversation.php:126 ../../mod/like.php:89 +#: ../../include/conversation.php:126 ../../mod/like.php:113 msgid "channel" msgstr "kanal" -#: ../../include/conversation.php:148 ../../include/diaspora.php:1923 -#: ../../include/text.php:1753 ../../mod/subthread.php:72 -#: ../../mod/subthread.php:174 ../../mod/tagger.php:53 ../../mod/like.php:298 +#: ../../include/conversation.php:148 ../../include/text.php:1753 +#: ../../include/diaspora.php:2030 ../../mod/like.php:335 +#: ../../mod/subthread.php:72 ../../mod/subthread.php:174 +#: ../../mod/tagger.php:51 msgid "status" msgstr "status" #: ../../include/conversation.php:150 ../../include/text.php:1755 -#: ../../mod/tagger.php:55 +#: ../../mod/tagger.php:53 msgid "comment" msgstr "kommentar" -#: ../../include/conversation.php:164 ../../include/diaspora.php:1952 -#: ../../mod/like.php:344 +#: ../../include/conversation.php:164 ../../include/diaspora.php:2059 +#: ../../mod/like.php:383 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s liker %2$s sin %3$s" -#: ../../include/conversation.php:167 ../../mod/like.php:346 +#: ../../include/conversation.php:167 ../../mod/like.php:385 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s liker ikke %2$s sin %3$s" @@ -77,7 +699,7 @@ msgstr "%1$s er nå forbundet med %2$s" msgid "%1$s poked %2$s" msgstr "%1$s prikket %2$s" -#: ../../include/conversation.php:243 ../../include/text.php:905 +#: ../../include/conversation.php:243 ../../include/text.php:911 msgid "poked" msgstr "prikket" @@ -87,886 +709,934 @@ msgctxt "mood" msgid "%1$s is %2$s" msgstr "%1$s er %2$s" -#: ../../include/conversation.php:637 ../../include/ItemObject.php:126 +#: ../../include/conversation.php:556 ../../mod/photos.php:984 +msgctxt "title" +msgid "Likes" +msgstr "Liker" + +#: ../../include/conversation.php:556 ../../mod/photos.php:984 +msgctxt "title" +msgid "Dislikes" +msgstr "Liker ikke" + +#: ../../include/conversation.php:557 ../../mod/photos.php:985 +msgctxt "title" +msgid "Agree" +msgstr "Enig" + +#: ../../include/conversation.php:557 ../../mod/photos.php:985 +msgctxt "title" +msgid "Disagree" +msgstr "Uenig" + +#: ../../include/conversation.php:557 ../../mod/photos.php:985 +msgctxt "title" +msgid "Abstain" +msgstr "Avstår" + +#: ../../include/conversation.php:558 ../../mod/photos.php:986 +msgctxt "title" +msgid "Attending" +msgstr "Deltar" + +#: ../../include/conversation.php:558 ../../mod/photos.php:986 +msgctxt "title" +msgid "Not attending" +msgstr "Deltar ikke" + +#: ../../include/conversation.php:558 ../../mod/photos.php:986 +msgctxt "title" +msgid "Might attend" +msgstr "Deltar kanskje" + +#: ../../include/conversation.php:644 ../../include/ItemObject.php:126 msgid "Select" msgstr "Velg" -#: ../../include/conversation.php:638 ../../include/RedDAV/RedBrowser.php:251 -#: ../../include/apps.php:250 ../../include/ItemObject.php:120 -#: ../../mod/photos.php:1069 ../../mod/connedit.php:476 -#: ../../mod/thing.php:234 ../../mod/settings.php:612 ../../mod/group.php:176 -#: ../../mod/admin.php:730 ../../mod/admin.php:861 +#: ../../include/conversation.php:645 ../../include/RedDAV/RedBrowser.php:268 +#: ../../include/ItemObject.php:120 ../../include/apps.php:255 +#: ../../mod/settings.php:645 ../../mod/connedit.php:533 +#: ../../mod/group.php:176 ../../mod/thing.php:234 ../../mod/admin.php:816 +#: ../../mod/admin.php:945 ../../mod/photos.php:1050 msgid "Delete" msgstr "Slett" -#: ../../include/conversation.php:645 ../../include/ItemObject.php:89 +#: ../../include/conversation.php:652 ../../include/ItemObject.php:89 msgid "Private Message" msgstr "Privat melding" -#: ../../include/conversation.php:652 ../../include/ItemObject.php:194 +#: ../../include/conversation.php:659 ../../include/ItemObject.php:227 msgid "Message signature validated" msgstr "Innleggets signatur er bekreftet" -#: ../../include/conversation.php:653 ../../include/ItemObject.php:195 +#: ../../include/conversation.php:660 ../../include/ItemObject.php:228 msgid "Message signature incorrect" msgstr "Innleggets signatur er feil" -#: ../../include/conversation.php:674 +#: ../../include/conversation.php:680 #, php-format msgid "View %s's profile @ %s" msgstr "Vis %s sin profile @ %s" -#: ../../include/conversation.php:689 +#: ../../include/conversation.php:695 msgid "Categories:" msgstr "Kategorier:" -#: ../../include/conversation.php:690 +#: ../../include/conversation.php:696 msgid "Filed under:" msgstr "Sortert under:" -#: ../../include/conversation.php:698 ../../include/ItemObject.php:265 +#: ../../include/conversation.php:704 ../../include/ItemObject.php:312 #, php-format msgid " from %s" msgstr "fra %s" -#: ../../include/conversation.php:701 ../../include/ItemObject.php:268 +#: ../../include/conversation.php:707 ../../include/ItemObject.php:315 #, php-format msgid "last edited: %s" msgstr "sist endret: %s" -#: ../../include/conversation.php:702 ../../include/ItemObject.php:269 +#: ../../include/conversation.php:708 ../../include/ItemObject.php:316 #, php-format msgid "Expires: %s" msgstr "Utløper: %s" -#: ../../include/conversation.php:717 +#: ../../include/conversation.php:723 msgid "View in context" msgstr "Vis i sammenheng" -#: ../../include/conversation.php:719 ../../include/conversation.php:1153 -#: ../../include/ItemObject.php:310 ../../mod/photos.php:977 -#: ../../mod/editblock.php:152 ../../mod/editlayout.php:148 -#: ../../mod/editpost.php:121 ../../mod/editwebpage.php:183 -#: ../../mod/mail.php:234 ../../mod/mail.php:349 +#: ../../include/conversation.php:725 ../../include/conversation.php:1203 +#: ../../include/ItemObject.php:364 ../../mod/editlayout.php:153 +#: ../../mod/editwebpage.php:188 ../../mod/editpost.php:130 +#: ../../mod/editblock.php:157 ../../mod/photos.php:950 ../../mod/mail.php:241 +#: ../../mod/mail.php:356 msgid "Please wait" msgstr "Vennligst vent" -#: ../../include/conversation.php:843 +#: ../../include/conversation.php:838 msgid "remove" msgstr "fjern" -#: ../../include/conversation.php:847 ../../include/nav.php:257 +#: ../../include/conversation.php:842 ../../include/nav.php:247 msgid "Loading..." msgstr "Laster..." -#: ../../include/conversation.php:848 +#: ../../include/conversation.php:843 msgid "Delete Selected Items" msgstr "Slett valgte elementer" -#: ../../include/conversation.php:942 +#: ../../include/conversation.php:934 msgid "View Source" msgstr "Vis kilde" -#: ../../include/conversation.php:943 +#: ../../include/conversation.php:935 msgid "Follow Thread" msgstr "Følg tråd" -#: ../../include/conversation.php:944 +#: ../../include/conversation.php:936 msgid "View Status" msgstr "Vis status" -#: ../../include/conversation.php:945 ../../include/nav.php:99 -#: ../../mod/connedit.php:429 ../../mod/connedit.php:544 +#: ../../include/conversation.php:937 ../../include/nav.php:91 +#: ../../mod/connedit.php:484 ../../mod/connedit.php:634 msgid "View Profile" msgstr "Vis profil" -#: ../../include/conversation.php:946 +#: ../../include/conversation.php:938 msgid "View Photos" msgstr "Vis bilder" -#: ../../include/conversation.php:947 +#: ../../include/conversation.php:939 msgid "Matrix Activity" msgstr "Matrix-aktivitet" -#: ../../include/conversation.php:948 ../../include/widgets.php:135 -#: ../../include/widgets.php:175 ../../include/Contact.php:107 -#: ../../include/identity.php:840 ../../mod/directory.php:224 -#: ../../mod/suggest.php:51 ../../mod/match.php:62 -msgid "Connect" -msgstr "Koble" - -#: ../../include/conversation.php:949 +#: ../../include/conversation.php:941 msgid "Edit Contact" msgstr "Endre kontakt" -#: ../../include/conversation.php:950 +#: ../../include/conversation.php:942 msgid "Send PM" msgstr "Send privat melding" -#: ../../include/conversation.php:951 ../../include/apps.php:143 +#: ../../include/conversation.php:943 ../../include/apps.php:145 msgid "Poke" msgstr "Prikk" -#: ../../include/conversation.php:1003 ../../include/RedDAV/RedBrowser.php:163 -#: ../../include/apps.php:331 ../../include/apps.php:382 -#: ../../mod/photos.php:713 ../../mod/photos.php:1131 -#: ../../mod/connedit.php:512 +#: ../../include/conversation.php:1019 ../../include/RedDAV/RedBrowser.php:163 +#: ../../include/apps.php:336 ../../include/apps.php:387 +#: ../../mod/connedit.php:570 ../../mod/photos.php:681 +#: ../../mod/photos.php:1119 msgid "Unknown" msgstr "Ukjent" -#: ../../include/conversation.php:1024 +#: ../../include/conversation.php:1061 #, php-format msgid "%s likes this." msgstr "%s liker dette." -#: ../../include/conversation.php:1024 +#: ../../include/conversation.php:1061 #, php-format msgid "%s doesn't like this." msgstr "%s liker ikke dette." -#: ../../include/conversation.php:1028 +#: ../../include/conversation.php:1065 #, php-format msgid "<span %1$s>%2$d people</span> like this." msgid_plural "<span %1$s>%2$d people</span> like this." msgstr[0] "<span %1$s>%2$d person</span> liker dette." msgstr[1] "<span %1$s>%2$d personer</span> liker dette." -#: ../../include/conversation.php:1030 +#: ../../include/conversation.php:1067 #, php-format msgid "<span %1$s>%2$d people</span> don't like this." msgid_plural "<span %1$s>%2$d people</span> don't like this." msgstr[0] "<span %1$s>%2$d person</span> liker ikke dette." msgstr[1] "<span %1$s>%2$d personer</span> liker ikke dette." -#: ../../include/conversation.php:1036 +#: ../../include/conversation.php:1073 msgid "and" msgstr "og" -#: ../../include/conversation.php:1039 +#: ../../include/conversation.php:1076 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] ", og %d annen person" msgstr[1] ", og %d andre personer" -#: ../../include/conversation.php:1040 +#: ../../include/conversation.php:1077 #, php-format msgid "%s like this." msgstr "%s liker dette." -#: ../../include/conversation.php:1040 +#: ../../include/conversation.php:1077 #, php-format msgid "%s don't like this." msgstr "%s liker ikke dette." -#: ../../include/conversation.php:1097 +#: ../../include/conversation.php:1136 msgid "Visible to <strong>everybody</strong>" msgstr "Synlig for <strong>alle</strong>" -#: ../../include/conversation.php:1098 ../../mod/mail.php:170 -#: ../../mod/mail.php:282 +#: ../../include/conversation.php:1137 ../../mod/mail.php:174 +#: ../../mod/mail.php:289 msgid "Please enter a link URL:" msgstr "Vennligst skriv inn en lenke URL:" -#: ../../include/conversation.php:1099 +#: ../../include/conversation.php:1138 msgid "Please enter a video link/URL:" msgstr "Vennligst skriv en videolenke/URL:" -#: ../../include/conversation.php:1100 +#: ../../include/conversation.php:1139 msgid "Please enter an audio link/URL:" msgstr "Vennligst skriv en lydlenke/URL:" -#: ../../include/conversation.php:1101 +#: ../../include/conversation.php:1140 msgid "Tag term:" msgstr "Merkelapp:" -#: ../../include/conversation.php:1102 ../../mod/filer.php:49 +#: ../../include/conversation.php:1141 ../../mod/filer.php:49 msgid "Save to Folder:" msgstr "Lagre til mappe:" -#: ../../include/conversation.php:1103 +#: ../../include/conversation.php:1142 msgid "Where are you right now?" msgstr "Hvor er du akkurat nå?" -#: ../../include/conversation.php:1104 ../../mod/editpost.php:52 -#: ../../mod/mail.php:171 ../../mod/mail.php:283 +#: ../../include/conversation.php:1143 ../../mod/editpost.php:52 +#: ../../mod/mail.php:175 ../../mod/mail.php:290 msgid "Expires YYYY-MM-DD HH:MM" msgstr "Utløper YYYY-MM-DD HH:MM" -#: ../../include/conversation.php:1114 ../../include/page_widgets.php:40 -#: ../../include/ItemObject.php:608 ../../mod/photos.php:997 -#: ../../mod/webpages.php:166 ../../mod/editblock.php:173 -#: ../../mod/editlayout.php:168 ../../mod/editpost.php:140 -#: ../../mod/editwebpage.php:205 -msgid "Preview" -msgstr "Forhåndsvisning" - -#: ../../include/conversation.php:1128 ../../mod/photos.php:976 -#: ../../mod/editblock.php:198 ../../mod/editlayout.php:193 -#: ../../mod/editwebpage.php:230 ../../mod/layouts.php:168 +#: ../../include/conversation.php:1169 ../../mod/editlayout.php:198 +#: ../../mod/editwebpage.php:235 ../../mod/editblock.php:203 +#: ../../mod/photos.php:949 ../../mod/layouts.php:168 msgid "Share" msgstr "Del" -#: ../../include/conversation.php:1130 ../../mod/editwebpage.php:170 +#: ../../include/conversation.php:1171 ../../mod/editwebpage.php:170 msgid "Page link title" msgstr "Sidens lenketittel" -#: ../../include/conversation.php:1133 +#: ../../include/conversation.php:1174 msgid "Post as" msgstr "Lag innlegg som" -#: ../../include/conversation.php:1134 ../../mod/editblock.php:144 -#: ../../mod/editlayout.php:140 ../../mod/editpost.php:113 -#: ../../mod/editwebpage.php:175 ../../mod/mail.php:231 ../../mod/mail.php:345 +#: ../../include/conversation.php:1176 ../../include/ItemObject.php:669 +#: ../../mod/editlayout.php:140 ../../mod/editwebpage.php:175 +#: ../../mod/editpost.php:114 ../../mod/editblock.php:144 +msgid "Bold" +msgstr "Uthevet" + +#: ../../include/conversation.php:1177 ../../include/ItemObject.php:670 +#: ../../mod/editlayout.php:141 ../../mod/editwebpage.php:176 +#: ../../mod/editpost.php:115 ../../mod/editblock.php:145 +msgid "Italic" +msgstr "Kursiv" + +#: ../../include/conversation.php:1178 ../../include/ItemObject.php:671 +#: ../../mod/editlayout.php:142 ../../mod/editwebpage.php:177 +#: ../../mod/editpost.php:116 ../../mod/editblock.php:146 +msgid "Underline" +msgstr "Understreket" + +#: ../../include/conversation.php:1179 ../../include/ItemObject.php:672 +#: ../../mod/editlayout.php:143 ../../mod/editwebpage.php:178 +#: ../../mod/editpost.php:117 ../../mod/editblock.php:147 +msgid "Quote" +msgstr "Sitat" + +#: ../../include/conversation.php:1180 ../../include/ItemObject.php:673 +#: ../../mod/editlayout.php:144 ../../mod/editwebpage.php:179 +#: ../../mod/editpost.php:118 ../../mod/editblock.php:148 +msgid "Code" +msgstr "Kode" + +#: ../../include/conversation.php:1181 ../../mod/editlayout.php:145 +#: ../../mod/editwebpage.php:180 ../../mod/editpost.php:119 +#: ../../mod/editblock.php:149 ../../mod/mail.php:238 ../../mod/mail.php:352 msgid "Upload photo" msgstr "Last opp bilde" -#: ../../include/conversation.php:1135 +#: ../../include/conversation.php:1182 msgid "upload photo" msgstr "last opp bilde" -#: ../../include/conversation.php:1136 ../../mod/editblock.php:145 -#: ../../mod/editlayout.php:141 ../../mod/editpost.php:114 -#: ../../mod/editwebpage.php:176 ../../mod/mail.php:232 ../../mod/mail.php:346 +#: ../../include/conversation.php:1183 ../../mod/editlayout.php:146 +#: ../../mod/editwebpage.php:181 ../../mod/editpost.php:120 +#: ../../mod/editblock.php:150 ../../mod/mail.php:239 ../../mod/mail.php:353 msgid "Attach file" msgstr "Legg ved fil" -#: ../../include/conversation.php:1137 +#: ../../include/conversation.php:1184 msgid "attach file" msgstr "legg ved fil" -#: ../../include/conversation.php:1138 ../../mod/editblock.php:146 -#: ../../mod/editlayout.php:142 ../../mod/editpost.php:115 -#: ../../mod/editwebpage.php:177 ../../mod/mail.php:233 ../../mod/mail.php:347 +#: ../../include/conversation.php:1185 ../../mod/editlayout.php:147 +#: ../../mod/editwebpage.php:182 ../../mod/editpost.php:121 +#: ../../mod/editblock.php:151 ../../mod/mail.php:240 ../../mod/mail.php:354 msgid "Insert web link" msgstr "Sett inn web-lenke" -#: ../../include/conversation.php:1139 +#: ../../include/conversation.php:1186 msgid "web link" msgstr "web-lenke" -#: ../../include/conversation.php:1140 +#: ../../include/conversation.php:1187 msgid "Insert video link" msgstr "Sett inn videolenke" -#: ../../include/conversation.php:1141 +#: ../../include/conversation.php:1188 msgid "video link" msgstr "videolenke" -#: ../../include/conversation.php:1142 +#: ../../include/conversation.php:1189 msgid "Insert audio link" msgstr "Sett inn lenke til lyd" -#: ../../include/conversation.php:1143 +#: ../../include/conversation.php:1190 msgid "audio link" msgstr "lenke til lyd" -#: ../../include/conversation.php:1144 ../../mod/editblock.php:150 -#: ../../mod/editlayout.php:146 ../../mod/editpost.php:119 -#: ../../mod/editwebpage.php:181 +#: ../../include/conversation.php:1191 ../../mod/editlayout.php:151 +#: ../../mod/editwebpage.php:186 ../../mod/editpost.php:125 +#: ../../mod/editblock.php:155 msgid "Set your location" msgstr "Angi din plassering" -#: ../../include/conversation.php:1145 +#: ../../include/conversation.php:1192 msgid "set location" msgstr "angi plassering" -#: ../../include/conversation.php:1146 ../../mod/editblock.php:151 -#: ../../mod/editlayout.php:147 ../../mod/editpost.php:120 -#: ../../mod/editwebpage.php:182 +#: ../../include/conversation.php:1193 ../../mod/editpost.php:127 +msgid "Toggle voting" +msgstr "Skru av eller på stemming" + +#: ../../include/conversation.php:1196 ../../mod/editlayout.php:152 +#: ../../mod/editwebpage.php:187 ../../mod/editpost.php:126 +#: ../../mod/editblock.php:156 msgid "Clear browser location" msgstr "Fjern nettleserplassering" -#: ../../include/conversation.php:1147 +#: ../../include/conversation.php:1197 msgid "clear location" msgstr "fjern plassering" -#: ../../include/conversation.php:1149 ../../mod/editblock.php:164 -#: ../../mod/editlayout.php:159 ../../mod/editpost.php:132 -#: ../../mod/editwebpage.php:198 -msgid "Set title" -msgstr "Angi tittel" - -#: ../../include/conversation.php:1152 ../../mod/events.php:563 -#: ../../mod/editblock.php:167 ../../mod/editlayout.php:162 -#: ../../mod/editpost.php:134 ../../mod/editwebpage.php:200 -msgid "Categories (comma-separated list)" -msgstr "Kategorier (kommaseparert liste)" - -#: ../../include/conversation.php:1154 ../../mod/editblock.php:153 -#: ../../mod/editlayout.php:149 ../../mod/editpost.php:122 -#: ../../mod/editwebpage.php:184 +#: ../../include/conversation.php:1199 ../../mod/editlayout.php:164 +#: ../../mod/editwebpage.php:203 ../../mod/editpost.php:141 +#: ../../mod/editblock.php:169 +msgid "Title (optional)" +msgstr "Tittel (valgfri)" + +#: ../../include/conversation.php:1202 ../../mod/editlayout.php:167 +#: ../../mod/editwebpage.php:205 ../../mod/editpost.php:143 +#: ../../mod/editblock.php:172 +msgid "Categories (optional, comma-separated list)" +msgstr "Kategorier (valgfri, kommaseparert liste)" + +#: ../../include/conversation.php:1204 ../../mod/editlayout.php:154 +#: ../../mod/editwebpage.php:189 ../../mod/editpost.php:131 +#: ../../mod/editblock.php:158 msgid "Permission settings" msgstr "Tillatelser - innstillinger" -#: ../../include/conversation.php:1155 +#: ../../include/conversation.php:1205 msgid "permissions" msgstr "tillatelser" -#: ../../include/conversation.php:1162 ../../mod/editblock.php:161 -#: ../../mod/editlayout.php:156 ../../mod/editpost.php:129 -#: ../../mod/editwebpage.php:193 +#: ../../include/conversation.php:1212 ../../mod/editlayout.php:161 +#: ../../mod/editwebpage.php:198 ../../mod/editpost.php:138 +#: ../../mod/editblock.php:166 msgid "Public post" msgstr "Offentlig innlegg" -#: ../../include/conversation.php:1164 ../../mod/editblock.php:168 -#: ../../mod/editlayout.php:163 ../../mod/editpost.php:135 -#: ../../mod/editwebpage.php:201 +#: ../../include/conversation.php:1214 ../../mod/editlayout.php:168 +#: ../../mod/editwebpage.php:206 ../../mod/editpost.php:144 +#: ../../mod/editblock.php:173 msgid "Example: bob@example.com, mary@example.com" msgstr "Eksempel: ola@eksempel.no, kari@eksempel.no" -#: ../../include/conversation.php:1177 ../../mod/editblock.php:178 -#: ../../mod/editlayout.php:173 ../../mod/editpost.php:146 -#: ../../mod/editwebpage.php:210 ../../mod/mail.php:238 ../../mod/mail.php:352 +#: ../../include/conversation.php:1227 ../../mod/editlayout.php:178 +#: ../../mod/editwebpage.php:215 ../../mod/editpost.php:155 +#: ../../mod/editblock.php:183 ../../mod/mail.php:245 ../../mod/mail.php:359 msgid "Set expiration date" msgstr "Angi utløpsdato" -#: ../../include/conversation.php:1179 ../../include/ItemObject.php:611 -#: ../../mod/editpost.php:148 ../../mod/mail.php:240 ../../mod/mail.php:354 +#: ../../include/conversation.php:1229 ../../include/ItemObject.php:680 +#: ../../mod/editpost.php:157 ../../mod/mail.php:247 ../../mod/mail.php:361 msgid "Encrypt text" msgstr "Krypter tekst" -#: ../../include/conversation.php:1181 ../../mod/events.php:569 -#: ../../mod/editpost.php:150 +#: ../../include/conversation.php:1231 ../../mod/events.php:635 +#: ../../mod/editpost.php:159 msgid "OK" msgstr "OK" -#: ../../include/conversation.php:1182 ../../mod/events.php:568 -#: ../../mod/editpost.php:151 ../../mod/settings.php:550 -#: ../../mod/settings.php:576 ../../mod/fbrowser.php:82 -#: ../../mod/fbrowser.php:117 ../../mod/tagrm.php:11 ../../mod/tagrm.php:134 +#: ../../include/conversation.php:1232 ../../mod/settings.php:583 +#: ../../mod/settings.php:609 ../../mod/tagrm.php:11 ../../mod/tagrm.php:134 +#: ../../mod/events.php:634 ../../mod/fbrowser.php:82 +#: ../../mod/fbrowser.php:117 ../../mod/editpost.php:160 msgid "Cancel" msgstr "Avbryt" -#: ../../include/conversation.php:1426 +#: ../../include/conversation.php:1475 msgid "Discover" msgstr "Oppdage" -#: ../../include/conversation.php:1429 +#: ../../include/conversation.php:1478 msgid "Imported public streams" msgstr "Importerte offentlige strømmer" -#: ../../include/conversation.php:1434 +#: ../../include/conversation.php:1483 msgid "Commented Order" msgstr "Kommentert" -#: ../../include/conversation.php:1437 +#: ../../include/conversation.php:1486 msgid "Sort by Comment Date" msgstr "Sorter etter kommentert dato" -#: ../../include/conversation.php:1441 +#: ../../include/conversation.php:1490 msgid "Posted Order" msgstr "Lagt inn" -#: ../../include/conversation.php:1444 +#: ../../include/conversation.php:1493 msgid "Sort by Post Date" msgstr "Sorter etter innleggsdato" -#: ../../include/conversation.php:1449 ../../include/widgets.php:89 -msgid "Personal" -msgstr "Personlig" - -#: ../../include/conversation.php:1452 +#: ../../include/conversation.php:1501 msgid "Posts that mention or involve you" msgstr "Innlegg som nevner eller involverer deg" -#: ../../include/conversation.php:1458 ../../mod/connections.php:211 -#: ../../mod/connections.php:224 ../../mod/menu.php:80 +#: ../../include/conversation.php:1507 ../../mod/connections.php:212 +#: ../../mod/connections.php:225 ../../mod/menu.php:80 msgid "New" msgstr "Nye" -#: ../../include/conversation.php:1461 +#: ../../include/conversation.php:1510 msgid "Activity Stream - by date" msgstr "Aktivitetsstrøm - etter dato" -#: ../../include/conversation.php:1467 +#: ../../include/conversation.php:1516 msgid "Starred" msgstr "Stjerne" -#: ../../include/conversation.php:1470 +#: ../../include/conversation.php:1519 msgid "Favourite Posts" msgstr "Favorittinnlegg" -#: ../../include/conversation.php:1477 +#: ../../include/conversation.php:1526 msgid "Spam" msgstr "Søppel" -#: ../../include/conversation.php:1480 +#: ../../include/conversation.php:1529 msgid "Posts flagged as SPAM" msgstr "Innlegg merket som SØPPEL" -#: ../../include/conversation.php:1520 ../../mod/admin.php:865 +#: ../../include/conversation.php:1568 ../../mod/admin.php:949 msgid "Channel" msgstr "Kanal" -#: ../../include/conversation.php:1523 +#: ../../include/conversation.php:1571 msgid "Status Messages and Posts" msgstr "Statusmeldinger og -innlegg" -#: ../../include/conversation.php:1532 +#: ../../include/conversation.php:1580 msgid "About" msgstr "Om" -#: ../../include/conversation.php:1535 +#: ../../include/conversation.php:1583 msgid "Profile Details" msgstr "Profildetaljer" -#: ../../include/conversation.php:1541 ../../include/nav.php:105 -#: ../../include/apps.php:137 ../../mod/fbrowser.php:25 +#: ../../include/conversation.php:1589 ../../include/nav.php:97 +#: ../../include/apps.php:139 ../../mod/fbrowser.php:25 msgid "Photos" msgstr "Bilder" -#: ../../include/conversation.php:1544 ../../include/photos.php:341 +#: ../../include/conversation.php:1592 ../../include/photos.php:356 msgid "Photo Albums" msgstr "Fotoalbum" -#: ../../include/conversation.php:1550 ../../include/RedDAV/RedBrowser.php:241 -#: ../../include/nav.php:106 ../../include/apps.php:133 +#: ../../include/conversation.php:1598 ../../include/RedDAV/RedBrowser.php:249 +#: ../../include/nav.php:98 ../../include/apps.php:135 #: ../../mod/fbrowser.php:114 msgid "Files" msgstr "Filer" -#: ../../include/conversation.php:1553 +#: ../../include/conversation.php:1601 msgid "Files and Storage" msgstr "Filer og lagring" -#: ../../include/conversation.php:1563 ../../include/conversation.php:1566 +#: ../../include/conversation.php:1611 ../../include/conversation.php:1614 msgid "Chatrooms" msgstr "Chatrom" -#: ../../include/conversation.php:1576 ../../include/nav.php:117 -#: ../../include/apps.php:127 +#: ../../include/conversation.php:1624 ../../include/nav.php:109 +#: ../../include/apps.php:129 msgid "Bookmarks" msgstr "Bokmerker" -#: ../../include/conversation.php:1579 +#: ../../include/conversation.php:1627 msgid "Saved Bookmarks" msgstr "Lagrede bokmerker" -#: ../../include/conversation.php:1587 ../../include/nav.php:121 -#: ../../include/apps.php:134 ../../mod/webpages.php:160 +#: ../../include/conversation.php:1635 ../../include/nav.php:113 +#: ../../include/apps.php:136 ../../mod/webpages.php:160 msgid "Webpages" msgstr "Websider" -#: ../../include/conversation.php:1590 +#: ../../include/conversation.php:1638 msgid "Manage Webpages" msgstr "Håndtere websider" -#: ../../include/notify.php:23 -msgid "created a new post" -msgstr "laget et nytt innlegg" - -#: ../../include/notify.php:24 -#, php-format -msgid "commented on %s's post" -msgstr "kommenterte på %s sitt innlegg" - -#: ../../include/dir_fns.php:56 -msgid "Sort Options" -msgstr "Sorteringsmuligheter" - -#: ../../include/dir_fns.php:57 -msgid "Alphabetic" -msgstr "Alfabetisk" - -#: ../../include/dir_fns.php:58 -msgid "Reverse Alphabetic" -msgstr "Omvendt alfabetisk" +#: ../../include/conversation.php:1667 ../../include/ItemObject.php:175 +#: ../../include/ItemObject.php:187 ../../mod/photos.php:1003 +#: ../../mod/photos.php:1015 +msgid "View all" +msgstr "Vis alle" -#: ../../include/dir_fns.php:59 -msgid "Newest to Oldest" -msgstr "Nyest til eldst" +#: ../../include/conversation.php:1695 ../../include/ItemObject.php:184 +#: ../../mod/photos.php:1012 +msgctxt "noun" +msgid "Dislike" +msgid_plural "Dislikes" +msgstr[0] "Liker ikke" +msgstr[1] "Liker ikke" -#: ../../include/dir_fns.php:71 -msgid "Enable Safe Search" -msgstr "Skru på Trygt søk" +#: ../../include/conversation.php:1698 +msgctxt "noun" +msgid "Attending" +msgid_plural "Attending" +msgstr[0] "Deltar" +msgstr[1] "Deltar" -#: ../../include/dir_fns.php:73 -msgid "Disable Safe Search" -msgstr "Skru av Trygt søk" +#: ../../include/conversation.php:1701 +msgctxt "noun" +msgid "Not Attending" +msgid_plural "Not Attending" +msgstr[0] "Deltar ikke" +msgstr[1] "Deltar ikke" -#: ../../include/dir_fns.php:75 -msgid "Safe Mode" -msgstr "Trygt modus" +#: ../../include/conversation.php:1704 +msgctxt "noun" +msgid "Undecided" +msgid_plural "Undecided" +msgstr[0] "Ikke bestemt" +msgstr[1] "Ikke bestemt" -#: ../../include/page_widgets.php:6 -msgid "New Page" -msgstr "Ny side" +#: ../../include/conversation.php:1707 +msgctxt "noun" +msgid "Agree" +msgid_plural "Agrees" +msgstr[0] "Enig" +msgstr[1] "Enige" -#: ../../include/page_widgets.php:8 ../../include/page_widgets.php:36 -#: ../../include/RedDAV/RedBrowser.php:250 ../../include/menu.php:42 -#: ../../include/apps.php:249 ../../include/ItemObject.php:100 -#: ../../mod/blocks.php:132 ../../mod/connections.php:381 -#: ../../mod/connections.php:394 ../../mod/connections.php:413 -#: ../../mod/thing.php:233 ../../mod/webpages.php:162 -#: ../../mod/editblock.php:143 ../../mod/editlayout.php:139 -#: ../../mod/editpost.php:112 ../../mod/settings.php:611 -#: ../../mod/editwebpage.php:174 ../../mod/layouts.php:167 -#: ../../mod/menu.php:78 -msgid "Edit" -msgstr "Endre" +#: ../../include/conversation.php:1710 +msgctxt "noun" +msgid "Disagree" +msgid_plural "Disagrees" +msgstr[0] "Uenig" +msgstr[1] "Uenige" -#: ../../include/page_widgets.php:39 ../../mod/blocks.php:135 -#: ../../mod/webpages.php:165 ../../mod/layouts.php:171 -msgid "View" -msgstr "Vis" +#: ../../include/conversation.php:1713 +msgctxt "noun" +msgid "Abstain" +msgid_plural "Abstains" +msgstr[0] "Avstår" +msgstr[1] "Avstår" + +#: ../../include/attach.php:137 ../../include/attach.php:184 +#: ../../include/attach.php:247 ../../include/attach.php:261 +#: ../../include/attach.php:301 ../../include/attach.php:315 +#: ../../include/attach.php:339 ../../include/attach.php:532 +#: ../../include/attach.php:606 ../../include/items.php:4093 +#: ../../include/photos.php:15 ../../include/chat.php:131 +#: ../../mod/profile.php:64 ../../mod/profile.php:72 +#: ../../mod/achievements.php:30 ../../mod/manage.php:6 +#: ../../mod/settings.php:564 ../../mod/api.php:26 ../../mod/api.php:31 +#: ../../mod/blocks.php:67 ../../mod/blocks.php:75 +#: ../../mod/profile_photo.php:264 ../../mod/profile_photo.php:277 +#: ../../mod/block.php:22 ../../mod/block.php:72 ../../mod/like.php:178 +#: ../../mod/events.php:219 ../../mod/connedit.php:321 ../../mod/group.php:9 +#: ../../mod/setup.php:207 ../../mod/common.php:35 ../../mod/id.php:61 +#: ../../mod/connections.php:169 ../../mod/item.php:197 ../../mod/item.php:205 +#: ../../mod/item.php:938 ../../mod/thing.php:247 ../../mod/thing.php:264 +#: ../../mod/thing.php:299 ../../mod/pdledit.php:21 ../../mod/authtest.php:13 +#: ../../mod/editlayout.php:64 ../../mod/editlayout.php:89 +#: ../../mod/chat.php:90 ../../mod/chat.php:95 ../../mod/editwebpage.php:64 +#: ../../mod/editwebpage.php:86 ../../mod/editwebpage.php:118 +#: ../../mod/rate.php:110 ../../mod/editpost.php:13 ../../mod/invite.php:13 +#: ../../mod/invite.php:104 ../../mod/locs.php:77 ../../mod/sources.php:66 +#: ../../mod/menu.php:61 ../../mod/filestorage.php:18 +#: ../../mod/filestorage.php:72 ../../mod/filestorage.php:87 +#: ../../mod/filestorage.php:114 ../../mod/fsuggest.php:78 +#: ../../mod/poke.php:128 ../../mod/profiles.php:188 +#: ../../mod/profiles.php:576 ../../mod/viewsrc.php:14 +#: ../../mod/webpages.php:67 ../../mod/viewconnections.php:22 +#: ../../mod/viewconnections.php:27 ../../mod/editblock.php:65 +#: ../../mod/register.php:72 ../../mod/photos.php:68 ../../mod/message.php:16 +#: ../../mod/mitem.php:106 ../../mod/mood.php:111 ../../mod/layouts.php:67 +#: ../../mod/layouts.php:74 ../../mod/layouts.php:85 ../../mod/mail.php:114 +#: ../../mod/notifications.php:66 ../../mod/regmod.php:17 +#: ../../mod/network.php:12 ../../mod/new_channel.php:68 +#: ../../mod/new_channel.php:99 ../../mod/appman.php:66 ../../mod/page.php:28 +#: ../../mod/page.php:78 ../../mod/bookmarks.php:46 ../../mod/channel.php:95 +#: ../../mod/channel.php:206 ../../mod/channel.php:249 +#: ../../mod/suggest.php:26 ../../mod/service_limits.php:7 +#: ../../mod/sharedwithme.php:7 ../../index.php:190 ../../index.php:393 +msgid "Permission denied." +msgstr "Tillatelse avslått." -#: ../../include/page_widgets.php:41 ../../mod/webpages.php:167 -msgid "Actions" -msgstr "Handlinger" +#: ../../include/attach.php:242 ../../include/attach.php:296 +msgid "Item was not found." +msgstr "Elementet ble ikke funnet." -#: ../../include/page_widgets.php:42 ../../mod/webpages.php:168 -msgid "Page Link" -msgstr "Sidelenke" +#: ../../include/attach.php:352 +msgid "No source file." +msgstr "Ingen kildefil." -#: ../../include/page_widgets.php:43 ../../mod/webpages.php:169 -msgid "Title" -msgstr "Tittel" +#: ../../include/attach.php:369 +msgid "Cannot locate file to replace" +msgstr "Kan ikke finne filen som skal byttes ut" -#: ../../include/page_widgets.php:44 ../../mod/webpages.php:170 -msgid "Created" -msgstr "Laget" +#: ../../include/attach.php:387 +msgid "Cannot locate file to revise/update" +msgstr "Finner ikke filen som skal revideres/oppdateres" -#: ../../include/page_widgets.php:45 ../../mod/webpages.php:171 -msgid "Edited" -msgstr "Endret" +#: ../../include/attach.php:398 +#, php-format +msgid "File exceeds size limit of %d" +msgstr "Filens størrelse overgår grensen på %d" -#: ../../include/chat.php:10 -msgid "Missing room name" -msgstr "Mangler romnavn" +#: ../../include/attach.php:410 +#, php-format +msgid "You have reached your limit of %1$.0f Mbytes attachment storage." +msgstr "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes." -#: ../../include/chat.php:19 -msgid "Duplicate room name" -msgstr "Duplikat romnavn" +#: ../../include/attach.php:493 +msgid "File upload failed. Possible system limit or action terminated." +msgstr "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt." -#: ../../include/chat.php:68 ../../include/chat.php:76 -msgid "Invalid room specifier." -msgstr "Ugyldig rom-spesifisering" +#: ../../include/attach.php:505 +msgid "Stored file could not be verified. Upload failed." +msgstr "Lagret fil kunne ikke bekreftes. Opplasting mislyktes." -#: ../../include/chat.php:105 -msgid "Room not found." -msgstr "Rommet ble ikke funnet." +#: ../../include/attach.php:547 ../../include/attach.php:564 +msgid "Path not available." +msgstr "Stien er ikke tilgjengelig." -#: ../../include/chat.php:116 ../../include/items.php:4013 -#: ../../include/attach.php:116 ../../include/attach.php:163 -#: ../../include/attach.php:226 ../../include/attach.php:240 -#: ../../include/attach.php:280 ../../include/attach.php:294 -#: ../../include/attach.php:318 ../../include/attach.php:511 -#: ../../include/attach.php:584 ../../include/photos.php:15 -#: ../../mod/mood.php:112 ../../mod/mitem.php:106 -#: ../../mod/achievements.php:30 ../../mod/profiles.php:179 -#: ../../mod/profiles.php:550 ../../mod/setup.php:207 ../../mod/poke.php:128 -#: ../../mod/api.php:26 ../../mod/api.php:31 ../../mod/authtest.php:13 -#: ../../mod/profile.php:64 ../../mod/profile.php:72 ../../mod/block.php:22 -#: ../../mod/block.php:72 ../../mod/sources.php:66 ../../mod/blocks.php:67 -#: ../../mod/blocks.php:75 ../../mod/register.php:72 ../../mod/events.php:195 -#: ../../mod/channel.php:89 ../../mod/channel.php:193 -#: ../../mod/channel.php:236 ../../mod/chat.php:90 ../../mod/chat.php:95 -#: ../../mod/regmod.php:17 ../../mod/network.php:12 ../../mod/common.php:35 -#: ../../mod/photos.php:68 ../../mod/connections.php:169 -#: ../../mod/manage.php:6 ../../mod/connedit.php:266 ../../mod/thing.php:247 -#: ../../mod/thing.php:264 ../../mod/thing.php:299 ../../mod/webpages.php:67 -#: ../../mod/bookmarks.php:46 ../../mod/editblock.php:65 -#: ../../mod/pdledit.php:21 ../../mod/editlayout.php:64 -#: ../../mod/editlayout.php:89 ../../mod/editpost.php:13 -#: ../../mod/settings.php:526 ../../mod/editwebpage.php:64 -#: ../../mod/editwebpage.php:86 ../../mod/editwebpage.php:118 -#: ../../mod/profile_photo.php:263 ../../mod/profile_photo.php:276 -#: ../../mod/fsuggest.php:78 ../../mod/filestorage.php:18 -#: ../../mod/filestorage.php:67 ../../mod/filestorage.php:82 -#: ../../mod/filestorage.php:109 ../../mod/delegate.php:6 -#: ../../mod/group.php:9 ../../mod/suggest.php:26 ../../mod/item.php:191 -#: ../../mod/item.php:199 ../../mod/item.php:971 ../../mod/like.php:154 -#: ../../mod/invite.php:13 ../../mod/invite.php:104 ../../mod/locs.php:71 -#: ../../mod/layouts.php:67 ../../mod/layouts.php:74 ../../mod/layouts.php:85 -#: ../../mod/viewconnections.php:22 ../../mod/viewconnections.php:27 -#: ../../mod/viewsrc.php:14 ../../mod/mail.php:111 ../../mod/menu.php:61 -#: ../../mod/message.php:16 ../../mod/new_channel.php:68 -#: ../../mod/new_channel.php:99 ../../mod/notifications.php:66 -#: ../../mod/page.php:28 ../../mod/page.php:78 ../../mod/appman.php:66 -#: ../../mod/service_limits.php:7 ../../index.php:190 ../../index.php:390 -msgid "Permission denied." -msgstr "Tillatelse avslått." +#: ../../include/attach.php:611 +msgid "Empty pathname" +msgstr "Tomt sti-navn" -#: ../../include/chat.php:126 -msgid "Room is full" -msgstr "Rommet er fullt" +#: ../../include/attach.php:627 +msgid "duplicate filename or path" +msgstr "duplikat av filnavn eller sti" -#: ../../include/oembed.php:171 -msgid "Embedded content" -msgstr "Innebygget innhold" +#: ../../include/attach.php:651 +msgid "Path not found." +msgstr "Stien ble ikke funnet." -#: ../../include/oembed.php:180 -msgid "Embedding disabled" -msgstr "Innbygging avskrudd" +#: ../../include/attach.php:702 +msgid "mkdir failed." +msgstr "mkdir mislyktes." -#: ../../include/widgets.php:29 ../../include/contact_widgets.php:92 -#: ../../include/taxonomy.php:230 -msgid "Categories" -msgstr "Kategorier" +#: ../../include/attach.php:706 +msgid "database storage failed." +msgstr "databaselagring mislyktes." -#: ../../include/widgets.php:86 ../../include/nav.php:171 -#: ../../mod/apps.php:33 -msgid "Apps" -msgstr "Apper" +#: ../../include/account.php:23 +msgid "Not a valid email address" +msgstr "Ikke en gyldig e-postadresse" -#: ../../include/widgets.php:87 -msgid "System" -msgstr "System" +#: ../../include/account.php:25 +msgid "Your email domain is not among those allowed on this site" +msgstr "Ditt e-postdomene er ikke blant de som er tillatt på dette stedet" -#: ../../include/widgets.php:90 -msgid "Create Personal App" -msgstr "Lag personlig app" +#: ../../include/account.php:31 +msgid "Your email address is already registered at this site." +msgstr "Din e-postadresse er allerede registrert på dette nettstedet." -#: ../../include/widgets.php:91 -msgid "Edit Personal App" -msgstr "Endre personlig app" +#: ../../include/account.php:64 +msgid "An invitation is required." +msgstr "En invitasjon er påkrevd." -#: ../../include/widgets.php:137 ../../mod/suggest.php:53 -msgid "Ignore/Hide" -msgstr "Ignorer/Skjul" +#: ../../include/account.php:68 +msgid "Invitation could not be verified." +msgstr "Invitasjon kunne ikke bekreftes." -#: ../../include/widgets.php:143 ../../mod/connections.php:267 -msgid "Suggestions" -msgstr "Forslag" +#: ../../include/account.php:119 +msgid "Please enter the required information." +msgstr "Vennligst skriv inn nødvendig informasjon." -#: ../../include/widgets.php:144 -msgid "See more..." -msgstr "Se mer..." +#: ../../include/account.php:187 +msgid "Failed to store account information." +msgstr "Mislyktes med å lagre kontoinformasjon." -#: ../../include/widgets.php:166 +#: ../../include/account.php:245 #, php-format -msgid "You have %1$.0f of %2$.0f allowed connections." -msgstr "Du har %1$.0f av %2$.0f tillate forbindelser." - -#: ../../include/widgets.php:172 -msgid "Add New Connection" -msgstr "Legg til ny forbindelse" - -#: ../../include/widgets.php:173 -msgid "Enter the channel address" -msgstr "Skriv kanal-adressen" - -#: ../../include/widgets.php:174 -msgid "Example: bob@example.com, http://example.com/barbara" -msgstr "Eksempel: ola.nordmann@eksempel.no, http://eksempel.no/karinordmann" - -#: ../../include/widgets.php:191 -msgid "Notes" -msgstr "Merknader" - -#: ../../include/widgets.php:193 ../../include/text.php:827 -#: ../../include/text.php:839 ../../mod/rbmark.php:28 ../../mod/rbmark.php:98 -#: ../../mod/filer.php:50 ../../mod/admin.php:1339 ../../mod/admin.php:1360 -msgid "Save" -msgstr "Lagre" +msgid "Registration confirmation for %s" +msgstr "Registreringsbekreftelse for %s" -#: ../../include/widgets.php:263 -msgid "Remove term" -msgstr "Fjern begrep" +#: ../../include/account.php:313 +#, php-format +msgid "Registration request at %s" +msgstr "Registreringsforespørsel hos %s" -#: ../../include/widgets.php:272 ../../include/features.php:58 -msgid "Saved Searches" -msgstr "Lagrede søk" +#: ../../include/account.php:315 ../../include/account.php:342 +#: ../../include/account.php:399 +msgid "Administrator" +msgstr "Administrator" -#: ../../include/widgets.php:273 ../../include/group.php:303 -msgid "add" -msgstr "legg til" +#: ../../include/account.php:337 +msgid "your registration password" +msgstr "ditt registreringspassord" -#: ../../include/widgets.php:303 ../../include/contact_widgets.php:57 -#: ../../include/features.php:72 -msgid "Saved Folders" -msgstr "Lagrede mapper" +#: ../../include/account.php:340 ../../include/account.php:397 +#, php-format +msgid "Registration details for %s" +msgstr "Registreringsdetaljer for %s" -#: ../../include/widgets.php:306 ../../include/contact_widgets.php:60 -#: ../../include/contact_widgets.php:95 -msgid "Everything" -msgstr "Alt" +#: ../../include/account.php:406 +msgid "Account approved." +msgstr "Konto godkjent." -#: ../../include/widgets.php:352 -msgid "Archives" -msgstr "Arkiv" +#: ../../include/account.php:440 +#, php-format +msgid "Registration revoked for %s" +msgstr "Registrering trukket tilbake for %s" -#: ../../include/widgets.php:428 -msgid "Refresh" -msgstr "Forny" +#: ../../include/account.php:486 +msgid "Account verified. Please login." +msgstr "Konto bekreftet. Vennligst logg inn." -#: ../../include/widgets.php:429 ../../mod/connedit.php:506 -msgid "Me" -msgstr "Meg" +#: ../../include/account.php:706 ../../include/account.php:708 +msgid "Click here to upgrade." +msgstr "Klikk her for å oppgradere." -#: ../../include/widgets.php:430 ../../mod/connedit.php:508 -msgid "Best Friends" -msgstr "Bestevenner" +#: ../../include/account.php:714 +msgid "This action exceeds the limits set by your subscription plan." +msgstr "Denne handlingen går utenfor grensene satt i din abonnementsplan." -#: ../../include/widgets.php:431 ../../include/identity.php:387 -#: ../../include/identity.php:388 ../../include/identity.php:395 -#: ../../include/profile_selectors.php:80 ../../mod/connedit.php:509 -#: ../../mod/settings.php:304 ../../mod/settings.php:308 -#: ../../mod/settings.php:309 ../../mod/settings.php:312 -#: ../../mod/settings.php:323 -msgid "Friends" -msgstr "Venner" +#: ../../include/account.php:719 +msgid "This action is not available under your subscription plan." +msgstr "Denne handlingen er ikke tilgjengelig i din abonnementsplan." -#: ../../include/widgets.php:432 -msgid "Co-workers" -msgstr "Medarbeidere" +#: ../../include/js_strings.php:5 +msgid "Delete this item?" +msgstr "Slett dette elementet?" -#: ../../include/widgets.php:433 ../../mod/connedit.php:510 -msgid "Former Friends" -msgstr "Tidligere venner" +#: ../../include/js_strings.php:6 ../../include/ItemObject.php:667 +#: ../../mod/photos.php:968 ../../mod/photos.php:1086 +msgid "Comment" +msgstr "Kommentar" -#: ../../include/widgets.php:434 ../../mod/connedit.php:511 -msgid "Acquaintances" -msgstr "Bekjente" +#: ../../include/js_strings.php:7 ../../include/ItemObject.php:384 +msgid "[+] show all" +msgstr "[+] Vis alle" -#: ../../include/widgets.php:435 -msgid "Everybody" -msgstr "Alle" +#: ../../include/js_strings.php:8 +msgid "[-] show less" +msgstr "[-] Vis mindre" -#: ../../include/widgets.php:469 -msgid "Account settings" -msgstr "Kontoinnstillinger" +#: ../../include/js_strings.php:9 +msgid "[+] expand" +msgstr "[+] Utvid" -#: ../../include/widgets.php:475 -msgid "Channel settings" -msgstr "Kanalinnstillinger" +#: ../../include/js_strings.php:10 +msgid "[-] collapse" +msgstr "[-] Lukk" -#: ../../include/widgets.php:481 -msgid "Additional features" -msgstr "Tilleggsfunksjoner" +#: ../../include/js_strings.php:11 +msgid "Password too short" +msgstr "Passordet er for kort" -#: ../../include/widgets.php:487 -msgid "Feature settings" -msgstr "Funksjonsinnstillinger" +#: ../../include/js_strings.php:12 +msgid "Passwords do not match" +msgstr "Passordene er ikke like" -#: ../../include/widgets.php:493 -msgid "Display settings" -msgstr "Visningsinnstillinger" +#: ../../include/js_strings.php:13 ../../mod/photos.php:39 +msgid "everybody" +msgstr "alle" -#: ../../include/widgets.php:499 -msgid "Connected apps" -msgstr "Tilkoblede app-er" +#: ../../include/js_strings.php:14 +msgid "Secret Passphrase" +msgstr "Hemmelig passordsetning" -#: ../../include/widgets.php:505 -msgid "Export channel" -msgstr "Eksporter kanal" +#: ../../include/js_strings.php:15 +msgid "Passphrase hint" +msgstr "Hint om passordsetning" -#: ../../include/widgets.php:511 -msgid "Export content" -msgstr "Eksporter innhold" +#: ../../include/js_strings.php:16 +msgid "Notice: Permissions have changed but have not yet been submitted." +msgstr "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn." -#: ../../include/widgets.php:520 ../../mod/connedit.php:538 -msgid "Connection Default Permissions" -msgstr "Forbindelsens standard tillatelser" +#: ../../include/js_strings.php:17 +msgid "close all" +msgstr "Lukk alle" -#: ../../include/widgets.php:528 -msgid "Premium Channel Settings" -msgstr "Premiumkanal-innstillinger" +#: ../../include/js_strings.php:18 +msgid "Nothing new here" +msgstr "Ikke noe nytt her" -#: ../../include/widgets.php:537 ../../include/features.php:49 -#: ../../mod/sources.php:88 -msgid "Channel Sources" -msgstr "Kanalkilder" +#: ../../include/js_strings.php:19 +msgid "Rate This Channel (this is public)" +msgstr "Vurder denne kanalen (dette er offentlig)" -#: ../../include/widgets.php:548 ../../include/nav.php:218 -#: ../../include/apps.php:132 ../../mod/admin.php:951 ../../mod/admin.php:1156 -msgid "Settings" -msgstr "Innstillinger" +#: ../../include/js_strings.php:20 ../../mod/rate.php:156 +msgid "Rating" +msgstr "Vurdering" -#: ../../include/widgets.php:562 ../../mod/mail.php:124 -#: ../../mod/message.php:31 -msgid "Messages" -msgstr "Meldinger" +#: ../../include/js_strings.php:21 +msgid "Describe (optional)" +msgstr "Beskriv (valgfritt)" + +#: ../../include/js_strings.php:22 ../../include/ItemObject.php:668 +#: ../../mod/settings.php:582 ../../mod/settings.php:684 +#: ../../mod/settings.php:710 ../../mod/settings.php:738 +#: ../../mod/settings.php:761 ../../mod/settings.php:843 +#: ../../mod/settings.php:1039 ../../mod/xchan.php:11 ../../mod/connect.php:93 +#: ../../mod/events.php:654 ../../mod/connedit.php:653 ../../mod/group.php:81 +#: ../../mod/setup.php:313 ../../mod/setup.php:358 ../../mod/thing.php:284 +#: ../../mod/thing.php:327 ../../mod/pdledit.php:58 ../../mod/import.php:504 +#: ../../mod/chat.php:177 ../../mod/chat.php:211 ../../mod/rate.php:167 +#: ../../mod/invite.php:142 ../../mod/locs.php:105 ../../mod/sources.php:104 +#: ../../mod/sources.php:138 ../../mod/filestorage.php:155 +#: ../../mod/fsuggest.php:108 ../../mod/poke.php:166 +#: ../../mod/profiles.php:667 ../../mod/admin.php:441 ../../mod/admin.php:809 +#: ../../mod/admin.php:943 ../../mod/admin.php:1074 ../../mod/admin.php:1269 +#: ../../mod/admin.php:1352 ../../mod/photos.php:565 ../../mod/photos.php:642 +#: ../../mod/photos.php:929 ../../mod/photos.php:969 ../../mod/photos.php:1087 +#: ../../mod/mood.php:134 ../../mod/mail.php:355 ../../mod/appman.php:99 +#: ../../mod/poll.php:68 ../../mod/bulksetclose.php:24 +#: ../../view/theme/apw/php/config.php:256 +#: ../../view/theme/redbasic/php/config.php:97 +msgid "Submit" +msgstr "Send" -#: ../../include/widgets.php:567 -msgid "Check Mail" -msgstr "Sjekk meldinger" +#: ../../include/js_strings.php:23 +msgid "Please enter a link URL" +msgstr "Vennligst skriv inn en lenke URL:" -#: ../../include/widgets.php:572 ../../include/nav.php:209 -msgid "New Message" -msgstr "Ny melding" +#: ../../include/js_strings.php:25 +msgid "timeago.prefixAgo" +msgstr "timeago.prefixAgo" -#: ../../include/widgets.php:648 -msgid "Chat Rooms" -msgstr "Chatrom" +#: ../../include/js_strings.php:26 +msgid "timeago.prefixFromNow" +msgstr "timeago.prefixFromNow" -#: ../../include/widgets.php:666 -msgid "Bookmarked Chatrooms" -msgstr "Bokmerkede chatrom" +#: ../../include/js_strings.php:27 +msgid "ago" +msgstr "siden" -#: ../../include/widgets.php:684 -msgid "Suggested Chatrooms" -msgstr "Foreslåtte chatrom" +#: ../../include/js_strings.php:28 +msgid "from now" +msgstr "fra nå" -#: ../../include/zot.php:664 -msgid "Invalid data packet" -msgstr "Ugyldig datapakke" +#: ../../include/js_strings.php:29 +msgid "less than a minute" +msgstr "mindre enn ett minutt" -#: ../../include/zot.php:680 -msgid "Unable to verify channel signature" -msgstr "Ikke i stand til å sjekke kanalsignaturen" +#: ../../include/js_strings.php:30 +msgid "about a minute" +msgstr "omtrent et minutt" -#: ../../include/zot.php:1799 +#: ../../include/js_strings.php:31 #, php-format -msgid "Unable to verify site signature for %s" -msgstr "Ikke i stand til å bekrefte signaturen til %s" - -#: ../../include/activities.php:39 -msgid " and " -msgstr "og" +msgid "%d minutes" +msgstr "%d minutter" -#: ../../include/activities.php:47 -msgid "public profile" -msgstr "offentlig profil" +#: ../../include/js_strings.php:32 +msgid "about an hour" +msgstr "omtrent en time" -#: ../../include/activities.php:52 +#: ../../include/js_strings.php:33 #, php-format -msgid "%1$s changed %2$s to “%3$s”" -msgstr "%1$s endret %2$s til “%3$s”" +msgid "about %d hours" +msgstr "omtrent %d timer" -#: ../../include/activities.php:53 -#, php-format -msgid "Visit %1$s's %2$s" -msgstr "Besøk %1$s sitt %2$s" +#: ../../include/js_strings.php:34 +msgid "a day" +msgstr "en dag" -#: ../../include/activities.php:56 +#: ../../include/js_strings.php:35 #, php-format -msgid "%1$s has an updated %2$s, changing %3$s." -msgstr "%1$s har oppdatert %2$s, endret %3$s." +msgid "%d days" +msgstr "%d dager" -#: ../../include/bb2diaspora.php:384 -msgid "Attachments:" -msgstr "Vedlegg:" +#: ../../include/js_strings.php:36 +msgid "about a month" +msgstr "omtrent en måned" -#: ../../include/bb2diaspora.php:463 ../../include/event.php:11 -msgid "l F d, Y \\@ g:i A" -msgstr "l F d, Y \\@ g:i A" +#: ../../include/js_strings.php:37 +#, php-format +msgid "%d months" +msgstr "%d måneder" -#: ../../include/bb2diaspora.php:465 -msgid "Redmatrix event notification:" -msgstr "RedMatrix hendelsesvarsling:" +#: ../../include/js_strings.php:38 +msgid "about a year" +msgstr "omtrent et år" -#: ../../include/bb2diaspora.php:469 ../../include/event.php:20 -msgid "Starts:" -msgstr "Starter:" +#: ../../include/js_strings.php:39 +#, php-format +msgid "%d years" +msgstr "%d år" -#: ../../include/bb2diaspora.php:477 ../../include/event.php:30 -msgid "Finishes:" -msgstr "Slutter:" +#: ../../include/js_strings.php:40 +msgid " " +msgstr " " -#: ../../include/bb2diaspora.php:485 ../../include/event.php:40 -#: ../../include/identity.php:891 ../../mod/directory.php:159 -#: ../../mod/events.php:579 -msgid "Location:" -msgstr "Plassering:" +#: ../../include/js_strings.php:41 +msgid "timeago.numbers" +msgstr "timeago.numbers" #: ../../include/RedDAV/RedBrowser.php:106 -#: ../../include/RedDAV/RedBrowser.php:249 +#: ../../include/RedDAV/RedBrowser.php:266 msgid "parent" msgstr "opp et nivå" -#: ../../include/RedDAV/RedBrowser.php:130 +#: ../../include/RedDAV/RedBrowser.php:130 ../../include/text.php:2395 msgid "Collection" msgstr "Samling" @@ -990,96 +1660,395 @@ msgstr "Tidsplan innboks" msgid "Schedule Outbox" msgstr "Tidsplan utboks" -#: ../../include/RedDAV/RedBrowser.php:223 +#: ../../include/RedDAV/RedBrowser.php:225 #, php-format msgid "%1$s used" msgstr "%1$s brukt" -#: ../../include/RedDAV/RedBrowser.php:228 +#: ../../include/RedDAV/RedBrowser.php:230 #, php-format msgid "%1$s used of %2$s (%3$s%)" msgstr "%1$s brukt av %2$s (%3$s%)" -#: ../../include/RedDAV/RedBrowser.php:245 ../../mod/settings.php:551 -#: ../../mod/settings.php:577 ../../mod/admin.php:866 +#: ../../include/RedDAV/RedBrowser.php:251 +msgid "Total" +msgstr "Totalt" + +#: ../../include/RedDAV/RedBrowser.php:253 +msgid "Shared" +msgstr "Delt" + +#: ../../include/RedDAV/RedBrowser.php:254 +#: ../../include/RedDAV/RedBrowser.php:303 ../../mod/menu.php:100 +#: ../../mod/mitem.php:169 ../../mod/new_channel.php:121 +msgid "Create" +msgstr "Lag" + +#: ../../include/RedDAV/RedBrowser.php:255 +#: ../../include/RedDAV/RedBrowser.php:305 ../../mod/profile_photo.php:362 +#: ../../mod/photos.php:706 ../../mod/photos.php:1236 +msgid "Upload" +msgstr "Last opp" + +#: ../../include/RedDAV/RedBrowser.php:262 ../../mod/settings.php:584 +#: ../../mod/settings.php:610 ../../mod/admin.php:950 +#: ../../mod/sharedwithme.php:100 msgid "Name" msgstr "Navn" -#: ../../include/RedDAV/RedBrowser.php:246 +#: ../../include/RedDAV/RedBrowser.php:263 msgid "Type" msgstr "Type" -#: ../../include/RedDAV/RedBrowser.php:247 +#: ../../include/RedDAV/RedBrowser.php:264 ../../mod/sharedwithme.php:101 msgid "Size" msgstr "Størrelse" -#: ../../include/RedDAV/RedBrowser.php:248 +#: ../../include/RedDAV/RedBrowser.php:265 ../../mod/sharedwithme.php:102 msgid "Last Modified" msgstr "Sist endret" -#: ../../include/RedDAV/RedBrowser.php:252 -msgid "Total" -msgstr "Totalt" - -#: ../../include/RedDAV/RedBrowser.php:305 +#: ../../include/RedDAV/RedBrowser.php:302 msgid "Create new folder" msgstr "Lag ny mappe" -#: ../../include/RedDAV/RedBrowser.php:306 ../../mod/mitem.php:169 -#: ../../mod/menu.php:100 ../../mod/new_channel.php:122 -msgid "Create" -msgstr "Lag" - -#: ../../include/RedDAV/RedBrowser.php:307 +#: ../../include/RedDAV/RedBrowser.php:304 msgid "Upload file" msgstr "Last opp fil" -#: ../../include/RedDAV/RedBrowser.php:308 ../../mod/photos.php:738 -#: ../../mod/photos.php:1245 ../../mod/profile_photo.php:361 -msgid "Upload" -msgstr "Last opp" - #: ../../include/bookmarks.php:35 #, php-format msgid "%1$s's bookmarks" msgstr "%1$s sine bokmerker" -#: ../../include/follow.php:28 -msgid "Channel is blocked on this site." -msgstr "Kanalen er blokkert på dette nettstedet." +#: ../../include/comanche.php:34 ../../mod/admin.php:381 +#: ../../view/theme/apw/php/config.php:185 +msgid "Default" +msgstr "Standard" -#: ../../include/follow.php:33 -msgid "Channel location missing." -msgstr "Kanalplassering mangler." +#: ../../include/features.php:38 +msgid "General Features" +msgstr "Generelle funksjoner" -#: ../../include/follow.php:82 -msgid "Response from remote channel was incomplete." -msgstr "Svaret fra den andre kanalen var ikke komplett." +#: ../../include/features.php:40 +msgid "Content Expiration" +msgstr "Innholdet utløper" -#: ../../include/follow.php:99 -msgid "Channel was deleted and no longer exists." -msgstr "Kanalen er slettet og finnes ikke lenger." +#: ../../include/features.php:40 +msgid "Remove posts/comments and/or private messages at a future time" +msgstr "Fjern innlegg/kommentarer og/eller private meldinger på et angitt tidspunkt i fremtiden" -#: ../../include/follow.php:135 ../../include/follow.php:202 -msgid "Protocol disabled." -msgstr "Protokollen er avskrudd." +#: ../../include/features.php:41 +msgid "Multiple Profiles" +msgstr "Flere profiler" -#: ../../include/follow.php:176 -msgid "Channel discovery failed." -msgstr "Kanaloppdagelse mislyktes." +#: ../../include/features.php:41 +msgid "Ability to create multiple profiles" +msgstr "Mulig å lage flere profiler" -#: ../../include/follow.php:192 -msgid "local account not found." -msgstr "lokal konto ble ikke funnet." +#: ../../include/features.php:42 +msgid "Advanced Profiles" +msgstr "Avanserte profiler" -#: ../../include/follow.php:220 -msgid "Cannot connect to yourself." -msgstr "Kan ikke lage forbindelse med deg selv." +#: ../../include/features.php:42 +msgid "Additional profile sections and selections" +msgstr "Ytterlige seksjoner og utvalg til profilen" -#: ../../include/comanche.php:35 ../../mod/admin.php:353 -#: ../../view/theme/apw/php/config.php:185 -msgid "Default" -msgstr "Standard" +#: ../../include/features.php:43 +msgid "Profile Import/Export" +msgstr "Profil-import/-eksport" + +#: ../../include/features.php:43 +msgid "Save and load profile details across sites/channels" +msgstr "Lagre og åpne profildetaljer på tvers av nettsteder/kanaler" + +#: ../../include/features.php:44 +msgid "Web Pages" +msgstr "Web-sider" + +#: ../../include/features.php:44 +msgid "Provide managed web pages on your channel" +msgstr "Tilby kontrollerte web-sider på din kanal" + +#: ../../include/features.php:45 +msgid "Private Notes" +msgstr "Private merknader" + +#: ../../include/features.php:45 +msgid "Enables a tool to store notes and reminders" +msgstr "Skrur på et verktøy for lagre merknader og påminnelser" + +#: ../../include/features.php:46 +msgid "Navigation Channel Select" +msgstr "Navigasjon kanalvalg" + +#: ../../include/features.php:46 +msgid "Change channels directly from within the navigation dropdown menu" +msgstr "Endre kanaler direkte fra navigasjonsmenyen" + +#: ../../include/features.php:47 +msgid "Photo Location" +msgstr "Bildeplassering" + +#: ../../include/features.php:47 +msgid "If location data is available on uploaded photos, link this to a map." +msgstr "Hvis plasseringsdata er tilgjengelige i opplastede bilder, plasser dette på et kart." + +#: ../../include/features.php:51 +msgid "Extended Identity Sharing" +msgstr "Utvidet identitetsdeling" + +#: ../../include/features.php:51 +msgid "" +"Share your identity with all websites on the internet. When disabled, " +"identity is only shared with sites in the matrix." +msgstr "Del din identiet med alle nettsteder på Internett. Når denne er avskrudd, deles identiteten bare med nettsteder i matrix." + +#: ../../include/features.php:52 +msgid "Expert Mode" +msgstr "Ekspertmodus" + +#: ../../include/features.php:52 +msgid "Enable Expert Mode to provide advanced configuration options" +msgstr "Skru på Ekspertmodus for å tilby avanserte konfigurasjonsvalg" + +#: ../../include/features.php:53 +msgid "Premium Channel" +msgstr "Premiumkanal" + +#: ../../include/features.php:53 +msgid "" +"Allows you to set restrictions and terms on those that connect with your " +"channel" +msgstr "Lar deg angi restriksjoner og betingelser for de som kobler seg til din kanal" + +#: ../../include/features.php:58 +msgid "Post Composition Features" +msgstr "Funksjoner for å lage innlegg" + +#: ../../include/features.php:60 +msgid "Use Markdown" +msgstr "Bruk Markdown" + +#: ../../include/features.php:60 +msgid "Allow use of \"Markdown\" to format posts" +msgstr "Tillat bruk av \"Markdown\" til formatering av innlegg" + +#: ../../include/features.php:61 +msgid "Large Photos" +msgstr "Store bilder" + +#: ../../include/features.php:61 +msgid "" +"Include large (640px) photo thumbnails in posts. If not enabled, use small " +"(320px) photo thumbnails" +msgstr "Inkluder store (640px) miniatyrbilder i innlegg. Hvis denne ikke er skrudd på, bruk små (320px) miniatyrbilder." + +#: ../../include/features.php:62 +msgid "Automatically import channel content from other channels or feeds" +msgstr "Automatisk import av kanalinnhold fra andre kanaler eller strømmer" + +#: ../../include/features.php:63 +msgid "Even More Encryption" +msgstr "Enda mer kryptering" + +#: ../../include/features.php:63 +msgid "" +"Allow optional encryption of content end-to-end with a shared secret key" +msgstr "Tillat valgfri kryptering av innhold ende-til-ende via en delt hemmelig nøkkel" + +#: ../../include/features.php:64 +msgid "Enable voting tools" +msgstr "Skru på verktøy for å stemme" + +#: ../../include/features.php:64 +msgid "Provide a class of post which others can vote on" +msgstr "Tilby en type innlegg som andre kan stemme på" + +#: ../../include/features.php:65 +msgid "Flag Adult Photos" +msgstr "Flagge bilder for voksne" + +#: ../../include/features.php:65 +msgid "Provide photo edit option to hide adult photos from default album view" +msgstr "Gi foto en valgmulighet for å skjule bilder for voksne fra visning i standardalbum" + +#: ../../include/features.php:70 +msgid "Network and Stream Filtering" +msgstr "Nettverk- og strømfiltrering" + +#: ../../include/features.php:71 +msgid "Search by Date" +msgstr "Søk etter dato" + +#: ../../include/features.php:71 +msgid "Ability to select posts by date ranges" +msgstr "Mulighet for å velge innlegg etter datoområde" + +#: ../../include/features.php:72 +msgid "Collections Filter" +msgstr "Filter for samlinger" + +#: ../../include/features.php:72 +msgid "Enable widget to display Network posts only from selected collections" +msgstr "Skru på miniprogram for å vise Nettverksinnlegg bare fra valgte samlinger" + +#: ../../include/features.php:73 +msgid "Save search terms for re-use" +msgstr "Lagre søkeuttrykk for senere bruk" + +#: ../../include/features.php:74 +msgid "Network Personal Tab" +msgstr "Nettverk personlig fane" + +#: ../../include/features.php:74 +msgid "Enable tab to display only Network posts that you've interacted on" +msgstr "Skru på fane for å bare vise Nettverksinnlegg som du har deltatt i" + +#: ../../include/features.php:75 +msgid "Network New Tab" +msgstr "Nettverk Ny fane" + +#: ../../include/features.php:75 +msgid "Enable tab to display all new Network activity" +msgstr "Skru på fane for å vise all ny nettverksaktivitet" + +#: ../../include/features.php:76 +msgid "Affinity Tool" +msgstr "Nærhetsverktøy" + +#: ../../include/features.php:76 +msgid "Filter stream activity by depth of relationships" +msgstr "Filtrer strømaktiviteten etter releasjonsdybde" + +#: ../../include/features.php:77 +msgid "Suggest Channels" +msgstr "Foreslå kanaler" + +#: ../../include/features.php:77 +msgid "Show channel suggestions" +msgstr "Vis kanalforslag" + +#: ../../include/features.php:82 +msgid "Post/Comment Tools" +msgstr "Innlegg-/Kommentar-verktøy" + +#: ../../include/features.php:83 +msgid "Tagging" +msgstr "Merking" + +#: ../../include/features.php:83 +msgid "Ability to tag existing posts" +msgstr "Mulighet til å merke eksisterende meldinger" + +#: ../../include/features.php:84 +msgid "Post Categories" +msgstr "Innleggskategorier" + +#: ../../include/features.php:84 +msgid "Add categories to your posts" +msgstr "Legg kategorier til dine innlegg" + +#: ../../include/features.php:85 +msgid "Ability to file posts under folders" +msgstr "Mulighet til å sortere innlegg i mapper" + +#: ../../include/features.php:86 +msgid "Dislike Posts" +msgstr "Mislik innlegg" + +#: ../../include/features.php:86 +msgid "Ability to dislike posts/comments" +msgstr "Mulighet til å mislike innlegg/kommentarer" + +#: ../../include/features.php:87 +msgid "Star Posts" +msgstr "Stjerneinnlegg" + +#: ../../include/features.php:87 +msgid "Ability to mark special posts with a star indicator" +msgstr "Mulighet til å merke spesielle innlegg med en stjerne" + +#: ../../include/features.php:88 +msgid "Tag Cloud" +msgstr "Merkelappsky" + +#: ../../include/features.php:88 +msgid "Provide a personal tag cloud on your channel page" +msgstr "Tilby en personlig merkelappsky på din kanalside" + +#: ../../include/items.php:382 ../../mod/like.php:270 +#: ../../mod/subthread.php:49 ../../mod/group.php:68 ../../mod/profperm.php:23 +#: ../../mod/bulksetclose.php:11 ../../index.php:392 +msgid "Permission denied" +msgstr "Tillatelse avvist" + +#: ../../include/items.php:979 ../../include/items.php:1024 +msgid "(Unknown)" +msgstr "(Ukjent)" + +#: ../../include/items.php:1181 +msgid "Visible to anybody on the internet." +msgstr "Synlig for enhver på Internett." + +#: ../../include/items.php:1183 +msgid "Visible to you only." +msgstr "Synlig bare for deg." + +#: ../../include/items.php:1185 +msgid "Visible to anybody in this network." +msgstr "Synlig for enhver i dette nettverket." + +#: ../../include/items.php:1187 +msgid "Visible to anybody authenticated." +msgstr "Synlig for enhver som er autentisert." + +#: ../../include/items.php:1189 +#, php-format +msgid "Visible to anybody on %s." +msgstr "Synlig for alle på %s." + +#: ../../include/items.php:1191 +msgid "Visible to all connections." +msgstr "Synlig for alle forbindelser." + +#: ../../include/items.php:1193 +msgid "Visible to approved connections." +msgstr "Synlig for godkjente forbindelser." + +#: ../../include/items.php:1195 +msgid "Visible to specific connections." +msgstr "Synlig for spesifikke forbindelser." + +#: ../../include/items.php:4023 ../../mod/thing.php:76 +#: ../../mod/display.php:32 ../../mod/filestorage.php:27 +#: ../../mod/viewsrc.php:20 ../../mod/admin.php:167 ../../mod/admin.php:981 +#: ../../mod/admin.php:1181 +msgid "Item not found." +msgstr "Elementet ble ikke funnet." + +#: ../../include/items.php:4476 ../../mod/group.php:38 ../../mod/group.php:140 +#: ../../mod/bulksetclose.php:51 +msgid "Collection not found." +msgstr "Samlingen ble ikke funnet." + +#: ../../include/items.php:4491 +msgid "Collection is empty." +msgstr "Samlingen er tom." + +#: ../../include/items.php:4498 +#, php-format +msgid "Collection: %s" +msgstr "Samling: %s" + +#: ../../include/items.php:4509 +#, php-format +msgid "Connection: %s" +msgstr "Forbindelse: %s" + +#: ../../include/items.php:4512 +msgid "Connection not found." +msgstr "Forbindelsen ble ikke funnet." #: ../../include/contact_selectors.php:56 msgid "Frequently" @@ -1117,8 +2086,9 @@ msgstr "OStatus" msgid "RSS/Atom" msgstr "RSS/Atom" -#: ../../include/contact_selectors.php:79 ../../mod/admin.php:726 -#: ../../mod/admin.php:735 ../../boot.php:1488 +#: ../../include/contact_selectors.php:79 ../../mod/id.php:12 +#: ../../mod/id.php:13 ../../mod/admin.php:812 ../../mod/admin.php:821 +#: ../../boot.php:1554 msgid "Email" msgstr "E-post" @@ -1146,1734 +2116,996 @@ msgstr "XMPP/IM" msgid "MySpace" msgstr "MySpace" -#: ../../include/contact_widgets.php:14 -#, php-format -msgid "%d invitation available" -msgid_plural "%d invitations available" -msgstr[0] "%d invitasjon tilgjengelig" -msgstr[1] "%d invitasjoner tilgjengelig" - -#: ../../include/contact_widgets.php:19 ../../mod/admin.php:416 -msgid "Advanced" -msgstr "Avansert" +#: ../../include/message.php:18 +msgid "No recipient provided." +msgstr "Ingen mottaker angitt." -#: ../../include/contact_widgets.php:22 -msgid "Find Channels" -msgstr "Finn kanaler" +#: ../../include/message.php:23 +msgid "[no subject]" +msgstr "[ikke noe emne]" -#: ../../include/contact_widgets.php:23 -msgid "Enter name or interest" -msgstr "Skriv navn eller interesse" +#: ../../include/message.php:45 +msgid "Unable to determine sender." +msgstr "Kan ikke avgjøre avsender." -#: ../../include/contact_widgets.php:24 -msgid "Connect/Follow" -msgstr "Forbindelse/Følg" +#: ../../include/message.php:200 +msgid "Stored post could not be verified." +msgstr "Lagret innlegg kunne ikke bekreftes." -#: ../../include/contact_widgets.php:25 -msgid "Examples: Robert Morgenstein, Fishing" -msgstr "Eksempler: Ola Nordmann, fisking" +#: ../../include/follow.php:28 +msgid "Channel is blocked on this site." +msgstr "Kanalen er blokkert på dette nettstedet." -#: ../../include/contact_widgets.php:26 ../../mod/directory.php:267 -#: ../../mod/directory.php:272 ../../mod/connections.php:412 -msgid "Find" -msgstr "Finn" +#: ../../include/follow.php:33 +msgid "Channel location missing." +msgstr "Kanalplassering mangler." -#: ../../include/contact_widgets.php:27 ../../mod/suggest.php:59 -msgid "Channel Suggestions" -msgstr "Kanalforslag" +#: ../../include/follow.php:83 +msgid "Response from remote channel was incomplete." +msgstr "Svaret fra den andre kanalen var ikke komplett." -#: ../../include/contact_widgets.php:29 -msgid "Random Profile" -msgstr "Tilfeldig profil" +#: ../../include/follow.php:100 +msgid "Channel was deleted and no longer exists." +msgstr "Kanalen er slettet og finnes ikke lenger." -#: ../../include/contact_widgets.php:30 -msgid "Invite Friends" -msgstr "Inviter venner" +#: ../../include/follow.php:135 ../../include/follow.php:197 +msgid "Protocol disabled." +msgstr "Protokollen er avskrudd." -#: ../../include/contact_widgets.php:32 -msgid "Advanced example: name=fred and country=iceland" -msgstr "Avansert eksempel: navn=fred og land=island" +#: ../../include/follow.php:170 +msgid "Channel discovery failed." +msgstr "Kanaloppdagelse mislyktes." -#: ../../include/contact_widgets.php:125 -#, php-format -msgid "%d connection in common" -msgid_plural "%d connections in common" -msgstr[0] "%d forbindelse felles" -msgstr[1] "%d forbindelser felles" +#: ../../include/follow.php:186 +msgid "local account not found." +msgstr "lokal konto ble ikke funnet." -#: ../../include/contact_widgets.php:130 -msgid "show more" -msgstr "vis mer" +#: ../../include/follow.php:215 +msgid "Cannot connect to yourself." +msgstr "Kan ikke lage forbindelse med deg selv." -#: ../../include/enotify.php:41 -msgid "Red Matrix Notification" -msgstr "Red Matrix-varsling" +#: ../../include/ItemObject.php:130 +msgid "Save to Folder" +msgstr "Lagre i mappe" -#: ../../include/enotify.php:42 -msgid "redmatrix" -msgstr "redmatrix" +#: ../../include/ItemObject.php:151 +msgid "I will attend" +msgstr "Jeg vil delta" -#: ../../include/enotify.php:44 -msgid "Thank You," -msgstr "Tusen takk," +#: ../../include/ItemObject.php:151 +msgid "I will not attend" +msgstr "Jeg deltar ikke" -#: ../../include/enotify.php:46 -#, php-format -msgid "%s Administrator" -msgstr "%s administrator" +#: ../../include/ItemObject.php:151 +msgid "I might attend" +msgstr "Jeg vil kanskje delta" -#: ../../include/enotify.php:81 -#, php-format -msgid "%s <!item_type!>" -msgstr "%s <!item_type!>" +#: ../../include/ItemObject.php:161 +msgid "I agree" +msgstr "Jeg er enig" -#: ../../include/enotify.php:85 -#, php-format -msgid "[Red:Notify] New mail received at %s" -msgstr "[Red:Notify] Ny melding mottatt hos %s" +#: ../../include/ItemObject.php:161 +msgid "I disagree" +msgstr "Jeg er uenig" -#: ../../include/enotify.php:87 -#, php-format -msgid "%1$s, %2$s sent you a new private message at %3$s." -msgstr "%1$s, %2$s sendte deg en ny privat melding på %3$s." +#: ../../include/ItemObject.php:161 +msgid "I abstain" +msgstr "Jeg avstår" -#: ../../include/enotify.php:88 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "%1$s sendte deg %2$s." +#: ../../include/ItemObject.php:212 +msgid "Add Star" +msgstr "Legg til stjerne" -#: ../../include/enotify.php:88 -msgid "a private message" -msgstr "en privat melding" +#: ../../include/ItemObject.php:213 +msgid "Remove Star" +msgstr "Fjern stjerne" -#: ../../include/enotify.php:89 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "Vennligst besøk %s for å se og/eller svare på dine private meldinger." +#: ../../include/ItemObject.php:214 +msgid "Toggle Star Status" +msgstr "Skru av og på stjernestatus" -#: ../../include/enotify.php:144 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]a %4$s[/zrl]" -msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]a %4$s[/zrl]" +#: ../../include/ItemObject.php:218 +msgid "starred" +msgstr "stjernemerket" -#: ../../include/enotify.php:152 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]%4$s's %5$s[/zrl]" -msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]%4$s's %5$s[/zrl]" +#: ../../include/ItemObject.php:236 +msgid "Add Tag" +msgstr "Legg til merkelapp" -#: ../../include/enotify.php:161 -#, php-format -msgid "%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]" -msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]din %4$s[/zrl]" +#: ../../include/ItemObject.php:254 ../../mod/photos.php:947 +msgid "I like this (toggle)" +msgstr "Jeg liker dette (skru av og på)" -#: ../../include/enotify.php:172 -#, php-format -msgid "[Red:Notify] Comment to conversation #%1$d by %2$s" -msgstr "[Red:Notify] Kommentar til samtale #%1$d av %2$s" +#: ../../include/ItemObject.php:254 ../../include/taxonomy.php:305 +msgid "like" +msgstr "liker" -#: ../../include/enotify.php:173 -#, php-format -msgid "%1$s, %2$s commented on an item/conversation you have been following." -msgstr "%1$s, %2$s kommenterte på et element eller en samtale du følger" +#: ../../include/ItemObject.php:255 ../../mod/photos.php:948 +msgid "I don't like this (toggle)" +msgstr "Jeg liker ikke dette (skru av og på)" -#: ../../include/enotify.php:176 ../../include/enotify.php:191 -#: ../../include/enotify.php:217 ../../include/enotify.php:236 -#: ../../include/enotify.php:250 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "Vennligst besøk %s for å se og/eller svare i samtalen" +#: ../../include/ItemObject.php:255 ../../include/taxonomy.php:306 +msgid "dislike" +msgstr "misliker" -#: ../../include/enotify.php:182 -#, php-format -msgid "[Red:Notify] %s posted to your profile wall" -msgstr "[Red:Notify] %s skrev et innlegg på din profilvegg" +#: ../../include/ItemObject.php:259 +msgid "Share This" +msgstr "Del dette" -#: ../../include/enotify.php:184 -#, php-format -msgid "%1$s, %2$s posted to your profile wall at %3$s" -msgstr "%1$s, %2$s skrev et innlegg på din profilvegg på %3$s" +#: ../../include/ItemObject.php:259 +msgid "share" +msgstr "del" -#: ../../include/enotify.php:186 +#: ../../include/ItemObject.php:276 #, php-format -msgid "%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]" -msgstr "%1$s, %2$s skrev et innlegg på [zrl=%3$s]din vegg[/zrl]" +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "%d kommentar" +msgstr[1] "%d kommentarer" -#: ../../include/enotify.php:210 +#: ../../include/ItemObject.php:294 ../../include/ItemObject.php:295 #, php-format -msgid "[Red:Notify] %s tagged you" -msgstr "[Red:Notify] %s merket deg" +msgid "View %s's profile - %s" +msgstr "Vis %s sin profil - %s" -#: ../../include/enotify.php:211 -#, php-format -msgid "%1$s, %2$s tagged you at %3$s" -msgstr "%1$s, %2$s merket deg på %3$s" +#: ../../include/ItemObject.php:298 +msgid "to" +msgstr "til" -#: ../../include/enotify.php:212 -#, php-format -msgid "%1$s, %2$s [zrl=%3$s]tagged you[/zrl]." -msgstr "%1$s, %2$s [zrl=%3$s]merket deg[/zrl]." +#: ../../include/ItemObject.php:299 +msgid "via" +msgstr "via" -#: ../../include/enotify.php:225 -#, php-format -msgid "[Red:Notify] %1$s poked you" -msgstr "[Red:Notify] %1$s prikket deg" +#: ../../include/ItemObject.php:300 +msgid "Wall-to-Wall" +msgstr "vegg-til-vegg" -#: ../../include/enotify.php:226 -#, php-format -msgid "%1$s, %2$s poked you at %3$s" -msgstr "%1$s, %2$s dyttet deg på %3$s" +#: ../../include/ItemObject.php:301 +msgid "via Wall-To-Wall:" +msgstr "via vegg-til-vegg:" -#: ../../include/enotify.php:227 -#, php-format -msgid "%1$s, %2$s [zrl=%2$s]poked you[/zrl]." -msgstr "%1$s, %2$s [zrl=%2$s]dyttet deg[/zrl]." +#: ../../include/ItemObject.php:337 +msgid "Save Bookmarks" +msgstr "Lagre bokmerker" -#: ../../include/enotify.php:243 -#, php-format -msgid "[Red:Notify] %s tagged your post" -msgstr "[Red:Notify] %s merket ditt innlegg" +#: ../../include/ItemObject.php:338 +msgid "Add to Calendar" +msgstr "Legg til i kalender" -#: ../../include/enotify.php:244 -#, php-format -msgid "%1$s, %2$s tagged your post at %3$s" -msgstr "%1$s, %2$s merket ditt innlegg på %3$s" +#: ../../include/ItemObject.php:347 +msgid "Mark all seen" +msgstr "Merk alle som sett" -#: ../../include/enotify.php:245 -#, php-format -msgid "%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]" -msgstr "%1$s, %2$s merket [zrl=%3$s]ditt innlegg[/zrl]" +#: ../../include/ItemObject.php:353 ../../mod/photos.php:1133 +msgctxt "noun" +msgid "Likes" +msgstr "Liker" -#: ../../include/enotify.php:257 -msgid "[Red:Notify] Introduction received" -msgstr "[Red:Notify] Introduksjon mottatt" +#: ../../include/ItemObject.php:354 ../../mod/photos.php:1134 +msgctxt "noun" +msgid "Dislikes" +msgstr "Liker ikke" -#: ../../include/enotify.php:258 -#, php-format -msgid "%1$s, you've received an new connection request from '%2$s' at %3$s" -msgstr "%1$s, du har mottatt en ny forespørsel om forbindelse fra '%2$s' hos %3$s" +#: ../../include/ItemObject.php:359 ../../include/acl_selectors.php:249 +#: ../../mod/photos.php:1139 +msgid "Close" +msgstr "Lukk" -#: ../../include/enotify.php:259 -#, php-format -msgid "" -"%1$s, you've received [zrl=%2$s]a new connection request[/zrl] from %3$s." -msgstr "%1$s, du mottok [zrl=%2$s]en ny forespørsel om forbindelse[/zrl] fra %3$s." +#: ../../include/ItemObject.php:665 ../../mod/photos.php:966 +#: ../../mod/photos.php:1084 +msgid "This is you" +msgstr "Dette er deg" -#: ../../include/enotify.php:263 ../../include/enotify.php:282 -#, php-format -msgid "You may visit their profile at %s" -msgstr "Du kan besøke profilen deres på %s" +#: ../../include/ItemObject.php:674 +msgid "Image" +msgstr "Bilde" -#: ../../include/enotify.php:265 -#, php-format -msgid "Please visit %s to approve or reject the connection request." -msgstr "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse." +#: ../../include/ItemObject.php:675 +msgid "Insert Link" +msgstr "Sett inn lenke" -#: ../../include/enotify.php:272 -msgid "[Red:Notify] Friend suggestion received" -msgstr "[Red:Notify] Venneforslag mottatt" +#: ../../include/ItemObject.php:676 +msgid "Video" +msgstr "Video" -#: ../../include/enotify.php:273 -#, php-format -msgid "%1$s, you've received a friend suggestion from '%2$s' at %3$s" -msgstr "%1$s, du har mottatt en venneforespørsel fra '%2$s' hos %3$s" +#: ../../include/datetime.php:35 +msgid "Miscellaneous" +msgstr "Forskjellig" -#: ../../include/enotify.php:274 -#, php-format -msgid "" -"%1$s, you've received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from " -"%4$s." -msgstr "%1$s, du har mottatt [zrl=%2$s]et venneforslaget[/zrl] angående %3$s fra %4$s. " +#: ../../include/datetime.php:113 +msgid "YYYY-MM-DD or MM-DD" +msgstr "YYYY-MM-DD eller MM-DD" -#: ../../include/enotify.php:280 -msgid "Name:" -msgstr "Navn:" +#: ../../include/datetime.php:212 ../../mod/events.php:633 +#: ../../mod/appman.php:91 ../../mod/appman.php:92 +msgid "Required" +msgstr "Påkrevd" -#: ../../include/enotify.php:281 -msgid "Photo:" -msgstr "Bilde:" +#: ../../include/datetime.php:231 ../../boot.php:2356 +msgid "never" +msgstr "aldri" -#: ../../include/enotify.php:284 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "Vennligst besøk %s for å godkjenne eller avslå dette forslaget." +#: ../../include/datetime.php:237 +msgid "less than a second ago" +msgstr "for mindre enn ett sekund siden" -#: ../../include/enotify.php:477 -msgid "[Red:Notify]" -msgstr "[Red:Notify]" +#: ../../include/datetime.php:240 +msgid "year" +msgstr "år" -#: ../../include/event.php:326 -msgid "This event has been added to your calendar." -msgstr "Denne hendelsen er lagt til i din kalender." +#: ../../include/datetime.php:240 +msgid "years" +msgstr "år" -#: ../../include/group.php:26 -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 "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn." +#: ../../include/datetime.php:241 +msgid "month" +msgstr "måned" -#: ../../include/group.php:235 -msgid "Default privacy group for new contacts" -msgstr "Standard personverngruppe for nye kontakter" +#: ../../include/datetime.php:241 +msgid "months" +msgstr "måneder" -#: ../../include/group.php:254 ../../mod/admin.php:735 -msgid "All Channels" -msgstr "Alle kanaler" +#: ../../include/datetime.php:242 +msgid "week" +msgstr "uke" -#: ../../include/group.php:276 -msgid "edit" -msgstr "endre" +#: ../../include/datetime.php:242 +msgid "weeks" +msgstr "uker" -#: ../../include/group.php:298 -msgid "Collections" -msgstr "Samlinger" +#: ../../include/datetime.php:243 +msgid "day" +msgstr "dag" -#: ../../include/group.php:299 -msgid "Edit collection" -msgstr "Endre samling" +#: ../../include/datetime.php:243 +msgid "days" +msgstr "dager" -#: ../../include/group.php:300 -msgid "Create a new collection" -msgstr "Lag en ny samling" +#: ../../include/datetime.php:244 +msgid "hour" +msgstr "time" -#: ../../include/group.php:301 -msgid "Channels not in any collection" -msgstr "Kanaler som ikke er i noen samling" +#: ../../include/datetime.php:244 +msgid "hours" +msgstr "timer" -#: ../../include/bbcode.php:112 ../../include/bbcode.php:653 -#: ../../include/bbcode.php:656 ../../include/bbcode.php:661 -#: ../../include/bbcode.php:664 ../../include/bbcode.php:667 -#: ../../include/bbcode.php:670 ../../include/bbcode.php:675 -#: ../../include/bbcode.php:678 ../../include/bbcode.php:683 -#: ../../include/bbcode.php:686 ../../include/bbcode.php:689 -#: ../../include/bbcode.php:692 -msgid "Image/photo" -msgstr "Bilde/fotografi" +#: ../../include/datetime.php:245 +msgid "minute" +msgstr "minutt" -#: ../../include/bbcode.php:147 ../../include/bbcode.php:703 -msgid "Encrypted content" -msgstr "Kryptert innhold" +#: ../../include/datetime.php:245 +msgid "minutes" +msgstr "minutter" -#: ../../include/bbcode.php:165 -msgid "Install design element: " -msgstr "Installer designelement:" +#: ../../include/datetime.php:246 +msgid "second" +msgstr "sekund" -#: ../../include/bbcode.php:171 -msgid "QR code" -msgstr "QR-kode" +#: ../../include/datetime.php:246 +msgid "seconds" +msgstr "sekunder" -#: ../../include/bbcode.php:220 +#: ../../include/datetime.php:255 #, php-format -msgid "%1$s wrote the following %2$s %3$s" -msgstr "%1$s skrev følgende %2$s %3$s" - -#: ../../include/bbcode.php:222 -msgid "post" -msgstr "innlegg" - -#: ../../include/bbcode.php:621 -msgid "$1 spoiler" -msgstr "$1 avsløring" - -#: ../../include/bbcode.php:641 -msgid "$1 wrote:" -msgstr "$1 skrev:" - -#: ../../include/taxonomy.php:210 -msgid "Tags" -msgstr "Merkelapper" +msgid "%1$d %2$s ago" +msgstr "%1$d %2$s siden" -#: ../../include/taxonomy.php:249 -msgid "Keywords" -msgstr "Nøkkelord" +#: ../../include/datetime.php:463 +#, php-format +msgid "%1$s's birthday" +msgstr "%1$s sin fødselsdag" -#: ../../include/taxonomy.php:274 -msgid "have" -msgstr "har" +#: ../../include/datetime.php:464 +#, php-format +msgid "Happy Birthday %1$s" +msgstr "Gratulerer med dagen, %1$s !" -#: ../../include/taxonomy.php:274 -msgid "has" -msgstr "har" +#: ../../include/Contact.php:124 +msgid "New window" +msgstr "Nytt vindu" -#: ../../include/taxonomy.php:275 -msgid "want" -msgstr "ønsker" +#: ../../include/Contact.php:125 +msgid "Open the selected location in a different window or browser tab" +msgstr "Åpne det valgte stedet i et annet vindu eller nettleser-fane" -#: ../../include/taxonomy.php:275 -msgid "wants" -msgstr "ønsker" +#: ../../include/Contact.php:215 ../../mod/admin.php:726 +#, php-format +msgid "User '%s' deleted" +msgstr "Brukeren '%s' er slettet" -#: ../../include/taxonomy.php:276 ../../include/ItemObject.php:221 -msgid "like" -msgstr "liker" +#: ../../include/bb2diaspora.php:349 +msgid "Attachments:" +msgstr "Vedlegg:" -#: ../../include/taxonomy.php:276 -msgid "likes" -msgstr "liker" +#: ../../include/bb2diaspora.php:428 ../../include/event.php:11 +msgid "l F d, Y \\@ g:i A" +msgstr "l F d, Y \\@ g:i A" -#: ../../include/taxonomy.php:277 ../../include/ItemObject.php:222 -msgid "dislike" -msgstr "misliker" +#: ../../include/bb2diaspora.php:430 +msgid "Redmatrix event notification:" +msgstr "RedMatrix hendelsesvarsling:" -#: ../../include/taxonomy.php:277 -msgid "dislikes" -msgstr "misliker" +#: ../../include/bb2diaspora.php:434 ../../include/event.php:20 +msgid "Starts:" +msgstr "Starter:" -#: ../../include/taxonomy.php:360 ../../include/identity.php:1148 -#: ../../include/ItemObject.php:146 ../../mod/photos.php:1026 -msgctxt "noun" -msgid "Like" -msgid_plural "Likes" -msgstr[0] "Liker" -msgstr[1] "Liker" +#: ../../include/bb2diaspora.php:442 ../../include/event.php:30 +msgid "Finishes:" +msgstr "Slutter:" -#: ../../include/nav.php:95 ../../include/nav.php:128 ../../boot.php:1485 +#: ../../include/nav.php:87 ../../include/nav.php:120 ../../boot.php:1551 msgid "Logout" msgstr "Logg ut" -#: ../../include/nav.php:95 ../../include/nav.php:128 +#: ../../include/nav.php:87 ../../include/nav.php:120 msgid "End this session" msgstr "Avslutt denne økten" -#: ../../include/nav.php:98 ../../include/nav.php:159 +#: ../../include/nav.php:90 ../../include/nav.php:151 msgid "Home" msgstr "Hjem" -#: ../../include/nav.php:98 +#: ../../include/nav.php:90 msgid "Your posts and conversations" msgstr "Dine innlegg og samtaler" -#: ../../include/nav.php:99 +#: ../../include/nav.php:91 msgid "Your profile page" msgstr "Din profilside" -#: ../../include/nav.php:101 +#: ../../include/nav.php:93 msgid "Edit Profiles" msgstr "Endre profiler" -#: ../../include/nav.php:101 +#: ../../include/nav.php:93 msgid "Manage/Edit profiles" msgstr "Håndter/endre profiler" -#: ../../include/nav.php:103 ../../include/identity.php:864 -msgid "Edit Profile" -msgstr "Endre profil" - -#: ../../include/nav.php:103 +#: ../../include/nav.php:95 msgid "Edit your profile" msgstr "Endre din profil" -#: ../../include/nav.php:105 +#: ../../include/nav.php:97 msgid "Your photos" msgstr "Dine bilder" -#: ../../include/nav.php:106 +#: ../../include/nav.php:98 msgid "Your files" msgstr "Dine filer" -#: ../../include/nav.php:111 ../../include/apps.php:144 +#: ../../include/nav.php:103 ../../include/apps.php:146 msgid "Chat" msgstr "Chat" -#: ../../include/nav.php:111 +#: ../../include/nav.php:103 msgid "Your chatrooms" msgstr "Dine chatterom" -#: ../../include/nav.php:117 +#: ../../include/nav.php:109 msgid "Your bookmarks" msgstr "Dine bokmerker" -#: ../../include/nav.php:121 +#: ../../include/nav.php:113 msgid "Your webpages" msgstr "Dine websider" -#: ../../include/nav.php:125 ../../include/apps.php:129 ../../boot.php:1486 +#: ../../include/nav.php:117 ../../include/apps.php:131 ../../boot.php:1552 msgid "Login" msgstr "Logg inn" -#: ../../include/nav.php:125 +#: ../../include/nav.php:117 msgid "Sign in" msgstr "Logg på" -#: ../../include/nav.php:142 +#: ../../include/nav.php:134 #, php-format msgid "%s - click to logout" msgstr "%s - klikk for å logge ut" -#: ../../include/nav.php:145 +#: ../../include/nav.php:137 msgid "Remote authentication" msgstr "Fjernautentisering" -#: ../../include/nav.php:145 +#: ../../include/nav.php:137 msgid "Click to authenticate to your home hub" msgstr "Klikk for å godkjennes mot din hjemme-hub" -#: ../../include/nav.php:159 +#: ../../include/nav.php:151 msgid "Home Page" msgstr "Hjemmeside" -#: ../../include/nav.php:163 ../../mod/register.php:224 ../../boot.php:1464 +#: ../../include/nav.php:155 ../../mod/register.php:224 ../../boot.php:1528 msgid "Register" msgstr "Registrer" -#: ../../include/nav.php:163 +#: ../../include/nav.php:155 msgid "Create an account" msgstr "Lag en konto" -#: ../../include/nav.php:168 ../../include/apps.php:140 ../../mod/help.php:58 -#: ../../mod/help.php:63 +#: ../../include/nav.php:160 ../../include/apps.php:142 ../../mod/help.php:67 +#: ../../mod/help.php:72 msgid "Help" msgstr "Hjelp" -#: ../../include/nav.php:168 +#: ../../include/nav.php:160 msgid "Help and documentation" msgstr "Hjelp og dokumentasjon" -#: ../../include/nav.php:171 +#: ../../include/nav.php:163 msgid "Applications, utilities, links, games" msgstr "Programmer, verktøy, lenker, spill" -#: ../../include/nav.php:173 ../../include/text.php:826 -#: ../../include/text.php:838 ../../include/apps.php:145 -#: ../../mod/search.php:30 +#: ../../include/nav.php:165 ../../include/apps.php:147 +#: ../../include/text.php:832 ../../include/text.php:844 +#: ../../mod/search.php:34 msgid "Search" msgstr "Søk" -#: ../../include/nav.php:173 +#: ../../include/nav.php:165 msgid "Search site content" msgstr "Søk stedets innhold" -#: ../../include/nav.php:176 ../../include/apps.php:139 -#: ../../mod/directory.php:271 +#: ../../include/nav.php:168 ../../include/apps.php:141 +#: ../../mod/directory.php:353 msgid "Directory" msgstr "Katalog" -#: ../../include/nav.php:176 +#: ../../include/nav.php:168 msgid "Channel Directory" msgstr "Kanalkatalog" -#: ../../include/nav.php:190 ../../include/apps.php:131 +#: ../../include/nav.php:180 ../../include/apps.php:133 msgid "Matrix" msgstr "Matrix" -#: ../../include/nav.php:190 +#: ../../include/nav.php:180 msgid "Your matrix" msgstr "Din matrix" -#: ../../include/nav.php:191 +#: ../../include/nav.php:181 msgid "Mark all matrix notifications seen" msgstr "Merk alle matrix-varsler som sett" -#: ../../include/nav.php:193 ../../include/apps.php:135 +#: ../../include/nav.php:183 ../../include/apps.php:137 msgid "Channel Home" msgstr "Kanalhjem" -#: ../../include/nav.php:193 +#: ../../include/nav.php:183 msgid "Channel home" msgstr "Kanalhjem" -#: ../../include/nav.php:194 +#: ../../include/nav.php:184 msgid "Mark all channel notifications seen" msgstr "Merk alle kanalvarsler som sett" -#: ../../include/nav.php:197 ../../mod/connections.php:406 +#: ../../include/nav.php:187 ../../mod/connections.php:407 msgid "Connections" msgstr "Forbindelser" -#: ../../include/nav.php:200 +#: ../../include/nav.php:190 msgid "Notices" msgstr "Varsel" -#: ../../include/nav.php:200 +#: ../../include/nav.php:190 msgid "Notifications" msgstr "Varsler" -#: ../../include/nav.php:201 +#: ../../include/nav.php:191 msgid "See all notifications" msgstr "Se alle varsler" -#: ../../include/nav.php:202 ../../mod/notifications.php:99 +#: ../../include/nav.php:192 ../../mod/notifications.php:99 msgid "Mark all system notifications seen" msgstr "Merk alle systemvarsler som sett" -#: ../../include/nav.php:204 ../../include/apps.php:141 +#: ../../include/nav.php:194 ../../include/apps.php:143 msgid "Mail" msgstr "Melding" -#: ../../include/nav.php:204 +#: ../../include/nav.php:194 msgid "Private mail" msgstr "Privat post" -#: ../../include/nav.php:205 +#: ../../include/nav.php:195 msgid "See all private messages" msgstr "Se alle private meldinger" -#: ../../include/nav.php:206 +#: ../../include/nav.php:196 msgid "Mark all private messages seen" msgstr "Merk alle private meldinger som sett" -#: ../../include/nav.php:207 +#: ../../include/nav.php:197 msgid "Inbox" msgstr "Innboks" -#: ../../include/nav.php:208 +#: ../../include/nav.php:198 msgid "Outbox" msgstr "Utboks" -#: ../../include/nav.php:212 ../../include/apps.php:138 -#: ../../mod/events.php:431 +#: ../../include/nav.php:202 ../../include/apps.php:140 +#: ../../mod/events.php:472 msgid "Events" msgstr "Hendelser" -#: ../../include/nav.php:212 +#: ../../include/nav.php:202 msgid "Event Calendar" msgstr "Kalender" -#: ../../include/nav.php:213 +#: ../../include/nav.php:203 msgid "See all events" msgstr "Se alle hendelser" -#: ../../include/nav.php:214 +#: ../../include/nav.php:204 msgid "Mark all events seen" msgstr "Merk alle hendelser som sett" -#: ../../include/nav.php:216 ../../include/apps.php:130 -#: ../../mod/manage.php:148 +#: ../../include/nav.php:206 ../../include/apps.php:132 +#: ../../mod/manage.php:164 msgid "Channel Manager" msgstr "Kanalstyring" -#: ../../include/nav.php:216 +#: ../../include/nav.php:206 msgid "Manage Your Channels" msgstr "Håndter dine kanaler" -#: ../../include/nav.php:218 +#: ../../include/nav.php:208 msgid "Account/Channel Settings" msgstr "Konto-/kanal-innstillinger" -#: ../../include/nav.php:226 ../../mod/admin.php:123 +#: ../../include/nav.php:216 ../../mod/admin.php:120 msgid "Admin" msgstr "Administrator" -#: ../../include/nav.php:226 +#: ../../include/nav.php:216 msgid "Site Setup and Configuration" msgstr "Nettstedsoppsett og -konfigurasjon" -#: ../../include/nav.php:262 +#: ../../include/nav.php:252 +msgid "@name, #tag, content" +msgstr "@navn, @merkelapp, innhold" + +#: ../../include/nav.php:253 msgid "Please wait..." msgstr "Vennligst vent..." -#: ../../include/permissions.php:13 -msgid "Can view my normal stream and posts" -msgstr "Kan se min normale strøm og innlegg" - -#: ../../include/permissions.php:14 -msgid "Can view my default channel profile" -msgstr "Kan se min standard kanalprofil" - -#: ../../include/permissions.php:15 -msgid "Can view my photo albums" -msgstr "Kan se mine fotoalbum" - -#: ../../include/permissions.php:16 -msgid "Can view my connections" -msgstr "Kan se mine forbindelser" - -#: ../../include/permissions.php:17 -msgid "Can view my file storage" -msgstr "Kan se mitt fillager" - -#: ../../include/permissions.php:18 -msgid "Can view my webpages" -msgstr "Kan se mine websider" - -#: ../../include/permissions.php:21 -msgid "Can send me their channel stream and posts" -msgstr "Kan sende meg deres kanalstrøm og innlegg" - -#: ../../include/permissions.php:22 -msgid "Can post on my channel page (\"wall\")" -msgstr "Kan lage innlegg på min kanalside (\"vegg\")" - -#: ../../include/permissions.php:23 -msgid "Can comment on or like my posts" -msgstr "Kan kommentere på eller like mine innlegg" - -#: ../../include/permissions.php:24 -msgid "Can send me private mail messages" -msgstr "Kan sende meg private meldinger" - -#: ../../include/permissions.php:25 -msgid "Can post photos to my photo albums" -msgstr "Kan legge inn bilder i mine fotoalbum" - -#: ../../include/permissions.php:26 -msgid "Can like/dislike stuff" -msgstr "Kan like/ikke like forskjellige greier" - -#: ../../include/permissions.php:26 -msgid "Profiles and things other than posts/comments" -msgstr "Profiler og andre ting enn innlegg/kommentarer" - -#: ../../include/permissions.php:28 -msgid "Can forward to all my channel contacts via post @mentions" -msgstr "Kan videresende til alle mine kanalkontakter via @navn i innlegg" - -#: ../../include/permissions.php:28 -msgid "Advanced - useful for creating group forum channels" -msgstr "Avansert - nyttig for å lage forumkanaler for grupper" - -#: ../../include/permissions.php:29 -msgid "Can chat with me (when available)" -msgstr "Kan chatte/sende lynmeldinger til meg (når tilgjengelig)" - -#: ../../include/permissions.php:30 -msgid "Can write to my file storage" -msgstr "Kan skrive til mitt fillager" - -#: ../../include/permissions.php:31 -msgid "Can edit my webpages" -msgstr "Kan endre mine websider" - -#: ../../include/permissions.php:33 -msgid "Can source my public posts in derived channels" -msgstr "Kan bruke mine offentlige innlegg som kanalkilde i egne kanaler" - -#: ../../include/permissions.php:33 -msgid "Somewhat advanced - very useful in open communities" -msgstr "Litt avansert - svært nyttig i åpne fellesskap" - -#: ../../include/permissions.php:35 -msgid "Can administer my channel resources" -msgstr "Kan administrere mine kanalressurser" - -#: ../../include/permissions.php:35 -msgid "" -"Extremely advanced. Leave this alone unless you know what you are doing" -msgstr "Ekstremt avansert. La dette være med mindre du vet hva du gjør" - -#: ../../include/permissions.php:785 -msgid "Social Networking" -msgstr "Sosialt nettverk" - -#: ../../include/permissions.php:786 ../../include/permissions.php:788 -#: ../../include/permissions.php:790 -msgid "Mostly Public" -msgstr "Ganske offentlig" - -#: ../../include/permissions.php:786 ../../include/permissions.php:788 -#: ../../include/permissions.php:790 -msgid "Restricted" -msgstr "Begrenset" - -#: ../../include/permissions.php:786 ../../include/permissions.php:788 -msgid "Private" -msgstr "Privat" +#: ../../include/taxonomy.php:222 ../../include/taxonomy.php:243 +msgid "Tags" +msgstr "Merkelapper" -#: ../../include/permissions.php:787 -msgid "Community Forum" -msgstr "Forum for fellesskap" +#: ../../include/taxonomy.php:282 +msgid "Keywords" +msgstr "Nøkkelord" -#: ../../include/permissions.php:789 -msgid "Feed Republish" -msgstr "Republisering av strømmet innhold" +#: ../../include/taxonomy.php:303 +msgid "have" +msgstr "har" -#: ../../include/permissions.php:791 -msgid "Special Purpose" -msgstr "Spesiell bruk" +#: ../../include/taxonomy.php:303 +msgid "has" +msgstr "har" -#: ../../include/permissions.php:792 -msgid "Celebrity/Soapbox" -msgstr "Kjendis/Talerstol" +#: ../../include/taxonomy.php:304 +msgid "want" +msgstr "ønsker" -#: ../../include/permissions.php:792 -msgid "Group Repository" -msgstr "Gruppelager" +#: ../../include/taxonomy.php:304 +msgid "wants" +msgstr "ønsker" -#: ../../include/permissions.php:793 ../../include/profile_selectors.php:6 -#: ../../include/profile_selectors.php:23 -#: ../../include/profile_selectors.php:61 -#: ../../include/profile_selectors.php:97 -msgid "Other" -msgstr "Annen" +#: ../../include/taxonomy.php:305 +msgid "likes" +msgstr "liker" -#: ../../include/permissions.php:794 -msgid "Custom/Expert Mode" -msgstr "Tilpasset/Ekspertmodus" +#: ../../include/taxonomy.php:306 +msgid "dislikes" +msgstr "misliker" -#: ../../include/Contact.php:123 -msgid "New window" -msgstr "Nytt vindu" +#: ../../include/activities.php:39 +msgid " and " +msgstr "og" -#: ../../include/Contact.php:124 -msgid "Open the selected location in a different window or browser tab" -msgstr "Åpne det valgte stedet i et annet vindu eller nettleser-fane" +#: ../../include/activities.php:47 +msgid "public profile" +msgstr "offentlig profil" -#: ../../include/Contact.php:211 ../../mod/admin.php:646 +#: ../../include/activities.php:56 #, php-format -msgid "User '%s' deleted" -msgstr "Brukeren '%s' er slettet" - -#: ../../include/features.php:23 -msgid "General Features" -msgstr "Generelle funksjoner" - -#: ../../include/features.php:25 -msgid "Content Expiration" -msgstr "Innholdet utløper" - -#: ../../include/features.php:25 -msgid "Remove posts/comments and/or private messages at a future time" -msgstr "Fjern innlegg/kommentarer og/eller private meldinger på et angitt tidspunkt i fremtiden" - -#: ../../include/features.php:26 -msgid "Multiple Profiles" -msgstr "Flere profiler" - -#: ../../include/features.php:26 -msgid "Ability to create multiple profiles" -msgstr "Mulig å lage flere profiler" - -#: ../../include/features.php:27 -msgid "Advanced Profiles" -msgstr "Avanserte profiler" - -#: ../../include/features.php:27 -msgid "Additional profile sections and selections" -msgstr "Ytterlige seksjoner og utvalg til profilen" - -#: ../../include/features.php:28 -msgid "Profile Import/Export" -msgstr "Profil-import/-eksport" - -#: ../../include/features.php:28 -msgid "Save and load profile details across sites/channels" -msgstr "Lagre og åpne profildetaljer på tvers av nettsteder/kanaler" - -#: ../../include/features.php:29 -msgid "Web Pages" -msgstr "Web-sider" - -#: ../../include/features.php:29 -msgid "Provide managed web pages on your channel" -msgstr "Tilby kontrollerte web-sider på din kanal" - -#: ../../include/features.php:30 -msgid "Private Notes" -msgstr "Private merknader" - -#: ../../include/features.php:30 -msgid "Enables a tool to store notes and reminders" -msgstr "Skrur på et verktøy for lagre merknader og påminnelser" - -#: ../../include/features.php:34 -msgid "Navigation Channel Select" -msgstr "Navigasjon kanalvalg" - -#: ../../include/features.php:34 -msgid "Change channels directly from within the navigation dropdown menu" -msgstr "Endre kanaler direkte fra navigasjonsmenyen" - -#: ../../include/features.php:38 -msgid "Extended Identity Sharing" -msgstr "Utvidet identitetsdeling" - -#: ../../include/features.php:38 -msgid "" -"Share your identity with all websites on the internet. When disabled, " -"identity is only shared with sites in the matrix." -msgstr "Del din identiet med alle nettsteder på Internett. Når denne er avskrudd, deles identiteten bare med nettsteder i matrix." - -#: ../../include/features.php:39 -msgid "Expert Mode" -msgstr "Ekspertmodus" - -#: ../../include/features.php:39 -msgid "Enable Expert Mode to provide advanced configuration options" -msgstr "Skru på Ekspertmodus for å tilby avanserte konfigurasjonsvalg" - -#: ../../include/features.php:40 -msgid "Premium Channel" -msgstr "Premiumkanal" - -#: ../../include/features.php:40 -msgid "" -"Allows you to set restrictions and terms on those that connect with your " -"channel" -msgstr "Lar deg angi restriksjoner og betingelser for de som kobler seg til din kanal" - -#: ../../include/features.php:45 -msgid "Post Composition Features" -msgstr "Funksjoner for å lage innlegg" - -#: ../../include/features.php:47 -msgid "Use Markdown" -msgstr "Bruk Markdown" - -#: ../../include/features.php:47 -msgid "Allow use of \"Markdown\" to format posts" -msgstr "Tillat bruk av \"Markdown\" til formatering av innlegg" - -#: ../../include/features.php:48 -msgid "Post Preview" -msgstr "Forhåndsvisning av innlegg" - -#: ../../include/features.php:48 -msgid "Allow previewing posts and comments before publishing them" -msgstr "Tillat forhåndsvisning av innlegg og kommentarer før publisering" - -#: ../../include/features.php:49 -msgid "Automatically import channel content from other channels or feeds" -msgstr "Automatisk import av kanalinnhold fra andre kanaler eller strømmer" - -#: ../../include/features.php:50 -msgid "Even More Encryption" -msgstr "Enda mer kryptering" - -#: ../../include/features.php:50 -msgid "" -"Allow optional encryption of content end-to-end with a shared secret key" -msgstr "Tillat valgfri kryptering av innhold ende-til-ende via en delt hemmelig nøkkel" - -#: ../../include/features.php:55 -msgid "Network and Stream Filtering" -msgstr "Nettverk- og strømfiltrering" - -#: ../../include/features.php:56 -msgid "Search by Date" -msgstr "Søk etter dato" - -#: ../../include/features.php:56 -msgid "Ability to select posts by date ranges" -msgstr "Mulighet for å velge innlegg etter datoområde" - -#: ../../include/features.php:57 -msgid "Collections Filter" -msgstr "Filter for samlinger" - -#: ../../include/features.php:57 -msgid "Enable widget to display Network posts only from selected collections" -msgstr "Skru på miniprogram for å vise Nettverksinnlegg bare fra valgte samlinger" - -#: ../../include/features.php:58 -msgid "Save search terms for re-use" -msgstr "Lagre søkeuttrykk for senere bruk" - -#: ../../include/features.php:59 -msgid "Network Personal Tab" -msgstr "Nettverk personlig fane" - -#: ../../include/features.php:59 -msgid "Enable tab to display only Network posts that you've interacted on" -msgstr "Skru på fane for å bare vise Nettverksinnlegg som du har deltatt i" - -#: ../../include/features.php:60 -msgid "Network New Tab" -msgstr "Nettverk Ny fane" - -#: ../../include/features.php:60 -msgid "Enable tab to display all new Network activity" -msgstr "Skru på fane for å vise all ny nettverksaktivitet" +msgid "%1$s changed %2$s to “%3$s”" +msgstr "%1$s endret %2$s til “%3$s”" -#: ../../include/features.php:61 -msgid "Affinity Tool" -msgstr "Nærhetsverktøy" +#: ../../include/activities.php:57 +#, php-format +msgid "Visit %1$s's %2$s" +msgstr "Besøk %1$s sitt %2$s" -#: ../../include/features.php:61 -msgid "Filter stream activity by depth of relationships" -msgstr "Filtrer strømaktiviteten etter releasjonsdybde" +#: ../../include/activities.php:60 +#, php-format +msgid "%1$s has an updated %2$s, changing %3$s." +msgstr "%1$s har oppdatert %2$s, endret %3$s." -#: ../../include/features.php:62 -msgid "Suggest Channels" -msgstr "Foreslå kanaler" +#: ../../include/event.php:376 +msgid "This event has been added to your calendar." +msgstr "Denne hendelsen er lagt til i din kalender." -#: ../../include/features.php:62 -msgid "Show channel suggestions" -msgstr "Vis kanalforslag" +#: ../../include/api.php:1081 +msgid "Public Timeline" +msgstr "Offentlig tidslinje" -#: ../../include/features.php:67 -msgid "Post/Comment Tools" -msgstr "Innlegg-/Kommentar-verktøy" +#: ../../include/network.php:620 +msgid "view full size" +msgstr "vis full størrelse" -#: ../../include/features.php:69 -msgid "Edit Sent Posts" -msgstr "Endre publiserte innlegg" +#: ../../include/dir_fns.php:134 +msgid "Directory Options" +msgstr "Kataloginnstillinger" -#: ../../include/features.php:69 -msgid "Edit and correct posts and comments after sending" -msgstr "Endre og korrigere innlegg og kommentarer etter sending" +#: ../../include/dir_fns.php:135 +msgid "Alphabetic" +msgstr "Alfabetisk" -#: ../../include/features.php:70 -msgid "Tagging" -msgstr "Merking" +#: ../../include/dir_fns.php:136 +msgid "Reverse Alphabetic" +msgstr "Omvendt alfabetisk" -#: ../../include/features.php:70 -msgid "Ability to tag existing posts" -msgstr "Mulighet til å merke eksisterende meldinger" +#: ../../include/dir_fns.php:137 +msgid "Newest to Oldest" +msgstr "Nyest til eldst" -#: ../../include/features.php:71 -msgid "Post Categories" -msgstr "Innleggskategorier" +#: ../../include/dir_fns.php:138 +msgid "Oldest to Newest" +msgstr "Eldst til nyest" -#: ../../include/features.php:71 -msgid "Add categories to your posts" -msgstr "Legg kategorier til dine innlegg" +#: ../../include/dir_fns.php:139 +msgid "Sort" +msgstr "Sorter" -#: ../../include/features.php:72 -msgid "Ability to file posts under folders" -msgstr "Mulighet til å sortere innlegg i mapper" +#: ../../include/dir_fns.php:143 +msgid "Safe Mode" +msgstr "Trygt modus" -#: ../../include/features.php:73 -msgid "Dislike Posts" -msgstr "Mislik innlegg" +#: ../../include/dir_fns.php:145 +msgid "Public Forums Only" +msgstr "Bare offentlige forum" -#: ../../include/features.php:73 -msgid "Ability to dislike posts/comments" -msgstr "Mulighet til å mislike innlegg/kommentarer" +#: ../../include/dir_fns.php:146 +msgid "This Website Only" +msgstr "Kun dette nettstedet" -#: ../../include/features.php:74 -msgid "Star Posts" -msgstr "Stjerneinnlegg" +#: ../../include/oembed.php:183 +msgid "Embedded content" +msgstr "Innebygget innhold" -#: ../../include/features.php:74 -msgid "Ability to mark special posts with a star indicator" -msgstr "Mulighet til å merke spesielle innlegg med en stjerne" +#: ../../include/oembed.php:192 +msgid "Embedding disabled" +msgstr "Innbygging avskrudd" -#: ../../include/features.php:75 -msgid "Tag Cloud" -msgstr "Merkelappsky" +#: ../../include/zot.php:679 +msgid "Invalid data packet" +msgstr "Ugyldig datapakke" -#: ../../include/features.php:75 -msgid "Provide a personal tag cloud on your channel page" -msgstr "Tilby en personlig merkelappsky på din kanalside" +#: ../../include/zot.php:695 +msgid "Unable to verify channel signature" +msgstr "Ikke i stand til å sjekke kanalsignaturen" -#: ../../include/account.php:23 -msgid "Not a valid email address" -msgstr "Ikke en gyldig e-postadresse" +#: ../../include/zot.php:2079 +#, php-format +msgid "Unable to verify site signature for %s" +msgstr "Ikke i stand til å bekrefte signaturen til %s" -#: ../../include/account.php:25 -msgid "Your email domain is not among those allowed on this site" -msgstr "Ditt e-postdomene er ikke blant de som er tillatt på dette stedet" +#: ../../include/auth.php:130 +msgid "Logged out." +msgstr "Logget ut." -#: ../../include/account.php:31 -msgid "Your email address is already registered at this site." -msgstr "Din e-postadresse er allerede registrert på dette nettstedet." +#: ../../include/auth.php:271 +msgid "Failed authentication" +msgstr "Mislykket autentisering" -#: ../../include/account.php:64 -msgid "An invitation is required." -msgstr "En invitasjon er påkrevd." +#: ../../include/auth.php:285 ../../mod/openid.php:190 +msgid "Login failed." +msgstr "Innlogging mislyktes." -#: ../../include/account.php:68 -msgid "Invitation could not be verified." -msgstr "Invitasjon kunne ikke bekreftes." +#: ../../include/enotify.php:41 +msgid "Red Matrix Notification" +msgstr "Red Matrix-varsling" -#: ../../include/account.php:119 -msgid "Please enter the required information." -msgstr "Vennligst skriv inn nødvendig informasjon." +#: ../../include/enotify.php:42 +msgid "redmatrix" +msgstr "redmatrix" -#: ../../include/account.php:187 -msgid "Failed to store account information." -msgstr "Mislyktes med å lagre kontoinformasjon." +#: ../../include/enotify.php:44 +msgid "Thank You," +msgstr "Tusen takk," -#: ../../include/account.php:245 +#: ../../include/enotify.php:46 #, php-format -msgid "Registration confirmation for %s" -msgstr "Registreringsbekreftelse for %s" +msgid "%s Administrator" +msgstr "%s administrator" -#: ../../include/account.php:313 +#: ../../include/enotify.php:81 #, php-format -msgid "Registration request at %s" -msgstr "Registreringsforespørsel hos %s" - -#: ../../include/account.php:315 ../../include/account.php:342 -#: ../../include/account.php:399 -msgid "Administrator" -msgstr "Administrator" - -#: ../../include/account.php:337 -msgid "your registration password" -msgstr "ditt registreringspassord" +msgid "%s <!item_type!>" +msgstr "%s <!item_type!>" -#: ../../include/account.php:340 ../../include/account.php:397 +#: ../../include/enotify.php:85 #, php-format -msgid "Registration details for %s" -msgstr "Registreringsdetaljer for %s" - -#: ../../include/account.php:406 -msgid "Account approved." -msgstr "Konto godkjent." +msgid "[Red:Notify] New mail received at %s" +msgstr "[Red:Notify] Ny melding mottatt hos %s" -#: ../../include/account.php:440 +#: ../../include/enotify.php:87 #, php-format -msgid "Registration revoked for %s" -msgstr "Registrering trukket tilbake for %s" - -#: ../../include/account.php:486 -msgid "Account verified. Please login." -msgstr "Konto bekreftet. Vennligst logg inn." - -#: ../../include/account.php:648 ../../include/account.php:650 -msgid "Click here to upgrade." -msgstr "Klikk her for å oppgradere." - -#: ../../include/account.php:656 -msgid "This action exceeds the limits set by your subscription plan." -msgstr "Denne handlingen går utenfor grensene satt i din abonnementsplan." - -#: ../../include/account.php:661 -msgid "This action is not available under your subscription plan." -msgstr "Denne handlingen er ikke tilgjengelig i din abonnementsplan." - -#: ../../include/identity.php:31 ../../mod/item.php:1368 -msgid "Unable to obtain identity information from database" -msgstr "Klarer ikke å få tak i identitetsinformasjon fra databasen" - -#: ../../include/identity.php:66 -msgid "Empty name" -msgstr "Mangler navn" - -#: ../../include/identity.php:68 -msgid "Name too long" -msgstr "Navnet er for langt" - -#: ../../include/identity.php:169 -msgid "No account identifier" -msgstr "Ingen kontoidentifikator" - -#: ../../include/identity.php:182 -msgid "Nickname is required." -msgstr "Kallenavn er påkrevd." - -#: ../../include/identity.php:196 -msgid "Reserved nickname. Please choose another." -msgstr "Reservert kallenavn. Vennligst velg et annet." - -#: ../../include/identity.php:201 ../../include/dimport.php:34 -msgid "" -"Nickname has unsupported characters or is already being used on this site." -msgstr "Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk på dette nettstedet." - -#: ../../include/identity.php:283 -msgid "Unable to retrieve created identity" -msgstr "Klarer ikke å hente den lagede identiteten" - -#: ../../include/identity.php:343 -msgid "Default Profile" -msgstr "Standardprofil" - -#: ../../include/identity.php:643 -msgid "Requested channel is not available." -msgstr "Forespurt kanal er ikke tilgjengelig." - -#: ../../include/identity.php:691 ../../mod/achievements.php:11 -#: ../../mod/connect.php:13 ../../mod/profile.php:16 ../../mod/blocks.php:29 -#: ../../mod/webpages.php:29 ../../mod/editblock.php:29 -#: ../../mod/editlayout.php:28 ../../mod/editwebpage.php:28 -#: ../../mod/filestorage.php:48 ../../mod/layouts.php:29 ../../mod/hcard.php:8 -msgid "Requested profile is not available." -msgstr "Forespurt profil er ikke tilgjengelig." - -#: ../../include/identity.php:854 ../../mod/profiles.php:740 -msgid "Change profile photo" -msgstr "Endre profilbilde" - -#: ../../include/identity.php:860 -msgid "Profiles" -msgstr "Profiler" - -#: ../../include/identity.php:860 -msgid "Manage/edit profiles" -msgstr "Håndtere/endre profiler" - -#: ../../include/identity.php:861 ../../mod/profiles.php:741 -msgid "Create New Profile" -msgstr "Lag ny profil" - -#: ../../include/identity.php:875 ../../mod/profiles.php:752 -msgid "Profile Image" -msgstr "Profilbilde" - -#: ../../include/identity.php:878 -msgid "visible to everybody" -msgstr "synlig for alle" - -#: ../../include/identity.php:879 ../../mod/profiles.php:635 -#: ../../mod/profiles.php:756 -msgid "Edit visibility" -msgstr "Endre synlighet" - -#: ../../include/identity.php:895 ../../include/identity.php:1132 -msgid "Gender:" -msgstr "Kjønn:" - -#: ../../include/identity.php:896 ../../include/identity.php:1176 -msgid "Status:" -msgstr "Status:" - -#: ../../include/identity.php:897 ../../include/identity.php:1187 -msgid "Homepage:" -msgstr "Hjemmeside:" - -#: ../../include/identity.php:898 -msgid "Online Now" -msgstr "Online nå" - -#: ../../include/identity.php:976 ../../include/identity.php:1056 -#: ../../mod/ping.php:318 -msgid "g A l F d" -msgstr "g A l F d" - -#: ../../include/identity.php:977 ../../include/identity.php:1057 -msgid "F d" -msgstr "F d" - -#: ../../include/identity.php:1022 ../../include/identity.php:1097 -#: ../../mod/ping.php:340 -msgid "[today]" -msgstr "[idag]" - -#: ../../include/identity.php:1034 -msgid "Birthday Reminders" -msgstr "Fødselsdagspåminnnelser" - -#: ../../include/identity.php:1035 -msgid "Birthdays this week:" -msgstr "Fødselsdager denne uken:" - -#: ../../include/identity.php:1090 -msgid "[No description]" -msgstr "[Ingen beskrivelse]" - -#: ../../include/identity.php:1108 -msgid "Event Reminders" -msgstr "Hendelsespåminnelser" - -#: ../../include/identity.php:1109 -msgid "Events this week:" -msgstr "Hendelser denne uken:" - -#: ../../include/identity.php:1122 ../../include/identity.php:1240 -#: ../../include/apps.php:136 ../../mod/profperm.php:112 -msgid "Profile" -msgstr "Profil" - -#: ../../include/identity.php:1130 ../../mod/settings.php:984 -msgid "Full Name:" -msgstr "Fullt navn:" - -#: ../../include/identity.php:1137 -msgid "Like this channel" -msgstr "Lik denne kanalen" - -#: ../../include/identity.php:1161 -msgid "j F, Y" -msgstr "j F, Y" - -#: ../../include/identity.php:1162 -msgid "j F" -msgstr "j F" - -#: ../../include/identity.php:1169 -msgid "Birthday:" -msgstr "Fødselsdag:" - -#: ../../include/identity.php:1173 -msgid "Age:" -msgstr "Alder:" +msgid "%1$s, %2$s sent you a new private message at %3$s." +msgstr "%1$s, %2$s sendte deg en ny privat melding på %3$s." -#: ../../include/identity.php:1182 +#: ../../include/enotify.php:88 #, php-format -msgid "for %1$d %2$s" -msgstr "for %1$d %2$s" - -#: ../../include/identity.php:1185 ../../mod/profiles.php:657 -msgid "Sexual Preference:" -msgstr "Seksuell preferanse:" - -#: ../../include/identity.php:1189 ../../mod/profiles.php:659 -msgid "Hometown:" -msgstr "Hjemby:" - -#: ../../include/identity.php:1191 -msgid "Tags:" -msgstr "Merkelapper:" - -#: ../../include/identity.php:1193 ../../mod/profiles.php:660 -msgid "Political Views:" -msgstr "Politiske synspunkter:" - -#: ../../include/identity.php:1195 -msgid "Religion:" -msgstr "Religion:" - -#: ../../include/identity.php:1197 -msgid "About:" -msgstr "Om:" - -#: ../../include/identity.php:1199 -msgid "Hobbies/Interests:" -msgstr "Hobbyer/interesser:" - -#: ../../include/identity.php:1201 ../../mod/profiles.php:663 -msgid "Likes:" -msgstr "Liker:" - -#: ../../include/identity.php:1203 ../../mod/profiles.php:664 -msgid "Dislikes:" -msgstr "Misliker:" - -#: ../../include/identity.php:1206 -msgid "Contact information and Social Networks:" -msgstr "Kontaktinformasjon og sosiale nettverk:" - -#: ../../include/identity.php:1208 -msgid "My other channels:" -msgstr "Mine andre kanaler:" - -#: ../../include/identity.php:1210 -msgid "Musical interests:" -msgstr "Musikkinteresse:" - -#: ../../include/identity.php:1212 -msgid "Books, literature:" -msgstr "Bøker, litteratur:" - -#: ../../include/identity.php:1214 -msgid "Television:" -msgstr "TV:" - -#: ../../include/identity.php:1216 -msgid "Film/dance/culture/entertainment:" -msgstr "Film/dans/kultur/underholdning:" - -#: ../../include/identity.php:1218 -msgid "Love/Romance:" -msgstr "Kjærlighet/romantikk:" - -#: ../../include/identity.php:1220 -msgid "Work/employment:" -msgstr "Arbeid/sysselsetting:" - -#: ../../include/identity.php:1222 -msgid "School/education:" -msgstr "Skole/utdannelse:" - -#: ../../include/identity.php:1242 -msgid "Like this thing" -msgstr "Lik denne tingen" - -#: ../../include/items.php:377 ../../mod/profperm.php:23 -#: ../../mod/subthread.php:49 ../../mod/group.php:68 ../../mod/like.php:246 -#: ../../index.php:389 -msgid "Permission denied" -msgstr "Tillatelse avvist" - -#: ../../include/items.php:964 ../../include/items.php:1009 -msgid "(Unknown)" -msgstr "(Ukjent)" - -#: ../../include/items.php:1165 -msgid "Visible to anybody on the internet." -msgstr "Synlig for enhver på Internett." - -#: ../../include/items.php:1167 -msgid "Visible to you only." -msgstr "Synlig bare for deg." - -#: ../../include/items.php:1169 -msgid "Visible to anybody in this network." -msgstr "Synlig for enhver i dette nettverket." +msgid "%1$s sent you %2$s." +msgstr "%1$s sendte deg %2$s." -#: ../../include/items.php:1171 -msgid "Visible to anybody authenticated." -msgstr "Synlig for enhver som er autentisert." +#: ../../include/enotify.php:88 +msgid "a private message" +msgstr "en privat melding" -#: ../../include/items.php:1173 +#: ../../include/enotify.php:89 #, php-format -msgid "Visible to anybody on %s." -msgstr "Synlig for alle på %s." - -#: ../../include/items.php:1175 -msgid "Visible to all connections." -msgstr "Synlig for alle forbindelser." - -#: ../../include/items.php:1177 -msgid "Visible to approved connections." -msgstr "Synlig for godkjente forbindelser." - -#: ../../include/items.php:1179 -msgid "Visible to specific connections." -msgstr "Synlig for spesifikke forbindelser." - -#: ../../include/items.php:3946 ../../mod/thing.php:76 -#: ../../mod/display.php:32 ../../mod/filestorage.php:26 -#: ../../mod/admin.php:168 ../../mod/admin.php:896 ../../mod/admin.php:1099 -#: ../../mod/viewsrc.php:20 -msgid "Item not found." -msgstr "Elementet ble ikke funnet." - -#: ../../include/items.php:4402 ../../mod/group.php:38 ../../mod/group.php:140 -msgid "Collection not found." -msgstr "Samlingen ble ikke funnet." +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "Vennligst besøk %s for å se og/eller svare på dine private meldinger." -#: ../../include/items.php:4417 -msgid "Collection is empty." -msgstr "Samlingen er tom." +#: ../../include/enotify.php:144 +#, php-format +msgid "%1$s, %2$s commented on [zrl=%3$s]a %4$s[/zrl]" +msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]a %4$s[/zrl]" -#: ../../include/items.php:4424 +#: ../../include/enotify.php:152 #, php-format -msgid "Collection: %s" -msgstr "Samling: %s" +msgid "%1$s, %2$s commented on [zrl=%3$s]%4$s's %5$s[/zrl]" +msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]%4$s's %5$s[/zrl]" -#: ../../include/items.php:4435 +#: ../../include/enotify.php:161 #, php-format -msgid "Connection: %s" -msgstr "Forbindelse: %s" +msgid "%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]" +msgstr "%1$s, %2$s kommenterte på [zrl=%3$s]din %4$s[/zrl]" -#: ../../include/items.php:4438 -msgid "Connection not found." -msgstr "Forbindelsen ble ikke funnet." +#: ../../include/enotify.php:172 +#, php-format +msgid "[Red:Notify] Comment to conversation #%1$d by %2$s" +msgstr "[Red:Notify] Kommentar til samtale #%1$d av %2$s" -#: ../../include/message.php:18 -msgid "No recipient provided." -msgstr "Ingen mottaker angitt." +#: ../../include/enotify.php:173 +#, php-format +msgid "%1$s, %2$s commented on an item/conversation you have been following." +msgstr "%1$s, %2$s kommenterte på et element eller en samtale du følger" -#: ../../include/message.php:23 -msgid "[no subject]" -msgstr "[ikke noe emne]" +#: ../../include/enotify.php:176 ../../include/enotify.php:191 +#: ../../include/enotify.php:217 ../../include/enotify.php:236 +#: ../../include/enotify.php:250 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "Vennligst besøk %s for å se og/eller svare i samtalen" -#: ../../include/message.php:45 -msgid "Unable to determine sender." -msgstr "Kan ikke avgjøre avsender." +#: ../../include/enotify.php:182 +#, php-format +msgid "[Red:Notify] %s posted to your profile wall" +msgstr "[Red:Notify] %s skrev et innlegg på din profilvegg" -#: ../../include/message.php:200 -msgid "Stored post could not be verified." -msgstr "Lagret innlegg kunne ikke bekreftes." +#: ../../include/enotify.php:184 +#, php-format +msgid "%1$s, %2$s posted to your profile wall at %3$s" +msgstr "%1$s, %2$s skrev et innlegg på din profilvegg på %3$s" -#: ../../include/network.php:590 -msgid "view full size" -msgstr "vis full størrelse" +#: ../../include/enotify.php:186 +#, php-format +msgid "%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]" +msgstr "%1$s, %2$s skrev et innlegg på [zrl=%3$s]din vegg[/zrl]" -#: ../../include/attach.php:221 ../../include/attach.php:275 -msgid "Item was not found." -msgstr "Elementet ble ikke funnet." +#: ../../include/enotify.php:210 +#, php-format +msgid "[Red:Notify] %s tagged you" +msgstr "[Red:Notify] %s merket deg" -#: ../../include/attach.php:331 -msgid "No source file." -msgstr "Ingen kildefil." +#: ../../include/enotify.php:211 +#, php-format +msgid "%1$s, %2$s tagged you at %3$s" +msgstr "%1$s, %2$s merket deg på %3$s" -#: ../../include/attach.php:348 -msgid "Cannot locate file to replace" -msgstr "Kan ikke finne filen som skal byttes ut" +#: ../../include/enotify.php:212 +#, php-format +msgid "%1$s, %2$s [zrl=%3$s]tagged you[/zrl]." +msgstr "%1$s, %2$s [zrl=%3$s]merket deg[/zrl]." -#: ../../include/attach.php:366 -msgid "Cannot locate file to revise/update" -msgstr "Finner ikke filen som skal revideres/oppdateres" +#: ../../include/enotify.php:225 +#, php-format +msgid "[Red:Notify] %1$s poked you" +msgstr "[Red:Notify] %1$s prikket deg" -#: ../../include/attach.php:377 +#: ../../include/enotify.php:226 #, php-format -msgid "File exceeds size limit of %d" -msgstr "Filens størrelse overgår grensen på %d" +msgid "%1$s, %2$s poked you at %3$s" +msgstr "%1$s, %2$s dyttet deg på %3$s" -#: ../../include/attach.php:389 +#: ../../include/enotify.php:227 #, php-format -msgid "You have reached your limit of %1$.0f Mbytes attachment storage." -msgstr "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes." +msgid "%1$s, %2$s [zrl=%2$s]poked you[/zrl]." +msgstr "%1$s, %2$s [zrl=%2$s]dyttet deg[/zrl]." -#: ../../include/attach.php:472 -msgid "File upload failed. Possible system limit or action terminated." -msgstr "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt." +#: ../../include/enotify.php:243 +#, php-format +msgid "[Red:Notify] %s tagged your post" +msgstr "[Red:Notify] %s merket ditt innlegg" -#: ../../include/attach.php:484 -msgid "Stored file could not be verified. Upload failed." -msgstr "Lagret fil kunne ikke bekreftes. Opplasting mislyktes." +#: ../../include/enotify.php:244 +#, php-format +msgid "%1$s, %2$s tagged your post at %3$s" +msgstr "%1$s, %2$s merket ditt innlegg på %3$s" -#: ../../include/attach.php:526 ../../include/attach.php:543 -msgid "Path not available." -msgstr "Stien er ikke tilgjengelig." +#: ../../include/enotify.php:245 +#, php-format +msgid "%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]" +msgstr "%1$s, %2$s merket [zrl=%3$s]ditt innlegg[/zrl]" -#: ../../include/attach.php:589 -msgid "Empty pathname" -msgstr "Tomt sti-navn" +#: ../../include/enotify.php:257 +msgid "[Red:Notify] Introduction received" +msgstr "[Red:Notify] Introduksjon mottatt" -#: ../../include/attach.php:605 -msgid "duplicate filename or path" -msgstr "duplikat av filnavn eller sti" +#: ../../include/enotify.php:258 +#, php-format +msgid "%1$s, you've received an new connection request from '%2$s' at %3$s" +msgstr "%1$s, du har mottatt en ny forespørsel om forbindelse fra '%2$s' hos %3$s" -#: ../../include/attach.php:629 -msgid "Path not found." -msgstr "Stien ble ikke funnet." +#: ../../include/enotify.php:259 +#, php-format +msgid "" +"%1$s, you've received [zrl=%2$s]a new connection request[/zrl] from %3$s." +msgstr "%1$s, du mottok [zrl=%2$s]en ny forespørsel om forbindelse[/zrl] fra %3$s." -#: ../../include/attach.php:680 -msgid "mkdir failed." -msgstr "mkdir mislyktes." +#: ../../include/enotify.php:263 ../../include/enotify.php:282 +#, php-format +msgid "You may visit their profile at %s" +msgstr "Du kan besøke profilen deres på %s" -#: ../../include/attach.php:684 -msgid "database storage failed." -msgstr "databaselagring mislyktes." +#: ../../include/enotify.php:265 +#, php-format +msgid "Please visit %s to approve or reject the connection request." +msgstr "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse." -#: ../../include/auth.php:116 -msgid "Logged out." -msgstr "Logget ut." +#: ../../include/enotify.php:272 +msgid "[Red:Notify] Friend suggestion received" +msgstr "[Red:Notify] Venneforslag mottatt" -#: ../../include/auth.php:257 -msgid "Failed authentication" -msgstr "Mislykket autentisering" +#: ../../include/enotify.php:273 +#, php-format +msgid "%1$s, you've received a friend suggestion from '%2$s' at %3$s" +msgstr "%1$s, du har mottatt en venneforespørsel fra '%2$s' hos %3$s" -#: ../../include/auth.php:271 ../../mod/openid.php:190 -msgid "Login failed." -msgstr "Innlogging mislyktes." +#: ../../include/enotify.php:274 +#, php-format +msgid "" +"%1$s, you've received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from " +"%4$s." +msgstr "%1$s, du har mottatt [zrl=%2$s]et venneforslaget[/zrl] angående %3$s fra %4$s. " -#: ../../include/datetime.php:43 ../../include/datetime.php:45 -msgid "Miscellaneous" -msgstr "Forskjellig" +#: ../../include/enotify.php:280 +msgid "Name:" +msgstr "Navn:" -#: ../../include/datetime.php:142 -msgid "YYYY-MM-DD or MM-DD" -msgstr "YYYY-MM-DD eller MM-DD" +#: ../../include/enotify.php:281 +msgid "Photo:" +msgstr "Bilde:" -#: ../../include/datetime.php:248 -msgid "never" -msgstr "aldri" +#: ../../include/enotify.php:284 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "Vennligst besøk %s for å godkjenne eller avslå dette forslaget." -#: ../../include/datetime.php:254 -msgid "less than a second ago" -msgstr "for mindre enn ett sekund siden" +#: ../../include/enotify.php:499 +msgid "[Red:Notify]" +msgstr "[Red:Notify]" -#: ../../include/datetime.php:257 -msgid "year" -msgstr "år" +#: ../../include/contact_widgets.php:14 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "%d invitasjon tilgjengelig" +msgstr[1] "%d invitasjoner tilgjengelig" -#: ../../include/datetime.php:257 -msgid "years" -msgstr "år" +#: ../../include/contact_widgets.php:19 ../../mod/admin.php:445 +msgid "Advanced" +msgstr "Avansert" -#: ../../include/datetime.php:258 -msgid "month" -msgstr "måned" +#: ../../include/contact_widgets.php:22 +msgid "Find Channels" +msgstr "Finn kanaler" -#: ../../include/datetime.php:258 -msgid "months" -msgstr "måneder" +#: ../../include/contact_widgets.php:23 +msgid "Enter name or interest" +msgstr "Skriv navn eller interesse" -#: ../../include/datetime.php:259 -msgid "week" -msgstr "uke" +#: ../../include/contact_widgets.php:24 +msgid "Connect/Follow" +msgstr "Forbindelse/Følg" -#: ../../include/datetime.php:259 -msgid "weeks" -msgstr "uker" +#: ../../include/contact_widgets.php:25 +msgid "Examples: Robert Morgenstein, Fishing" +msgstr "Eksempler: Ola Nordmann, fisking" -#: ../../include/datetime.php:260 -msgid "day" -msgstr "dag" +#: ../../include/contact_widgets.php:26 ../../mod/connections.php:413 +#: ../../mod/directory.php:349 ../../mod/directory.php:354 +msgid "Find" +msgstr "Finn" -#: ../../include/datetime.php:260 -msgid "days" -msgstr "dager" +#: ../../include/contact_widgets.php:27 ../../mod/directory.php:353 +#: ../../mod/suggest.php:59 +msgid "Channel Suggestions" +msgstr "Kanalforslag" -#: ../../include/datetime.php:261 -msgid "hour" -msgstr "time" +#: ../../include/contact_widgets.php:29 +msgid "Random Profile" +msgstr "Tilfeldig profil" -#: ../../include/datetime.php:261 -msgid "hours" -msgstr "timer" +#: ../../include/contact_widgets.php:30 +msgid "Invite Friends" +msgstr "Inviter venner" -#: ../../include/datetime.php:262 -msgid "minute" -msgstr "minutt" +#: ../../include/contact_widgets.php:32 +msgid "Advanced example: name=fred and country=iceland" +msgstr "Avansert eksempel: navn=fred og land=island" -#: ../../include/datetime.php:262 -msgid "minutes" -msgstr "minutter" +#: ../../include/contact_widgets.php:125 +#, php-format +msgid "%d connection in common" +msgid_plural "%d connections in common" +msgstr[0] "%d forbindelse felles" +msgstr[1] "%d forbindelser felles" -#: ../../include/datetime.php:263 -msgid "second" -msgstr "sekund" +#: ../../include/contact_widgets.php:130 +msgid "show more" +msgstr "vis mer" -#: ../../include/datetime.php:263 -msgid "seconds" -msgstr "sekunder" +#: ../../include/acl_selectors.php:240 +msgid "Visible to your default audience" +msgstr "Synlig for ditt standard publikum" -#: ../../include/datetime.php:272 -#, php-format -msgid "%1$d %2$s ago" -msgstr "%1$d %2$s siden" +#: ../../include/acl_selectors.php:241 +msgid "Show" +msgstr "Vis" -#: ../../include/datetime.php:480 -#, php-format -msgid "%1$s's birthday" -msgstr "%1$s sin fødselsdag" +#: ../../include/acl_selectors.php:242 +msgid "Don't show" +msgstr "Ikke vis" -#: ../../include/datetime.php:481 -#, php-format -msgid "Happy Birthday %1$s" -msgstr "Gratulerer med dagen, %1$s !" +#: ../../include/acl_selectors.php:248 ../../mod/events.php:652 +#: ../../mod/chat.php:209 ../../mod/filestorage.php:146 +#: ../../mod/photos.php:559 ../../mod/photos.php:922 +msgid "Permissions" +msgstr "Tillatelser" -#: ../../include/photos.php:105 +#: ../../include/photos.php:86 #, php-format msgid "Image exceeds website size limit of %lu bytes" msgstr "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes" -#: ../../include/photos.php:112 +#: ../../include/photos.php:93 msgid "Image file is empty." msgstr "Bildefilen er tom." -#: ../../include/photos.php:141 ../../mod/profile_photo.php:216 +#: ../../include/photos.php:121 ../../mod/profile_photo.php:217 msgid "Unable to process image" msgstr "Kan ikke behandle bildet" -#: ../../include/photos.php:213 +#: ../../include/photos.php:194 msgid "Photo storage failed." msgstr "Bildelagring mislyktes." -#: ../../include/photos.php:345 +#: ../../include/photos.php:360 msgid "Upload New Photos" msgstr "Last opp nye bilder" -#: ../../include/security.php:323 -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 "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn." - -#: ../../include/js_strings.php:5 -msgid "Delete this item?" -msgstr "Slett dette elementet?" - -#: ../../include/js_strings.php:6 ../../include/ItemObject.php:598 -#: ../../mod/photos.php:995 ../../mod/photos.php:1105 -msgid "Comment" -msgstr "Kommentar" - -#: ../../include/js_strings.php:7 ../../include/ItemObject.php:332 -msgid "[+] show all" -msgstr "[+] Vis alle" - -#: ../../include/js_strings.php:8 -msgid "[-] show less" -msgstr "[-] Vis mindre" - -#: ../../include/js_strings.php:9 -msgid "[+] expand" -msgstr "[+] Utvid" - -#: ../../include/js_strings.php:10 -msgid "[-] collapse" -msgstr "[-] Lukk" - -#: ../../include/js_strings.php:11 -msgid "Password too short" -msgstr "Passordet er for kort" - -#: ../../include/js_strings.php:12 -msgid "Passwords do not match" -msgstr "Passordene er ikke like" - -#: ../../include/js_strings.php:13 ../../mod/photos.php:39 -msgid "everybody" -msgstr "alle" - -#: ../../include/js_strings.php:14 -msgid "Secret Passphrase" -msgstr "Hemmelig passordsetning" - -#: ../../include/js_strings.php:15 -msgid "Passphrase hint" -msgstr "Hint om passordsetning" - -#: ../../include/js_strings.php:16 -msgid "Notice: Permissions have changed but have not yet been submitted." -msgstr "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn." - -#: ../../include/js_strings.php:17 -msgid "close all" -msgstr "Lukk alle" - -#: ../../include/js_strings.php:18 -msgid "Nothing new here" -msgstr "Ikke noe nytt her" - -#: ../../include/js_strings.php:20 -msgid "timeago.prefixAgo" -msgstr "timeago.prefixAgo" - -#: ../../include/js_strings.php:21 -msgid "timeago.prefixFromNow" -msgstr "timeago.prefixFromNow" - -#: ../../include/js_strings.php:22 -msgid "ago" -msgstr "siden" - -#: ../../include/js_strings.php:23 -msgid "from now" -msgstr "fra nå" - -#: ../../include/js_strings.php:24 -msgid "less than a minute" -msgstr "mindre enn ett minutt" - -#: ../../include/js_strings.php:25 -msgid "about a minute" -msgstr "omtrent et minutt" - -#: ../../include/js_strings.php:26 -#, php-format -msgid "%d minutes" -msgstr "%d minutter" - -#: ../../include/js_strings.php:27 -msgid "about an hour" -msgstr "omtrent en time" - -#: ../../include/js_strings.php:28 -#, php-format -msgid "about %d hours" -msgstr "omtrent %d timer" - -#: ../../include/js_strings.php:29 -msgid "a day" -msgstr "en dag" - -#: ../../include/js_strings.php:30 -#, php-format -msgid "%d days" -msgstr "%d dager" - -#: ../../include/js_strings.php:31 -msgid "about a month" -msgstr "omtrent en måned" - -#: ../../include/js_strings.php:32 -#, php-format -msgid "%d months" -msgstr "%d måneder" - -#: ../../include/js_strings.php:33 -msgid "about a year" -msgstr "omtrent et år" - -#: ../../include/js_strings.php:34 -#, php-format -msgid "%d years" -msgstr "%d år" - -#: ../../include/js_strings.php:35 -msgid " " -msgstr " " - -#: ../../include/js_strings.php:36 -msgid "timeago.numbers" -msgstr "timeago.numbers" - #: ../../include/profile_selectors.php:6 -#: ../../include/profile_selectors.php:23 +#: ../../include/profile_selectors.php:23 ../../mod/id.php:93 msgid "Male" msgstr "Mannlig" #: ../../include/profile_selectors.php:6 -#: ../../include/profile_selectors.php:23 +#: ../../include/profile_selectors.php:23 ../../mod/id.php:95 msgid "Female" msgstr "Kvinnelig" @@ -2918,6 +3150,13 @@ msgid "Non-specific" msgstr "Ubestemt" #: ../../include/profile_selectors.php:6 +#: ../../include/profile_selectors.php:23 +#: ../../include/profile_selectors.php:61 +#: ../../include/profile_selectors.php:97 ../../include/permissions.php:814 +msgid "Other" +msgstr "Annen" + +#: ../../include/profile_selectors.php:6 msgid "Undecided" msgstr "Ubestemt" @@ -3103,286 +3342,345 @@ msgstr "Bryr meg ikke" msgid "Ask me" msgstr "Spør meg" -#: ../../include/text.php:321 +#: ../../include/apps.php:128 +msgid "Site Admin" +msgstr "Nettstedsadministrator" + +#: ../../include/apps.php:130 +msgid "Address Book" +msgstr "Adressebok" + +#: ../../include/apps.php:144 ../../mod/mood.php:130 +msgid "Mood" +msgstr "Stemning" + +#: ../../include/apps.php:148 +msgid "Probe" +msgstr "Undersøk" + +#: ../../include/apps.php:149 +msgid "Suggest" +msgstr "Forreslå" + +#: ../../include/apps.php:150 +msgid "Random Channel" +msgstr "Tilfeldig kanal" + +#: ../../include/apps.php:151 +msgid "Invite" +msgstr "Inviter" + +#: ../../include/apps.php:152 +msgid "Features" +msgstr "Funksjoner" + +#: ../../include/apps.php:153 ../../mod/id.php:25 +msgid "Language" +msgstr "Språk" + +#: ../../include/apps.php:154 +msgid "Post" +msgstr "Innlegg" + +#: ../../include/apps.php:155 ../../mod/id.php:14 ../../mod/id.php:15 +#: ../../mod/id.php:16 +msgid "Profile Photo" +msgstr "Profilbilde" + +#: ../../include/apps.php:247 ../../mod/settings.php:84 +#: ../../mod/settings.php:608 +msgid "Update" +msgstr "Oppdater" + +#: ../../include/apps.php:247 +msgid "Install" +msgstr "Installer" + +#: ../../include/apps.php:252 +msgid "Purchase" +msgstr "Kjøp" + +#: ../../include/text.php:318 msgid "prev" msgstr "forrige" -#: ../../include/text.php:323 +#: ../../include/text.php:320 msgid "first" msgstr "første" -#: ../../include/text.php:352 +#: ../../include/text.php:349 msgid "last" msgstr "siste" -#: ../../include/text.php:355 +#: ../../include/text.php:352 msgid "next" msgstr "neste" -#: ../../include/text.php:367 +#: ../../include/text.php:362 msgid "older" msgstr "eldre" -#: ../../include/text.php:369 +#: ../../include/text.php:364 msgid "newer" msgstr "nyere" -#: ../../include/text.php:736 +#: ../../include/text.php:748 msgid "No connections" msgstr "Ingen forbindelser" -#: ../../include/text.php:753 +#: ../../include/text.php:762 #, php-format msgid "%d Connection" msgid_plural "%d Connections" msgstr[0] "%d forbindelse" msgstr[1] "%d forbindelser" -#: ../../include/text.php:766 +#: ../../include/text.php:775 ../../mod/viewconnections.php:86 msgid "View Connections" msgstr "Vis forbindelser" -#: ../../include/text.php:905 +#: ../../include/text.php:911 msgid "poke" msgstr "prikk" -#: ../../include/text.php:906 +#: ../../include/text.php:912 msgid "ping" msgstr "varsle" -#: ../../include/text.php:906 +#: ../../include/text.php:912 msgid "pinged" msgstr "varslet" -#: ../../include/text.php:907 +#: ../../include/text.php:913 msgid "prod" msgstr "oppildne" -#: ../../include/text.php:907 +#: ../../include/text.php:913 msgid "prodded" msgstr "oppildnet" -#: ../../include/text.php:908 +#: ../../include/text.php:914 msgid "slap" msgstr "daske" -#: ../../include/text.php:908 +#: ../../include/text.php:914 msgid "slapped" msgstr "dasket" -#: ../../include/text.php:909 +#: ../../include/text.php:915 msgid "finger" msgstr "fingre" -#: ../../include/text.php:909 +#: ../../include/text.php:915 msgid "fingered" msgstr "fingret" -#: ../../include/text.php:910 +#: ../../include/text.php:916 msgid "rebuff" msgstr "tilbakevise" -#: ../../include/text.php:910 +#: ../../include/text.php:916 msgid "rebuffed" msgstr "tilbakeviste" -#: ../../include/text.php:919 +#: ../../include/text.php:926 msgid "happy" msgstr "glad" -#: ../../include/text.php:920 +#: ../../include/text.php:927 msgid "sad" msgstr "trist" -#: ../../include/text.php:921 +#: ../../include/text.php:928 msgid "mellow" msgstr "dempet" -#: ../../include/text.php:922 +#: ../../include/text.php:929 msgid "tired" msgstr "trøtt" -#: ../../include/text.php:923 +#: ../../include/text.php:930 msgid "perky" msgstr "oppkvikket" -#: ../../include/text.php:924 +#: ../../include/text.php:931 msgid "angry" msgstr "sint" -#: ../../include/text.php:925 +#: ../../include/text.php:932 msgid "stupified" msgstr "sløvet" -#: ../../include/text.php:926 +#: ../../include/text.php:933 msgid "puzzled" msgstr "forundret" -#: ../../include/text.php:927 +#: ../../include/text.php:934 msgid "interested" msgstr "interessert" -#: ../../include/text.php:928 +#: ../../include/text.php:935 msgid "bitter" msgstr "bitter" -#: ../../include/text.php:929 +#: ../../include/text.php:936 msgid "cheerful" msgstr "munter" -#: ../../include/text.php:930 +#: ../../include/text.php:937 msgid "alive" msgstr "levende" -#: ../../include/text.php:931 +#: ../../include/text.php:938 msgid "annoyed" msgstr "irritert" -#: ../../include/text.php:932 +#: ../../include/text.php:939 msgid "anxious" msgstr "nervøs" -#: ../../include/text.php:933 +#: ../../include/text.php:940 msgid "cranky" msgstr "gretten" -#: ../../include/text.php:934 +#: ../../include/text.php:941 msgid "disturbed" msgstr "foruroliget" -#: ../../include/text.php:935 +#: ../../include/text.php:942 msgid "frustrated" msgstr "frustrert" -#: ../../include/text.php:936 +#: ../../include/text.php:943 msgid "depressed" msgstr "lei seg" -#: ../../include/text.php:937 +#: ../../include/text.php:944 msgid "motivated" msgstr "motivert" -#: ../../include/text.php:938 +#: ../../include/text.php:945 msgid "relaxed" msgstr "avslappet" -#: ../../include/text.php:939 +#: ../../include/text.php:946 msgid "surprised" msgstr "overrasket" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Monday" msgstr "mandag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Tuesday" msgstr "tirsdag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Wednesday" msgstr "onsdag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Thursday" msgstr "torsdag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Friday" msgstr "fredag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Saturday" msgstr "lørdag" -#: ../../include/text.php:1103 +#: ../../include/text.php:1111 msgid "Sunday" msgstr "søndag" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "January" msgstr "januar" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "February" msgstr "februar" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "March" msgstr "mars" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "April" msgstr "april" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "May" msgstr "mai" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "June" msgstr "juni" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "July" msgstr "juli" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "August" msgstr "august" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "September" msgstr "september" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "October" msgstr "oktober" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "November" msgstr "november" -#: ../../include/text.php:1107 +#: ../../include/text.php:1115 msgid "December" msgstr "desember" -#: ../../include/text.php:1185 +#: ../../include/text.php:1193 msgid "unknown.???" msgstr "ukjent.???" -#: ../../include/text.php:1186 +#: ../../include/text.php:1194 msgid "bytes" msgstr "bytes" -#: ../../include/text.php:1225 +#: ../../include/text.php:1230 msgid "remove category" msgstr "fjern kategori" -#: ../../include/text.php:1295 +#: ../../include/text.php:1299 msgid "remove from file" msgstr "fjern fra fil" -#: ../../include/text.php:1360 ../../include/text.php:1372 +#: ../../include/text.php:1375 ../../include/text.php:1386 +#: ../../mod/connedit.php:635 msgid "Click to open/close" msgstr "Klikk for å åpne/lukke" -#: ../../include/text.php:1527 ../../mod/events.php:409 +#: ../../include/text.php:1534 ../../mod/events.php:444 msgid "Link to Source" msgstr "Lenke til kilde" -#: ../../include/text.php:1546 +#: ../../include/text.php:1553 msgid "Select a page layout: " msgstr "Velg en side-layout:" -#: ../../include/text.php:1549 ../../include/text.php:1614 +#: ../../include/text.php:1556 ../../include/text.php:1616 msgid "default" msgstr "standard" -#: ../../include/text.php:1585 +#: ../../include/text.php:1589 msgid "Page content type: " msgstr "Sidens innholdstype:" -#: ../../include/text.php:1626 +#: ../../include/text.php:1628 msgid "Select an alternate language" msgstr "Velg et annet språk" @@ -3390,738 +3688,1699 @@ msgstr "Velg et annet språk" msgid "activity" msgstr "aktivitet" -#: ../../include/text.php:2041 +#: ../../include/text.php:2047 msgid "Design" msgstr "Formgivning" -#: ../../include/text.php:2044 +#: ../../include/text.php:2050 msgid "Blocks" msgstr "Byggeklosser" -#: ../../include/text.php:2045 +#: ../../include/text.php:2051 msgid "Menus" msgstr "Menyer" -#: ../../include/text.php:2046 +#: ../../include/text.php:2052 msgid "Layouts" msgstr "Layout" -#: ../../include/text.php:2047 +#: ../../include/text.php:2053 msgid "Pages" msgstr "Sider" -#: ../../include/acl_selectors.php:240 -msgid "Visible to your default audience" -msgstr "Synlig for ditt standard publikum" +#: ../../include/chat.php:23 +msgid "Missing room name" +msgstr "Mangler romnavn" -#: ../../include/acl_selectors.php:241 -msgid "Show" -msgstr "Vis" +#: ../../include/chat.php:32 +msgid "Duplicate room name" +msgstr "Duplikat romnavn" -#: ../../include/acl_selectors.php:242 -msgid "Don't show" -msgstr "Ikke vis" +#: ../../include/chat.php:82 ../../include/chat.php:90 +msgid "Invalid room specifier." +msgstr "Ugyldig rom-spesifisering" -#: ../../include/acl_selectors.php:248 ../../mod/events.php:585 -#: ../../mod/chat.php:209 ../../mod/photos.php:588 ../../mod/photos.php:950 -#: ../../mod/filestorage.php:137 -msgid "Permissions" -msgstr "Tillatelser" +#: ../../include/chat.php:120 +msgid "Room not found." +msgstr "Rommet ble ikke funnet." -#: ../../include/acl_selectors.php:249 ../../include/ItemObject.php:305 -#: ../../mod/photos.php:1148 -msgid "Close" -msgstr "Lukk" +#: ../../include/chat.php:141 +msgid "Room is full" +msgstr "Rommet er fullt" -#: ../../include/api.php:1084 -msgid "Public Timeline" -msgstr "Offentlig tidslinje" +#: ../../include/permissions.php:26 +msgid "Can view my normal stream and posts" +msgstr "Kan se min normale strøm og innlegg" -#: ../../include/apps.php:126 -msgid "Site Admin" -msgstr "Nettstedsadministrator" +#: ../../include/permissions.php:27 +msgid "Can view my default channel profile" +msgstr "Kan se min standard kanalprofil" -#: ../../include/apps.php:128 -msgid "Address Book" -msgstr "Adressebok" +#: ../../include/permissions.php:28 +msgid "Can view my photo albums" +msgstr "Kan se mine fotoalbum" -#: ../../include/apps.php:142 ../../mod/mood.php:131 -msgid "Mood" -msgstr "Stemning" +#: ../../include/permissions.php:29 +msgid "Can view my connections" +msgstr "Kan se mine forbindelser" -#: ../../include/apps.php:146 -msgid "Probe" -msgstr "Undersøk" +#: ../../include/permissions.php:30 +msgid "Can view my file storage" +msgstr "Kan se mitt fillager" -#: ../../include/apps.php:147 -msgid "Suggest" -msgstr "Forreslå" +#: ../../include/permissions.php:31 +msgid "Can view my webpages" +msgstr "Kan se mine websider" -#: ../../include/apps.php:148 -msgid "Random Channel" -msgstr "Tilfeldig kanal" +#: ../../include/permissions.php:34 +msgid "Can send me their channel stream and posts" +msgstr "Kan sende meg deres kanalstrøm og innlegg" -#: ../../include/apps.php:149 -msgid "Invite" -msgstr "Inviter" +#: ../../include/permissions.php:35 +msgid "Can post on my channel page (\"wall\")" +msgstr "Kan lage innlegg på min kanalside (\"vegg\")" -#: ../../include/apps.php:150 -msgid "Features" -msgstr "Funksjoner" +#: ../../include/permissions.php:36 +msgid "Can comment on or like my posts" +msgstr "Kan kommentere på eller like mine innlegg" -#: ../../include/apps.php:151 -msgid "Language" -msgstr "Språk" +#: ../../include/permissions.php:37 +msgid "Can send me private mail messages" +msgstr "Kan sende meg private meldinger" -#: ../../include/apps.php:152 -msgid "Post" -msgstr "Innlegg" +#: ../../include/permissions.php:38 +msgid "Can post photos to my photo albums" +msgstr "Kan legge inn bilder i mine fotoalbum" -#: ../../include/apps.php:153 -msgid "Profile Photo" -msgstr "Profilbilde" +#: ../../include/permissions.php:39 +msgid "Can like/dislike stuff" +msgstr "Kan like/ikke like forskjellige greier" -#: ../../include/apps.php:242 ../../mod/settings.php:81 -#: ../../mod/settings.php:575 -msgid "Update" -msgstr "Oppdater" +#: ../../include/permissions.php:39 +msgid "Profiles and things other than posts/comments" +msgstr "Profiler og andre ting enn innlegg/kommentarer" -#: ../../include/apps.php:242 -msgid "Install" -msgstr "Installer" +#: ../../include/permissions.php:41 +msgid "Can forward to all my channel contacts via post @mentions" +msgstr "Kan videresende til alle mine kanalkontakter via @navn i innlegg" -#: ../../include/apps.php:247 -msgid "Purchase" -msgstr "Kjøp" +#: ../../include/permissions.php:41 +msgid "Advanced - useful for creating group forum channels" +msgstr "Avansert - nyttig for å lage forumkanaler for grupper" -#: ../../include/ItemObject.php:130 -msgid "Save to Folder" -msgstr "Lagre i mappe" +#: ../../include/permissions.php:42 +msgid "Can chat with me (when available)" +msgstr "Kan chatte/sende lynmeldinger til meg (når tilgjengelig)" -#: ../../include/ItemObject.php:142 ../../include/ItemObject.php:154 -#: ../../mod/photos.php:1022 ../../mod/photos.php:1034 -msgid "View all" -msgstr "Vis alle" +#: ../../include/permissions.php:43 +msgid "Can write to my file storage" +msgstr "Kan skrive til mitt fillager" -#: ../../include/ItemObject.php:151 ../../mod/photos.php:1031 -msgctxt "noun" -msgid "Dislike" -msgid_plural "Dislikes" -msgstr[0] "Liker ikke" -msgstr[1] "Liker ikke" +#: ../../include/permissions.php:44 +msgid "Can edit my webpages" +msgstr "Kan endre mine websider" -#: ../../include/ItemObject.php:179 -msgid "Add Star" -msgstr "Legg til stjerne" +#: ../../include/permissions.php:46 +msgid "Can source my public posts in derived channels" +msgstr "Kan bruke mine offentlige innlegg som kanalkilde i egne kanaler" -#: ../../include/ItemObject.php:180 -msgid "Remove Star" -msgstr "Fjern stjerne" +#: ../../include/permissions.php:46 +msgid "Somewhat advanced - very useful in open communities" +msgstr "Litt avansert - svært nyttig i åpne fellesskap" -#: ../../include/ItemObject.php:181 -msgid "Toggle Star Status" -msgstr "Skru av og på stjernestatus" +#: ../../include/permissions.php:48 +msgid "Can administer my channel resources" +msgstr "Kan administrere mine kanalressurser" -#: ../../include/ItemObject.php:185 -msgid "starred" -msgstr "stjernemerket" +#: ../../include/permissions.php:48 +msgid "" +"Extremely advanced. Leave this alone unless you know what you are doing" +msgstr "Ekstremt avansert. La dette være med mindre du vet hva du gjør" -#: ../../include/ItemObject.php:203 -msgid "Add Tag" -msgstr "Legg til merkelapp" +#: ../../include/permissions.php:810 +msgid "Social Networking" +msgstr "Sosialt nettverk" -#: ../../include/ItemObject.php:221 ../../mod/photos.php:974 -msgid "I like this (toggle)" -msgstr "Jeg liker dette (skru av og på)" +#: ../../include/permissions.php:810 ../../include/permissions.php:811 +#: ../../include/permissions.php:812 +msgid "Mostly Public" +msgstr "Ganske offentlig" -#: ../../include/ItemObject.php:222 ../../mod/photos.php:975 -msgid "I don't like this (toggle)" -msgstr "Jeg liker ikke dette (skru av og på)" +#: ../../include/permissions.php:810 ../../include/permissions.php:811 +#: ../../include/permissions.php:812 +msgid "Restricted" +msgstr "Begrenset" -#: ../../include/ItemObject.php:226 -msgid "Share This" -msgstr "Del dette" +#: ../../include/permissions.php:810 ../../include/permissions.php:811 +msgid "Private" +msgstr "Privat" -#: ../../include/ItemObject.php:226 -msgid "share" -msgstr "del" +#: ../../include/permissions.php:811 +msgid "Community Forum" +msgstr "Forum for fellesskap" -#: ../../include/ItemObject.php:249 ../../include/ItemObject.php:250 -#, php-format -msgid "View %s's profile - %s" -msgstr "Vis %s sin profil - %s" +#: ../../include/permissions.php:812 +msgid "Feed Republish" +msgstr "Republisering av strømmet innhold" -#: ../../include/ItemObject.php:251 -msgid "to" -msgstr "til" +#: ../../include/permissions.php:813 +msgid "Special Purpose" +msgstr "Spesiell bruk" -#: ../../include/ItemObject.php:252 -msgid "via" -msgstr "via" +#: ../../include/permissions.php:813 +msgid "Celebrity/Soapbox" +msgstr "Kjendis/Talerstol" -#: ../../include/ItemObject.php:253 -msgid "Wall-to-Wall" -msgstr "vegg-til-vegg" +#: ../../include/permissions.php:813 +msgid "Group Repository" +msgstr "Gruppelager" -#: ../../include/ItemObject.php:254 -msgid "via Wall-To-Wall:" -msgstr "via vegg-til-vegg:" +#: ../../include/permissions.php:814 +msgid "Custom/Expert Mode" +msgstr "Tilpasset/Ekspertmodus" -#: ../../include/ItemObject.php:290 -msgid "Save Bookmarks" -msgstr "Lagre bokmerker" +#: ../../mod/achievements.php:34 +msgid "Some blurb about what to do when you're new here" +msgstr "En standardtekst om hva du bør gjøre som ny her" -#: ../../include/ItemObject.php:291 -msgid "Add to Calendar" -msgstr "Legg til i kalender" +#: ../../mod/manage.php:136 +#, php-format +msgid "You have created %1$.0f of %2$.0f allowed channels." +msgstr "Du har laget %1$.0f av %2$.0f tillatte kanaler." -#: ../../include/ItemObject.php:299 ../../mod/photos.php:1142 -msgctxt "noun" -msgid "Likes" -msgstr "Liker" +#: ../../mod/manage.php:144 +msgid "Create a new channel" +msgstr "Lag en ny kanal" -#: ../../include/ItemObject.php:300 ../../mod/photos.php:1143 -msgctxt "noun" -msgid "Dislikes" -msgstr "Liker ikke" +#: ../../mod/manage.php:165 +msgid "Current Channel" +msgstr "Gjeldende kanal" + +#: ../../mod/manage.php:167 +msgid "Switch to one of your channels by selecting it." +msgstr "Bytt til en av dine kanaler ved å velge den." + +#: ../../mod/manage.php:168 +msgid "Default Channel" +msgstr "Standardkanal" + +#: ../../mod/manage.php:169 +msgid "Make Default" +msgstr "Gjør til standard" -#: ../../include/ItemObject.php:331 +#: ../../mod/manage.php:172 #, php-format -msgid "%d comment" -msgid_plural "%d comments" -msgstr[0] "%d kommentar" -msgstr[1] "%d kommentarer" +msgid "%d new messages" +msgstr "%d nye meldinger" -#: ../../include/ItemObject.php:596 ../../mod/photos.php:993 -#: ../../mod/photos.php:1103 -msgid "This is you" -msgstr "Dette er deg" +#: ../../mod/manage.php:173 +#, php-format +msgid "%d new introductions" +msgstr "%d nye introduksjoner" -#: ../../include/ItemObject.php:599 ../../mod/mood.php:135 -#: ../../mod/profiles.php:633 ../../mod/connect.php:92 ../../mod/setup.php:313 -#: ../../mod/setup.php:358 ../../mod/poke.php:166 ../../mod/sources.php:104 -#: ../../mod/sources.php:138 ../../mod/events.php:587 ../../mod/chat.php:177 -#: ../../mod/chat.php:211 ../../mod/photos.php:594 ../../mod/photos.php:671 -#: ../../mod/photos.php:956 ../../mod/photos.php:996 ../../mod/photos.php:1106 -#: ../../mod/connedit.php:555 ../../mod/thing.php:284 ../../mod/thing.php:327 -#: ../../mod/pdledit.php:58 ../../mod/settings.php:549 -#: ../../mod/settings.php:661 ../../mod/settings.php:690 -#: ../../mod/settings.php:714 ../../mod/settings.php:790 -#: ../../mod/settings.php:976 ../../mod/fsuggest.php:108 -#: ../../mod/filestorage.php:146 ../../mod/group.php:81 -#: ../../mod/import.php:480 ../../mod/admin.php:412 ../../mod/admin.php:723 -#: ../../mod/admin.php:859 ../../mod/admin.php:992 ../../mod/admin.php:1191 -#: ../../mod/admin.php:1278 ../../mod/invite.php:142 ../../mod/locs.php:99 -#: ../../mod/mail.php:348 ../../mod/xchan.php:11 ../../mod/appman.php:99 -#: ../../mod/poll.php:68 ../../view/theme/apw/php/config.php:256 -#: ../../view/theme/blogga/php/config.php:67 -#: ../../view/theme/blogga/view/theme/blog/config.php:67 -#: ../../view/theme/redbasic/php/config.php:99 -msgid "Submit" -msgstr "Send" +#: ../../mod/manage.php:175 +msgid "Delegated Channels" +msgstr "Delegerte kanaler" -#: ../../include/ItemObject.php:600 -msgid "Bold" -msgstr "Uthevet" +#: ../../mod/settings.php:76 +msgid "Name is required" +msgstr "Navn er påkrevd" -#: ../../include/ItemObject.php:601 -msgid "Italic" -msgstr "Kursiv" +#: ../../mod/settings.php:80 +msgid "Key and Secret are required" +msgstr "Nøkkel og hemmelighet er påkrevd" -#: ../../include/ItemObject.php:602 -msgid "Underline" -msgstr "Understreket" +#: ../../mod/settings.php:124 +msgid "Diaspora Policy Settings updated." +msgstr "Innstillinger for Diaspora retningslinjer er oppdatert." -#: ../../include/ItemObject.php:603 -msgid "Quote" -msgstr "Sitat" +#: ../../mod/settings.php:232 +msgid "Passwords do not match. Password unchanged." +msgstr "Passordene stemmer ikke overens. Passord uforandret." -#: ../../include/ItemObject.php:604 -msgid "Code" -msgstr "Kode" +#: ../../mod/settings.php:236 +msgid "Empty passwords are not allowed. Password unchanged." +msgstr "Tomme passord er ikke tillatt. Passord uforandret." -#: ../../include/ItemObject.php:605 -msgid "Image" -msgstr "Bilde" +#: ../../mod/settings.php:250 +msgid "Password changed." +msgstr "Passord endret." -#: ../../include/ItemObject.php:606 -msgid "Link" -msgstr "Lenke" +#: ../../mod/settings.php:252 +msgid "Password update failed. Please try again." +msgstr "Passord oppdatering mislyktes. Vennligst prøv igjen." -#: ../../include/ItemObject.php:607 -msgid "Video" -msgstr "Video" +#: ../../mod/settings.php:266 +msgid "Not valid email." +msgstr "Ikke gyldig e-post." -#: ../../mod/mood.php:132 -msgid "Set your current mood and tell your friends" -msgstr "Angi ditt nåværende humør og fortell dine venner" +#: ../../mod/settings.php:269 +msgid "Protected email address. Cannot change to that email." +msgstr "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen." -#: ../../mod/profperm.php:29 ../../mod/profperm.php:58 -msgid "Invalid profile identifier." -msgstr "Ugyldig profil-identifikator." +#: ../../mod/settings.php:278 +msgid "System failure storing new email. Please try again." +msgstr "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen." -#: ../../mod/profperm.php:110 -msgid "Profile Visibility Editor" -msgstr "Endre profilsynlighet" +#: ../../mod/settings.php:517 +msgid "Settings updated." +msgstr "Innstillinger oppdatert." -#: ../../mod/profperm.php:114 -msgid "Click on a contact to add or remove." -msgstr "Klikk på en kontakt for å legge til eller fjerne." +#: ../../mod/settings.php:573 ../../mod/api.php:106 ../../mod/admin.php:419 +#: ../../mod/removeme.php:60 ../../view/theme/redbasic/php/config.php:102 +#: ../../view/theme/redbasic/php/config.php:127 ../../boot.php:1556 +msgid "No" +msgstr "Nei" -#: ../../mod/profperm.php:123 -msgid "Visible To" -msgstr "Synlig for" +#: ../../mod/settings.php:573 ../../mod/api.php:105 ../../mod/admin.php:421 +#: ../../mod/removeme.php:60 ../../view/theme/redbasic/php/config.php:102 +#: ../../view/theme/redbasic/php/config.php:127 ../../boot.php:1556 +msgid "Yes" +msgstr "Ja" -#: ../../mod/profperm.php:139 ../../mod/connections.php:279 -msgid "All Connections" -msgstr "Alle forbindelser" +#: ../../mod/settings.php:581 ../../mod/settings.php:607 +#: ../../mod/settings.php:643 +msgid "Add application" +msgstr "Legg til program" -#: ../../mod/mitem.php:24 ../../mod/menu.php:108 -msgid "Menu not found." -msgstr "Menyen ble ikke funnet." +#: ../../mod/settings.php:584 +msgid "Name of application" +msgstr "Navn på program" -#: ../../mod/mitem.php:67 -msgid "Menu element updated." -msgstr "Menyelement er oppdatert." +#: ../../mod/settings.php:585 ../../mod/settings.php:611 +msgid "Consumer Key" +msgstr "Consumer Key" -#: ../../mod/mitem.php:71 -msgid "Unable to update menu element." -msgstr "Ikke i stand til å oppdatere menyelement." +#: ../../mod/settings.php:585 ../../mod/settings.php:586 +msgid "Automatically generated - change if desired. Max length 20" +msgstr "Automatisk laget - kan endres om du vil. Største lengde 20" -#: ../../mod/mitem.php:77 -msgid "Menu element added." -msgstr "Menyelement lagt til." +#: ../../mod/settings.php:586 ../../mod/settings.php:612 +msgid "Consumer Secret" +msgstr "Consumer Secret" -#: ../../mod/mitem.php:81 -msgid "Unable to add menu element." -msgstr "Ikke i stand til å legge til menyelement." +#: ../../mod/settings.php:587 ../../mod/settings.php:613 +msgid "Redirect" +msgstr "Omdirigering" -#: ../../mod/mitem.php:111 ../../mod/menu.php:136 ../../mod/xchan.php:37 -msgid "Not found." -msgstr "Ikke funnet." +#: ../../mod/settings.php:587 +msgid "" +"Redirect URI - leave blank unless your application specifically requires " +"this" +msgstr "Omdirigerings-URI - la stå tomt hvis ikke ditt program spesifikt krever dette" -#: ../../mod/mitem.php:127 -msgid "Manage Menu Elements" -msgstr "Håndtere menyelementer" +#: ../../mod/settings.php:588 ../../mod/settings.php:614 +msgid "Icon url" +msgstr "Ikon-URL" -#: ../../mod/mitem.php:130 -msgid "Edit menu" -msgstr "Endre meny" +#: ../../mod/settings.php:588 +msgid "Optional" +msgstr "Valgfritt" -#: ../../mod/mitem.php:133 -msgid "Edit element" -msgstr "Endre element" +#: ../../mod/settings.php:599 +msgid "You can't edit this application." +msgstr "Du kan ikke endre dette programmet." -#: ../../mod/mitem.php:134 -msgid "Drop element" -msgstr "Slett element" +#: ../../mod/settings.php:642 +msgid "Connected Apps" +msgstr "Tilkoblede app-er" -#: ../../mod/mitem.php:135 -msgid "New element" -msgstr "Nytt element" +#: ../../mod/settings.php:646 +msgid "Client key starts with" +msgstr "Klientnøkkel starter med" -#: ../../mod/mitem.php:136 -msgid "Edit this menu container" -msgstr "Endre denne menybeholderen" +#: ../../mod/settings.php:647 +msgid "No name" +msgstr "Ikke noe navn" -#: ../../mod/mitem.php:137 -msgid "Add menu element" -msgstr "Legg til menyelement" +#: ../../mod/settings.php:648 +msgid "Remove authorization" +msgstr "Fjern tillatelse" -#: ../../mod/mitem.php:138 -msgid "Delete this menu item" -msgstr "Slett dette menyelementet" +#: ../../mod/settings.php:662 +msgid "No feature settings configured" +msgstr "Ingen funksjonsinnstillinger er konfigurert" -#: ../../mod/mitem.php:139 -msgid "Edit this menu item" -msgstr "Endre dette menyelementet" +#: ../../mod/settings.php:678 +msgid "Feature/Addon Settings" +msgstr "Funksjons-/Tilleggsinnstillinger" -#: ../../mod/mitem.php:158 -msgid "New Menu Element" -msgstr "Nytt menyelement" +#: ../../mod/settings.php:680 +msgid "Settings for the built-in Diaspora emulator" +msgstr "Innstillinger for den innebygde Diaspora-etterlikningen" -#: ../../mod/mitem.php:160 ../../mod/mitem.php:203 -msgid "Menu Item Permissions" -msgstr "Menyelement Tillatelser" +#: ../../mod/settings.php:681 +msgid "Allow any Diaspora member to comment on your public posts" +msgstr "Tillat ethvert Diaspora-medlem å kommentere på dine offentlige innlegg." -#: ../../mod/mitem.php:161 ../../mod/mitem.php:204 ../../mod/settings.php:1011 -msgid "(click to open/close)" -msgstr "(klikk for å åpne/lukke)" +#: ../../mod/settings.php:682 +msgid "Diaspora Policy Settings" +msgstr "Innstillinger for Diaspora retningslinjer" -#: ../../mod/mitem.php:163 ../../mod/mitem.php:207 -msgid "Link text" -msgstr "Lenketekst" +#: ../../mod/settings.php:683 +msgid "Prevent your hashtags from being redirected to other sites" +msgstr "Stopp dine merkelapper/emneknagger/hashtagger fra å bli omdirigert til andre nettsteder" -#: ../../mod/mitem.php:164 ../../mod/mitem.php:208 -msgid "URL of link" -msgstr "URL-en til lenken" +#: ../../mod/settings.php:707 +msgid "Account Settings" +msgstr "Kontoinnstillinger" -#: ../../mod/mitem.php:165 ../../mod/mitem.php:209 -msgid "Use RedMatrix magic-auth if available" -msgstr "Bruk RedMatrixs magiske-autentisering hvis tilgjengelig" +#: ../../mod/settings.php:708 +msgid "Enter New Password:" +msgstr "Skriv nytt passord:" -#: ../../mod/mitem.php:166 ../../mod/mitem.php:210 -msgid "Open link in new window" -msgstr "Åpne lenke i nytt vindu" +#: ../../mod/settings.php:709 +msgid "Confirm New Password:" +msgstr "Bekreft nytt passord:" -#: ../../mod/mitem.php:168 ../../mod/mitem.php:212 -msgid "Order in list" -msgstr "Ordne i liste" +#: ../../mod/settings.php:709 +msgid "Leave password fields blank unless changing" +msgstr "La passordfeltene stå blanke om det ikke skal endres" -#: ../../mod/mitem.php:168 ../../mod/mitem.php:212 -msgid "Higher numbers will sink to bottom of listing" -msgstr "Høyere tall vil synke mot bunnen av listen" +#: ../../mod/settings.php:711 ../../mod/settings.php:1046 +msgid "Email Address:" +msgstr "E-postadresse:" -#: ../../mod/mitem.php:181 -msgid "Menu item not found." -msgstr "Menyelement ble ikke funnet." +#: ../../mod/settings.php:712 ../../mod/removeaccount.php:61 +msgid "Remove Account" +msgstr "Slett konto" -#: ../../mod/mitem.php:190 -msgid "Menu item deleted." -msgstr "Menyelement slettet." +#: ../../mod/settings.php:713 +msgid "Remove this account including all its channels" +msgstr "Slett denne kontoen inkludert alle dens kanaler" -#: ../../mod/mitem.php:192 -msgid "Menu item could not be deleted." -msgstr "Menyelement kunne ikke bli slettet." +#: ../../mod/settings.php:729 +msgid "Off" +msgstr "Av" -#: ../../mod/mitem.php:201 -msgid "Edit Menu Element" -msgstr "Endre menyelement" +#: ../../mod/settings.php:729 +msgid "On" +msgstr "På" -#: ../../mod/mitem.php:213 ../../mod/menu.php:130 -msgid "Modify" -msgstr "Endre" +#: ../../mod/settings.php:736 +msgid "Additional Features" +msgstr "Ekstra funksjoner" -#: ../../mod/achievements.php:34 -msgid "Some blurb about what to do when you're new here" -msgstr "En standardtekst om hva du bør gjøre som ny her" +#: ../../mod/settings.php:760 +msgid "Connector Settings" +msgstr "Koblingsinnstillinger" -#: ../../mod/profiles.php:18 ../../mod/profiles.php:165 -#: ../../mod/profiles.php:222 ../../mod/profiles.php:565 -msgid "Profile not found." -msgstr "Profilen ble ikke funnet." +#: ../../mod/settings.php:799 +msgid "No special theme for mobile devices" +msgstr "Ikke noe spesielt tema for mobile enheter" -#: ../../mod/profiles.php:38 -msgid "Profile deleted." -msgstr "Profilen er slettet." +#: ../../mod/settings.php:802 +#, php-format +msgid "%s - (Experimental)" +msgstr "%s - (Eksperimentelt)" -#: ../../mod/profiles.php:56 ../../mod/profiles.php:92 -msgid "Profile-" -msgstr "Profil-" +#: ../../mod/settings.php:805 ../../mod/admin.php:391 +msgid "mobile" +msgstr "mobil" -#: ../../mod/profiles.php:77 ../../mod/profiles.php:120 -msgid "New profile created." -msgstr "Ny profil opprettet." +#: ../../mod/settings.php:841 +msgid "Display Settings" +msgstr "Visningsinnstillinger" -#: ../../mod/profiles.php:98 -msgid "Profile unavailable to clone." -msgstr "Profilen er utilgjengelig for klonen." +#: ../../mod/settings.php:847 +msgid "Display Theme:" +msgstr "Visningstema:" -#: ../../mod/profiles.php:136 -msgid "Profile unavailable to export." -msgstr "Profilen er utilgjengelig for eksport." +#: ../../mod/settings.php:848 +msgid "Mobile Theme:" +msgstr "Mobiltema:" -#: ../../mod/profiles.php:232 -msgid "Profile Name is required." -msgstr "Profilnavn er påkrevd." +#: ../../mod/settings.php:849 +msgid "Enable user zoom on mobile devices" +msgstr "Skru på brukerstyrt zoom på mobile enheter" -#: ../../mod/profiles.php:378 -msgid "Marital Status" -msgstr "Sivilstand" +#: ../../mod/settings.php:850 +msgid "Update browser every xx seconds" +msgstr "Oppdater nettleser hvert xx sekunder" -#: ../../mod/profiles.php:382 -msgid "Romantic Partner" -msgstr "Romantisk partner" +#: ../../mod/settings.php:850 +msgid "Minimum of 10 seconds, no maximum" +msgstr "Minimum 10 sekunder, ikke noe maksimum" -#: ../../mod/profiles.php:386 -msgid "Likes" -msgstr "Liker" +#: ../../mod/settings.php:851 +msgid "Maximum number of conversations to load at any time:" +msgstr "Maksimalt antall samtaler å laste samtidig:" -#: ../../mod/profiles.php:390 -msgid "Dislikes" -msgstr "Liker ikke" +#: ../../mod/settings.php:851 +msgid "Maximum of 100 items" +msgstr "Maksimum 100 elementer" -#: ../../mod/profiles.php:394 -msgid "Work/Employment" -msgstr "Arbeid/sysselsetting" +#: ../../mod/settings.php:852 +msgid "Show emoticons (smilies) as images" +msgstr "Vis emoticons (smilefjes) som bilder" -#: ../../mod/profiles.php:397 -msgid "Religion" -msgstr "Religion" +#: ../../mod/settings.php:853 +msgid "Link post titles to source" +msgstr "Lenk innleggets tittel til kilden" -#: ../../mod/profiles.php:401 -msgid "Political Views" -msgstr "Politiske synspunkter" +#: ../../mod/settings.php:854 +msgid "System Page Layout Editor - (advanced)" +msgstr "Systemsidens layoutbehandler - (avansert)" -#: ../../mod/profiles.php:405 -msgid "Gender" -msgstr "Kjønn" +#: ../../mod/settings.php:857 +msgid "Use blog/list mode on channel page" +msgstr "Bruk blogg-/listemodus på kanalsiden" -#: ../../mod/profiles.php:409 -msgid "Sexual Preference" -msgstr "Seksuelle preferanser" +#: ../../mod/settings.php:857 ../../mod/settings.php:858 +msgid "(comments displayed separately)" +msgstr "(kommentarer vist separat)" -#: ../../mod/profiles.php:413 -msgid "Homepage" -msgstr "Hjemmeside" +#: ../../mod/settings.php:858 +msgid "Use blog/list mode on matrix page" +msgstr "Bruk blogg-/listemodus på matrix-siden" -#: ../../mod/profiles.php:417 -msgid "Interests" -msgstr "Interesser" +#: ../../mod/settings.php:859 +msgid "Channel page max height of content (in pixels)" +msgstr "Kanalsidens makshøyde for innhold (i pixler)" -#: ../../mod/profiles.php:421 ../../mod/admin.php:866 -msgid "Address" -msgstr "Adresse" +#: ../../mod/settings.php:859 ../../mod/settings.php:860 +msgid "click to expand content exceeding this height" +msgstr "klikk for å utvide innhold som overstiger denne høyden" -#: ../../mod/profiles.php:428 ../../mod/pubsites.php:25 -msgid "Location" -msgstr "Plassering" +#: ../../mod/settings.php:860 +msgid "Matrix page max height of content (in pixels)" +msgstr "Matrix-sidens makshøyde for innholde (i pixler)" -#: ../../mod/profiles.php:511 -msgid "Profile updated." -msgstr "Profilen er oppdatert." +#: ../../mod/settings.php:894 +msgid "Nobody except yourself" +msgstr "Ingen unntatt deg selv" -#: ../../mod/profiles.php:590 -msgid "Hide your contact/friend list from viewers of this profile?" -msgstr "Skjul kontakt-/vennelisten din fra de som ser på denne profilen?" +#: ../../mod/settings.php:895 +msgid "Only those you specifically allow" +msgstr "Bare de du spesifikt tillater" -#: ../../mod/profiles.php:591 ../../mod/api.php:105 ../../mod/settings.php:916 -#: ../../mod/settings.php:921 ../../mod/settings.php:1004 -#: ../../mod/admin.php:392 -msgid "Yes" -msgstr "Ja" +#: ../../mod/settings.php:896 +msgid "Approved connections" +msgstr "Godkjente forbindelser" -#: ../../mod/profiles.php:592 ../../mod/api.php:106 ../../mod/settings.php:916 -#: ../../mod/settings.php:921 ../../mod/settings.php:1004 -#: ../../mod/admin.php:390 -msgid "No" -msgstr "Nei" +#: ../../mod/settings.php:897 +msgid "Any connections" +msgstr "Enhver forbindelse" -#: ../../mod/profiles.php:632 -msgid "Edit Profile Details" -msgstr "Endre profildetaljer" +#: ../../mod/settings.php:898 +msgid "Anybody on this website" +msgstr "Enhver ved dette nettstedet" -#: ../../mod/profiles.php:634 -msgid "View this profile" -msgstr "Vis denne profilen" +#: ../../mod/settings.php:899 +msgid "Anybody in this network" +msgstr "Enhver i dette nettverket" -#: ../../mod/profiles.php:636 -msgid "Change Profile Photo" -msgstr "Endre profilbilde" +#: ../../mod/settings.php:900 +msgid "Anybody authenticated" +msgstr "Enhver som er autentisert" -#: ../../mod/profiles.php:637 -msgid "Create a new profile using these settings" -msgstr "Lag en ny profil ved å bruke disse innstillingene" +#: ../../mod/settings.php:901 +msgid "Anybody on the internet" +msgstr "Enhver på Internett" -#: ../../mod/profiles.php:638 -msgid "Clone this profile" -msgstr "Klon denne profilen" +#: ../../mod/settings.php:975 +msgid "Publish your default profile in the network directory" +msgstr "Publiser din standardprofil i nettverkskatalogen" -#: ../../mod/profiles.php:639 -msgid "Delete this profile" -msgstr "Slett denne profilen" +#: ../../mod/settings.php:980 +msgid "Allow us to suggest you as a potential friend to new members?" +msgstr "Tillat oss å foreslå deg som en mulig venn til nye medlemmer?" -#: ../../mod/profiles.php:641 -msgid "Import profile from file" -msgstr "Importer profil fra fil" +#: ../../mod/settings.php:984 ../../mod/profile_photo.php:366 +msgid "or" +msgstr "eller" -#: ../../mod/profiles.php:642 -msgid "Export profile to file" -msgstr "Eksporter profil til fil" +#: ../../mod/settings.php:989 +msgid "Your channel address is" +msgstr "Din kanaladresse er" -#: ../../mod/profiles.php:643 -msgid "Profile Name:" -msgstr "Profilnavn:" +#: ../../mod/settings.php:1037 +msgid "Channel Settings" +msgstr "Kanalinnstillinger" -#: ../../mod/profiles.php:644 -msgid "Your Full Name:" -msgstr "Ditt fulle navn:" +#: ../../mod/settings.php:1044 +msgid "Basic Settings" +msgstr "Grunninnstillinger" -#: ../../mod/profiles.php:645 -msgid "Title/Description:" -msgstr "Tittel/Beskrivelse:" +#: ../../mod/settings.php:1047 +msgid "Your Timezone:" +msgstr "Din tidssone:" -#: ../../mod/profiles.php:646 -msgid "Your Gender:" -msgstr "Ditt kjønn:" +#: ../../mod/settings.php:1048 +msgid "Default Post Location:" +msgstr "Standard plassering ved innlegg:" -#: ../../mod/profiles.php:647 -msgid "Birthday :" -msgstr "Fødselsdag:" +#: ../../mod/settings.php:1048 +msgid "Geographical location to display on your posts" +msgstr "Geografisk plassering som vises på dine innlegg" -#: ../../mod/profiles.php:648 -msgid "Street Address:" -msgstr "Gateadresse:" +#: ../../mod/settings.php:1049 +msgid "Use Browser Location:" +msgstr "Bruk nettleseren sin plassering:" -#: ../../mod/profiles.php:649 -msgid "Locality/City:" -msgstr "Sted/By:" +#: ../../mod/settings.php:1051 +msgid "Adult Content" +msgstr "Voksent innhold" -#: ../../mod/profiles.php:650 -msgid "Postal/Zip Code:" -msgstr "Postnummer/ZIP-kode:" +#: ../../mod/settings.php:1051 +msgid "" +"This channel frequently or regularly publishes adult content. (Please tag " +"any adult material and/or nudity with #NSFW)" +msgstr "Denne kanalen vil ofte eller jevnlig publisere voksent innhold. (Vennligst merk alt voksent materiale og/eller nakenhet med #NSFW)" -#: ../../mod/profiles.php:651 -msgid "Country:" -msgstr "Land:" +#: ../../mod/settings.php:1053 +msgid "Security and Privacy Settings" +msgstr "Sikkerhets- og personverninnstillinger" -#: ../../mod/profiles.php:652 -msgid "Region/State:" -msgstr "Region/fylke:" +#: ../../mod/settings.php:1055 +msgid "Your permissions are already configured. Click to view/adjust" +msgstr "Dine tillatelser er allerede satt. Klikk for å se/justere." -#: ../../mod/profiles.php:653 -msgid "<span class=\"heart\">♥</span> Marital Status:" -msgstr "<span class=\"heart\">♥</span> Sivilstand:" +#: ../../mod/settings.php:1057 +msgid "Hide my online presence" +msgstr "Skjul min tilstedeværelse online" -#: ../../mod/profiles.php:654 -msgid "Who: (if applicable)" -msgstr "Hvem: (hvis det er aktuelt) " +#: ../../mod/settings.php:1057 +msgid "Prevents displaying in your profile that you are online" +msgstr "Forhindrer visning på din profil av at du er online " -#: ../../mod/profiles.php:655 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" -msgstr "Eksempler: kari123, Kari Villiamsen, kari@example.com" +#: ../../mod/settings.php:1059 +msgid "Simple Privacy Settings:" +msgstr "Enkle personverninnstillinger:" -#: ../../mod/profiles.php:656 -msgid "Since [date]:" -msgstr "Siden [dato]:" +#: ../../mod/settings.php:1060 +msgid "" +"Very Public - <em>extremely permissive (should be used with caution)</em>" +msgstr "Svært offentlig - <em>ekstremt åpent (bør brukes med varsomhet)</em>" -#: ../../mod/profiles.php:658 -msgid "Homepage URL:" -msgstr "Hjemmeside URL:" +#: ../../mod/settings.php:1061 +msgid "" +"Typical - <em>default public, privacy when desired (similar to social " +"network permissions but with improved privacy)</em>" +msgstr "Typisk - <em>standard er offentlig, personvern når ønsket (likner på tillatelser i sosiale nettverk, men med forbedret personvern)</em>" -#: ../../mod/profiles.php:661 -msgid "Religious Views:" -msgstr "Religiøse synspunkter:" +#: ../../mod/settings.php:1062 +msgid "Private - <em>default private, never open or public</em>" +msgstr "Privat - <em>standard er privat, aldri åpen eller offentlig</em>" -#: ../../mod/profiles.php:662 -msgid "Keywords:" -msgstr "Nøkkelord:" +#: ../../mod/settings.php:1063 +msgid "Blocked - <em>default blocked to/from everybody</em>" +msgstr "Blokkert - <em>standard blokkert til/fra alle</em>" -#: ../../mod/profiles.php:665 -msgid "Example: fishing photography software" -msgstr "Eksempel: fisking fotografering programvare" +#: ../../mod/settings.php:1065 +msgid "Allow others to tag your posts" +msgstr "Tillat andre å merke dine innlegg" -#: ../../mod/profiles.php:666 -msgid "Used in directory listings" -msgstr "Brukt i katalogoppføringer" +#: ../../mod/settings.php:1065 +msgid "" +"Often used by the community to retro-actively flag inappropriate content" +msgstr "Ofte brukt av fellesskapet for å merke upassende innhold i etterkant" -#: ../../mod/profiles.php:667 -msgid "Tell us about yourself..." -msgstr "Fortell oss om deg selv..." +#: ../../mod/settings.php:1067 +msgid "Advanced Privacy Settings" +msgstr "Avanserte personverninnstillinger" -#: ../../mod/profiles.php:668 -msgid "Hobbies/Interests" -msgstr "Hobbier/Interesser" +#: ../../mod/settings.php:1069 +msgid "Expire other channel content after this many days" +msgstr "Annet kanal innhold utløper etter så mange dager" -#: ../../mod/profiles.php:669 -msgid "Contact information and Social Networks" -msgstr "Kontaktinformasjon og sosiale nettverk" +#: ../../mod/settings.php:1069 +msgid "0 or blank prevents expiration" +msgstr "0 eller blankt forhindrer utløp" -#: ../../mod/profiles.php:670 -msgid "My other channels" -msgstr "Mine andre kanaler" +#: ../../mod/settings.php:1070 +msgid "Maximum Friend Requests/Day:" +msgstr "Maksimalt antall venneforespørsler per dag:" -#: ../../mod/profiles.php:671 -msgid "Musical interests" -msgstr "Musikkinteresser" +#: ../../mod/settings.php:1070 +msgid "May reduce spam activity" +msgstr "Kan redusere søppelpostaktivitet" -#: ../../mod/profiles.php:672 -msgid "Books, literature" -msgstr "Bøker, litteratur" +#: ../../mod/settings.php:1071 +msgid "Default Post Permissions" +msgstr "Standard innleggstillatelser" -#: ../../mod/profiles.php:673 -msgid "Television" -msgstr "TV/fjernsyn" +#: ../../mod/settings.php:1072 ../../mod/mitem.php:161 ../../mod/mitem.php:204 +msgid "(click to open/close)" +msgstr "(klikk for å åpne/lukke)" -#: ../../mod/profiles.php:674 -msgid "Film/dance/culture/entertainment" -msgstr "Film/dans/kultur/underholdning" +#: ../../mod/settings.php:1076 +msgid "Channel permissions category:" +msgstr "Kategori med kanaltillatelser:" -#: ../../mod/profiles.php:675 -msgid "Love/romance" -msgstr "Kjærlighet/romantikk" +#: ../../mod/settings.php:1082 +msgid "Maximum private messages per day from unknown people:" +msgstr "Maksimalt antall private meldinger per dag fra ukjente personer:" -#: ../../mod/profiles.php:676 -msgid "Work/employment" -msgstr "Arbeid/sysselsetting" +#: ../../mod/settings.php:1082 +msgid "Useful to reduce spamming" +msgstr "Nyttig for å redusere søppelpost" -#: ../../mod/profiles.php:677 -msgid "School/education" -msgstr "Skole/utdanning" +#: ../../mod/settings.php:1085 +msgid "Notification Settings" +msgstr "Varslingsinnstillinger" -#: ../../mod/profiles.php:683 -msgid "This is your default profile." -msgstr "Dette er din standardprofil." +#: ../../mod/settings.php:1086 +msgid "By default post a status message when:" +msgstr "Legg inn en statusmelding når du:" -#: ../../mod/profiles.php:694 ../../mod/directory.php:148 -msgid "Age: " -msgstr "Alder:" +#: ../../mod/settings.php:1087 +msgid "accepting a friend request" +msgstr "aksepterer en venneforespørsel" -#: ../../mod/profiles.php:737 -msgid "Edit/Manage Profiles" -msgstr "Endre/håndter profiler" +#: ../../mod/settings.php:1088 +msgid "joining a forum/community" +msgstr "blir med i et forum/miljø" -#: ../../mod/profiles.php:738 -msgid "Add profile things" -msgstr "Legg til profilting" +#: ../../mod/settings.php:1089 +msgid "making an <em>interesting</em> profile change" +msgstr "gjør en <em>interessant</em> profilendring" -#: ../../mod/profiles.php:739 -msgid "Include desirable objects in your profile" -msgstr "Inkluder ønskverdige objekter i din profil" +#: ../../mod/settings.php:1090 +msgid "Send a notification email when:" +msgstr "Send en varsel-e-post når:" + +#: ../../mod/settings.php:1091 +msgid "You receive a connection request" +msgstr "Du har mottatt en forespørsel om forbindelse" + +#: ../../mod/settings.php:1092 +msgid "Your connections are confirmed" +msgstr "Dine forbindelser er bekreftet" + +#: ../../mod/settings.php:1093 +msgid "Someone writes on your profile wall" +msgstr "Noen skriver på din profilvegg" + +#: ../../mod/settings.php:1094 +msgid "Someone writes a followup comment" +msgstr "Noen skriver en oppfølgende kommentar" + +#: ../../mod/settings.php:1095 +msgid "You receive a private message" +msgstr "Du mottar en privat melding" + +#: ../../mod/settings.php:1096 +msgid "You receive a friend suggestion" +msgstr "Du mottok et venneforslag" + +#: ../../mod/settings.php:1097 +msgid "You are tagged in a post" +msgstr "Du merkes i et innlegg" + +#: ../../mod/settings.php:1098 +msgid "You are poked/prodded/etc. in a post" +msgstr "Du ble prikket/oppildnet/og så vider i et innlegg" + +#: ../../mod/settings.php:1101 +msgid "Show visual notifications including:" +msgstr "Vis visuelle varslinger om:" + +#: ../../mod/settings.php:1103 +msgid "Unseen matrix activity" +msgstr "Usett matrixaktivitet" + +#: ../../mod/settings.php:1104 +msgid "Unseen channel activity" +msgstr "Usett kanalaktivitet" + +#: ../../mod/settings.php:1105 +msgid "Unseen private messages" +msgstr "Usette private meldinger" + +#: ../../mod/settings.php:1105 ../../mod/settings.php:1110 +#: ../../mod/settings.php:1111 ../../mod/settings.php:1112 +msgid "Recommended" +msgstr "Anbefalt" + +#: ../../mod/settings.php:1106 +msgid "Upcoming events" +msgstr "Kommende hendelser" + +#: ../../mod/settings.php:1107 +msgid "Events today" +msgstr "Hendelser idag" + +#: ../../mod/settings.php:1108 +msgid "Upcoming birthdays" +msgstr "Kommende fødselsdager" + +#: ../../mod/settings.php:1108 +msgid "Not available in all themes" +msgstr "Ikke tilgjengelig i alle temaer" + +#: ../../mod/settings.php:1109 +msgid "System (personal) notifications" +msgstr "System (personlige) varslinger" + +#: ../../mod/settings.php:1110 +msgid "System info messages" +msgstr "System infomeldinger" + +#: ../../mod/settings.php:1111 +msgid "System critical alerts" +msgstr "System kritiske varsel" + +#: ../../mod/settings.php:1112 +msgid "New connections" +msgstr "Nye forbindelser" + +#: ../../mod/settings.php:1113 +msgid "System Registrations" +msgstr "Systemregistreringer" + +#: ../../mod/settings.php:1114 +msgid "" +"Also show new wall posts, private messages and connections under Notices" +msgstr "Vis også nye vegginnlegg, private meldinger og forbindelser under Varsler" + +#: ../../mod/settings.php:1116 +msgid "Notify me of events this many days in advance" +msgstr "Varsle meg om hendelser dette antall dager på forhånd" + +#: ../../mod/settings.php:1116 +msgid "Must be greater than 0" +msgstr "Må være større enn 0" + +#: ../../mod/settings.php:1118 +msgid "Advanced Account/Page Type Settings" +msgstr "Avanserte innstillinger for konto/sidetype" + +#: ../../mod/settings.php:1119 +msgid "Change the behaviour of this account for special situations" +msgstr "Endre oppførselen til denne kontoen i spesielle situasjoner" + +#: ../../mod/settings.php:1122 +msgid "" +"Please enable expert mode (in <a href=\"settings/features\">Settings > " +"Additional features</a>) to adjust!" +msgstr "Vennligst skru på ekspertmodus (under <a href=\"settings/features\">Innstillinger > Ekstra funksjoner</a>) for å justere!" + +#: ../../mod/settings.php:1123 +msgid "Miscellaneous Settings" +msgstr "Diverse innstillinger" + +#: ../../mod/settings.php:1125 +msgid "Personal menu to display in your channel pages" +msgstr "Personlig meny som kan vises på dine kanalsider" + +#: ../../mod/settings.php:1126 ../../mod/removeme.php:61 +msgid "Remove Channel" +msgstr "Fjern kanal" + +#: ../../mod/settings.php:1127 +msgid "Remove this channel." +msgstr "Fjern denne kanalen." + +#: ../../mod/xchan.php:6 +msgid "Xchan Lookup" +msgstr "Xchan oppslag" + +#: ../../mod/xchan.php:9 +msgid "Lookup xchan beginning with (or webbie): " +msgstr "Slå opp xchan som begynner med (eller webbie):" -#: ../../mod/connect.php:55 ../../mod/connect.php:103 +#: ../../mod/xchan.php:37 ../../mod/menu.php:136 ../../mod/mitem.php:111 +msgid "Not found." +msgstr "Ikke funnet." + +#: ../../mod/api.php:76 ../../mod/api.php:102 +msgid "Authorize application connection" +msgstr "Tillat programforbindelse" + +#: ../../mod/api.php:77 +msgid "Return to your app and insert this Securty Code:" +msgstr "Gå tilbake til din app og legg inn denne sikkerhetskoden:" + +#: ../../mod/api.php:89 +msgid "Please login to continue." +msgstr "Vennligst logg inn for å fortsette." + +#: ../../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 "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?" + +#: ../../mod/blocks.php:99 +msgid "Block Name" +msgstr "Byggeklossens navn" + +#: ../../mod/follow.php:25 +msgid "Channel added." +msgstr "Kanal lagt til." + +#: ../../mod/tagrm.php:44 ../../mod/tagrm.php:94 +msgid "Tag removed" +msgstr "Merkelapp fjernet" + +#: ../../mod/tagrm.php:119 +msgid "Remove Item Tag" +msgstr "Fjern merkelapp fra element" + +#: ../../mod/tagrm.php:121 +msgid "Select a tag to remove: " +msgstr "Velg merkelapp å fjerne:" + +#: ../../mod/tagrm.php:133 ../../mod/photos.php:875 +msgid "Remove" +msgstr "Fjern" + +#: ../../mod/connect.php:56 ../../mod/connect.php:104 msgid "Continue" msgstr "Fortsett" -#: ../../mod/connect.php:84 +#: ../../mod/connect.php:85 msgid "Premium Channel Setup" msgstr "Premiumkanal-oppsett" -#: ../../mod/connect.php:86 +#: ../../mod/connect.php:87 msgid "Enable premium channel connection restrictions" msgstr "Slå på restriksjoner for forbindelse med premiumkanal" -#: ../../mod/connect.php:87 +#: ../../mod/connect.php:88 msgid "" "Please enter your restrictions or conditions, such as paypal receipt, usage " "guidelines, etc." msgstr "Vennligst skriv dine restriksjoner og betingelser, slik som PayPal-kvittering, retningslinjer for bruk, og så videre." -#: ../../mod/connect.php:89 ../../mod/connect.php:109 +#: ../../mod/connect.php:90 ../../mod/connect.php:110 msgid "" "This channel may require additional steps or acknowledgement of the " "following conditions prior to connecting:" msgstr "Denne kanalen kan kreve ytterligere steg og bekreftelse av følgende betingelser før tilkobling:" -#: ../../mod/connect.php:90 +#: ../../mod/connect.php:91 msgid "" "Potential connections will then see the following text before proceeding:" msgstr "Potensielle forbindelser vil da se følgende tekst før de går videre:" -#: ../../mod/connect.php:91 ../../mod/connect.php:112 +#: ../../mod/connect.php:92 ../../mod/connect.php:113 msgid "" "By continuing, I certify that I have complied with any instructions provided" " on this page." msgstr "Ved å fortsette bekrefter jeg at jeg har oppfylt alle instruksjoner gitt på denne siden." -#: ../../mod/connect.php:100 +#: ../../mod/connect.php:101 msgid "(No specific instructions have been provided by the channel owner.)" msgstr "(Ingen spesifikke instruksjoner er gitt av kanaleieren.)" -#: ../../mod/connect.php:108 +#: ../../mod/connect.php:109 msgid "Restricted or Premium Channel" msgstr "Begrenset kanal eller premiumkanal" -#: ../../mod/post.php:229 +#: ../../mod/match.php:16 +msgid "Profile Match" +msgstr "Profiltreff" + +#: ../../mod/match.php:24 +msgid "No keywords to match. Please add keywords to your default profile." +msgstr "Ingen nøkkelord å sammenlikne. Vennligst legg til nøkkelord til din standardprofil." + +#: ../../mod/match.php:61 +msgid "is interested in:" +msgstr "er interessert i:" + +#: ../../mod/match.php:69 +msgid "No matches" +msgstr "Ingen treff" + +#: ../../mod/attach.php:9 +msgid "Item not available." +msgstr "Elementet er ikke tilgjengelig." + +#: ../../mod/probe.php:23 ../../mod/probe.php:29 +#, php-format +msgid "Fetching URL returns error: %1$s" +msgstr "Henting av URL gir følgende feil: %1$s" + +#: ../../mod/home.php:48 +msgid "Red Matrix - "The Network"" +msgstr "Red Matrix - "Nettverket"" + +#: ../../mod/home.php:101 +#, php-format +msgid "Welcome to %s" +msgstr "Velkommen til %s" + +#: ../../mod/profile_photo.php:108 +msgid "Image uploaded but image cropping failed." +msgstr "Bildet ble lastet opp, men beskjæring av bildet mislyktes." + +#: ../../mod/profile_photo.php:162 +msgid "Image resize failed." +msgstr "Endring av bildestørrelse mislyktes." + +#: ../../mod/profile_photo.php:206 msgid "" -"Remote authentication blocked. You are logged into this site locally. Please" -" logout and retry." -msgstr "Fjernautentisering blokkert. Du er logget inn på dette nettstedet lokalt. Vennligst logg ut og prøv på nytt." +"Shift-reload the page or clear browser cache if the new photo does not " +"display immediately." +msgstr "Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens mellomlager hvis det nye bildet ikke vises umiddelbart." -#: ../../mod/post.php:261 ../../mod/openid.php:72 ../../mod/openid.php:180 +#: ../../mod/profile_photo.php:233 #, php-format -msgid "Welcome %s. Remote authentication successful." -msgstr "Velkommen %s. Ekstern autentisering er vellykket." +msgid "Image exceeds size limit of %d" +msgstr "Bildet overstiger størrelsesbegrensningen på %d" + +#: ../../mod/profile_photo.php:242 +msgid "Unable to process image." +msgstr "Kan ikke behandle bildet." + +#: ../../mod/profile_photo.php:291 ../../mod/profile_photo.php:340 +msgid "Photo not available." +msgstr "Bildet er ikke tilgjengelig." + +#: ../../mod/profile_photo.php:359 +msgid "Upload File:" +msgstr "Last opp fil:" + +#: ../../mod/profile_photo.php:360 +msgid "Select a profile:" +msgstr "Velg en profil:" + +#: ../../mod/profile_photo.php:361 +msgid "Upload Profile Photo" +msgstr "Last opp profilbilde:" + +#: ../../mod/profile_photo.php:366 +msgid "skip this step" +msgstr "hopp over dette steget" + +#: ../../mod/profile_photo.php:366 +msgid "select a photo from your photo albums" +msgstr "velg et bilde fra dine fotoalbum" + +#: ../../mod/profile_photo.php:382 +msgid "Crop Image" +msgstr "Beskjær bildet" + +#: ../../mod/profile_photo.php:383 +msgid "Please adjust the image cropping for optimum viewing." +msgstr "Vennligst juster bildebeskjæringen for optimal visning." + +#: ../../mod/profile_photo.php:385 +msgid "Done Editing" +msgstr "Avslutt redigering" + +#: ../../mod/profile_photo.php:428 +msgid "Image uploaded successfully." +msgstr "Opplasting av bildet var vellykket." + +#: ../../mod/profile_photo.php:430 +msgid "Image upload failed." +msgstr "Opplasting av bildet mislyktes." + +#: ../../mod/profile_photo.php:439 +#, php-format +msgid "Image size reduction [%s] failed." +msgstr "Forminsking av bildet [%s] mislyktes." + +#: ../../mod/block.php:27 ../../mod/page.php:33 +msgid "Invalid item." +msgstr "Ugyldig element." + +#: ../../mod/block.php:39 ../../mod/wall_upload.php:29 ../../mod/page.php:45 +msgid "Channel not found." +msgstr "Kanalen ble ikke funnet." + +#: ../../mod/block.php:75 ../../mod/help.php:79 ../../mod/display.php:102 +#: ../../mod/page.php:81 ../../index.php:241 +msgid "Page not found." +msgstr "Siden ikke funnet." + +#: ../../mod/like.php:15 +msgid "Like/Dislike" +msgstr "Liker/Liker ikke" + +#: ../../mod/like.php:20 +msgid "This action is restricted to members." +msgstr "Denne handlingen er begrenset til medlemmer." + +#: ../../mod/like.php:21 +msgid "" +"Please <a href=\"rmagic\">login with your RedMatrix ID</a> or <a " +"href=\"register\">register as a new RedMatrix member</a> to continue." +msgstr "Vennligst <a href=\"rmagic\">logg inn med din RedMatrix ID</a> eller <a href=\"register\">registrer deg som et nytt RedMatrix-medlem</a> for å fortsette" + +#: ../../mod/like.php:101 ../../mod/like.php:128 ../../mod/like.php:166 +msgid "Invalid request." +msgstr "Ugyldig forespørsel." + +#: ../../mod/like.php:143 +msgid "thing" +msgstr "ting" + +#: ../../mod/like.php:189 +msgid "Channel unavailable." +msgstr "Kanalen er utilgjengelig." + +#: ../../mod/like.php:228 +msgid "Previous action reversed." +msgstr "Forrige handling er omgjort." + +#: ../../mod/like.php:387 +#, php-format +msgid "%1$s agrees with %2$s's %3$s" +msgstr "%1$s er enig med %2$s sin %3$s" + +#: ../../mod/like.php:389 +#, php-format +msgid "%1$s doesn't agree with %2$s's %3$s" +msgstr "%1$s er ikke enig med %2$s sin %3$s" + +#: ../../mod/like.php:391 +#, php-format +msgid "%1$s abstains from a decision on %2$s's %3$s" +msgstr "%1$s avstår fra å mene noe om %2$s sin %3$s" + +#: ../../mod/like.php:393 +#, php-format +msgid "%1$s is attending %2$s's %3$s" +msgstr "%1$s deltar på %2$ss %3$s" + +#: ../../mod/like.php:395 +#, php-format +msgid "%1$s is not attending %2$s's %3$s" +msgstr "%1$s deltar ikke på %2$ss %3$s" + +#: ../../mod/like.php:397 +#, php-format +msgid "%1$s may attend %2$s's %3$s" +msgstr "%1$s deltar kanskje på %2$ss %3$s" + +#: ../../mod/like.php:481 +msgid "Action completed." +msgstr "Handling ferdig." + +#: ../../mod/like.php:482 +msgid "Thank you." +msgstr "Tusen takk." + +#: ../../mod/events.php:87 +msgid "Event can not end before it has started." +msgstr "Hendelsen kan ikke slutte før den starter." + +#: ../../mod/events.php:89 ../../mod/events.php:98 ../../mod/events.php:116 +msgid "Unable to generate preview." +msgstr "Klarer ikke å lage forhåndsvisning." + +#: ../../mod/events.php:96 +msgid "Event title and start time are required." +msgstr "Hendelsestittel og starttidspunkt er påkrevd." + +#: ../../mod/events.php:114 +msgid "Event not found." +msgstr "Hendelsen ble ikke funnet." + +#: ../../mod/events.php:396 +msgid "l, F j" +msgstr "l, F j" + +#: ../../mod/events.php:418 +msgid "Edit event" +msgstr "Endre hendelse" + +#: ../../mod/events.php:419 +msgid "Delete event" +msgstr "Slett hendelse" + +#: ../../mod/events.php:473 +msgid "Create New Event" +msgstr "Lag ny hendelse" + +#: ../../mod/events.php:474 ../../mod/photos.php:827 +msgid "Previous" +msgstr "Forrige" + +#: ../../mod/events.php:475 ../../mod/setup.php:265 ../../mod/photos.php:836 +msgid "Next" +msgstr "Neste" + +#: ../../mod/events.php:476 +msgid "Export" +msgstr "Eksport" + +#: ../../mod/events.php:504 +msgid "Event removed" +msgstr "Hendelse slettet" + +#: ../../mod/events.php:507 +msgid "Failed to remove event" +msgstr "Mislyktes med å slette hendelse" + +#: ../../mod/events.php:625 +msgid "Event details" +msgstr "Hendelsesdetaljer" + +#: ../../mod/events.php:626 +msgid "Starting date and Title are required." +msgstr "Startdato og Tittel er påkrevd." + +#: ../../mod/events.php:628 +msgid "Categories (comma-separated list)" +msgstr "Kategorier (kommaseparert liste)" + +#: ../../mod/events.php:630 +msgid "Event Starts:" +msgstr "Hendelsen starter:" + +#: ../../mod/events.php:637 +msgid "Finish date/time is not known or not relevant" +msgstr "Sluttdato/-tidspunkt er ikke kjent eller ikke relevant" + +#: ../../mod/events.php:639 +msgid "Event Finishes:" +msgstr "Hendelsen slutter:" + +#: ../../mod/events.php:641 ../../mod/events.php:642 +msgid "Adjust for viewer timezone" +msgstr "Juster i forhold til tilskuerens tidssone" + +#: ../../mod/events.php:641 +msgid "" +"Important for events that happen in a particular place. Not practical for " +"global holidays." +msgstr "Viktig for hendelser som skjer på et bestemt sted. Ikke praktisk for globale ferier eller fridager." + +#: ../../mod/events.php:643 +msgid "Description:" +msgstr "Beskrivelse:" + +#: ../../mod/events.php:647 +msgid "Title:" +msgstr "Tittel:" + +#: ../../mod/events.php:649 +msgid "Share this event" +msgstr "Del denne hendelsen" + +#: ../../mod/subthread.php:103 +#, php-format +msgid "%1$s is following %2$s's %3$s" +msgstr "%1$s følger %2$s sin %3$s" + +#: ../../mod/pubsites.php:16 +msgid "Public Sites" +msgstr "Offentlige nettsteder" + +#: ../../mod/pubsites.php:19 +msgid "" +"The listed sites allow public registration into the Red Matrix. All sites in" +" the matrix are interlinked so membership on any of them conveys membership " +"in the matrix as a whole. Some sites may require subscription or provide " +"tiered service plans. The provider links <strong>may</strong> provide " +"additional details." +msgstr "Nettstedene på listen tillater offentlig registrering i Red Matrix. Alle nettsteder i matrix er forbundet så medlemskap på enhver av dem formidler medlemskap i hele matrix. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Tilbyderlenkene <strong>kan</strong> gi tilleggsopplysninger." + +#: ../../mod/pubsites.php:25 +msgid "Rate this hub" +msgstr "Vurder denne hubben" + +#: ../../mod/pubsites.php:26 +msgid "Site URL" +msgstr "Nettstedets URL" + +#: ../../mod/pubsites.php:26 +msgid "Access Type" +msgstr "Tilgangstype" + +#: ../../mod/pubsites.php:26 +msgid "Registration Policy" +msgstr "Retningslinjer for registrering" + +#: ../../mod/pubsites.php:26 ../../mod/profiles.php:454 +msgid "Location" +msgstr "Plassering" + +#: ../../mod/pubsites.php:26 +msgid "View hub ratings" +msgstr "Vis vurderinger av hubben" + +#: ../../mod/pubsites.php:30 +msgid "Rate" +msgstr "Vurder" + +#: ../../mod/pubsites.php:31 +msgid "View ratings" +msgstr "Vis vurderinger" + +#: ../../mod/connedit.php:75 ../../mod/connections.php:37 +msgid "Could not access contact record." +msgstr "Fikk ikke tilgang til kontaktinformasjonen." + +#: ../../mod/connedit.php:99 ../../mod/connections.php:51 +msgid "Could not locate selected profile." +msgstr "Fant ikke valgt profil." + +#: ../../mod/connedit.php:204 ../../mod/connections.php:94 +msgid "Connection updated." +msgstr "Forbindelsen er oppdatert." + +#: ../../mod/connedit.php:206 ../../mod/connections.php:96 +msgid "Failed to update connection record." +msgstr "Mislyktes med å oppdatere forbindelsesinformasjonen." + +#: ../../mod/connedit.php:252 +msgid "is now connected to" +msgstr "er nå forbundet til" + +#: ../../mod/connedit.php:365 +msgid "Could not access address book record." +msgstr "Fikk ikke tilgang til informasjonen i adresseboken." + +#: ../../mod/connedit.php:379 +msgid "Refresh failed - channel is currently unavailable." +msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig." + +#: ../../mod/connedit.php:386 +msgid "Channel has been unblocked" +msgstr "Kanalen er ikke blokkert lenger" + +#: ../../mod/connedit.php:387 +msgid "Channel has been blocked" +msgstr "Kanalen har blitt blokkert" + +#: ../../mod/connedit.php:391 ../../mod/connedit.php:403 +#: ../../mod/connedit.php:415 ../../mod/connedit.php:427 +#: ../../mod/connedit.php:443 +msgid "Unable to set address book parameters." +msgstr "Ikke i stand til å angi parametre for adresseboken." + +#: ../../mod/connedit.php:398 +msgid "Channel has been unignored" +msgstr "Kanalen er ikke lenger ignorert" + +#: ../../mod/connedit.php:399 +msgid "Channel has been ignored" +msgstr "Kanalen blir ignorert" + +#: ../../mod/connedit.php:410 +msgid "Channel has been unarchived" +msgstr "Kanalen er ikke lenger arkivert" + +#: ../../mod/connedit.php:411 +msgid "Channel has been archived" +msgstr "Kanalen er arkivert" + +#: ../../mod/connedit.php:422 +msgid "Channel has been unhidden" +msgstr "Kanalen er ikke lenger skjult" + +#: ../../mod/connedit.php:423 +msgid "Channel has been hidden" +msgstr "Kanalen er blitt skjult" + +#: ../../mod/connedit.php:438 +msgid "Channel has been approved" +msgstr "Kanalen har blitt godkjent" + +#: ../../mod/connedit.php:439 +msgid "Channel has been unapproved" +msgstr "Kanalen er ikke lenger godkjent" + +#: ../../mod/connedit.php:467 +msgid "Connection has been removed." +msgstr "Forbindelsen har blitt fjernet." + +#: ../../mod/connedit.php:487 +#, php-format +msgid "View %s's profile" +msgstr "Vis %s sin profil" + +#: ../../mod/connedit.php:491 +msgid "Refresh Permissions" +msgstr "Oppfrisk tillatelser" + +#: ../../mod/connedit.php:494 +msgid "Fetch updated permissions" +msgstr "Hent oppdaterte tillatelser" + +#: ../../mod/connedit.php:498 +msgid "Recent Activity" +msgstr "Nylig aktivitet" + +#: ../../mod/connedit.php:501 +msgid "View recent posts and comments" +msgstr "Vis nylige innlegg og kommentarer" + +#: ../../mod/connedit.php:507 ../../mod/connedit.php:694 +#: ../../mod/admin.php:818 +msgid "Unblock" +msgstr "Ikke blokker lenger" + +#: ../../mod/connedit.php:507 ../../mod/connedit.php:694 +#: ../../mod/admin.php:817 +msgid "Block" +msgstr "Blokker" + +#: ../../mod/connedit.php:510 +msgid "Block (or Unblock) all communications with this connection" +msgstr "Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen" + +#: ../../mod/connedit.php:514 ../../mod/connedit.php:695 +msgid "Unignore" +msgstr "Ikke ignorer lenger" + +#: ../../mod/connedit.php:514 ../../mod/connedit.php:695 +#: ../../mod/notifications.php:51 +msgid "Ignore" +msgstr "Ignorer" + +#: ../../mod/connedit.php:517 +msgid "Ignore (or Unignore) all inbound communications from this connection" +msgstr "Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne forbindelsen" + +#: ../../mod/connedit.php:520 +msgid "Unarchive" +msgstr "Ikke arkiver lenger" + +#: ../../mod/connedit.php:520 +msgid "Archive" +msgstr "Arkiver" + +#: ../../mod/connedit.php:523 +msgid "" +"Archive (or Unarchive) this connection - mark channel dead but keep content" +msgstr "Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, men behold innhold" + +#: ../../mod/connedit.php:526 +msgid "Unhide" +msgstr "Ikke skjul lenger" + +#: ../../mod/connedit.php:526 +msgid "Hide" +msgstr "Skjul" + +#: ../../mod/connedit.php:529 +msgid "Hide or Unhide this connection from your other connections" +msgstr "Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser" + +#: ../../mod/connedit.php:536 +msgid "Delete this connection" +msgstr "Slett denne forbindelsen" + +#: ../../mod/connedit.php:611 ../../mod/connedit.php:649 +msgid "Approve this connection" +msgstr "Godta denne forbindelsen" + +#: ../../mod/connedit.php:611 +msgid "Accept connection to allow communication" +msgstr "Godta denne forbindelsen for å tillate kommunikasjon" + +#: ../../mod/connedit.php:627 +#, php-format +msgid "Connections: settings for %s" +msgstr "Forbindelser: innstillinger for %s" + +#: ../../mod/connedit.php:628 +msgid "Apply these permissions automatically" +msgstr "Bruk disse tillatelsene automatisk" + +#: ../../mod/connedit.php:632 +msgid "Apply the permissions indicated on this page to all new connections." +msgstr "Bruk tillatelsene angitt på denne siden på alle nye forbindelser." + +#: ../../mod/connedit.php:636 +msgid "Slide to adjust your degree of friendship" +msgstr "Flytt for å justere din grad av vennskap" + +#: ../../mod/connedit.php:637 ../../mod/rate.php:161 +msgid "Rating (this information is public)" +msgstr "Vurdering (denne informasjonen er offentlig)" + +#: ../../mod/connedit.php:638 ../../mod/rate.php:162 +msgid "Optionally explain your rating (this information is public)" +msgstr "Velg om du vil forklare din vurdering (denne informasjonen er offentlig)" + +#: ../../mod/connedit.php:645 +msgid "" +"Default permissions for your channel type have (just) been applied. They " +"have not yet been submitted. Please review the permissions on this page and " +"make any desired changes at this time. This new connection may <em>not</em> " +"be able to communicate with you until you submit this page, which will " +"install and apply the selected permissions." +msgstr "Standard tillatelser for din kanaltype har (nettopp) blitt valgt. De har ikke blitt sendt inn og lagret ennå. Vennligst se over tillatelsene på denne siden og gjør eventuelle ønskede endringer nå. Denne nye forbindelsen kan muligens <em>ikke</em> klare å kommunisere med deg inntil du sender inn denne siden, som vil installere og ta i bruk de valgte tillatelsene." + +#: ../../mod/connedit.php:648 +msgid "inherited" +msgstr "arvet" + +#: ../../mod/connedit.php:651 +msgid "Connection has no individual permissions!" +msgstr "Forbindelsen har ingen individuelle tillatelser!" + +#: ../../mod/connedit.php:652 +msgid "" +"This may be appropriate based on your <a href=\"settings\">privacy " +"settings</a>, though you may wish to review the \"Advanced Permissions\"." +msgstr "Dette kan være riktig basert på dine <a href=\"settings\">personverninnstillinger</a>, men kanskje du bør se over \"Avanserte tillatelser\"." + +#: ../../mod/connedit.php:654 +msgid "Profile Visibility" +msgstr "Profilens synlighet" + +#: ../../mod/connedit.php:655 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." +msgstr "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte. " + +#: ../../mod/connedit.php:656 +msgid "Contact Information / Notes" +msgstr "Kontaktinformasjon / Merknader" + +#: ../../mod/connedit.php:657 +msgid "Edit contact notes" +msgstr "Endre kontaktmerknader" + +#: ../../mod/connedit.php:659 +msgid "Their Settings" +msgstr "Deres innstillinger" + +#: ../../mod/connedit.php:660 +msgid "My Settings" +msgstr "Mine innstillinger" + +#: ../../mod/connedit.php:662 +msgid "" +"Default permissions for this channel type have (just) been applied. They " +"have <em>not</em> been saved and there are currently no stored default " +"permissions. Please review/edit the applied settings and click [Submit] to " +"finalize." +msgstr "Standard tillatelser for denne kanaltypen har (nettopp) blitt valgt. De har <em>ikke</em> blitt lagret og det er for øyeblikket ingen lagrede standard tillatelser. Vennligst se over/endre de valgte innstillingene og klikk [Send inn] for å lagre." + +#: ../../mod/connedit.php:663 +msgid "Clear/Disable Automatic Permissions" +msgstr "Tøm/Skru av Automatiske tillatelser" + +#: ../../mod/connedit.php:664 +msgid "Forum Members" +msgstr "Forummedlemmer" + +#: ../../mod/connedit.php:665 +msgid "Soapbox" +msgstr "Talerstol" + +#: ../../mod/connedit.php:666 +msgid "Full Sharing (typical social network permissions)" +msgstr "Full deling (typiske tillatelser i sosiale nettverk)" + +#: ../../mod/connedit.php:667 +msgid "Cautious Sharing " +msgstr "Forsiktig deling" + +#: ../../mod/connedit.php:668 +msgid "Follow Only" +msgstr "Bare følg" + +#: ../../mod/connedit.php:669 +msgid "Individual Permissions" +msgstr "Individuelle tillatelser" + +#: ../../mod/connedit.php:670 +msgid "" +"Some permissions may be inherited from your channel <a " +"href=\"settings\">privacy settings</a>, which have higher priority than " +"individual settings. Changing those inherited settings on this page will " +"have no effect." +msgstr "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\">personverninnstillinger</a>, som har høyere prioritet enn individuelle innstillinger. Å endre arvede innstillinger på denne siden vil ikke ha noen effekt." + +#: ../../mod/connedit.php:671 +msgid "Advanced Permissions" +msgstr "Avanserte tillatelser" + +#: ../../mod/connedit.php:672 +msgid "Simple Permissions (select one and submit)" +msgstr "Enkle tillatelser (velg en og lagre)" + +#: ../../mod/connedit.php:676 +#, php-format +msgid "Visit %s's profile - %s" +msgstr "Besøk %s sin profil - %s" + +#: ../../mod/connedit.php:677 +msgid "Block/Unblock contact" +msgstr "Blokker/Ikke blokker kontakt" + +#: ../../mod/connedit.php:678 +msgid "Ignore contact" +msgstr "Ignorer kontakt" + +#: ../../mod/connedit.php:679 +msgid "Repair URL settings" +msgstr "Reparer URL-innstillinger" + +#: ../../mod/connedit.php:680 +msgid "View conversations" +msgstr "Vis samtaler" + +#: ../../mod/connedit.php:682 +msgid "Delete contact" +msgstr "Slett kontakt" + +#: ../../mod/connedit.php:686 +msgid "Last update:" +msgstr "Siste oppdatering:" + +#: ../../mod/connedit.php:688 +msgid "Update public posts" +msgstr "Oppdater offentlige innlegg" + +#: ../../mod/connedit.php:690 +msgid "Update now" +msgstr "Oppdater nå" + +#: ../../mod/connedit.php:696 +msgid "Currently blocked" +msgstr "For øyeblikket blokkert" + +#: ../../mod/connedit.php:697 +msgid "Currently ignored" +msgstr "For øyeblikket ignorert" + +#: ../../mod/connedit.php:698 +msgid "Currently archived" +msgstr "For øyeblikket arkivert" + +#: ../../mod/connedit.php:699 +msgid "Currently pending" +msgstr "For øyeblikket ventende" + +#: ../../mod/dav.php:121 +msgid "RedMatrix channel" +msgstr "RedMatrix-kanal" + +#: ../../mod/group.php:20 +msgid "Collection created." +msgstr "Samling opprettet." + +#: ../../mod/group.php:26 +msgid "Could not create collection." +msgstr "Kunne ikke lage samling." + +#: ../../mod/group.php:54 +msgid "Collection updated." +msgstr "Samlingen er oppdatert." + +#: ../../mod/group.php:86 +msgid "Create a collection of channels." +msgstr "Lag en samling med kanaler." + +#: ../../mod/group.php:87 ../../mod/group.php:183 +msgid "Collection Name: " +msgstr "Navn på samling:" + +#: ../../mod/group.php:89 ../../mod/group.php:186 +msgid "Members are visible to other channels" +msgstr "Medlemmer er synlig for andre kanaler" + +#: ../../mod/group.php:107 +msgid "Collection removed." +msgstr "Samling fjernet." + +#: ../../mod/group.php:109 +msgid "Unable to remove collection." +msgstr "Ikke i stand til å fjerne samlingen." + +#: ../../mod/group.php:182 +msgid "Collection Editor" +msgstr "Samlingsbehandler" + +#: ../../mod/group.php:196 ../../mod/bulksetclose.php:89 +msgid "Members" +msgstr "Medlemmer" + +#: ../../mod/group.php:198 ../../mod/bulksetclose.php:91 +msgid "All Connected Channels" +msgstr "Alle tilkoblede kanaler" + +#: ../../mod/group.php:233 ../../mod/bulksetclose.php:126 +msgid "Click on a channel to add or remove." +msgstr "Klikk på en kanal for å legge til eller fjerne." + +#: ../../mod/siteinfo.php:106 +#, php-format +msgid "Version %s" +msgstr "Versjon %s" + +#: ../../mod/siteinfo.php:127 +msgid "Installed plugins/addons/apps:" +msgstr "Installerte tilleggsfunksjoner/tillegg/apper:" + +#: ../../mod/siteinfo.php:140 +msgid "No installed plugins/addons/apps" +msgstr "Ingen installerte tilleggsfunksjoner/tillegg/apper" + +#: ../../mod/siteinfo.php:149 +msgid "Red" +msgstr "Red" + +#: ../../mod/siteinfo.php:150 +msgid "" +"This is a hub of the Red Matrix - a global cooperative network of " +"decentralized privacy enhanced websites." +msgstr "Dette er en hub i Red Matrix - et globalt kooperativt nettverk av desentraliserte personvernforsterkede nettsteder." + +#: ../../mod/siteinfo.php:152 +msgid "Tag: " +msgstr "Merkelapp:" + +#: ../../mod/siteinfo.php:154 +msgid "Last background fetch: " +msgstr "Siste innhenting i bakgrunnen:" + +#: ../../mod/siteinfo.php:157 +msgid "Running at web location" +msgstr "Kjører på webplasseringen" + +#: ../../mod/siteinfo.php:158 +msgid "" +"Please visit <a href=\"https://redmatrix.me\">RedMatrix.me</a> to learn more" +" about the Red Matrix." +msgstr "Vennligst besøk <a href=\"https://redmatrix.me\">RedMatrix.me</a> for å lære mer om RedMatrix." + +#: ../../mod/siteinfo.php:159 +msgid "Bug reports and issues: please visit" +msgstr "Feilmeldinger og feilretting: vennligst besøk" + +#: ../../mod/siteinfo.php:162 +msgid "" +"Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot " +"com" +msgstr "Forslag, ros og så videre - vennligst e-post \"redmatrix\" hos librelist - punktum com" + +#: ../../mod/siteinfo.php:164 +msgid "Site Administrators" +msgstr "Nettstedsadministratorer" + +#: ../../mod/help.php:49 ../../mod/help.php:55 ../../mod/help.php:61 +msgid "Help:" +msgstr "Hjelp:" + +#: ../../mod/help.php:76 ../../index.php:238 +msgid "Not Found" +msgstr "Ikke funnet" #: ../../mod/setup.php:166 msgid "Red Matrix Server - Setup" @@ -4151,7 +5410,7 @@ msgid "" "database client." msgstr "Du må kanskje importere filen \"install/schmea_xxx.sql\" manuelt ved å bruke en databaseklient." -#: ../../mod/setup.php:195 ../../mod/setup.php:264 ../../mod/setup.php:663 +#: ../../mod/setup.php:195 ../../mod/setup.php:264 ../../mod/setup.php:662 msgid "Please see the file \"install/INSTALL.txt\"." msgstr "Vennligst les filen \"install/INSTALL.txt\"." @@ -4159,10 +5418,6 @@ msgstr "Vennligst les filen \"install/INSTALL.txt\"." msgid "System check" msgstr "Systemsjekk" -#: ../../mod/setup.php:265 ../../mod/events.php:434 ../../mod/photos.php:868 -msgid "Next" -msgstr "Neste" - #: ../../mod/setup.php:266 msgid "Check again" msgstr "Sjekk igjen" @@ -4498,556 +5753,20 @@ msgid "" "server root." msgstr "Databasekonfigurasjonsfilen \".htconfig.php\" kunne ikke skrives. Vennligst bruk den medfølgende teksten for å lage en konfigurasjonsfil i toppkatalogen av din web-tjener." -#: ../../mod/setup.php:626 +#: ../../mod/setup.php:625 msgid "Errors encountered creating database tables." msgstr "Feil oppstod under opprettelsen av databasetabeller." -#: ../../mod/setup.php:661 +#: ../../mod/setup.php:660 msgid "<h1>What next</h1>" msgstr "<h1>Hva gjenstår</h1>" -#: ../../mod/setup.php:662 +#: ../../mod/setup.php:661 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the " "poller." msgstr "VIKTIG: Du må [manuelt] sette opp en automatisert tidfestet oppgave til bakgrunnshenteren." -#: ../../mod/siteinfo.php:90 -#, php-format -msgid "Version %s" -msgstr "Versjon %s" - -#: ../../mod/siteinfo.php:111 -msgid "Installed plugins/addons/apps:" -msgstr "Installerte tilleggsfunksjoner/tillegg/apper:" - -#: ../../mod/siteinfo.php:124 -msgid "No installed plugins/addons/apps" -msgstr "Ingen installerte tilleggsfunksjoner/tillegg/apper" - -#: ../../mod/siteinfo.php:132 -msgid "Red" -msgstr "Red" - -#: ../../mod/siteinfo.php:133 -msgid "" -"This is a hub of the Red Matrix - a global cooperative network of " -"decentralized privacy enhanced websites." -msgstr "Dette er en hub i Red Matrix - et globalt kooperativt nettverk av desentraliserte personvernforsterkede nettsteder." - -#: ../../mod/siteinfo.php:137 -msgid "Running at web location" -msgstr "Kjører på webplasseringen" - -#: ../../mod/siteinfo.php:138 -msgid "" -"Please visit <a href=\"http://getzot.com\">GetZot.com</a> to learn more " -"about the Red Matrix." -msgstr "Vennligst besøk <a href=\"http://getzot.com\">GetZot.com</a> for å lære mer om Red Matrix." - -#: ../../mod/siteinfo.php:139 -msgid "Bug reports and issues: please visit" -msgstr "Feilmeldinger og feilretting: vennligst besøk" - -#: ../../mod/siteinfo.php:142 -msgid "" -"Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot " -"com" -msgstr "Forslag, ros og så videre - vennligst e-post \"redmatrix\" hos librelist - punktum com" - -#: ../../mod/siteinfo.php:144 -msgid "Site Administrators" -msgstr "Nettstedsadministratorer" - -#: ../../mod/poke.php:159 -msgid "Poke/Prod" -msgstr "Prikke/oppildne" - -#: ../../mod/poke.php:160 -msgid "poke, prod or do other things to somebody" -msgstr "prikke, oppildne eller gjør andre ting med noen" - -#: ../../mod/poke.php:161 -msgid "Recipient" -msgstr "Mottaker" - -#: ../../mod/poke.php:162 -msgid "Choose what you wish to do to recipient" -msgstr "Velg hva du ønsker å gjøre med mottakeren" - -#: ../../mod/poke.php:165 -msgid "Make this post private" -msgstr "Gjør dette innlegget privat" - -#: ../../mod/api.php:76 ../../mod/api.php:102 -msgid "Authorize application connection" -msgstr "Tillat programforbindelse" - -#: ../../mod/api.php:77 -msgid "Return to your app and insert this Securty Code:" -msgstr "Gå tilbake til din app og legg inn denne sikkerhetskoden:" - -#: ../../mod/api.php:89 -msgid "Please login to continue." -msgstr "Vennligst logg inn for å fortsette." - -#: ../../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 "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?" - -#: ../../mod/attach.php:9 -msgid "Item not available." -msgstr "Elementet er ikke tilgjengelig." - -#: ../../mod/probe.php:23 ../../mod/probe.php:29 -#, php-format -msgid "Fetching URL returns error: %1$s" -msgstr "Henting av URL gir følgende feil: %1$s" - -#: ../../mod/block.php:27 ../../mod/page.php:33 -msgid "Invalid item." -msgstr "Ugyldig element." - -#: ../../mod/block.php:39 ../../mod/wall_upload.php:28 ../../mod/page.php:45 -msgid "Channel not found." -msgstr "Kanalen ble ikke funnet." - -#: ../../mod/block.php:75 ../../mod/display.php:102 ../../mod/help.php:70 -#: ../../mod/page.php:81 ../../index.php:241 -msgid "Page not found." -msgstr "Siden ikke funnet." - -#: ../../mod/sources.php:32 -msgid "Failed to create source. No channel selected." -msgstr "Mislyktes med å lage kilde. Ingen kanal er valgt." - -#: ../../mod/sources.php:45 -msgid "Source created." -msgstr "Kilden er laget." - -#: ../../mod/sources.php:57 -msgid "Source updated." -msgstr "Kilden er oppdatert." - -#: ../../mod/sources.php:82 -msgid "*" -msgstr "*" - -#: ../../mod/sources.php:89 -msgid "Manage remote sources of content for your channel." -msgstr "Håndtere eksterne innholdskilder til din kanal." - -#: ../../mod/sources.php:90 ../../mod/sources.php:100 -msgid "New Source" -msgstr "Ny kilde" - -#: ../../mod/sources.php:101 ../../mod/sources.php:133 -msgid "" -"Import all or selected content from the following channel into this channel " -"and distribute it according to your channel settings." -msgstr "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger." - -#: ../../mod/sources.php:102 ../../mod/sources.php:134 -msgid "Only import content with these words (one per line)" -msgstr "Bare importer innhold med disse ordene (ett ord per linje)" - -#: ../../mod/sources.php:102 ../../mod/sources.php:134 -msgid "Leave blank to import all public content" -msgstr "La stå tomt for å importere alt offentlig innhold" - -#: ../../mod/sources.php:103 ../../mod/sources.php:137 -#: ../../mod/new_channel.php:112 -msgid "Channel Name" -msgstr "Kanalnavn" - -#: ../../mod/sources.php:123 ../../mod/sources.php:150 -msgid "Source not found." -msgstr "Kilden ble ikke funnet." - -#: ../../mod/sources.php:130 -msgid "Edit Source" -msgstr "Endre kilde" - -#: ../../mod/sources.php:131 -msgid "Delete Source" -msgstr "Slett kilde" - -#: ../../mod/sources.php:158 -msgid "Source removed" -msgstr "Kilden er fjernet" - -#: ../../mod/sources.php:160 -msgid "Unable to remove source." -msgstr "Ikke i stand til å fjerne kilde." - -#: ../../mod/blocks.php:99 -msgid "Block Name" -msgstr "Byggeklossens navn" - -#: ../../mod/search.php:13 ../../mod/directory.php:15 ../../mod/photos.php:458 -#: ../../mod/display.php:9 ../../mod/viewconnections.php:17 -msgid "Public access denied." -msgstr "Offentlig tilgang avvist." - -#: ../../mod/directory.php:161 -msgid "Gender: " -msgstr "Kjønn:" - -#: ../../mod/directory.php:163 -msgid "Status: " -msgstr "Status:" - -#: ../../mod/directory.php:165 -msgid "Homepage: " -msgstr "Hjemmeside:" - -#: ../../mod/directory.php:168 -msgid "Hometown: " -msgstr "Hjemby:" - -#: ../../mod/directory.php:170 -msgid "About: " -msgstr "Om:" - -#: ../../mod/directory.php:225 -msgid "Public Forum:" -msgstr "Offentlig forum:" - -#: ../../mod/directory.php:228 -msgid "Keywords: " -msgstr "Nøkkelord:" - -#: ../../mod/directory.php:268 -msgid "Finding:" -msgstr "Finner:" - -#: ../../mod/directory.php:273 -msgid "next page" -msgstr "Neste side" - -#: ../../mod/directory.php:273 -msgid "previous page" -msgstr "Forrige side" - -#: ../../mod/directory.php:290 -msgid "No entries (some entries may be hidden)." -msgstr "Ingen oppføringer (noen oppføringer kan være skjult)." - -#: ../../mod/register.php:44 -msgid "Maximum daily site registrations exceeded. Please try again tomorrow." -msgstr "Antallet daglige registreringer ved nettstedet er overskredet. Vær vennlig å prøve igjen imorgen." - -#: ../../mod/register.php:50 -msgid "" -"Please indicate acceptance of the Terms of Service. Registration failed." -msgstr "Vennligst angi at tjenesteavtalen er akseptert. Registrering mislyktes." - -#: ../../mod/register.php:84 -msgid "Passwords do not match." -msgstr "Passordene er ikke like." - -#: ../../mod/register.php:117 -msgid "" -"Registration successful. Please check your email for validation " -"instructions." -msgstr "Registreringen er vellykket. Vennligst sjekk e-posten din for å bekrefte opprettelsen." - -#: ../../mod/register.php:123 -msgid "Your registration is pending approval by the site owner." -msgstr "Din registrering venter på godkjenning av nettstedets eier." - -#: ../../mod/register.php:126 -msgid "Your registration can not be processed." -msgstr "Din registrering kan ikke behandles." - -#: ../../mod/register.php:163 -msgid "Registration on this site/hub is by approval only." -msgstr "Registrering på dette nettstedet/denne hubben skjer bare gjennom godkjenning." - -#: ../../mod/register.php:164 -msgid "<a href=\"pubsites\">Register at another affiliated site/hub</a>" -msgstr "<a href=\"pubsites\">Registrer på et annet tilknyttet nettsted/hub</a>" - -#: ../../mod/register.php:174 -msgid "" -"This site has exceeded the number of allowed daily account registrations. " -"Please try again tomorrow." -msgstr "Dette nettstedet har overskredet antallet tillate kontoregistreringer per dag. Vennligst prøv igjen imorgen." - -#: ../../mod/register.php:185 -msgid "Terms of Service" -msgstr "Tjenesteavtale" - -#: ../../mod/register.php:191 -#, php-format -msgid "I accept the %s for this website" -msgstr "Jeg godtar %s for dette nettstedet" - -#: ../../mod/register.php:193 -#, php-format -msgid "I am over 13 years of age and accept the %s for this website" -msgstr "Jeg er over 13 år gammel og aksepterer %s for dette nettstedet." - -#: ../../mod/register.php:207 ../../mod/admin.php:413 -msgid "Registration" -msgstr "Registrering" - -#: ../../mod/register.php:212 -msgid "Membership on this site is by invitation only." -msgstr "Medlemskap ved dette nettstedet skjer kun via invitasjon." - -#: ../../mod/register.php:213 -msgid "Please enter your invitation code" -msgstr "Vennligst skriv din invitasjonskode" - -#: ../../mod/register.php:216 -msgid "Your email address" -msgstr "Din e-postadresse" - -#: ../../mod/register.php:217 -msgid "Choose a password" -msgstr "Velg et passord" - -#: ../../mod/register.php:218 -msgid "Please re-enter your password" -msgstr "Vennligst skriv ditt passord en gang til" - -#: ../../mod/events.php:81 -msgid "Event can not end before it has started." -msgstr "Hendelsen kan ikke slutte før den starter." - -#: ../../mod/events.php:86 -msgid "Event title and start time are required." -msgstr "Hendelsestittel og starttidspunkt er påkrevd." - -#: ../../mod/events.php:100 -msgid "Event not found." -msgstr "Hendelsen ble ikke funnet." - -#: ../../mod/events.php:364 -msgid "l, F j" -msgstr "l, F j" - -#: ../../mod/events.php:386 -msgid "Edit event" -msgstr "Endre hendelse" - -#: ../../mod/events.php:432 -msgid "Create New Event" -msgstr "Lag ny hendelse" - -#: ../../mod/events.php:433 ../../mod/photos.php:859 -msgid "Previous" -msgstr "Forrige" - -#: ../../mod/events.php:560 -msgid "Event details" -msgstr "Hendelsesdetaljer" - -#: ../../mod/events.php:561 -msgid "Starting date and Title are required." -msgstr "Startdato og Tittel er påkrevd." - -#: ../../mod/events.php:565 -msgid "Event Starts:" -msgstr "Hendelsen starter:" - -#: ../../mod/events.php:565 ../../mod/events.php:581 ../../mod/appman.php:91 -#: ../../mod/appman.php:92 -msgid "Required" -msgstr "Påkrevd" - -#: ../../mod/events.php:571 -msgid "Finish date/time is not known or not relevant" -msgstr "Sluttdato/-tidspunkt er ikke kjent eller ikke relevant" - -#: ../../mod/events.php:573 -msgid "Event Finishes:" -msgstr "Hendelsen slutter:" - -#: ../../mod/events.php:575 -msgid "Adjust for viewer timezone" -msgstr "Juster i forhold til tilskuerens tidssone" - -#: ../../mod/events.php:577 -msgid "Description:" -msgstr "Beskrivelse:" - -#: ../../mod/events.php:581 -msgid "Title:" -msgstr "Tittel:" - -#: ../../mod/events.php:583 -msgid "Share this event" -msgstr "Del denne hendelsen" - -#: ../../mod/pubsites.php:16 -msgid "Public Sites" -msgstr "Offentlige nettsteder" - -#: ../../mod/pubsites.php:19 -msgid "" -"The listed sites allow public registration into the Red Matrix. All sites in" -" the matrix are interlinked so membership on any of them conveys membership " -"in the matrix as a whole. Some sites may require subscription or provide " -"tiered service plans. The provider links <strong>may</strong> provide " -"additional details." -msgstr "Nettstedene på listen tillater offentlig registrering i Red Matrix. Alle nettsteder i matrix er forbundet så medlemskap på enhver av dem formidler medlemskap i hele matrix. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Tilbyderlenkene <strong>kan</strong> gi tilleggsopplysninger." - -#: ../../mod/pubsites.php:25 -msgid "Site URL" -msgstr "Nettstedets URL" - -#: ../../mod/pubsites.php:25 -msgid "Access Type" -msgstr "Tilgangstype" - -#: ../../mod/pubsites.php:25 -msgid "Registration Policy" -msgstr "Retningslinjer for registrering" - -#: ../../mod/channel.php:25 ../../mod/chat.php:19 -msgid "You must be logged in to see this page." -msgstr "Du må være innloegget for å se denne siden." - -#: ../../mod/channel.php:86 -msgid "Insufficient permissions. Request redirected to profile page." -msgstr "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden." - -#: ../../mod/rbmark.php:88 -msgid "Select a bookmark folder" -msgstr "Velg en bokmerkemappe" - -#: ../../mod/rbmark.php:93 -msgid "Save Bookmark" -msgstr "Lagre bokmerke" - -#: ../../mod/rbmark.php:94 -msgid "URL of bookmark" -msgstr "URL-en til bokmerket" - -#: ../../mod/rbmark.php:95 ../../mod/appman.php:93 -msgid "Description" -msgstr "Beskrivelse" - -#: ../../mod/rbmark.php:99 -msgid "Or enter new bookmark folder name" -msgstr "Eller skriv nytt navn på bokmerkemappe" - -#: ../../mod/chat.php:167 -msgid "Room not found" -msgstr "Rommet ble ikke funnet" - -#: ../../mod/chat.php:178 -msgid "Leave Room" -msgstr "Forlat rom" - -#: ../../mod/chat.php:179 -msgid "Delete This Room" -msgstr "Slett dette rommet" - -#: ../../mod/chat.php:180 -msgid "I am away right now" -msgstr "Jeg er borte akkurat nå" - -#: ../../mod/chat.php:181 -msgid "I am online" -msgstr "Jeg er online" - -#: ../../mod/chat.php:183 -msgid "Bookmark this room" -msgstr "Bokmerk dette rommet" - -#: ../../mod/chat.php:207 ../../mod/chat.php:229 -msgid "New Chatroom" -msgstr "Nytt chatrom" - -#: ../../mod/chat.php:208 -msgid "Chatroom Name" -msgstr "Navn på chatrom" - -#: ../../mod/chat.php:225 -#, php-format -msgid "%1$s's Chatrooms" -msgstr "%1$s sine chatrom" - -#: ../../mod/subthread.php:103 -#, php-format -msgid "%1$s is following %2$s's %3$s" -msgstr "%1$s følger %2$s sin %3$s" - -#: ../../mod/chatsvc.php:111 -msgid "Away" -msgstr "Borte" - -#: ../../mod/chatsvc.php:115 -msgid "Online" -msgstr "Online" - -#: ../../mod/regmod.php:11 -msgid "Please login." -msgstr "Vennligst logg inn." - -#: ../../mod/network.php:79 -msgid "No such group" -msgstr "Gruppen finnes ikke" - -#: ../../mod/network.php:118 -msgid "Search Results For:" -msgstr "Søkeresultat for:" - -#: ../../mod/network.php:172 -msgid "Collection is empty" -msgstr "Samlingen er tom" - -#: ../../mod/network.php:180 -msgid "Collection: " -msgstr "Samling:" - -#: ../../mod/network.php:193 -msgid "Connection: " -msgstr "Forbindelse:" - -#: ../../mod/network.php:196 -msgid "Invalid connection." -msgstr "Ugyldig forbindelse." - -#: ../../mod/removeme.php:29 -msgid "" -"Channel removals are not allowed within 48 hours of changing the account " -"password." -msgstr "Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av kontopassordet." - -#: ../../mod/removeme.php:57 -msgid "Remove This Channel" -msgstr "Fjern denne kanalen" - -#: ../../mod/removeme.php:58 -msgid "" -"This will completely remove this channel from the network. Once this has " -"been done it is not recoverable." -msgstr "Dette vil fullstendig fjerne kanalen fra nettverket. Når det er gjort kan det ikke angres." - -#: ../../mod/removeme.php:59 ../../mod/removeaccount.php:59 -msgid "Please enter your password for verification:" -msgstr "Vennligst skriv ditt passord for å få bekreftelse:" - -#: ../../mod/removeme.php:60 -msgid "Remove this channel and all its clones from the network" -msgstr "Fjern denne kanalen og alle dens kloner fra nettverket" - -#: ../../mod/removeme.php:60 -msgid "" -"By default only the instance of the channel located on this hub will be " -"removed from the network" -msgstr "Som standard vil bare forekomsten av denne kanalen lokalisert på denne hubben bli fjernet fra nettverket" - -#: ../../mod/removeme.php:61 -msgid "Remove Channel" -msgstr "Fjern kanal" - #: ../../mod/common.php:10 msgid "No channel." msgstr "Ingen kanal." @@ -5060,667 +5779,521 @@ msgstr "Felles forbindelser" msgid "No connections in common." msgstr "Ingen forbindelser felles." -#: ../../mod/rmagic.php:38 -msgid "" -"We encountered a problem while logging in with the OpenID you provided. " -"Please check the correct spelling of the ID." -msgstr "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig." +#: ../../mod/id.php:8 +msgid "First Name" +msgstr "Fornavn" -#: ../../mod/rmagic.php:38 -msgid "The error message was:" -msgstr "Feilmeldingen var:" +#: ../../mod/id.php:9 +msgid "Last Name" +msgstr "Etternavn" -#: ../../mod/rmagic.php:42 -msgid "Authentication failed." -msgstr "Autentisering mislyktes." +#: ../../mod/id.php:10 +msgid "Nickname" +msgstr "Kallenavn" -#: ../../mod/rmagic.php:82 -msgid "Remote Authentication" -msgstr "Fjernautentisering" +#: ../../mod/id.php:11 +msgid "Full Name" +msgstr "Fullt navn" -#: ../../mod/rmagic.php:83 -msgid "Enter your channel address (e.g. channel@example.com)" -msgstr "Skriv din kanaladresse (for eksempel channel@exampel.com)" +#: ../../mod/id.php:17 +msgid "Profile Photo 16px" +msgstr "Profilbilde 16px" -#: ../../mod/rmagic.php:84 -msgid "Authenticate" -msgstr "Autentiser" - -#: ../../mod/filer.php:49 -msgid "- select -" -msgstr "- velg -" - -#: ../../mod/photos.php:77 -msgid "Page owner information could not be retrieved." -msgstr "Informasjon om sideeier kunne ikke hentes." - -#: ../../mod/photos.php:97 -msgid "Album not found." -msgstr "Albumet ble ikke funnet." - -#: ../../mod/photos.php:119 ../../mod/photos.php:672 -msgid "Delete Album" -msgstr "Slett album" - -#: ../../mod/photos.php:159 ../../mod/photos.php:957 -msgid "Delete Photo" -msgstr "Slett bilde" - -#: ../../mod/photos.php:469 -msgid "No photos selected" -msgstr "Ingen bilder valgt" - -#: ../../mod/photos.php:513 -msgid "Access to this item is restricted." -msgstr "Tilgang til dette elementet er begrenset." - -#: ../../mod/photos.php:552 -#, php-format -msgid "%1$.2f MB of %2$.2f MB photo storage used." -msgstr "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt." - -#: ../../mod/photos.php:555 -#, php-format -msgid "%1$.2f MB photo storage used." -msgstr "%1$.2f MB lagringsplass til bilder er brukt." +#: ../../mod/id.php:18 +msgid "Profile Photo 32px" +msgstr "Profilbilde 32px" -#: ../../mod/photos.php:579 -msgid "Upload Photos" -msgstr "Last opp bilder" +#: ../../mod/id.php:19 +msgid "Profile Photo 48px" +msgstr "Profilbilde 48px" -#: ../../mod/photos.php:583 ../../mod/photos.php:665 ../../mod/photos.php:943 -msgid "Enter a new album name" -msgstr "Skriv et nytt albumnavn" - -#: ../../mod/photos.php:584 ../../mod/photos.php:666 ../../mod/photos.php:944 -msgid "or select an existing one (doubleclick)" -msgstr "eller velg et eksisterende album (dobbeltklikk)" +#: ../../mod/id.php:20 +msgid "Profile Photo 64px" +msgstr "Profilbilde 64px" -#: ../../mod/photos.php:585 -msgid "Do not show a status post for this upload" -msgstr "Ikke lag et statusinnlegg for denne oppdateringen" +#: ../../mod/id.php:21 +msgid "Profile Photo 80px" +msgstr "Profilbilde 80px" -#: ../../mod/photos.php:613 -msgid "Album name could not be decoded" -msgstr "Albumnavnet kunne ikke dekodes" +#: ../../mod/id.php:22 +msgid "Profile Photo 128px" +msgstr "Profilbilde 128px" -#: ../../mod/photos.php:654 ../../mod/photos.php:1166 -#: ../../mod/photos.php:1182 -msgid "Contact Photos" -msgstr "Kontaktbilder" +#: ../../mod/id.php:23 +msgid "Timezone" +msgstr "Tidssone" -#: ../../mod/photos.php:678 -msgid "Show Newest First" -msgstr "Vis nyeste først" +#: ../../mod/id.php:24 +msgid "Homepage URL" +msgstr "Hjemmeside URL" -#: ../../mod/photos.php:680 -msgid "Show Oldest First" -msgstr "Vis eldste først" +#: ../../mod/id.php:26 +msgid "Birth Year" +msgstr "Fødselsår" -#: ../../mod/photos.php:707 ../../mod/photos.php:1214 -msgid "View Photo" -msgstr "Vis foto" +#: ../../mod/id.php:27 +msgid "Birth Month" +msgstr "Fødselsmåne" -#: ../../mod/photos.php:736 -msgid "Edit Album" -msgstr "Endre album" +#: ../../mod/id.php:28 +msgid "Birth Day" +msgstr "Fødselsdag" -#: ../../mod/photos.php:781 -msgid "Permission denied. Access to this item may be restricted." -msgstr "Tillatelse avvist. Tilgang til dette elementet kan være begrenset." +#: ../../mod/id.php:29 +msgid "Birthdate" +msgstr "Fødselsdato" -#: ../../mod/photos.php:783 -msgid "Photo not available" -msgstr "Bilde er utilgjengelig" - -#: ../../mod/photos.php:841 -msgid "Use as profile photo" -msgstr "Bruk som profilbilde" - -#: ../../mod/photos.php:848 -msgid "Private Photo" -msgstr "Privat bilde" - -#: ../../mod/photos.php:863 -msgid "View Full Size" -msgstr "Vis i full størrelse" - -#: ../../mod/photos.php:905 ../../mod/delegate.php:130 ../../mod/tagrm.php:133 -msgid "Remove" -msgstr "Fjern" - -#: ../../mod/photos.php:937 -msgid "Edit photo" -msgstr "Endre bilde" - -#: ../../mod/photos.php:939 -msgid "Rotate CW (right)" -msgstr "Roter med klokka (mot høyre)" - -#: ../../mod/photos.php:940 -msgid "Rotate CCW (left)" -msgstr "Roter mot klokka (venstre)" - -#: ../../mod/photos.php:947 -msgid "Caption" -msgstr "Overskrift" - -#: ../../mod/photos.php:949 -msgid "Add a Tag" -msgstr "Legg til merkelapp" - -#: ../../mod/photos.php:953 -msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" -msgstr "Eksempel: @bob, @Barbara_Jensen, @jim@example.com" - -#: ../../mod/photos.php:955 -msgid "Flag as adult in album view" -msgstr "Flag som voksent i albumvisning" - -#: ../../mod/photos.php:1132 -msgid "In This Photo:" -msgstr "I dette bildet:" - -#: ../../mod/photos.php:1220 -msgid "View Album" -msgstr "Vis album" - -#: ../../mod/photos.php:1243 -msgid "Recent Photos" -msgstr "Nye bilder" - -#: ../../mod/connections.php:37 ../../mod/connedit.php:64 -msgid "Could not access contact record." -msgstr "Fikk ikke tilgang til kontaktinformasjonen." - -#: ../../mod/connections.php:51 ../../mod/connedit.php:86 -msgid "Could not locate selected profile." -msgstr "Fant ikke valgt profil." - -#: ../../mod/connections.php:94 ../../mod/connedit.php:140 -msgid "Connection updated." -msgstr "Forbindelsen er oppdatert." - -#: ../../mod/connections.php:96 ../../mod/connedit.php:142 -msgid "Failed to update connection record." -msgstr "Mislyktes med å oppdatere forbindelsesinformasjonen." +#: ../../mod/id.php:30 ../../mod/profiles.php:431 +msgid "Gender" +msgstr "Kjønn" -#: ../../mod/connections.php:191 ../../mod/connections.php:292 +#: ../../mod/connections.php:192 ../../mod/connections.php:293 msgid "Blocked" msgstr "Blokkert" -#: ../../mod/connections.php:196 ../../mod/connections.php:299 +#: ../../mod/connections.php:197 ../../mod/connections.php:300 msgid "Ignored" msgstr "Ignorert" -#: ../../mod/connections.php:201 ../../mod/connections.php:313 +#: ../../mod/connections.php:202 ../../mod/connections.php:314 msgid "Hidden" msgstr "Skjult" -#: ../../mod/connections.php:206 ../../mod/connections.php:306 +#: ../../mod/connections.php:207 ../../mod/connections.php:307 msgid "Archived" msgstr "Arkivert" -#: ../../mod/connections.php:230 ../../mod/connections.php:245 +#: ../../mod/connections.php:231 ../../mod/connections.php:246 msgid "All" msgstr "Alle" -#: ../../mod/connections.php:270 +#: ../../mod/connections.php:271 msgid "Suggest new connections" msgstr "Foreslå nye forbindelser" -#: ../../mod/connections.php:273 +#: ../../mod/connections.php:274 msgid "New Connections" msgstr "Nye forbindelser" -#: ../../mod/connections.php:276 +#: ../../mod/connections.php:277 msgid "Show pending (new) connections" msgstr "Vis ventende (nye) forbindelser" -#: ../../mod/connections.php:282 +#: ../../mod/connections.php:280 ../../mod/profperm.php:139 +msgid "All Connections" +msgstr "Alle forbindelser" + +#: ../../mod/connections.php:283 msgid "Show all connections" msgstr "Vis alle forbindelser" -#: ../../mod/connections.php:285 +#: ../../mod/connections.php:286 msgid "Unblocked" msgstr "Ikke blokkert lenger" -#: ../../mod/connections.php:288 +#: ../../mod/connections.php:289 msgid "Only show unblocked connections" msgstr "Vis bare forbindelser som ikke er blokkert" -#: ../../mod/connections.php:295 +#: ../../mod/connections.php:296 msgid "Only show blocked connections" msgstr "Vis bare forbindelser som er blokkert" -#: ../../mod/connections.php:302 +#: ../../mod/connections.php:303 msgid "Only show ignored connections" msgstr "Vis bare ignorerte forbindelser" -#: ../../mod/connections.php:309 +#: ../../mod/connections.php:310 msgid "Only show archived connections" msgstr "Vis bare arkiverte forbindelser" -#: ../../mod/connections.php:316 +#: ../../mod/connections.php:317 msgid "Only show hidden connections" msgstr "Vis bare skjulte forbindelser" -#: ../../mod/connections.php:371 +#: ../../mod/connections.php:372 #, php-format msgid "%1$s [%2$s]" msgstr "%1$s [%2$s]" -#: ../../mod/connections.php:372 +#: ../../mod/connections.php:373 msgid "Edit connection" msgstr "Endre forbindelse" -#: ../../mod/connections.php:410 +#: ../../mod/connections.php:411 msgid "Search your connections" msgstr "Søk blant dine forbindelser" -#: ../../mod/connections.php:411 +#: ../../mod/connections.php:412 msgid "Finding: " msgstr "Fant:" -#: ../../mod/manage.php:136 -#, php-format -msgid "You have created %1$.0f of %2$.0f allowed channels." -msgstr "Du har laget %1$.0f av %2$.0f tillatte kanaler." - -#: ../../mod/manage.php:144 -msgid "Create a new channel" -msgstr "Lag en ny kanal" - -#: ../../mod/manage.php:149 -msgid "Current Channel" -msgstr "Gjeldende kanal" - -#: ../../mod/manage.php:151 -msgid "Attach to one of your channels by selecting it." -msgstr "Bytt til en av dine kanaler ved å velge den." - -#: ../../mod/manage.php:152 -msgid "Default Channel" -msgstr "Standardkanal" - -#: ../../mod/manage.php:153 -msgid "Make Default" -msgstr "Gjør til standard" - -#: ../../mod/rpost.php:97 ../../mod/editpost.php:42 -msgid "Edit post" -msgstr "Endre innlegg" +#: ../../mod/impel.php:33 +msgid "webpage" +msgstr "nettside" -#: ../../mod/connedit.php:189 -msgid "is now connected to" -msgstr "er nå forbundet til" +#: ../../mod/impel.php:38 +msgid "block" +msgstr "byggekloss" -#: ../../mod/connedit.php:310 -msgid "Could not access address book record." -msgstr "Fikk ikke tilgang til informasjonen i adresseboken." +#: ../../mod/impel.php:43 +msgid "layout" +msgstr "layout" -#: ../../mod/connedit.php:324 -msgid "Refresh failed - channel is currently unavailable." -msgstr "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig." +#: ../../mod/impel.php:117 +#, php-format +msgid "%s element installed" +msgstr "%s element installert" -#: ../../mod/connedit.php:331 -msgid "Channel has been unblocked" -msgstr "Kanalen er ikke blokkert lenger" +#: ../../mod/tagger.php:96 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" +msgstr "%1$s merket %3$s til %2$s med %4$s" -#: ../../mod/connedit.php:332 -msgid "Channel has been blocked" -msgstr "Kanalen har blitt blokkert" +#: ../../mod/cloud.php:120 +msgid "RedMatrix - Guests: Username: {your email address}, Password: +++" +msgstr "RedMatrix - gjester: brukernavn: {din e-postadresse}, passord: +++" -#: ../../mod/connedit.php:336 ../../mod/connedit.php:348 -#: ../../mod/connedit.php:360 ../../mod/connedit.php:372 -#: ../../mod/connedit.php:388 -msgid "Unable to set address book parameters." -msgstr "Ikke i stand til å angi parametre for adresseboken." +#: ../../mod/item.php:165 +msgid "Unable to locate original post." +msgstr "Ikke i stand til å finne opprinnelig innlegg." -#: ../../mod/connedit.php:343 -msgid "Channel has been unignored" -msgstr "Kanalen er ikke lenger ignorert" +#: ../../mod/item.php:424 +msgid "Empty post discarded." +msgstr "Tomt innlegg forkastet." -#: ../../mod/connedit.php:344 -msgid "Channel has been ignored" -msgstr "Kanalen blir ignorert" +#: ../../mod/item.php:466 +msgid "Executable content type not permitted to this channel." +msgstr "Kjørbar innholdstype er ikke tillat for denne kanalen." -#: ../../mod/connedit.php:355 -msgid "Channel has been unarchived" -msgstr "Kanalen er ikke lenger arkivert" +#: ../../mod/item.php:865 +msgid "System error. Post not saved." +msgstr "Systemfeil. Innlegg ble ikke lagret." -#: ../../mod/connedit.php:356 -msgid "Channel has been archived" -msgstr "Kanalen er arkivert" +#: ../../mod/item.php:1083 +#, php-format +msgid "You have reached your limit of %1$.0f top level posts." +msgstr "Du har nådd din grense på %1$.0f startinnlegg." -#: ../../mod/connedit.php:367 -msgid "Channel has been unhidden" -msgstr "Kanalen er ikke lenger skjult" +#: ../../mod/item.php:1089 +#, php-format +msgid "You have reached your limit of %1$.0f webpages." +msgstr "Du har nådd din grense på %1$.0f websider." -#: ../../mod/connedit.php:368 -msgid "Channel has been hidden" -msgstr "Kanalen er blitt skjult" +#: ../../mod/search.php:13 ../../mod/display.php:9 ../../mod/ratings.php:82 +#: ../../mod/directory.php:47 ../../mod/viewconnections.php:17 +#: ../../mod/photos.php:429 +msgid "Public access denied." +msgstr "Offentlig tilgang avvist." -#: ../../mod/connedit.php:383 -msgid "Channel has been approved" -msgstr "Kanalen har blitt godkjent" +#: ../../mod/thing.php:96 +msgid "Thing updated" +msgstr "Tingen er oppdatert" -#: ../../mod/connedit.php:384 -msgid "Channel has been unapproved" -msgstr "Kanalen er ikke lenger godkjent" +#: ../../mod/thing.php:156 +msgid "Object store: failed" +msgstr "Objektlagring: mislyktes" -#: ../../mod/connedit.php:412 -msgid "Connection has been removed." -msgstr "Forbindelsen har blitt fjernet." +#: ../../mod/thing.php:160 +msgid "Thing added" +msgstr "Ting lagt til" -#: ../../mod/connedit.php:432 +#: ../../mod/thing.php:180 #, php-format -msgid "View %s's profile" -msgstr "Vis %s sin profil" +msgid "OBJ: %1$s %2$s %3$s" +msgstr "OBJ: %1$s %2$s %3$s" -#: ../../mod/connedit.php:436 -msgid "Refresh Permissions" -msgstr "Oppfrisk tillatelser" +#: ../../mod/thing.php:232 +msgid "Show Thing" +msgstr "Vis ting" -#: ../../mod/connedit.php:439 -msgid "Fetch updated permissions" -msgstr "Hent oppdaterte tillatelser" +#: ../../mod/thing.php:239 +msgid "item not found." +msgstr "element ble ikke funnet." -#: ../../mod/connedit.php:443 -msgid "Recent Activity" -msgstr "Nylig aktivitet" +#: ../../mod/thing.php:270 +msgid "Edit Thing" +msgstr "Endre ting" -#: ../../mod/connedit.php:446 -msgid "View recent posts and comments" -msgstr "Vis nylige innlegg og kommentarer" +#: ../../mod/thing.php:272 ../../mod/thing.php:319 +msgid "Select a profile" +msgstr "Velg en profil" -#: ../../mod/connedit.php:450 ../../mod/connedit.php:594 -#: ../../mod/admin.php:732 -msgid "Unblock" -msgstr "Ikke blokker lenger" +#: ../../mod/thing.php:276 ../../mod/thing.php:322 +msgid "Post an activity" +msgstr "Legg inn en aktivitet" -#: ../../mod/connedit.php:450 ../../mod/connedit.php:594 -#: ../../mod/admin.php:731 -msgid "Block" -msgstr "Blokker" +#: ../../mod/thing.php:276 ../../mod/thing.php:322 +msgid "Only sends to viewers of the applicable profile" +msgstr "Sender bare til seere av den aktuelle profilen" -#: ../../mod/connedit.php:453 -msgid "Block or Unblock this connection" -msgstr "Blokker eller fjern blokkering av denne forbindelsen " +#: ../../mod/thing.php:278 ../../mod/thing.php:324 +msgid "Name of thing e.g. something" +msgstr "Navn på ting for eksempel noe" -#: ../../mod/connedit.php:457 ../../mod/connedit.php:595 -msgid "Unignore" -msgstr "Ikke ignorer lenger" +#: ../../mod/thing.php:280 ../../mod/thing.php:325 +msgid "URL of thing (optional)" +msgstr "URL til ting (valgfritt)" -#: ../../mod/connedit.php:457 ../../mod/connedit.php:595 -#: ../../mod/notifications.php:51 -msgid "Ignore" -msgstr "Ignorer" +#: ../../mod/thing.php:282 ../../mod/thing.php:326 +msgid "URL for photo of thing (optional)" +msgstr "URL til bilde av ting (valgfritt)" -#: ../../mod/connedit.php:460 -msgid "Ignore or Unignore this connection" -msgstr "Ignorer eller fjern ignorering av denne forbindelsen" +#: ../../mod/thing.php:317 +msgid "Add Thing to your Profile" +msgstr "Legg til ting i din profil" -#: ../../mod/connedit.php:463 -msgid "Unarchive" -msgstr "Ikke arkiver lenger" +#: ../../mod/chatsvc.php:111 +msgid "Away" +msgstr "Borte" -#: ../../mod/connedit.php:463 -msgid "Archive" -msgstr "Arkiver" +#: ../../mod/chatsvc.php:115 +msgid "Online" +msgstr "Online" -#: ../../mod/connedit.php:466 -msgid "Archive or Unarchive this connection" -msgstr "Arkiver eller fjern arkivering av denne forbindelsen" +#: ../../mod/rbmark.php:88 +msgid "Select a bookmark folder" +msgstr "Velg en bokmerkemappe" -#: ../../mod/connedit.php:469 -msgid "Unhide" -msgstr "Ikke skjul lenger" +#: ../../mod/rbmark.php:93 +msgid "Save Bookmark" +msgstr "Lagre bokmerke" -#: ../../mod/connedit.php:469 -msgid "Hide" -msgstr "Skjul" +#: ../../mod/rbmark.php:94 +msgid "URL of bookmark" +msgstr "URL-en til bokmerket" -#: ../../mod/connedit.php:472 -msgid "Hide or Unhide this connection" -msgstr "Skjul eller fjern skjuling av denne forbindelsen" +#: ../../mod/rbmark.php:95 ../../mod/appman.php:93 +msgid "Description" +msgstr "Beskrivelse" -#: ../../mod/connedit.php:479 -msgid "Delete this connection" -msgstr "Slett denne forbindelsen" +#: ../../mod/rbmark.php:99 +msgid "Or enter new bookmark folder name" +msgstr "Eller skriv nytt navn på bokmerkemappe" -#: ../../mod/connedit.php:522 ../../mod/connedit.php:552 -msgid "Approve this connection" -msgstr "Godta denne forbindelsen" +#: ../../mod/notify.php:53 ../../mod/notifications.php:94 +msgid "No more system notifications." +msgstr "Ingen flere systemvarsler." -#: ../../mod/connedit.php:522 -msgid "Accept connection to allow communication" -msgstr "Godta denne forbindelsen for å tillate kommunikasjon" +#: ../../mod/notify.php:57 ../../mod/notifications.php:98 +msgid "System Notifications" +msgstr "Systemvarsler" -#: ../../mod/connedit.php:538 -#, php-format -msgid "Connections: settings for %s" -msgstr "Forbindelser: innstillinger for %s" +#: ../../mod/acl.php:231 +msgid "network" +msgstr "nettverk" -#: ../../mod/connedit.php:539 -msgid "Apply these permissions automatically" -msgstr "Bruk disse tillatelsene automatisk" +#: ../../mod/acl.php:241 +msgid "RSS" +msgstr "RSS" -#: ../../mod/connedit.php:543 -msgid "Apply the permissions indicated on this page to all new connections." -msgstr "Bruk tillatelsene angitt på denne siden på alle nye forbindelser." +#: ../../mod/pdledit.php:13 +msgid "Layout updated." +msgstr "Layout er oppdatert." -#: ../../mod/connedit.php:545 -msgid "Slide to adjust your degree of friendship" -msgstr "Flytt for å justere din grad av vennskap" +#: ../../mod/pdledit.php:28 ../../mod/pdledit.php:53 +msgid "Edit System Page Description" +msgstr "Endre beskrivelsen av systemsiden" -#: ../../mod/connedit.php:551 -msgid "inherited" -msgstr "arvet" +#: ../../mod/pdledit.php:48 +msgid "Layout not found." +msgstr "Layouten ble ikke funnet." -#: ../../mod/connedit.php:553 -msgid "Connection has no individual permissions!" -msgstr "Forbindelsen har ingen individuelle tillatelser!" +#: ../../mod/pdledit.php:54 +msgid "Module Name:" +msgstr "Modulnavn:" -#: ../../mod/connedit.php:554 -msgid "" -"This may be appropriate based on your <a href=\"settings\">privacy " -"settings</a>, though you may wish to review the \"Advanced Permissions\"." -msgstr "Dette kan være riktig basert på dine <a href=\"settings\">personverninnstillinger</a>, men kanskje du bør se over \"Avanserte tillatelser\"." +#: ../../mod/pdledit.php:55 ../../mod/layouts.php:107 +msgid "Layout Help" +msgstr "Layout-hjelp" -#: ../../mod/connedit.php:556 -msgid "Profile Visibility" -msgstr "Profilens synlighet" +#: ../../mod/filer.php:49 +msgid "- select -" +msgstr "- velg -" -#: ../../mod/connedit.php:557 +#: ../../mod/import.php:25 #, php-format -msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." -msgstr "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte. " - -#: ../../mod/connedit.php:558 -msgid "Contact Information / Notes" -msgstr "Kontaktinformasjon / Merknader" +msgid "Your service plan only allows %d channels." +msgstr "Din tjenesteplan tillater bare %d kanaler." -#: ../../mod/connedit.php:559 -msgid "Edit contact notes" -msgstr "Endre kontaktmerknader" +#: ../../mod/import.php:51 +msgid "Nothing to import." +msgstr "Ingenting å importere." -#: ../../mod/connedit.php:561 -msgid "Their Settings" -msgstr "Deres innstillinger" +#: ../../mod/import.php:75 +msgid "Unable to download data from old server" +msgstr "Ikke i stand til å laste ned data fra gammel tjener" -#: ../../mod/connedit.php:562 -msgid "My Settings" -msgstr "Mine innstillinger" +#: ../../mod/import.php:81 +msgid "Imported file is empty." +msgstr "Importert fil er tom." -#: ../../mod/connedit.php:564 -msgid "Clear/Disable Automatic Permissions" -msgstr "Tøm/Skru av Automatiske tillatelser" +#: ../../mod/import.php:106 +msgid "" +"Cannot create a duplicate channel identifier on this system. Import failed." +msgstr "Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import mislyktes." -#: ../../mod/connedit.php:565 -msgid "Forum Members" -msgstr "Forummedlemmer" +#: ../../mod/import.php:127 +msgid "Unable to create a unique channel address. Import failed." +msgstr "Klarte ikke å lage en unik kanaladresse. Import mislyktes." -#: ../../mod/connedit.php:566 -msgid "Soapbox" -msgstr "Talerstol" +#: ../../mod/import.php:147 +msgid "Channel clone failed. Import failed." +msgstr "Kanalkloning mislyktes. Import mislyktes." -#: ../../mod/connedit.php:567 -msgid "Full Sharing (typical social network permissions)" -msgstr "Full deling (typiske tillatelser i sosiale nettverk)" +#: ../../mod/import.php:157 +msgid "Cloned channel not found. Import failed." +msgstr "Klonet kanal ble ikke funnet. Import mislyktes." -#: ../../mod/connedit.php:568 -msgid "Cautious Sharing " -msgstr "Forsiktig deling" +#: ../../mod/import.php:475 +msgid "Import completed." +msgstr "Import ferdig." -#: ../../mod/connedit.php:569 -msgid "Follow Only" -msgstr "Bare følg" +#: ../../mod/import.php:487 +msgid "You must be logged in to use this feature." +msgstr "Du må være innlogget for å bruke denne funksjonen." -#: ../../mod/connedit.php:570 -msgid "Individual Permissions" -msgstr "Individuelle tillatelser" +#: ../../mod/import.php:492 +msgid "Import Channel" +msgstr "Importer kanal" -#: ../../mod/connedit.php:571 +#: ../../mod/import.php:493 msgid "" -"Some permissions may be inherited from your channel <a " -"href=\"settings\">privacy settings</a>, which have higher priority than " -"individual settings. Changing those inherited settings on this page will " -"have no effect." -msgstr "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\">personverninnstillinger</a>, som har høyere prioritet enn individuelle innstillinger. Å endre arvede innstillinger på denne siden vil ikke ha noen effekt." - -#: ../../mod/connedit.php:572 -msgid "Advanced Permissions" -msgstr "Avanserte tillatelser" - -#: ../../mod/connedit.php:573 -msgid "Simple Permissions (select one and submit)" -msgstr "Enkle tillatelser (velg en og lagre)" +"Use this form to import an existing channel from a different server/hub. You" +" may retrieve the channel identity from the old server/hub via the network " +"or provide an export file. Only identity and connections/relationships will " +"be imported. Importation of content is not yet available." +msgstr "Bruk dette skjemaet til å importere en eksisterende kanal fra en annen tjener/hub. Du kan hente kanalidentiteten fra den gamle tjeneren/hubben via nettverket eller bruke en eksportert fil. Bare identiteten og forbindelser/relasjoner vil bli importert. Importering av innhold er ennå ikke tilgjengelig." -#: ../../mod/connedit.php:577 -#, php-format -msgid "Visit %s's profile - %s" -msgstr "Besøk %s sin profil - %s" +#: ../../mod/import.php:494 +msgid "File to Upload" +msgstr "Fil som skal lastes opp" -#: ../../mod/connedit.php:578 -msgid "Block/Unblock contact" -msgstr "Blokker/Ikke blokker kontakt" +#: ../../mod/import.php:495 +msgid "Or provide the old server/hub details" +msgstr "Eller oppgi detaljene fra den gamle tjeneren/hub-en" -#: ../../mod/connedit.php:579 -msgid "Ignore contact" -msgstr "Ignorer kontakt" +#: ../../mod/import.php:496 +msgid "Your old identity address (xyz@example.com)" +msgstr "Din gamle identitetsadresse (xyz@example.com)" -#: ../../mod/connedit.php:580 -msgid "Repair URL settings" -msgstr "Reparer URL-innstillinger" +#: ../../mod/import.php:497 +msgid "Your old login email address" +msgstr "Din gamle innloggings e-postadresse" -#: ../../mod/connedit.php:581 -msgid "View conversations" -msgstr "Vis samtaler" +#: ../../mod/import.php:498 +msgid "Your old login password" +msgstr "Ditt gamle innloggingspassord" -#: ../../mod/connedit.php:583 -msgid "Delete contact" -msgstr "Slett kontakt" +#: ../../mod/import.php:499 +msgid "" +"For either option, please choose whether to make this hub your new primary " +"address, or whether your old location should continue this role. You will be" +" able to post from either location, but only one can be marked as the " +"primary location for files, photos, and media." +msgstr "Enten du tar det ene eller det andre valget, vennligst angi om du vil at denne hubben skal være din nye primære adresse, eller om din gamle plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene eller den andre plasseringen, men bare en av dem kan markeres som den primære plasseringen for filer, bilder og media." -#: ../../mod/connedit.php:586 -msgid "Last update:" -msgstr "Siste oppdatering:" +#: ../../mod/import.php:500 +msgid "Make this hub my primary location" +msgstr "Gjør dette nettstedet til min primære plassering" -#: ../../mod/connedit.php:588 -msgid "Update public posts" -msgstr "Oppdater offentlige innlegg" +#: ../../mod/import.php:501 +msgid "Import existing posts if possible" +msgstr "Importerer eksisterende innlegg hvis mulig." -#: ../../mod/connedit.php:590 -msgid "Update now" -msgstr "Oppdater nå" +#: ../../mod/editlayout.php:78 ../../mod/editwebpage.php:77 +#: ../../mod/editpost.php:20 ../../mod/editblock.php:79 +#: ../../mod/editblock.php:95 +msgid "Item not found" +msgstr "Elementet ble ikke funnet." -#: ../../mod/connedit.php:596 -msgid "Currently blocked" -msgstr "For øyeblikket blokkert" +#: ../../mod/editlayout.php:108 +msgid "Edit Layout" +msgstr "Endre layout" -#: ../../mod/connedit.php:597 -msgid "Currently ignored" -msgstr "For øyeblikket ignorert" +#: ../../mod/editlayout.php:117 +msgid "Delete layout?" +msgstr "Slett layout?" -#: ../../mod/connedit.php:598 -msgid "Currently archived" -msgstr "For øyeblikket arkivert" +#: ../../mod/editlayout.php:148 ../../mod/editwebpage.php:183 +#: ../../mod/editpost.php:122 ../../mod/editblock.php:152 +msgid "Insert YouTube video" +msgstr "Sett inn YouTube-video" -#: ../../mod/connedit.php:599 -msgid "Currently pending" -msgstr "For øyeblikket ventende" +#: ../../mod/editlayout.php:149 ../../mod/editwebpage.php:184 +#: ../../mod/editpost.php:123 ../../mod/editblock.php:153 +msgid "Insert Vorbis [.ogg] video" +msgstr "Sett inn Vorbis [.ogg] video" -#: ../../mod/connedit.php:600 -msgid "Hide this contact from others" -msgstr "Skjul denne kontakten for andre" +#: ../../mod/editlayout.php:150 ../../mod/editwebpage.php:185 +#: ../../mod/editpost.php:124 ../../mod/editblock.php:154 +msgid "Insert Vorbis [.ogg] audio" +msgstr "Legg i" -#: ../../mod/connedit.php:600 -msgid "" -"Replies/likes to your public posts <strong>may</strong> still be visible" -msgstr "Svar/likes på dine offentlige innlegg <strong>kan</strong> fortsatt være synlige" +#: ../../mod/editlayout.php:183 +msgid "Delete Layout" +msgstr "Slett layout" -#: ../../mod/openid.php:26 -msgid "OpenID protocol error. No ID returned." -msgstr "OpenID protokollfeil. Ingen ID ble returnert." +#: ../../mod/chat.php:19 ../../mod/channel.php:25 +msgid "You must be logged in to see this page." +msgstr "Du må være innloegget for å se denne siden." -#: ../../mod/thing.php:96 -msgid "Thing updated" -msgstr "Tingen er oppdatert" +#: ../../mod/chat.php:167 +msgid "Room not found" +msgstr "Rommet ble ikke funnet" -#: ../../mod/thing.php:156 -msgid "Object store: failed" -msgstr "Objektlagring: mislyktes" +#: ../../mod/chat.php:178 +msgid "Leave Room" +msgstr "Forlat rom" -#: ../../mod/thing.php:160 -msgid "Thing added" -msgstr "Ting lagt til" +#: ../../mod/chat.php:179 +msgid "Delete This Room" +msgstr "Slett dette rommet" -#: ../../mod/thing.php:180 -#, php-format -msgid "OBJ: %1$s %2$s %3$s" -msgstr "OBJ: %1$s %2$s %3$s" +#: ../../mod/chat.php:180 +msgid "I am away right now" +msgstr "Jeg er borte akkurat nå" -#: ../../mod/thing.php:232 -msgid "Show Thing" -msgstr "Vis ting" +#: ../../mod/chat.php:181 +msgid "I am online" +msgstr "Jeg er online" -#: ../../mod/thing.php:239 -msgid "item not found." -msgstr "element ble ikke funnet." +#: ../../mod/chat.php:183 +msgid "Bookmark this room" +msgstr "Bokmerk dette rommet" -#: ../../mod/thing.php:270 -msgid "Edit Thing" -msgstr "Endre ting" +#: ../../mod/chat.php:207 ../../mod/chat.php:229 +msgid "New Chatroom" +msgstr "Nytt chatrom" -#: ../../mod/thing.php:272 ../../mod/thing.php:319 -msgid "Select a profile" -msgstr "Velg en profil" +#: ../../mod/chat.php:208 +msgid "Chatroom Name" +msgstr "Navn på chatrom" -#: ../../mod/thing.php:276 ../../mod/thing.php:322 -msgid "Post an activity" -msgstr "Legg inn en aktivitet" +#: ../../mod/chat.php:225 +#, php-format +msgid "%1$s's Chatrooms" +msgstr "%1$s sine chatrom" -#: ../../mod/thing.php:276 ../../mod/thing.php:322 -msgid "Only sends to viewers of the applicable profile" -msgstr "Sender bare til seere av den aktuelle profilen" +#: ../../mod/editwebpage.php:140 +msgid "Edit Webpage" +msgstr "Endre webside" -#: ../../mod/thing.php:278 ../../mod/thing.php:324 -msgid "Name of thing e.g. something" -msgstr "Navn på ting for eksempel noe" +#: ../../mod/editwebpage.php:150 +msgid "Delete webpage?" +msgstr "Slett webside?" -#: ../../mod/thing.php:280 ../../mod/thing.php:325 -msgid "URL of thing (optional)" -msgstr "URL til ting (valgfritt)" +#: ../../mod/editwebpage.php:220 +msgid "Delete Webpage" +msgstr "Slett webside" -#: ../../mod/thing.php:282 ../../mod/thing.php:326 -msgid "URL for photo of thing (optional)" -msgstr "URL til bilde av ting (valgfritt)" +#: ../../mod/dirsearch.php:21 ../../mod/regdir.php:47 +msgid "This site is not a directory server" +msgstr "Dette nettstedet er ikke en katalogtjener" -#: ../../mod/thing.php:317 -msgid "Add Thing to your Profile" -msgstr "Legg til ting i din profil" +#: ../../mod/dirsearch.php:29 +msgid "This directory server requires an access token" +msgstr "Denne katalogtjeneren krever en tilgangsnøkkel (access token)" #: ../../mod/lostpass.php:15 msgid "No valid account found." @@ -5746,7 +6319,7 @@ msgid "" "Password reset failed." msgstr "Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) Tilbakestilling av passord mislyktes." -#: ../../mod/lostpass.php:85 ../../boot.php:1494 +#: ../../mod/lostpass.php:85 ../../boot.php:1560 msgid "Password Reset" msgstr "Tilbakestill passord" @@ -5795,1836 +6368,1887 @@ msgstr "E-postadresse" msgid "Reset" msgstr "Tilbakestill" -#: ../../mod/bookmarks.php:38 -msgid "Bookmark added" -msgstr "Bokmerke lagt til" - -#: ../../mod/bookmarks.php:60 -msgid "My Bookmarks" -msgstr "Mine bokmerker" - -#: ../../mod/bookmarks.php:71 -msgid "My Connections Bookmarks" -msgstr "Mine forbindelsers bokmerker" - -#: ../../mod/dirsearch.php:21 -msgid "This site is not a directory server" -msgstr "Dette nettstedet er ikke en katalogtjener" - -#: ../../mod/cloud.php:130 -msgid "RedMatrix - Guests: Username: {your email address}, Password: +++" -msgstr "RedMatrix - gjester: brukernavn: {din e-postadresse}, passord: +++" - -#: ../../mod/ping.php:257 -msgid "sent you a private message" -msgstr "sendte deg en privat melding" - -#: ../../mod/ping.php:308 -msgid "added your channel" -msgstr "la til din kanal" - -#: ../../mod/ping.php:349 -msgid "posted an event" -msgstr "la ut en hendelse" - -#: ../../mod/editblock.php:79 ../../mod/editblock.php:95 -#: ../../mod/editlayout.php:78 ../../mod/editpost.php:20 -#: ../../mod/editwebpage.php:77 -msgid "Item not found" -msgstr "Elementet ble ikke funnet." - -#: ../../mod/editblock.php:115 -msgid "Edit Block" -msgstr "Endre byggekloss" - -#: ../../mod/editblock.php:125 -msgid "Delete block?" -msgstr "Slett byggeklossen?" - -#: ../../mod/editblock.php:147 ../../mod/editlayout.php:143 -#: ../../mod/editpost.php:116 ../../mod/editwebpage.php:178 -msgid "Insert YouTube video" -msgstr "Sett inn YouTube-video" - -#: ../../mod/editblock.php:148 ../../mod/editlayout.php:144 -#: ../../mod/editpost.php:117 ../../mod/editwebpage.php:179 -msgid "Insert Vorbis [.ogg] video" -msgstr "Sett inn Vorbis [.ogg] video" +#: ../../mod/rate.php:157 +msgid "Website:" +msgstr "Nettsted:" -#: ../../mod/editblock.php:149 ../../mod/editlayout.php:145 -#: ../../mod/editpost.php:118 ../../mod/editwebpage.php:180 -msgid "Insert Vorbis [.ogg] audio" -msgstr "Legg i" - -#: ../../mod/editblock.php:183 -msgid "Delete Block" -msgstr "Slett byggekloss" - -#: ../../mod/pdledit.php:13 -msgid "Layout updated." -msgstr "Layout er oppdatert." - -#: ../../mod/pdledit.php:28 ../../mod/pdledit.php:53 -msgid "Edit System Page Description" -msgstr "Endre beskrivelsen av systemsiden" - -#: ../../mod/pdledit.php:48 -msgid "Layout not found." -msgstr "Layouten ble ikke funnet." - -#: ../../mod/pdledit.php:54 -msgid "Module Name:" -msgstr "Modulnavn:" - -#: ../../mod/pdledit.php:55 ../../mod/layouts.php:107 -msgid "Layout Help" -msgstr "Layout-hjelp" - -#: ../../mod/editlayout.php:108 -msgid "Edit Layout" -msgstr "Endre layout" - -#: ../../mod/editlayout.php:117 -msgid "Delete layout?" -msgstr "Slett layout?" - -#: ../../mod/editlayout.php:178 -msgid "Delete Layout" -msgstr "Slett layout" +#: ../../mod/rate.php:160 +#, php-format +msgid "Remote Channel [%s] (not yet known on this site)" +msgstr "Fjerntliggende kanal [%s] (foreløpig ikke kjent på dette nettstedet)" #: ../../mod/editpost.php:31 msgid "Item is not editable" msgstr "Elementet kan ikke endres" +#: ../../mod/editpost.php:42 ../../mod/rpost.php:98 +msgid "Edit post" +msgstr "Endre innlegg" + #: ../../mod/editpost.php:53 msgid "Delete item?" msgstr "Slett element?" -#: ../../mod/settings.php:73 -msgid "Name is required" -msgstr "Navn er påkrevd" - -#: ../../mod/settings.php:77 -msgid "Key and Secret are required" -msgstr "Nøkkel og hemmelighet er påkrevd" - -#: ../../mod/settings.php:197 -msgid "Passwords do not match. Password unchanged." -msgstr "Passordene stemmer ikke overens. Passord uforandret." - -#: ../../mod/settings.php:201 -msgid "Empty passwords are not allowed. Password unchanged." -msgstr "Tomme passord er ikke tillatt. Passord uforandret." - -#: ../../mod/settings.php:215 -msgid "Password changed." -msgstr "Passord endret." - -#: ../../mod/settings.php:217 -msgid "Password update failed. Please try again." -msgstr "Passord oppdatering mislyktes. Vennligst prøv igjen." - -#: ../../mod/settings.php:231 -msgid "Not valid email." -msgstr "Ikke gyldig e-post." - -#: ../../mod/settings.php:234 -msgid "Protected email address. Cannot change to that email." -msgstr "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen." - -#: ../../mod/settings.php:243 -msgid "System failure storing new email. Please try again." -msgstr "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen." - -#: ../../mod/settings.php:479 -msgid "Settings updated." -msgstr "Innstillinger oppdatert." - -#: ../../mod/settings.php:548 ../../mod/settings.php:574 -#: ../../mod/settings.php:610 -msgid "Add application" -msgstr "Legg til program" - -#: ../../mod/settings.php:551 -msgid "Name of application" -msgstr "Navn på program" - -#: ../../mod/settings.php:552 ../../mod/settings.php:578 -msgid "Consumer Key" -msgstr "Consumer Key" - -#: ../../mod/settings.php:552 ../../mod/settings.php:553 -msgid "Automatically generated - change if desired. Max length 20" -msgstr "Automatisk laget - kan endres om du vil. Største lengde 20" - -#: ../../mod/settings.php:553 ../../mod/settings.php:579 -msgid "Consumer Secret" -msgstr "Consumer Secret" - -#: ../../mod/settings.php:554 ../../mod/settings.php:580 -msgid "Redirect" -msgstr "Omdirigering" - -#: ../../mod/settings.php:554 -msgid "" -"Redirect URI - leave blank unless your application specifically requires " -"this" -msgstr "Omdirigerings-URI - la stå tomt hvis ikke ditt program spesifikt krever dette" - -#: ../../mod/settings.php:555 ../../mod/settings.php:581 -msgid "Icon url" -msgstr "Ikon-URL" - -#: ../../mod/settings.php:555 -msgid "Optional" -msgstr "Valgfritt" - -#: ../../mod/settings.php:566 -msgid "You can't edit this application." -msgstr "Du kan ikke endre dette programmet." - -#: ../../mod/settings.php:609 -msgid "Connected Apps" -msgstr "Tilkoblede app-er" - -#: ../../mod/settings.php:613 -msgid "Client key starts with" -msgstr "Klientnøkkel starter med" - -#: ../../mod/settings.php:614 -msgid "No name" -msgstr "Ikke noe navn" - -#: ../../mod/settings.php:615 -msgid "Remove authorization" -msgstr "Fjern tillatelse" - -#: ../../mod/settings.php:626 -msgid "No feature settings configured" -msgstr "Ingen funksjonsinnstillinger er konfigurert" - -#: ../../mod/settings.php:634 -msgid "Feature Settings" -msgstr "Funksjonsinnstillinger" - -#: ../../mod/settings.php:657 -msgid "Account Settings" -msgstr "Kontoinnstillinger" - -#: ../../mod/settings.php:658 -msgid "Password Settings" -msgstr "Passordinnstillinger" - -#: ../../mod/settings.php:659 -msgid "New Password:" -msgstr "Nytt passord:" - -#: ../../mod/settings.php:660 -msgid "Confirm:" -msgstr "Bekreft:" - -#: ../../mod/settings.php:660 -msgid "Leave password fields blank unless changing" -msgstr "La passordfeltene stå blanke om det ikke skal endres" - -#: ../../mod/settings.php:662 ../../mod/settings.php:985 -msgid "Email Address:" -msgstr "E-postadresse:" +#: ../../mod/invite.php:25 +msgid "Total invitation limit exceeded." +msgstr "Grensen for totalt antall invitasjoner er overskredet." -#: ../../mod/settings.php:663 ../../mod/removeaccount.php:61 -msgid "Remove Account" -msgstr "Slett konto" +#: ../../mod/invite.php:49 +#, php-format +msgid "%s : Not a valid email address." +msgstr "%s : ikke en gyldig e-postadresse." -#: ../../mod/settings.php:664 -msgid "Remove this account from this server including all its channels" -msgstr "Slett denne kontoen inkludert alle dens kanaler fra denne tjeneren" +#: ../../mod/invite.php:76 +msgid "Please join us on Red" +msgstr "Bli med oss på Red" -#: ../../mod/settings.php:665 ../../mod/settings.php:1067 -msgid "Warning: This action is permanent and cannot be reversed." -msgstr "Advarsel: Denne handlingen er permanent og kan ikke angres." +#: ../../mod/invite.php:87 +msgid "Invitation limit exceeded. Please contact your site administrator." +msgstr "Invitasjonsgrensen er overskredet. Vennligst kontakt administratoren ved ditt nettsted." -#: ../../mod/settings.php:681 -msgid "Off" -msgstr "Av" +#: ../../mod/invite.php:92 +#, php-format +msgid "%s : Message delivery failed." +msgstr "%s : meldingslevering feilet." -#: ../../mod/settings.php:681 -msgid "On" -msgstr "På" +#: ../../mod/invite.php:96 +#, php-format +msgid "%d message sent." +msgid_plural "%d messages sent." +msgstr[0] "%d melding sendt." +msgstr[1] "%d meldinger sendt." -#: ../../mod/settings.php:688 -msgid "Additional Features" -msgstr "Ekstra funksjoner" +#: ../../mod/invite.php:115 +msgid "You have no more invitations available" +msgstr "Du har ikke flere invitasjoner tilgjengelig" -#: ../../mod/settings.php:713 -msgid "Connector Settings" -msgstr "Koblingsinnstillinger" +#: ../../mod/invite.php:129 +msgid "Send invitations" +msgstr "Send invitasjoner" -#: ../../mod/settings.php:743 -msgid "No special theme for mobile devices" -msgstr "Ikke noe spesielt tema for mobile enheter" +#: ../../mod/invite.php:130 +msgid "Enter email addresses, one per line:" +msgstr "Skriv e-postadresser, en per linje:" -#: ../../mod/settings.php:752 -#, php-format -msgid "%s - (Experimental)" -msgstr "%s - (Eksperimentelt)" +#: ../../mod/invite.php:131 ../../mod/mail.php:235 ../../mod/mail.php:348 +msgid "Your message:" +msgstr "Din melding:" -#: ../../mod/settings.php:788 -msgid "Display Settings" -msgstr "Visningsinnstillinger" +#: ../../mod/invite.php:132 +msgid "Please join my community on RedMatrix." +msgstr "Du er velkommen til å bli med i mitt fellesskap på RedMatrix." -#: ../../mod/settings.php:794 -msgid "Display Theme:" -msgstr "Visningstema:" +#: ../../mod/invite.php:134 +msgid "You will need to supply this invitation code: " +msgstr "Du må oppgi denne invitasjonskoden:" -#: ../../mod/settings.php:795 -msgid "Mobile Theme:" -msgstr "Mobiltema:" +#: ../../mod/invite.php:135 +msgid "1. Register at any RedMatrix location (they are all inter-connected)" +msgstr "1. Registrer ved enhver RedMatrix-lokasjon (de er alle forbundet med hverandre)" -#: ../../mod/settings.php:796 -msgid "Enable user zoom on mobile devices" -msgstr "Skru på brukerstyrt zoom på mobile enheter" +#: ../../mod/invite.php:137 +msgid "2. Enter my RedMatrix network address into the site searchbar." +msgstr "2. Skriv inn min RedMatrix-adresse i nettstedets søkefelt." -#: ../../mod/settings.php:797 -msgid "Update browser every xx seconds" -msgstr "Oppdater nettleser hvert xx sekunder" +#: ../../mod/invite.php:138 +msgid "or visit " +msgstr "eller besøk" -#: ../../mod/settings.php:797 -msgid "Minimum of 10 seconds, no maximum" -msgstr "Minimum 10 sekunder, ikke noe maksimum" +#: ../../mod/invite.php:140 +msgid "3. Click [Connect]" +msgstr "3. Klikk [Forbindelse]" -#: ../../mod/settings.php:798 -msgid "Maximum number of conversations to load at any time:" -msgstr "Maksimalt antall samtaler å laste samtidig:" +#: ../../mod/locs.php:21 ../../mod/locs.php:52 +msgid "Location not found." +msgstr "Plassering er ikke funnet." -#: ../../mod/settings.php:798 -msgid "Maximum of 100 items" -msgstr "Maksimum 100 elementer" +#: ../../mod/locs.php:56 +msgid "Primary location cannot be removed." +msgstr "Primær plassering kan ikke fjernes." -#: ../../mod/settings.php:799 -msgid "Don't show emoticons" -msgstr "Ikke vis følelsesikoner" +#: ../../mod/locs.php:88 +msgid "No locations found." +msgstr "Ingen plasseringer ble funnet." -#: ../../mod/settings.php:800 -msgid "Link post titles to source" -msgstr "Lenk innleggets tittel til kilden" +#: ../../mod/locs.php:101 +msgid "Manage Channel Locations" +msgstr "Håndter kanalplasseringer" -#: ../../mod/settings.php:801 -msgid "System Page Layout Editor - (advanced)" -msgstr "Systemsidens layoutbehandler - (avansert)" +#: ../../mod/locs.php:102 +msgid "Location (address)" +msgstr "Plassering (adresse)" -#: ../../mod/settings.php:835 -msgid "Nobody except yourself" -msgstr "Ingen unntatt deg selv" +#: ../../mod/locs.php:103 +msgid "Primary Location" +msgstr "Hovedplassering" -#: ../../mod/settings.php:836 -msgid "Only those you specifically allow" -msgstr "Bare de du spesifikt tillater" +#: ../../mod/locs.php:104 +msgid "Drop location" +msgstr "Slett plassering" -#: ../../mod/settings.php:837 -msgid "Approved connections" -msgstr "Godkjente forbindelser" +#: ../../mod/sources.php:32 +msgid "Failed to create source. No channel selected." +msgstr "Mislyktes med å lage kilde. Ingen kanal er valgt." -#: ../../mod/settings.php:838 -msgid "Any connections" -msgstr "Enhver forbindelse" +#: ../../mod/sources.php:45 +msgid "Source created." +msgstr "Kilden er laget." -#: ../../mod/settings.php:839 -msgid "Anybody on this website" -msgstr "Enhver ved dette nettstedet" +#: ../../mod/sources.php:57 +msgid "Source updated." +msgstr "Kilden er oppdatert." -#: ../../mod/settings.php:840 -msgid "Anybody in this network" -msgstr "Enhver i dette nettverket" +#: ../../mod/sources.php:82 +msgid "*" +msgstr "*" -#: ../../mod/settings.php:841 -msgid "Anybody authenticated" -msgstr "Enhver som er autentisert" +#: ../../mod/sources.php:89 +msgid "Manage remote sources of content for your channel." +msgstr "Håndtere eksterne innholdskilder til din kanal." -#: ../../mod/settings.php:842 -msgid "Anybody on the internet" -msgstr "Enhver på Internett" +#: ../../mod/sources.php:90 ../../mod/sources.php:100 +msgid "New Source" +msgstr "Ny kilde" -#: ../../mod/settings.php:916 -msgid "Publish your default profile in the network directory" -msgstr "Publiser din standardprofil i nettverkskatalogen" +#: ../../mod/sources.php:101 ../../mod/sources.php:133 +msgid "" +"Import all or selected content from the following channel into this channel " +"and distribute it according to your channel settings." +msgstr "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger." -#: ../../mod/settings.php:921 -msgid "Allow us to suggest you as a potential friend to new members?" -msgstr "Tillat oss å foreslå deg som en mulig venn til nye medlemmer?" +#: ../../mod/sources.php:102 ../../mod/sources.php:134 +msgid "Only import content with these words (one per line)" +msgstr "Bare importer innhold med disse ordene (ett ord per linje)" -#: ../../mod/settings.php:925 ../../mod/profile_photo.php:365 -msgid "or" -msgstr "eller" +#: ../../mod/sources.php:102 ../../mod/sources.php:134 +msgid "Leave blank to import all public content" +msgstr "La stå tomt for å importere alt offentlig innhold" -#: ../../mod/settings.php:930 -msgid "Your channel address is" -msgstr "Din kanaladresse er" +#: ../../mod/sources.php:103 ../../mod/sources.php:137 +#: ../../mod/new_channel.php:112 +msgid "Channel Name" +msgstr "Kanalnavn" -#: ../../mod/settings.php:974 -msgid "Channel Settings" -msgstr "Kanalinnstillinger" +#: ../../mod/sources.php:123 ../../mod/sources.php:150 +msgid "Source not found." +msgstr "Kilden ble ikke funnet." -#: ../../mod/settings.php:983 -msgid "Basic Settings" -msgstr "Grunninnstillinger" +#: ../../mod/sources.php:130 +msgid "Edit Source" +msgstr "Endre kilde" -#: ../../mod/settings.php:986 -msgid "Your Timezone:" -msgstr "Din tidssone:" +#: ../../mod/sources.php:131 +msgid "Delete Source" +msgstr "Slett kilde" -#: ../../mod/settings.php:987 -msgid "Default Post Location:" -msgstr "Standard plassering ved innlegg:" +#: ../../mod/sources.php:158 +msgid "Source removed" +msgstr "Kilden er fjernet" -#: ../../mod/settings.php:987 -msgid "Geographical location to display on your posts" -msgstr "Geografisk plassering som vises på dine innlegg" +#: ../../mod/sources.php:160 +msgid "Unable to remove source." +msgstr "Ikke i stand til å fjerne kilde." -#: ../../mod/settings.php:988 -msgid "Use Browser Location:" -msgstr "Bruk nettleseren sin plassering:" +#: ../../mod/menu.php:31 +msgid "Menu updated." +msgstr "Menyen er oppdatert." -#: ../../mod/settings.php:990 -msgid "Adult Content" -msgstr "Voksent innhold" +#: ../../mod/menu.php:35 +msgid "Unable to update menu." +msgstr "Ikke i stand til å oppdatere meny." -#: ../../mod/settings.php:990 -msgid "" -"This channel frequently or regularly publishes adult content. (Please tag " -"any adult material and/or nudity with #NSFW)" -msgstr "Denne kanalen vil ofte eller jevnlig publisere voksent innhold. (Vennligst merk alt voksent materiale og/eller nakenhet med #NSFW)" +#: ../../mod/menu.php:40 +msgid "Menu created." +msgstr "Meny laget." -#: ../../mod/settings.php:992 -msgid "Security and Privacy Settings" -msgstr "Sikkerhets- og personverninnstillinger" +#: ../../mod/menu.php:44 +msgid "Unable to create menu." +msgstr "Ikke i stand til å lage meny." -#: ../../mod/settings.php:994 -msgid "Your permissions are already configured. Click to view/adjust" -msgstr "Dine tillatelser er allerede satt. Klikk for å se/justere." +#: ../../mod/menu.php:76 +msgid "Manage Menus" +msgstr "Håndtere menyer" -#: ../../mod/settings.php:996 -msgid "Hide my online presence" -msgstr "Skjul min tilstedeværelse online" +#: ../../mod/menu.php:79 +msgid "Drop" +msgstr "Slett" -#: ../../mod/settings.php:996 -msgid "Prevents displaying in your profile that you are online" -msgstr "Forhindrer visning på din profil av at du er online " +#: ../../mod/menu.php:81 +msgid "Bookmarks allowed" +msgstr "Bokmerker tillatt" -#: ../../mod/settings.php:998 -msgid "Simple Privacy Settings:" -msgstr "Enkle personverninnstillinger:" +#: ../../mod/menu.php:82 +msgid "Create a new menu" +msgstr "Lag en ny meny" -#: ../../mod/settings.php:999 -msgid "" -"Very Public - <em>extremely permissive (should be used with caution)</em>" -msgstr "Svært offentlig - <em>ekstremt åpent (bør brukes med varsomhet)</em>" +#: ../../mod/menu.php:83 +msgid "Delete this menu" +msgstr "Slett denne menyen" -#: ../../mod/settings.php:1000 -msgid "" -"Typical - <em>default public, privacy when desired (similar to social " -"network permissions but with improved privacy)</em>" -msgstr "Typisk - <em>standard er offentlig, personvern når ønsket (likner på tillatelser i sosiale nettverk, men med forbedret personvern)</em>" +#: ../../mod/menu.php:84 ../../mod/menu.php:125 +msgid "Edit menu contents" +msgstr "Endre menyinnholdet" -#: ../../mod/settings.php:1001 -msgid "Private - <em>default private, never open or public</em>" -msgstr "Privat - <em>standard er privat, aldri åpen eller offentlig</em>" +#: ../../mod/menu.php:85 +msgid "Edit this menu" +msgstr "Endre denne menyen" -#: ../../mod/settings.php:1002 -msgid "Blocked - <em>default blocked to/from everybody</em>" -msgstr "Blokkert - <em>standard blokkert til/fra alle</em>" +#: ../../mod/menu.php:96 +msgid "New Menu" +msgstr "Ny meny" -#: ../../mod/settings.php:1004 -msgid "Allow others to tag your posts" -msgstr "Tillat andre å merke dine innlegg" +#: ../../mod/menu.php:97 ../../mod/menu.php:126 +msgid "Menu name" +msgstr "Menynavn" -#: ../../mod/settings.php:1004 -msgid "" -"Often used by the community to retro-actively flag inappropriate content" -msgstr "Ofte brukt av fellesskapet for å merke upassende innhold i etterkant" +#: ../../mod/menu.php:97 ../../mod/menu.php:126 +msgid "Must be unique, only seen by you" +msgstr "Må være unik, ses bare av deg" -#: ../../mod/settings.php:1006 -msgid "Advanced Privacy Settings" -msgstr "Avanserte personverninnstillinger" +#: ../../mod/menu.php:98 ../../mod/menu.php:127 +msgid "Menu title" +msgstr "Menytittel" -#: ../../mod/settings.php:1008 -msgid "Expire other channel content after this many days" -msgstr "Annet kanal innhold utløper etter så mange dager" +#: ../../mod/menu.php:98 ../../mod/menu.php:127 +msgid "Menu title as seen by others" +msgstr "Menytittelen andre ser" -#: ../../mod/settings.php:1008 -msgid "0 or blank prevents expiration" -msgstr "0 eller blankt forhindrer utløp" +#: ../../mod/menu.php:99 ../../mod/menu.php:128 +msgid "Allow bookmarks" +msgstr "Tillat bokmerker" -#: ../../mod/settings.php:1009 -msgid "Maximum Friend Requests/Day:" -msgstr "Maksimalt antall venneforespørsler per dag:" +#: ../../mod/menu.php:99 ../../mod/menu.php:128 +msgid "Menu may be used to store saved bookmarks" +msgstr "Menyen kan brukes til å lagre lagrede bokmerker" -#: ../../mod/settings.php:1009 -msgid "May reduce spam activity" -msgstr "Kan redusere søppelpostaktivitet" +#: ../../mod/menu.php:108 ../../mod/mitem.php:24 +msgid "Menu not found." +msgstr "Menyen ble ikke funnet." -#: ../../mod/settings.php:1010 -msgid "Default Post Permissions" -msgstr "Standard innleggstillatelser" +#: ../../mod/menu.php:114 +msgid "Menu deleted." +msgstr "Meny slettet." -#: ../../mod/settings.php:1015 -msgid "Channel permissions category:" -msgstr "Kategori med kanaltillatelser:" +#: ../../mod/menu.php:116 +msgid "Menu could not be deleted." +msgstr "Menyen kunne ikke bli slettet." -#: ../../mod/settings.php:1023 -msgid "Maximum private messages per day from unknown people:" -msgstr "Maksimalt antall private meldinger per dag fra ukjente personer:" +#: ../../mod/menu.php:122 +msgid "Edit Menu" +msgstr "Endre meny" -#: ../../mod/settings.php:1023 -msgid "Useful to reduce spamming" -msgstr "Nyttig for å redusere søppelpost" +#: ../../mod/menu.php:124 +msgid "Add or remove entries to this menu" +msgstr "Legg til eller fjern punkter i denne menyen" -#: ../../mod/settings.php:1026 -msgid "Notification Settings" -msgstr "Varslingsinnstillinger" +#: ../../mod/menu.php:130 ../../mod/mitem.php:213 +msgid "Modify" +msgstr "Endre" -#: ../../mod/settings.php:1027 -msgid "By default post a status message when:" -msgstr "Legg inn en statusmelding når du:" +#: ../../mod/filestorage.php:81 +msgid "Permission Denied." +msgstr "Tillatelse avvist." -#: ../../mod/settings.php:1028 -msgid "accepting a friend request" -msgstr "aksepterer en venneforespørsel" +#: ../../mod/filestorage.php:97 +msgid "File not found." +msgstr "Filen ble ikke funnet." -#: ../../mod/settings.php:1029 -msgid "joining a forum/community" -msgstr "blir med i et forum/miljø" +#: ../../mod/filestorage.php:140 +msgid "Edit file permissions" +msgstr "Endre filtillatelser" -#: ../../mod/settings.php:1030 -msgid "making an <em>interesting</em> profile change" -msgstr "gjør en <em>interessant</em> profilendring" +#: ../../mod/filestorage.php:149 +msgid "Set/edit permissions" +msgstr "Angi/endre tillatelser" -#: ../../mod/settings.php:1031 -msgid "Send a notification email when:" -msgstr "Send en varsel-e-post når:" +#: ../../mod/filestorage.php:150 +msgid "Include all files and sub folders" +msgstr "Inkluder alle filer og undermapper" -#: ../../mod/settings.php:1032 -msgid "You receive a connection request" -msgstr "Du har mottatt en forespørsel om forbindelse" +#: ../../mod/filestorage.php:151 +msgid "Return to file list" +msgstr "Gå tilbake til filoversikten" -#: ../../mod/settings.php:1033 -msgid "Your connections are confirmed" -msgstr "Dine forbindelser er bekreftet" +#: ../../mod/filestorage.php:153 +msgid "Copy/paste this code to attach file to a post" +msgstr "Kopier og lim inn denne koden for å legge til filen i et innlegg" -#: ../../mod/settings.php:1034 -msgid "Someone writes on your profile wall" -msgstr "Noen skriver på din profilvegg" +#: ../../mod/filestorage.php:154 +msgid "Copy/paste this URL to link file from a web page" +msgstr "Kopier og lim inn denne URL-en for å lenke til filen fra en webside" -#: ../../mod/settings.php:1035 -msgid "Someone writes a followup comment" -msgstr "Noen skriver en oppfølgende kommentar" +#: ../../mod/filestorage.php:156 +msgid "Attach this file to a new post" +msgstr "Legg ved denne filen i et nytt innlegg" -#: ../../mod/settings.php:1036 -msgid "You receive a private message" -msgstr "Du mottar en privat melding" +#: ../../mod/filestorage.php:157 +msgid "Show URL to this file" +msgstr "Vis URLen til denne filen" -#: ../../mod/settings.php:1037 -msgid "You receive a friend suggestion" -msgstr "Du mottok et venneforslag" +#: ../../mod/filestorage.php:158 +msgid "Do not show in shared with me folder of your connections" +msgstr "Ikke vis i Delt med meg-mappen til dine forbindelser" -#: ../../mod/settings.php:1038 -msgid "You are tagged in a post" -msgstr "Du merkes i et innlegg" +#: ../../mod/fsuggest.php:20 ../../mod/fsuggest.php:92 +msgid "Contact not found." +msgstr "Kontakten ble ikke funnet." -#: ../../mod/settings.php:1039 -msgid "You are poked/prodded/etc. in a post" -msgstr "Du ble prikket/oppildnet/og så vider i et innlegg" +#: ../../mod/fsuggest.php:63 +msgid "Friend suggestion sent." +msgstr "Venneforespørsel sendt." -#: ../../mod/settings.php:1042 -msgid "Show visual notifications including:" -msgstr "Vis visuelle varslinger om:" +#: ../../mod/fsuggest.php:97 +msgid "Suggest Friends" +msgstr "Foreslå venner" -#: ../../mod/settings.php:1044 -msgid "Unseen matrix activity" -msgstr "Usett matrixaktivitet" +#: ../../mod/fsuggest.php:99 +#, php-format +msgid "Suggest a friend for %s" +msgstr "Foreslå en venn for %s" -#: ../../mod/settings.php:1045 -msgid "Unseen channel activity" -msgstr "Usett kanalaktivitet" +#: ../../mod/magic.php:69 +msgid "Hub not found." +msgstr "Hubben ble ikke funnet." -#: ../../mod/settings.php:1046 -msgid "Unseen private messages" -msgstr "Usette private meldinger" +#: ../../mod/poke.php:159 +msgid "Poke/Prod" +msgstr "Prikke/oppildne" -#: ../../mod/settings.php:1046 ../../mod/settings.php:1051 -#: ../../mod/settings.php:1052 ../../mod/settings.php:1053 -msgid "Recommended" -msgstr "Anbefalt" +#: ../../mod/poke.php:160 +msgid "poke, prod or do other things to somebody" +msgstr "prikke, oppildne eller gjør andre ting med noen" -#: ../../mod/settings.php:1047 -msgid "Upcoming events" -msgstr "Kommende hendelser" +#: ../../mod/poke.php:161 +msgid "Recipient" +msgstr "Mottaker" -#: ../../mod/settings.php:1048 -msgid "Events today" -msgstr "Hendelser idag" +#: ../../mod/poke.php:162 +msgid "Choose what you wish to do to recipient" +msgstr "Velg hva du ønsker å gjøre med mottakeren" -#: ../../mod/settings.php:1049 -msgid "Upcoming birthdays" -msgstr "Kommende fødselsdager" +#: ../../mod/poke.php:165 +msgid "Make this post private" +msgstr "Gjør dette innlegget privat" -#: ../../mod/settings.php:1049 -msgid "Not available in all themes" -msgstr "Ikke tilgjengelig i alle temaer" +#: ../../mod/profperm.php:29 ../../mod/profperm.php:58 +msgid "Invalid profile identifier." +msgstr "Ugyldig profil-identifikator." -#: ../../mod/settings.php:1050 -msgid "System (personal) notifications" -msgstr "System (personlige) varslinger" +#: ../../mod/profperm.php:110 +msgid "Profile Visibility Editor" +msgstr "Endre profilsynlighet" -#: ../../mod/settings.php:1051 -msgid "System info messages" -msgstr "System infomeldinger" +#: ../../mod/profperm.php:114 +msgid "Click on a contact to add or remove." +msgstr "Klikk på en kontakt for å legge til eller fjerne." -#: ../../mod/settings.php:1052 -msgid "System critical alerts" -msgstr "System kritiske varsel" +#: ../../mod/profperm.php:123 +msgid "Visible To" +msgstr "Synlig for" -#: ../../mod/settings.php:1053 -msgid "New connections" -msgstr "Nye forbindelser" +#: ../../mod/lockview.php:31 +msgid "Remote privacy information not available." +msgstr "Ekstern personverninformasjon er ikke tilgjengelig." -#: ../../mod/settings.php:1054 -msgid "System Registrations" -msgstr "Systemregistreringer" +#: ../../mod/lockview.php:52 +msgid "Visible to:" +msgstr "Synlig for:" -#: ../../mod/settings.php:1056 -msgid "Notify me of events this many days in advance" -msgstr "Varsle meg om hendelser dette antall dager på forhånd" +#: ../../mod/profiles.php:18 ../../mod/profiles.php:174 +#: ../../mod/profiles.php:231 ../../mod/profiles.php:600 +msgid "Profile not found." +msgstr "Profilen ble ikke funnet." -#: ../../mod/settings.php:1056 -msgid "Must be greater than 0" -msgstr "Må være større enn 0" +#: ../../mod/profiles.php:38 +msgid "Profile deleted." +msgstr "Profilen er slettet." -#: ../../mod/settings.php:1058 -msgid "Advanced Account/Page Type Settings" -msgstr "Avanserte innstillinger for konto/sidetype" +#: ../../mod/profiles.php:56 ../../mod/profiles.php:92 +msgid "Profile-" +msgstr "Profil-" -#: ../../mod/settings.php:1059 -msgid "Change the behaviour of this account for special situations" -msgstr "Endre oppførselen til denne kontoen i spesielle situasjoner" +#: ../../mod/profiles.php:77 ../../mod/profiles.php:120 +msgid "New profile created." +msgstr "Ny profil opprettet." -#: ../../mod/settings.php:1062 -msgid "" -"Please enable expert mode (in <a href=\"settings/features\">Settings > " -"Additional features</a>) to adjust!" -msgstr "Vennligst skru på ekspertmodus (under <a href=\"settings/features\">Innstillinger > Ekstra funksjoner</a>) for å justere!" +#: ../../mod/profiles.php:98 +msgid "Profile unavailable to clone." +msgstr "Profilen er utilgjengelig for klonen." -#: ../../mod/settings.php:1063 -msgid "Miscellaneous Settings" -msgstr "Diverse innstillinger" +#: ../../mod/profiles.php:136 +msgid "Profile unavailable to export." +msgstr "Profilen er utilgjengelig for eksport." -#: ../../mod/settings.php:1065 -msgid "Personal menu to display in your channel pages" -msgstr "Personlig meny som kan vises på dine kanalsider" +#: ../../mod/profiles.php:241 +msgid "Profile Name is required." +msgstr "Profilnavn er påkrevd." -#: ../../mod/settings.php:1066 -msgid "Remove this channel" -msgstr "Fjern denne kanalen" +#: ../../mod/profiles.php:404 +msgid "Marital Status" +msgstr "Sivilstand" -#: ../../mod/editwebpage.php:140 -msgid "Edit Webpage" -msgstr "Endre webside" +#: ../../mod/profiles.php:408 +msgid "Romantic Partner" +msgstr "Romantisk partner" -#: ../../mod/editwebpage.php:150 -msgid "Delete webpage?" -msgstr "Slett webside?" +#: ../../mod/profiles.php:412 +msgid "Likes" +msgstr "Liker" -#: ../../mod/editwebpage.php:215 -msgid "Delete Webpage" -msgstr "Slett webside" +#: ../../mod/profiles.php:416 +msgid "Dislikes" +msgstr "Liker ikke" -#: ../../mod/impel.php:33 -msgid "webpage" -msgstr "nettside" +#: ../../mod/profiles.php:420 +msgid "Work/Employment" +msgstr "Arbeid/sysselsetting" -#: ../../mod/impel.php:38 -msgid "block" -msgstr "byggekloss" +#: ../../mod/profiles.php:423 +msgid "Religion" +msgstr "Religion" -#: ../../mod/impel.php:43 -msgid "layout" -msgstr "layout" +#: ../../mod/profiles.php:427 +msgid "Political Views" +msgstr "Politiske synspunkter" -#: ../../mod/impel.php:117 -#, php-format -msgid "%s element installed" -msgstr "%s element installert" +#: ../../mod/profiles.php:435 +msgid "Sexual Preference" +msgstr "Seksuelle preferanser" -#: ../../mod/profile_photo.php:108 -msgid "Image uploaded but image cropping failed." -msgstr "Bildet ble lastet opp, men beskjæring av bildet mislyktes." +#: ../../mod/profiles.php:439 +msgid "Homepage" +msgstr "Hjemmeside" -#: ../../mod/profile_photo.php:161 -msgid "Image resize failed." -msgstr "Endring av bildestørrelse mislyktes." +#: ../../mod/profiles.php:443 +msgid "Interests" +msgstr "Interesser" -#: ../../mod/profile_photo.php:205 -msgid "" -"Shift-reload the page or clear browser cache if the new photo does not " -"display immediately." -msgstr "Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens mellomlager hvis det nye bildet ikke vises umiddelbart." +#: ../../mod/profiles.php:447 ../../mod/admin.php:950 +msgid "Address" +msgstr "Adresse" -#: ../../mod/profile_photo.php:232 -#, php-format -msgid "Image exceeds size limit of %d" -msgstr "Bildet overstiger størrelsesbegrensningen på %d" +#: ../../mod/profiles.php:537 +msgid "Profile updated." +msgstr "Profilen er oppdatert." -#: ../../mod/profile_photo.php:241 -msgid "Unable to process image." -msgstr "Kan ikke behandle bildet." +#: ../../mod/profiles.php:626 +msgid "Hide your contact/friend list from viewers of this profile?" +msgstr "Skjul kontakt-/vennelisten din fra de som ser på denne profilen?" -#: ../../mod/profile_photo.php:290 ../../mod/profile_photo.php:339 -msgid "Photo not available." -msgstr "Bildet er ikke tilgjengelig." +#: ../../mod/profiles.php:666 +msgid "Edit Profile Details" +msgstr "Endre profildetaljer" -#: ../../mod/profile_photo.php:358 -msgid "Upload File:" -msgstr "Last opp fil:" +#: ../../mod/profiles.php:668 +msgid "View this profile" +msgstr "Vis denne profilen" -#: ../../mod/profile_photo.php:359 -msgid "Select a profile:" -msgstr "Velg en profil:" +#: ../../mod/profiles.php:670 +msgid "Change Profile Photo" +msgstr "Endre profilbilde" -#: ../../mod/profile_photo.php:360 -msgid "Upload Profile Photo" -msgstr "Last opp profilbilde:" +#: ../../mod/profiles.php:671 +msgid "Create a new profile using these settings" +msgstr "Lag en ny profil ved å bruke disse innstillingene" -#: ../../mod/profile_photo.php:365 -msgid "skip this step" -msgstr "hopp over dette steget" +#: ../../mod/profiles.php:672 +msgid "Clone this profile" +msgstr "Klon denne profilen" -#: ../../mod/profile_photo.php:365 -msgid "select a photo from your photo albums" -msgstr "velg et bilde fra dine fotoalbum" +#: ../../mod/profiles.php:673 +msgid "Delete this profile" +msgstr "Slett denne profilen" -#: ../../mod/profile_photo.php:381 -msgid "Crop Image" -msgstr "Beskjær bildet" +#: ../../mod/profiles.php:675 +msgid "Import profile from file" +msgstr "Importer profil fra fil" -#: ../../mod/profile_photo.php:382 -msgid "Please adjust the image cropping for optimum viewing." -msgstr "Vennligst juster bildebeskjæringen for optimal visning." +#: ../../mod/profiles.php:676 +msgid "Export profile to file" +msgstr "Eksporter profil til fil" -#: ../../mod/profile_photo.php:384 -msgid "Done Editing" -msgstr "Avslutt redigering" +#: ../../mod/profiles.php:677 +msgid "Profile Name:" +msgstr "Profilnavn:" -#: ../../mod/profile_photo.php:427 -msgid "Image uploaded successfully." -msgstr "Opplasting av bildet var vellykket." +#: ../../mod/profiles.php:678 +msgid "Your Full Name:" +msgstr "Ditt fulle navn:" -#: ../../mod/profile_photo.php:429 -msgid "Image upload failed." -msgstr "Opplasting av bildet mislyktes." +#: ../../mod/profiles.php:679 +msgid "Title/Description:" +msgstr "Tittel/Beskrivelse:" -#: ../../mod/profile_photo.php:438 -#, php-format -msgid "Image size reduction [%s] failed." -msgstr "Forminsking av bildet [%s] mislyktes." +#: ../../mod/profiles.php:680 +msgid "Your Gender:" +msgstr "Ditt kjønn:" -#: ../../mod/fsuggest.php:20 ../../mod/fsuggest.php:92 -msgid "Contact not found." -msgstr "Kontakten ble ikke funnet." +#: ../../mod/profiles.php:681 +msgid "Birthday :" +msgstr "Fødselsdag:" -#: ../../mod/fsuggest.php:63 -msgid "Friend suggestion sent." -msgstr "Venneforespørsel sendt." +#: ../../mod/profiles.php:682 +msgid "Street Address:" +msgstr "Gateadresse:" -#: ../../mod/fsuggest.php:97 -msgid "Suggest Friends" -msgstr "Foreslå venner" +#: ../../mod/profiles.php:683 +msgid "Locality/City:" +msgstr "Sted/By:" -#: ../../mod/fsuggest.php:99 -#, php-format -msgid "Suggest a friend for %s" -msgstr "Foreslå en venn for %s" +#: ../../mod/profiles.php:684 +msgid "Postal/Zip Code:" +msgstr "Postnummer/ZIP-kode:" -#: ../../mod/filestorage.php:76 -msgid "Permission Denied." -msgstr "Tillatelse avvist." +#: ../../mod/profiles.php:685 +msgid "Country:" +msgstr "Land:" -#: ../../mod/filestorage.php:92 -msgid "File not found." -msgstr "Filen ble ikke funnet." +#: ../../mod/profiles.php:686 +msgid "Region/State:" +msgstr "Region/fylke:" -#: ../../mod/filestorage.php:131 -msgid "Edit file permissions" -msgstr "Endre filtillatelser" +#: ../../mod/profiles.php:687 +msgid "<span class=\"heart\">♥</span> Marital Status:" +msgstr "<span class=\"heart\">♥</span> Sivilstand:" -#: ../../mod/filestorage.php:140 -msgid "Set/edit permissions" -msgstr "Angi/endre tillatelser" +#: ../../mod/profiles.php:688 +msgid "Who: (if applicable)" +msgstr "Hvem: (hvis det er aktuelt) " -#: ../../mod/filestorage.php:141 -msgid "Include all files and sub folders" -msgstr "Inkluder alle filer og undermapper" +#: ../../mod/profiles.php:689 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +msgstr "Eksempler: kari123, Kari Villiamsen, kari@example.com" -#: ../../mod/filestorage.php:142 -msgid "Return to file list" -msgstr "Gå tilbake til filoversikten" +#: ../../mod/profiles.php:690 +msgid "Since [date]:" +msgstr "Siden [dato]:" -#: ../../mod/filestorage.php:144 -msgid "Copy/paste this code to attach file to a post" -msgstr "Kopier og lim inn denne koden for å legge til filen i et innlegg" +#: ../../mod/profiles.php:692 +msgid "Homepage URL:" +msgstr "Hjemmeside URL:" -#: ../../mod/filestorage.php:145 -msgid "Copy/paste this URL to link file from a web page" -msgstr "Kopier og lim inn denne URL-en for å lenke til filen fra en webside" +#: ../../mod/profiles.php:695 +msgid "Religious Views:" +msgstr "Religiøse synspunkter:" -#: ../../mod/help.php:41 ../../mod/help.php:47 ../../mod/help.php:53 -msgid "Help:" -msgstr "Hjelp:" +#: ../../mod/profiles.php:696 +msgid "Keywords:" +msgstr "Nøkkelord:" -#: ../../mod/help.php:67 ../../index.php:238 -msgid "Not Found" -msgstr "Ikke funnet" +#: ../../mod/profiles.php:699 +msgid "Example: fishing photography software" +msgstr "Eksempel: fisking fotografering programvare" -#: ../../mod/acl.php:245 -msgid "network" -msgstr "nettverk" +#: ../../mod/profiles.php:700 +msgid "Used in directory listings" +msgstr "Brukt i katalogoppføringer" -#: ../../mod/follow.php:25 -msgid "Channel added." -msgstr "Kanal lagt til." +#: ../../mod/profiles.php:701 +msgid "Tell us about yourself..." +msgstr "Fortell oss om deg selv..." -#: ../../mod/delegate.php:95 -msgid "No potential page delegates located." -msgstr "Ingen potensielle sidedelegater er funnet." +#: ../../mod/profiles.php:702 +msgid "Hobbies/Interests" +msgstr "Hobbier/Interesser" -#: ../../mod/delegate.php:121 -msgid "Delegate Page Management" -msgstr "Deleger sidehåndtering" +#: ../../mod/profiles.php:703 +msgid "Contact information and Social Networks" +msgstr "Kontaktinformasjon og sosiale nettverk" -#: ../../mod/delegate.php:123 -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 "Delegater kan håndtere alle sider ved denne kontoen/siden unntatt grunnleggende kontoinformasjon. Vennligst ikke deleger din personlige konto til noen du ikke stoler fullstendig på." +#: ../../mod/profiles.php:704 +msgid "My other channels" +msgstr "Mine andre kanaler" -#: ../../mod/delegate.php:124 -msgid "Existing Page Managers" -msgstr "Eksisterende sidehåndterere" +#: ../../mod/profiles.php:705 +msgid "Musical interests" +msgstr "Musikkinteresser" -#: ../../mod/delegate.php:126 -msgid "Existing Page Delegates" -msgstr "Eksisterende sidedelegater" +#: ../../mod/profiles.php:706 +msgid "Books, literature" +msgstr "Bøker, litteratur" -#: ../../mod/delegate.php:128 -msgid "Potential Delegates" -msgstr "Potensielle sidedelegater" +#: ../../mod/profiles.php:707 +msgid "Television" +msgstr "TV/fjernsyn" -#: ../../mod/delegate.php:131 -msgid "Add" -msgstr "Legg til" +#: ../../mod/profiles.php:708 +msgid "Film/dance/culture/entertainment" +msgstr "Film/dans/kultur/underholdning" -#: ../../mod/delegate.php:132 -msgid "No entries." -msgstr "Ingen oppføringer." +#: ../../mod/profiles.php:709 +msgid "Love/romance" +msgstr "Kjærlighet/romantikk" -#: ../../mod/group.php:20 -msgid "Collection created." -msgstr "Samling opprettet." +#: ../../mod/profiles.php:710 +msgid "Work/employment" +msgstr "Arbeid/sysselsetting" -#: ../../mod/group.php:26 -msgid "Could not create collection." -msgstr "Kunne ikke lage samling." +#: ../../mod/profiles.php:711 +msgid "School/education" +msgstr "Skole/utdanning" -#: ../../mod/group.php:54 -msgid "Collection updated." -msgstr "Samlingen er oppdatert." +#: ../../mod/profiles.php:717 +msgid "This is your default profile." +msgstr "Dette er din standardprofil." -#: ../../mod/group.php:86 -msgid "Create a collection of channels." -msgstr "Lag en samling med kanaler." +#: ../../mod/profiles.php:728 ../../mod/directory.php:207 +msgid "Age: " +msgstr "Alder:" -#: ../../mod/group.php:87 ../../mod/group.php:183 -msgid "Collection Name: " -msgstr "Navn på samling:" +#: ../../mod/profiles.php:771 +msgid "Edit/Manage Profiles" +msgstr "Endre/håndter profiler" -#: ../../mod/group.php:89 ../../mod/group.php:186 -msgid "Members are visible to other channels" -msgstr "Medlemmer er synlig for andre kanaler" +#: ../../mod/profiles.php:772 +msgid "Add profile things" +msgstr "Legg til profilting" -#: ../../mod/group.php:107 -msgid "Collection removed." -msgstr "Samling fjernet." +#: ../../mod/profiles.php:773 +msgid "Include desirable objects in your profile" +msgstr "Inkluder ønskverdige objekter i din profil" -#: ../../mod/group.php:109 -msgid "Unable to remove collection." -msgstr "Ikke i stand til å fjerne samlingen." +#: ../../mod/ratings.php:69 +msgid "No ratings" +msgstr "Ingen vurderinger" -#: ../../mod/group.php:182 -msgid "Collection Editor" -msgstr "Samlingsbehandler" +#: ../../mod/ratings.php:99 +msgid "Ratings" +msgstr "Vurderinger" -#: ../../mod/group.php:196 -msgid "Members" -msgstr "Medlemmer" +#: ../../mod/ratings.php:100 +msgid "Rating: " +msgstr "Vurdering:" -#: ../../mod/group.php:198 -msgid "All Connected Channels" -msgstr "Alle tilkoblede kanaler" +#: ../../mod/ratings.php:101 +msgid "Website: " +msgstr "Nettsted:" -#: ../../mod/group.php:233 -msgid "Click on a channel to add or remove." -msgstr "Klikk på en kanal for å legge til eller fjerne." +#: ../../mod/ratings.php:103 +msgid "Description: " +msgstr "Beskrivelse:" -#: ../../mod/suggest.php:35 -msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." -msgstr "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer." +#: ../../mod/openid.php:26 +msgid "OpenID protocol error. No ID returned." +msgstr "OpenID protokollfeil. Ingen ID ble returnert." -#: ../../mod/import.php:25 +#: ../../mod/openid.php:72 ../../mod/openid.php:180 ../../mod/post.php:290 #, php-format -msgid "Your service plan only allows %d channels." -msgstr "Din tjenesteplan tillater bare %d kanaler." - -#: ../../mod/import.php:51 -msgid "Nothing to import." -msgstr "Ingenting å importere." - -#: ../../mod/import.php:75 -msgid "Unable to download data from old server" -msgstr "Ikke i stand til å laste ned data fra gammel tjener" +msgid "Welcome %s. Remote authentication successful." +msgstr "Velkommen %s. Ekstern autentisering er vellykket." -#: ../../mod/import.php:81 -msgid "Imported file is empty." -msgstr "Importert fil er tom." +#: ../../mod/directory.php:213 +#, php-format +msgid "%d rating" +msgid_plural "%d ratings" +msgstr[0] "%d vurdering" +msgstr[1] "%d vurderinger" -#: ../../mod/import.php:105 -msgid "" -"Cannot create a duplicate channel identifier on this system. Import failed." -msgstr "Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import mislyktes." +#: ../../mod/directory.php:225 +msgid "Gender: " +msgstr "Kjønn:" -#: ../../mod/import.php:123 -msgid "Channel clone failed. Import failed." -msgstr "Kanalkloning mislyktes. Import mislyktes." +#: ../../mod/directory.php:227 +msgid "Status: " +msgstr "Status:" -#: ../../mod/import.php:133 -msgid "Cloned channel not found. Import failed." -msgstr "Klonet kanal ble ikke funnet. Import mislyktes." +#: ../../mod/directory.php:229 +msgid "Homepage: " +msgstr "Hjemmeside:" -#: ../../mod/import.php:451 -msgid "Import completed." -msgstr "Import ferdig." +#: ../../mod/directory.php:232 +msgid "Hometown: " +msgstr "Hjemby:" -#: ../../mod/import.php:463 -msgid "You must be logged in to use this feature." -msgstr "Du må være innlogget for å bruke denne funksjonen." +#: ../../mod/directory.php:234 +msgid "About: " +msgstr "Om:" -#: ../../mod/import.php:468 -msgid "Import Channel" -msgstr "Importer kanal" +#: ../../mod/directory.php:292 +msgid "Public Forum:" +msgstr "Offentlig forum:" -#: ../../mod/import.php:469 -msgid "" -"Use this form to import an existing channel from a different server/hub. You" -" may retrieve the channel identity from the old server/hub via the network " -"or provide an export file. Only identity and connections/relationships will " -"be imported. Importation of content is not yet available." -msgstr "Bruk dette skjemaet til å importere en eksisterende kanal fra en annen tjener/hub. Du kan hente kanalidentiteten fra den gamle tjeneren/hubben via nettverket eller bruke en eksportert fil. Bare identiteten og forbindelser/relasjoner vil bli importert. Importering av innhold er ennå ikke tilgjengelig." +#: ../../mod/directory.php:295 +msgid "Keywords: " +msgstr "Nøkkelord:" -#: ../../mod/import.php:470 -msgid "File to Upload" -msgstr "Fil som skal lastes opp" +#: ../../mod/directory.php:350 +msgid "Finding:" +msgstr "Finner:" -#: ../../mod/import.php:471 -msgid "Or provide the old server/hub details" -msgstr "Eller oppgi detaljene fra den gamle tjeneren/hub-en" +#: ../../mod/directory.php:355 +msgid "next page" +msgstr "Neste side" -#: ../../mod/import.php:472 -msgid "Your old identity address (xyz@example.com)" -msgstr "Din gamle identitetsadresse (xyz@example.com)" +#: ../../mod/directory.php:355 +msgid "previous page" +msgstr "Forrige side" -#: ../../mod/import.php:473 -msgid "Your old login email address" -msgstr "Din gamle innloggings e-postadresse" +#: ../../mod/directory.php:372 +msgid "No entries (some entries may be hidden)." +msgstr "Ingen oppføringer (noen oppføringer kan være skjult)." -#: ../../mod/import.php:474 -msgid "Your old login password" -msgstr "Ditt gamle innloggingspassord" +#: ../../mod/uexport.php:33 ../../mod/uexport.php:34 +msgid "Export Channel" +msgstr "Eksporter kanal" -#: ../../mod/import.php:475 +#: ../../mod/uexport.php:35 msgid "" -"For either option, please choose whether to make this hub your new primary " -"address, or whether your old location should continue this role. You will be" -" able to post from either location, but only one can be marked as the " -"primary location for files, photos, and media." -msgstr "Enten du tar det ene eller det andre valget, vennligst angi om du vil at denne hubben skal være din nye primære adresse, eller om din gamle plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene eller den andre plasseringen, men bare en av dem kan markeres som den primære plasseringen for filer, bilder og media." +"Export your basic channel information to a small file. This acts as a " +"backup of your connections, permissions, profile and basic data, which can " +"be used to import your data to a new hub, but\tdoes not contain your " +"content." +msgstr "Eksporter grunnleggende informasjon om kanalen din til en liten fil. Denne er en sikkerhetskopi av dine forbindelser, tillatelser, profil og grunnleggende data, som kan brukes til å importere dine data til en ny hub, men den tar ikke med innholdet." + +#: ../../mod/uexport.php:36 +msgid "Export Content" +msgstr "Eksporter innhold" -#: ../../mod/import.php:476 -msgid "Make this hub my primary location" -msgstr "Gjør dette nettstedet til min primære plassering" +#: ../../mod/uexport.php:37 +msgid "" +"Export your channel information and all the content to a JSON backup. This " +"backs up all of your connections, permissions, profile data and all of your " +"content, but is generally not suitable for importing a channel to a new hub " +"as this file may be VERY large. Please be patient - it may take several " +"minutes for this download to begin." +msgstr "Eksporter din kanalinformasjon og alt innholdet til en sikkerhetskopi som JSON-fil. Denne lager en sikkerhetskopi av alle dine forbindelser, tillatelser, profildata og alt innholdet ditt, men er generelt ikke egnet for å importere en kanal til en ny hub, fordi denne filen kan være SVÆRT stor. Vennligst vær tålmodig - det kan ta flere minutter før denne nedlastningen begynner." -#: ../../mod/import.php:477 -msgid "Import existing posts if possible" -msgstr "Importerer eksisterende innlegg hvis mulig." +#: ../../mod/viewconnections.php:58 +msgid "No connections." +msgstr "Ingen forbindelser." -#: ../../mod/tagger.php:98 +#: ../../mod/viewconnections.php:71 #, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" -msgstr "%1$s merket %3$s til %2$s med %4$s" - -#: ../../mod/tagrm.php:44 ../../mod/tagrm.php:94 -msgid "Tag removed" -msgstr "Merkelapp fjernet" - -#: ../../mod/tagrm.php:119 -msgid "Remove Item Tag" -msgstr "Fjern merkelapp fra element" +msgid "Visit %s's profile [%s]" +msgstr "Besøk %s sin profil [%s]" -#: ../../mod/tagrm.php:121 -msgid "Select a tag to remove: " -msgstr "Velg merkelapp å fjerne:" +#: ../../mod/zfinger.php:23 +msgid "invalid target signature" +msgstr "Målets signatur er ugyldig" #: ../../mod/admin.php:52 msgid "Theme settings updated." msgstr "Temainnstillinger er oppdatert." -#: ../../mod/admin.php:97 ../../mod/admin.php:411 +#: ../../mod/admin.php:93 ../../mod/admin.php:440 msgid "Site" msgstr "Nettsted" -#: ../../mod/admin.php:98 +#: ../../mod/admin.php:94 msgid "Accounts" msgstr "Kontoer" -#: ../../mod/admin.php:99 ../../mod/admin.php:858 +#: ../../mod/admin.php:95 ../../mod/admin.php:942 msgid "Channels" msgstr "Kanaler" -#: ../../mod/admin.php:100 ../../mod/admin.php:949 ../../mod/admin.php:991 +#: ../../mod/admin.php:96 ../../mod/admin.php:1033 ../../mod/admin.php:1073 msgid "Plugins" msgstr "Tilleggsfunksjoner" -#: ../../mod/admin.php:101 ../../mod/admin.php:1154 ../../mod/admin.php:1190 +#: ../../mod/admin.php:97 ../../mod/admin.php:1233 ../../mod/admin.php:1268 msgid "Themes" msgstr "Temaer" -#: ../../mod/admin.php:102 ../../mod/admin.php:512 -msgid "Server" -msgstr "Tjener" +#: ../../mod/admin.php:98 +msgid "Inspect queue" +msgstr "Inspiser kø" -#: ../../mod/admin.php:103 +#: ../../mod/admin.php:100 msgid "Profile Config" msgstr "Profilinnstillinger" -#: ../../mod/admin.php:104 +#: ../../mod/admin.php:101 msgid "DB updates" msgstr "Databaseoppdateringer" -#: ../../mod/admin.php:118 ../../mod/admin.php:125 ../../mod/admin.php:1277 +#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1351 msgid "Logs" msgstr "Logger" -#: ../../mod/admin.php:124 +#: ../../mod/admin.php:121 msgid "Plugin Features" msgstr "Tilleggsfunksjoner" -#: ../../mod/admin.php:126 +#: ../../mod/admin.php:123 msgid "User registrations waiting for confirmation" msgstr "Brukerregistreringer som venter på bekreftelse" -#: ../../mod/admin.php:206 +#: ../../mod/admin.php:200 +msgid "# Accounts" +msgstr "# Kontoer" + +#: ../../mod/admin.php:201 +msgid "# blocked accounts" +msgstr "# blokkerte kontoer" + +#: ../../mod/admin.php:202 +msgid "# expired accounts" +msgstr "# utgåtte kontoer" + +#: ../../mod/admin.php:203 +msgid "# expiring accounts" +msgstr "# kontoer som holder på å gå ut" + +#: ../../mod/admin.php:216 +msgid "# Channels" +msgstr "# Kanaler" + +#: ../../mod/admin.php:217 +msgid "# primary" +msgstr "# hoved" + +#: ../../mod/admin.php:218 +msgid "# clones" +msgstr "# kloner" + +#: ../../mod/admin.php:224 msgid "Message queues" msgstr "Meldingskøer" -#: ../../mod/admin.php:211 ../../mod/admin.php:410 ../../mod/admin.php:511 -#: ../../mod/admin.php:721 ../../mod/admin.php:857 ../../mod/admin.php:948 -#: ../../mod/admin.php:990 ../../mod/admin.php:1153 ../../mod/admin.php:1189 -#: ../../mod/admin.php:1276 +#: ../../mod/admin.php:240 ../../mod/admin.php:439 ../../mod/admin.php:533 +#: ../../mod/admin.php:807 ../../mod/admin.php:941 ../../mod/admin.php:1032 +#: ../../mod/admin.php:1072 ../../mod/admin.php:1232 ../../mod/admin.php:1267 +#: ../../mod/admin.php:1350 msgid "Administration" msgstr "Administrasjon" -#: ../../mod/admin.php:212 +#: ../../mod/admin.php:241 msgid "Summary" msgstr "Sammendrag" -#: ../../mod/admin.php:214 -msgid "Registered users" -msgstr "Registrerte brukere" +#: ../../mod/admin.php:244 +msgid "Registered accounts" +msgstr "Registrerte kontoer" -#: ../../mod/admin.php:216 ../../mod/admin.php:515 +#: ../../mod/admin.php:245 ../../mod/admin.php:537 msgid "Pending registrations" msgstr "Ventende registreringer" -#: ../../mod/admin.php:217 -msgid "Version" -msgstr "Versjon" +#: ../../mod/admin.php:246 +msgid "Registered channels" +msgstr "Registrerte kanaler" -#: ../../mod/admin.php:219 ../../mod/admin.php:516 +#: ../../mod/admin.php:247 ../../mod/admin.php:538 msgid "Active plugins" msgstr "Aktive tilleggsfunksjoner" -#: ../../mod/admin.php:326 +#: ../../mod/admin.php:248 +msgid "Version" +msgstr "Versjon" + +#: ../../mod/admin.php:356 msgid "Site settings updated." msgstr "Nettstedsinnstillinger er oppdatert." -#: ../../mod/admin.php:363 -msgid "mobile" -msgstr "mobil" - -#: ../../mod/admin.php:365 +#: ../../mod/admin.php:393 msgid "experimental" msgstr "eksperimentell" -#: ../../mod/admin.php:367 +#: ../../mod/admin.php:395 msgid "unsupported" msgstr "ikke støttet" -#: ../../mod/admin.php:391 +#: ../../mod/admin.php:420 msgid "Yes - with approval" msgstr "Ja - med godkjenning" -#: ../../mod/admin.php:397 +#: ../../mod/admin.php:426 msgid "My site is not a public server" msgstr "Mitt nettsted er ikke en offentlig tjeneste" -#: ../../mod/admin.php:398 +#: ../../mod/admin.php:427 msgid "My site has paid access only" msgstr "Mitt nettsted gir kun tilgang mot betaling" -#: ../../mod/admin.php:399 +#: ../../mod/admin.php:428 msgid "My site has free access only" msgstr "Mitt nettsted har kun gratis tilgang" -#: ../../mod/admin.php:400 +#: ../../mod/admin.php:429 msgid "My site offers free accounts with optional paid upgrades" msgstr "Mitt nettsted tilbyr gratis konto med valgfri oppgradering til betalt tjeneste" -#: ../../mod/admin.php:414 +#: ../../mod/admin.php:442 ../../mod/register.php:207 +msgid "Registration" +msgstr "Registrering" + +#: ../../mod/admin.php:443 msgid "File upload" msgstr "Last opp fil" -#: ../../mod/admin.php:415 +#: ../../mod/admin.php:444 msgid "Policies" msgstr "Retningslinjer" -#: ../../mod/admin.php:420 +#: ../../mod/admin.php:449 msgid "Site name" msgstr "Nettstedets navn" -#: ../../mod/admin.php:421 +#: ../../mod/admin.php:450 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../mod/admin.php:422 +#: ../../mod/admin.php:451 msgid "Administrator Information" msgstr "Administratorinformasjon" -#: ../../mod/admin.php:422 +#: ../../mod/admin.php:451 msgid "" "Contact information for site administrators. Displayed on siteinfo page. " "BBCode can be used here" msgstr "Kontaktinformasjon til nettstedsadministratorer. Vises på siteinfo-siden. BBCode kan brukes her" -#: ../../mod/admin.php:423 +#: ../../mod/admin.php:452 msgid "System language" msgstr "Systemspråk" -#: ../../mod/admin.php:424 +#: ../../mod/admin.php:453 msgid "System theme" msgstr "Systemtema" -#: ../../mod/admin.php:424 +#: ../../mod/admin.php:453 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "Standard systemtema - kan overstyres av brukerprofiler - <a href='#' id='cnftheme'>endre temainnstillinger</a>" -#: ../../mod/admin.php:425 +#: ../../mod/admin.php:454 msgid "Mobile system theme" msgstr "Mobilt systemtema" -#: ../../mod/admin.php:425 +#: ../../mod/admin.php:454 msgid "Theme for mobile devices" msgstr "Tema for mobile enheter" -#: ../../mod/admin.php:427 +#: ../../mod/admin.php:456 msgid "Enable Diaspora Protocol" msgstr "Skru på Diaspora-protokollen" -#: ../../mod/admin.php:427 +#: ../../mod/admin.php:456 msgid "Communicate with Diaspora and Friendica - experimental" msgstr "Samhandling med Diaspora og Friendica - eksperimentell" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:457 msgid "Allow Feeds as Connections" msgstr "Tillat strømmer som forbindelser" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:457 msgid "(Heavy system resource usage)" msgstr "(Tung bruk av systemressurser)" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:458 msgid "Maximum image size" msgstr "Største bildestørrelse" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:458 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "Største størrelse i bytes for opplastede bilder. Standard er 0, som betyr ubegrenset." -#: ../../mod/admin.php:430 +#: ../../mod/admin.php:459 msgid "Does this site allow new member registration?" msgstr "Tillater dette nettstedet registrering av nye medlemmer?" -#: ../../mod/admin.php:431 +#: ../../mod/admin.php:460 msgid "Which best describes the types of account offered by this hub?" msgstr "Hvilket alternativ beskriver best hva slags kontotype som tilbys av dette nettstedet/denne hubben?" -#: ../../mod/admin.php:432 +#: ../../mod/admin.php:461 msgid "Register text" msgstr "Registreringstekst" -#: ../../mod/admin.php:432 +#: ../../mod/admin.php:461 msgid "Will be displayed prominently on the registration page." msgstr "Vil bli vist på en fremtredende måte på registreringssiden." -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:462 msgid "Accounts abandoned after x days" msgstr "Kontoer forlatt etter x dager" -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:462 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "Vil ikke kaste bort systemressurser på å spørre eksterne nettsteder etter forlatte kontoer. Skriv 0 for å ikke sette noen tidsgrense." -#: ../../mod/admin.php:434 +#: ../../mod/admin.php:463 msgid "Allowed friend domains" msgstr "Tillatte vennedomener" -#: ../../mod/admin.php:434 +#: ../../mod/admin.php:463 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "Kommaseparert liste over domener som har lov til å etablere vennskap med dette nettstedet. Jokertegn er akseptert. Tøm for å tillate alle domener." -#: ../../mod/admin.php:435 +#: ../../mod/admin.php:464 msgid "Allowed email domains" msgstr "Tillate e-postdomener" -#: ../../mod/admin.php:435 +#: ../../mod/admin.php:464 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 "Kommaseparert liste med domener som er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt" -#: ../../mod/admin.php:436 +#: ../../mod/admin.php:465 +msgid "Not allowed email domains" +msgstr "Ikke tillatte e-postdomener" + +#: ../../mod/admin.php:465 +msgid "" +"Comma separated list of domains which are not allowed in email addresses for" +" registrations to this site. Wildcards are accepted. Empty to allow any " +"domains, unless allowed domains have been defined." +msgstr "Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt, med mindre tillate domener er blitt definert." + +#: ../../mod/admin.php:466 msgid "Block public" msgstr "Blokker offentlig tilgang" -#: ../../mod/admin.php:436 +#: ../../mod/admin.php:466 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "Kryss av for å blokkere tilgang til alle personlige sider som ellers ville vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn." -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:467 msgid "Verify Email Addresses" msgstr "Bekreft e-postadresser" -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:467 msgid "" "Check to verify email addresses used in account registration (recommended)." msgstr "Sett hake for å sjekke e-postadresser brukt ved kontoregistrering (anbefales)." -#: ../../mod/admin.php:438 +#: ../../mod/admin.php:468 msgid "Force publish" msgstr "Tving publisering" -#: ../../mod/admin.php:438 +#: ../../mod/admin.php:468 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "Kryss av for å tvinge alle profiler på dette nettstedet til å bli oppført i nettstedet sin katalog." -#: ../../mod/admin.php:439 +#: ../../mod/admin.php:469 msgid "Disable discovery tab" msgstr "Skru av oppdagelsesfanen" -#: ../../mod/admin.php:439 +#: ../../mod/admin.php:469 msgid "" "Remove the tab in the network view with public content pulled from sources " "chosen for this site." msgstr "Fjern fanen fra nettverksvisningen med offentlig innhold trukket inn fra kilder valg for dette nettstedet." -#: ../../mod/admin.php:440 +#: ../../mod/admin.php:470 msgid "No login on Homepage" msgstr "Ingen innlogging på hjemmesiden" -#: ../../mod/admin.php:440 +#: ../../mod/admin.php:470 msgid "" "Check to hide the login form from your sites homepage when visitors arrive " "who are not logged in (e.g. when you put the content of the homepage in via " "the site channel)." msgstr "Sett hake for å skjule innloggingsskjemaet fra ditt nettsteds hjemmeside for besøkende som ikke er innlogget (for eksempel når du legger inn innhold på hjemmesiden via nettstedskanalen)." -#: ../../mod/admin.php:442 +#: ../../mod/admin.php:472 msgid "Proxy user" msgstr "Brukernavn mellomtjener" -#: ../../mod/admin.php:443 +#: ../../mod/admin.php:473 msgid "Proxy URL" msgstr "Mellomtjener URL" -#: ../../mod/admin.php:444 +#: ../../mod/admin.php:474 msgid "Network timeout" msgstr "Nettverk tidsavbrudd" -#: ../../mod/admin.php:444 +#: ../../mod/admin.php:474 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "Verdien i sekunder. Skriv 0 for ubegrenset (ikke anbefalt)." -#: ../../mod/admin.php:445 +#: ../../mod/admin.php:475 msgid "Delivery interval" msgstr "Leveringsinterval" -#: ../../mod/admin.php:445 +#: ../../mod/admin.php:475 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 "Forsink leveringsprosessene i bakgrunnen med dette antall sekunder for å redusere systembelastningen. Anbefaling: 4-5 for delte tjenere, 2-3 for virtuelle tjenere, 0-1 for større dedikerte tjenere." -#: ../../mod/admin.php:446 +#: ../../mod/admin.php:476 msgid "Poll interval" msgstr "Spørreintervall" -#: ../../mod/admin.php:446 +#: ../../mod/admin.php:476 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "Forsink spørreprosessene i bakgrunnen med dette antall sekunder for å redusere systembelastningen. Hvis 0, bruk dette leveringsintervallet." -#: ../../mod/admin.php:447 +#: ../../mod/admin.php:477 msgid "Maximum Load Average" msgstr "Største belastningsgjennomsnitt" -#: ../../mod/admin.php:447 +#: ../../mod/admin.php:477 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "Største systembelastning før leverings- og spørreprosesser blir utsatt - standard 50." -#: ../../mod/admin.php:503 +#: ../../mod/admin.php:525 msgid "No server found" msgstr "Ingen tjener funnet" -#: ../../mod/admin.php:510 ../../mod/admin.php:735 +#: ../../mod/admin.php:532 ../../mod/admin.php:821 msgid "ID" msgstr "ID" -#: ../../mod/admin.php:510 +#: ../../mod/admin.php:532 msgid "for channel" msgstr "for kanalen" -#: ../../mod/admin.php:510 +#: ../../mod/admin.php:532 msgid "on server" msgstr "på tjener" -#: ../../mod/admin.php:510 +#: ../../mod/admin.php:532 msgid "Status" msgstr "Status" -#: ../../mod/admin.php:531 +#: ../../mod/admin.php:534 +msgid "Server" +msgstr "Tjener" + +#: ../../mod/admin.php:551 msgid "Update has been marked successful" msgstr "Oppdateringen har blitt merket som en suksess" -#: ../../mod/admin.php:541 +#: ../../mod/admin.php:561 #, php-format msgid "Executing %s failed. Check system logs." msgstr "Utføring av %s feilet. Sjekk systemlogger." -#: ../../mod/admin.php:544 +#: ../../mod/admin.php:564 #, php-format msgid "Update %s was successfully applied." msgstr "Oppdatering %s ble gjennomført med suksess." -#: ../../mod/admin.php:548 +#: ../../mod/admin.php:568 #, php-format msgid "Update %s did not return a status. Unknown if it succeeded." msgstr "Oppdatering %s returnerte ingen status. Det er ukjent om den ble vellykket." -#: ../../mod/admin.php:551 +#: ../../mod/admin.php:571 #, php-format msgid "Update function %s could not be found." msgstr "Oppdatering av funksjon %s kunne ikke finnes." -#: ../../mod/admin.php:566 +#: ../../mod/admin.php:587 msgid "No failed updates." msgstr "Ingen mislykkede oppdateringer." -#: ../../mod/admin.php:570 +#: ../../mod/admin.php:591 msgid "Failed Updates" msgstr "Mislykkede oppdateringer" -#: ../../mod/admin.php:572 +#: ../../mod/admin.php:593 msgid "Mark success (if update was manually applied)" msgstr "Marker suksess (hvis oppdateringen ble gjennomført manuelt)" -#: ../../mod/admin.php:573 +#: ../../mod/admin.php:594 msgid "Attempt to execute this update step automatically" msgstr "Prøv å gjennomføre dette oppdateringstrinnet automatisk" -#: ../../mod/admin.php:599 +#: ../../mod/admin.php:628 +msgid "Queue Statistics" +msgstr "Køstatistikk" + +#: ../../mod/admin.php:629 +msgid "Total Entries" +msgstr "Totalt antall oppføringer" + +#: ../../mod/admin.php:630 +msgid "Priority" +msgstr "Prioritet" + +#: ../../mod/admin.php:631 +msgid "Destination URL" +msgstr "Mål-URL" + +#: ../../mod/admin.php:632 +msgid "Mark hub permanently offline" +msgstr "Merk hub som permanent offline" + +#: ../../mod/admin.php:633 +msgid "Empty queue for this hub" +msgstr "Tøm køen for denne hubben" + +#: ../../mod/admin.php:634 +msgid "Last known contact" +msgstr "Siste kjente kontakt" + +#: ../../mod/admin.php:670 #, php-format msgid "%s user blocked/unblocked" msgid_plural "%s users blocked/unblocked" msgstr[0] "%s bruker blokkert/ikke blokkert lenger" msgstr[1] "%s brukere blokkert/ikke blokkert lenger" -#: ../../mod/admin.php:606 +#: ../../mod/admin.php:678 #, php-format msgid "%s user deleted" msgid_plural "%s users deleted" msgstr[0] "%s bruker slettet" msgstr[1] "%s brukere slettet" -#: ../../mod/admin.php:635 +#: ../../mod/admin.php:714 msgid "Account not found" msgstr "Kontoen ble ikke funnet" -#: ../../mod/admin.php:655 -#, php-format -msgid "User '%s' unblocked" -msgstr "Brukeren '%s' er ikke blokkert lenger" - -#: ../../mod/admin.php:655 +#: ../../mod/admin.php:734 #, php-format msgid "User '%s' blocked" msgstr "Brukeren '%s' er blokkert" -#: ../../mod/admin.php:722 ../../mod/admin.php:734 +#: ../../mod/admin.php:742 +#, php-format +msgid "User '%s' unblocked" +msgstr "Brukeren '%s' er ikke blokkert lenger" + +#: ../../mod/admin.php:808 ../../mod/admin.php:820 msgid "Users" msgstr "Brukere" -#: ../../mod/admin.php:724 ../../mod/admin.php:860 +#: ../../mod/admin.php:810 ../../mod/admin.php:944 msgid "select all" msgstr "velg alle" -#: ../../mod/admin.php:725 +#: ../../mod/admin.php:811 msgid "User registrations waiting for confirm" msgstr "Brukerregistreringer som venter på bekreftelse" -#: ../../mod/admin.php:726 +#: ../../mod/admin.php:812 msgid "Request date" msgstr "Dato for forespørsel" -#: ../../mod/admin.php:727 +#: ../../mod/admin.php:813 msgid "No registrations." msgstr "Ingen registreringer." -#: ../../mod/admin.php:728 +#: ../../mod/admin.php:814 msgid "Approve" msgstr "Godkjenn" -#: ../../mod/admin.php:729 +#: ../../mod/admin.php:815 msgid "Deny" msgstr "Avslå" -#: ../../mod/admin.php:735 +#: ../../mod/admin.php:821 msgid "Register date" msgstr "Registreringsdato" -#: ../../mod/admin.php:735 +#: ../../mod/admin.php:821 msgid "Last login" msgstr "Siste innlogging" -#: ../../mod/admin.php:735 +#: ../../mod/admin.php:821 msgid "Expires" msgstr "Utløper" -#: ../../mod/admin.php:735 +#: ../../mod/admin.php:821 msgid "Service Class" msgstr "Tjenesteklasse" -#: ../../mod/admin.php:737 +#: ../../mod/admin.php:823 msgid "" "Selected users will be deleted!\\n\\nEverything these users had posted on " "this site will be permanently deleted!\\n\\nAre you sure?" msgstr "Valgte brukere vil bli slettet!\\n\\nAlt som disse brukerne har lagt inn på dette nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette valgte brukere og deres innhold?" -#: ../../mod/admin.php:738 +#: ../../mod/admin.php:824 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 "Brukeren {0} vil bli slettet!\\n\\nAlt denne brukeren har lagt inn på dette nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette denne brukeren og alt innholdet til denne brukeren?" -#: ../../mod/admin.php:771 +#: ../../mod/admin.php:858 #, php-format msgid "%s channel censored/uncensored" msgid_plural "%s channels censored/uncensored" msgstr[0] "%s kanal er sensurert/ikke sensurert lenger" msgstr[1] "%s kanaler er sensurert/ikke sensurert lenger" -#: ../../mod/admin.php:778 +#: ../../mod/admin.php:865 #, php-format msgid "%s channel deleted" msgid_plural "%s channels deleted" msgstr[0] "%s kanal slettet" msgstr[1] "%s kanaler slettet" -#: ../../mod/admin.php:797 +#: ../../mod/admin.php:883 msgid "Channel not found" msgstr "Kanalen ble ikke funnet" -#: ../../mod/admin.php:808 +#: ../../mod/admin.php:894 #, php-format msgid "Channel '%s' deleted" msgstr "Kanalen '%s' er slettet" -#: ../../mod/admin.php:819 +#: ../../mod/admin.php:905 #, php-format msgid "Channel '%s' uncensored" msgstr "Kanalen '%s' er ikke sensurert lenger" -#: ../../mod/admin.php:819 +#: ../../mod/admin.php:905 #, php-format msgid "Channel '%s' censored" msgstr "Kanalen '%s' er sensurert" -#: ../../mod/admin.php:862 +#: ../../mod/admin.php:946 msgid "Censor" msgstr "Sensurer" -#: ../../mod/admin.php:863 +#: ../../mod/admin.php:947 msgid "Uncensor" msgstr "Ikke sensurer lenger" -#: ../../mod/admin.php:866 +#: ../../mod/admin.php:950 msgid "UID" msgstr "UID" -#: ../../mod/admin.php:868 +#: ../../mod/admin.php:952 msgid "" "Selected channels will be deleted!\\n\\nEverything that was posted in these " "channels on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "Valgte kanaler vil bli slettet!\\n\\nAlt innhold som er lagt inn i disse kanalene på dette nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette disse kanalene med alt innhold?" -#: ../../mod/admin.php:869 +#: ../../mod/admin.php:953 msgid "" "The channel {0} will be deleted!\\n\\nEverything that was posted in this " "channel on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "Kanalen {0} vil bli slettet!\\n\\nAlt innhold som er lagt inn i denne kanalen på dettet nettstedet vil bli slettet for alltid!\\n\\nEr du sikker på at du vil slette denne kanalen med alt innhold?" -#: ../../mod/admin.php:908 +#: ../../mod/admin.php:993 #, php-format msgid "Plugin %s disabled." msgstr "Tilleggsfunksjonen %s er avskrudd." -#: ../../mod/admin.php:912 +#: ../../mod/admin.php:997 #, php-format msgid "Plugin %s enabled." msgstr "Tilleggsfunksjonen %s er påskrudd." -#: ../../mod/admin.php:922 ../../mod/admin.php:1124 +#: ../../mod/admin.php:1007 ../../mod/admin.php:1205 msgid "Disable" msgstr "Skru av" -#: ../../mod/admin.php:924 ../../mod/admin.php:1126 +#: ../../mod/admin.php:1010 ../../mod/admin.php:1207 msgid "Enable" msgstr "Skru på" -#: ../../mod/admin.php:950 ../../mod/admin.php:1155 +#: ../../mod/admin.php:1034 ../../mod/admin.php:1234 msgid "Toggle" msgstr "Skru av og på" -#: ../../mod/admin.php:958 ../../mod/admin.php:1165 +#: ../../mod/admin.php:1042 ../../mod/admin.php:1244 msgid "Author: " msgstr "Forfatter:" -#: ../../mod/admin.php:959 ../../mod/admin.php:1166 +#: ../../mod/admin.php:1043 ../../mod/admin.php:1245 msgid "Maintainer: " msgstr "Vedlikeholder:" -#: ../../mod/admin.php:1088 +#: ../../mod/admin.php:1170 msgid "No themes found." msgstr "Ingen temaer er funnet." -#: ../../mod/admin.php:1147 +#: ../../mod/admin.php:1226 msgid "Screenshot" msgstr "Skjermbilde" -#: ../../mod/admin.php:1195 +#: ../../mod/admin.php:1273 msgid "[Experimental]" msgstr "[Eksperimentelt]" -#: ../../mod/admin.php:1196 +#: ../../mod/admin.php:1274 msgid "[Unsupported]" msgstr "[Ingen støtte]" -#: ../../mod/admin.php:1223 +#: ../../mod/admin.php:1298 msgid "Log settings updated." msgstr "Logginnstillinger er oppdatert." -#: ../../mod/admin.php:1279 +#: ../../mod/admin.php:1353 msgid "Clear" msgstr "Tøm" -#: ../../mod/admin.php:1285 +#: ../../mod/admin.php:1359 msgid "Debugging" msgstr "Feilsøking" -#: ../../mod/admin.php:1286 +#: ../../mod/admin.php:1360 msgid "Log file" msgstr "Loggfil" -#: ../../mod/admin.php:1286 +#: ../../mod/admin.php:1360 msgid "" "Must be writable by web server. Relative to your Red top-level directory." msgstr "Må kunne skrives til av webtjenesten. Relativ til din Red sin toppnivåkatalog." -#: ../../mod/admin.php:1287 +#: ../../mod/admin.php:1361 msgid "Log level" msgstr "Loggnivå" -#: ../../mod/admin.php:1334 +#: ../../mod/admin.php:1407 msgid "New Profile Field" msgstr "Nytt profilfelt" -#: ../../mod/admin.php:1335 ../../mod/admin.php:1356 +#: ../../mod/admin.php:1408 ../../mod/admin.php:1428 msgid "Field nickname" msgstr "Feltets kallenavn" -#: ../../mod/admin.php:1335 ../../mod/admin.php:1356 +#: ../../mod/admin.php:1408 ../../mod/admin.php:1428 msgid "System name of field" msgstr "Systemnavnet til feltet" -#: ../../mod/admin.php:1336 ../../mod/admin.php:1357 +#: ../../mod/admin.php:1409 ../../mod/admin.php:1429 msgid "Input type" msgstr "Inndata-type" -#: ../../mod/admin.php:1337 ../../mod/admin.php:1358 +#: ../../mod/admin.php:1410 ../../mod/admin.php:1430 msgid "Field Name" msgstr "Feltnavn" -#: ../../mod/admin.php:1337 ../../mod/admin.php:1358 +#: ../../mod/admin.php:1410 ../../mod/admin.php:1430 msgid "Label on profile pages" msgstr "Merkelapp på profilsider" -#: ../../mod/admin.php:1338 ../../mod/admin.php:1359 +#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 msgid "Help text" msgstr "Hjelpetekst" -#: ../../mod/admin.php:1338 ../../mod/admin.php:1359 +#: ../../mod/admin.php:1411 ../../mod/admin.php:1431 msgid "Additional info (optional)" msgstr "Tilleggsinformasjon (valgfritt)" -#: ../../mod/admin.php:1349 +#: ../../mod/admin.php:1421 msgid "Field definition not found" msgstr "Feltdefinisjonen ble ikke funnet" -#: ../../mod/admin.php:1355 +#: ../../mod/admin.php:1427 msgid "Edit Profile Field" msgstr "Endre profilfelt" -#: ../../mod/item.php:159 -msgid "Unable to locate original post." -msgstr "Ikke i stand til å finne opprinnelig innlegg." +#: ../../mod/oexchange.php:23 +msgid "Unable to find your hub." +msgstr "Ikke i stand til å finne hubben din." -#: ../../mod/item.php:418 -msgid "Empty post discarded." -msgstr "Tomt innlegg forkastet." +#: ../../mod/oexchange.php:37 +msgid "Post successful." +msgstr "Innlegg vellykket." -#: ../../mod/item.php:460 -msgid "Executable content type not permitted to this channel." -msgstr "Kjørbar innholdstype er ikke tillat for denne kanalen." +#: ../../mod/editblock.php:115 +msgid "Edit Block" +msgstr "Endre byggekloss" -#: ../../mod/item.php:898 -msgid "System error. Post not saved." -msgstr "Systemfeil. Innlegg ble ikke lagret." +#: ../../mod/editblock.php:125 +msgid "Delete block?" +msgstr "Slett byggeklossen?" + +#: ../../mod/editblock.php:188 +msgid "Delete Block" +msgstr "Slett byggekloss" + +#: ../../mod/register.php:44 +msgid "Maximum daily site registrations exceeded. Please try again tomorrow." +msgstr "Antallet daglige registreringer ved nettstedet er overskredet. Vær vennlig å prøve igjen imorgen." + +#: ../../mod/register.php:50 +msgid "" +"Please indicate acceptance of the Terms of Service. Registration failed." +msgstr "Vennligst angi at tjenesteavtalen er akseptert. Registrering mislyktes." + +#: ../../mod/register.php:84 +msgid "Passwords do not match." +msgstr "Passordene er ikke like." + +#: ../../mod/register.php:117 +msgid "" +"Registration successful. Please check your email for validation " +"instructions." +msgstr "Registreringen er vellykket. Vennligst sjekk e-posten din for å bekrefte opprettelsen." -#: ../../mod/item.php:1373 +#: ../../mod/register.php:123 +msgid "Your registration is pending approval by the site owner." +msgstr "Din registrering venter på godkjenning av nettstedets eier." + +#: ../../mod/register.php:126 +msgid "Your registration can not be processed." +msgstr "Din registrering kan ikke behandles." + +#: ../../mod/register.php:163 +msgid "Registration on this site/hub is by approval only." +msgstr "Registrering på dette nettstedet/denne hubben skjer bare gjennom godkjenning." + +#: ../../mod/register.php:164 +msgid "<a href=\"pubsites\">Register at another affiliated site/hub</a>" +msgstr "<a href=\"pubsites\">Registrer på et annet tilknyttet nettsted/hub</a>" + +#: ../../mod/register.php:174 +msgid "" +"This site has exceeded the number of allowed daily account registrations. " +"Please try again tomorrow." +msgstr "Dette nettstedet har overskredet antallet tillate kontoregistreringer per dag. Vennligst prøv igjen imorgen." + +#: ../../mod/register.php:185 +msgid "Terms of Service" +msgstr "Tjenesteavtale" + +#: ../../mod/register.php:191 #, php-format -msgid "You have reached your limit of %1$.0f top level posts." -msgstr "Du har nådd din grense på %1$.0f startinnlegg." +msgid "I accept the %s for this website" +msgstr "Jeg godtar %s for dette nettstedet" -#: ../../mod/item.php:1379 +#: ../../mod/register.php:193 #, php-format -msgid "You have reached your limit of %1$.0f webpages." -msgstr "Du har nådd din grense på %1$.0f websider." +msgid "I am over 13 years of age and accept the %s for this website" +msgstr "Jeg er over 13 år gammel og aksepterer %s for dette nettstedet." -#: ../../mod/like.php:15 -msgid "Like/Dislike" -msgstr "Liker/Liker ikke" +#: ../../mod/register.php:212 +msgid "Membership on this site is by invitation only." +msgstr "Medlemskap ved dette nettstedet skjer kun via invitasjon." -#: ../../mod/like.php:20 -msgid "This action is restricted to members." -msgstr "Denne handlingen er begrenset til medlemmer." +#: ../../mod/register.php:213 +msgid "Please enter your invitation code" +msgstr "Vennligst skriv din invitasjonskode" -#: ../../mod/like.php:21 +#: ../../mod/register.php:216 +msgid "Your email address" +msgstr "Din e-postadresse" + +#: ../../mod/register.php:217 +msgid "Choose a password" +msgstr "Velg et passord" + +#: ../../mod/register.php:218 +msgid "Please re-enter your password" +msgstr "Vennligst skriv ditt passord en gang til" + +#: ../../mod/removeaccount.php:30 msgid "" -"Please <a href=\"rmagic\">login with your RedMatrix ID</a> or <a " -"href=\"register\">register as a new RedMatrix member</a> to continue." -msgstr "Vennligst <a href=\"rmagic\">logg inn med din RedMatrix ID</a> eller <a href=\"register\">registrer deg som et nytt RedMatrix-medlem</a> for å fortsette" +"Account removals are not allowed within 48 hours of changing the account " +"password." +msgstr "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet." -#: ../../mod/like.php:77 ../../mod/like.php:104 ../../mod/like.php:142 -msgid "Invalid request." -msgstr "Ugyldig forespørsel." +#: ../../mod/removeaccount.php:57 +msgid "Remove This Account" +msgstr "Slett denne kontoen" -#: ../../mod/like.php:119 -msgid "thing" -msgstr "ting" +#: ../../mod/removeaccount.php:58 ../../mod/removeme.php:58 +msgid "WARNING: " +msgstr "ADVARSEL:" -#: ../../mod/like.php:165 -msgid "Channel unavailable." -msgstr "Kanalen er utilgjengelig." +#: ../../mod/removeaccount.php:58 +msgid "" +"This account and all its channels will be completely removed from the " +"network. " +msgstr "Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra nettverket." -#: ../../mod/like.php:204 -msgid "Previous action reversed." -msgstr "Forrige handling er omgjort." +#: ../../mod/removeaccount.php:58 ../../mod/removeme.php:58 +msgid "This action is permanent and can not be undone!" +msgstr "Denne handlingen er permanent og kan ikke angres!" -#: ../../mod/like.php:430 -msgid "Action completed." -msgstr "Handling ferdig." +#: ../../mod/removeaccount.php:59 ../../mod/removeme.php:59 +msgid "Please enter your password for verification:" +msgstr "Vennligst skriv ditt passord for å få bekreftelse:" -#: ../../mod/like.php:431 -msgid "Thank you." -msgstr "Tusen takk." +#: ../../mod/removeaccount.php:60 +msgid "" +"Remove this account, all its channels and all its channel clones from the " +"network" +msgstr "Slett denne kontoen, alle dens kanaler og alle dens kanalkloner fra dette nettverket" -#: ../../mod/invite.php:25 -msgid "Total invitation limit exceeded." -msgstr "Grensen for totalt antall invitasjoner er overskredet." +#: ../../mod/removeaccount.php:60 +msgid "" +"By default only the instances of the channels located on this hub will be " +"removed from the network" +msgstr "Som standard vil bare forekomster av kanalene lokalisert på denne hubben bli slettet fra nettverket" -#: ../../mod/invite.php:49 -#, php-format -msgid "%s : Not a valid email address." -msgstr "%s : ikke en gyldig e-postadresse." +#: ../../mod/update_channel.php:43 ../../mod/update_display.php:25 +#: ../../mod/update_network.php:23 ../../mod/update_search.php:46 +#: ../../mod/update_home.php:21 +msgid "[Embedded content - reload page to view]" +msgstr "[Innebygget innhold - last siden på nytt for å se]" -#: ../../mod/invite.php:76 -msgid "Please join us on Red" -msgstr "Bli med oss på Red" +#: ../../mod/photos.php:77 +msgid "Page owner information could not be retrieved." +msgstr "Informasjon om sideeier kunne ikke hentes." -#: ../../mod/invite.php:87 -msgid "Invitation limit exceeded. Please contact your site administrator." -msgstr "Invitasjonsgrensen er overskredet. Vennligst kontakt administratoren ved ditt nettsted." +#: ../../mod/photos.php:97 +msgid "Album not found." +msgstr "Albumet ble ikke funnet." -#: ../../mod/invite.php:92 +#: ../../mod/photos.php:119 ../../mod/photos.php:643 +msgid "Delete Album" +msgstr "Slett album" + +#: ../../mod/photos.php:159 ../../mod/photos.php:930 +msgid "Delete Photo" +msgstr "Slett bilde" + +#: ../../mod/photos.php:440 +msgid "No photos selected" +msgstr "Ingen bilder valgt" + +#: ../../mod/photos.php:484 +msgid "Access to this item is restricted." +msgstr "Tilgang til dette elementet er begrenset." + +#: ../../mod/photos.php:523 #, php-format -msgid "%s : Message delivery failed." -msgstr "%s : meldingslevering feilet." +msgid "%1$.2f MB of %2$.2f MB photo storage used." +msgstr "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt." -#: ../../mod/invite.php:96 +#: ../../mod/photos.php:526 #, php-format -msgid "%d message sent." -msgid_plural "%d messages sent." -msgstr[0] "%d melding sendt." -msgstr[1] "%d meldinger sendt." +msgid "%1$.2f MB photo storage used." +msgstr "%1$.2f MB lagringsplass til bilder er brukt." -#: ../../mod/invite.php:115 -msgid "You have no more invitations available" -msgstr "Du har ikke flere invitasjoner tilgjengelig" +#: ../../mod/photos.php:550 +msgid "Upload Photos" +msgstr "Last opp bilder" -#: ../../mod/invite.php:129 -msgid "Send invitations" -msgstr "Send invitasjoner" +#: ../../mod/photos.php:554 ../../mod/photos.php:636 ../../mod/photos.php:915 +msgid "Enter a new album name" +msgstr "Skriv et nytt albumnavn" -#: ../../mod/invite.php:130 -msgid "Enter email addresses, one per line:" -msgstr "Skriv e-postadresser, en per linje:" +#: ../../mod/photos.php:555 ../../mod/photos.php:637 ../../mod/photos.php:916 +msgid "or select an existing one (doubleclick)" +msgstr "eller velg et eksisterende album (dobbeltklikk)" -#: ../../mod/invite.php:131 ../../mod/mail.php:228 ../../mod/mail.php:341 -msgid "Your message:" -msgstr "Din melding:" +#: ../../mod/photos.php:556 +msgid "Create a status post for this upload" +msgstr "Lag et statusinnlegg for denne opplastingen" -#: ../../mod/invite.php:132 -msgid "Please join my community on RedMatrix." -msgstr "Du er velkommen til å bli med i mitt fellesskap på RedMatrix." +#: ../../mod/photos.php:584 +msgid "Album name could not be decoded" +msgstr "Albumnavnet kunne ikke dekodes" -#: ../../mod/invite.php:134 -msgid "You will need to supply this invitation code: " -msgstr "Du må oppgi denne invitasjonskoden:" +#: ../../mod/photos.php:625 ../../mod/photos.php:1157 +#: ../../mod/photos.php:1173 +msgid "Contact Photos" +msgstr "Kontaktbilder" -#: ../../mod/invite.php:135 -msgid "1. Register at any RedMatrix location (they are all inter-connected)" -msgstr "1. Registrer ved enhver RedMatrix-lokasjon (de er alle forbundet med hverandre)" +#: ../../mod/photos.php:649 +msgid "Show Newest First" +msgstr "Vis nyeste først" -#: ../../mod/invite.php:137 -msgid "2. Enter my RedMatrix network address into the site searchbar." -msgstr "2. Skriv inn min RedMatrix-adresse i nettstedets søkefelt." +#: ../../mod/photos.php:651 +msgid "Show Oldest First" +msgstr "Vis eldste først" -#: ../../mod/invite.php:138 -msgid "or visit " -msgstr "eller besøk" +#: ../../mod/photos.php:675 ../../mod/photos.php:1205 +msgid "View Photo" +msgstr "Vis foto" -#: ../../mod/invite.php:140 -msgid "3. Click [Connect]" -msgstr "3. Klikk [Forbindelse]" +#: ../../mod/photos.php:704 +msgid "Edit Album" +msgstr "Endre album" -#: ../../mod/locs.php:19 ../../mod/locs.php:46 -msgid "Location not found." -msgstr "Plassering er ikke funnet." +#: ../../mod/photos.php:749 +msgid "Permission denied. Access to this item may be restricted." +msgstr "Tillatelse avvist. Tilgang til dette elementet kan være begrenset." -#: ../../mod/locs.php:50 -msgid "Primary location cannot be removed." -msgstr "Primær plassering kan ikke fjernes." +#: ../../mod/photos.php:751 +msgid "Photo not available" +msgstr "Bilde er utilgjengelig" -#: ../../mod/locs.php:82 -msgid "No locations found." -msgstr "Ingen plasseringer ble funnet." +#: ../../mod/photos.php:809 +msgid "Use as profile photo" +msgstr "Bruk som profilbilde" -#: ../../mod/locs.php:95 -msgid "Manage Channel Locations" -msgstr "Håndter kanalplasseringer" +#: ../../mod/photos.php:816 +msgid "Private Photo" +msgstr "Privat bilde" -#: ../../mod/locs.php:96 -msgid "Location (address)" -msgstr "Plassering (adresse)" +#: ../../mod/photos.php:831 +msgid "View Full Size" +msgstr "Vis i full størrelse" -#: ../../mod/locs.php:97 -msgid "Primary Location" -msgstr "Hovedplassering" +#: ../../mod/photos.php:909 +msgid "Edit photo" +msgstr "Endre bilde" -#: ../../mod/locs.php:98 -msgid "Drop location" -msgstr "Slett plassering" +#: ../../mod/photos.php:911 +msgid "Rotate CW (right)" +msgstr "Roter med klokka (mot høyre)" -#: ../../mod/update_channel.php:43 ../../mod/update_display.php:25 -#: ../../mod/update_network.php:23 ../../mod/update_search.php:46 -msgid "[Embedded content - reload page to view]" -msgstr "[Innebygget innhold - last siden på nytt for å se]" +#: ../../mod/photos.php:912 +msgid "Rotate CCW (left)" +msgstr "Roter mot klokka (venstre)" -#: ../../mod/layouts.php:110 -msgid "Help with this feature" -msgstr "Hjelp med denne funksjonen" +#: ../../mod/photos.php:919 +msgid "Caption" +msgstr "Overskrift" -#: ../../mod/layouts.php:130 -msgid "Layout Name" -msgstr "Layout-navn" +#: ../../mod/photos.php:921 +msgid "Add a Tag" +msgstr "Legg til merkelapp" -#: ../../mod/lockview.php:31 -msgid "Remote privacy information not available." -msgstr "Ekstern personverninformasjon er ikke tilgjengelig." +#: ../../mod/photos.php:925 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" +msgstr "Eksempel: @bob, @Barbara_Jensen, @jim@example.com" -#: ../../mod/lockview.php:52 -msgid "Visible to:" -msgstr "Synlig for:" +#: ../../mod/photos.php:928 +msgid "Flag as adult in album view" +msgstr "Flag som voksent i albumvisning" -#: ../../mod/viewconnections.php:58 -msgid "No connections." -msgstr "Ingen forbindelser." +#: ../../mod/photos.php:1120 +msgid "In This Photo:" +msgstr "I dette bildet:" -#: ../../mod/viewconnections.php:71 -#, php-format -msgid "Visit %s's profile [%s]" -msgstr "Besøk %s sin profil [%s]" +#: ../../mod/photos.php:1125 +msgid "Map" +msgstr "Kart" -#: ../../mod/viewconnections.php:86 -msgid "View Connnections" -msgstr "Vis forbindelser" +#: ../../mod/photos.php:1211 +msgid "View Album" +msgstr "Vis album" -#: ../../mod/magic.php:70 -msgid "Hub not found." -msgstr "Hubben ble ikke funnet." +#: ../../mod/photos.php:1234 +msgid "Recent Photos" +msgstr "Nye bilder" + +#: ../../mod/post.php:234 +msgid "" +"Remote authentication blocked. You are logged into this site locally. Please" +" logout and retry." +msgstr "Fjernautentisering blokkert. Du er logget inn på dette nettstedet lokalt. Vennligst logg ut og prøv på nytt." + +#: ../../mod/message.php:41 +msgid "Conversation removed." +msgstr "Samtale fjernet." + +#: ../../mod/message.php:56 +msgid "No messages." +msgstr "Ingen meldinger." + +#: ../../mod/message.php:72 ../../mod/mail.php:336 +msgid "Delete conversation" +msgstr "Slett samtale" + +#: ../../mod/message.php:74 +msgid "D, d M Y - g:i A" +msgstr "D, d M Y - g:i A" + +#: ../../mod/mitem.php:67 +msgid "Menu element updated." +msgstr "Menyelement er oppdatert." + +#: ../../mod/mitem.php:71 +msgid "Unable to update menu element." +msgstr "Ikke i stand til å oppdatere menyelement." + +#: ../../mod/mitem.php:77 +msgid "Menu element added." +msgstr "Menyelement lagt til." + +#: ../../mod/mitem.php:81 +msgid "Unable to add menu element." +msgstr "Ikke i stand til å legge til menyelement." + +#: ../../mod/mitem.php:127 +msgid "Manage Menu Elements" +msgstr "Håndtere menyelementer" + +#: ../../mod/mitem.php:130 +msgid "Edit menu" +msgstr "Endre meny" + +#: ../../mod/mitem.php:133 +msgid "Edit element" +msgstr "Endre element" + +#: ../../mod/mitem.php:134 +msgid "Drop element" +msgstr "Slett element" + +#: ../../mod/mitem.php:135 +msgid "New element" +msgstr "Nytt element" + +#: ../../mod/mitem.php:136 +msgid "Edit this menu container" +msgstr "Endre denne menybeholderen" + +#: ../../mod/mitem.php:137 +msgid "Add menu element" +msgstr "Legg til menyelement" + +#: ../../mod/mitem.php:138 +msgid "Delete this menu item" +msgstr "Slett dette menyelementet" + +#: ../../mod/mitem.php:139 +msgid "Edit this menu item" +msgstr "Endre dette menyelementet" + +#: ../../mod/mitem.php:158 +msgid "New Menu Element" +msgstr "Nytt menyelement" + +#: ../../mod/mitem.php:160 ../../mod/mitem.php:203 +msgid "Menu Item Permissions" +msgstr "Menyelement Tillatelser" + +#: ../../mod/mitem.php:163 ../../mod/mitem.php:207 +msgid "Link text" +msgstr "Lenketekst" + +#: ../../mod/mitem.php:164 ../../mod/mitem.php:208 +msgid "URL of link" +msgstr "URL-en til lenken" + +#: ../../mod/mitem.php:165 ../../mod/mitem.php:209 +msgid "Use RedMatrix magic-auth if available" +msgstr "Bruk RedMatrixs magiske-autentisering hvis tilgjengelig" + +#: ../../mod/mitem.php:166 ../../mod/mitem.php:210 +msgid "Open link in new window" +msgstr "Åpne lenke i nytt vindu" + +#: ../../mod/mitem.php:168 ../../mod/mitem.php:212 +msgid "Order in list" +msgstr "Ordne i liste" + +#: ../../mod/mitem.php:168 ../../mod/mitem.php:212 +msgid "Higher numbers will sink to bottom of listing" +msgstr "Høyere tall vil synke mot bunnen av listen" + +#: ../../mod/mitem.php:181 +msgid "Menu item not found." +msgstr "Menyelement ble ikke funnet." + +#: ../../mod/mitem.php:190 +msgid "Menu item deleted." +msgstr "Menyelement slettet." + +#: ../../mod/mitem.php:192 +msgid "Menu item could not be deleted." +msgstr "Menyelement kunne ikke bli slettet." + +#: ../../mod/mitem.php:201 +msgid "Edit Menu Element" +msgstr "Endre menyelement" + +#: ../../mod/mood.php:131 +msgid "Set your current mood and tell your friends" +msgstr "Angi ditt nåværende humør og fortell dine venner" #: ../../mod/vote.php:97 msgid "Total votes" @@ -7634,6 +8258,64 @@ msgstr "Totalt antall stemmer" msgid "Average Rating" msgstr "Gjennomsnittlig vurdering" +#: ../../mod/removeme.php:29 +msgid "" +"Channel removals are not allowed within 48 hours of changing the account " +"password." +msgstr "Fjerning av kanaler er ikke tillatt innen 48 timer etter endring av kontopassordet." + +#: ../../mod/removeme.php:57 +msgid "Remove This Channel" +msgstr "Fjern denne kanalen" + +#: ../../mod/removeme.php:58 +msgid "This channel will be completely removed from the network. " +msgstr "Denne kanalen vil bli fullstendig fjernet fra nettverket." + +#: ../../mod/removeme.php:60 +msgid "Remove this channel and all its clones from the network" +msgstr "Fjern denne kanalen og alle dens kloner fra nettverket" + +#: ../../mod/removeme.php:60 +msgid "" +"By default only the instance of the channel located on this hub will be " +"removed from the network" +msgstr "Som standard vil bare forekomsten av denne kanalen lokalisert på denne hubben bli fjernet fra nettverket" + +#: ../../mod/layouts.php:110 +msgid "Help with this feature" +msgstr "Hjelp med denne funksjonen" + +#: ../../mod/layouts.php:130 +msgid "Layout Name" +msgstr "Layout-navn" + +#: ../../mod/rmagic.php:40 +msgid "" +"We encountered a problem while logging in with the OpenID you provided. " +"Please check the correct spelling of the ID." +msgstr "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig." + +#: ../../mod/rmagic.php:40 +msgid "The error message was:" +msgstr "Feilmeldingen var:" + +#: ../../mod/rmagic.php:44 +msgid "Authentication failed." +msgstr "Autentisering mislyktes." + +#: ../../mod/rmagic.php:84 +msgid "Remote Authentication" +msgstr "Fjernautentisering" + +#: ../../mod/rmagic.php:85 +msgid "Enter your channel address (e.g. channel@example.com)" +msgstr "Skriv din kanaladresse (for eksempel channel@exampel.com)" + +#: ../../mod/rmagic.php:86 +msgid "Authenticate" +msgstr "Autentiser" + #: ../../mod/mail.php:33 msgid "Unable to lookup recipient." msgstr "Ikke i stand til å slå opp mottaker." @@ -7650,183 +8332,95 @@ msgstr "Kan ikke bekrefte forespurt kanal." msgid "Selected channel has private message restrictions. Send failed." msgstr "Valgt kanal har restriksjoner for private meldinger. Sending feilet." -#: ../../mod/mail.php:135 +#: ../../mod/mail.php:139 msgid "Message deleted." msgstr "Melding slettet." -#: ../../mod/mail.php:152 +#: ../../mod/mail.php:156 msgid "Message recalled." msgstr "Innlegg tilbakekalt." -#: ../../mod/mail.php:218 +#: ../../mod/mail.php:225 msgid "Send Private Message" msgstr "Send privat melding" -#: ../../mod/mail.php:219 ../../mod/mail.php:336 +#: ../../mod/mail.php:226 ../../mod/mail.php:343 msgid "To:" msgstr "Til:" -#: ../../mod/mail.php:224 ../../mod/mail.php:338 +#: ../../mod/mail.php:231 ../../mod/mail.php:345 msgid "Subject:" msgstr "Emne:" -#: ../../mod/mail.php:235 +#: ../../mod/mail.php:242 msgid "Send" msgstr "Send" -#: ../../mod/mail.php:262 +#: ../../mod/mail.php:269 msgid "Message not found." msgstr "Melding ikke funnet." -#: ../../mod/mail.php:305 +#: ../../mod/mail.php:312 msgid "Delete message" msgstr "Slett melding" -#: ../../mod/mail.php:306 +#: ../../mod/mail.php:313 msgid "Recall message" msgstr "Tilbakekall innlegg" -#: ../../mod/mail.php:308 +#: ../../mod/mail.php:315 msgid "Message has been recalled." msgstr "Innlegget har blitt tilbakekalt." -#: ../../mod/mail.php:325 +#: ../../mod/mail.php:332 msgid "Private Conversation" msgstr "Privat samtale" -#: ../../mod/mail.php:329 ../../mod/message.php:72 -msgid "Delete conversation" -msgstr "Slett samtale" - -#: ../../mod/mail.php:331 +#: ../../mod/mail.php:338 msgid "" "No secure communications available. You <strong>may</strong> be able to " "respond from the sender's profile page." msgstr "Ingen sikret kommunikasjon tilgjengelig. Du kan <strong>muligens</strong> greie å svare via senderens profilside." -#: ../../mod/mail.php:335 +#: ../../mod/mail.php:342 msgid "Send Reply" msgstr "Send svar" -#: ../../mod/wall_upload.php:34 -msgid "Wall Photos" -msgstr "Veggbilder" - -#: ../../mod/match.php:16 -msgid "Profile Match" -msgstr "Profiltreff" - -#: ../../mod/match.php:24 -msgid "No keywords to match. Please add keywords to your default profile." -msgstr "Ingen nøkkelord å sammenlikne. Vennligst legg til nøkkelord til din standardprofil." - -#: ../../mod/match.php:61 -msgid "is interested in:" -msgstr "er interessert i:" - -#: ../../mod/match.php:69 -msgid "No matches" -msgstr "Ingen treff" - -#: ../../mod/menu.php:31 -msgid "Menu updated." -msgstr "Menyen er oppdatert." - -#: ../../mod/menu.php:35 -msgid "Unable to update menu." -msgstr "Ikke i stand til å oppdatere meny." - -#: ../../mod/menu.php:40 -msgid "Menu created." -msgstr "Meny laget." - -#: ../../mod/menu.php:44 -msgid "Unable to create menu." -msgstr "Ikke i stand til å lage meny." - -#: ../../mod/menu.php:76 -msgid "Manage Menus" -msgstr "Håndtere menyer" - -#: ../../mod/menu.php:79 -msgid "Drop" -msgstr "Slett" - -#: ../../mod/menu.php:81 -msgid "Bookmarks allowed" -msgstr "Bokmerker tillatt" - -#: ../../mod/menu.php:82 -msgid "Create a new menu" -msgstr "Lag en ny meny" - -#: ../../mod/menu.php:83 -msgid "Delete this menu" -msgstr "Slett denne menyen" - -#: ../../mod/menu.php:84 ../../mod/menu.php:125 -msgid "Edit menu contents" -msgstr "Endre menyinnholdet" - -#: ../../mod/menu.php:85 -msgid "Edit this menu" -msgstr "Endre denne menyen" - -#: ../../mod/menu.php:96 -msgid "New Menu" -msgstr "Ny meny" - -#: ../../mod/menu.php:97 ../../mod/menu.php:126 -msgid "Menu name" -msgstr "Menynavn" - -#: ../../mod/menu.php:97 ../../mod/menu.php:126 -msgid "Must be unique, only seen by you" -msgstr "Må være unik, ses bare av deg" - -#: ../../mod/menu.php:98 ../../mod/menu.php:127 -msgid "Menu title" -msgstr "Menytittel" - -#: ../../mod/menu.php:98 ../../mod/menu.php:127 -msgid "Menu title as seen by others" -msgstr "Menytittelen andre ser" - -#: ../../mod/menu.php:99 ../../mod/menu.php:128 -msgid "Allow bookmarks" -msgstr "Tillat bokmerker" +#: ../../mod/notifications.php:26 +msgid "Invalid request identifier." +msgstr "Ugyldig forespørselsidentifikator." -#: ../../mod/menu.php:99 ../../mod/menu.php:128 -msgid "Menu may be used to store saved bookmarks" -msgstr "Menyen kan brukes til å lagre lagrede bokmerker" +#: ../../mod/notifications.php:35 +msgid "Discard" +msgstr "Forkast" -#: ../../mod/menu.php:114 -msgid "Menu deleted." -msgstr "Meny slettet." +#: ../../mod/regmod.php:11 +msgid "Please login." +msgstr "Vennligst logg inn." -#: ../../mod/menu.php:116 -msgid "Menu could not be deleted." -msgstr "Menyen kunne ikke bli slettet." +#: ../../mod/network.php:90 +msgid "No such group" +msgstr "Gruppen finnes ikke" -#: ../../mod/menu.php:122 -msgid "Edit Menu" -msgstr "Endre meny" +#: ../../mod/network.php:128 +msgid "Search Results For:" +msgstr "Søkeresultat for:" -#: ../../mod/menu.php:124 -msgid "Add or remove entries to this menu" -msgstr "Legg til eller fjern punkter i denne menyen" +#: ../../mod/network.php:182 +msgid "Collection is empty" +msgstr "Samlingen er tom" -#: ../../mod/message.php:41 -msgid "Conversation removed." -msgstr "Samtale fjernet." +#: ../../mod/network.php:190 +msgid "Collection: " +msgstr "Samling:" -#: ../../mod/message.php:56 -msgid "No messages." -msgstr "Ingen meldinger." +#: ../../mod/network.php:203 +msgid "Connection: " +msgstr "Forbindelse:" -#: ../../mod/message.php:74 -msgid "D, d M Y - g:i A" -msgstr "D, d M Y - g:i A" +#: ../../mod/network.php:206 +msgid "Invalid connection." +msgstr "Ugyldig forbindelse." #: ../../mod/new_channel.php:109 msgid "Add a Channel" @@ -7859,59 +8453,18 @@ msgid "Or <a href=\"import\">import an existing channel</a> from another locatio msgstr "Eller <a href=\"import\">importerer en eksisterende kanal</a> fra et annet sted." #: ../../mod/new_channel.php:118 -msgid "Channel Type" -msgstr "Kanaltype" - -#: ../../mod/new_channel.php:119 msgid "" "Please choose a channel type (such as social networking or community forum) " "and privacy requirements so we can select the best permissions for you" msgstr "Vennligst velg en kanaltype (for eksempel sosialt nettverk eller forum for felleskap) og krav til personvern slik at vi kan velge de beste tillatelsene for deg." -#: ../../mod/home.php:46 -msgid "Red Matrix - "The Network"" -msgstr "Red Matrix - "Nettverket"" - -#: ../../mod/home.php:101 -#, php-format -msgid "Welcome to %s" -msgstr "Velkommen til %s" - -#: ../../mod/notifications.php:26 -msgid "Invalid request identifier." -msgstr "Ugyldig forespørselsidentifikator." - -#: ../../mod/notifications.php:35 -msgid "Discard" -msgstr "Forkast" - -#: ../../mod/notifications.php:94 ../../mod/notify.php:53 -msgid "No more system notifications." -msgstr "Ingen flere systemvarsler." - -#: ../../mod/notifications.php:98 ../../mod/notify.php:57 -msgid "System Notifications" -msgstr "Systemvarsler" - -#: ../../mod/xchan.php:6 -msgid "Xchan Lookup" -msgstr "Xchan oppslag" - -#: ../../mod/xchan.php:9 -msgid "Lookup xchan beginning with (or webbie): " -msgstr "Slå opp xchan som begynner med (eller webbie):" - -#: ../../mod/oexchange.php:23 -msgid "Unable to find your hub." -msgstr "Ikke i stand til å finne hubben din." - -#: ../../mod/oexchange.php:37 -msgid "Post successful." -msgstr "Innlegg vellykket." +#: ../../mod/new_channel.php:119 +msgid "Channel Type" +msgstr "Kanaltype" -#: ../../mod/zfinger.php:23 -msgid "invalid target signature" -msgstr "Målets signatur er ugyldig" +#: ../../mod/new_channel.php:119 +msgid "Read more about roles" +msgstr "Les mer om roller" #: ../../mod/appman.php:28 ../../mod/appman.php:44 msgid "App installed." @@ -7961,46 +8514,64 @@ msgstr "Pris på app" msgid "Location (URL) to purchase app" msgstr "Plassering (URL) for å kjøpe app" -#: ../../mod/poll.php:64 -msgid "Poll" -msgstr "Spørring" +#: ../../mod/ping.php:263 +msgid "sent you a private message" +msgstr "sendte deg en privat melding" -#: ../../mod/poll.php:69 -msgid "View Results" -msgstr "Vis resultater" +#: ../../mod/ping.php:314 +msgid "added your channel" +msgstr "la til din kanal" -#: ../../mod/removeaccount.php:30 -msgid "" -"Account removals are not allowed within 48 hours of changing the account " -"password." -msgstr "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet." +#: ../../mod/ping.php:355 +msgid "posted an event" +msgstr "la ut en hendelse" -#: ../../mod/removeaccount.php:57 -msgid "Remove This Account" -msgstr "Slett denne kontoen" +#: ../../mod/bookmarks.php:38 +msgid "Bookmark added" +msgstr "Bokmerke lagt til" -#: ../../mod/removeaccount.php:58 -msgid "" -"This will completely remove this account including all its channels from the" -" network. Once this has been done it is not recoverable." -msgstr "Dette vil fullstendig slette denne kontoen inkludert alle dens kanaler fra nettverket. Når dette er gjort kan det ikke angres." +#: ../../mod/bookmarks.php:60 +msgid "My Bookmarks" +msgstr "Mine bokmerker" -#: ../../mod/removeaccount.php:60 -msgid "" -"Remove this account, all its channels and all its channel clones from the " -"network" -msgstr "Slett denne kontoen, alle dens kanaler og alle dens kanalkloner fra dette nettverket" +#: ../../mod/bookmarks.php:71 +msgid "My Connections Bookmarks" +msgstr "Mine forbindelsers bokmerker" -#: ../../mod/removeaccount.php:60 +#: ../../mod/channel.php:92 +msgid "Insufficient permissions. Request redirected to profile page." +msgstr "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden." + +#: ../../mod/suggest.php:35 msgid "" -"By default only the instances of the channels located on this hub will be " -"removed from the network" -msgstr "Som standard vil bare forekomster av kanalene lokalisert på denne hubben bli slettet fra nettverket" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." +msgstr "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer." + +#: ../../mod/poll.php:64 +msgid "Poll" +msgstr "Spørring" + +#: ../../mod/poll.php:69 +msgid "View Results" +msgstr "Vis resultater" #: ../../mod/service_limits.php:19 msgid "No service class restrictions found." msgstr "Ingen restriksjoner er funnet i tjenesteklasse." +#: ../../mod/sharedwithme.php:99 +msgid "Files: shared with me" +msgstr "Filer: delt med meg" + +#: ../../mod/sharedwithme.php:103 +msgid "Remove all files" +msgstr "Fjern alle filer" + +#: ../../mod/sharedwithme.php:104 +msgid "Remove this file" +msgstr "Fjern denne filen" + #: ../../view/theme/apw/php/config.php:202 #: ../../view/theme/apw/php/config.php:236 msgid "Schema Default" @@ -8015,19 +8586,16 @@ msgid "Monospace" msgstr "Monospace" #: ../../view/theme/apw/php/config.php:259 -#: ../../view/theme/blogga/php/config.php:69 -#: ../../view/theme/blogga/view/theme/blog/config.php:69 -#: ../../view/theme/redbasic/php/config.php:102 +#: ../../view/theme/redbasic/php/config.php:100 msgid "Theme settings" msgstr "Temainnstillinger" #: ../../view/theme/apw/php/config.php:260 -#: ../../view/theme/redbasic/php/config.php:103 msgid "Set scheme" msgstr "Angi skjema" #: ../../view/theme/apw/php/config.php:261 -#: ../../view/theme/redbasic/php/config.php:124 +#: ../../view/theme/redbasic/php/config.php:122 msgid "Set font-size for posts and comments" msgstr "Angi skriftstørrelse for innlegg og kommentarer" @@ -8147,180 +8715,179 @@ msgstr "Til venstre for sidestolpen" msgid "Right offset of the aside element" msgstr "Til høyre for sidestolpen" -#: ../../view/theme/blogga/php/config.php:47 -#: ../../view/theme/blogga/view/theme/blog/config.php:47 -msgid "None" -msgstr "Ingen" - -#: ../../view/theme/blogga/php/config.php:70 -#: ../../view/theme/blogga/view/theme/blog/config.php:70 -msgid "Header image" -msgstr "Topptekstbilde" - -#: ../../view/theme/blogga/php/config.php:71 -#: ../../view/theme/blogga/view/theme/blog/config.php:71 -msgid "Header image only on profile pages" -msgstr "Topptekstbilde bare på profilsider" - -#: ../../view/theme/redbasic/php/config.php:84 +#: ../../view/theme/redbasic/php/config.php:82 msgid "Light (Red Matrix default)" msgstr "Lys (Red Matrix standard)" -#: ../../view/theme/redbasic/php/config.php:104 +#: ../../view/theme/redbasic/php/config.php:101 +msgid "Select scheme" +msgstr "Velg skjema" + +#: ../../view/theme/redbasic/php/config.php:102 msgid "Narrow navbar" msgstr "Smal navigasjonslinje" -#: ../../view/theme/redbasic/php/config.php:105 +#: ../../view/theme/redbasic/php/config.php:103 msgid "Navigation bar background color" msgstr "Navigasjonslinjens bakgrunnsfarge" -#: ../../view/theme/redbasic/php/config.php:106 +#: ../../view/theme/redbasic/php/config.php:104 msgid "Navigation bar gradient top color" msgstr "Navigasjonslinjens graderte toppfarge" -#: ../../view/theme/redbasic/php/config.php:107 +#: ../../view/theme/redbasic/php/config.php:105 msgid "Navigation bar gradient bottom color" msgstr "Navigasjonslinjens graderte bunnfarge" -#: ../../view/theme/redbasic/php/config.php:108 +#: ../../view/theme/redbasic/php/config.php:106 msgid "Navigation active button gradient top color" msgstr "Aktiv navigasjonsknapp sin graderte toppfarge" -#: ../../view/theme/redbasic/php/config.php:109 +#: ../../view/theme/redbasic/php/config.php:107 msgid "Navigation active button gradient bottom color" msgstr "Aktiv navigasjonsknapp sin graderte bunnfarge" -#: ../../view/theme/redbasic/php/config.php:110 +#: ../../view/theme/redbasic/php/config.php:108 msgid "Navigation bar border color " msgstr "Navigasjonslinjens kantfarge" -#: ../../view/theme/redbasic/php/config.php:111 +#: ../../view/theme/redbasic/php/config.php:109 msgid "Navigation bar icon color " msgstr "Navigasjonslinjens ikonfarge" -#: ../../view/theme/redbasic/php/config.php:112 +#: ../../view/theme/redbasic/php/config.php:110 msgid "Navigation bar active icon color " msgstr "Navigasjonslinjens aktive ikoners farge" -#: ../../view/theme/redbasic/php/config.php:113 +#: ../../view/theme/redbasic/php/config.php:111 msgid "link color" msgstr "lenkefarge" -#: ../../view/theme/redbasic/php/config.php:114 +#: ../../view/theme/redbasic/php/config.php:112 msgid "Set font-color for banner" msgstr "Angi skriftfargen for banneret" -#: ../../view/theme/redbasic/php/config.php:115 +#: ../../view/theme/redbasic/php/config.php:113 msgid "Set the background color" msgstr "Angi bakgrunnsfargen" -#: ../../view/theme/redbasic/php/config.php:116 +#: ../../view/theme/redbasic/php/config.php:114 msgid "Set the background image" msgstr "Angi bakgrunnsbilde" -#: ../../view/theme/redbasic/php/config.php:117 +#: ../../view/theme/redbasic/php/config.php:115 msgid "Set the background color of items" msgstr "Angi bakgrunnsfargen til elementer" -#: ../../view/theme/redbasic/php/config.php:118 +#: ../../view/theme/redbasic/php/config.php:116 msgid "Set the background color of comments" msgstr "Angi bakgrunnsfargen til kommentarer" -#: ../../view/theme/redbasic/php/config.php:119 +#: ../../view/theme/redbasic/php/config.php:117 msgid "Set the border color of comments" msgstr "Angi kantfargen til kommentarer" -#: ../../view/theme/redbasic/php/config.php:120 +#: ../../view/theme/redbasic/php/config.php:118 msgid "Set the indent for comments" msgstr "Angi innrykket til kommentarer" -#: ../../view/theme/redbasic/php/config.php:121 +#: ../../view/theme/redbasic/php/config.php:119 msgid "Set the basic color for item icons" msgstr "Angi grunnfargen for elementikoner" -#: ../../view/theme/redbasic/php/config.php:122 +#: ../../view/theme/redbasic/php/config.php:120 msgid "Set the hover color for item icons" msgstr "Angi fargen til elementikoner ved berøring" -#: ../../view/theme/redbasic/php/config.php:123 +#: ../../view/theme/redbasic/php/config.php:121 msgid "Set font-size for the entire application" msgstr "Angi skriftstørrelsen for hele programmet" -#: ../../view/theme/redbasic/php/config.php:125 +#: ../../view/theme/redbasic/php/config.php:121 +msgid "Example: 14px" +msgstr "Eksempel: 14px" + +#: ../../view/theme/redbasic/php/config.php:123 msgid "Set font-color for posts and comments" msgstr "Angi skriftfargen for innlegg og kommentarer" -#: ../../view/theme/redbasic/php/config.php:126 +#: ../../view/theme/redbasic/php/config.php:124 msgid "Set radius of corners" msgstr "Angi hjørneradius" -#: ../../view/theme/redbasic/php/config.php:127 +#: ../../view/theme/redbasic/php/config.php:125 msgid "Set shadow depth of photos" msgstr "Angi skyggedybden til bilder" -#: ../../view/theme/redbasic/php/config.php:128 -msgid "Set maximum width of conversation regions" -msgstr "Angi største bredde for samtaleregioner" +#: ../../view/theme/redbasic/php/config.php:126 +msgid "Set maximum width of content region in pixel" +msgstr "Angi største bredde for innholdsregionen i pixler" -#: ../../view/theme/redbasic/php/config.php:129 -msgid "Center conversation regions" -msgstr "Midtstill samtaleregionene" +#: ../../view/theme/redbasic/php/config.php:126 +msgid "Leave empty for default width" +msgstr "La feltet stå tomt for å bruke standard bredde" -#: ../../view/theme/redbasic/php/config.php:130 +#: ../../view/theme/redbasic/php/config.php:127 +msgid "Center page content" +msgstr "Midtstill sideinnhold" + +#: ../../view/theme/redbasic/php/config.php:128 msgid "Set minimum opacity of nav bar - to hide it" msgstr "Angi minste dekkevne for navigasjonslinjen - for å skjule den" -#: ../../view/theme/redbasic/php/config.php:131 +#: ../../view/theme/redbasic/php/config.php:129 msgid "Set size of conversation author photo" msgstr "Angi størrelsen for samtalens forfatterbilde" -#: ../../view/theme/redbasic/php/config.php:132 +#: ../../view/theme/redbasic/php/config.php:130 msgid "Set size of followup author photos" msgstr "Angi størrelsen på forfatterbilder ved oppfølging" -#: ../../view/theme/redbasic/php/config.php:133 -msgid "Sloppy photo albums" -msgstr "Slurvete fotoalbum" - -#: ../../view/theme/redbasic/php/config.php:133 -msgid "Are you a clean desk or a messy desk person?" -msgstr "Er du en person med ryddig arbeidsbord eller et rotete arbeidsbord?" - -#: ../../boot.php:1293 +#: ../../boot.php:1357 #, php-format msgid "Update %s failed. See error logs." msgstr "Oppdatering %s mislyktes. Se feilloggen." -#: ../../boot.php:1296 +#: ../../boot.php:1360 #, php-format msgid "Update Error at %s" msgstr "Oppdateringsfeil ved %s" -#: ../../boot.php:1463 +#: ../../boot.php:1527 msgid "" "Create an account to access services and applications within the Red Matrix" msgstr "Lag en konto for å få tilgang til tjenester og programmer i Red Matrix" -#: ../../boot.php:1489 +#: ../../boot.php:1555 msgid "Password" msgstr "Passord" -#: ../../boot.php:1490 +#: ../../boot.php:1556 msgid "Remember me" msgstr "Husk meg" -#: ../../boot.php:1493 +#: ../../boot.php:1559 msgid "Forgot your password?" msgstr "Glemt passordet ditt?" -#: ../../boot.php:1567 -msgid "permission denied" -msgstr "tillatelse avvist" - -#: ../../boot.php:1568 -msgid "Got Zot?" -msgstr "Har du Zot?" - -#: ../../boot.php:2030 +#: ../../boot.php:2182 msgid "toggle mobile" msgstr "Skru på mobil" + +#: ../../boot.php:2314 +msgid "Website SSL certificate is not valid. Please correct." +msgstr "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette." + +#: ../../boot.php:2317 +#, php-format +msgid "[red] Website SSL error for %s" +msgstr "[red] SSL-feil ved nettsted hos %s" + +#: ../../boot.php:2355 +msgid "Cron/Scheduled tasks not running." +msgstr "Cron/planlagte oppgaver kjører ikke." + +#: ../../boot.php:2359 +#, php-format +msgid "[red] Cron tasks not running on %s" +msgstr "[red] Cron-oppgaver kjører ikke på %s" diff --git a/view/nb-no/strings.php b/view/nb-no/strings.php index 45172963c..df6ff8bc7 100644 --- a/view/nb-no/strings.php +++ b/view/nb-no/strings.php @@ -7,6 +7,149 @@ function string_plural_select_nb_no($n){ ; $a->strings["Cannot locate DNS info for database server '%s'"] = "Kan ikke finne DNS-informasjon om databasetjener '%s'"; $a->strings["Profile Photos"] = "Profilbilder"; +$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn."; +$a->strings["created a new post"] = "laget et nytt innlegg"; +$a->strings["commented on %s's post"] = "kommenterte på %s sitt innlegg"; +$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."] = "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn."; +$a->strings["Default privacy group for new contacts"] = "Standard personverngruppe for nye kontakter"; +$a->strings["All Channels"] = "Alle kanaler"; +$a->strings["edit"] = "endre"; +$a->strings["Collections"] = "Samlinger"; +$a->strings["Edit collection"] = "Endre samling"; +$a->strings["Create a new collection"] = "Lag en ny samling"; +$a->strings["Channels not in any collection"] = "Kanaler som ikke er i noen samling"; +$a->strings["add"] = "legg til"; +$a->strings["Image/photo"] = "Bilde/fotografi"; +$a->strings["Encrypted content"] = "Kryptert innhold"; +$a->strings["Install design element: "] = "Installer designelement:"; +$a->strings["QR code"] = "QR-kode"; +$a->strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s skrev følgende %2\$s %3\$s"; +$a->strings["post"] = "innlegg"; +$a->strings["Different viewers will see this text differently"] = "Denne teksten vil se forskjellig ut for ulike besøkende"; +$a->strings["$1 spoiler"] = "$1 avsløring"; +$a->strings["$1 wrote:"] = "$1 skrev:"; +$a->strings["Unable to obtain identity information from database"] = "Klarer ikke å få tak i identitetsinformasjon fra databasen"; +$a->strings["Empty name"] = "Mangler navn"; +$a->strings["Name too long"] = "Navnet er for langt"; +$a->strings["No account identifier"] = "Ingen kontoidentifikator"; +$a->strings["Nickname is required."] = "Kallenavn er påkrevd."; +$a->strings["Reserved nickname. Please choose another."] = "Reservert kallenavn. Vennligst velg et annet."; +$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk på dette nettstedet."; +$a->strings["Unable to retrieve created identity"] = "Klarer ikke å hente den lagede identiteten"; +$a->strings["Default Profile"] = "Standardprofil"; +$a->strings["Friends"] = "Venner"; +$a->strings["Requested channel is not available."] = "Forespurt kanal er ikke tilgjengelig."; +$a->strings["Requested profile is not available."] = "Forespurt profil er ikke tilgjengelig."; +$a->strings["Connect"] = "Koble"; +$a->strings["Change profile photo"] = "Endre profilbilde"; +$a->strings["Profiles"] = "Profiler"; +$a->strings["Manage/edit profiles"] = "Håndtere/endre profiler"; +$a->strings["Create New Profile"] = "Lag ny profil"; +$a->strings["Edit Profile"] = "Endre profil"; +$a->strings["Profile Image"] = "Profilbilde"; +$a->strings["visible to everybody"] = "synlig for alle"; +$a->strings["Edit visibility"] = "Endre synlighet"; +$a->strings["Location:"] = "Plassering:"; +$a->strings["Gender:"] = "Kjønn:"; +$a->strings["Status:"] = "Status:"; +$a->strings["Homepage:"] = "Hjemmeside:"; +$a->strings["Online Now"] = "Online nå"; +$a->strings["g A l F d"] = "g A l F d"; +$a->strings["F d"] = "F d"; +$a->strings["[today]"] = "[idag]"; +$a->strings["Birthday Reminders"] = "Fødselsdagspåminnnelser"; +$a->strings["Birthdays this week:"] = "Fødselsdager denne uken:"; +$a->strings["[No description]"] = "[Ingen beskrivelse]"; +$a->strings["Event Reminders"] = "Hendelsespåminnelser"; +$a->strings["Events this week:"] = "Hendelser denne uken:"; +$a->strings["Profile"] = "Profil"; +$a->strings["Full Name:"] = "Fullt navn:"; +$a->strings["Like this channel"] = "Lik denne kanalen"; +$a->strings["__ctx:noun__ Like"] = array( + 0 => "Liker", + 1 => "Liker", +); +$a->strings["j F, Y"] = "j F, Y"; +$a->strings["j F"] = "j F"; +$a->strings["Birthday:"] = "Fødselsdag:"; +$a->strings["Age:"] = "Alder:"; +$a->strings["for %1\$d %2\$s"] = "for %1\$d %2\$s"; +$a->strings["Sexual Preference:"] = "Seksuell preferanse:"; +$a->strings["Hometown:"] = "Hjemby:"; +$a->strings["Tags:"] = "Merkelapper:"; +$a->strings["Political Views:"] = "Politiske synspunkter:"; +$a->strings["Religion:"] = "Religion:"; +$a->strings["About:"] = "Om:"; +$a->strings["Hobbies/Interests:"] = "Hobbyer/interesser:"; +$a->strings["Likes:"] = "Liker:"; +$a->strings["Dislikes:"] = "Misliker:"; +$a->strings["Contact information and Social Networks:"] = "Kontaktinformasjon og sosiale nettverk:"; +$a->strings["My other channels:"] = "Mine andre kanaler:"; +$a->strings["Musical interests:"] = "Musikkinteresse:"; +$a->strings["Books, literature:"] = "Bøker, litteratur:"; +$a->strings["Television:"] = "TV:"; +$a->strings["Film/dance/culture/entertainment:"] = "Film/dans/kultur/underholdning:"; +$a->strings["Love/Romance:"] = "Kjærlighet/romantikk:"; +$a->strings["Work/employment:"] = "Arbeid/sysselsetting:"; +$a->strings["School/education:"] = "Skole/utdannelse:"; +$a->strings["Like this thing"] = "Lik denne tingen"; +$a->strings["New Page"] = "Ny side"; +$a->strings["Edit"] = "Endre"; +$a->strings["View"] = "Vis"; +$a->strings["Preview"] = "Forhåndsvisning"; +$a->strings["Actions"] = "Handlinger"; +$a->strings["Page Link"] = "Sidelenke"; +$a->strings["Title"] = "Tittel"; +$a->strings["Created"] = "Laget"; +$a->strings["Edited"] = "Endret"; +$a->strings["Categories"] = "Kategorier"; +$a->strings["Apps"] = "Apper"; +$a->strings["System"] = "System"; +$a->strings["Personal"] = "Personlig"; +$a->strings["Create Personal App"] = "Lag personlig app"; +$a->strings["Edit Personal App"] = "Endre personlig app"; +$a->strings["Ignore/Hide"] = "Ignorer/Skjul"; +$a->strings["Suggestions"] = "Forslag"; +$a->strings["See more..."] = "Se mer..."; +$a->strings["You have %1$.0f of %2$.0f allowed connections."] = "Du har %1$.0f av %2$.0f tillate forbindelser."; +$a->strings["Add New Connection"] = "Legg til ny forbindelse"; +$a->strings["Enter the channel address"] = "Skriv kanal-adressen"; +$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Eksempel: ola.nordmann@eksempel.no, http://eksempel.no/karinordmann"; +$a->strings["Notes"] = "Merknader"; +$a->strings["Save"] = "Lagre"; +$a->strings["Remove term"] = "Fjern begrep"; +$a->strings["Saved Searches"] = "Lagrede søk"; +$a->strings["Saved Folders"] = "Lagrede mapper"; +$a->strings["Everything"] = "Alt"; +$a->strings["Archives"] = "Arkiv"; +$a->strings["Refresh"] = "Forny"; +$a->strings["Me"] = "Meg"; +$a->strings["Best Friends"] = "Bestevenner"; +$a->strings["Co-workers"] = "Medarbeidere"; +$a->strings["Former Friends"] = "Tidligere venner"; +$a->strings["Acquaintances"] = "Bekjente"; +$a->strings["Everybody"] = "Alle"; +$a->strings["Account settings"] = "Kontoinnstillinger"; +$a->strings["Channel settings"] = "Kanalinnstillinger"; +$a->strings["Additional features"] = "Tilleggsfunksjoner"; +$a->strings["Feature/Addon settings"] = "Funksjons-/Tilleggsinnstillinger"; +$a->strings["Display settings"] = "Visningsinnstillinger"; +$a->strings["Connected apps"] = "Tilkoblede app-er"; +$a->strings["Export channel"] = "Eksporter kanal"; +$a->strings["Connection Default Permissions"] = "Forbindelsens standard tillatelser"; +$a->strings["Premium Channel Settings"] = "Premiumkanal-innstillinger"; +$a->strings["Channel Sources"] = "Kanalkilder"; +$a->strings["Settings"] = "Innstillinger"; +$a->strings["Messages"] = "Meldinger"; +$a->strings["Check Mail"] = "Sjekk meldinger"; +$a->strings["New Message"] = "Ny melding"; +$a->strings["Chat Rooms"] = "Chatrom"; +$a->strings["Bookmarked Chatrooms"] = "Bokmerkede chatrom"; +$a->strings["Suggested Chatrooms"] = "Foreslåtte chatrom"; +$a->strings["photo/image"] = "foto/bilde"; +$a->strings["Rate Me"] = "Vurder meg"; +$a->strings["View Ratings"] = "Vis vurderinger"; +$a->strings["Public Hubs"] = "Offentlige huber"; $a->strings["photo"] = "foto"; $a->strings["event"] = "hendelse"; $a->strings["channel"] = "kanal"; @@ -18,6 +161,14 @@ $a->strings["%1\$s is now connected with %2\$s"] = "%1\$s er nå forbundet med % $a->strings["%1\$s poked %2\$s"] = "%1\$s prikket %2\$s"; $a->strings["poked"] = "prikket"; $a->strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s er %2\$s"; +$a->strings["__ctx:title__ Likes"] = "Liker"; +$a->strings["__ctx:title__ Dislikes"] = "Liker ikke"; +$a->strings["__ctx:title__ Agree"] = "Enig"; +$a->strings["__ctx:title__ Disagree"] = "Uenig"; +$a->strings["__ctx:title__ Abstain"] = "Avstår"; +$a->strings["__ctx:title__ Attending"] = "Deltar"; +$a->strings["__ctx:title__ Not attending"] = "Deltar ikke"; +$a->strings["__ctx:title__ Might attend"] = "Deltar kanskje"; $a->strings["Select"] = "Velg"; $a->strings["Delete"] = "Slett"; $a->strings["Private Message"] = "Privat melding"; @@ -40,7 +191,6 @@ $a->strings["View Status"] = "Vis status"; $a->strings["View Profile"] = "Vis profil"; $a->strings["View Photos"] = "Vis bilder"; $a->strings["Matrix Activity"] = "Matrix-aktivitet"; -$a->strings["Connect"] = "Koble"; $a->strings["Edit Contact"] = "Endre kontakt"; $a->strings["Send PM"] = "Send privat melding"; $a->strings["Poke"] = "Prikk"; @@ -70,10 +220,14 @@ $a->strings["Tag term:"] = "Merkelapp:"; $a->strings["Save to Folder:"] = "Lagre til mappe:"; $a->strings["Where are you right now?"] = "Hvor er du akkurat nå?"; $a->strings["Expires YYYY-MM-DD HH:MM"] = "Utløper YYYY-MM-DD HH:MM"; -$a->strings["Preview"] = "Forhåndsvisning"; $a->strings["Share"] = "Del"; $a->strings["Page link title"] = "Sidens lenketittel"; $a->strings["Post as"] = "Lag innlegg som"; +$a->strings["Bold"] = "Uthevet"; +$a->strings["Italic"] = "Kursiv"; +$a->strings["Underline"] = "Understreket"; +$a->strings["Quote"] = "Sitat"; +$a->strings["Code"] = "Kode"; $a->strings["Upload photo"] = "Last opp bilde"; $a->strings["upload photo"] = "last opp bilde"; $a->strings["Attach file"] = "Legg ved fil"; @@ -86,10 +240,11 @@ $a->strings["Insert audio link"] = "Sett inn lenke til lyd"; $a->strings["audio link"] = "lenke til lyd"; $a->strings["Set your location"] = "Angi din plassering"; $a->strings["set location"] = "angi plassering"; +$a->strings["Toggle voting"] = "Skru av eller på stemming"; $a->strings["Clear browser location"] = "Fjern nettleserplassering"; $a->strings["clear location"] = "fjern plassering"; -$a->strings["Set title"] = "Angi tittel"; -$a->strings["Categories (comma-separated list)"] = "Kategorier (kommaseparert liste)"; +$a->strings["Title (optional)"] = "Tittel (valgfri)"; +$a->strings["Categories (optional, comma-separated list)"] = "Kategorier (valgfri, kommaseparert liste)"; $a->strings["Permission settings"] = "Tillatelser - innstillinger"; $a->strings["permissions"] = "tillatelser"; $a->strings["Public post"] = "Offentlig innlegg"; @@ -104,7 +259,6 @@ $a->strings["Commented Order"] = "Kommentert"; $a->strings["Sort by Comment Date"] = "Sorter etter kommentert dato"; $a->strings["Posted Order"] = "Lagt inn"; $a->strings["Sort by Post Date"] = "Sorter etter innleggsdato"; -$a->strings["Personal"] = "Personlig"; $a->strings["Posts that mention or involve you"] = "Innlegg som nevner eller involverer deg"; $a->strings["New"] = "Nye"; $a->strings["Activity Stream - by date"] = "Aktivitetsstrøm - etter dato"; @@ -125,91 +279,104 @@ $a->strings["Bookmarks"] = "Bokmerker"; $a->strings["Saved Bookmarks"] = "Lagrede bokmerker"; $a->strings["Webpages"] = "Websider"; $a->strings["Manage Webpages"] = "Håndtere websider"; -$a->strings["created a new post"] = "laget et nytt innlegg"; -$a->strings["commented on %s's post"] = "kommenterte på %s sitt innlegg"; -$a->strings["Sort Options"] = "Sorteringsmuligheter"; -$a->strings["Alphabetic"] = "Alfabetisk"; -$a->strings["Reverse Alphabetic"] = "Omvendt alfabetisk"; -$a->strings["Newest to Oldest"] = "Nyest til eldst"; -$a->strings["Enable Safe Search"] = "Skru på Trygt søk"; -$a->strings["Disable Safe Search"] = "Skru av Trygt søk"; -$a->strings["Safe Mode"] = "Trygt modus"; -$a->strings["New Page"] = "Ny side"; -$a->strings["Edit"] = "Endre"; -$a->strings["View"] = "Vis"; -$a->strings["Actions"] = "Handlinger"; -$a->strings["Page Link"] = "Sidelenke"; -$a->strings["Title"] = "Tittel"; -$a->strings["Created"] = "Laget"; -$a->strings["Edited"] = "Endret"; -$a->strings["Missing room name"] = "Mangler romnavn"; -$a->strings["Duplicate room name"] = "Duplikat romnavn"; -$a->strings["Invalid room specifier."] = "Ugyldig rom-spesifisering"; -$a->strings["Room not found."] = "Rommet ble ikke funnet."; +$a->strings["View all"] = "Vis alle"; +$a->strings["__ctx:noun__ Dislike"] = array( + 0 => "Liker ikke", + 1 => "Liker ikke", +); +$a->strings["__ctx:noun__ Attending"] = array( + 0 => "Deltar", + 1 => "Deltar", +); +$a->strings["__ctx:noun__ Not Attending"] = array( + 0 => "Deltar ikke", + 1 => "Deltar ikke", +); +$a->strings["__ctx:noun__ Undecided"] = array( + 0 => "Ikke bestemt", + 1 => "Ikke bestemt", +); +$a->strings["__ctx:noun__ Agree"] = array( + 0 => "Enig", + 1 => "Enige", +); +$a->strings["__ctx:noun__ Disagree"] = array( + 0 => "Uenig", + 1 => "Uenige", +); +$a->strings["__ctx:noun__ Abstain"] = array( + 0 => "Avstår", + 1 => "Avstår", +); $a->strings["Permission denied."] = "Tillatelse avslått."; -$a->strings["Room is full"] = "Rommet er fullt"; -$a->strings["Embedded content"] = "Innebygget innhold"; -$a->strings["Embedding disabled"] = "Innbygging avskrudd"; -$a->strings["Categories"] = "Kategorier"; -$a->strings["Apps"] = "Apper"; -$a->strings["System"] = "System"; -$a->strings["Create Personal App"] = "Lag personlig app"; -$a->strings["Edit Personal App"] = "Endre personlig app"; -$a->strings["Ignore/Hide"] = "Ignorer/Skjul"; -$a->strings["Suggestions"] = "Forslag"; -$a->strings["See more..."] = "Se mer..."; -$a->strings["You have %1$.0f of %2$.0f allowed connections."] = "Du har %1$.0f av %2$.0f tillate forbindelser."; -$a->strings["Add New Connection"] = "Legg til ny forbindelse"; -$a->strings["Enter the channel address"] = "Skriv kanal-adressen"; -$a->strings["Example: bob@example.com, http://example.com/barbara"] = "Eksempel: ola.nordmann@eksempel.no, http://eksempel.no/karinordmann"; -$a->strings["Notes"] = "Merknader"; -$a->strings["Save"] = "Lagre"; -$a->strings["Remove term"] = "Fjern begrep"; -$a->strings["Saved Searches"] = "Lagrede søk"; -$a->strings["add"] = "legg til"; -$a->strings["Saved Folders"] = "Lagrede mapper"; -$a->strings["Everything"] = "Alt"; -$a->strings["Archives"] = "Arkiv"; -$a->strings["Refresh"] = "Forny"; -$a->strings["Me"] = "Meg"; -$a->strings["Best Friends"] = "Bestevenner"; -$a->strings["Friends"] = "Venner"; -$a->strings["Co-workers"] = "Medarbeidere"; -$a->strings["Former Friends"] = "Tidligere venner"; -$a->strings["Acquaintances"] = "Bekjente"; -$a->strings["Everybody"] = "Alle"; -$a->strings["Account settings"] = "Kontoinnstillinger"; -$a->strings["Channel settings"] = "Kanalinnstillinger"; -$a->strings["Additional features"] = "Tilleggsfunksjoner"; -$a->strings["Feature settings"] = "Funksjonsinnstillinger"; -$a->strings["Display settings"] = "Visningsinnstillinger"; -$a->strings["Connected apps"] = "Tilkoblede app-er"; -$a->strings["Export channel"] = "Eksporter kanal"; -$a->strings["Export content"] = "Eksporter innhold"; -$a->strings["Connection Default Permissions"] = "Forbindelsens standard tillatelser"; -$a->strings["Premium Channel Settings"] = "Premiumkanal-innstillinger"; -$a->strings["Channel Sources"] = "Kanalkilder"; -$a->strings["Settings"] = "Innstillinger"; -$a->strings["Messages"] = "Meldinger"; -$a->strings["Check Mail"] = "Sjekk meldinger"; -$a->strings["New Message"] = "Ny melding"; -$a->strings["Chat Rooms"] = "Chatrom"; -$a->strings["Bookmarked Chatrooms"] = "Bokmerkede chatrom"; -$a->strings["Suggested Chatrooms"] = "Foreslåtte chatrom"; -$a->strings["Invalid data packet"] = "Ugyldig datapakke"; -$a->strings["Unable to verify channel signature"] = "Ikke i stand til å sjekke kanalsignaturen"; -$a->strings["Unable to verify site signature for %s"] = "Ikke i stand til å bekrefte signaturen til %s"; -$a->strings[" and "] = "og"; -$a->strings["public profile"] = "offentlig profil"; -$a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s endret %2\$s til “%3\$s”"; -$a->strings["Visit %1\$s's %2\$s"] = "Besøk %1\$s sitt %2\$s"; -$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s har oppdatert %2\$s, endret %3\$s."; -$a->strings["Attachments:"] = "Vedlegg:"; -$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; -$a->strings["Redmatrix event notification:"] = "RedMatrix hendelsesvarsling:"; -$a->strings["Starts:"] = "Starter:"; -$a->strings["Finishes:"] = "Slutter:"; -$a->strings["Location:"] = "Plassering:"; +$a->strings["Item was not found."] = "Elementet ble ikke funnet."; +$a->strings["No source file."] = "Ingen kildefil."; +$a->strings["Cannot locate file to replace"] = "Kan ikke finne filen som skal byttes ut"; +$a->strings["Cannot locate file to revise/update"] = "Finner ikke filen som skal revideres/oppdateres"; +$a->strings["File exceeds size limit of %d"] = "Filens størrelse overgår grensen på %d"; +$a->strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes."; +$a->strings["File upload failed. Possible system limit or action terminated."] = "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt."; +$a->strings["Stored file could not be verified. Upload failed."] = "Lagret fil kunne ikke bekreftes. Opplasting mislyktes."; +$a->strings["Path not available."] = "Stien er ikke tilgjengelig."; +$a->strings["Empty pathname"] = "Tomt sti-navn"; +$a->strings["duplicate filename or path"] = "duplikat av filnavn eller sti"; +$a->strings["Path not found."] = "Stien ble ikke funnet."; +$a->strings["mkdir failed."] = "mkdir mislyktes."; +$a->strings["database storage failed."] = "databaselagring mislyktes."; +$a->strings["Not a valid email address"] = "Ikke en gyldig e-postadresse"; +$a->strings["Your email domain is not among those allowed on this site"] = "Ditt e-postdomene er ikke blant de som er tillatt på dette stedet"; +$a->strings["Your email address is already registered at this site."] = "Din e-postadresse er allerede registrert på dette nettstedet."; +$a->strings["An invitation is required."] = "En invitasjon er påkrevd."; +$a->strings["Invitation could not be verified."] = "Invitasjon kunne ikke bekreftes."; +$a->strings["Please enter the required information."] = "Vennligst skriv inn nødvendig informasjon."; +$a->strings["Failed to store account information."] = "Mislyktes med å lagre kontoinformasjon."; +$a->strings["Registration confirmation for %s"] = "Registreringsbekreftelse for %s"; +$a->strings["Registration request at %s"] = "Registreringsforespørsel hos %s"; +$a->strings["Administrator"] = "Administrator"; +$a->strings["your registration password"] = "ditt registreringspassord"; +$a->strings["Registration details for %s"] = "Registreringsdetaljer for %s"; +$a->strings["Account approved."] = "Konto godkjent."; +$a->strings["Registration revoked for %s"] = "Registrering trukket tilbake for %s"; +$a->strings["Account verified. Please login."] = "Konto bekreftet. Vennligst logg inn."; +$a->strings["Click here to upgrade."] = "Klikk her for å oppgradere."; +$a->strings["This action exceeds the limits set by your subscription plan."] = "Denne handlingen går utenfor grensene satt i din abonnementsplan."; +$a->strings["This action is not available under your subscription plan."] = "Denne handlingen er ikke tilgjengelig i din abonnementsplan."; +$a->strings["Delete this item?"] = "Slett dette elementet?"; +$a->strings["Comment"] = "Kommentar"; +$a->strings["[+] show all"] = "[+] Vis alle"; +$a->strings["[-] show less"] = "[-] Vis mindre"; +$a->strings["[+] expand"] = "[+] Utvid"; +$a->strings["[-] collapse"] = "[-] Lukk"; +$a->strings["Password too short"] = "Passordet er for kort"; +$a->strings["Passwords do not match"] = "Passordene er ikke like"; +$a->strings["everybody"] = "alle"; +$a->strings["Secret Passphrase"] = "Hemmelig passordsetning"; +$a->strings["Passphrase hint"] = "Hint om passordsetning"; +$a->strings["Notice: Permissions have changed but have not yet been submitted."] = "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn."; +$a->strings["close all"] = "Lukk alle"; +$a->strings["Nothing new here"] = "Ikke noe nytt her"; +$a->strings["Rate This Channel (this is public)"] = "Vurder denne kanalen (dette er offentlig)"; +$a->strings["Rating"] = "Vurdering"; +$a->strings["Describe (optional)"] = "Beskriv (valgfritt)"; +$a->strings["Submit"] = "Send"; +$a->strings["Please enter a link URL"] = "Vennligst skriv inn en lenke URL:"; +$a->strings["timeago.prefixAgo"] = "timeago.prefixAgo"; +$a->strings["timeago.prefixFromNow"] = "timeago.prefixFromNow"; +$a->strings["ago"] = "siden"; +$a->strings["from now"] = "fra nå"; +$a->strings["less than a minute"] = "mindre enn ett minutt"; +$a->strings["about a minute"] = "omtrent et minutt"; +$a->strings["%d minutes"] = "%d minutter"; +$a->strings["about an hour"] = "omtrent en time"; +$a->strings["about %d hours"] = "omtrent %d timer"; +$a->strings["a day"] = "en dag"; +$a->strings["%d days"] = "%d dager"; +$a->strings["about a month"] = "omtrent en måned"; +$a->strings["%d months"] = "%d måneder"; +$a->strings["about a year"] = "omtrent et år"; +$a->strings["%d years"] = "%d år"; +$a->strings[" "] = " "; +$a->strings["timeago.numbers"] = "timeago.numbers"; $a->strings["parent"] = "opp et nivå"; $a->strings["Collection"] = "Samling"; $a->strings["Principal"] = "Viktigste"; @@ -219,224 +386,18 @@ $a->strings["Schedule Inbox"] = "Tidsplan innboks"; $a->strings["Schedule Outbox"] = "Tidsplan utboks"; $a->strings["%1\$s used"] = "%1\$s brukt"; $a->strings["%1\$s used of %2\$s (%3\$s%)"] = "%1\$s brukt av %2\$s (%3\$s%)"; +$a->strings["Total"] = "Totalt"; +$a->strings["Shared"] = "Delt"; +$a->strings["Create"] = "Lag"; +$a->strings["Upload"] = "Last opp"; $a->strings["Name"] = "Navn"; $a->strings["Type"] = "Type"; $a->strings["Size"] = "Størrelse"; $a->strings["Last Modified"] = "Sist endret"; -$a->strings["Total"] = "Totalt"; $a->strings["Create new folder"] = "Lag ny mappe"; -$a->strings["Create"] = "Lag"; $a->strings["Upload file"] = "Last opp fil"; -$a->strings["Upload"] = "Last opp"; $a->strings["%1\$s's bookmarks"] = "%1\$s sine bokmerker"; -$a->strings["Channel is blocked on this site."] = "Kanalen er blokkert på dette nettstedet."; -$a->strings["Channel location missing."] = "Kanalplassering mangler."; -$a->strings["Response from remote channel was incomplete."] = "Svaret fra den andre kanalen var ikke komplett."; -$a->strings["Channel was deleted and no longer exists."] = "Kanalen er slettet og finnes ikke lenger."; -$a->strings["Protocol disabled."] = "Protokollen er avskrudd."; -$a->strings["Channel discovery failed."] = "Kanaloppdagelse mislyktes."; -$a->strings["local account not found."] = "lokal konto ble ikke funnet."; -$a->strings["Cannot connect to yourself."] = "Kan ikke lage forbindelse med deg selv."; $a->strings["Default"] = "Standard"; -$a->strings["Frequently"] = "Ofte"; -$a->strings["Hourly"] = "Hver time"; -$a->strings["Twice daily"] = "To ganger daglig"; -$a->strings["Daily"] = "Daglig"; -$a->strings["Weekly"] = "Ukentlig"; -$a->strings["Monthly"] = "Månedlig"; -$a->strings["Friendica"] = "Friendica"; -$a->strings["OStatus"] = "OStatus"; -$a->strings["RSS/Atom"] = "RSS/Atom"; -$a->strings["Email"] = "E-post"; -$a->strings["Diaspora"] = "Diaspora"; -$a->strings["Facebook"] = "Facebook"; -$a->strings["Zot!"] = "Zot!"; -$a->strings["LinkedIn"] = "LinkedIn"; -$a->strings["XMPP/IM"] = "XMPP/IM"; -$a->strings["MySpace"] = "MySpace"; -$a->strings["%d invitation available"] = array( - 0 => "%d invitasjon tilgjengelig", - 1 => "%d invitasjoner tilgjengelig", -); -$a->strings["Advanced"] = "Avansert"; -$a->strings["Find Channels"] = "Finn kanaler"; -$a->strings["Enter name or interest"] = "Skriv navn eller interesse"; -$a->strings["Connect/Follow"] = "Forbindelse/Følg"; -$a->strings["Examples: Robert Morgenstein, Fishing"] = "Eksempler: Ola Nordmann, fisking"; -$a->strings["Find"] = "Finn"; -$a->strings["Channel Suggestions"] = "Kanalforslag"; -$a->strings["Random Profile"] = "Tilfeldig profil"; -$a->strings["Invite Friends"] = "Inviter venner"; -$a->strings["Advanced example: name=fred and country=iceland"] = "Avansert eksempel: navn=fred og land=island"; -$a->strings["%d connection in common"] = array( - 0 => "%d forbindelse felles", - 1 => "%d forbindelser felles", -); -$a->strings["show more"] = "vis mer"; -$a->strings["Red Matrix Notification"] = "Red Matrix-varsling"; -$a->strings["redmatrix"] = "redmatrix"; -$a->strings["Thank You,"] = "Tusen takk,"; -$a->strings["%s Administrator"] = "%s administrator"; -$a->strings["%s <!item_type!>"] = "%s <!item_type!>"; -$a->strings["[Red:Notify] New mail received at %s"] = "[Red:Notify] Ny melding mottatt hos %s"; -$a->strings["%1\$s, %2\$s sent you a new private message at %3\$s."] = "%1\$s, %2\$s sendte deg en ny privat melding på %3\$s."; -$a->strings["%1\$s sent you %2\$s."] = "%1\$s sendte deg %2\$s."; -$a->strings["a private message"] = "en privat melding"; -$a->strings["Please visit %s to view and/or reply to your private messages."] = "Vennligst besøk %s for å se og/eller svare på dine private meldinger."; -$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]a %4\$s[/zrl]"; -$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]%4\$s's %5\$s[/zrl]"; -$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]din %4\$s[/zrl]"; -$a->strings["[Red:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Red:Notify] Kommentar til samtale #%1\$d av %2\$s"; -$a->strings["%1\$s, %2\$s commented on an item/conversation you have been following."] = "%1\$s, %2\$s kommenterte på et element eller en samtale du følger"; -$a->strings["Please visit %s to view and/or reply to the conversation."] = "Vennligst besøk %s for å se og/eller svare i samtalen"; -$a->strings["[Red:Notify] %s posted to your profile wall"] = "[Red:Notify] %s skrev et innlegg på din profilvegg"; -$a->strings["%1\$s, %2\$s posted to your profile wall at %3\$s"] = "%1\$s, %2\$s skrev et innlegg på din profilvegg på %3\$s"; -$a->strings["%1\$s, %2\$s posted to [zrl=%3\$s]your wall[/zrl]"] = "%1\$s, %2\$s skrev et innlegg på [zrl=%3\$s]din vegg[/zrl]"; -$a->strings["[Red:Notify] %s tagged you"] = "[Red:Notify] %s merket deg"; -$a->strings["%1\$s, %2\$s tagged you at %3\$s"] = "%1\$s, %2\$s merket deg på %3\$s"; -$a->strings["%1\$s, %2\$s [zrl=%3\$s]tagged you[/zrl]."] = "%1\$s, %2\$s [zrl=%3\$s]merket deg[/zrl]."; -$a->strings["[Red:Notify] %1\$s poked you"] = "[Red:Notify] %1\$s prikket deg"; -$a->strings["%1\$s, %2\$s poked you at %3\$s"] = "%1\$s, %2\$s dyttet deg på %3\$s"; -$a->strings["%1\$s, %2\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s, %2\$s [zrl=%2\$s]dyttet deg[/zrl]."; -$a->strings["[Red:Notify] %s tagged your post"] = "[Red:Notify] %s merket ditt innlegg"; -$a->strings["%1\$s, %2\$s tagged your post at %3\$s"] = "%1\$s, %2\$s merket ditt innlegg på %3\$s"; -$a->strings["%1\$s, %2\$s tagged [zrl=%3\$s]your post[/zrl]"] = "%1\$s, %2\$s merket [zrl=%3\$s]ditt innlegg[/zrl]"; -$a->strings["[Red:Notify] Introduction received"] = "[Red:Notify] Introduksjon mottatt"; -$a->strings["%1\$s, you've received an new connection request from '%2\$s' at %3\$s"] = "%1\$s, du har mottatt en ny forespørsel om forbindelse fra '%2\$s' hos %3\$s"; -$a->strings["%1\$s, you've received [zrl=%2\$s]a new connection request[/zrl] from %3\$s."] = "%1\$s, du mottok [zrl=%2\$s]en ny forespørsel om forbindelse[/zrl] fra %3\$s."; -$a->strings["You may visit their profile at %s"] = "Du kan besøke profilen deres på %s"; -$a->strings["Please visit %s to approve or reject the connection request."] = "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse."; -$a->strings["[Red:Notify] Friend suggestion received"] = "[Red:Notify] Venneforslag mottatt"; -$a->strings["%1\$s, you've received a friend suggestion from '%2\$s' at %3\$s"] = "%1\$s, du har mottatt en venneforespørsel fra '%2\$s' hos %3\$s"; -$a->strings["%1\$s, you've received [zrl=%2\$s]a friend suggestion[/zrl] for %3\$s from %4\$s."] = "%1\$s, du har mottatt [zrl=%2\$s]et venneforslaget[/zrl] angående %3\$s fra %4\$s. "; -$a->strings["Name:"] = "Navn:"; -$a->strings["Photo:"] = "Bilde:"; -$a->strings["Please visit %s to approve or reject the suggestion."] = "Vennligst besøk %s for å godkjenne eller avslå dette forslaget."; -$a->strings["[Red:Notify]"] = "[Red:Notify]"; -$a->strings["This event has been added to your calendar."] = "Denne hendelsen er lagt til i din kalender."; -$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."] = "En slettet gruppe med dette navnet ble gjenopprettet. Eksisterende tillatelser for elementet <strong>kan</strong> gjelde for denne gruppen og fremtidige medlemmer. Hvis du ønsket noe annet, vennligst lag en ny gruppe med et annet navn."; -$a->strings["Default privacy group for new contacts"] = "Standard personverngruppe for nye kontakter"; -$a->strings["All Channels"] = "Alle kanaler"; -$a->strings["edit"] = "endre"; -$a->strings["Collections"] = "Samlinger"; -$a->strings["Edit collection"] = "Endre samling"; -$a->strings["Create a new collection"] = "Lag en ny samling"; -$a->strings["Channels not in any collection"] = "Kanaler som ikke er i noen samling"; -$a->strings["Image/photo"] = "Bilde/fotografi"; -$a->strings["Encrypted content"] = "Kryptert innhold"; -$a->strings["Install design element: "] = "Installer designelement:"; -$a->strings["QR code"] = "QR-kode"; -$a->strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s skrev følgende %2\$s %3\$s"; -$a->strings["post"] = "innlegg"; -$a->strings["$1 spoiler"] = "$1 avsløring"; -$a->strings["$1 wrote:"] = "$1 skrev:"; -$a->strings["Tags"] = "Merkelapper"; -$a->strings["Keywords"] = "Nøkkelord"; -$a->strings["have"] = "har"; -$a->strings["has"] = "har"; -$a->strings["want"] = "ønsker"; -$a->strings["wants"] = "ønsker"; -$a->strings["like"] = "liker"; -$a->strings["likes"] = "liker"; -$a->strings["dislike"] = "misliker"; -$a->strings["dislikes"] = "misliker"; -$a->strings["__ctx:noun__ Like"] = array( - 0 => "Liker", - 1 => "Liker", -); -$a->strings["Logout"] = "Logg ut"; -$a->strings["End this session"] = "Avslutt denne økten"; -$a->strings["Home"] = "Hjem"; -$a->strings["Your posts and conversations"] = "Dine innlegg og samtaler"; -$a->strings["Your profile page"] = "Din profilside"; -$a->strings["Edit Profiles"] = "Endre profiler"; -$a->strings["Manage/Edit profiles"] = "Håndter/endre profiler"; -$a->strings["Edit Profile"] = "Endre profil"; -$a->strings["Edit your profile"] = "Endre din profil"; -$a->strings["Your photos"] = "Dine bilder"; -$a->strings["Your files"] = "Dine filer"; -$a->strings["Chat"] = "Chat"; -$a->strings["Your chatrooms"] = "Dine chatterom"; -$a->strings["Your bookmarks"] = "Dine bokmerker"; -$a->strings["Your webpages"] = "Dine websider"; -$a->strings["Login"] = "Logg inn"; -$a->strings["Sign in"] = "Logg på"; -$a->strings["%s - click to logout"] = "%s - klikk for å logge ut"; -$a->strings["Remote authentication"] = "Fjernautentisering"; -$a->strings["Click to authenticate to your home hub"] = "Klikk for å godkjennes mot din hjemme-hub"; -$a->strings["Home Page"] = "Hjemmeside"; -$a->strings["Register"] = "Registrer"; -$a->strings["Create an account"] = "Lag en konto"; -$a->strings["Help"] = "Hjelp"; -$a->strings["Help and documentation"] = "Hjelp og dokumentasjon"; -$a->strings["Applications, utilities, links, games"] = "Programmer, verktøy, lenker, spill"; -$a->strings["Search"] = "Søk"; -$a->strings["Search site content"] = "Søk stedets innhold"; -$a->strings["Directory"] = "Katalog"; -$a->strings["Channel Directory"] = "Kanalkatalog"; -$a->strings["Matrix"] = "Matrix"; -$a->strings["Your matrix"] = "Din matrix"; -$a->strings["Mark all matrix notifications seen"] = "Merk alle matrix-varsler som sett"; -$a->strings["Channel Home"] = "Kanalhjem"; -$a->strings["Channel home"] = "Kanalhjem"; -$a->strings["Mark all channel notifications seen"] = "Merk alle kanalvarsler som sett"; -$a->strings["Connections"] = "Forbindelser"; -$a->strings["Notices"] = "Varsel"; -$a->strings["Notifications"] = "Varsler"; -$a->strings["See all notifications"] = "Se alle varsler"; -$a->strings["Mark all system notifications seen"] = "Merk alle systemvarsler som sett"; -$a->strings["Mail"] = "Melding"; -$a->strings["Private mail"] = "Privat post"; -$a->strings["See all private messages"] = "Se alle private meldinger"; -$a->strings["Mark all private messages seen"] = "Merk alle private meldinger som sett"; -$a->strings["Inbox"] = "Innboks"; -$a->strings["Outbox"] = "Utboks"; -$a->strings["Events"] = "Hendelser"; -$a->strings["Event Calendar"] = "Kalender"; -$a->strings["See all events"] = "Se alle hendelser"; -$a->strings["Mark all events seen"] = "Merk alle hendelser som sett"; -$a->strings["Channel Manager"] = "Kanalstyring"; -$a->strings["Manage Your Channels"] = "Håndter dine kanaler"; -$a->strings["Account/Channel Settings"] = "Konto-/kanal-innstillinger"; -$a->strings["Admin"] = "Administrator"; -$a->strings["Site Setup and Configuration"] = "Nettstedsoppsett og -konfigurasjon"; -$a->strings["Please wait..."] = "Vennligst vent..."; -$a->strings["Can view my normal stream and posts"] = "Kan se min normale strøm og innlegg"; -$a->strings["Can view my default channel profile"] = "Kan se min standard kanalprofil"; -$a->strings["Can view my photo albums"] = "Kan se mine fotoalbum"; -$a->strings["Can view my connections"] = "Kan se mine forbindelser"; -$a->strings["Can view my file storage"] = "Kan se mitt fillager"; -$a->strings["Can view my webpages"] = "Kan se mine websider"; -$a->strings["Can send me their channel stream and posts"] = "Kan sende meg deres kanalstrøm og innlegg"; -$a->strings["Can post on my channel page (\"wall\")"] = "Kan lage innlegg på min kanalside (\"vegg\")"; -$a->strings["Can comment on or like my posts"] = "Kan kommentere på eller like mine innlegg"; -$a->strings["Can send me private mail messages"] = "Kan sende meg private meldinger"; -$a->strings["Can post photos to my photo albums"] = "Kan legge inn bilder i mine fotoalbum"; -$a->strings["Can like/dislike stuff"] = "Kan like/ikke like forskjellige greier"; -$a->strings["Profiles and things other than posts/comments"] = "Profiler og andre ting enn innlegg/kommentarer"; -$a->strings["Can forward to all my channel contacts via post @mentions"] = "Kan videresende til alle mine kanalkontakter via @navn i innlegg"; -$a->strings["Advanced - useful for creating group forum channels"] = "Avansert - nyttig for å lage forumkanaler for grupper"; -$a->strings["Can chat with me (when available)"] = "Kan chatte/sende lynmeldinger til meg (når tilgjengelig)"; -$a->strings["Can write to my file storage"] = "Kan skrive til mitt fillager"; -$a->strings["Can edit my webpages"] = "Kan endre mine websider"; -$a->strings["Can source my public posts in derived channels"] = "Kan bruke mine offentlige innlegg som kanalkilde i egne kanaler"; -$a->strings["Somewhat advanced - very useful in open communities"] = "Litt avansert - svært nyttig i åpne fellesskap"; -$a->strings["Can administer my channel resources"] = "Kan administrere mine kanalressurser"; -$a->strings["Extremely advanced. Leave this alone unless you know what you are doing"] = "Ekstremt avansert. La dette være med mindre du vet hva du gjør"; -$a->strings["Social Networking"] = "Sosialt nettverk"; -$a->strings["Mostly Public"] = "Ganske offentlig"; -$a->strings["Restricted"] = "Begrenset"; -$a->strings["Private"] = "Privat"; -$a->strings["Community Forum"] = "Forum for fellesskap"; -$a->strings["Feed Republish"] = "Republisering av strømmet innhold"; -$a->strings["Special Purpose"] = "Spesiell bruk"; -$a->strings["Celebrity/Soapbox"] = "Kjendis/Talerstol"; -$a->strings["Group Repository"] = "Gruppelager"; -$a->strings["Other"] = "Annen"; -$a->strings["Custom/Expert Mode"] = "Tilpasset/Ekspertmodus"; -$a->strings["New window"] = "Nytt vindu"; -$a->strings["Open the selected location in a different window or browser tab"] = "Åpne det valgte stedet i et annet vindu eller nettleser-fane"; -$a->strings["User '%s' deleted"] = "Brukeren '%s' er slettet"; $a->strings["General Features"] = "Generelle funksjoner"; $a->strings["Content Expiration"] = "Innholdet utløper"; $a->strings["Remove posts/comments and/or private messages at a future time"] = "Fjern innlegg/kommentarer og/eller private meldinger på et angitt tidspunkt i fremtiden"; @@ -452,6 +413,8 @@ $a->strings["Private Notes"] = "Private merknader"; $a->strings["Enables a tool to store notes and reminders"] = "Skrur på et verktøy for lagre merknader og påminnelser"; $a->strings["Navigation Channel Select"] = "Navigasjon kanalvalg"; $a->strings["Change channels directly from within the navigation dropdown menu"] = "Endre kanaler direkte fra navigasjonsmenyen"; +$a->strings["Photo Location"] = "Bildeplassering"; +$a->strings["If location data is available on uploaded photos, link this to a map."] = "Hvis plasseringsdata er tilgjengelige i opplastede bilder, plasser dette på et kart."; $a->strings["Extended Identity Sharing"] = "Utvidet identitetsdeling"; $a->strings["Share your identity with all websites on the internet. When disabled, identity is only shared with sites in the matrix."] = "Del din identiet med alle nettsteder på Internett. Når denne er avskrudd, deles identiteten bare med nettsteder i matrix."; $a->strings["Expert Mode"] = "Ekspertmodus"; @@ -461,11 +424,15 @@ $a->strings["Allows you to set restrictions and terms on those that connect with $a->strings["Post Composition Features"] = "Funksjoner for å lage innlegg"; $a->strings["Use Markdown"] = "Bruk Markdown"; $a->strings["Allow use of \"Markdown\" to format posts"] = "Tillat bruk av \"Markdown\" til formatering av innlegg"; -$a->strings["Post Preview"] = "Forhåndsvisning av innlegg"; -$a->strings["Allow previewing posts and comments before publishing them"] = "Tillat forhåndsvisning av innlegg og kommentarer før publisering"; +$a->strings["Large Photos"] = "Store bilder"; +$a->strings["Include large (640px) photo thumbnails in posts. If not enabled, use small (320px) photo thumbnails"] = "Inkluder store (640px) miniatyrbilder i innlegg. Hvis denne ikke er skrudd på, bruk små (320px) miniatyrbilder."; $a->strings["Automatically import channel content from other channels or feeds"] = "Automatisk import av kanalinnhold fra andre kanaler eller strømmer"; $a->strings["Even More Encryption"] = "Enda mer kryptering"; $a->strings["Allow optional encryption of content end-to-end with a shared secret key"] = "Tillat valgfri kryptering av innhold ende-til-ende via en delt hemmelig nøkkel"; +$a->strings["Enable voting tools"] = "Skru på verktøy for å stemme"; +$a->strings["Provide a class of post which others can vote on"] = "Tilby en type innlegg som andre kan stemme på"; +$a->strings["Flag Adult Photos"] = "Flagge bilder for voksne"; +$a->strings["Provide photo edit option to hide adult photos from default album view"] = "Gi foto en valgmulighet for å skjule bilder for voksne fra visning i standardalbum"; $a->strings["Network and Stream Filtering"] = "Nettverk- og strømfiltrering"; $a->strings["Search by Date"] = "Søk etter dato"; $a->strings["Ability to select posts by date ranges"] = "Mulighet for å velge innlegg etter datoområde"; @@ -481,8 +448,6 @@ $a->strings["Filter stream activity by depth of relationships"] = "Filtrer strø $a->strings["Suggest Channels"] = "Foreslå kanaler"; $a->strings["Show channel suggestions"] = "Vis kanalforslag"; $a->strings["Post/Comment Tools"] = "Innlegg-/Kommentar-verktøy"; -$a->strings["Edit Sent Posts"] = "Endre publiserte innlegg"; -$a->strings["Edit and correct posts and comments after sending"] = "Endre og korrigere innlegg og kommentarer etter sending"; $a->strings["Tagging"] = "Merking"; $a->strings["Ability to tag existing posts"] = "Mulighet til å merke eksisterende meldinger"; $a->strings["Post Categories"] = "Innleggskategorier"; @@ -494,81 +459,6 @@ $a->strings["Star Posts"] = "Stjerneinnlegg"; $a->strings["Ability to mark special posts with a star indicator"] = "Mulighet til å merke spesielle innlegg med en stjerne"; $a->strings["Tag Cloud"] = "Merkelappsky"; $a->strings["Provide a personal tag cloud on your channel page"] = "Tilby en personlig merkelappsky på din kanalside"; -$a->strings["Not a valid email address"] = "Ikke en gyldig e-postadresse"; -$a->strings["Your email domain is not among those allowed on this site"] = "Ditt e-postdomene er ikke blant de som er tillatt på dette stedet"; -$a->strings["Your email address is already registered at this site."] = "Din e-postadresse er allerede registrert på dette nettstedet."; -$a->strings["An invitation is required."] = "En invitasjon er påkrevd."; -$a->strings["Invitation could not be verified."] = "Invitasjon kunne ikke bekreftes."; -$a->strings["Please enter the required information."] = "Vennligst skriv inn nødvendig informasjon."; -$a->strings["Failed to store account information."] = "Mislyktes med å lagre kontoinformasjon."; -$a->strings["Registration confirmation for %s"] = "Registreringsbekreftelse for %s"; -$a->strings["Registration request at %s"] = "Registreringsforespørsel hos %s"; -$a->strings["Administrator"] = "Administrator"; -$a->strings["your registration password"] = "ditt registreringspassord"; -$a->strings["Registration details for %s"] = "Registreringsdetaljer for %s"; -$a->strings["Account approved."] = "Konto godkjent."; -$a->strings["Registration revoked for %s"] = "Registrering trukket tilbake for %s"; -$a->strings["Account verified. Please login."] = "Konto bekreftet. Vennligst logg inn."; -$a->strings["Click here to upgrade."] = "Klikk her for å oppgradere."; -$a->strings["This action exceeds the limits set by your subscription plan."] = "Denne handlingen går utenfor grensene satt i din abonnementsplan."; -$a->strings["This action is not available under your subscription plan."] = "Denne handlingen er ikke tilgjengelig i din abonnementsplan."; -$a->strings["Unable to obtain identity information from database"] = "Klarer ikke å få tak i identitetsinformasjon fra databasen"; -$a->strings["Empty name"] = "Mangler navn"; -$a->strings["Name too long"] = "Navnet er for langt"; -$a->strings["No account identifier"] = "Ingen kontoidentifikator"; -$a->strings["Nickname is required."] = "Kallenavn er påkrevd."; -$a->strings["Reserved nickname. Please choose another."] = "Reservert kallenavn. Vennligst velg et annet."; -$a->strings["Nickname has unsupported characters or is already being used on this site."] = "Kallenavnet inneholder tegn som ikke er støttet eller det er allerede i bruk på dette nettstedet."; -$a->strings["Unable to retrieve created identity"] = "Klarer ikke å hente den lagede identiteten"; -$a->strings["Default Profile"] = "Standardprofil"; -$a->strings["Requested channel is not available."] = "Forespurt kanal er ikke tilgjengelig."; -$a->strings["Requested profile is not available."] = "Forespurt profil er ikke tilgjengelig."; -$a->strings["Change profile photo"] = "Endre profilbilde"; -$a->strings["Profiles"] = "Profiler"; -$a->strings["Manage/edit profiles"] = "Håndtere/endre profiler"; -$a->strings["Create New Profile"] = "Lag ny profil"; -$a->strings["Profile Image"] = "Profilbilde"; -$a->strings["visible to everybody"] = "synlig for alle"; -$a->strings["Edit visibility"] = "Endre synlighet"; -$a->strings["Gender:"] = "Kjønn:"; -$a->strings["Status:"] = "Status:"; -$a->strings["Homepage:"] = "Hjemmeside:"; -$a->strings["Online Now"] = "Online nå"; -$a->strings["g A l F d"] = "g A l F d"; -$a->strings["F d"] = "F d"; -$a->strings["[today]"] = "[idag]"; -$a->strings["Birthday Reminders"] = "Fødselsdagspåminnnelser"; -$a->strings["Birthdays this week:"] = "Fødselsdager denne uken:"; -$a->strings["[No description]"] = "[Ingen beskrivelse]"; -$a->strings["Event Reminders"] = "Hendelsespåminnelser"; -$a->strings["Events this week:"] = "Hendelser denne uken:"; -$a->strings["Profile"] = "Profil"; -$a->strings["Full Name:"] = "Fullt navn:"; -$a->strings["Like this channel"] = "Lik denne kanalen"; -$a->strings["j F, Y"] = "j F, Y"; -$a->strings["j F"] = "j F"; -$a->strings["Birthday:"] = "Fødselsdag:"; -$a->strings["Age:"] = "Alder:"; -$a->strings["for %1\$d %2\$s"] = "for %1\$d %2\$s"; -$a->strings["Sexual Preference:"] = "Seksuell preferanse:"; -$a->strings["Hometown:"] = "Hjemby:"; -$a->strings["Tags:"] = "Merkelapper:"; -$a->strings["Political Views:"] = "Politiske synspunkter:"; -$a->strings["Religion:"] = "Religion:"; -$a->strings["About:"] = "Om:"; -$a->strings["Hobbies/Interests:"] = "Hobbyer/interesser:"; -$a->strings["Likes:"] = "Liker:"; -$a->strings["Dislikes:"] = "Misliker:"; -$a->strings["Contact information and Social Networks:"] = "Kontaktinformasjon og sosiale nettverk:"; -$a->strings["My other channels:"] = "Mine andre kanaler:"; -$a->strings["Musical interests:"] = "Musikkinteresse:"; -$a->strings["Books, literature:"] = "Bøker, litteratur:"; -$a->strings["Television:"] = "TV:"; -$a->strings["Film/dance/culture/entertainment:"] = "Film/dans/kultur/underholdning:"; -$a->strings["Love/Romance:"] = "Kjærlighet/romantikk:"; -$a->strings["Work/employment:"] = "Arbeid/sysselsetting:"; -$a->strings["School/education:"] = "Skole/utdannelse:"; -$a->strings["Like this thing"] = "Lik denne tingen"; $a->strings["Permission denied"] = "Tillatelse avvist"; $a->strings["(Unknown)"] = "(Ukjent)"; $a->strings["Visible to anybody on the internet."] = "Synlig for enhver på Internett."; @@ -585,30 +475,74 @@ $a->strings["Collection is empty."] = "Samlingen er tom."; $a->strings["Collection: %s"] = "Samling: %s"; $a->strings["Connection: %s"] = "Forbindelse: %s"; $a->strings["Connection not found."] = "Forbindelsen ble ikke funnet."; +$a->strings["Frequently"] = "Ofte"; +$a->strings["Hourly"] = "Hver time"; +$a->strings["Twice daily"] = "To ganger daglig"; +$a->strings["Daily"] = "Daglig"; +$a->strings["Weekly"] = "Ukentlig"; +$a->strings["Monthly"] = "Månedlig"; +$a->strings["Friendica"] = "Friendica"; +$a->strings["OStatus"] = "OStatus"; +$a->strings["RSS/Atom"] = "RSS/Atom"; +$a->strings["Email"] = "E-post"; +$a->strings["Diaspora"] = "Diaspora"; +$a->strings["Facebook"] = "Facebook"; +$a->strings["Zot!"] = "Zot!"; +$a->strings["LinkedIn"] = "LinkedIn"; +$a->strings["XMPP/IM"] = "XMPP/IM"; +$a->strings["MySpace"] = "MySpace"; $a->strings["No recipient provided."] = "Ingen mottaker angitt."; $a->strings["[no subject]"] = "[ikke noe emne]"; $a->strings["Unable to determine sender."] = "Kan ikke avgjøre avsender."; $a->strings["Stored post could not be verified."] = "Lagret innlegg kunne ikke bekreftes."; -$a->strings["view full size"] = "vis full størrelse"; -$a->strings["Item was not found."] = "Elementet ble ikke funnet."; -$a->strings["No source file."] = "Ingen kildefil."; -$a->strings["Cannot locate file to replace"] = "Kan ikke finne filen som skal byttes ut"; -$a->strings["Cannot locate file to revise/update"] = "Finner ikke filen som skal revideres/oppdateres"; -$a->strings["File exceeds size limit of %d"] = "Filens størrelse overgår grensen på %d"; -$a->strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Du har nådd din lagringsgrense for vedlegg på %1$.0f Mbytes."; -$a->strings["File upload failed. Possible system limit or action terminated."] = "Mislyktes med å laste opp filen. Mulig systemgrense eller handling avbrutt."; -$a->strings["Stored file could not be verified. Upload failed."] = "Lagret fil kunne ikke bekreftes. Opplasting mislyktes."; -$a->strings["Path not available."] = "Stien er ikke tilgjengelig."; -$a->strings["Empty pathname"] = "Tomt sti-navn"; -$a->strings["duplicate filename or path"] = "duplikat av filnavn eller sti"; -$a->strings["Path not found."] = "Stien ble ikke funnet."; -$a->strings["mkdir failed."] = "mkdir mislyktes."; -$a->strings["database storage failed."] = "databaselagring mislyktes."; -$a->strings["Logged out."] = "Logget ut."; -$a->strings["Failed authentication"] = "Mislykket autentisering"; -$a->strings["Login failed."] = "Innlogging mislyktes."; +$a->strings["Channel is blocked on this site."] = "Kanalen er blokkert på dette nettstedet."; +$a->strings["Channel location missing."] = "Kanalplassering mangler."; +$a->strings["Response from remote channel was incomplete."] = "Svaret fra den andre kanalen var ikke komplett."; +$a->strings["Channel was deleted and no longer exists."] = "Kanalen er slettet og finnes ikke lenger."; +$a->strings["Protocol disabled."] = "Protokollen er avskrudd."; +$a->strings["Channel discovery failed."] = "Kanaloppdagelse mislyktes."; +$a->strings["local account not found."] = "lokal konto ble ikke funnet."; +$a->strings["Cannot connect to yourself."] = "Kan ikke lage forbindelse med deg selv."; +$a->strings["Save to Folder"] = "Lagre i mappe"; +$a->strings["I will attend"] = "Jeg vil delta"; +$a->strings["I will not attend"] = "Jeg deltar ikke"; +$a->strings["I might attend"] = "Jeg vil kanskje delta"; +$a->strings["I agree"] = "Jeg er enig"; +$a->strings["I disagree"] = "Jeg er uenig"; +$a->strings["I abstain"] = "Jeg avstår"; +$a->strings["Add Star"] = "Legg til stjerne"; +$a->strings["Remove Star"] = "Fjern stjerne"; +$a->strings["Toggle Star Status"] = "Skru av og på stjernestatus"; +$a->strings["starred"] = "stjernemerket"; +$a->strings["Add Tag"] = "Legg til merkelapp"; +$a->strings["I like this (toggle)"] = "Jeg liker dette (skru av og på)"; +$a->strings["like"] = "liker"; +$a->strings["I don't like this (toggle)"] = "Jeg liker ikke dette (skru av og på)"; +$a->strings["dislike"] = "misliker"; +$a->strings["Share This"] = "Del dette"; +$a->strings["share"] = "del"; +$a->strings["%d comment"] = array( + 0 => "%d kommentar", + 1 => "%d kommentarer", +); +$a->strings["View %s's profile - %s"] = "Vis %s sin profil - %s"; +$a->strings["to"] = "til"; +$a->strings["via"] = "via"; +$a->strings["Wall-to-Wall"] = "vegg-til-vegg"; +$a->strings["via Wall-To-Wall:"] = "via vegg-til-vegg:"; +$a->strings["Save Bookmarks"] = "Lagre bokmerker"; +$a->strings["Add to Calendar"] = "Legg til i kalender"; +$a->strings["Mark all seen"] = "Merk alle som sett"; +$a->strings["__ctx:noun__ Likes"] = "Liker"; +$a->strings["__ctx:noun__ Dislikes"] = "Liker ikke"; +$a->strings["Close"] = "Lukk"; +$a->strings["This is you"] = "Dette er deg"; +$a->strings["Image"] = "Bilde"; +$a->strings["Insert Link"] = "Sett inn lenke"; +$a->strings["Video"] = "Video"; $a->strings["Miscellaneous"] = "Forskjellig"; $a->strings["YYYY-MM-DD or MM-DD"] = "YYYY-MM-DD eller MM-DD"; +$a->strings["Required"] = "Påkrevd"; $a->strings["never"] = "aldri"; $a->strings["less than a second ago"] = "for mindre enn ett sekund siden"; $a->strings["year"] = "år"; @@ -628,43 +562,172 @@ $a->strings["seconds"] = "sekunder"; $a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s siden"; $a->strings["%1\$s's birthday"] = "%1\$s sin fødselsdag"; $a->strings["Happy Birthday %1\$s"] = "Gratulerer med dagen, %1\$s !"; +$a->strings["New window"] = "Nytt vindu"; +$a->strings["Open the selected location in a different window or browser tab"] = "Åpne det valgte stedet i et annet vindu eller nettleser-fane"; +$a->strings["User '%s' deleted"] = "Brukeren '%s' er slettet"; +$a->strings["Attachments:"] = "Vedlegg:"; +$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; +$a->strings["Redmatrix event notification:"] = "RedMatrix hendelsesvarsling:"; +$a->strings["Starts:"] = "Starter:"; +$a->strings["Finishes:"] = "Slutter:"; +$a->strings["Logout"] = "Logg ut"; +$a->strings["End this session"] = "Avslutt denne økten"; +$a->strings["Home"] = "Hjem"; +$a->strings["Your posts and conversations"] = "Dine innlegg og samtaler"; +$a->strings["Your profile page"] = "Din profilside"; +$a->strings["Edit Profiles"] = "Endre profiler"; +$a->strings["Manage/Edit profiles"] = "Håndter/endre profiler"; +$a->strings["Edit your profile"] = "Endre din profil"; +$a->strings["Your photos"] = "Dine bilder"; +$a->strings["Your files"] = "Dine filer"; +$a->strings["Chat"] = "Chat"; +$a->strings["Your chatrooms"] = "Dine chatterom"; +$a->strings["Your bookmarks"] = "Dine bokmerker"; +$a->strings["Your webpages"] = "Dine websider"; +$a->strings["Login"] = "Logg inn"; +$a->strings["Sign in"] = "Logg på"; +$a->strings["%s - click to logout"] = "%s - klikk for å logge ut"; +$a->strings["Remote authentication"] = "Fjernautentisering"; +$a->strings["Click to authenticate to your home hub"] = "Klikk for å godkjennes mot din hjemme-hub"; +$a->strings["Home Page"] = "Hjemmeside"; +$a->strings["Register"] = "Registrer"; +$a->strings["Create an account"] = "Lag en konto"; +$a->strings["Help"] = "Hjelp"; +$a->strings["Help and documentation"] = "Hjelp og dokumentasjon"; +$a->strings["Applications, utilities, links, games"] = "Programmer, verktøy, lenker, spill"; +$a->strings["Search"] = "Søk"; +$a->strings["Search site content"] = "Søk stedets innhold"; +$a->strings["Directory"] = "Katalog"; +$a->strings["Channel Directory"] = "Kanalkatalog"; +$a->strings["Matrix"] = "Matrix"; +$a->strings["Your matrix"] = "Din matrix"; +$a->strings["Mark all matrix notifications seen"] = "Merk alle matrix-varsler som sett"; +$a->strings["Channel Home"] = "Kanalhjem"; +$a->strings["Channel home"] = "Kanalhjem"; +$a->strings["Mark all channel notifications seen"] = "Merk alle kanalvarsler som sett"; +$a->strings["Connections"] = "Forbindelser"; +$a->strings["Notices"] = "Varsel"; +$a->strings["Notifications"] = "Varsler"; +$a->strings["See all notifications"] = "Se alle varsler"; +$a->strings["Mark all system notifications seen"] = "Merk alle systemvarsler som sett"; +$a->strings["Mail"] = "Melding"; +$a->strings["Private mail"] = "Privat post"; +$a->strings["See all private messages"] = "Se alle private meldinger"; +$a->strings["Mark all private messages seen"] = "Merk alle private meldinger som sett"; +$a->strings["Inbox"] = "Innboks"; +$a->strings["Outbox"] = "Utboks"; +$a->strings["Events"] = "Hendelser"; +$a->strings["Event Calendar"] = "Kalender"; +$a->strings["See all events"] = "Se alle hendelser"; +$a->strings["Mark all events seen"] = "Merk alle hendelser som sett"; +$a->strings["Channel Manager"] = "Kanalstyring"; +$a->strings["Manage Your Channels"] = "Håndter dine kanaler"; +$a->strings["Account/Channel Settings"] = "Konto-/kanal-innstillinger"; +$a->strings["Admin"] = "Administrator"; +$a->strings["Site Setup and Configuration"] = "Nettstedsoppsett og -konfigurasjon"; +$a->strings["@name, #tag, content"] = "@navn, @merkelapp, innhold"; +$a->strings["Please wait..."] = "Vennligst vent..."; +$a->strings["Tags"] = "Merkelapper"; +$a->strings["Keywords"] = "Nøkkelord"; +$a->strings["have"] = "har"; +$a->strings["has"] = "har"; +$a->strings["want"] = "ønsker"; +$a->strings["wants"] = "ønsker"; +$a->strings["likes"] = "liker"; +$a->strings["dislikes"] = "misliker"; +$a->strings[" and "] = "og"; +$a->strings["public profile"] = "offentlig profil"; +$a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s endret %2\$s til “%3\$s”"; +$a->strings["Visit %1\$s's %2\$s"] = "Besøk %1\$s sitt %2\$s"; +$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s har oppdatert %2\$s, endret %3\$s."; +$a->strings["This event has been added to your calendar."] = "Denne hendelsen er lagt til i din kalender."; +$a->strings["Public Timeline"] = "Offentlig tidslinje"; +$a->strings["view full size"] = "vis full størrelse"; +$a->strings["Directory Options"] = "Kataloginnstillinger"; +$a->strings["Alphabetic"] = "Alfabetisk"; +$a->strings["Reverse Alphabetic"] = "Omvendt alfabetisk"; +$a->strings["Newest to Oldest"] = "Nyest til eldst"; +$a->strings["Oldest to Newest"] = "Eldst til nyest"; +$a->strings["Sort"] = "Sorter"; +$a->strings["Safe Mode"] = "Trygt modus"; +$a->strings["Public Forums Only"] = "Bare offentlige forum"; +$a->strings["This Website Only"] = "Kun dette nettstedet"; +$a->strings["Embedded content"] = "Innebygget innhold"; +$a->strings["Embedding disabled"] = "Innbygging avskrudd"; +$a->strings["Invalid data packet"] = "Ugyldig datapakke"; +$a->strings["Unable to verify channel signature"] = "Ikke i stand til å sjekke kanalsignaturen"; +$a->strings["Unable to verify site signature for %s"] = "Ikke i stand til å bekrefte signaturen til %s"; +$a->strings["Logged out."] = "Logget ut."; +$a->strings["Failed authentication"] = "Mislykket autentisering"; +$a->strings["Login failed."] = "Innlogging mislyktes."; +$a->strings["Red Matrix Notification"] = "Red Matrix-varsling"; +$a->strings["redmatrix"] = "redmatrix"; +$a->strings["Thank You,"] = "Tusen takk,"; +$a->strings["%s Administrator"] = "%s administrator"; +$a->strings["%s <!item_type!>"] = "%s <!item_type!>"; +$a->strings["[Red:Notify] New mail received at %s"] = "[Red:Notify] Ny melding mottatt hos %s"; +$a->strings["%1\$s, %2\$s sent you a new private message at %3\$s."] = "%1\$s, %2\$s sendte deg en ny privat melding på %3\$s."; +$a->strings["%1\$s sent you %2\$s."] = "%1\$s sendte deg %2\$s."; +$a->strings["a private message"] = "en privat melding"; +$a->strings["Please visit %s to view and/or reply to your private messages."] = "Vennligst besøk %s for å se og/eller svare på dine private meldinger."; +$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]a %4\$s[/zrl]"; +$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]%4\$s's %5\$s[/zrl]"; +$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s, %2\$s kommenterte på [zrl=%3\$s]din %4\$s[/zrl]"; +$a->strings["[Red:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Red:Notify] Kommentar til samtale #%1\$d av %2\$s"; +$a->strings["%1\$s, %2\$s commented on an item/conversation you have been following."] = "%1\$s, %2\$s kommenterte på et element eller en samtale du følger"; +$a->strings["Please visit %s to view and/or reply to the conversation."] = "Vennligst besøk %s for å se og/eller svare i samtalen"; +$a->strings["[Red:Notify] %s posted to your profile wall"] = "[Red:Notify] %s skrev et innlegg på din profilvegg"; +$a->strings["%1\$s, %2\$s posted to your profile wall at %3\$s"] = "%1\$s, %2\$s skrev et innlegg på din profilvegg på %3\$s"; +$a->strings["%1\$s, %2\$s posted to [zrl=%3\$s]your wall[/zrl]"] = "%1\$s, %2\$s skrev et innlegg på [zrl=%3\$s]din vegg[/zrl]"; +$a->strings["[Red:Notify] %s tagged you"] = "[Red:Notify] %s merket deg"; +$a->strings["%1\$s, %2\$s tagged you at %3\$s"] = "%1\$s, %2\$s merket deg på %3\$s"; +$a->strings["%1\$s, %2\$s [zrl=%3\$s]tagged you[/zrl]."] = "%1\$s, %2\$s [zrl=%3\$s]merket deg[/zrl]."; +$a->strings["[Red:Notify] %1\$s poked you"] = "[Red:Notify] %1\$s prikket deg"; +$a->strings["%1\$s, %2\$s poked you at %3\$s"] = "%1\$s, %2\$s dyttet deg på %3\$s"; +$a->strings["%1\$s, %2\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s, %2\$s [zrl=%2\$s]dyttet deg[/zrl]."; +$a->strings["[Red:Notify] %s tagged your post"] = "[Red:Notify] %s merket ditt innlegg"; +$a->strings["%1\$s, %2\$s tagged your post at %3\$s"] = "%1\$s, %2\$s merket ditt innlegg på %3\$s"; +$a->strings["%1\$s, %2\$s tagged [zrl=%3\$s]your post[/zrl]"] = "%1\$s, %2\$s merket [zrl=%3\$s]ditt innlegg[/zrl]"; +$a->strings["[Red:Notify] Introduction received"] = "[Red:Notify] Introduksjon mottatt"; +$a->strings["%1\$s, you've received an new connection request from '%2\$s' at %3\$s"] = "%1\$s, du har mottatt en ny forespørsel om forbindelse fra '%2\$s' hos %3\$s"; +$a->strings["%1\$s, you've received [zrl=%2\$s]a new connection request[/zrl] from %3\$s."] = "%1\$s, du mottok [zrl=%2\$s]en ny forespørsel om forbindelse[/zrl] fra %3\$s."; +$a->strings["You may visit their profile at %s"] = "Du kan besøke profilen deres på %s"; +$a->strings["Please visit %s to approve or reject the connection request."] = "Vennligst besøk %s for å godkjenne eller avslå forespørselen om forbindelse."; +$a->strings["[Red:Notify] Friend suggestion received"] = "[Red:Notify] Venneforslag mottatt"; +$a->strings["%1\$s, you've received a friend suggestion from '%2\$s' at %3\$s"] = "%1\$s, du har mottatt en venneforespørsel fra '%2\$s' hos %3\$s"; +$a->strings["%1\$s, you've received [zrl=%2\$s]a friend suggestion[/zrl] for %3\$s from %4\$s."] = "%1\$s, du har mottatt [zrl=%2\$s]et venneforslaget[/zrl] angående %3\$s fra %4\$s. "; +$a->strings["Name:"] = "Navn:"; +$a->strings["Photo:"] = "Bilde:"; +$a->strings["Please visit %s to approve or reject the suggestion."] = "Vennligst besøk %s for å godkjenne eller avslå dette forslaget."; +$a->strings["[Red:Notify]"] = "[Red:Notify]"; +$a->strings["%d invitation available"] = array( + 0 => "%d invitasjon tilgjengelig", + 1 => "%d invitasjoner tilgjengelig", +); +$a->strings["Advanced"] = "Avansert"; +$a->strings["Find Channels"] = "Finn kanaler"; +$a->strings["Enter name or interest"] = "Skriv navn eller interesse"; +$a->strings["Connect/Follow"] = "Forbindelse/Følg"; +$a->strings["Examples: Robert Morgenstein, Fishing"] = "Eksempler: Ola Nordmann, fisking"; +$a->strings["Find"] = "Finn"; +$a->strings["Channel Suggestions"] = "Kanalforslag"; +$a->strings["Random Profile"] = "Tilfeldig profil"; +$a->strings["Invite Friends"] = "Inviter venner"; +$a->strings["Advanced example: name=fred and country=iceland"] = "Avansert eksempel: navn=fred og land=island"; +$a->strings["%d connection in common"] = array( + 0 => "%d forbindelse felles", + 1 => "%d forbindelser felles", +); +$a->strings["show more"] = "vis mer"; +$a->strings["Visible to your default audience"] = "Synlig for ditt standard publikum"; +$a->strings["Show"] = "Vis"; +$a->strings["Don't show"] = "Ikke vis"; +$a->strings["Permissions"] = "Tillatelser"; $a->strings["Image exceeds website size limit of %lu bytes"] = "Bilde overstiger nettstedets størrelsesbegrensning på %lu bytes"; $a->strings["Image file is empty."] = "Bildefilen er tom."; $a->strings["Unable to process image"] = "Kan ikke behandle bildet"; $a->strings["Photo storage failed."] = "Bildelagring mislyktes."; $a->strings["Upload New Photos"] = "Last opp nye bilder"; -$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Skjemaets sikkerhetspollett var ikke gyldig. Dette skjedde antakelig fordi skjemaet har vært åpnet for lenge (>3 timer) før det ble sendt inn."; -$a->strings["Delete this item?"] = "Slett dette elementet?"; -$a->strings["Comment"] = "Kommentar"; -$a->strings["[+] show all"] = "[+] Vis alle"; -$a->strings["[-] show less"] = "[-] Vis mindre"; -$a->strings["[+] expand"] = "[+] Utvid"; -$a->strings["[-] collapse"] = "[-] Lukk"; -$a->strings["Password too short"] = "Passordet er for kort"; -$a->strings["Passwords do not match"] = "Passordene er ikke like"; -$a->strings["everybody"] = "alle"; -$a->strings["Secret Passphrase"] = "Hemmelig passordsetning"; -$a->strings["Passphrase hint"] = "Hint om passordsetning"; -$a->strings["Notice: Permissions have changed but have not yet been submitted."] = "Varsel: Tillatelser har blitt endret, men de har ennå ikke blitt sendt inn."; -$a->strings["close all"] = "Lukk alle"; -$a->strings["Nothing new here"] = "Ikke noe nytt her"; -$a->strings["timeago.prefixAgo"] = "timeago.prefixAgo"; -$a->strings["timeago.prefixFromNow"] = "timeago.prefixFromNow"; -$a->strings["ago"] = "siden"; -$a->strings["from now"] = "fra nå"; -$a->strings["less than a minute"] = "mindre enn ett minutt"; -$a->strings["about a minute"] = "omtrent et minutt"; -$a->strings["%d minutes"] = "%d minutter"; -$a->strings["about an hour"] = "omtrent en time"; -$a->strings["about %d hours"] = "omtrent %d timer"; -$a->strings["a day"] = "en dag"; -$a->strings["%d days"] = "%d dager"; -$a->strings["about a month"] = "omtrent en måned"; -$a->strings["%d months"] = "%d måneder"; -$a->strings["about a year"] = "omtrent et år"; -$a->strings["%d years"] = "%d år"; -$a->strings[" "] = " "; -$a->strings["timeago.numbers"] = "timeago.numbers"; $a->strings["Male"] = "Mannlig"; $a->strings["Female"] = "Kvinnelig"; $a->strings["Currently Male"] = "For tiden mann"; @@ -677,6 +740,7 @@ $a->strings["Transsexual"] = "Transseksuell"; $a->strings["Hermaphrodite"] = "Hermafroditt"; $a->strings["Neuter"] = "Intetkjønn"; $a->strings["Non-specific"] = "Ubestemt"; +$a->strings["Other"] = "Annen"; $a->strings["Undecided"] = "Ubestemt"; $a->strings["Males"] = "Menn"; $a->strings["Females"] = "Kvinner"; @@ -721,6 +785,20 @@ $a->strings["Uncertain"] = "Usikkert"; $a->strings["It's complicated"] = "Det er komplisert"; $a->strings["Don't care"] = "Bryr meg ikke"; $a->strings["Ask me"] = "Spør meg"; +$a->strings["Site Admin"] = "Nettstedsadministrator"; +$a->strings["Address Book"] = "Adressebok"; +$a->strings["Mood"] = "Stemning"; +$a->strings["Probe"] = "Undersøk"; +$a->strings["Suggest"] = "Forreslå"; +$a->strings["Random Channel"] = "Tilfeldig kanal"; +$a->strings["Invite"] = "Inviter"; +$a->strings["Features"] = "Funksjoner"; +$a->strings["Language"] = "Språk"; +$a->strings["Post"] = "Innlegg"; +$a->strings["Profile Photo"] = "Profilbilde"; +$a->strings["Update"] = "Oppdater"; +$a->strings["Install"] = "Installer"; +$a->strings["Purchase"] = "Kjøp"; $a->strings["prev"] = "forrige"; $a->strings["first"] = "første"; $a->strings["last"] = "siste"; @@ -800,588 +878,56 @@ $a->strings["Blocks"] = "Byggeklosser"; $a->strings["Menus"] = "Menyer"; $a->strings["Layouts"] = "Layout"; $a->strings["Pages"] = "Sider"; -$a->strings["Visible to your default audience"] = "Synlig for ditt standard publikum"; -$a->strings["Show"] = "Vis"; -$a->strings["Don't show"] = "Ikke vis"; -$a->strings["Permissions"] = "Tillatelser"; -$a->strings["Close"] = "Lukk"; -$a->strings["Public Timeline"] = "Offentlig tidslinje"; -$a->strings["Site Admin"] = "Nettstedsadministrator"; -$a->strings["Address Book"] = "Adressebok"; -$a->strings["Mood"] = "Stemning"; -$a->strings["Probe"] = "Undersøk"; -$a->strings["Suggest"] = "Forreslå"; -$a->strings["Random Channel"] = "Tilfeldig kanal"; -$a->strings["Invite"] = "Inviter"; -$a->strings["Features"] = "Funksjoner"; -$a->strings["Language"] = "Språk"; -$a->strings["Post"] = "Innlegg"; -$a->strings["Profile Photo"] = "Profilbilde"; -$a->strings["Update"] = "Oppdater"; -$a->strings["Install"] = "Installer"; -$a->strings["Purchase"] = "Kjøp"; -$a->strings["Save to Folder"] = "Lagre i mappe"; -$a->strings["View all"] = "Vis alle"; -$a->strings["__ctx:noun__ Dislike"] = array( - 0 => "Liker ikke", - 1 => "Liker ikke", -); -$a->strings["Add Star"] = "Legg til stjerne"; -$a->strings["Remove Star"] = "Fjern stjerne"; -$a->strings["Toggle Star Status"] = "Skru av og på stjernestatus"; -$a->strings["starred"] = "stjernemerket"; -$a->strings["Add Tag"] = "Legg til merkelapp"; -$a->strings["I like this (toggle)"] = "Jeg liker dette (skru av og på)"; -$a->strings["I don't like this (toggle)"] = "Jeg liker ikke dette (skru av og på)"; -$a->strings["Share This"] = "Del dette"; -$a->strings["share"] = "del"; -$a->strings["View %s's profile - %s"] = "Vis %s sin profil - %s"; -$a->strings["to"] = "til"; -$a->strings["via"] = "via"; -$a->strings["Wall-to-Wall"] = "vegg-til-vegg"; -$a->strings["via Wall-To-Wall:"] = "via vegg-til-vegg:"; -$a->strings["Save Bookmarks"] = "Lagre bokmerker"; -$a->strings["Add to Calendar"] = "Legg til i kalender"; -$a->strings["__ctx:noun__ Likes"] = "Liker"; -$a->strings["__ctx:noun__ Dislikes"] = "Liker ikke"; -$a->strings["%d comment"] = array( - 0 => "%d kommentar", - 1 => "%d kommentarer", -); -$a->strings["This is you"] = "Dette er deg"; -$a->strings["Submit"] = "Send"; -$a->strings["Bold"] = "Uthevet"; -$a->strings["Italic"] = "Kursiv"; -$a->strings["Underline"] = "Understreket"; -$a->strings["Quote"] = "Sitat"; -$a->strings["Code"] = "Kode"; -$a->strings["Image"] = "Bilde"; -$a->strings["Link"] = "Lenke"; -$a->strings["Video"] = "Video"; -$a->strings["Set your current mood and tell your friends"] = "Angi ditt nåværende humør og fortell dine venner"; -$a->strings["Invalid profile identifier."] = "Ugyldig profil-identifikator."; -$a->strings["Profile Visibility Editor"] = "Endre profilsynlighet"; -$a->strings["Click on a contact to add or remove."] = "Klikk på en kontakt for å legge til eller fjerne."; -$a->strings["Visible To"] = "Synlig for"; -$a->strings["All Connections"] = "Alle forbindelser"; -$a->strings["Menu not found."] = "Menyen ble ikke funnet."; -$a->strings["Menu element updated."] = "Menyelement er oppdatert."; -$a->strings["Unable to update menu element."] = "Ikke i stand til å oppdatere menyelement."; -$a->strings["Menu element added."] = "Menyelement lagt til."; -$a->strings["Unable to add menu element."] = "Ikke i stand til å legge til menyelement."; -$a->strings["Not found."] = "Ikke funnet."; -$a->strings["Manage Menu Elements"] = "Håndtere menyelementer"; -$a->strings["Edit menu"] = "Endre meny"; -$a->strings["Edit element"] = "Endre element"; -$a->strings["Drop element"] = "Slett element"; -$a->strings["New element"] = "Nytt element"; -$a->strings["Edit this menu container"] = "Endre denne menybeholderen"; -$a->strings["Add menu element"] = "Legg til menyelement"; -$a->strings["Delete this menu item"] = "Slett dette menyelementet"; -$a->strings["Edit this menu item"] = "Endre dette menyelementet"; -$a->strings["New Menu Element"] = "Nytt menyelement"; -$a->strings["Menu Item Permissions"] = "Menyelement Tillatelser"; -$a->strings["(click to open/close)"] = "(klikk for å åpne/lukke)"; -$a->strings["Link text"] = "Lenketekst"; -$a->strings["URL of link"] = "URL-en til lenken"; -$a->strings["Use RedMatrix magic-auth if available"] = "Bruk RedMatrixs magiske-autentisering hvis tilgjengelig"; -$a->strings["Open link in new window"] = "Åpne lenke i nytt vindu"; -$a->strings["Order in list"] = "Ordne i liste"; -$a->strings["Higher numbers will sink to bottom of listing"] = "Høyere tall vil synke mot bunnen av listen"; -$a->strings["Menu item not found."] = "Menyelement ble ikke funnet."; -$a->strings["Menu item deleted."] = "Menyelement slettet."; -$a->strings["Menu item could not be deleted."] = "Menyelement kunne ikke bli slettet."; -$a->strings["Edit Menu Element"] = "Endre menyelement"; -$a->strings["Modify"] = "Endre"; +$a->strings["Missing room name"] = "Mangler romnavn"; +$a->strings["Duplicate room name"] = "Duplikat romnavn"; +$a->strings["Invalid room specifier."] = "Ugyldig rom-spesifisering"; +$a->strings["Room not found."] = "Rommet ble ikke funnet."; +$a->strings["Room is full"] = "Rommet er fullt"; +$a->strings["Can view my normal stream and posts"] = "Kan se min normale strøm og innlegg"; +$a->strings["Can view my default channel profile"] = "Kan se min standard kanalprofil"; +$a->strings["Can view my photo albums"] = "Kan se mine fotoalbum"; +$a->strings["Can view my connections"] = "Kan se mine forbindelser"; +$a->strings["Can view my file storage"] = "Kan se mitt fillager"; +$a->strings["Can view my webpages"] = "Kan se mine websider"; +$a->strings["Can send me their channel stream and posts"] = "Kan sende meg deres kanalstrøm og innlegg"; +$a->strings["Can post on my channel page (\"wall\")"] = "Kan lage innlegg på min kanalside (\"vegg\")"; +$a->strings["Can comment on or like my posts"] = "Kan kommentere på eller like mine innlegg"; +$a->strings["Can send me private mail messages"] = "Kan sende meg private meldinger"; +$a->strings["Can post photos to my photo albums"] = "Kan legge inn bilder i mine fotoalbum"; +$a->strings["Can like/dislike stuff"] = "Kan like/ikke like forskjellige greier"; +$a->strings["Profiles and things other than posts/comments"] = "Profiler og andre ting enn innlegg/kommentarer"; +$a->strings["Can forward to all my channel contacts via post @mentions"] = "Kan videresende til alle mine kanalkontakter via @navn i innlegg"; +$a->strings["Advanced - useful for creating group forum channels"] = "Avansert - nyttig for å lage forumkanaler for grupper"; +$a->strings["Can chat with me (when available)"] = "Kan chatte/sende lynmeldinger til meg (når tilgjengelig)"; +$a->strings["Can write to my file storage"] = "Kan skrive til mitt fillager"; +$a->strings["Can edit my webpages"] = "Kan endre mine websider"; +$a->strings["Can source my public posts in derived channels"] = "Kan bruke mine offentlige innlegg som kanalkilde i egne kanaler"; +$a->strings["Somewhat advanced - very useful in open communities"] = "Litt avansert - svært nyttig i åpne fellesskap"; +$a->strings["Can administer my channel resources"] = "Kan administrere mine kanalressurser"; +$a->strings["Extremely advanced. Leave this alone unless you know what you are doing"] = "Ekstremt avansert. La dette være med mindre du vet hva du gjør"; +$a->strings["Social Networking"] = "Sosialt nettverk"; +$a->strings["Mostly Public"] = "Ganske offentlig"; +$a->strings["Restricted"] = "Begrenset"; +$a->strings["Private"] = "Privat"; +$a->strings["Community Forum"] = "Forum for fellesskap"; +$a->strings["Feed Republish"] = "Republisering av strømmet innhold"; +$a->strings["Special Purpose"] = "Spesiell bruk"; +$a->strings["Celebrity/Soapbox"] = "Kjendis/Talerstol"; +$a->strings["Group Repository"] = "Gruppelager"; +$a->strings["Custom/Expert Mode"] = "Tilpasset/Ekspertmodus"; $a->strings["Some blurb about what to do when you're new here"] = "En standardtekst om hva du bør gjøre som ny her"; -$a->strings["Profile not found."] = "Profilen ble ikke funnet."; -$a->strings["Profile deleted."] = "Profilen er slettet."; -$a->strings["Profile-"] = "Profil-"; -$a->strings["New profile created."] = "Ny profil opprettet."; -$a->strings["Profile unavailable to clone."] = "Profilen er utilgjengelig for klonen."; -$a->strings["Profile unavailable to export."] = "Profilen er utilgjengelig for eksport."; -$a->strings["Profile Name is required."] = "Profilnavn er påkrevd."; -$a->strings["Marital Status"] = "Sivilstand"; -$a->strings["Romantic Partner"] = "Romantisk partner"; -$a->strings["Likes"] = "Liker"; -$a->strings["Dislikes"] = "Liker ikke"; -$a->strings["Work/Employment"] = "Arbeid/sysselsetting"; -$a->strings["Religion"] = "Religion"; -$a->strings["Political Views"] = "Politiske synspunkter"; -$a->strings["Gender"] = "Kjønn"; -$a->strings["Sexual Preference"] = "Seksuelle preferanser"; -$a->strings["Homepage"] = "Hjemmeside"; -$a->strings["Interests"] = "Interesser"; -$a->strings["Address"] = "Adresse"; -$a->strings["Location"] = "Plassering"; -$a->strings["Profile updated."] = "Profilen er oppdatert."; -$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Skjul kontakt-/vennelisten din fra de som ser på denne profilen?"; -$a->strings["Yes"] = "Ja"; -$a->strings["No"] = "Nei"; -$a->strings["Edit Profile Details"] = "Endre profildetaljer"; -$a->strings["View this profile"] = "Vis denne profilen"; -$a->strings["Change Profile Photo"] = "Endre profilbilde"; -$a->strings["Create a new profile using these settings"] = "Lag en ny profil ved å bruke disse innstillingene"; -$a->strings["Clone this profile"] = "Klon denne profilen"; -$a->strings["Delete this profile"] = "Slett denne profilen"; -$a->strings["Import profile from file"] = "Importer profil fra fil"; -$a->strings["Export profile to file"] = "Eksporter profil til fil"; -$a->strings["Profile Name:"] = "Profilnavn:"; -$a->strings["Your Full Name:"] = "Ditt fulle navn:"; -$a->strings["Title/Description:"] = "Tittel/Beskrivelse:"; -$a->strings["Your Gender:"] = "Ditt kjønn:"; -$a->strings["Birthday :"] = "Fødselsdag:"; -$a->strings["Street Address:"] = "Gateadresse:"; -$a->strings["Locality/City:"] = "Sted/By:"; -$a->strings["Postal/Zip Code:"] = "Postnummer/ZIP-kode:"; -$a->strings["Country:"] = "Land:"; -$a->strings["Region/State:"] = "Region/fylke:"; -$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = "<span class=\"heart\">♥</span> Sivilstand:"; -$a->strings["Who: (if applicable)"] = "Hvem: (hvis det er aktuelt) "; -$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Eksempler: kari123, Kari Villiamsen, kari@example.com"; -$a->strings["Since [date]:"] = "Siden [dato]:"; -$a->strings["Homepage URL:"] = "Hjemmeside URL:"; -$a->strings["Religious Views:"] = "Religiøse synspunkter:"; -$a->strings["Keywords:"] = "Nøkkelord:"; -$a->strings["Example: fishing photography software"] = "Eksempel: fisking fotografering programvare"; -$a->strings["Used in directory listings"] = "Brukt i katalogoppføringer"; -$a->strings["Tell us about yourself..."] = "Fortell oss om deg selv..."; -$a->strings["Hobbies/Interests"] = "Hobbier/Interesser"; -$a->strings["Contact information and Social Networks"] = "Kontaktinformasjon og sosiale nettverk"; -$a->strings["My other channels"] = "Mine andre kanaler"; -$a->strings["Musical interests"] = "Musikkinteresser"; -$a->strings["Books, literature"] = "Bøker, litteratur"; -$a->strings["Television"] = "TV/fjernsyn"; -$a->strings["Film/dance/culture/entertainment"] = "Film/dans/kultur/underholdning"; -$a->strings["Love/romance"] = "Kjærlighet/romantikk"; -$a->strings["Work/employment"] = "Arbeid/sysselsetting"; -$a->strings["School/education"] = "Skole/utdanning"; -$a->strings["This is your default profile."] = "Dette er din standardprofil."; -$a->strings["Age: "] = "Alder:"; -$a->strings["Edit/Manage Profiles"] = "Endre/håndter profiler"; -$a->strings["Add profile things"] = "Legg til profilting"; -$a->strings["Include desirable objects in your profile"] = "Inkluder ønskverdige objekter i din profil"; -$a->strings["Continue"] = "Fortsett"; -$a->strings["Premium Channel Setup"] = "Premiumkanal-oppsett"; -$a->strings["Enable premium channel connection restrictions"] = "Slå på restriksjoner for forbindelse med premiumkanal"; -$a->strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = "Vennligst skriv dine restriksjoner og betingelser, slik som PayPal-kvittering, retningslinjer for bruk, og så videre."; -$a->strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = "Denne kanalen kan kreve ytterligere steg og bekreftelse av følgende betingelser før tilkobling:"; -$a->strings["Potential connections will then see the following text before proceeding:"] = "Potensielle forbindelser vil da se følgende tekst før de går videre:"; -$a->strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Ved å fortsette bekrefter jeg at jeg har oppfylt alle instruksjoner gitt på denne siden."; -$a->strings["(No specific instructions have been provided by the channel owner.)"] = "(Ingen spesifikke instruksjoner er gitt av kanaleieren.)"; -$a->strings["Restricted or Premium Channel"] = "Begrenset kanal eller premiumkanal"; -$a->strings["Remote authentication blocked. You are logged into this site locally. Please logout and retry."] = "Fjernautentisering blokkert. Du er logget inn på dette nettstedet lokalt. Vennligst logg ut og prøv på nytt."; -$a->strings["Welcome %s. Remote authentication successful."] = "Velkommen %s. Ekstern autentisering er vellykket."; -$a->strings["Red Matrix Server - Setup"] = "Red Matrix tjener - oppsett"; -$a->strings["Could not connect to database."] = "Fikk ikke kontakt med databasen."; -$a->strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "Fikk ikke kontakt med det angitte nettstedets URL. Problemet kan muligens skyldes SSL-sertifikatet eller DNS."; -$a->strings["Could not create table."] = "Kunne ikke lage tabellen."; -$a->strings["Your site database has been installed."] = "Databasen til ditt nettsted har blitt installert."; -$a->strings["You may need to import the file \"install/schema_xxx.sql\" manually using a database client."] = "Du må kanskje importere filen \"install/schmea_xxx.sql\" manuelt ved å bruke en databaseklient."; -$a->strings["Please see the file \"install/INSTALL.txt\"."] = "Vennligst les filen \"install/INSTALL.txt\"."; -$a->strings["System check"] = "Systemsjekk"; -$a->strings["Next"] = "Neste"; -$a->strings["Check again"] = "Sjekk igjen"; -$a->strings["Database connection"] = "Databaseforbindelse"; -$a->strings["In order to install Red Matrix we need to know how to connect to your database."] = "For å installere Red Matrix må du oppgi hvordan din database kan kontaktes."; -$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Vennligst kontakt din nettstedstilbyder eller nettstedsadministrator hvis du har spørsmål om disse innstillingene."; -$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Databasen du oppgir nedenfor må finnes på forhånd. Hvis den ikke finnes, vennligst lag den før du fortsetter."; -$a->strings["Database Server Name"] = "Navn på databasetjener"; -$a->strings["Default is localhost"] = "Standard er localhost"; -$a->strings["Database Port"] = "Databaseport"; -$a->strings["Communication port number - use 0 for default"] = "Kommunikasjonsportnummer - bruk 0 for standard"; -$a->strings["Database Login Name"] = "Database innloggingsnavn"; -$a->strings["Database Login Password"] = "Database innloggingspassord"; -$a->strings["Database Name"] = "Databasenavn"; -$a->strings["Database Type"] = "Databasetype"; -$a->strings["Site administrator email address"] = "E-postadressen til administrator ved nettstedet"; -$a->strings["Your account email address must match this in order to use the web admin panel."] = "Din konto sin e-postadresse må være lik denne for å kunne bruke web-administrasjonspanelet."; -$a->strings["Website URL"] = "Nettstedets URL"; -$a->strings["Please use SSL (https) URL if available."] = "Vennligst bruk SSL (https) URL hvis tilgjengelig."; -$a->strings["Please select a default timezone for your website"] = "Vennligst velg en standard tidssone for ditt nettsted"; -$a->strings["Site settings"] = "Nettstedets innstillinger"; -$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Fant ikke en kommandolinjeversjon av PHP i webtjenerens sti (PATH)."; -$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."] = "Hvis du ikke har en kommandolinjeversjon av PHP installert på tjeneren, så vil du ikke kunne kjøre bakgrunnshenting via cron."; -$a->strings["PHP executable path"] = "PHP-kjørefilens sti"; -$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Skriv full sti til kjørefilen for PHP. Du kan la denne stå blank for å fortsette installasjonen."; -$a->strings["Command line PHP"] = "Kommandolinje PHP"; -$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Kommandolinjeversjonen av PHP på ditt system har ikke \"register_argc_argv\" påskrudd."; -$a->strings["This is required for message delivery to work."] = "Dette er påkrevd for at meldingslevering skal virke."; -$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv"; -$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Feil: \"openssl_pkey_new\"-funksjonen på dette systemet er ikke i stand til å lage krypteringsnøkler"; -$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Ved kjøring på Windows, vennligst se \"http://www.php.net/manual/en/openssl.installation.php\"."; -$a->strings["Generate encryption keys"] = "Lag krypteringsnøkler"; -$a->strings["libCurl PHP module"] = "libCurl PHP-modul"; -$a->strings["GD graphics PHP module"] = "GD graphics PHP-modul"; -$a->strings["OpenSSL PHP module"] = "OpenSSL PHP-modul"; -$a->strings["mysqli or postgres PHP module"] = "MySQLi eller Postgres PHP modul"; -$a->strings["mb_string PHP module"] = "mb_string PHP-modul"; -$a->strings["mcrypt PHP module"] = "mcrypt PHP-modul"; -$a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite-modul"; -$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Feil: Apache web-tjenerens mod-rewrite-modul er påkrevd, men ikke installert."; -$a->strings["proc_open"] = "proc_open"; -$a->strings["Error: proc_open is required but is either not installed or has been disabled in php.ini"] = "Feil: proc_open er påkrevd, men er enten ikke installert eller har blitt avskrudd i php.ini"; -$a->strings["Error: libCURL PHP module required but not installed."] = "Feil: libCURL PHP-modul er påkrevd, men er ikke installert."; -$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Feil: GD graphics PHP-modul med JPEG-støtte er påkrevd, men er ikke installert."; -$a->strings["Error: openssl PHP module required but not installed."] = "Feil: openssl PHP-modul er påkrevd, men er ikke installert."; -$a->strings["Error: mysqli or postgres PHP module required but neither are installed."] = "Feil: mysqli eller postgres PHP modul er påkrevd, men ingen av dem er installert."; -$a->strings["Error: mb_string PHP module required but not installed."] = "Feil: mb_string PHP-modul er påkrevd, men er ikke installert."; -$a->strings["Error: mcrypt PHP module required but not installed."] = "Feil: mcrypt PHP-modul er påkrevd, men er ikke installert."; -$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."] = "Web-installasjonen må kunne lage en fil kalt \".htconfig.php\" i toppkatalogen til web-tjeneren din, men dette får den ikke til."; -$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."] = "Dette er oftest tillatelsesinnstilling, ettersom webtjeneren kanskje kan skrive til filer i din mappe - selv om du kan."; -$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Red top folder."] = "På slutten av denne prosedyren vil vi gi deg en tekst til å lagre i en fil kalt .htconfig.php i toppkatalogen til din Red."; -$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"install/INSTALL.txt\" for instructions."] = "Alternativt, så kan du hoppe over denne prosedyren og gjennomføre en manuell installasjon. Vennligst se filen \"install/INSTALL.txt\" for instruksjoner."; -$a->strings[".htconfig.php is writable"] = ".htconfig.php kan skrives til"; -$a->strings["Red uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Red bruker malmotoren Smarty3 for å gjengi sine webvisninger. Smarty3 kompilerer malene om til PHP for å framskynde gjengivelsen."; -$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory %s under the Red top level folder."] = "For å kunne lagre disse kompilerte malene, så må webtjeneren ha skrivetilgang til katalogen %s under Red sin hovedmappe."; -$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Vennligst sikre at brukeren som din web-tjeneste kjører som (for eksempel www-data) har skrivetilgang til denne katalogen."; -$a->strings["Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains."] = "Merknad: som et sikkerhetstiltak bør du bare gi webtjerenn skrivetilgang til %s - ikke til malfilene (.tpl) som den inneholder."; -$a->strings["%s is writable"] = "%s kan skrives til"; -$a->strings["Red uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the Red top level folder"] = "Red bruker lagringsmappen for å lagre opplastede filer. Webtjeneren trenger å ha skrivetilgang til lagringsmappen under Red sin toppnivåmappe."; -$a->strings["store is writable"] = "lageret kan skrives til"; -$a->strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = "SSL-sertifikatet kan ikke kontrolleres. Fiks sertifikatet eller skru av https tilgang til dette nettstedet."; -$a->strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = "Hvis du har HTTPS-tilgang til ditt nettsted eller tillater forbindelser til TCP port 443 (HTTPS-porten), så MÅ du bruke nettlesergodkjent sertifkater. Du MÅ IKKE bruke egensignert sertifikater!"; -$a->strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Denne begrensningen er tatt inn fordi offentlige innlegg fra deg kan for eksempel inneholde referanser til bilder på din egen hub."; -$a->strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = "Hvis sertifikatet ditt ikke gjenkjennes, så vil medlemmer på andre nettsteder (som selv kan ha godkjente sertifikater) få en beskjed med en advarsel på deres eget nettsted som klager over sikkerhetsproblemer."; -$a->strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = "Dette kan gi problemer med brukervennlighet (ikke bare på ditt eget nettsted), så vi må insistere på dette kravet."; -$a->strings["Providers are available that issue free certificates which are browser-valid."] = "Det finnes tilbydere som utsteder gratis sertifikater som er gyldige i nettlesere."; -$a->strings["SSL certificate validation"] = "SSL sertifikat-kontroll"; -$a->strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "URL omskriving (rewrite) i .htaccess virker ikke. Sjekk konfigurasjonen til tjeneren din. Test:"; -$a->strings["Url rewrite is working"] = "URL rewrite virker"; -$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."] = "Databasekonfigurasjonsfilen \".htconfig.php\" kunne ikke skrives. Vennligst bruk den medfølgende teksten for å lage en konfigurasjonsfil i toppkatalogen av din web-tjener."; -$a->strings["Errors encountered creating database tables."] = "Feil oppstod under opprettelsen av databasetabeller."; -$a->strings["<h1>What next</h1>"] = "<h1>Hva gjenstår</h1>"; -$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "VIKTIG: Du må [manuelt] sette opp en automatisert tidfestet oppgave til bakgrunnshenteren."; -$a->strings["Version %s"] = "Versjon %s"; -$a->strings["Installed plugins/addons/apps:"] = "Installerte tilleggsfunksjoner/tillegg/apper:"; -$a->strings["No installed plugins/addons/apps"] = "Ingen installerte tilleggsfunksjoner/tillegg/apper"; -$a->strings["Red"] = "Red"; -$a->strings["This is a hub of the Red Matrix - a global cooperative network of decentralized privacy enhanced websites."] = "Dette er en hub i Red Matrix - et globalt kooperativt nettverk av desentraliserte personvernforsterkede nettsteder."; -$a->strings["Running at web location"] = "Kjører på webplasseringen"; -$a->strings["Please visit <a href=\"http://getzot.com\">GetZot.com</a> to learn more about the Red Matrix."] = "Vennligst besøk <a href=\"http://getzot.com\">GetZot.com</a> for å lære mer om Red Matrix."; -$a->strings["Bug reports and issues: please visit"] = "Feilmeldinger og feilretting: vennligst besøk"; -$a->strings["Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot com"] = "Forslag, ros og så videre - vennligst e-post \"redmatrix\" hos librelist - punktum com"; -$a->strings["Site Administrators"] = "Nettstedsadministratorer"; -$a->strings["Poke/Prod"] = "Prikke/oppildne"; -$a->strings["poke, prod or do other things to somebody"] = "prikke, oppildne eller gjør andre ting med noen"; -$a->strings["Recipient"] = "Mottaker"; -$a->strings["Choose what you wish to do to recipient"] = "Velg hva du ønsker å gjøre med mottakeren"; -$a->strings["Make this post private"] = "Gjør dette innlegget privat"; -$a->strings["Authorize application connection"] = "Tillat programforbindelse"; -$a->strings["Return to your app and insert this Securty Code:"] = "Gå tilbake til din app og legg inn denne sikkerhetskoden:"; -$a->strings["Please login to continue."] = "Vennligst logg inn for å fortsette."; -$a->strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?"; -$a->strings["Item not available."] = "Elementet er ikke tilgjengelig."; -$a->strings["Fetching URL returns error: %1\$s"] = "Henting av URL gir følgende feil: %1\$s"; -$a->strings["Invalid item."] = "Ugyldig element."; -$a->strings["Channel not found."] = "Kanalen ble ikke funnet."; -$a->strings["Page not found."] = "Siden ikke funnet."; -$a->strings["Failed to create source. No channel selected."] = "Mislyktes med å lage kilde. Ingen kanal er valgt."; -$a->strings["Source created."] = "Kilden er laget."; -$a->strings["Source updated."] = "Kilden er oppdatert."; -$a->strings["*"] = "*"; -$a->strings["Manage remote sources of content for your channel."] = "Håndtere eksterne innholdskilder til din kanal."; -$a->strings["New Source"] = "Ny kilde"; -$a->strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger."; -$a->strings["Only import content with these words (one per line)"] = "Bare importer innhold med disse ordene (ett ord per linje)"; -$a->strings["Leave blank to import all public content"] = "La stå tomt for å importere alt offentlig innhold"; -$a->strings["Channel Name"] = "Kanalnavn"; -$a->strings["Source not found."] = "Kilden ble ikke funnet."; -$a->strings["Edit Source"] = "Endre kilde"; -$a->strings["Delete Source"] = "Slett kilde"; -$a->strings["Source removed"] = "Kilden er fjernet"; -$a->strings["Unable to remove source."] = "Ikke i stand til å fjerne kilde."; -$a->strings["Block Name"] = "Byggeklossens navn"; -$a->strings["Public access denied."] = "Offentlig tilgang avvist."; -$a->strings["Gender: "] = "Kjønn:"; -$a->strings["Status: "] = "Status:"; -$a->strings["Homepage: "] = "Hjemmeside:"; -$a->strings["Hometown: "] = "Hjemby:"; -$a->strings["About: "] = "Om:"; -$a->strings["Public Forum:"] = "Offentlig forum:"; -$a->strings["Keywords: "] = "Nøkkelord:"; -$a->strings["Finding:"] = "Finner:"; -$a->strings["next page"] = "Neste side"; -$a->strings["previous page"] = "Forrige side"; -$a->strings["No entries (some entries may be hidden)."] = "Ingen oppføringer (noen oppføringer kan være skjult)."; -$a->strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Antallet daglige registreringer ved nettstedet er overskredet. Vær vennlig å prøve igjen imorgen."; -$a->strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Vennligst angi at tjenesteavtalen er akseptert. Registrering mislyktes."; -$a->strings["Passwords do not match."] = "Passordene er ikke like."; -$a->strings["Registration successful. Please check your email for validation instructions."] = "Registreringen er vellykket. Vennligst sjekk e-posten din for å bekrefte opprettelsen."; -$a->strings["Your registration is pending approval by the site owner."] = "Din registrering venter på godkjenning av nettstedets eier."; -$a->strings["Your registration can not be processed."] = "Din registrering kan ikke behandles."; -$a->strings["Registration on this site/hub is by approval only."] = "Registrering på dette nettstedet/denne hubben skjer bare gjennom godkjenning."; -$a->strings["<a href=\"pubsites\">Register at another affiliated site/hub</a>"] = "<a href=\"pubsites\">Registrer på et annet tilknyttet nettsted/hub</a>"; -$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Dette nettstedet har overskredet antallet tillate kontoregistreringer per dag. Vennligst prøv igjen imorgen."; -$a->strings["Terms of Service"] = "Tjenesteavtale"; -$a->strings["I accept the %s for this website"] = "Jeg godtar %s for dette nettstedet"; -$a->strings["I am over 13 years of age and accept the %s for this website"] = "Jeg er over 13 år gammel og aksepterer %s for dette nettstedet."; -$a->strings["Registration"] = "Registrering"; -$a->strings["Membership on this site is by invitation only."] = "Medlemskap ved dette nettstedet skjer kun via invitasjon."; -$a->strings["Please enter your invitation code"] = "Vennligst skriv din invitasjonskode"; -$a->strings["Your email address"] = "Din e-postadresse"; -$a->strings["Choose a password"] = "Velg et passord"; -$a->strings["Please re-enter your password"] = "Vennligst skriv ditt passord en gang til"; -$a->strings["Event can not end before it has started."] = "Hendelsen kan ikke slutte før den starter."; -$a->strings["Event title and start time are required."] = "Hendelsestittel og starttidspunkt er påkrevd."; -$a->strings["Event not found."] = "Hendelsen ble ikke funnet."; -$a->strings["l, F j"] = "l, F j"; -$a->strings["Edit event"] = "Endre hendelse"; -$a->strings["Create New Event"] = "Lag ny hendelse"; -$a->strings["Previous"] = "Forrige"; -$a->strings["Event details"] = "Hendelsesdetaljer"; -$a->strings["Starting date and Title are required."] = "Startdato og Tittel er påkrevd."; -$a->strings["Event Starts:"] = "Hendelsen starter:"; -$a->strings["Required"] = "Påkrevd"; -$a->strings["Finish date/time is not known or not relevant"] = "Sluttdato/-tidspunkt er ikke kjent eller ikke relevant"; -$a->strings["Event Finishes:"] = "Hendelsen slutter:"; -$a->strings["Adjust for viewer timezone"] = "Juster i forhold til tilskuerens tidssone"; -$a->strings["Description:"] = "Beskrivelse:"; -$a->strings["Title:"] = "Tittel:"; -$a->strings["Share this event"] = "Del denne hendelsen"; -$a->strings["Public Sites"] = "Offentlige nettsteder"; -$a->strings["The listed sites allow public registration into the Red Matrix. All sites in the matrix are interlinked so membership on any of them conveys membership in the matrix as a whole. Some sites may require subscription or provide tiered service plans. The provider links <strong>may</strong> provide additional details."] = "Nettstedene på listen tillater offentlig registrering i Red Matrix. Alle nettsteder i matrix er forbundet så medlemskap på enhver av dem formidler medlemskap i hele matrix. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Tilbyderlenkene <strong>kan</strong> gi tilleggsopplysninger."; -$a->strings["Site URL"] = "Nettstedets URL"; -$a->strings["Access Type"] = "Tilgangstype"; -$a->strings["Registration Policy"] = "Retningslinjer for registrering"; -$a->strings["You must be logged in to see this page."] = "Du må være innloegget for å se denne siden."; -$a->strings["Insufficient permissions. Request redirected to profile page."] = "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden."; -$a->strings["Select a bookmark folder"] = "Velg en bokmerkemappe"; -$a->strings["Save Bookmark"] = "Lagre bokmerke"; -$a->strings["URL of bookmark"] = "URL-en til bokmerket"; -$a->strings["Description"] = "Beskrivelse"; -$a->strings["Or enter new bookmark folder name"] = "Eller skriv nytt navn på bokmerkemappe"; -$a->strings["Room not found"] = "Rommet ble ikke funnet"; -$a->strings["Leave Room"] = "Forlat rom"; -$a->strings["Delete This Room"] = "Slett dette rommet"; -$a->strings["I am away right now"] = "Jeg er borte akkurat nå"; -$a->strings["I am online"] = "Jeg er online"; -$a->strings["Bookmark this room"] = "Bokmerk dette rommet"; -$a->strings["New Chatroom"] = "Nytt chatrom"; -$a->strings["Chatroom Name"] = "Navn på chatrom"; -$a->strings["%1\$s's Chatrooms"] = "%1\$s sine chatrom"; -$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s følger %2\$s sin %3\$s"; -$a->strings["Away"] = "Borte"; -$a->strings["Online"] = "Online"; -$a->strings["Please login."] = "Vennligst logg inn."; -$a->strings["No such group"] = "Gruppen finnes ikke"; -$a->strings["Search Results For:"] = "Søkeresultat for:"; -$a->strings["Collection is empty"] = "Samlingen er tom"; -$a->strings["Collection: "] = "Samling:"; -$a->strings["Connection: "] = "Forbindelse:"; -$a->strings["Invalid connection."] = "Ugyldig forbindelse."; -$a->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."; -$a->strings["Remove This Channel"] = "Fjern denne kanalen"; -$a->strings["This will completely remove this channel from the network. Once this has been done it is not recoverable."] = "Dette vil fullstendig fjerne kanalen fra nettverket. Når det er gjort kan det ikke angres."; -$a->strings["Please enter your password for verification:"] = "Vennligst skriv ditt passord for å få bekreftelse:"; -$a->strings["Remove this channel and all its clones from the network"] = "Fjern denne kanalen og alle dens kloner fra nettverket"; -$a->strings["By default only the instance of the channel located on this hub will be removed from the network"] = "Som standard vil bare forekomsten av denne kanalen lokalisert på denne hubben bli fjernet fra nettverket"; -$a->strings["Remove Channel"] = "Fjern kanal"; -$a->strings["No channel."] = "Ingen kanal."; -$a->strings["Common connections"] = "Felles forbindelser"; -$a->strings["No connections in common."] = "Ingen forbindelser felles."; -$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig."; -$a->strings["The error message was:"] = "Feilmeldingen var:"; -$a->strings["Authentication failed."] = "Autentisering mislyktes."; -$a->strings["Remote Authentication"] = "Fjernautentisering"; -$a->strings["Enter your channel address (e.g. channel@example.com)"] = "Skriv din kanaladresse (for eksempel channel@exampel.com)"; -$a->strings["Authenticate"] = "Autentiser"; -$a->strings["- select -"] = "- velg -"; -$a->strings["Page owner information could not be retrieved."] = "Informasjon om sideeier kunne ikke hentes."; -$a->strings["Album not found."] = "Albumet ble ikke funnet."; -$a->strings["Delete Album"] = "Slett album"; -$a->strings["Delete Photo"] = "Slett bilde"; -$a->strings["No photos selected"] = "Ingen bilder valgt"; -$a->strings["Access to this item is restricted."] = "Tilgang til dette elementet er begrenset."; -$a->strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt."; -$a->strings["%1$.2f MB photo storage used."] = "%1$.2f MB lagringsplass til bilder er brukt."; -$a->strings["Upload Photos"] = "Last opp bilder"; -$a->strings["Enter a new album name"] = "Skriv et nytt albumnavn"; -$a->strings["or select an existing one (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)"; -$a->strings["Do not show a status post for this upload"] = "Ikke lag et statusinnlegg for denne oppdateringen"; -$a->strings["Album name could not be decoded"] = "Albumnavnet kunne ikke dekodes"; -$a->strings["Contact Photos"] = "Kontaktbilder"; -$a->strings["Show Newest First"] = "Vis nyeste først"; -$a->strings["Show Oldest First"] = "Vis eldste først"; -$a->strings["View Photo"] = "Vis foto"; -$a->strings["Edit Album"] = "Endre album"; -$a->strings["Permission denied. Access to this item may be restricted."] = "Tillatelse avvist. Tilgang til dette elementet kan være begrenset."; -$a->strings["Photo not available"] = "Bilde er utilgjengelig"; -$a->strings["Use as profile photo"] = "Bruk som profilbilde"; -$a->strings["Private Photo"] = "Privat bilde"; -$a->strings["View Full Size"] = "Vis i full størrelse"; -$a->strings["Remove"] = "Fjern"; -$a->strings["Edit photo"] = "Endre bilde"; -$a->strings["Rotate CW (right)"] = "Roter med klokka (mot høyre)"; -$a->strings["Rotate CCW (left)"] = "Roter mot klokka (venstre)"; -$a->strings["Caption"] = "Overskrift"; -$a->strings["Add a Tag"] = "Legg til merkelapp"; -$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Eksempel: @bob, @Barbara_Jensen, @jim@example.com"; -$a->strings["Flag as adult in album view"] = "Flag som voksent i albumvisning"; -$a->strings["In This Photo:"] = "I dette bildet:"; -$a->strings["View Album"] = "Vis album"; -$a->strings["Recent Photos"] = "Nye bilder"; -$a->strings["Could not access contact record."] = "Fikk ikke tilgang til kontaktinformasjonen."; -$a->strings["Could not locate selected profile."] = "Fant ikke valgt profil."; -$a->strings["Connection updated."] = "Forbindelsen er oppdatert."; -$a->strings["Failed to update connection record."] = "Mislyktes med å oppdatere forbindelsesinformasjonen."; -$a->strings["Blocked"] = "Blokkert"; -$a->strings["Ignored"] = "Ignorert"; -$a->strings["Hidden"] = "Skjult"; -$a->strings["Archived"] = "Arkivert"; -$a->strings["All"] = "Alle"; -$a->strings["Suggest new connections"] = "Foreslå nye forbindelser"; -$a->strings["New Connections"] = "Nye forbindelser"; -$a->strings["Show pending (new) connections"] = "Vis ventende (nye) forbindelser"; -$a->strings["Show all connections"] = "Vis alle forbindelser"; -$a->strings["Unblocked"] = "Ikke blokkert lenger"; -$a->strings["Only show unblocked connections"] = "Vis bare forbindelser som ikke er blokkert"; -$a->strings["Only show blocked connections"] = "Vis bare forbindelser som er blokkert"; -$a->strings["Only show ignored connections"] = "Vis bare ignorerte forbindelser"; -$a->strings["Only show archived connections"] = "Vis bare arkiverte forbindelser"; -$a->strings["Only show hidden connections"] = "Vis bare skjulte forbindelser"; -$a->strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]"; -$a->strings["Edit connection"] = "Endre forbindelse"; -$a->strings["Search your connections"] = "Søk blant dine forbindelser"; -$a->strings["Finding: "] = "Fant:"; $a->strings["You have created %1$.0f of %2$.0f allowed channels."] = "Du har laget %1$.0f av %2$.0f tillatte kanaler."; $a->strings["Create a new channel"] = "Lag en ny kanal"; $a->strings["Current Channel"] = "Gjeldende kanal"; -$a->strings["Attach to one of your channels by selecting it."] = "Bytt til en av dine kanaler ved å velge den."; +$a->strings["Switch to one of your channels by selecting it."] = "Bytt til en av dine kanaler ved å velge den."; $a->strings["Default Channel"] = "Standardkanal"; $a->strings["Make Default"] = "Gjør til standard"; -$a->strings["Edit post"] = "Endre innlegg"; -$a->strings["is now connected to"] = "er nå forbundet til"; -$a->strings["Could not access address book record."] = "Fikk ikke tilgang til informasjonen i adresseboken."; -$a->strings["Refresh failed - channel is currently unavailable."] = "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."; -$a->strings["Channel has been unblocked"] = "Kanalen er ikke blokkert lenger"; -$a->strings["Channel has been blocked"] = "Kanalen har blitt blokkert"; -$a->strings["Unable to set address book parameters."] = "Ikke i stand til å angi parametre for adresseboken."; -$a->strings["Channel has been unignored"] = "Kanalen er ikke lenger ignorert"; -$a->strings["Channel has been ignored"] = "Kanalen blir ignorert"; -$a->strings["Channel has been unarchived"] = "Kanalen er ikke lenger arkivert"; -$a->strings["Channel has been archived"] = "Kanalen er arkivert"; -$a->strings["Channel has been unhidden"] = "Kanalen er ikke lenger skjult"; -$a->strings["Channel has been hidden"] = "Kanalen er blitt skjult"; -$a->strings["Channel has been approved"] = "Kanalen har blitt godkjent"; -$a->strings["Channel has been unapproved"] = "Kanalen er ikke lenger godkjent"; -$a->strings["Connection has been removed."] = "Forbindelsen har blitt fjernet."; -$a->strings["View %s's profile"] = "Vis %s sin profil"; -$a->strings["Refresh Permissions"] = "Oppfrisk tillatelser"; -$a->strings["Fetch updated permissions"] = "Hent oppdaterte tillatelser"; -$a->strings["Recent Activity"] = "Nylig aktivitet"; -$a->strings["View recent posts and comments"] = "Vis nylige innlegg og kommentarer"; -$a->strings["Unblock"] = "Ikke blokker lenger"; -$a->strings["Block"] = "Blokker"; -$a->strings["Block or Unblock this connection"] = "Blokker eller fjern blokkering av denne forbindelsen "; -$a->strings["Unignore"] = "Ikke ignorer lenger"; -$a->strings["Ignore"] = "Ignorer"; -$a->strings["Ignore or Unignore this connection"] = "Ignorer eller fjern ignorering av denne forbindelsen"; -$a->strings["Unarchive"] = "Ikke arkiver lenger"; -$a->strings["Archive"] = "Arkiver"; -$a->strings["Archive or Unarchive this connection"] = "Arkiver eller fjern arkivering av denne forbindelsen"; -$a->strings["Unhide"] = "Ikke skjul lenger"; -$a->strings["Hide"] = "Skjul"; -$a->strings["Hide or Unhide this connection"] = "Skjul eller fjern skjuling av denne forbindelsen"; -$a->strings["Delete this connection"] = "Slett denne forbindelsen"; -$a->strings["Approve this connection"] = "Godta denne forbindelsen"; -$a->strings["Accept connection to allow communication"] = "Godta denne forbindelsen for å tillate kommunikasjon"; -$a->strings["Connections: settings for %s"] = "Forbindelser: innstillinger for %s"; -$a->strings["Apply these permissions automatically"] = "Bruk disse tillatelsene automatisk"; -$a->strings["Apply the permissions indicated on this page to all new connections."] = "Bruk tillatelsene angitt på denne siden på alle nye forbindelser."; -$a->strings["Slide to adjust your degree of friendship"] = "Flytt for å justere din grad av vennskap"; -$a->strings["inherited"] = "arvet"; -$a->strings["Connection has no individual permissions!"] = "Forbindelsen har ingen individuelle tillatelser!"; -$a->strings["This may be appropriate based on your <a href=\"settings\">privacy settings</a>, though you may wish to review the \"Advanced Permissions\"."] = "Dette kan være riktig basert på dine <a href=\"settings\">personverninnstillinger</a>, men kanskje du bør se over \"Avanserte tillatelser\"."; -$a->strings["Profile Visibility"] = "Profilens synlighet"; -$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte. "; -$a->strings["Contact Information / Notes"] = "Kontaktinformasjon / Merknader"; -$a->strings["Edit contact notes"] = "Endre kontaktmerknader"; -$a->strings["Their Settings"] = "Deres innstillinger"; -$a->strings["My Settings"] = "Mine innstillinger"; -$a->strings["Clear/Disable Automatic Permissions"] = "Tøm/Skru av Automatiske tillatelser"; -$a->strings["Forum Members"] = "Forummedlemmer"; -$a->strings["Soapbox"] = "Talerstol"; -$a->strings["Full Sharing (typical social network permissions)"] = "Full deling (typiske tillatelser i sosiale nettverk)"; -$a->strings["Cautious Sharing "] = "Forsiktig deling"; -$a->strings["Follow Only"] = "Bare følg"; -$a->strings["Individual Permissions"] = "Individuelle tillatelser"; -$a->strings["Some permissions may be inherited from your channel <a href=\"settings\">privacy settings</a>, which have higher priority than individual settings. Changing those inherited settings on this page will have no effect."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\">personverninnstillinger</a>, som har høyere prioritet enn individuelle innstillinger. Å endre arvede innstillinger på denne siden vil ikke ha noen effekt."; -$a->strings["Advanced Permissions"] = "Avanserte tillatelser"; -$a->strings["Simple Permissions (select one and submit)"] = "Enkle tillatelser (velg en og lagre)"; -$a->strings["Visit %s's profile - %s"] = "Besøk %s sin profil - %s"; -$a->strings["Block/Unblock contact"] = "Blokker/Ikke blokker kontakt"; -$a->strings["Ignore contact"] = "Ignorer kontakt"; -$a->strings["Repair URL settings"] = "Reparer URL-innstillinger"; -$a->strings["View conversations"] = "Vis samtaler"; -$a->strings["Delete contact"] = "Slett kontakt"; -$a->strings["Last update:"] = "Siste oppdatering:"; -$a->strings["Update public posts"] = "Oppdater offentlige innlegg"; -$a->strings["Update now"] = "Oppdater nå"; -$a->strings["Currently blocked"] = "For øyeblikket blokkert"; -$a->strings["Currently ignored"] = "For øyeblikket ignorert"; -$a->strings["Currently archived"] = "For øyeblikket arkivert"; -$a->strings["Currently pending"] = "For øyeblikket ventende"; -$a->strings["Hide this contact from others"] = "Skjul denne kontakten for andre"; -$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Svar/likes på dine offentlige innlegg <strong>kan</strong> fortsatt være synlige"; -$a->strings["OpenID protocol error. No ID returned."] = "OpenID protokollfeil. Ingen ID ble returnert."; -$a->strings["Thing updated"] = "Tingen er oppdatert"; -$a->strings["Object store: failed"] = "Objektlagring: mislyktes"; -$a->strings["Thing added"] = "Ting lagt til"; -$a->strings["OBJ: %1\$s %2\$s %3\$s"] = "OBJ: %1\$s %2\$s %3\$s"; -$a->strings["Show Thing"] = "Vis ting"; -$a->strings["item not found."] = "element ble ikke funnet."; -$a->strings["Edit Thing"] = "Endre ting"; -$a->strings["Select a profile"] = "Velg en profil"; -$a->strings["Post an activity"] = "Legg inn en aktivitet"; -$a->strings["Only sends to viewers of the applicable profile"] = "Sender bare til seere av den aktuelle profilen"; -$a->strings["Name of thing e.g. something"] = "Navn på ting for eksempel noe"; -$a->strings["URL of thing (optional)"] = "URL til ting (valgfritt)"; -$a->strings["URL for photo of thing (optional)"] = "URL til bilde av ting (valgfritt)"; -$a->strings["Add Thing to your Profile"] = "Legg til ting i din profil"; -$a->strings["No valid account found."] = "Ingen gyldig konto funnet."; -$a->strings["Password reset request issued. Check your email."] = "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din."; -$a->strings["Site Member (%s)"] = "Nettstedsmedlem (%s)"; -$a->strings["Password reset requested at %s"] = "Forespurt om å tilbakestille passord hos %s"; -$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) Tilbakestilling av passord mislyktes."; -$a->strings["Password Reset"] = "Tilbakestill passord"; -$a->strings["Your password has been reset as requested."] = "Ditt passord har blitt tilbakestilt som forespurt."; -$a->strings["Your new password is"] = "Ditt nye passord er"; -$a->strings["Save or copy your new password - and then"] = "Lagre eller kopier ditt nye passord, og deretter kan du"; -$a->strings["click here to login"] = "klikke her for å logge inn"; -$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket innlogging."; -$a->strings["Your password has changed at %s"] = "Ditt passord er endret hos %s"; -$a->strings["Forgot your Password?"] = "Glemt passord ditt?"; -$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. Sjekk deretter din e-post for videre instruksjoner."; -$a->strings["Email Address"] = "E-postadresse"; -$a->strings["Reset"] = "Tilbakestill"; -$a->strings["Bookmark added"] = "Bokmerke lagt til"; -$a->strings["My Bookmarks"] = "Mine bokmerker"; -$a->strings["My Connections Bookmarks"] = "Mine forbindelsers bokmerker"; -$a->strings["This site is not a directory server"] = "Dette nettstedet er ikke en katalogtjener"; -$a->strings["RedMatrix - Guests: Username: {your email address}, Password: +++"] = "RedMatrix - gjester: brukernavn: {din e-postadresse}, passord: +++"; -$a->strings["sent you a private message"] = "sendte deg en privat melding"; -$a->strings["added your channel"] = "la til din kanal"; -$a->strings["posted an event"] = "la ut en hendelse"; -$a->strings["Item not found"] = "Elementet ble ikke funnet."; -$a->strings["Edit Block"] = "Endre byggekloss"; -$a->strings["Delete block?"] = "Slett byggeklossen?"; -$a->strings["Insert YouTube video"] = "Sett inn YouTube-video"; -$a->strings["Insert Vorbis [.ogg] video"] = "Sett inn Vorbis [.ogg] video"; -$a->strings["Insert Vorbis [.ogg] audio"] = "Legg i"; -$a->strings["Delete Block"] = "Slett byggekloss"; -$a->strings["Layout updated."] = "Layout er oppdatert."; -$a->strings["Edit System Page Description"] = "Endre beskrivelsen av systemsiden"; -$a->strings["Layout not found."] = "Layouten ble ikke funnet."; -$a->strings["Module Name:"] = "Modulnavn:"; -$a->strings["Layout Help"] = "Layout-hjelp"; -$a->strings["Edit Layout"] = "Endre layout"; -$a->strings["Delete layout?"] = "Slett layout?"; -$a->strings["Delete Layout"] = "Slett layout"; -$a->strings["Item is not editable"] = "Elementet kan ikke endres"; -$a->strings["Delete item?"] = "Slett element?"; +$a->strings["%d new messages"] = "%d nye meldinger"; +$a->strings["%d new introductions"] = "%d nye introduksjoner"; +$a->strings["Delegated Channels"] = "Delegerte kanaler"; $a->strings["Name is required"] = "Navn er påkrevd"; $a->strings["Key and Secret are required"] = "Nøkkel og hemmelighet er påkrevd"; +$a->strings["Diaspora Policy Settings updated."] = "Innstillinger for Diaspora retningslinjer er oppdatert."; $a->strings["Passwords do not match. Password unchanged."] = "Passordene stemmer ikke overens. Passord uforandret."; $a->strings["Empty passwords are not allowed. Password unchanged."] = "Tomme passord er ikke tillatt. Passord uforandret."; $a->strings["Password changed."] = "Passord endret."; @@ -1390,6 +936,8 @@ $a->strings["Not valid email."] = "Ikke gyldig e-post."; $a->strings["Protected email address. Cannot change to that email."] = "Beskyttet e-postadresse. Kan ikke endre til den e-postadressen."; $a->strings["System failure storing new email. Please try again."] = "Systemfeil ved lagring av ny e-post. Vennligst prøv igjen."; $a->strings["Settings updated."] = "Innstillinger oppdatert."; +$a->strings["No"] = "Nei"; +$a->strings["Yes"] = "Ja"; $a->strings["Add application"] = "Legg til program"; $a->strings["Name of application"] = "Navn på program"; $a->strings["Consumer Key"] = "Consumer Key"; @@ -1405,22 +953,25 @@ $a->strings["Client key starts with"] = "Klientnøkkel starter med"; $a->strings["No name"] = "Ikke noe navn"; $a->strings["Remove authorization"] = "Fjern tillatelse"; $a->strings["No feature settings configured"] = "Ingen funksjonsinnstillinger er konfigurert"; -$a->strings["Feature Settings"] = "Funksjonsinnstillinger"; +$a->strings["Feature/Addon Settings"] = "Funksjons-/Tilleggsinnstillinger"; +$a->strings["Settings for the built-in Diaspora emulator"] = "Innstillinger for den innebygde Diaspora-etterlikningen"; +$a->strings["Allow any Diaspora member to comment on your public posts"] = "Tillat ethvert Diaspora-medlem å kommentere på dine offentlige innlegg."; +$a->strings["Diaspora Policy Settings"] = "Innstillinger for Diaspora retningslinjer"; +$a->strings["Prevent your hashtags from being redirected to other sites"] = "Stopp dine merkelapper/emneknagger/hashtagger fra å bli omdirigert til andre nettsteder"; $a->strings["Account Settings"] = "Kontoinnstillinger"; -$a->strings["Password Settings"] = "Passordinnstillinger"; -$a->strings["New Password:"] = "Nytt passord:"; -$a->strings["Confirm:"] = "Bekreft:"; +$a->strings["Enter New Password:"] = "Skriv nytt passord:"; +$a->strings["Confirm New Password:"] = "Bekreft nytt passord:"; $a->strings["Leave password fields blank unless changing"] = "La passordfeltene stå blanke om det ikke skal endres"; $a->strings["Email Address:"] = "E-postadresse:"; $a->strings["Remove Account"] = "Slett konto"; -$a->strings["Remove this account from this server including all its channels"] = "Slett denne kontoen inkludert alle dens kanaler fra denne tjeneren"; -$a->strings["Warning: This action is permanent and cannot be reversed."] = "Advarsel: Denne handlingen er permanent og kan ikke angres."; +$a->strings["Remove this account including all its channels"] = "Slett denne kontoen inkludert alle dens kanaler"; $a->strings["Off"] = "Av"; $a->strings["On"] = "På"; $a->strings["Additional Features"] = "Ekstra funksjoner"; $a->strings["Connector Settings"] = "Koblingsinnstillinger"; $a->strings["No special theme for mobile devices"] = "Ikke noe spesielt tema for mobile enheter"; $a->strings["%s - (Experimental)"] = "%s - (Eksperimentelt)"; +$a->strings["mobile"] = "mobil"; $a->strings["Display Settings"] = "Visningsinnstillinger"; $a->strings["Display Theme:"] = "Visningstema:"; $a->strings["Mobile Theme:"] = "Mobiltema:"; @@ -1429,9 +980,15 @@ $a->strings["Update browser every xx seconds"] = "Oppdater nettleser hvert xx se $a->strings["Minimum of 10 seconds, no maximum"] = "Minimum 10 sekunder, ikke noe maksimum"; $a->strings["Maximum number of conversations to load at any time:"] = "Maksimalt antall samtaler å laste samtidig:"; $a->strings["Maximum of 100 items"] = "Maksimum 100 elementer"; -$a->strings["Don't show emoticons"] = "Ikke vis følelsesikoner"; +$a->strings["Show emoticons (smilies) as images"] = "Vis emoticons (smilefjes) som bilder"; $a->strings["Link post titles to source"] = "Lenk innleggets tittel til kilden"; $a->strings["System Page Layout Editor - (advanced)"] = "Systemsidens layoutbehandler - (avansert)"; +$a->strings["Use blog/list mode on channel page"] = "Bruk blogg-/listemodus på kanalsiden"; +$a->strings["(comments displayed separately)"] = "(kommentarer vist separat)"; +$a->strings["Use blog/list mode on matrix page"] = "Bruk blogg-/listemodus på matrix-siden"; +$a->strings["Channel page max height of content (in pixels)"] = "Kanalsidens makshøyde for innhold (i pixler)"; +$a->strings["click to expand content exceeding this height"] = "klikk for å utvide innhold som overstiger denne høyden"; +$a->strings["Matrix page max height of content (in pixels)"] = "Matrix-sidens makshøyde for innholde (i pixler)"; $a->strings["Nobody except yourself"] = "Ingen unntatt deg selv"; $a->strings["Only those you specifically allow"] = "Bare de du spesifikt tillater"; $a->strings["Approved connections"] = "Godkjente forbindelser"; @@ -1469,6 +1026,7 @@ $a->strings["0 or blank prevents expiration"] = "0 eller blankt forhindrer utlø $a->strings["Maximum Friend Requests/Day:"] = "Maksimalt antall venneforespørsler per dag:"; $a->strings["May reduce spam activity"] = "Kan redusere søppelpostaktivitet"; $a->strings["Default Post Permissions"] = "Standard innleggstillatelser"; +$a->strings["(click to open/close)"] = "(klikk for å åpne/lukke)"; $a->strings["Channel permissions category:"] = "Kategori med kanaltillatelser:"; $a->strings["Maximum private messages per day from unknown people:"] = "Maksimalt antall private meldinger per dag fra ukjente personer:"; $a->strings["Useful to reduce spamming"] = "Nyttig for å redusere søppelpost"; @@ -1500,6 +1058,7 @@ $a->strings["System info messages"] = "System infomeldinger"; $a->strings["System critical alerts"] = "System kritiske varsel"; $a->strings["New connections"] = "Nye forbindelser"; $a->strings["System Registrations"] = "Systemregistreringer"; +$a->strings["Also show new wall posts, private messages and connections under Notices"] = "Vis også nye vegginnlegg, private meldinger og forbindelser under Varsler"; $a->strings["Notify me of events this many days in advance"] = "Varsle meg om hendelser dette antall dager på forhånd"; $a->strings["Must be greater than 0"] = "Må være større enn 0"; $a->strings["Advanced Account/Page Type Settings"] = "Avanserte innstillinger for konto/sidetype"; @@ -1507,14 +1066,38 @@ $a->strings["Change the behaviour of this account for special situations"] = "En $a->strings["Please enable expert mode (in <a href=\"settings/features\">Settings > Additional features</a>) to adjust!"] = "Vennligst skru på ekspertmodus (under <a href=\"settings/features\">Innstillinger > Ekstra funksjoner</a>) for å justere!"; $a->strings["Miscellaneous Settings"] = "Diverse innstillinger"; $a->strings["Personal menu to display in your channel pages"] = "Personlig meny som kan vises på dine kanalsider"; -$a->strings["Remove this channel"] = "Fjern denne kanalen"; -$a->strings["Edit Webpage"] = "Endre webside"; -$a->strings["Delete webpage?"] = "Slett webside?"; -$a->strings["Delete Webpage"] = "Slett webside"; -$a->strings["webpage"] = "nettside"; -$a->strings["block"] = "byggekloss"; -$a->strings["layout"] = "layout"; -$a->strings["%s element installed"] = "%s element installert"; +$a->strings["Remove Channel"] = "Fjern kanal"; +$a->strings["Remove this channel."] = "Fjern denne kanalen."; +$a->strings["Xchan Lookup"] = "Xchan oppslag"; +$a->strings["Lookup xchan beginning with (or webbie): "] = "Slå opp xchan som begynner med (eller webbie):"; +$a->strings["Not found."] = "Ikke funnet."; +$a->strings["Authorize application connection"] = "Tillat programforbindelse"; +$a->strings["Return to your app and insert this Securty Code:"] = "Gå tilbake til din app og legg inn denne sikkerhetskoden:"; +$a->strings["Please login to continue."] = "Vennligst logg inn for å fortsette."; +$a->strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "Vil du tillate dette programmet å få tilgang til dine innlegg og kontakter, og/eller lage nye innlegg for deg?"; +$a->strings["Block Name"] = "Byggeklossens navn"; +$a->strings["Channel added."] = "Kanal lagt til."; +$a->strings["Tag removed"] = "Merkelapp fjernet"; +$a->strings["Remove Item Tag"] = "Fjern merkelapp fra element"; +$a->strings["Select a tag to remove: "] = "Velg merkelapp å fjerne:"; +$a->strings["Remove"] = "Fjern"; +$a->strings["Continue"] = "Fortsett"; +$a->strings["Premium Channel Setup"] = "Premiumkanal-oppsett"; +$a->strings["Enable premium channel connection restrictions"] = "Slå på restriksjoner for forbindelse med premiumkanal"; +$a->strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = "Vennligst skriv dine restriksjoner og betingelser, slik som PayPal-kvittering, retningslinjer for bruk, og så videre."; +$a->strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = "Denne kanalen kan kreve ytterligere steg og bekreftelse av følgende betingelser før tilkobling:"; +$a->strings["Potential connections will then see the following text before proceeding:"] = "Potensielle forbindelser vil da se følgende tekst før de går videre:"; +$a->strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Ved å fortsette bekrefter jeg at jeg har oppfylt alle instruksjoner gitt på denne siden."; +$a->strings["(No specific instructions have been provided by the channel owner.)"] = "(Ingen spesifikke instruksjoner er gitt av kanaleieren.)"; +$a->strings["Restricted or Premium Channel"] = "Begrenset kanal eller premiumkanal"; +$a->strings["Profile Match"] = "Profiltreff"; +$a->strings["No keywords to match. Please add keywords to your default profile."] = "Ingen nøkkelord å sammenlikne. Vennligst legg til nøkkelord til din standardprofil."; +$a->strings["is interested in:"] = "er interessert i:"; +$a->strings["No matches"] = "Ingen treff"; +$a->strings["Item not available."] = "Elementet er ikke tilgjengelig."; +$a->strings["Fetching URL returns error: %1\$s"] = "Henting av URL gir følgende feil: %1\$s"; +$a->strings["Red Matrix - "The Network""] = "Red Matrix - "Nettverket""; +$a->strings["Welcome to %s"] = "Velkommen til %s"; $a->strings["Image uploaded but image cropping failed."] = "Bildet ble lastet opp, men beskjæring av bildet mislyktes."; $a->strings["Image resize failed."] = "Endring av bildestørrelse mislyktes."; $a->strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Hold nede Shift-knappen og last siden på nytt eller tøm nettleserens mellomlager hvis det nye bildet ikke vises umiddelbart."; @@ -1532,30 +1115,139 @@ $a->strings["Done Editing"] = "Avslutt redigering"; $a->strings["Image uploaded successfully."] = "Opplasting av bildet var vellykket."; $a->strings["Image upload failed."] = "Opplasting av bildet mislyktes."; $a->strings["Image size reduction [%s] failed."] = "Forminsking av bildet [%s] mislyktes."; -$a->strings["Contact not found."] = "Kontakten ble ikke funnet."; -$a->strings["Friend suggestion sent."] = "Venneforespørsel sendt."; -$a->strings["Suggest Friends"] = "Foreslå venner"; -$a->strings["Suggest a friend for %s"] = "Foreslå en venn for %s"; -$a->strings["Permission Denied."] = "Tillatelse avvist."; -$a->strings["File not found."] = "Filen ble ikke funnet."; -$a->strings["Edit file permissions"] = "Endre filtillatelser"; -$a->strings["Set/edit permissions"] = "Angi/endre tillatelser"; -$a->strings["Include all files and sub folders"] = "Inkluder alle filer og undermapper"; -$a->strings["Return to file list"] = "Gå tilbake til filoversikten"; -$a->strings["Copy/paste this code to attach file to a post"] = "Kopier og lim inn denne koden for å legge til filen i et innlegg"; -$a->strings["Copy/paste this URL to link file from a web page"] = "Kopier og lim inn denne URL-en for å lenke til filen fra en webside"; -$a->strings["Help:"] = "Hjelp:"; -$a->strings["Not Found"] = "Ikke funnet"; -$a->strings["network"] = "nettverk"; -$a->strings["Channel added."] = "Kanal lagt til."; -$a->strings["No potential page delegates located."] = "Ingen potensielle sidedelegater er funnet."; -$a->strings["Delegate Page Management"] = "Deleger sidehåndtering"; -$a->strings["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."] = "Delegater kan håndtere alle sider ved denne kontoen/siden unntatt grunnleggende kontoinformasjon. Vennligst ikke deleger din personlige konto til noen du ikke stoler fullstendig på."; -$a->strings["Existing Page Managers"] = "Eksisterende sidehåndterere"; -$a->strings["Existing Page Delegates"] = "Eksisterende sidedelegater"; -$a->strings["Potential Delegates"] = "Potensielle sidedelegater"; -$a->strings["Add"] = "Legg til"; -$a->strings["No entries."] = "Ingen oppføringer."; +$a->strings["Invalid item."] = "Ugyldig element."; +$a->strings["Channel not found."] = "Kanalen ble ikke funnet."; +$a->strings["Page not found."] = "Siden ikke funnet."; +$a->strings["Like/Dislike"] = "Liker/Liker ikke"; +$a->strings["This action is restricted to members."] = "Denne handlingen er begrenset til medlemmer."; +$a->strings["Please <a href=\"rmagic\">login with your RedMatrix ID</a> or <a href=\"register\">register as a new RedMatrix member</a> to continue."] = "Vennligst <a href=\"rmagic\">logg inn med din RedMatrix ID</a> eller <a href=\"register\">registrer deg som et nytt RedMatrix-medlem</a> for å fortsette"; +$a->strings["Invalid request."] = "Ugyldig forespørsel."; +$a->strings["thing"] = "ting"; +$a->strings["Channel unavailable."] = "Kanalen er utilgjengelig."; +$a->strings["Previous action reversed."] = "Forrige handling er omgjort."; +$a->strings["%1\$s agrees with %2\$s's %3\$s"] = "%1\$s er enig med %2\$s sin %3\$s"; +$a->strings["%1\$s doesn't agree with %2\$s's %3\$s"] = "%1\$s er ikke enig med %2\$s sin %3\$s"; +$a->strings["%1\$s abstains from a decision on %2\$s's %3\$s"] = "%1\$s avstår fra å mene noe om %2\$s sin %3\$s"; +$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s deltar på %2\$ss %3\$s"; +$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s deltar ikke på %2\$ss %3\$s"; +$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s deltar kanskje på %2\$ss %3\$s"; +$a->strings["Action completed."] = "Handling ferdig."; +$a->strings["Thank you."] = "Tusen takk."; +$a->strings["Event can not end before it has started."] = "Hendelsen kan ikke slutte før den starter."; +$a->strings["Unable to generate preview."] = "Klarer ikke å lage forhåndsvisning."; +$a->strings["Event title and start time are required."] = "Hendelsestittel og starttidspunkt er påkrevd."; +$a->strings["Event not found."] = "Hendelsen ble ikke funnet."; +$a->strings["l, F j"] = "l, F j"; +$a->strings["Edit event"] = "Endre hendelse"; +$a->strings["Delete event"] = "Slett hendelse"; +$a->strings["Create New Event"] = "Lag ny hendelse"; +$a->strings["Previous"] = "Forrige"; +$a->strings["Next"] = "Neste"; +$a->strings["Export"] = "Eksport"; +$a->strings["Event removed"] = "Hendelse slettet"; +$a->strings["Failed to remove event"] = "Mislyktes med å slette hendelse"; +$a->strings["Event details"] = "Hendelsesdetaljer"; +$a->strings["Starting date and Title are required."] = "Startdato og Tittel er påkrevd."; +$a->strings["Categories (comma-separated list)"] = "Kategorier (kommaseparert liste)"; +$a->strings["Event Starts:"] = "Hendelsen starter:"; +$a->strings["Finish date/time is not known or not relevant"] = "Sluttdato/-tidspunkt er ikke kjent eller ikke relevant"; +$a->strings["Event Finishes:"] = "Hendelsen slutter:"; +$a->strings["Adjust for viewer timezone"] = "Juster i forhold til tilskuerens tidssone"; +$a->strings["Important for events that happen in a particular place. Not practical for global holidays."] = "Viktig for hendelser som skjer på et bestemt sted. Ikke praktisk for globale ferier eller fridager."; +$a->strings["Description:"] = "Beskrivelse:"; +$a->strings["Title:"] = "Tittel:"; +$a->strings["Share this event"] = "Del denne hendelsen"; +$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s følger %2\$s sin %3\$s"; +$a->strings["Public Sites"] = "Offentlige nettsteder"; +$a->strings["The listed sites allow public registration into the Red Matrix. All sites in the matrix are interlinked so membership on any of them conveys membership in the matrix as a whole. Some sites may require subscription or provide tiered service plans. The provider links <strong>may</strong> provide additional details."] = "Nettstedene på listen tillater offentlig registrering i Red Matrix. Alle nettsteder i matrix er forbundet så medlemskap på enhver av dem formidler medlemskap i hele matrix. Noen nettsteder kan kreve abonnement eller tilby lagdelte tjenesteavtaler. Tilbyderlenkene <strong>kan</strong> gi tilleggsopplysninger."; +$a->strings["Rate this hub"] = "Vurder denne hubben"; +$a->strings["Site URL"] = "Nettstedets URL"; +$a->strings["Access Type"] = "Tilgangstype"; +$a->strings["Registration Policy"] = "Retningslinjer for registrering"; +$a->strings["Location"] = "Plassering"; +$a->strings["View hub ratings"] = "Vis vurderinger av hubben"; +$a->strings["Rate"] = "Vurder"; +$a->strings["View ratings"] = "Vis vurderinger"; +$a->strings["Could not access contact record."] = "Fikk ikke tilgang til kontaktinformasjonen."; +$a->strings["Could not locate selected profile."] = "Fant ikke valgt profil."; +$a->strings["Connection updated."] = "Forbindelsen er oppdatert."; +$a->strings["Failed to update connection record."] = "Mislyktes med å oppdatere forbindelsesinformasjonen."; +$a->strings["is now connected to"] = "er nå forbundet til"; +$a->strings["Could not access address book record."] = "Fikk ikke tilgang til informasjonen i adresseboken."; +$a->strings["Refresh failed - channel is currently unavailable."] = "Oppfrisking mislyktes - kanalen er for øyeblikket utilgjengelig."; +$a->strings["Channel has been unblocked"] = "Kanalen er ikke blokkert lenger"; +$a->strings["Channel has been blocked"] = "Kanalen har blitt blokkert"; +$a->strings["Unable to set address book parameters."] = "Ikke i stand til å angi parametre for adresseboken."; +$a->strings["Channel has been unignored"] = "Kanalen er ikke lenger ignorert"; +$a->strings["Channel has been ignored"] = "Kanalen blir ignorert"; +$a->strings["Channel has been unarchived"] = "Kanalen er ikke lenger arkivert"; +$a->strings["Channel has been archived"] = "Kanalen er arkivert"; +$a->strings["Channel has been unhidden"] = "Kanalen er ikke lenger skjult"; +$a->strings["Channel has been hidden"] = "Kanalen er blitt skjult"; +$a->strings["Channel has been approved"] = "Kanalen har blitt godkjent"; +$a->strings["Channel has been unapproved"] = "Kanalen er ikke lenger godkjent"; +$a->strings["Connection has been removed."] = "Forbindelsen har blitt fjernet."; +$a->strings["View %s's profile"] = "Vis %s sin profil"; +$a->strings["Refresh Permissions"] = "Oppfrisk tillatelser"; +$a->strings["Fetch updated permissions"] = "Hent oppdaterte tillatelser"; +$a->strings["Recent Activity"] = "Nylig aktivitet"; +$a->strings["View recent posts and comments"] = "Vis nylige innlegg og kommentarer"; +$a->strings["Unblock"] = "Ikke blokker lenger"; +$a->strings["Block"] = "Blokker"; +$a->strings["Block (or Unblock) all communications with this connection"] = "Blokker eller fjern blokkering av all kommunikasjon med denne forbindelsen"; +$a->strings["Unignore"] = "Ikke ignorer lenger"; +$a->strings["Ignore"] = "Ignorer"; +$a->strings["Ignore (or Unignore) all inbound communications from this connection"] = "Ignorer eller fjern ignorering av all inngående kommunikasjon fra denne forbindelsen"; +$a->strings["Unarchive"] = "Ikke arkiver lenger"; +$a->strings["Archive"] = "Arkiver"; +$a->strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Arkiver eller fjern arkivering av denne forbindelsen - marker kanal som død, men behold innhold"; +$a->strings["Unhide"] = "Ikke skjul lenger"; +$a->strings["Hide"] = "Skjul"; +$a->strings["Hide or Unhide this connection from your other connections"] = "Skjul eller fjern skjuling av denne forbindelsen fra dine andre forbindelser"; +$a->strings["Delete this connection"] = "Slett denne forbindelsen"; +$a->strings["Approve this connection"] = "Godta denne forbindelsen"; +$a->strings["Accept connection to allow communication"] = "Godta denne forbindelsen for å tillate kommunikasjon"; +$a->strings["Connections: settings for %s"] = "Forbindelser: innstillinger for %s"; +$a->strings["Apply these permissions automatically"] = "Bruk disse tillatelsene automatisk"; +$a->strings["Apply the permissions indicated on this page to all new connections."] = "Bruk tillatelsene angitt på denne siden på alle nye forbindelser."; +$a->strings["Slide to adjust your degree of friendship"] = "Flytt for å justere din grad av vennskap"; +$a->strings["Rating (this information is public)"] = "Vurdering (denne informasjonen er offentlig)"; +$a->strings["Optionally explain your rating (this information is public)"] = "Velg om du vil forklare din vurdering (denne informasjonen er offentlig)"; +$a->strings["Default permissions for your channel type have (just) been applied. They have not yet been submitted. Please review the permissions on this page and make any desired changes at this time. This new connection may <em>not</em> be able to communicate with you until you submit this page, which will install and apply the selected permissions."] = "Standard tillatelser for din kanaltype har (nettopp) blitt valgt. De har ikke blitt sendt inn og lagret ennå. Vennligst se over tillatelsene på denne siden og gjør eventuelle ønskede endringer nå. Denne nye forbindelsen kan muligens <em>ikke</em> klare å kommunisere med deg inntil du sender inn denne siden, som vil installere og ta i bruk de valgte tillatelsene."; +$a->strings["inherited"] = "arvet"; +$a->strings["Connection has no individual permissions!"] = "Forbindelsen har ingen individuelle tillatelser!"; +$a->strings["This may be appropriate based on your <a href=\"settings\">privacy settings</a>, though you may wish to review the \"Advanced Permissions\"."] = "Dette kan være riktig basert på dine <a href=\"settings\">personverninnstillinger</a>, men kanskje du bør se over \"Avanserte tillatelser\"."; +$a->strings["Profile Visibility"] = "Profilens synlighet"; +$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Vennligst velg profilen du ønsker å vise %s når profilen din ses på en sikret måte. "; +$a->strings["Contact Information / Notes"] = "Kontaktinformasjon / Merknader"; +$a->strings["Edit contact notes"] = "Endre kontaktmerknader"; +$a->strings["Their Settings"] = "Deres innstillinger"; +$a->strings["My Settings"] = "Mine innstillinger"; +$a->strings["Default permissions for this channel type have (just) been applied. They have <em>not</em> been saved and there are currently no stored default permissions. Please review/edit the applied settings and click [Submit] to finalize."] = "Standard tillatelser for denne kanaltypen har (nettopp) blitt valgt. De har <em>ikke</em> blitt lagret og det er for øyeblikket ingen lagrede standard tillatelser. Vennligst se over/endre de valgte innstillingene og klikk [Send inn] for å lagre."; +$a->strings["Clear/Disable Automatic Permissions"] = "Tøm/Skru av Automatiske tillatelser"; +$a->strings["Forum Members"] = "Forummedlemmer"; +$a->strings["Soapbox"] = "Talerstol"; +$a->strings["Full Sharing (typical social network permissions)"] = "Full deling (typiske tillatelser i sosiale nettverk)"; +$a->strings["Cautious Sharing "] = "Forsiktig deling"; +$a->strings["Follow Only"] = "Bare følg"; +$a->strings["Individual Permissions"] = "Individuelle tillatelser"; +$a->strings["Some permissions may be inherited from your channel <a href=\"settings\">privacy settings</a>, which have higher priority than individual settings. Changing those inherited settings on this page will have no effect."] = "Noen tillatelser kan være arvet fra din kanals <a ref=\"settings\">personverninnstillinger</a>, som har høyere prioritet enn individuelle innstillinger. Å endre arvede innstillinger på denne siden vil ikke ha noen effekt."; +$a->strings["Advanced Permissions"] = "Avanserte tillatelser"; +$a->strings["Simple Permissions (select one and submit)"] = "Enkle tillatelser (velg en og lagre)"; +$a->strings["Visit %s's profile - %s"] = "Besøk %s sin profil - %s"; +$a->strings["Block/Unblock contact"] = "Blokker/Ikke blokker kontakt"; +$a->strings["Ignore contact"] = "Ignorer kontakt"; +$a->strings["Repair URL settings"] = "Reparer URL-innstillinger"; +$a->strings["View conversations"] = "Vis samtaler"; +$a->strings["Delete contact"] = "Slett kontakt"; +$a->strings["Last update:"] = "Siste oppdatering:"; +$a->strings["Update public posts"] = "Oppdater offentlige innlegg"; +$a->strings["Update now"] = "Oppdater nå"; +$a->strings["Currently blocked"] = "For øyeblikket blokkert"; +$a->strings["Currently ignored"] = "For øyeblikket ignorert"; +$a->strings["Currently archived"] = "For øyeblikket arkivert"; +$a->strings["Currently pending"] = "For øyeblikket ventende"; +$a->strings["RedMatrix channel"] = "RedMatrix-kanal"; $a->strings["Collection created."] = "Samling opprettet."; $a->strings["Could not create collection."] = "Kunne ikke lage samling."; $a->strings["Collection updated."] = "Samlingen er oppdatert."; @@ -1568,12 +1260,189 @@ $a->strings["Collection Editor"] = "Samlingsbehandler"; $a->strings["Members"] = "Medlemmer"; $a->strings["All Connected Channels"] = "Alle tilkoblede kanaler"; $a->strings["Click on a channel to add or remove."] = "Klikk på en kanal for å legge til eller fjerne."; -$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer."; +$a->strings["Version %s"] = "Versjon %s"; +$a->strings["Installed plugins/addons/apps:"] = "Installerte tilleggsfunksjoner/tillegg/apper:"; +$a->strings["No installed plugins/addons/apps"] = "Ingen installerte tilleggsfunksjoner/tillegg/apper"; +$a->strings["Red"] = "Red"; +$a->strings["This is a hub of the Red Matrix - a global cooperative network of decentralized privacy enhanced websites."] = "Dette er en hub i Red Matrix - et globalt kooperativt nettverk av desentraliserte personvernforsterkede nettsteder."; +$a->strings["Tag: "] = "Merkelapp:"; +$a->strings["Last background fetch: "] = "Siste innhenting i bakgrunnen:"; +$a->strings["Running at web location"] = "Kjører på webplasseringen"; +$a->strings["Please visit <a href=\"https://redmatrix.me\">RedMatrix.me</a> to learn more about the Red Matrix."] = "Vennligst besøk <a href=\"https://redmatrix.me\">RedMatrix.me</a> for å lære mer om RedMatrix."; +$a->strings["Bug reports and issues: please visit"] = "Feilmeldinger og feilretting: vennligst besøk"; +$a->strings["Suggestions, praise, etc. - please email \"redmatrix\" at librelist - dot com"] = "Forslag, ros og så videre - vennligst e-post \"redmatrix\" hos librelist - punktum com"; +$a->strings["Site Administrators"] = "Nettstedsadministratorer"; +$a->strings["Help:"] = "Hjelp:"; +$a->strings["Not Found"] = "Ikke funnet"; +$a->strings["Red Matrix Server - Setup"] = "Red Matrix tjener - oppsett"; +$a->strings["Could not connect to database."] = "Fikk ikke kontakt med databasen."; +$a->strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "Fikk ikke kontakt med det angitte nettstedets URL. Problemet kan muligens skyldes SSL-sertifikatet eller DNS."; +$a->strings["Could not create table."] = "Kunne ikke lage tabellen."; +$a->strings["Your site database has been installed."] = "Databasen til ditt nettsted har blitt installert."; +$a->strings["You may need to import the file \"install/schema_xxx.sql\" manually using a database client."] = "Du må kanskje importere filen \"install/schmea_xxx.sql\" manuelt ved å bruke en databaseklient."; +$a->strings["Please see the file \"install/INSTALL.txt\"."] = "Vennligst les filen \"install/INSTALL.txt\"."; +$a->strings["System check"] = "Systemsjekk"; +$a->strings["Check again"] = "Sjekk igjen"; +$a->strings["Database connection"] = "Databaseforbindelse"; +$a->strings["In order to install Red Matrix we need to know how to connect to your database."] = "For å installere Red Matrix må du oppgi hvordan din database kan kontaktes."; +$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Vennligst kontakt din nettstedstilbyder eller nettstedsadministrator hvis du har spørsmål om disse innstillingene."; +$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Databasen du oppgir nedenfor må finnes på forhånd. Hvis den ikke finnes, vennligst lag den før du fortsetter."; +$a->strings["Database Server Name"] = "Navn på databasetjener"; +$a->strings["Default is localhost"] = "Standard er localhost"; +$a->strings["Database Port"] = "Databaseport"; +$a->strings["Communication port number - use 0 for default"] = "Kommunikasjonsportnummer - bruk 0 for standard"; +$a->strings["Database Login Name"] = "Database innloggingsnavn"; +$a->strings["Database Login Password"] = "Database innloggingspassord"; +$a->strings["Database Name"] = "Databasenavn"; +$a->strings["Database Type"] = "Databasetype"; +$a->strings["Site administrator email address"] = "E-postadressen til administrator ved nettstedet"; +$a->strings["Your account email address must match this in order to use the web admin panel."] = "Din konto sin e-postadresse må være lik denne for å kunne bruke web-administrasjonspanelet."; +$a->strings["Website URL"] = "Nettstedets URL"; +$a->strings["Please use SSL (https) URL if available."] = "Vennligst bruk SSL (https) URL hvis tilgjengelig."; +$a->strings["Please select a default timezone for your website"] = "Vennligst velg en standard tidssone for ditt nettsted"; +$a->strings["Site settings"] = "Nettstedets innstillinger"; +$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Fant ikke en kommandolinjeversjon av PHP i webtjenerens sti (PATH)."; +$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."] = "Hvis du ikke har en kommandolinjeversjon av PHP installert på tjeneren, så vil du ikke kunne kjøre bakgrunnshenting via cron."; +$a->strings["PHP executable path"] = "PHP-kjørefilens sti"; +$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Skriv full sti til kjørefilen for PHP. Du kan la denne stå blank for å fortsette installasjonen."; +$a->strings["Command line PHP"] = "Kommandolinje PHP"; +$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Kommandolinjeversjonen av PHP på ditt system har ikke \"register_argc_argv\" påskrudd."; +$a->strings["This is required for message delivery to work."] = "Dette er påkrevd for at meldingslevering skal virke."; +$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv"; +$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Feil: \"openssl_pkey_new\"-funksjonen på dette systemet er ikke i stand til å lage krypteringsnøkler"; +$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Ved kjøring på Windows, vennligst se \"http://www.php.net/manual/en/openssl.installation.php\"."; +$a->strings["Generate encryption keys"] = "Lag krypteringsnøkler"; +$a->strings["libCurl PHP module"] = "libCurl PHP-modul"; +$a->strings["GD graphics PHP module"] = "GD graphics PHP-modul"; +$a->strings["OpenSSL PHP module"] = "OpenSSL PHP-modul"; +$a->strings["mysqli or postgres PHP module"] = "MySQLi eller Postgres PHP modul"; +$a->strings["mb_string PHP module"] = "mb_string PHP-modul"; +$a->strings["mcrypt PHP module"] = "mcrypt PHP-modul"; +$a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite-modul"; +$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Feil: Apache web-tjenerens mod-rewrite-modul er påkrevd, men ikke installert."; +$a->strings["proc_open"] = "proc_open"; +$a->strings["Error: proc_open is required but is either not installed or has been disabled in php.ini"] = "Feil: proc_open er påkrevd, men er enten ikke installert eller har blitt avskrudd i php.ini"; +$a->strings["Error: libCURL PHP module required but not installed."] = "Feil: libCURL PHP-modul er påkrevd, men er ikke installert."; +$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Feil: GD graphics PHP-modul med JPEG-støtte er påkrevd, men er ikke installert."; +$a->strings["Error: openssl PHP module required but not installed."] = "Feil: openssl PHP-modul er påkrevd, men er ikke installert."; +$a->strings["Error: mysqli or postgres PHP module required but neither are installed."] = "Feil: mysqli eller postgres PHP modul er påkrevd, men ingen av dem er installert."; +$a->strings["Error: mb_string PHP module required but not installed."] = "Feil: mb_string PHP-modul er påkrevd, men er ikke installert."; +$a->strings["Error: mcrypt PHP module required but not installed."] = "Feil: mcrypt PHP-modul er påkrevd, men er ikke installert."; +$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."] = "Web-installasjonen må kunne lage en fil kalt \".htconfig.php\" i toppkatalogen til web-tjeneren din, men dette får den ikke til."; +$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."] = "Dette er oftest tillatelsesinnstilling, ettersom webtjeneren kanskje kan skrive til filer i din mappe - selv om du kan."; +$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Red top folder."] = "På slutten av denne prosedyren vil vi gi deg en tekst til å lagre i en fil kalt .htconfig.php i toppkatalogen til din Red."; +$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"install/INSTALL.txt\" for instructions."] = "Alternativt, så kan du hoppe over denne prosedyren og gjennomføre en manuell installasjon. Vennligst se filen \"install/INSTALL.txt\" for instruksjoner."; +$a->strings[".htconfig.php is writable"] = ".htconfig.php kan skrives til"; +$a->strings["Red uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Red bruker malmotoren Smarty3 for å gjengi sine webvisninger. Smarty3 kompilerer malene om til PHP for å framskynde gjengivelsen."; +$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory %s under the Red top level folder."] = "For å kunne lagre disse kompilerte malene, så må webtjeneren ha skrivetilgang til katalogen %s under Red sin hovedmappe."; +$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Vennligst sikre at brukeren som din web-tjeneste kjører som (for eksempel www-data) har skrivetilgang til denne katalogen."; +$a->strings["Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains."] = "Merknad: som et sikkerhetstiltak bør du bare gi webtjerenn skrivetilgang til %s - ikke til malfilene (.tpl) som den inneholder."; +$a->strings["%s is writable"] = "%s kan skrives til"; +$a->strings["Red uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the Red top level folder"] = "Red bruker lagringsmappen for å lagre opplastede filer. Webtjeneren trenger å ha skrivetilgang til lagringsmappen under Red sin toppnivåmappe."; +$a->strings["store is writable"] = "lageret kan skrives til"; +$a->strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = "SSL-sertifikatet kan ikke kontrolleres. Fiks sertifikatet eller skru av https tilgang til dette nettstedet."; +$a->strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = "Hvis du har HTTPS-tilgang til ditt nettsted eller tillater forbindelser til TCP port 443 (HTTPS-porten), så MÅ du bruke nettlesergodkjent sertifkater. Du MÅ IKKE bruke egensignert sertifikater!"; +$a->strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Denne begrensningen er tatt inn fordi offentlige innlegg fra deg kan for eksempel inneholde referanser til bilder på din egen hub."; +$a->strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = "Hvis sertifikatet ditt ikke gjenkjennes, så vil medlemmer på andre nettsteder (som selv kan ha godkjente sertifikater) få en beskjed med en advarsel på deres eget nettsted som klager over sikkerhetsproblemer."; +$a->strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = "Dette kan gi problemer med brukervennlighet (ikke bare på ditt eget nettsted), så vi må insistere på dette kravet."; +$a->strings["Providers are available that issue free certificates which are browser-valid."] = "Det finnes tilbydere som utsteder gratis sertifikater som er gyldige i nettlesere."; +$a->strings["SSL certificate validation"] = "SSL sertifikat-kontroll"; +$a->strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "URL omskriving (rewrite) i .htaccess virker ikke. Sjekk konfigurasjonen til tjeneren din. Test:"; +$a->strings["Url rewrite is working"] = "URL rewrite virker"; +$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."] = "Databasekonfigurasjonsfilen \".htconfig.php\" kunne ikke skrives. Vennligst bruk den medfølgende teksten for å lage en konfigurasjonsfil i toppkatalogen av din web-tjener."; +$a->strings["Errors encountered creating database tables."] = "Feil oppstod under opprettelsen av databasetabeller."; +$a->strings["<h1>What next</h1>"] = "<h1>Hva gjenstår</h1>"; +$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "VIKTIG: Du må [manuelt] sette opp en automatisert tidfestet oppgave til bakgrunnshenteren."; +$a->strings["No channel."] = "Ingen kanal."; +$a->strings["Common connections"] = "Felles forbindelser"; +$a->strings["No connections in common."] = "Ingen forbindelser felles."; +$a->strings["First Name"] = "Fornavn"; +$a->strings["Last Name"] = "Etternavn"; +$a->strings["Nickname"] = "Kallenavn"; +$a->strings["Full Name"] = "Fullt navn"; +$a->strings["Profile Photo 16px"] = "Profilbilde 16px"; +$a->strings["Profile Photo 32px"] = "Profilbilde 32px"; +$a->strings["Profile Photo 48px"] = "Profilbilde 48px"; +$a->strings["Profile Photo 64px"] = "Profilbilde 64px"; +$a->strings["Profile Photo 80px"] = "Profilbilde 80px"; +$a->strings["Profile Photo 128px"] = "Profilbilde 128px"; +$a->strings["Timezone"] = "Tidssone"; +$a->strings["Homepage URL"] = "Hjemmeside URL"; +$a->strings["Birth Year"] = "Fødselsår"; +$a->strings["Birth Month"] = "Fødselsmåne"; +$a->strings["Birth Day"] = "Fødselsdag"; +$a->strings["Birthdate"] = "Fødselsdato"; +$a->strings["Gender"] = "Kjønn"; +$a->strings["Blocked"] = "Blokkert"; +$a->strings["Ignored"] = "Ignorert"; +$a->strings["Hidden"] = "Skjult"; +$a->strings["Archived"] = "Arkivert"; +$a->strings["All"] = "Alle"; +$a->strings["Suggest new connections"] = "Foreslå nye forbindelser"; +$a->strings["New Connections"] = "Nye forbindelser"; +$a->strings["Show pending (new) connections"] = "Vis ventende (nye) forbindelser"; +$a->strings["All Connections"] = "Alle forbindelser"; +$a->strings["Show all connections"] = "Vis alle forbindelser"; +$a->strings["Unblocked"] = "Ikke blokkert lenger"; +$a->strings["Only show unblocked connections"] = "Vis bare forbindelser som ikke er blokkert"; +$a->strings["Only show blocked connections"] = "Vis bare forbindelser som er blokkert"; +$a->strings["Only show ignored connections"] = "Vis bare ignorerte forbindelser"; +$a->strings["Only show archived connections"] = "Vis bare arkiverte forbindelser"; +$a->strings["Only show hidden connections"] = "Vis bare skjulte forbindelser"; +$a->strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]"; +$a->strings["Edit connection"] = "Endre forbindelse"; +$a->strings["Search your connections"] = "Søk blant dine forbindelser"; +$a->strings["Finding: "] = "Fant:"; +$a->strings["webpage"] = "nettside"; +$a->strings["block"] = "byggekloss"; +$a->strings["layout"] = "layout"; +$a->strings["%s element installed"] = "%s element installert"; +$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s merket %3\$s til %2\$s med %4\$s"; +$a->strings["RedMatrix - Guests: Username: {your email address}, Password: +++"] = "RedMatrix - gjester: brukernavn: {din e-postadresse}, passord: +++"; +$a->strings["Unable to locate original post."] = "Ikke i stand til å finne opprinnelig innlegg."; +$a->strings["Empty post discarded."] = "Tomt innlegg forkastet."; +$a->strings["Executable content type not permitted to this channel."] = "Kjørbar innholdstype er ikke tillat for denne kanalen."; +$a->strings["System error. Post not saved."] = "Systemfeil. Innlegg ble ikke lagret."; +$a->strings["You have reached your limit of %1$.0f top level posts."] = "Du har nådd din grense på %1$.0f startinnlegg."; +$a->strings["You have reached your limit of %1$.0f webpages."] = "Du har nådd din grense på %1$.0f websider."; +$a->strings["Public access denied."] = "Offentlig tilgang avvist."; +$a->strings["Thing updated"] = "Tingen er oppdatert"; +$a->strings["Object store: failed"] = "Objektlagring: mislyktes"; +$a->strings["Thing added"] = "Ting lagt til"; +$a->strings["OBJ: %1\$s %2\$s %3\$s"] = "OBJ: %1\$s %2\$s %3\$s"; +$a->strings["Show Thing"] = "Vis ting"; +$a->strings["item not found."] = "element ble ikke funnet."; +$a->strings["Edit Thing"] = "Endre ting"; +$a->strings["Select a profile"] = "Velg en profil"; +$a->strings["Post an activity"] = "Legg inn en aktivitet"; +$a->strings["Only sends to viewers of the applicable profile"] = "Sender bare til seere av den aktuelle profilen"; +$a->strings["Name of thing e.g. something"] = "Navn på ting for eksempel noe"; +$a->strings["URL of thing (optional)"] = "URL til ting (valgfritt)"; +$a->strings["URL for photo of thing (optional)"] = "URL til bilde av ting (valgfritt)"; +$a->strings["Add Thing to your Profile"] = "Legg til ting i din profil"; +$a->strings["Away"] = "Borte"; +$a->strings["Online"] = "Online"; +$a->strings["Select a bookmark folder"] = "Velg en bokmerkemappe"; +$a->strings["Save Bookmark"] = "Lagre bokmerke"; +$a->strings["URL of bookmark"] = "URL-en til bokmerket"; +$a->strings["Description"] = "Beskrivelse"; +$a->strings["Or enter new bookmark folder name"] = "Eller skriv nytt navn på bokmerkemappe"; +$a->strings["No more system notifications."] = "Ingen flere systemvarsler."; +$a->strings["System Notifications"] = "Systemvarsler"; +$a->strings["network"] = "nettverk"; +$a->strings["RSS"] = "RSS"; +$a->strings["Layout updated."] = "Layout er oppdatert."; +$a->strings["Edit System Page Description"] = "Endre beskrivelsen av systemsiden"; +$a->strings["Layout not found."] = "Layouten ble ikke funnet."; +$a->strings["Module Name:"] = "Modulnavn:"; +$a->strings["Layout Help"] = "Layout-hjelp"; +$a->strings["- select -"] = "- velg -"; $a->strings["Your service plan only allows %d channels."] = "Din tjenesteplan tillater bare %d kanaler."; $a->strings["Nothing to import."] = "Ingenting å importere."; $a->strings["Unable to download data from old server"] = "Ikke i stand til å laste ned data fra gammel tjener"; $a->strings["Imported file is empty."] = "Importert fil er tom."; $a->strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "Kan ikke lage en kopi av kanal-identifikatoren på dette systemet. Import mislyktes."; +$a->strings["Unable to create a unique channel address. Import failed."] = "Klarte ikke å lage en unik kanaladresse. Import mislyktes."; $a->strings["Channel clone failed. Import failed."] = "Kanalkloning mislyktes. Import mislyktes."; $a->strings["Cloned channel not found. Import failed."] = "Klonet kanal ble ikke funnet. Import mislyktes."; $a->strings["Import completed."] = "Import ferdig."; @@ -1588,31 +1457,261 @@ $a->strings["Your old login password"] = "Ditt gamle innloggingspassord"; $a->strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Enten du tar det ene eller det andre valget, vennligst angi om du vil at denne hubben skal være din nye primære adresse, eller om din gamle plassering skal fortsette å ha denne rollen. Du kan lage innlegg fra den ene eller den andre plasseringen, men bare en av dem kan markeres som den primære plasseringen for filer, bilder og media."; $a->strings["Make this hub my primary location"] = "Gjør dette nettstedet til min primære plassering"; $a->strings["Import existing posts if possible"] = "Importerer eksisterende innlegg hvis mulig."; -$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s merket %3\$s til %2\$s med %4\$s"; -$a->strings["Tag removed"] = "Merkelapp fjernet"; -$a->strings["Remove Item Tag"] = "Fjern merkelapp fra element"; -$a->strings["Select a tag to remove: "] = "Velg merkelapp å fjerne:"; +$a->strings["Item not found"] = "Elementet ble ikke funnet."; +$a->strings["Edit Layout"] = "Endre layout"; +$a->strings["Delete layout?"] = "Slett layout?"; +$a->strings["Insert YouTube video"] = "Sett inn YouTube-video"; +$a->strings["Insert Vorbis [.ogg] video"] = "Sett inn Vorbis [.ogg] video"; +$a->strings["Insert Vorbis [.ogg] audio"] = "Legg i"; +$a->strings["Delete Layout"] = "Slett layout"; +$a->strings["You must be logged in to see this page."] = "Du må være innloegget for å se denne siden."; +$a->strings["Room not found"] = "Rommet ble ikke funnet"; +$a->strings["Leave Room"] = "Forlat rom"; +$a->strings["Delete This Room"] = "Slett dette rommet"; +$a->strings["I am away right now"] = "Jeg er borte akkurat nå"; +$a->strings["I am online"] = "Jeg er online"; +$a->strings["Bookmark this room"] = "Bokmerk dette rommet"; +$a->strings["New Chatroom"] = "Nytt chatrom"; +$a->strings["Chatroom Name"] = "Navn på chatrom"; +$a->strings["%1\$s's Chatrooms"] = "%1\$s sine chatrom"; +$a->strings["Edit Webpage"] = "Endre webside"; +$a->strings["Delete webpage?"] = "Slett webside?"; +$a->strings["Delete Webpage"] = "Slett webside"; +$a->strings["This site is not a directory server"] = "Dette nettstedet er ikke en katalogtjener"; +$a->strings["This directory server requires an access token"] = "Denne katalogtjeneren krever en tilgangsnøkkel (access token)"; +$a->strings["No valid account found."] = "Ingen gyldig konto funnet."; +$a->strings["Password reset request issued. Check your email."] = "Forespørsel om å tilbakestille passord er mottatt. Sjekk e-posten din."; +$a->strings["Site Member (%s)"] = "Nettstedsmedlem (%s)"; +$a->strings["Password reset requested at %s"] = "Forespurt om å tilbakestille passord hos %s"; +$a->strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "Forespørsel kunne ikke bekreftes. (Du kan ha sendt den inn tidligere.) Tilbakestilling av passord mislyktes."; +$a->strings["Password Reset"] = "Tilbakestill passord"; +$a->strings["Your password has been reset as requested."] = "Ditt passord har blitt tilbakestilt som forespurt."; +$a->strings["Your new password is"] = "Ditt nye passord er"; +$a->strings["Save or copy your new password - and then"] = "Lagre eller kopier ditt nye passord, og deretter kan du"; +$a->strings["click here to login"] = "klikke her for å logge inn"; +$a->strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Ditt passord kan endres på siden <em>Innstillinger</em> etter vellykket innlogging."; +$a->strings["Your password has changed at %s"] = "Ditt passord er endret hos %s"; +$a->strings["Forgot your Password?"] = "Glemt passord ditt?"; +$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Skriv e-postadressen din og send inn for å tilbakestille passordet ditt. Sjekk deretter din e-post for videre instruksjoner."; +$a->strings["Email Address"] = "E-postadresse"; +$a->strings["Reset"] = "Tilbakestill"; +$a->strings["Website:"] = "Nettsted:"; +$a->strings["Remote Channel [%s] (not yet known on this site)"] = "Fjerntliggende kanal [%s] (foreløpig ikke kjent på dette nettstedet)"; +$a->strings["Item is not editable"] = "Elementet kan ikke endres"; +$a->strings["Edit post"] = "Endre innlegg"; +$a->strings["Delete item?"] = "Slett element?"; +$a->strings["Total invitation limit exceeded."] = "Grensen for totalt antall invitasjoner er overskredet."; +$a->strings["%s : Not a valid email address."] = "%s : ikke en gyldig e-postadresse."; +$a->strings["Please join us on Red"] = "Bli med oss på Red"; +$a->strings["Invitation limit exceeded. Please contact your site administrator."] = "Invitasjonsgrensen er overskredet. Vennligst kontakt administratoren ved ditt nettsted."; +$a->strings["%s : Message delivery failed."] = "%s : meldingslevering feilet."; +$a->strings["%d message sent."] = array( + 0 => "%d melding sendt.", + 1 => "%d meldinger sendt.", +); +$a->strings["You have no more invitations available"] = "Du har ikke flere invitasjoner tilgjengelig"; +$a->strings["Send invitations"] = "Send invitasjoner"; +$a->strings["Enter email addresses, one per line:"] = "Skriv e-postadresser, en per linje:"; +$a->strings["Your message:"] = "Din melding:"; +$a->strings["Please join my community on RedMatrix."] = "Du er velkommen til å bli med i mitt fellesskap på RedMatrix."; +$a->strings["You will need to supply this invitation code: "] = "Du må oppgi denne invitasjonskoden:"; +$a->strings["1. Register at any RedMatrix location (they are all inter-connected)"] = "1. Registrer ved enhver RedMatrix-lokasjon (de er alle forbundet med hverandre)"; +$a->strings["2. Enter my RedMatrix network address into the site searchbar."] = "2. Skriv inn min RedMatrix-adresse i nettstedets søkefelt."; +$a->strings["or visit "] = "eller besøk"; +$a->strings["3. Click [Connect]"] = "3. Klikk [Forbindelse]"; +$a->strings["Location not found."] = "Plassering er ikke funnet."; +$a->strings["Primary location cannot be removed."] = "Primær plassering kan ikke fjernes."; +$a->strings["No locations found."] = "Ingen plasseringer ble funnet."; +$a->strings["Manage Channel Locations"] = "Håndter kanalplasseringer"; +$a->strings["Location (address)"] = "Plassering (adresse)"; +$a->strings["Primary Location"] = "Hovedplassering"; +$a->strings["Drop location"] = "Slett plassering"; +$a->strings["Failed to create source. No channel selected."] = "Mislyktes med å lage kilde. Ingen kanal er valgt."; +$a->strings["Source created."] = "Kilden er laget."; +$a->strings["Source updated."] = "Kilden er oppdatert."; +$a->strings["*"] = "*"; +$a->strings["Manage remote sources of content for your channel."] = "Håndtere eksterne innholdskilder til din kanal."; +$a->strings["New Source"] = "Ny kilde"; +$a->strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importer alt eller et utvalgt av innhold fra følgende kanal inn i denne kanalen og distribuer det i henhold til dine egne kanalinnstillinger."; +$a->strings["Only import content with these words (one per line)"] = "Bare importer innhold med disse ordene (ett ord per linje)"; +$a->strings["Leave blank to import all public content"] = "La stå tomt for å importere alt offentlig innhold"; +$a->strings["Channel Name"] = "Kanalnavn"; +$a->strings["Source not found."] = "Kilden ble ikke funnet."; +$a->strings["Edit Source"] = "Endre kilde"; +$a->strings["Delete Source"] = "Slett kilde"; +$a->strings["Source removed"] = "Kilden er fjernet"; +$a->strings["Unable to remove source."] = "Ikke i stand til å fjerne kilde."; +$a->strings["Menu updated."] = "Menyen er oppdatert."; +$a->strings["Unable to update menu."] = "Ikke i stand til å oppdatere meny."; +$a->strings["Menu created."] = "Meny laget."; +$a->strings["Unable to create menu."] = "Ikke i stand til å lage meny."; +$a->strings["Manage Menus"] = "Håndtere menyer"; +$a->strings["Drop"] = "Slett"; +$a->strings["Bookmarks allowed"] = "Bokmerker tillatt"; +$a->strings["Create a new menu"] = "Lag en ny meny"; +$a->strings["Delete this menu"] = "Slett denne menyen"; +$a->strings["Edit menu contents"] = "Endre menyinnholdet"; +$a->strings["Edit this menu"] = "Endre denne menyen"; +$a->strings["New Menu"] = "Ny meny"; +$a->strings["Menu name"] = "Menynavn"; +$a->strings["Must be unique, only seen by you"] = "Må være unik, ses bare av deg"; +$a->strings["Menu title"] = "Menytittel"; +$a->strings["Menu title as seen by others"] = "Menytittelen andre ser"; +$a->strings["Allow bookmarks"] = "Tillat bokmerker"; +$a->strings["Menu may be used to store saved bookmarks"] = "Menyen kan brukes til å lagre lagrede bokmerker"; +$a->strings["Menu not found."] = "Menyen ble ikke funnet."; +$a->strings["Menu deleted."] = "Meny slettet."; +$a->strings["Menu could not be deleted."] = "Menyen kunne ikke bli slettet."; +$a->strings["Edit Menu"] = "Endre meny"; +$a->strings["Add or remove entries to this menu"] = "Legg til eller fjern punkter i denne menyen"; +$a->strings["Modify"] = "Endre"; +$a->strings["Permission Denied."] = "Tillatelse avvist."; +$a->strings["File not found."] = "Filen ble ikke funnet."; +$a->strings["Edit file permissions"] = "Endre filtillatelser"; +$a->strings["Set/edit permissions"] = "Angi/endre tillatelser"; +$a->strings["Include all files and sub folders"] = "Inkluder alle filer og undermapper"; +$a->strings["Return to file list"] = "Gå tilbake til filoversikten"; +$a->strings["Copy/paste this code to attach file to a post"] = "Kopier og lim inn denne koden for å legge til filen i et innlegg"; +$a->strings["Copy/paste this URL to link file from a web page"] = "Kopier og lim inn denne URL-en for å lenke til filen fra en webside"; +$a->strings["Attach this file to a new post"] = "Legg ved denne filen i et nytt innlegg"; +$a->strings["Show URL to this file"] = "Vis URLen til denne filen"; +$a->strings["Do not show in shared with me folder of your connections"] = "Ikke vis i Delt med meg-mappen til dine forbindelser"; +$a->strings["Contact not found."] = "Kontakten ble ikke funnet."; +$a->strings["Friend suggestion sent."] = "Venneforespørsel sendt."; +$a->strings["Suggest Friends"] = "Foreslå venner"; +$a->strings["Suggest a friend for %s"] = "Foreslå en venn for %s"; +$a->strings["Hub not found."] = "Hubben ble ikke funnet."; +$a->strings["Poke/Prod"] = "Prikke/oppildne"; +$a->strings["poke, prod or do other things to somebody"] = "prikke, oppildne eller gjør andre ting med noen"; +$a->strings["Recipient"] = "Mottaker"; +$a->strings["Choose what you wish to do to recipient"] = "Velg hva du ønsker å gjøre med mottakeren"; +$a->strings["Make this post private"] = "Gjør dette innlegget privat"; +$a->strings["Invalid profile identifier."] = "Ugyldig profil-identifikator."; +$a->strings["Profile Visibility Editor"] = "Endre profilsynlighet"; +$a->strings["Click on a contact to add or remove."] = "Klikk på en kontakt for å legge til eller fjerne."; +$a->strings["Visible To"] = "Synlig for"; +$a->strings["Remote privacy information not available."] = "Ekstern personverninformasjon er ikke tilgjengelig."; +$a->strings["Visible to:"] = "Synlig for:"; +$a->strings["Profile not found."] = "Profilen ble ikke funnet."; +$a->strings["Profile deleted."] = "Profilen er slettet."; +$a->strings["Profile-"] = "Profil-"; +$a->strings["New profile created."] = "Ny profil opprettet."; +$a->strings["Profile unavailable to clone."] = "Profilen er utilgjengelig for klonen."; +$a->strings["Profile unavailable to export."] = "Profilen er utilgjengelig for eksport."; +$a->strings["Profile Name is required."] = "Profilnavn er påkrevd."; +$a->strings["Marital Status"] = "Sivilstand"; +$a->strings["Romantic Partner"] = "Romantisk partner"; +$a->strings["Likes"] = "Liker"; +$a->strings["Dislikes"] = "Liker ikke"; +$a->strings["Work/Employment"] = "Arbeid/sysselsetting"; +$a->strings["Religion"] = "Religion"; +$a->strings["Political Views"] = "Politiske synspunkter"; +$a->strings["Sexual Preference"] = "Seksuelle preferanser"; +$a->strings["Homepage"] = "Hjemmeside"; +$a->strings["Interests"] = "Interesser"; +$a->strings["Address"] = "Adresse"; +$a->strings["Profile updated."] = "Profilen er oppdatert."; +$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Skjul kontakt-/vennelisten din fra de som ser på denne profilen?"; +$a->strings["Edit Profile Details"] = "Endre profildetaljer"; +$a->strings["View this profile"] = "Vis denne profilen"; +$a->strings["Change Profile Photo"] = "Endre profilbilde"; +$a->strings["Create a new profile using these settings"] = "Lag en ny profil ved å bruke disse innstillingene"; +$a->strings["Clone this profile"] = "Klon denne profilen"; +$a->strings["Delete this profile"] = "Slett denne profilen"; +$a->strings["Import profile from file"] = "Importer profil fra fil"; +$a->strings["Export profile to file"] = "Eksporter profil til fil"; +$a->strings["Profile Name:"] = "Profilnavn:"; +$a->strings["Your Full Name:"] = "Ditt fulle navn:"; +$a->strings["Title/Description:"] = "Tittel/Beskrivelse:"; +$a->strings["Your Gender:"] = "Ditt kjønn:"; +$a->strings["Birthday :"] = "Fødselsdag:"; +$a->strings["Street Address:"] = "Gateadresse:"; +$a->strings["Locality/City:"] = "Sted/By:"; +$a->strings["Postal/Zip Code:"] = "Postnummer/ZIP-kode:"; +$a->strings["Country:"] = "Land:"; +$a->strings["Region/State:"] = "Region/fylke:"; +$a->strings["<span class=\"heart\">♥</span> Marital Status:"] = "<span class=\"heart\">♥</span> Sivilstand:"; +$a->strings["Who: (if applicable)"] = "Hvem: (hvis det er aktuelt) "; +$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Eksempler: kari123, Kari Villiamsen, kari@example.com"; +$a->strings["Since [date]:"] = "Siden [dato]:"; +$a->strings["Homepage URL:"] = "Hjemmeside URL:"; +$a->strings["Religious Views:"] = "Religiøse synspunkter:"; +$a->strings["Keywords:"] = "Nøkkelord:"; +$a->strings["Example: fishing photography software"] = "Eksempel: fisking fotografering programvare"; +$a->strings["Used in directory listings"] = "Brukt i katalogoppføringer"; +$a->strings["Tell us about yourself..."] = "Fortell oss om deg selv..."; +$a->strings["Hobbies/Interests"] = "Hobbier/Interesser"; +$a->strings["Contact information and Social Networks"] = "Kontaktinformasjon og sosiale nettverk"; +$a->strings["My other channels"] = "Mine andre kanaler"; +$a->strings["Musical interests"] = "Musikkinteresser"; +$a->strings["Books, literature"] = "Bøker, litteratur"; +$a->strings["Television"] = "TV/fjernsyn"; +$a->strings["Film/dance/culture/entertainment"] = "Film/dans/kultur/underholdning"; +$a->strings["Love/romance"] = "Kjærlighet/romantikk"; +$a->strings["Work/employment"] = "Arbeid/sysselsetting"; +$a->strings["School/education"] = "Skole/utdanning"; +$a->strings["This is your default profile."] = "Dette er din standardprofil."; +$a->strings["Age: "] = "Alder:"; +$a->strings["Edit/Manage Profiles"] = "Endre/håndter profiler"; +$a->strings["Add profile things"] = "Legg til profilting"; +$a->strings["Include desirable objects in your profile"] = "Inkluder ønskverdige objekter i din profil"; +$a->strings["No ratings"] = "Ingen vurderinger"; +$a->strings["Ratings"] = "Vurderinger"; +$a->strings["Rating: "] = "Vurdering:"; +$a->strings["Website: "] = "Nettsted:"; +$a->strings["Description: "] = "Beskrivelse:"; +$a->strings["OpenID protocol error. No ID returned."] = "OpenID protokollfeil. Ingen ID ble returnert."; +$a->strings["Welcome %s. Remote authentication successful."] = "Velkommen %s. Ekstern autentisering er vellykket."; +$a->strings["%d rating"] = array( + 0 => "%d vurdering", + 1 => "%d vurderinger", +); +$a->strings["Gender: "] = "Kjønn:"; +$a->strings["Status: "] = "Status:"; +$a->strings["Homepage: "] = "Hjemmeside:"; +$a->strings["Hometown: "] = "Hjemby:"; +$a->strings["About: "] = "Om:"; +$a->strings["Public Forum:"] = "Offentlig forum:"; +$a->strings["Keywords: "] = "Nøkkelord:"; +$a->strings["Finding:"] = "Finner:"; +$a->strings["next page"] = "Neste side"; +$a->strings["previous page"] = "Forrige side"; +$a->strings["No entries (some entries may be hidden)."] = "Ingen oppføringer (noen oppføringer kan være skjult)."; +$a->strings["Export Channel"] = "Eksporter kanal"; +$a->strings["Export your basic channel information to a small file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new hub, but\tdoes not contain your content."] = "Eksporter grunnleggende informasjon om kanalen din til en liten fil. Denne er en sikkerhetskopi av dine forbindelser, tillatelser, profil og grunnleggende data, som kan brukes til å importere dine data til en ny hub, men den tar ikke med innholdet."; +$a->strings["Export Content"] = "Eksporter innhold"; +$a->strings["Export your channel information and all the content to a JSON backup. This backs up all of your connections, permissions, profile data and all of your content, but is generally not suitable for importing a channel to a new hub as this file may be VERY large. Please be patient - it may take several minutes for this download to begin."] = "Eksporter din kanalinformasjon og alt innholdet til en sikkerhetskopi som JSON-fil. Denne lager en sikkerhetskopi av alle dine forbindelser, tillatelser, profildata og alt innholdet ditt, men er generelt ikke egnet for å importere en kanal til en ny hub, fordi denne filen kan være SVÆRT stor. Vennligst vær tålmodig - det kan ta flere minutter før denne nedlastningen begynner."; +$a->strings["No connections."] = "Ingen forbindelser."; +$a->strings["Visit %s's profile [%s]"] = "Besøk %s sin profil [%s]"; +$a->strings["invalid target signature"] = "Målets signatur er ugyldig"; $a->strings["Theme settings updated."] = "Temainnstillinger er oppdatert."; $a->strings["Site"] = "Nettsted"; $a->strings["Accounts"] = "Kontoer"; $a->strings["Channels"] = "Kanaler"; $a->strings["Plugins"] = "Tilleggsfunksjoner"; $a->strings["Themes"] = "Temaer"; -$a->strings["Server"] = "Tjener"; +$a->strings["Inspect queue"] = "Inspiser kø"; $a->strings["Profile Config"] = "Profilinnstillinger"; $a->strings["DB updates"] = "Databaseoppdateringer"; $a->strings["Logs"] = "Logger"; $a->strings["Plugin Features"] = "Tilleggsfunksjoner"; $a->strings["User registrations waiting for confirmation"] = "Brukerregistreringer som venter på bekreftelse"; +$a->strings["# Accounts"] = "# Kontoer"; +$a->strings["# blocked accounts"] = "# blokkerte kontoer"; +$a->strings["# expired accounts"] = "# utgåtte kontoer"; +$a->strings["# expiring accounts"] = "# kontoer som holder på å gå ut"; +$a->strings["# Channels"] = "# Kanaler"; +$a->strings["# primary"] = "# hoved"; +$a->strings["# clones"] = "# kloner"; $a->strings["Message queues"] = "Meldingskøer"; $a->strings["Administration"] = "Administrasjon"; $a->strings["Summary"] = "Sammendrag"; -$a->strings["Registered users"] = "Registrerte brukere"; +$a->strings["Registered accounts"] = "Registrerte kontoer"; $a->strings["Pending registrations"] = "Ventende registreringer"; -$a->strings["Version"] = "Versjon"; +$a->strings["Registered channels"] = "Registrerte kanaler"; $a->strings["Active plugins"] = "Aktive tilleggsfunksjoner"; +$a->strings["Version"] = "Versjon"; $a->strings["Site settings updated."] = "Nettstedsinnstillinger er oppdatert."; -$a->strings["mobile"] = "mobil"; $a->strings["experimental"] = "eksperimentell"; $a->strings["unsupported"] = "ikke støttet"; $a->strings["Yes - with approval"] = "Ja - med godkjenning"; @@ -1620,6 +1719,7 @@ $a->strings["My site is not a public server"] = "Mitt nettsted er ikke en offent $a->strings["My site has paid access only"] = "Mitt nettsted gir kun tilgang mot betaling"; $a->strings["My site has free access only"] = "Mitt nettsted har kun gratis tilgang"; $a->strings["My site offers free accounts with optional paid upgrades"] = "Mitt nettsted tilbyr gratis konto med valgfri oppgradering til betalt tjeneste"; +$a->strings["Registration"] = "Registrering"; $a->strings["File upload"] = "Last opp fil"; $a->strings["Policies"] = "Retningslinjer"; $a->strings["Site name"] = "Nettstedets navn"; @@ -1647,6 +1747,8 @@ $a->strings["Allowed friend domains"] = "Tillatte vennedomener"; $a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Kommaseparert liste over domener som har lov til å etablere vennskap med dette nettstedet. Jokertegn er akseptert. Tøm for å tillate alle domener."; $a->strings["Allowed email domains"] = "Tillate e-postdomener"; $a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Kommaseparert liste med domener som er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt"; +$a->strings["Not allowed email domains"] = "Ikke tillatte e-postdomener"; +$a->strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Kommaseparert liste med domener som ikke er tillatt i e-postadresser ved registrering på dette nettstedet. Jokertegn er akseptert. Tomt betyr at alle domener er tillatt, med mindre tillate domener er blitt definert."; $a->strings["Block public"] = "Blokker offentlig tilgang"; $a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Kryss av for å blokkere tilgang til alle personlige sider som ellers ville vært offentlig tilgjengelige på dette nettstedet med mindre du er logget inn."; $a->strings["Verify Email Addresses"] = "Bekreft e-postadresser"; @@ -1672,6 +1774,7 @@ $a->strings["ID"] = "ID"; $a->strings["for channel"] = "for kanalen"; $a->strings["on server"] = "på tjener"; $a->strings["Status"] = "Status"; +$a->strings["Server"] = "Tjener"; $a->strings["Update has been marked successful"] = "Oppdateringen har blitt merket som en suksess"; $a->strings["Executing %s failed. Check system logs."] = "Utføring av %s feilet. Sjekk systemlogger."; $a->strings["Update %s was successfully applied."] = "Oppdatering %s ble gjennomført med suksess."; @@ -1681,6 +1784,13 @@ $a->strings["No failed updates."] = "Ingen mislykkede oppdateringer."; $a->strings["Failed Updates"] = "Mislykkede oppdateringer"; $a->strings["Mark success (if update was manually applied)"] = "Marker suksess (hvis oppdateringen ble gjennomført manuelt)"; $a->strings["Attempt to execute this update step automatically"] = "Prøv å gjennomføre dette oppdateringstrinnet automatisk"; +$a->strings["Queue Statistics"] = "Køstatistikk"; +$a->strings["Total Entries"] = "Totalt antall oppføringer"; +$a->strings["Priority"] = "Prioritet"; +$a->strings["Destination URL"] = "Mål-URL"; +$a->strings["Mark hub permanently offline"] = "Merk hub som permanent offline"; +$a->strings["Empty queue for this hub"] = "Tøm køen for denne hubben"; +$a->strings["Last known contact"] = "Siste kjente kontakt"; $a->strings["%s user blocked/unblocked"] = array( 0 => "%s bruker blokkert/ikke blokkert lenger", 1 => "%s brukere blokkert/ikke blokkert lenger", @@ -1690,8 +1800,8 @@ $a->strings["%s user deleted"] = array( 1 => "%s brukere slettet", ); $a->strings["Account not found"] = "Kontoen ble ikke funnet"; -$a->strings["User '%s' unblocked"] = "Brukeren '%s' er ikke blokkert lenger"; $a->strings["User '%s' blocked"] = "Brukeren '%s' er blokkert"; +$a->strings["User '%s' unblocked"] = "Brukeren '%s' er ikke blokkert lenger"; $a->strings["Users"] = "Brukere"; $a->strings["select all"] = "velg alle"; $a->strings["User registrations waiting for confirm"] = "Brukerregistreringer som venter på bekreftelse"; @@ -1749,58 +1859,117 @@ $a->strings["Help text"] = "Hjelpetekst"; $a->strings["Additional info (optional)"] = "Tilleggsinformasjon (valgfritt)"; $a->strings["Field definition not found"] = "Feltdefinisjonen ble ikke funnet"; $a->strings["Edit Profile Field"] = "Endre profilfelt"; -$a->strings["Unable to locate original post."] = "Ikke i stand til å finne opprinnelig innlegg."; -$a->strings["Empty post discarded."] = "Tomt innlegg forkastet."; -$a->strings["Executable content type not permitted to this channel."] = "Kjørbar innholdstype er ikke tillat for denne kanalen."; -$a->strings["System error. Post not saved."] = "Systemfeil. Innlegg ble ikke lagret."; -$a->strings["You have reached your limit of %1$.0f top level posts."] = "Du har nådd din grense på %1$.0f startinnlegg."; -$a->strings["You have reached your limit of %1$.0f webpages."] = "Du har nådd din grense på %1$.0f websider."; -$a->strings["Like/Dislike"] = "Liker/Liker ikke"; -$a->strings["This action is restricted to members."] = "Denne handlingen er begrenset til medlemmer."; -$a->strings["Please <a href=\"rmagic\">login with your RedMatrix ID</a> or <a href=\"register\">register as a new RedMatrix member</a> to continue."] = "Vennligst <a href=\"rmagic\">logg inn med din RedMatrix ID</a> eller <a href=\"register\">registrer deg som et nytt RedMatrix-medlem</a> for å fortsette"; -$a->strings["Invalid request."] = "Ugyldig forespørsel."; -$a->strings["thing"] = "ting"; -$a->strings["Channel unavailable."] = "Kanalen er utilgjengelig."; -$a->strings["Previous action reversed."] = "Forrige handling er omgjort."; -$a->strings["Action completed."] = "Handling ferdig."; -$a->strings["Thank you."] = "Tusen takk."; -$a->strings["Total invitation limit exceeded."] = "Grensen for totalt antall invitasjoner er overskredet."; -$a->strings["%s : Not a valid email address."] = "%s : ikke en gyldig e-postadresse."; -$a->strings["Please join us on Red"] = "Bli med oss på Red"; -$a->strings["Invitation limit exceeded. Please contact your site administrator."] = "Invitasjonsgrensen er overskredet. Vennligst kontakt administratoren ved ditt nettsted."; -$a->strings["%s : Message delivery failed."] = "%s : meldingslevering feilet."; -$a->strings["%d message sent."] = array( - 0 => "%d melding sendt.", - 1 => "%d meldinger sendt.", -); -$a->strings["You have no more invitations available"] = "Du har ikke flere invitasjoner tilgjengelig"; -$a->strings["Send invitations"] = "Send invitasjoner"; -$a->strings["Enter email addresses, one per line:"] = "Skriv e-postadresser, en per linje:"; -$a->strings["Your message:"] = "Din melding:"; -$a->strings["Please join my community on RedMatrix."] = "Du er velkommen til å bli med i mitt fellesskap på RedMatrix."; -$a->strings["You will need to supply this invitation code: "] = "Du må oppgi denne invitasjonskoden:"; -$a->strings["1. Register at any RedMatrix location (they are all inter-connected)"] = "1. Registrer ved enhver RedMatrix-lokasjon (de er alle forbundet med hverandre)"; -$a->strings["2. Enter my RedMatrix network address into the site searchbar."] = "2. Skriv inn min RedMatrix-adresse i nettstedets søkefelt."; -$a->strings["or visit "] = "eller besøk"; -$a->strings["3. Click [Connect]"] = "3. Klikk [Forbindelse]"; -$a->strings["Location not found."] = "Plassering er ikke funnet."; -$a->strings["Primary location cannot be removed."] = "Primær plassering kan ikke fjernes."; -$a->strings["No locations found."] = "Ingen plasseringer ble funnet."; -$a->strings["Manage Channel Locations"] = "Håndter kanalplasseringer"; -$a->strings["Location (address)"] = "Plassering (adresse)"; -$a->strings["Primary Location"] = "Hovedplassering"; -$a->strings["Drop location"] = "Slett plassering"; +$a->strings["Unable to find your hub."] = "Ikke i stand til å finne hubben din."; +$a->strings["Post successful."] = "Innlegg vellykket."; +$a->strings["Edit Block"] = "Endre byggekloss"; +$a->strings["Delete block?"] = "Slett byggeklossen?"; +$a->strings["Delete Block"] = "Slett byggekloss"; +$a->strings["Maximum daily site registrations exceeded. Please try again tomorrow."] = "Antallet daglige registreringer ved nettstedet er overskredet. Vær vennlig å prøve igjen imorgen."; +$a->strings["Please indicate acceptance of the Terms of Service. Registration failed."] = "Vennligst angi at tjenesteavtalen er akseptert. Registrering mislyktes."; +$a->strings["Passwords do not match."] = "Passordene er ikke like."; +$a->strings["Registration successful. Please check your email for validation instructions."] = "Registreringen er vellykket. Vennligst sjekk e-posten din for å bekrefte opprettelsen."; +$a->strings["Your registration is pending approval by the site owner."] = "Din registrering venter på godkjenning av nettstedets eier."; +$a->strings["Your registration can not be processed."] = "Din registrering kan ikke behandles."; +$a->strings["Registration on this site/hub is by approval only."] = "Registrering på dette nettstedet/denne hubben skjer bare gjennom godkjenning."; +$a->strings["<a href=\"pubsites\">Register at another affiliated site/hub</a>"] = "<a href=\"pubsites\">Registrer på et annet tilknyttet nettsted/hub</a>"; +$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Dette nettstedet har overskredet antallet tillate kontoregistreringer per dag. Vennligst prøv igjen imorgen."; +$a->strings["Terms of Service"] = "Tjenesteavtale"; +$a->strings["I accept the %s for this website"] = "Jeg godtar %s for dette nettstedet"; +$a->strings["I am over 13 years of age and accept the %s for this website"] = "Jeg er over 13 år gammel og aksepterer %s for dette nettstedet."; +$a->strings["Membership on this site is by invitation only."] = "Medlemskap ved dette nettstedet skjer kun via invitasjon."; +$a->strings["Please enter your invitation code"] = "Vennligst skriv din invitasjonskode"; +$a->strings["Your email address"] = "Din e-postadresse"; +$a->strings["Choose a password"] = "Velg et passord"; +$a->strings["Please re-enter your password"] = "Vennligst skriv ditt passord en gang til"; +$a->strings["Account removals are not allowed within 48 hours of changing the account password."] = "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet."; +$a->strings["Remove This Account"] = "Slett denne kontoen"; +$a->strings["WARNING: "] = "ADVARSEL:"; +$a->strings["This account and all its channels will be completely removed from the network. "] = "Denne kontoen og alle dens kanaler vil bli fullstendig fjernet fra nettverket."; +$a->strings["This action is permanent and can not be undone!"] = "Denne handlingen er permanent og kan ikke angres!"; +$a->strings["Please enter your password for verification:"] = "Vennligst skriv ditt passord for å få bekreftelse:"; +$a->strings["Remove this account, all its channels and all its channel clones from the network"] = "Slett denne kontoen, alle dens kanaler og alle dens kanalkloner fra dette nettverket"; +$a->strings["By default only the instances of the channels located on this hub will be removed from the network"] = "Som standard vil bare forekomster av kanalene lokalisert på denne hubben bli slettet fra nettverket"; $a->strings["[Embedded content - reload page to view]"] = "[Innebygget innhold - last siden på nytt for å se]"; -$a->strings["Help with this feature"] = "Hjelp med denne funksjonen"; -$a->strings["Layout Name"] = "Layout-navn"; -$a->strings["Remote privacy information not available."] = "Ekstern personverninformasjon er ikke tilgjengelig."; -$a->strings["Visible to:"] = "Synlig for:"; -$a->strings["No connections."] = "Ingen forbindelser."; -$a->strings["Visit %s's profile [%s]"] = "Besøk %s sin profil [%s]"; -$a->strings["View Connnections"] = "Vis forbindelser"; -$a->strings["Hub not found."] = "Hubben ble ikke funnet."; +$a->strings["Page owner information could not be retrieved."] = "Informasjon om sideeier kunne ikke hentes."; +$a->strings["Album not found."] = "Albumet ble ikke funnet."; +$a->strings["Delete Album"] = "Slett album"; +$a->strings["Delete Photo"] = "Slett bilde"; +$a->strings["No photos selected"] = "Ingen bilder valgt"; +$a->strings["Access to this item is restricted."] = "Tilgang til dette elementet er begrenset."; +$a->strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB av %2$.2f MB lagringsplass til bilder er brukt."; +$a->strings["%1$.2f MB photo storage used."] = "%1$.2f MB lagringsplass til bilder er brukt."; +$a->strings["Upload Photos"] = "Last opp bilder"; +$a->strings["Enter a new album name"] = "Skriv et nytt albumnavn"; +$a->strings["or select an existing one (doubleclick)"] = "eller velg et eksisterende album (dobbeltklikk)"; +$a->strings["Create a status post for this upload"] = "Lag et statusinnlegg for denne opplastingen"; +$a->strings["Album name could not be decoded"] = "Albumnavnet kunne ikke dekodes"; +$a->strings["Contact Photos"] = "Kontaktbilder"; +$a->strings["Show Newest First"] = "Vis nyeste først"; +$a->strings["Show Oldest First"] = "Vis eldste først"; +$a->strings["View Photo"] = "Vis foto"; +$a->strings["Edit Album"] = "Endre album"; +$a->strings["Permission denied. Access to this item may be restricted."] = "Tillatelse avvist. Tilgang til dette elementet kan være begrenset."; +$a->strings["Photo not available"] = "Bilde er utilgjengelig"; +$a->strings["Use as profile photo"] = "Bruk som profilbilde"; +$a->strings["Private Photo"] = "Privat bilde"; +$a->strings["View Full Size"] = "Vis i full størrelse"; +$a->strings["Edit photo"] = "Endre bilde"; +$a->strings["Rotate CW (right)"] = "Roter med klokka (mot høyre)"; +$a->strings["Rotate CCW (left)"] = "Roter mot klokka (venstre)"; +$a->strings["Caption"] = "Overskrift"; +$a->strings["Add a Tag"] = "Legg til merkelapp"; +$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Eksempel: @bob, @Barbara_Jensen, @jim@example.com"; +$a->strings["Flag as adult in album view"] = "Flag som voksent i albumvisning"; +$a->strings["In This Photo:"] = "I dette bildet:"; +$a->strings["Map"] = "Kart"; +$a->strings["View Album"] = "Vis album"; +$a->strings["Recent Photos"] = "Nye bilder"; +$a->strings["Remote authentication blocked. You are logged into this site locally. Please logout and retry."] = "Fjernautentisering blokkert. Du er logget inn på dette nettstedet lokalt. Vennligst logg ut og prøv på nytt."; +$a->strings["Conversation removed."] = "Samtale fjernet."; +$a->strings["No messages."] = "Ingen meldinger."; +$a->strings["Delete conversation"] = "Slett samtale"; +$a->strings["D, d M Y - g:i A"] = "D, d M Y - g:i A"; +$a->strings["Menu element updated."] = "Menyelement er oppdatert."; +$a->strings["Unable to update menu element."] = "Ikke i stand til å oppdatere menyelement."; +$a->strings["Menu element added."] = "Menyelement lagt til."; +$a->strings["Unable to add menu element."] = "Ikke i stand til å legge til menyelement."; +$a->strings["Manage Menu Elements"] = "Håndtere menyelementer"; +$a->strings["Edit menu"] = "Endre meny"; +$a->strings["Edit element"] = "Endre element"; +$a->strings["Drop element"] = "Slett element"; +$a->strings["New element"] = "Nytt element"; +$a->strings["Edit this menu container"] = "Endre denne menybeholderen"; +$a->strings["Add menu element"] = "Legg til menyelement"; +$a->strings["Delete this menu item"] = "Slett dette menyelementet"; +$a->strings["Edit this menu item"] = "Endre dette menyelementet"; +$a->strings["New Menu Element"] = "Nytt menyelement"; +$a->strings["Menu Item Permissions"] = "Menyelement Tillatelser"; +$a->strings["Link text"] = "Lenketekst"; +$a->strings["URL of link"] = "URL-en til lenken"; +$a->strings["Use RedMatrix magic-auth if available"] = "Bruk RedMatrixs magiske-autentisering hvis tilgjengelig"; +$a->strings["Open link in new window"] = "Åpne lenke i nytt vindu"; +$a->strings["Order in list"] = "Ordne i liste"; +$a->strings["Higher numbers will sink to bottom of listing"] = "Høyere tall vil synke mot bunnen av listen"; +$a->strings["Menu item not found."] = "Menyelement ble ikke funnet."; +$a->strings["Menu item deleted."] = "Menyelement slettet."; +$a->strings["Menu item could not be deleted."] = "Menyelement kunne ikke bli slettet."; +$a->strings["Edit Menu Element"] = "Endre menyelement"; +$a->strings["Set your current mood and tell your friends"] = "Angi ditt nåværende humør og fortell dine venner"; $a->strings["Total votes"] = "Totalt antall stemmer"; $a->strings["Average Rating"] = "Gjennomsnittlig vurdering"; +$a->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."; +$a->strings["Remove This Channel"] = "Fjern denne kanalen"; +$a->strings["This channel will be completely removed from the network. "] = "Denne kanalen vil bli fullstendig fjernet fra nettverket."; +$a->strings["Remove this channel and all its clones from the network"] = "Fjern denne kanalen og alle dens kloner fra nettverket"; +$a->strings["By default only the instance of the channel located on this hub will be removed from the network"] = "Som standard vil bare forekomsten av denne kanalen lokalisert på denne hubben bli fjernet fra nettverket"; +$a->strings["Help with this feature"] = "Hjelp med denne funksjonen"; +$a->strings["Layout Name"] = "Layout-navn"; +$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Vi støtte på et problem under innloggingen med din OpenID. Vennligst sjekk at ID-en er stavet riktig."; +$a->strings["The error message was:"] = "Feilmeldingen var:"; +$a->strings["Authentication failed."] = "Autentisering mislyktes."; +$a->strings["Remote Authentication"] = "Fjernautentisering"; +$a->strings["Enter your channel address (e.g. channel@example.com)"] = "Skriv din kanaladresse (for eksempel channel@exampel.com)"; +$a->strings["Authenticate"] = "Autentiser"; $a->strings["Unable to lookup recipient."] = "Ikke i stand til å slå opp mottaker."; $a->strings["Unable to communicate with requested channel."] = "Ikke i stand til å kommunisere med forespurt kanal."; $a->strings["Cannot verify requested channel."] = "Kan ikke bekrefte forespurt kanal."; @@ -1816,58 +1985,26 @@ $a->strings["Delete message"] = "Slett melding"; $a->strings["Recall message"] = "Tilbakekall innlegg"; $a->strings["Message has been recalled."] = "Innlegget har blitt tilbakekalt."; $a->strings["Private Conversation"] = "Privat samtale"; -$a->strings["Delete conversation"] = "Slett samtale"; $a->strings["No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."] = "Ingen sikret kommunikasjon tilgjengelig. Du kan <strong>muligens</strong> greie å svare via senderens profilside."; $a->strings["Send Reply"] = "Send svar"; -$a->strings["Wall Photos"] = "Veggbilder"; -$a->strings["Profile Match"] = "Profiltreff"; -$a->strings["No keywords to match. Please add keywords to your default profile."] = "Ingen nøkkelord å sammenlikne. Vennligst legg til nøkkelord til din standardprofil."; -$a->strings["is interested in:"] = "er interessert i:"; -$a->strings["No matches"] = "Ingen treff"; -$a->strings["Menu updated."] = "Menyen er oppdatert."; -$a->strings["Unable to update menu."] = "Ikke i stand til å oppdatere meny."; -$a->strings["Menu created."] = "Meny laget."; -$a->strings["Unable to create menu."] = "Ikke i stand til å lage meny."; -$a->strings["Manage Menus"] = "Håndtere menyer"; -$a->strings["Drop"] = "Slett"; -$a->strings["Bookmarks allowed"] = "Bokmerker tillatt"; -$a->strings["Create a new menu"] = "Lag en ny meny"; -$a->strings["Delete this menu"] = "Slett denne menyen"; -$a->strings["Edit menu contents"] = "Endre menyinnholdet"; -$a->strings["Edit this menu"] = "Endre denne menyen"; -$a->strings["New Menu"] = "Ny meny"; -$a->strings["Menu name"] = "Menynavn"; -$a->strings["Must be unique, only seen by you"] = "Må være unik, ses bare av deg"; -$a->strings["Menu title"] = "Menytittel"; -$a->strings["Menu title as seen by others"] = "Menytittelen andre ser"; -$a->strings["Allow bookmarks"] = "Tillat bokmerker"; -$a->strings["Menu may be used to store saved bookmarks"] = "Menyen kan brukes til å lagre lagrede bokmerker"; -$a->strings["Menu deleted."] = "Meny slettet."; -$a->strings["Menu could not be deleted."] = "Menyen kunne ikke bli slettet."; -$a->strings["Edit Menu"] = "Endre meny"; -$a->strings["Add or remove entries to this menu"] = "Legg til eller fjern punkter i denne menyen"; -$a->strings["Conversation removed."] = "Samtale fjernet."; -$a->strings["No messages."] = "Ingen meldinger."; -$a->strings["D, d M Y - g:i A"] = "D, d M Y - g:i A"; +$a->strings["Invalid request identifier."] = "Ugyldig forespørselsidentifikator."; +$a->strings["Discard"] = "Forkast"; +$a->strings["Please login."] = "Vennligst logg inn."; +$a->strings["No such group"] = "Gruppen finnes ikke"; +$a->strings["Search Results For:"] = "Søkeresultat for:"; +$a->strings["Collection is empty"] = "Samlingen er tom"; +$a->strings["Collection: "] = "Samling:"; +$a->strings["Connection: "] = "Forbindelse:"; +$a->strings["Invalid connection."] = "Ugyldig forbindelse."; $a->strings["Add a Channel"] = "Legg til en kanal"; $a->strings["A channel is your own collection of related web pages. A channel can be used to hold social network profiles, blogs, conversation groups and forums, celebrity pages, and much more. You may create as many channels as your service provider allows."] = "En kanal er din egen samling av relaterte web-sider. En kanal kan brukes til å samle sosiale nettverksprofiler, blogger, samtalegrupper og forum, kjendissider og mye mer. Du kan lage så mange kanaler som din tjenestetilbyder tillater."; $a->strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\" "] = "Eksempel: \"Ola Nordmann\", \"Lisa og hestene hennes\", \"Fotball\", \"Sykkelgruppa\""; $a->strings["Choose a short nickname"] = "Velg et kort kallenavn"; $a->strings["Your nickname will be used to create an easily remembered channel address (like an email address) which you can share with others."] = "Ditt kallenavn brukes til å lage en kanaladresse som er enkel å huske (minner om en e-postadresse) og som du kan dele med andre."; $a->strings["Or <a href=\"import\">import an existing channel</a> from another location"] = "Eller <a href=\"import\">importerer en eksisterende kanal</a> fra et annet sted."; -$a->strings["Channel Type"] = "Kanaltype"; $a->strings["Please choose a channel type (such as social networking or community forum) and privacy requirements so we can select the best permissions for you"] = "Vennligst velg en kanaltype (for eksempel sosialt nettverk eller forum for felleskap) og krav til personvern slik at vi kan velge de beste tillatelsene for deg."; -$a->strings["Red Matrix - "The Network""] = "Red Matrix - "Nettverket""; -$a->strings["Welcome to %s"] = "Velkommen til %s"; -$a->strings["Invalid request identifier."] = "Ugyldig forespørselsidentifikator."; -$a->strings["Discard"] = "Forkast"; -$a->strings["No more system notifications."] = "Ingen flere systemvarsler."; -$a->strings["System Notifications"] = "Systemvarsler"; -$a->strings["Xchan Lookup"] = "Xchan oppslag"; -$a->strings["Lookup xchan beginning with (or webbie): "] = "Slå opp xchan som begynner med (eller webbie):"; -$a->strings["Unable to find your hub."] = "Ikke i stand til å finne hubben din."; -$a->strings["Post successful."] = "Innlegg vellykket."; -$a->strings["invalid target signature"] = "Målets signatur er ugyldig"; +$a->strings["Channel Type"] = "Kanaltype"; +$a->strings["Read more about roles"] = "Les mer om roller"; $a->strings["App installed."] = "App installert."; $a->strings["Malformed app."] = "Feil oppsett for app-en."; $a->strings["Embed code"] = "Innbyggingskode"; @@ -1880,14 +2017,20 @@ $a->strings["80 x 80 pixels - optional"] = "80 x80 pixler - valgfritt"; $a->strings["Version ID"] = "Versjons-ID"; $a->strings["Price of app"] = "Pris på app"; $a->strings["Location (URL) to purchase app"] = "Plassering (URL) for å kjøpe app"; +$a->strings["sent you a private message"] = "sendte deg en privat melding"; +$a->strings["added your channel"] = "la til din kanal"; +$a->strings["posted an event"] = "la ut en hendelse"; +$a->strings["Bookmark added"] = "Bokmerke lagt til"; +$a->strings["My Bookmarks"] = "Mine bokmerker"; +$a->strings["My Connections Bookmarks"] = "Mine forbindelsers bokmerker"; +$a->strings["Insufficient permissions. Request redirected to profile page."] = "Utilstrekkelig tillatelse. Forespørsel omdirigert til profilsiden."; +$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Ingen forslag tilgjengelige. Hvis dette er et nytt nettsted, vennligst prøv igjen om 24 timer."; $a->strings["Poll"] = "Spørring"; $a->strings["View Results"] = "Vis resultater"; -$a->strings["Account removals are not allowed within 48 hours of changing the account password."] = "Sletting av kontoer er ikke tillatt innen 48 timer etter endring av kontopassordet."; -$a->strings["Remove This Account"] = "Slett denne kontoen"; -$a->strings["This will completely remove this account including all its channels from the network. Once this has been done it is not recoverable."] = "Dette vil fullstendig slette denne kontoen inkludert alle dens kanaler fra nettverket. Når dette er gjort kan det ikke angres."; -$a->strings["Remove this account, all its channels and all its channel clones from the network"] = "Slett denne kontoen, alle dens kanaler og alle dens kanalkloner fra dette nettverket"; -$a->strings["By default only the instances of the channels located on this hub will be removed from the network"] = "Som standard vil bare forekomster av kanalene lokalisert på denne hubben bli slettet fra nettverket"; $a->strings["No service class restrictions found."] = "Ingen restriksjoner er funnet i tjenesteklasse."; +$a->strings["Files: shared with me"] = "Filer: delt med meg"; +$a->strings["Remove all files"] = "Fjern alle filer"; +$a->strings["Remove this file"] = "Fjern denne filen"; $a->strings["Schema Default"] = "Standard skjema"; $a->strings["Sans-Serif"] = "Sans-Serif"; $a->strings["Monospace"] = "Monospace"; @@ -1923,10 +2066,8 @@ $a->strings["Right offset of the section element"] = "Til høyre for seksjonsele $a->strings["Section width"] = "Seksjonsbredde"; $a->strings["Left offset of the aside"] = "Til venstre for sidestolpen"; $a->strings["Right offset of the aside element"] = "Til høyre for sidestolpen"; -$a->strings["None"] = "Ingen"; -$a->strings["Header image"] = "Topptekstbilde"; -$a->strings["Header image only on profile pages"] = "Topptekstbilde bare på profilsider"; $a->strings["Light (Red Matrix default)"] = "Lys (Red Matrix standard)"; +$a->strings["Select scheme"] = "Velg skjema"; $a->strings["Narrow navbar"] = "Smal navigasjonslinje"; $a->strings["Navigation bar background color"] = "Navigasjonslinjens bakgrunnsfarge"; $a->strings["Navigation bar gradient top color"] = "Navigasjonslinjens graderte toppfarge"; @@ -1947,22 +2088,24 @@ $a->strings["Set the indent for comments"] = "Angi innrykket til kommentarer"; $a->strings["Set the basic color for item icons"] = "Angi grunnfargen for elementikoner"; $a->strings["Set the hover color for item icons"] = "Angi fargen til elementikoner ved berøring"; $a->strings["Set font-size for the entire application"] = "Angi skriftstørrelsen for hele programmet"; +$a->strings["Example: 14px"] = "Eksempel: 14px"; $a->strings["Set font-color for posts and comments"] = "Angi skriftfargen for innlegg og kommentarer"; $a->strings["Set radius of corners"] = "Angi hjørneradius"; $a->strings["Set shadow depth of photos"] = "Angi skyggedybden til bilder"; -$a->strings["Set maximum width of conversation regions"] = "Angi største bredde for samtaleregioner"; -$a->strings["Center conversation regions"] = "Midtstill samtaleregionene"; +$a->strings["Set maximum width of content region in pixel"] = "Angi største bredde for innholdsregionen i pixler"; +$a->strings["Leave empty for default width"] = "La feltet stå tomt for å bruke standard bredde"; +$a->strings["Center page content"] = "Midtstill sideinnhold"; $a->strings["Set minimum opacity of nav bar - to hide it"] = "Angi minste dekkevne for navigasjonslinjen - for å skjule den"; $a->strings["Set size of conversation author photo"] = "Angi størrelsen for samtalens forfatterbilde"; $a->strings["Set size of followup author photos"] = "Angi størrelsen på forfatterbilder ved oppfølging"; -$a->strings["Sloppy photo albums"] = "Slurvete fotoalbum"; -$a->strings["Are you a clean desk or a messy desk person?"] = "Er du en person med ryddig arbeidsbord eller et rotete arbeidsbord?"; $a->strings["Update %s failed. See error logs."] = "Oppdatering %s mislyktes. Se feilloggen."; $a->strings["Update Error at %s"] = "Oppdateringsfeil ved %s"; $a->strings["Create an account to access services and applications within the Red Matrix"] = "Lag en konto for å få tilgang til tjenester og programmer i Red Matrix"; $a->strings["Password"] = "Passord"; $a->strings["Remember me"] = "Husk meg"; $a->strings["Forgot your password?"] = "Glemt passordet ditt?"; -$a->strings["permission denied"] = "tillatelse avvist"; -$a->strings["Got Zot?"] = "Har du Zot?"; $a->strings["toggle mobile"] = "Skru på mobil"; +$a->strings["Website SSL certificate is not valid. Please correct."] = "Nettstedets SSL-sertifikat er ikke gyldig. Vennligst fiks dette."; +$a->strings["[red] Website SSL error for %s"] = "[red] SSL-feil ved nettsted hos %s"; +$a->strings["Cron/Scheduled tasks not running."] = "Cron/planlagte oppgaver kjører ikke."; +$a->strings["[red] Cron tasks not running on %s"] = "[red] Cron-oppgaver kjører ikke på %s"; diff --git a/view/pdl/mod_network.pdl b/view/pdl/mod_network.pdl index 11cadb5aa..7a39017e3 100644 --- a/view/pdl/mod_network.pdl +++ b/view/pdl/mod_network.pdl @@ -2,7 +2,6 @@ [region=aside] [widget=collections][/widget] -[widget=archive][/widget] [widget=suggestions][/widget] [widget=savedsearch][/widget] [widget=filer][/widget] diff --git a/view/php/theme_init.php b/view/php/theme_init.php index b695bd54e..8168eb2c0 100644 --- a/view/php/theme_init.php +++ b/view/php/theme_init.php @@ -10,9 +10,9 @@ head_add_css('view/css/conversation.css'); head_add_css('view/css/widgets.css'); head_add_css('view/css/colorbox.css'); head_add_css('library/justifiedGallery/justifiedGallery.css'); -head_add_css('library/bootstrap-tagsinput/bootstrap-tagsinput.css'); + head_add_js('jquery.js'); -head_add_js('jquery-migrate-1.1.1.js'); +//head_add_js('jquery-migrate-1.1.1.js'); head_add_js('library/justifiedGallery/jquery.justifiedGallery.js'); //head_add_js('jquery-compat.js'); @@ -21,13 +21,13 @@ head_add_js('jquery.spin.js'); head_add_js('jquery.textinputs.js'); head_add_js('autocomplete.js'); head_add_js('library/jquery-textcomplete/jquery.textcomplete.js'); -head_add_js('library/colorbox/jquery.colorbox.js'); +//head_add_js('library/colorbox/jquery.colorbox.js'); head_add_js('library/jquery.timeago.js'); head_add_js('library/readmore.js/readmore.js'); -head_add_js('library/jquery_ac/friendica.complete.js'); -head_add_js('library/tiptip/jquery.tipTip.minified.js'); +//head_add_js('library/jquery_ac/friendica.complete.js'); +//head_add_js('library/tiptip/jquery.tipTip.minified.js'); head_add_js('library/jgrowl/jquery.jgrowl_minimized.js'); -head_add_js('library/tinymce/jscripts/tiny_mce/tiny_mce.js'); +//head_add_js('library/tinymce/jscripts/tiny_mce/tiny_mce.js'); head_add_js('library/cryptojs/components/core-min.js'); head_add_js('library/cryptojs/rollups/aes.js'); head_add_js('library/cryptojs/rollups/rabbit.js'); @@ -38,9 +38,9 @@ head_add_js('webtoolkit.base64.js'); head_add_js('main.js'); head_add_js('crypto.js'); head_add_js('library/jRange/jquery.range.js'); -head_add_js('docready.js'); +//head_add_js('docready.js'); head_add_js('library/colorbox/jquery.colorbox-min.js'); -head_add_js('library/bootstrap-tagsinput/bootstrap-tagsinput.js'); + head_add_js('library/jquery.AreYouSure/jquery.are-you-sure.js'); head_add_js('library/tableofcontents/jquery.toc.js'); diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index f72b8a0bb..571298f8d 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -346,6 +346,7 @@ footer { -moz-border-radius: $radiuspx; -webkit-border-radius: $radiuspx; border-radius: $radiuspx; + word-wrap: break-word; } .vcard dl { @@ -493,10 +494,6 @@ footer { font-size: 0.7em; } -#colorbox { - padding: 5px; -} - .app-name { overflow: none; } @@ -962,10 +959,20 @@ nav .acpopup { background: none repeat scroll 0% 0% #FCF8E3 !important; } +#cboxOverlay { + z-index: 1050; +} + #colorbox { + z-index: 1051; +} + +#cboxContent { + padding: 3px; border: 0px solid #fff; + border-radius: $radiuspx; background-color: #fff; - z-index: 9; + z-index: 1052; } .settings-block { @@ -1347,13 +1354,7 @@ header { } .notify-seen a { - background: $notifyseen_bgcolour; - color: $notifyseen_linkcolour !important; -} - -.notify-seen a:hover { - background: $notifyseen_bghover; - color: $notifyseen_linkhover !important; + background: #ddd; } #page-spinner { @@ -1866,21 +1867,6 @@ nav .dropdown-menu { border-top-left-radius: 0px; border-bottom-right-radius: $radiuspx; border-bottom-left-radius: $radiuspx; - background-color: $notify_bgcolour; -} - -nav .dropdown-menu .divider{ - background-color: $navmenu_bgchover; -} - -nav .dropdown-menu>li>a{ - color: $notify_linkcolour; -} - -nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ - color: $notify_linkcolour; - background-color: $navmenu_bgchover; - $navmenu_bgimage } #usermenu-caret { @@ -2235,15 +2221,19 @@ aside .nav > li > a:hover, aside .nav > li > a:focus { } /* Modified original CSS to match input in Redbasic */ -.bootstrap-tagsinput { +.jothidden .bootstrap-tagsinput { border-color:#fff; background-color: #fff; box-shadow: none; display: inline-block; border-radius: $radiuspx; cursor: text; - padding: 0 6px; - width: 70% !important; + padding: 0px 8px; + width: 100%; +} + +.bootstrap-tagsinput .label { + font-size: 100%; } .jothidden .bootstrap-tagsinput:hover, .jothidden .bootstrap-tagsinput:focus { diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c825b0485..68190778c 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -34,6 +34,10 @@ $(document).ready(function() { if($('#tabs-collapse-1').length === 0) { $('#expand-tabs').hide(); } + + $("input[data-role=cat-tagsinput]").tagsinput({ + tagClass: 'label label-primary' + }); }); $(document).ready(function(){ @@ -48,4 +52,4 @@ $(document).ready(function(){ } } setInterval(function () {checkNotify();}, 10 * 1000); -});
\ No newline at end of file +}); diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php index a1b22f583..2d17e6d08 100644 --- a/view/theme/redbasic/php/style.php +++ b/view/theme/redbasic/php/style.php @@ -96,10 +96,6 @@ if(! $a->install) { $nav_icon_colour = "#999"; if (! $nav_active_icon_colour) $nav_active_icon_colour = "#fff"; - if (! $navmenu_bgchover) - $navmenu_bgchover = "#f5f5f5"; - if (! $navmenu_bgimage) - $navmenu_bgimage = ""; if (! $navtabs_borderc) $navtabs_borderc = "rgba(204,204,204,0.8)"; if (! $navtabs_fontcolour) @@ -200,23 +196,6 @@ if(! $a->install) { $acpopup_tgbl_bgcolour = "#ddddff"; if (! $acpopup_hovercolour) $acpopup_hovercolour = "#000"; - if (! $notify_bgcolour) - $notify_bgcolour = "#fff"; - if (! $notify_linkcolour) - $notify_linkcolour = "#333"; - if (! $notify_bghover) - $notify_bghover = "#e7e7e7"; - if (! $notifyseen_bgcolour) - $notifyseen_bgcolour = "#ddd"; - if (! $notifyseen_linkcolour) - $notifyseen_linkcolour = "#333"; - if (! $notifyseen_bghover) - $notifyseen_bghover = "#e7e7e7"; - if (! $notifyseen_linkhover) - $notifyseen_linkhover = "#333"; - if (! $notify_topmargin) - $notify_topmargin = "1px"; - if (! $radius) $radius = "4"; @@ -262,8 +241,6 @@ $options = array ( '$nav_bd' => $nav_bd, '$nav_icon_colour' => $nav_icon_colour, '$nav_active_icon_colour' => $nav_active_icon_colour, -'$navmenu_bgchover' => $navmenu_bgchover, -'$navmenu_bgimage' => $navmenu_bgimage, '$navtabs_borderc' => $navtabs_borderc, '$navtabs_fontcolour' => $navtabs_fontcolour, '$navtabs_bgcolour' => $navtabs_bgcolour, @@ -314,14 +291,6 @@ $options = array ( '$acpopup_bordercolour' => $acpopup_bordercolour, '$acpopup_tgbl_bgcolour' => $acpopup_tgbl_bgcolour, '$acpopup_hovercolour' => $acpopup_hovercolour, -'$notify_bgcolour' => $notify_bgcolour, -'$notify_linkcolour' => $notify_linkcolour, -'$notify_bghover' => $notify_bghover, -'$notifyseen_bgcolour' => $notifyseen_bgcolour, -'$notifyseen_linkcolour' => $notifyseen_linkcolour, -'$notifyseen_bghover' => $notifyseen_bghover, -'$notifyseen_linkhover' => $notifyseen_linkhover, -'$notify_topmargin' => $notify_topmargin, '$radius' => $radius, '$shadow' => $shadow, '$active_colour' => $active_colour, diff --git a/view/theme/redbasic/php/theme_init.php b/view/theme/redbasic/php/theme_init.php index 498d1ee15..3179c7078 100644 --- a/view/theme/redbasic/php/theme_init.php +++ b/view/theme/redbasic/php/theme_init.php @@ -1,7 +1,8 @@ <?php head_add_css('library/font_awesome/css/font-awesome.min.css'); -head_add_css('library/bootstrap/css/bootstrap.min.css'); +head_add_css('library/bootstrap/css/bootstrap.min.css'); +head_add_css('library/bootstrap-tagsinput/bootstrap-tagsinput.css'); head_add_css('view/css/bootstrap-red.css'); head_add_css('library/datetimepicker/jquery.datetimepicker.css'); //head_add_css('library/colorpicker/css/colorpicker.css'); @@ -10,6 +11,7 @@ require_once('view/php/theme_init.php'); head_add_js('library/bootstrap/js/bootstrap.min.js'); head_add_js('library/bootbox/bootbox.min.js'); +head_add_js('library/bootstrap-tagsinput/bootstrap-tagsinput.js'); head_add_js('library/datetimepicker/jquery.datetimepicker.js'); //head_add_js('library/colorpicker/js/colorpicker.js'); head_add_js('library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js'); diff --git a/view/theme/redbasic/schema/dark.css b/view/theme/redbasic/schema/dark.css index 7af859db6..78aa27d38 100644 --- a/view/theme/redbasic/schema/dark.css +++ b/view/theme/redbasic/schema/dark.css @@ -115,3 +115,38 @@ input[type="submit"] { background-color: #333; color: #fff; } + +.notify-seen a { + background: #111; + color: #222 !important; +} + +.notify-seen a:hover { + background: #222; + color: #ccc !important; +} + +nav .dropdown-menu>li>a{ + color: #fff; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #fff; + background-color: #222; + background-image: none; +} + + +nav .dropdown-menu .divider{ + background-color: #222; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #fff; + background-color: #222; + background-image: none; +} + +nav .dropdown-menu { + background-color: #000; +} diff --git a/view/theme/redbasic/schema/dark.php b/view/theme/redbasic/schema/dark.php index b6cc53504..b3addcfff 100644 --- a/view/theme/redbasic/schema/dark.php +++ b/view/theme/redbasic/schema/dark.php @@ -16,10 +16,6 @@ $nav_icon_colour = "#999"; if (! $nav_active_icon_colour) $nav_active_icon_colour = "#fff"; - if (! $navmenu_bgchover) - $navmenu_bgchover = "#222"; - if (! $navmenu_bgimage) - $navmenu_bgimage = "background-image: none;"; if (! $navtabs_borderc) $navtabs_borderc = "#333"; if (! $navtabs_fontcolour) @@ -116,20 +112,3 @@ $dropdown_bordercol = "#222"; if (! $preview_backgroundimg) $preview_backgroundimg = "gray_and_black_diagonal_stripes_background_seamless.gif"; - if (! $notify_bgcolour) - $notify_bgcolour = "#000"; - if (! $notify_linkcolour) - $notify_linkcolour = "#FFF"; - if (! $notify_bghover) - $notify_bghover = "#222"; - if (! $notify_topmargin) - $notify_topmargin = "-1px"; - if (! $notifyseen_bgcolour) - $notifyseen_bgcolour = "#111"; - if (! $notifyseen_linkcolour) - $notifyseen_linkcolour = "#222"; - if (! $notifyseen_bghover) - $notifyseen_bghover = "#222"; - if (! $notifyseen_linkhover) - $notifyseen_linkhover = "#CCC"; - diff --git a/view/theme/redbasic/schema/simple_black_on_white.css b/view/theme/redbasic/schema/simple_black_on_white.css index e23053858..dd47a3280 100644 --- a/view/theme/redbasic/schema/simple_black_on_white.css +++ b/view/theme/redbasic/schema/simple_black_on_white.css @@ -115,3 +115,38 @@ input[type="submit"] { background-color: #fff; color: #000; } + +.notify-seen a { + background: #fff; + color: #fff !important; +} + +.notify-seen a:hover { + background: #fff; + color: #000 !important; +} + +nav .dropdown-menu>li>a{ + color: #000; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #000; + background-color: #F5F5F5; + background-image: none; +} + + +nav .dropdown-menu .divider{ + background-color: #F5F5F5; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #000; + background-color: #F5F5F5; + background-image: none; +} + +nav .dropdown-menu { + background-color: #fff; +} diff --git a/view/theme/redbasic/schema/simple_black_on_white.php b/view/theme/redbasic/schema/simple_black_on_white.php index 76db1bb1f..7c1c99a32 100644 --- a/view/theme/redbasic/schema/simple_black_on_white.php +++ b/view/theme/redbasic/schema/simple_black_on_white.php @@ -16,10 +16,7 @@ $nav_icon_colour = "#111"; if (! $nav_active_icon_colour) $nav_active_icon_colour = "#000"; - if (! $navmenu_bgchover) - $navmenu_bgchover = "#F5F5F5"; - if (! $navmenu_bgimage) - $navmenu_bgimage = "background-image: none;"; + if (! $navtabs_borderc) $navtabs_borderc = "#000"; if (! $navtabs_fontcolour) @@ -114,20 +111,3 @@ $dropdown_bordercol = "#fff"; if (! $preview_backgroundimg) $preview_backgroundimg = "gray_and_white_diagonal_stripes_background_seamless.gif"; - if (! $notify_bgcolour) - $notify_bgcolour = "#fff"; - if (! $notify_linkcolour) - $notify_linkcolour = "#000"; - if (! $notify_bghover) - $notify_bghover = "#fff"; - if (! $notify_topmargin) - $notify_topmargin = "-1px"; - if (! $notifyseen_bgcolour) - $notifyseen_bgcolour = "#fff"; - if (! $notifyseen_linkcolour) - $notifyseen_linkcolour = "#fff"; - if (! $notifyseen_bghover) - $notifyseen_bghover = "#fff"; - if (! $notifyseen_linkhover) - $notifyseen_linkhover = "#000"; - diff --git a/view/theme/redbasic/schema/simple_green_on_black.css b/view/theme/redbasic/schema/simple_green_on_black.css index f9bde2a71..671465529 100644 --- a/view/theme/redbasic/schema/simple_green_on_black.css +++ b/view/theme/redbasic/schema/simple_green_on_black.css @@ -115,3 +115,38 @@ input[type="submit"] { background-color: #000; color: #50f148; } + +.notify-seen a { + background: #000; + color: #000 !important; +} + +.notify-seen a:hover { + background: #000; + color: #50f148 !important; +} + +nav .dropdown-menu>li>a{ + color: #50f148; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #50f148; + background-color: #143D12; + background-image: none; +} + + +nav .dropdown-menu .divider{ + background-color: #143D12; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #50f148; + background-color: #143D12; + background-image: none; +} + +nav .dropdown-menu { + background-color: #000; +} diff --git a/view/theme/redbasic/schema/simple_green_on_black.php b/view/theme/redbasic/schema/simple_green_on_black.php index 8c8a58619..6b104a4e6 100644 --- a/view/theme/redbasic/schema/simple_green_on_black.php +++ b/view/theme/redbasic/schema/simple_green_on_black.php @@ -16,10 +16,6 @@ $nav_icon_colour = "#32962D"; if (! $nav_active_icon_colour) $nav_active_icon_colour = "#50f148"; - if (! $navmenu_bgchover) - $navmenu_bgchover = "#143D12"; - if (! $navmenu_bgimage) - $navmenu_bgimage = "background-image: none;"; if (! $navtabs_borderc) $navtabs_borderc = "#143D12"; if (! $navtabs_fontcolour) @@ -114,22 +110,11 @@ if (! $navaside_bghover) $dropdown_bordercol = "#143D12"; if (! $preview_backgroundimg) $preview_backgroundimg = "gray_and_black_diagonal_stripes_background_seamless.gif"; - if (! $notify_bgcolour) - $notify_bgcolour = "#000"; - if (! $notify_linkcolour) - $notify_linkcolour = "#50f148"; - if (! $notify_bghover) - $notify_bghover = "#000"; - if (! $notify_topmargin) - $notify_topmargin = "-1px"; - if (! $notifyseen_bgcolour) - $notifyseen_bgcolour = "#000"; - if (! $notifyseen_linkcolour) - $notifyseen_linkcolour = "#000"; - if (! $notifyseen_bghover) - $notifyseen_bghover = "#000"; - if (! $notifyseen_linkhover) - $notifyseen_linkhover = "#50f148"; + + + + + diff --git a/view/theme/redbasic/schema/simple_white_on_black.css b/view/theme/redbasic/schema/simple_white_on_black.css index 0a6c17f1b..761fe795b 100644 --- a/view/theme/redbasic/schema/simple_white_on_black.css +++ b/view/theme/redbasic/schema/simple_white_on_black.css @@ -116,3 +116,37 @@ input[type="submit"] { background-color: #000; color: #fff; } + +.notify-seen a { + background: #000; + color: #000 !important; +} + +.notify-seen a:hover { + background: #000; + color: #fff !important; +} + +nav .dropdown-menu>li>a{ + color: #fff; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #fff; + background-color: #030303; + background-image: none; +} + +nav .dropdown-menu .divider{ + background-color: #030303; +} + +nav .dropdown-menu>li>a:hover,nav .dropdown-menu>li>a:focus{ + color: #fff; + background-color: #030303; + background-image: none; +} + +nav .dropdown-menu { + background-color: #000; +} diff --git a/view/theme/redbasic/schema/simple_white_on_black.php b/view/theme/redbasic/schema/simple_white_on_black.php index 29b176b09..f940b7c64 100644 --- a/view/theme/redbasic/schema/simple_white_on_black.php +++ b/view/theme/redbasic/schema/simple_white_on_black.php @@ -16,10 +16,6 @@ $nav_icon_colour = "#eee"; if (! $nav_active_icon_colour) $nav_active_icon_colour = "#fff"; - if (! $navmenu_bgchover) - $navmenu_bgchover = "#030303"; - if (! $navmenu_bgimage) - $navmenu_bgimage = "background-image: none;"; if (! $navtabs_borderc) $navtabs_borderc = "#fff"; if (! $navtabs_fontcolour) @@ -114,20 +110,3 @@ $dropdown_bordercol = "#000"; if (! $preview_backgroundimg) $preview_backgroundimg = "gray_and_black_diagonal_stripes_background_seamless.gif"; - if (! $notify_bgcolour) - $notify_bgcolour = "#000"; - if (! $notify_linkcolour) - $notify_linkcolour = "#fff"; - if (! $notify_bghover) - $notify_bghover = "#000"; - if (! $notify_topmargin) - $notify_topmargin = "-1px"; - if (! $notifyseen_bgcolour) - $notifyseen_bgcolour = "#000"; - if (! $notifyseen_linkcolour) - $notifyseen_linkcolour = "#000"; - if (! $notifyseen_bghover) - $notifyseen_bghover = "#000"; - if (! $notifyseen_linkhover) - $notifyseen_linkhover = "#fff"; - diff --git a/view/tpl/admin_site.tpl b/view/tpl/admin_site.tpl index 1bcdba473..225b281cc 100755 --- a/view/tpl/admin_site.tpl +++ b/view/tpl/admin_site.tpl @@ -80,6 +80,7 @@ {{include file="field_input.tpl" field=$poll_interval}} {{include file="field_input.tpl" field=$maxloadavg}} {{include file="field_input.tpl" field=$abandon_days}} + {{include file="field_input.tpl" field=$default_expire_days}} <div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div> diff --git a/view/tpl/contactsajax.tpl b/view/tpl/contactsajax.tpl index 1cce0f105..a6b5ad791 100644 --- a/view/tpl/contactsajax.tpl +++ b/view/tpl/contactsajax.tpl @@ -1,3 +1,3 @@ {{foreach $contacts as $contact}} - {{include file="connection_template.tpl"}} +{{include file="connection_template.tpl"}} {{/foreach}} diff --git a/view/tpl/event_form.tpl b/view/tpl/event_form.tpl index f8afa2e36..986a93a16 100755 --- a/view/tpl/event_form.tpl +++ b/view/tpl/event_form.tpl @@ -27,7 +27,7 @@ <div class='field checkbox'> <label class="mainlabel" for='id_nofinish'>{{$n_text}}</label> - <div><input type="checkbox" name='nofinish' id='id_nofinish' value="1" {{$n_checked}} onclick="showHideFinishDate(); return true;" > + <div class="pull-right"><input type="checkbox" name='nofinish' id='id_nofinish' value="1" {{$n_checked}} onclick="showHideFinishDate(); return true;" > <label class="switchlabel" for='id_nofinish'> <span class="onoffswitch-inner" data-on='' data-off='' ></span> <span class="onoffswitch-switch"></span> </label></div><span class='field_help'></span> </div> @@ -49,7 +49,7 @@ {{if $catsenabled}} <div id="event-category-wrap"> - <input name="category" id="event-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" class="event-cats" style="display: block;" data-role="tagsinput" /> + <input name="category" id="event-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" class="event-cats" style="display: block;" data-role="cat-tagsinput" /> </div> {{/if}} @@ -157,7 +157,7 @@ <div class='field checkbox'> <label class="mainlabel" for='id_share'>{{$sh_text}}</label> - <div><input type="checkbox" name='share' id='id_share' value="1" {{$sh_checked}} > + <div class="pull-right"><input type="checkbox" name='share' id='id_share' value="1" {{$sh_checked}} > <label class="switchlabel" for='id_share'> <span class="onoffswitch-inner" data-on='' data-off='' ></span> <span class="onoffswitch-switch"></span> </label></div><span class='field_help'></span> </div> diff --git a/view/tpl/group_side.tpl b/view/tpl/group_side.tpl index 4afe1286f..d99bd72c7 100755 --- a/view/tpl/group_side.tpl +++ b/view/tpl/group_side.tpl @@ -15,10 +15,9 @@ <a{{if $group.selected}} class="group-selected"{{/if}} href="{{$group.href}}">{{$group.text}}</a> </li> {{/foreach}} - <li> - <a href="group/new">{{$createtext}}</a> - </li> </ul> + <a href="group/new" class="btn btn-default" title="{{$createtext}}" ><i class="icon-plus"></i></a> + </div> </div> diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl index 47787676e..ed1d1e35f 100755 --- a/view/tpl/jot.tpl +++ b/view/tpl/jot.tpl @@ -10,8 +10,7 @@ <input type="hidden" name="coord" id="jot-coord" value="" /> <input type="hidden" name="post_id" value="{{$post_id}}" /> <input type="hidden" name="webpage" value="{{$webpage}}" /> - <input type="hidden" name="preview" id="jot-preview" value="0" /> - <input type="hidden" id="jot-consensus" name="consensus" value="{{if $consensus}}{{$consensus}}{{else}}0{{/if}}" /> + <input type="hidden" name="preview" id="jot-preview" value="0" /> <input type="hidden" id="jot-consensus" name="consensus" value="{{if $consensus}}{{$consensus}}{{else}}0{{/if}}" /> {{if $showacl}}{{$acl}}{{/if}} {{$mimeselect}} {{$layoutselect}} @@ -25,7 +24,7 @@ </div> {{if $catsenabled}} <div id="jot-category-wrap" class="jothidden" style="display:none"> - <input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" data-role="tagsinput"> + <input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" data-role="cat-tagsinput"> </div> {{/if}} {{if $webpage}} diff --git a/view/tpl/sharedwithme.tpl b/view/tpl/sharedwithme.tpl index 1aeb9d4d7..4502df276 100644 --- a/view/tpl/sharedwithme.tpl +++ b/view/tpl/sharedwithme.tpl @@ -14,7 +14,7 @@ {{foreach $items as $item}} <tr id="cloud-index-{{$item.id}}"> <td><i class="{{$item.objfiletypeclass}}" title="{{$item.objfiletype}}"></i></td> - <td><a href="{{$item.objurl}}">{{$item.objfilename}}</a></td> + <td><a href="{{$item.objurl}}">{{$item.objfilename}}</a>{{if $item.unseen}} <span class="label label-success">{{$label_new}}</span>{{/if}}</td> <td class="cloud-index-tool"><a href="/sharedwithme/{{$item.id}}/drop" title="{{$drop}}" onclick="return confirmDelete();"><i class="icon-trash drop-icons"></i></a></td> <td class="hidden-xs">{{$item.objfilesize}}</td> <td class="hidden-xs">{{$item.objedited}}</td> |