diff options
96 files changed, 12802 insertions, 9991 deletions
@@ -1,3 +1,89 @@ +Hubzilla 10.0.8 (2025-02-01) + - Fix duplicating terms/iconfig in addToCollectionAndSync() + - Refactor Daemon/Importdoc for better SQL performance when looking up outdated entries + - Tweak SQL in mod sse_bs for possible performance improvements + - Fix PHP warnings + - Do not run post_local hook on add activities in pubcrawl addon + - Do not run post_local hook on add activities in diaspora addon + - Remove old rawmsg/fields before storing new rawmsg in pubcrawl addon + - Fix retractions in diaspora addon + + +Hubzilla 10.0.7 (2025-01-22) + - Fix ownership check in consume_feed() + - Fix toast() if notification contains non-ascii characters + - Fix regression in notifications filter + + +Hubzilla 10.0.6 (2025-01-05) + - Fix entries where primary location data is not complete not dismissed early + - Fix query to cleanup outdated doc entries called multiple times + - Fix query to cleanup outdated doc entries + + +Hubzilla 10.0.5 (2024-12-29) + - Fix another instance of drop_item() not having permission to drop items + + +Hubzilla 10.0.4 (2024-12-26) + - Fix missing argument name + + +Hubzilla 10.0.3 (2024-12-26) + - Fix regression in Daemon/Channel_purge which could cause a possible infinite loop + - Fix regression in Daemon/Expire which could cause a infinite loop + + +Hubzilla 10.0.2 (2024-12-25) + - Hotfix comment out Daemon/Expire + - Fix zid parameter allowed to override an existing remote login + - Slightly improved imagesLoaded() + + +Hubzilla 10.0.1 (2024-12-22) + - Revert removing of openid library + - Fix SQL query in Daemon/Importdoc + + +Hubzilla 10.0 (2024-12-21) + - Port updateConvItem() and notifications widget to vanilla javascript + - Remove jquery.timeago.js in favor of a native js implementation + - Introduce item_forwardable() a function to check if an item should be frowarded + - Always set item_delayed flag if we use a custom created date + - Add indicators to items in case they are delayed, have an expiration time or commenting is disabled + - Introduce relative_time() a new function to calculate the relative time + - Refactor mod admin/accounts + - Toggle aside if a notification or message is clicked + - Add Mailer class to replace z_mail() + - Provide a possibility to link to a specific day or month in mod cal via URL fragment e.g. #2024-12-24 + - Refactor mod magic + - Introduce conversation containers a.k.a. FEP-171b + - Refactor mod item + - Refactor Thumbs\Epubthumb to adapt to new version of EPub meta lib + - Remove unused libraries + - Bring filed items to mod hq + + Bugfixes + - Fix comments on/off toggle + - Fix various missing icons after transition from fork-awesome + - Fix performance issue in mod pubstream + - Fix mails with + in local part rejected + - Fix % calculation in mod import_progress + - Fix query vars not unset when constructing the server address + - Fix can_comment_on_post() logic after introduction of repeats + - Fix xchan_query() not including deleted hublocs + - Fix allday variable not set when clicking an event or a resource is provided + + Addons + - Introduce conversation containers a.k.a. FEP-171b + - Cards: fix comments on/off state + - Articles: fix comments on/off state + - Pubcrawl: fix encoding of stored raw message + - Gallery fix zoom icon toggle + - Pubcrawl: fix follow to non primary hub location + - Pubcrawl: rewrite id host to local host instead of primary host + + Hubzilla 9.4.4 (2024-11-06) - Update Norwegian translations - Fix error adding things when multiple profiles not enabled diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..08310c116 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,31 @@ +# Hubzilla Security Policy + +The [Hubzilla] Project takes security, privacy and user control over personal data seriously. We ask that any security issues be disclosed to us in a responsible manner to allow us time to remediate the issues, and site administrators time to upgrade before information about the issue is made public. + +This document outlines security procedures and policies for the Hubzilla project. It covers the following components: + +* The Hubzilla core repository: https://framagit.org/hubzilla/core +* The official addon repository: https://framagit.org/hubzilla/addons +* The official themes repository: https://framagit.org/hubzilla/themes +* The official widgets repository: https://framagit.org/hubzilla/widgets + +## Coordinated Disclosure Guidelines + +We are committed to working with security researchers to verify, reproduce, and respond to legitimate reported vulnerabilities. You can help us by following these simple guidelines: + +* Submit suspected vulnerabilities by email to `security@hubzilla.org`, or as a confidential issue in the relevant repository listed above. +* Provide clear instructions on how to reproduce the issue, and if possible, a minimal Proof of Concept (PoC) exploit. +* We will acknowledge your submission as soon as we can, and will keep you updated as it is being processed. We may ask for more information, or clarifications about the issue or the steps to reproduce it during this time. +* We will assign a CVE to the issue once it is confirmed. +* We will do our best to fix the issue as soon as we can after it has been confirmed. We request that information about the vulnerability or details about how to exploit it is not disclosed to other parties until after the fix is released and some time has passed, to allow site administrators to upgrade. We will normally make the CVE public one month after a fix has been released. (This grace period can differ based on severity, and can be negotiated.) +* Please perform all tests against a local instance of the software, and refrain from running any Denial of Service or automated testing tools against public hubs or the project managers (and their partners') infrastructure. +* If the issue belongs to a third party module that we depend on, we may help with reporting it upstream if the submitter wants us to. + +## Comments on this Policy + +We welcome comments and suggestions for improving this policy. You can reach us at: + +* Our ticketing system: https://framagit.org/hubzilla/core/-/issues +* By sending us an email at `security@hubzilla.org`. + +[Hubzilla]: https://hubzilla.org diff --git a/Zotlabs/Daemon/Channel_purge.php b/Zotlabs/Daemon/Channel_purge.php index d25edf8ba..7286a791a 100644 --- a/Zotlabs/Daemon/Channel_purge.php +++ b/Zotlabs/Daemon/Channel_purge.php @@ -24,7 +24,7 @@ class Channel_purge { ); if ($r) { foreach ($r as $rv) { - drop_item($rv['id']); + drop_item($rv['id'], uid: $channel_id); } } } while ($r); diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index 186f3efcf..a38809f45 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -69,19 +69,18 @@ class Cron { // expire any expired items - $r = q("select id,item_wall from item where expires > '2001-01-01 00:00:00' and expires < %s + $r = q("select id, uid, item_wall from item where expires > '2001-01-01 00:00:00' and expires < %s and item_deleted = 0 ", db_utcnow() ); + if ($r) { - require_once('include/items.php'); foreach ($r as $rr) { + // pass uid of the message for permission check as we are running as a daemon process with no session. drop_item($rr['id'], (($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL), uid: intval($rr['uid'])); - if ($rr['item_wall']) { // The notifier isn't normally invoked unless item_drop is interactive. Master::Summon(['Notifier', 'drop', $rr['id']]); - if ($interval) { usleep($interval); } @@ -148,37 +147,29 @@ class Cron { // (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_delayed = 1 and created <= %s and created > '%s' ", + $r = q("select * from item where item_delayed = 1 and created <= %s and created > '%s' ", db_utcnow(), dbesc(datetime_convert('UTC', 'UTC', 'now - 2 days')) ); - if ($r) { - foreach ($r as $rr) { - $x = q("update item set item_delayed = 0 where id = %d", - intval($rr['id']) - ); - if ($x) { - $z = q("select * from item where id = %d", - intval($rr['id']) - ); - if ($z) { - xchan_query($z); - $sync_item = fetch_post_tags($z); - Libsync::build_sync_packet($sync_item[0]['uid'], - [ - 'item' => [encode_item($sync_item[0], true)] - ] - ); - } - Master::Summon(array('Notifier', 'wall-new', $rr['id'])); - if ($interval) { - usleep($interval); + if ($r) { + xchan_query($r); + $items = fetch_post_tags($r); + foreach ($items as $item) { + $item['item_delayed'] = 0; + $post = item_store_update($item); + + if($post['success']) { + Master::Summon(['Notifier', 'wall-new', $post['item_id']]); + if (!empty($post['approval_id'])) { + Master::Summon(['Notifier', 'wall-new', $post['approval_id']]); } } - } - } - + if ($interval) { + usleep($interval); + } + } + } // once daily run birthday_updates and then expire in background // FIXME: add birthday updates, both locally and for xprof for use diff --git a/Zotlabs/Daemon/Expire.php b/Zotlabs/Daemon/Expire.php index 3ac3dee3a..dae585578 100644 --- a/Zotlabs/Daemon/Expire.php +++ b/Zotlabs/Daemon/Expire.php @@ -23,13 +23,13 @@ class Expire { // perform final cleanup on previously delete items - $r = q("select id from item where item_deleted = 1 and item_pending_remove = 0 and changed < %s - INTERVAL %s", + $r = q("select id, uid from item where item_deleted = 1 and item_pending_remove = 0 and changed < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('10 DAY') ); if ($r) { foreach ($r as $rr) { - drop_item($rr['id'], DROPITEM_PHASE2); + drop_item($rr['id'], DROPITEM_PHASE2, uid: $rr['uid']); } } diff --git a/Zotlabs/Daemon/Importdoc.php b/Zotlabs/Daemon/Importdoc.php index 8f04e05f8..de571848e 100644 --- a/Zotlabs/Daemon/Importdoc.php +++ b/Zotlabs/Daemon/Importdoc.php @@ -11,6 +11,21 @@ class Importdoc { self::update_docs_dir('doc/*'); + $sys = get_sys_channel(); + + // remove old files that weren't updated (indicates they were most likely deleted). + $i = q("select id from item where uid = %d and item_type = 5 and edited < %s - INTERVAL %s", + intval($sys['channel_id']), + db_utcnow(), + db_quoteinterval('14 DAY') + ); + + if ($i) { + foreach ($i as $iv) { + drop_item($iv['id'], uid: $sys['channel_id']); + } + } + return; } @@ -41,18 +56,6 @@ class Importdoc { } } } - - // remove old files that weren't updated (indicates they were most likely deleted). - $i = q("select * from item where item_type = 5 and edited < %s - %s", - db_utcnow(), - db_quoteinterval('14 DAY', true) - ); - - if ($i) { - foreach ($i as $iv) { - drop_item($iv['id'], DROPITEM_NORMAL, true); - } - } } } diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 1693f9c9f..043b406cc 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -241,11 +241,6 @@ class Notifier { $target_item = $r[0]; - if (in_array($target_item['author']['xchan_network'], ['rss', 'anon', 'token'])) { - logger('notifier: target item author is not a fetchable actor', LOGGER_DEBUG); - return; - } - if (intval($target_item['item_deleted'])) { logger('notifier: target item ITEM_DELETED', LOGGER_DEBUG); } @@ -268,22 +263,9 @@ class Notifier { } - // Check for non published items, but allow an exclusion for transmitting hidden file activities - - if (intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) || - intval($target_item['item_blocked']) || intval($target_item['item_hidden'])) { - logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG); - return; - } - - // follow/unfollow is for internal use only - if (in_array($target_item['verb'], ['Follow', 'Ignore', ACTIVITY_FOLLOW, ACTIVITY_UNFOLLOW])) { - logger('not fowarding follow/unfollow note activity'); - return; - } - - if (strpos($target_item['postopts'], 'nodeliver') !== false) { - logger('notifier: target item is undeliverable', LOGGER_DEBUG); + if (!item_forwardable($target_item)) { + //hz_syslog(print_r($target_item,true)); + logger('notifier: target item not forwardable', LOGGER_DEBUG); return; } @@ -388,7 +370,7 @@ class Notifier { logger('normal (downstream) distribution', LOGGER_DEBUG); } - if ($parent_item && $parent_item['item_private'] !== $target_item['item_private']) { + if (($parent_item && $parent_item['item_private'] !== $target_item['item_private']) || (intval($target_item['item_restrict']) & 1)) { logger('conversation privacy mismatch - downstream delivery prevented'); return; } diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 54a1b8d2a..10df11174 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -2081,6 +2081,9 @@ class Activity { $i = fetch_post_tags($i); $i[0]['obj'] = $o; + $edited = datetime_convert(); + $i[0]['edited'] = $edited; + // create the new object $newObj = self::build_packet(self::encode_activity($i[0]), $channel, true); @@ -2098,7 +2101,7 @@ class Activity { dbesc(json_encode($o)), intval($relatedItem['id']), dbesc($newObj), - dbesc(datetime_convert()) + dbesc($edited) ); dbq("COMMIT"); @@ -2306,6 +2309,8 @@ class Activity { if ($s['mid'] === $s['parent_mid']) { $s['item_thread_top'] = 1; + $s['item_nocomment'] = 0; + $s['comments_closed'] = NULL_DATE; // it is a parent node - decode the comment policy info if present if ($act->objprop('commentPolicy')) { @@ -2313,7 +2318,7 @@ class Activity { if ($until !== false) { $s['comments_closed'] = datetime_convert('UTC', 'UTC', substr($act->obj['commentPolicy'], $until + 6)); if ($s['comments_closed'] < datetime_convert()) { - $s['nocomment'] = true; + $s['item_nocomment'] = 1; } } @@ -2680,6 +2685,7 @@ class Activity { } } + if (!$ap_rawmsg && array_key_exists('signed', $raw_arr)) { // zap $ap_rawmsg = json_encode($act->data, JSON_UNESCAPED_SLASHES); @@ -2713,8 +2719,7 @@ class Activity { return $hookinfo['s']; } - - static function store($channel, $observer_hash, $act, $item, $fetch_parents = true, $force = false) { + static function store($channel, $observer_hash, $act, $item, $fetch_parents = true, $force = false, $is_collection_operation = false) { $is_sys_channel = is_sys_channel($channel['channel_id']); $is_child_node = false; $parent = null; @@ -2745,6 +2750,8 @@ class Activity { } $allowed = false; + $relay = false; + $permit_mentions = intval(PConfig::Get($channel['channel_id'], 'system','permit_all_mentions') && i_am_mentioned($channel, $item)); if ($is_child_node) { @@ -2771,13 +2778,22 @@ class Activity { return; } + $relay = $channel['channel_hash'] === $parent[0]['owner_xchan']; + + if (str_contains($parent[0]['tgt_type'], 'Collection') && !$relay && !$isCollectionOperation) { + logger('not a collection activity'); + return; + } + if ($parent[0]['obj_type'] === 'Question') { if (in_array($item['obj_type'], ['Note', ACTIVITY_OBJ_COMMENT]) && $item['title'] && (!$item['body'])) { $item['obj_type'] = 'Answer'; + $item['item_hidden'] = 1; } } if ($parent[0]['item_wall']) { + // set the owner to the owner of the parent $item['owner_xchan'] = $parent[0]['owner_xchan']; @@ -3032,17 +3048,48 @@ class Activity { dbesc($item['mid']), intval($item['uid']) ); + if ($r) { if ($item['edited'] > $r[0]['edited']) { $item['id'] = $r[0]['id']; - $x = item_store_update($item); + $x = item_store_update($item, deliver: false); } else { return; } } else { - $x = item_store($item); + $x = item_store($item, deliver: false, addAndSync: false); + } + + if ($x['success']) { + + if ($relay && $channel['channel_hash'] === $x['item']['owner_xchan'] && $x['item']['verb'] !== 'Add' && !$isCollectionOperation) { + $approval = Activity::addToCollection($channel, $act->data, $x['item']['parent_mid'], $x['item'], deliver: false); + } + + if (check_item_source($channel['channel_id'], $x['item']) && in_array($x['item']['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) { + event_addtocal($x['item_id'], $channel['channel_id']); + } + + tag_deliver($channel['channel_id'], $x['item_id']); + + if ($relay && $is_child_node) { + // We are the owner of this conversation, so send all received comments back downstream + Master::Summon(['Notifier', 'comment-import', $x['item_id']]); + if (!empty($approval['item_id'])) { + Master::Summon(['Notifier', 'comment-import', $approval['item_id']]); + } + } + + $r = q("select * from item where id = %d limit 1", + intval($x['item_id']) + ); + + if ($r) { + send_status_notifications($x['item_id'], $r[0]); + } + sync_an_item($channel['channel_id'], $x['item_id']); } if ($fetch_parents && $parent && !intval($parent[0]['item_private'])) { @@ -3069,28 +3116,6 @@ class Activity { } } } - - if ($x['success']) { - - if (check_item_source($channel['channel_id'], $x['item']) && in_array($x['item']['obj_type'], ['Event', ACTIVITY_OBJ_EVENT])) { - event_addtocal($x['item_id'], $channel['channel_id']); - } - - if ($is_child_node) { - if ($item['owner_xchan'] === $channel['channel_hash']) { - // We are the owner of this conversation, so send all received comments back downstream - Master::Summon(['Notifier', 'comment-import', $x['item_id']]); - } - $r = q("select * from item where id = %d limit 1", - intval($x['item_id']) - ); - if ($r) { - send_status_notifications($x['item_id'], $r[0]); - } - } - sync_an_item($channel['channel_id'], $x['item_id']); - } - } /** @@ -3785,8 +3810,6 @@ class Activity { ->setObjType($object['type']) ->setParentMid(str_replace('/conversation/','/item/', $target)) ->setThrParent(str_replace('/conversation/','/item/', $target)) - // ->setApproved($object['object']['id'] ?? '') - // ->setReplyto(z_root() . '/channel/' . $channel['channel_address']) ->setTgtType('Collection') ->setTarget([ 'id' => str_replace('/item/','/conversation/', $target), @@ -3801,13 +3824,19 @@ class Activity { ->setDenyCid($sourceItem['deny_cid']) ->setDenyGid($sourceItem['deny_gid']) ->setPrivate($sourceItem['item_private']) - ->setNocomment($sourceItem['item_nocomment']) + ->setRestrict($sourceItem['item_restrict']) + ->setHidden($sourceItem['item_hidden']) + ->setDelayed($sourceItem['item_delayed']) + ->setUnpublished($sourceItem['item_unpublished']) + ->setBlocked($sourceItem['item_blocked']) + ->setType($sourceItem['item_type']) ->setCommentPolicy($sourceItem['comment_policy']) ->setPublicPolicy($sourceItem['public_policy']) ->setPostopts($sourceItem['postopts']); } $result = post_activity_item($item->toArray(), deliver: $deliver, channel: $channel, observer: $channel, addAndSync: false); logger('addToCollection: ' . print_r($result, true)); + return $result; } diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index 3d499bd08..60fb5e034 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -655,6 +655,11 @@ class Libzot { return $ret; } + if (empty($arr['primary_location']['address'])) { + logger('Empty primary location address: ' . print_r($arr, true), LOGGER_DEBUG); + return $ret; + } + /** * @hooks import_xchan * Called when processing the result of zot_finger() to store the result @@ -1148,7 +1153,7 @@ class Libzot { $AS = new ActivityStreams($data); // process add/remove from collection separately, as it requires a target. - // use the raw object, as it will not include actor expansion + // use the data object, as it will not include actor expansion if (in_array($AS->type, ['Add', 'Remove']) && is_array($AS->obj) && array_key_exists('object', $AS->obj) @@ -1227,7 +1232,6 @@ class Libzot { 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 // @fixme; @@ -1294,25 +1298,6 @@ class Libzot { $item['item_private'] = 1; } - if ($item['mid'] === $item['parent_mid']) { - if (is_array($AS->obj) && array_key_exists('commentPolicy', $AS->obj)) { - $p = strstr($AS->obj['commentPolicy'], 'until='); - if ($p !== false) { - $comments_closed_at = datetime_convert('UTC', 'UTC', substr($p, 6)); - if ($comments_closed_at === $item['created']) { - $item['item_nocomment'] = 1; - } - else { - $item['comments_closed'] = $comments_closed_at; - $aritemr['comment_policy'] = trim(str_replace($p, '', $AS->obj['commentPolicy'])); - } - } - else { - $item['comment_policy'] = $AS->obj['commentPolicy']; - } - } - } - if (!empty($AS->meta['hubloc']) || $AS->sigok) { $item['item_verified'] = true; } @@ -1576,7 +1561,7 @@ class Libzot { $conversation_operation = $is_collection_operation && isset($arr['target']['attributedTo']); - if (str_contains($arr['tgt_type'], 'Collection') && !$relay && !$conversation_operation) { + if (isset($arr['tgt_type']) && str_contains($arr['tgt_type'], 'Collection') && !$relay && !$conversation_operation) { $DR->update('not a collection activity'); $result[] = $DR->get(); continue; @@ -1663,22 +1648,24 @@ class Libzot { if (intval($channel['channel_system']) && (!$arr['item_private']) && (!$relay)) { $local_public = true; - $r = q("select xchan_selfcensored from xchan where xchan_hash = '%s' limit 1", - dbesc($sender) - ); - // don't import sys channel posts from selfcensored authors - if ($r && (intval($r[0]['xchan_selfcensored']))) { + $incl = Config::Get('system','pubstream_incl'); + $excl = Config::Get('system','pubstream_excl'); + + if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) { $local_public = false; continue; } - $incl = Config::Get('system','pubstream_incl'); - $excl = Config::Get('system','pubstream_excl'); + $r = q("select xchan_selfcensored, xchan_censored from xchan where xchan_hash = '%s'", + dbesc($sender) + ); - if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) { + // don't import sys channel posts from selfcensored or censored authors + if ($r && ($r[0]['xchan_selfcensored'] || $r[0]['xchan_censored'])) { $local_public = false; continue; } + } $tag_delivery = tgroup_check($channel['channel_id'], $arr); @@ -1740,6 +1727,7 @@ class Libzot { // If this is a poll response, convert the obj_type to our (internal-only) "Answer" type if (in_array($arr['obj_type'], ['Note', ACTIVITY_OBJ_COMMENT]) && $arr['title'] && (!$arr['body'])) { $arr['obj_type'] = 'Answer'; + $arr['item_hidden'] = 1; } } @@ -2008,10 +1996,10 @@ class Libzot { if ((is_array($stored)) && ($stored['id'] != $stored['parent']) && ($stored['author_xchan'] === $channel['channel_hash'])) { - retain_item($stored['item']['parent']); + retain_item($stored['parent']); } - if ($relay && $item_id && $stored['item_blocked'] !== ITEM_MODERATED) { + if ($relay && $item_id && item_forwardable($stored)) { logger('Invoking relay'); Master::Summon(['Notifier', 'relay', intval($item_id)]); if (!empty($approval) && $approval['item_id']) { diff --git a/Zotlabs/Lib/Mailer.php b/Zotlabs/Lib/Mailer.php new file mode 100644 index 000000000..ca2d84d0d --- /dev/null +++ b/Zotlabs/Lib/Mailer.php @@ -0,0 +1,86 @@ +<?php +/** + * Mailer class for sending emails from Hubzilla. + * + * SPDX-FileCopyrightText: 2024 Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Lib; + +use App; + +/** + * A class for sending emails. + * + * Based on the previous `z_mail` function, but adaped and made more + * robust and usable as a class. + */ +class Mailer { + + public function __construct(private array $params = []) { + } + + public function deliver(): bool { + + if(empty($this->params['fromEmail'])) { + $this->params['fromEmail'] = Config::Get('system','from_email'); + if(empty($this->params['fromEmail'])) { + $this->params['fromEmail'] = 'Administrator@' . App::get_hostname(); + } + } + + if(empty($this->params['fromName'])) { + $this->params['fromName'] = Config::Get('system','from_email_name'); + if(empty($this->params['fromName'])) { + $this->params['fromName'] = System::get_site_name(); + } + } + + if(empty($this->params['replyTo'])) { + $this->params['replyTo'] = Config::Get('system','reply_address'); + if(empty($this->params['replyTo'])) { + $this->params['replyTo'] = 'noreply@' . App::get_hostname(); + } + } + + if (!isset($this->params['additionalMailHeader'])) { + $this->params['additionalMailHeader'] = ''; + } + + $this->params['sent'] = false; + $this->params['result'] = false; + + /** + * @hooks email_send + * * \e params @see z_mail() + */ + call_hooks('email_send', $this->params); + + if($this->params['sent']) { + logger('notification: z_mail returns ' . (($this->params['result']) ? 'success' : 'failure'), LOGGER_DEBUG); + return $this->params['result']; + } + + $fromName = email_header_encode(html_entity_decode($this->params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8'); + $messageSubject = email_header_encode(html_entity_decode($this->params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8'); + + $messageHeader = + $this->params['additionalMailHeader'] . + "From: $fromName <{$this->params['fromEmail']}>" . PHP_EOL . + "Reply-To: $fromName <{$this->params['replyTo']}>" . PHP_EOL . + "Content-Type: text/plain; charset=UTF-8"; + + // send the message + $res = mail( + $this->params['toEmail'], // send to address + $messageSubject, // subject + $this->params['textVersion'], + $messageHeader // message headers + ); + logger('notification: z_mail returns ' . (($res) ? 'success' : 'failure'), LOGGER_DEBUG); + return $res; + } +} diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php index 90a3d3fc8..4b833f4b4 100644 --- a/Zotlabs/Lib/ThreadItem.php +++ b/Zotlabs/Lib/ThreadItem.php @@ -233,45 +233,6 @@ class ThreadItem { $my_responses[$v] = ((isset($conv_responses[$v][$item['mid'] . '-m'])) ? 1 : 0); } -/* - - $like_count = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid']] : ''); - $like_list = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid'] . '-l'] : ''); - if (($like_list) && (count($like_list) > MAX_LIKERS)) { - $like_list_part = array_slice($like_list, 0, MAX_LIKERS); - array_push($like_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>'); - } else { - $like_list_part = ''; - } - $like_button_label = tt('Like','Likes',$like_count,'noun'); - - $repeat_count = ((x($conv_responses['announce'],$item['mid'])) ? $conv_responses['announce'][$item['mid']] : ''); - $repeat_list = ((x($conv_responses['announce'],$item['mid'])) ? $conv_responses['announce'][$item['mid'] . '-l'] : ''); - if (($repeat_list) && (count($repeat_list) > MAX_LIKERS)) { - $repeat_list_part = array_slice($repeat_list, 0, MAX_LIKERS); - array_push($repeat_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#repeatModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>'); - } else { - $repeat_list_part = ''; - } - $repeat_button_label = tt('Repeat','Repeats',$repeat_count,'noun'); - - $showdislike = ''; - if (feature_enabled($conv->get_profile_owner(),'dislike')) { - $dislike_count = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid']] : ''); - $dislike_list = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid'] . '-l'] : ''); - $dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun'); - if (($dislike_list) && (count($dislike_list) > MAX_LIKERS)) { - $dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS); - array_push($dislike_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>'); - } else { - $dislike_list_part = ''; - } - - $showdislike = ((x($conv_responses['dislike'],$item['mid'])) ? format_like($conv_responses['dislike'][$item['mid']],$conv_responses['dislike'][$item['mid'] . '-l'],'dislike',$item['mid']) : ''); - } - - $showlike = ((x($conv_responses['like'],$item['mid'])) ? format_like($conv_responses['like'][$item['mid']],$conv_responses['like'][$item['mid'] . '-l'],'like',$item['mid']) : ''); -*/ /* * We should avoid doing this all the time, but it depends on the conversation mode @@ -415,7 +376,6 @@ class ThreadItem { 'template' => $this->get_template(), 'mode' => $mode, 'item_type' => intval($item['item_type']), - //'type' => implode("",array_slice(explode("/",$item['verb']),-1)), 'body' => $body['html'], 'tags' => $body['tags'], 'categories' => $body['categories'], @@ -450,16 +410,15 @@ class ThreadItem { 'sparkle' => $sparkle, 'title' => $item['title'], 'title_tosource' => get_pconfig($conv->get_profile_owner(),'system','title_tosource'), - //'ago' => relative_date($item['created']), 'app' => $item['app'], 'str_app' => sprintf( t('from %s'), $item['app']), 'isotime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'), - 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'), - 'editedtime' => (($item['edited'] != $item['created']) ? sprintf( t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r')) : ''), - 'expiretime' => (($item['expires'] > NULL_DATE) ? sprintf( t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r')):''), + 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created']), + 'editedtime' => (($item['edited'] != $item['created']) ? sprintf(t('Last edited %s'), relative_time($item['edited'])) : ''), + 'expiretime' => (($item['expires'] > NULL_DATE) ? sprintf(t('Expires %s'), relative_time($item['expires'])) : ''), 'lock' => $lock, 'locktype' => $locktype, - 'delayed' => $item['item_delayed'], + 'delayed' => (($item['item_delayed']) ? sprintf(t('Published %s'), relative_time($item['created'])) : ''), 'privacy_warning' => $privacy_warning, 'verified' => $verified, 'unverified' => $unverified, @@ -479,7 +438,7 @@ class ThreadItem { 'event' => $body['event'], 'has_tags' => $has_tags, 'reactions' => $this->reactions, -// Item toolbar buttons + // Item toolbar buttons 'emojis' => (($this->is_toplevel() && $this->is_commentable() && $observer && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''), 'like' => $like, 'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''), @@ -489,7 +448,7 @@ class ThreadItem { 'embed' => $embed, 'rawmid' => $item['mid'], 'plink' => get_plink($item), - 'edpost' => $edpost, // ((feature_enabled($conv->get_profile_owner(),'edit_posts')) ? $edpost : ''), + 'edpost' => $edpost, 'star' => ((feature_enabled($conv->get_profile_owner(),'star_posts') && ($item['item_type'] == ITEM_TYPE_POST)) ? $star : ''), 'tagger' => ((feature_enabled($conv->get_profile_owner(),'commtag')) ? $tagger : ''), 'filer' => ((feature_enabled($conv->get_profile_owner(),'filing') && ($item['item_type'] == ITEM_TYPE_POST)) ? $filer : ''), @@ -500,7 +459,7 @@ class ThreadItem { 'addtocal' => (($has_event) ? t('Add to Calendar') : ''), 'drop' => $drop, 'dropdown_extras' => $dropdown_extras, -// end toolbar buttons + // end toolbar buttons 'unseen_comments' => $unseen_comments, 'comment_count' => $total_children, 'comment_count_txt' => $comment_count_txt, @@ -508,30 +467,9 @@ class ThreadItem { 'markseen' => t('Mark all comments seen'), 'responses' => $responses, 'my_responses' => $my_responses, - /* - 'like_count' => $like_count, - 'like_list' => $like_list, - 'like_list_part' => $like_list_part, - 'like_button_label' => $like_button_label, - 'like_modal_title' => t('Likes','noun'), - - 'repeat_count' => $repeat_count, - 'repeat_list' => $repeat_list, - 'repeat_list_part' => $repeat_list_part, - 'repeat_button_label' => $repeat_button_label, - 'repeat_modal_title' => t('Repeats','noun'), - - - 'dislike_modal_title' => t('Dislikes','noun'), - 'dislike_count' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_count : ''), - 'dislike_list' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list : ''), - 'dislike_list_part' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list_part : ''), - 'dislike_button_label' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_button_label : ''), -*/ 'modal_dismiss' => t('Close'), - // 'showlike' => $showlike, - // 'showdislike' => $showdislike, 'comment' => ($item['item_delayed'] ? '' : $this->get_comment_box()), + 'no_comment' => (($item['item_thread_top'] && $item['item_nocomment'])? t('Comments disabled') : ''), 'previewing' => ($conv->is_preview() ? true : false ), 'preview_lbl' => t('This is an unsaved preview'), 'wait' => t('Please wait'), @@ -556,15 +494,7 @@ class ThreadItem { $result['children'] = array(); $nb_children = count($children); - $visible_comments = Config::Get('system','expanded_comments'); - if($visible_comments === false) - $visible_comments = 3; - -// needed for scroll to comment from notification but needs more work -// as we do not want to open all comments unless there is actually an #item_xx anchor -// and the url fragment is not sent to the server. -// if(in_array(\App::$module,['display','update_display'])) -// $visible_comments = 99999; + $visible_comments = Config::Get('system', 'expanded_comments', 3); if(($this->get_display_mode() === 'normal') && ($nb_children > 0)) { foreach($children as $child) { @@ -876,7 +806,7 @@ class ThreadItem { '$edatt' => t('Attach/Upload file'), '$edurl' => t('Insert Link'), '$edvideo' => t('Video'), - '$preview' => t('Preview'), // ((feature_enabled($conv->get_profile_owner(),'preview')) ? t('Preview') : ''), + '$preview' => t('Preview'), '$can_upload' => (perm_is_allowed($conv->get_profile_owner(),get_observer_hash(),'write_storage') && $conv->is_uploadable()), '$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false), '$encrypt' => t('Encrypt text'), @@ -897,7 +827,7 @@ class ThreadItem { } /** - * Check if we are a wall to wall item and set the relevant properties + * Check if we are a wall to wall or announce item and set the relevant properties */ protected function check_wall_to_wall() { $conv = $this->get_conversation(); diff --git a/Zotlabs/Module/Admin/Accounts.php b/Zotlabs/Module/Admin/Accounts.php index 6f7cb0311..108231d7d 100644 --- a/Zotlabs/Module/Admin/Accounts.php +++ b/Zotlabs/Module/Admin/Accounts.php @@ -6,133 +6,33 @@ use Zotlabs\Lib\Config; class Accounts { - /** - * @brief Handle POST actions on accounts admin page. - * - * This function is called when on the admin user/account page the form was - * submitted to handle multiple operations at once. If one of the icons next - * to an entry are pressed the function admin_page_accounts() will handle this. - * - */ const MYP = 'ZAR'; // ZAR2x const VERSION = '2.0.0'; - function post() { + /** + * Handle POST actions on accounts admin page. + */ + public function post() { - $pending = ( x($_POST, 'pending') ? $_POST['pending'] : array() ); - $users = ( x($_POST, 'user') ? $_POST['user'] : array() ); - $blocked = ( x($_POST, 'blocked') ? $_POST['blocked'] : array() ); + $pending = x($_POST, 'pending') ? $_POST['pending'] : array(); check_form_security_token_redirectOnErr('/admin/accounts', 'admin_accounts'); - $isajax = is_ajax(); - $rc = 0; - - If (!is_site_admin()) { - if ($isajax) { - killme(); - exit; - } - goaway(z_root() . '/'); - } - - if ($isajax) { - //$debug = print_r($_SESSION[self::MYP],true); - $zarop = (x($_POST['zardo']) && preg_match('/^[ad]{1,1}$/', $_POST['zardo']) ) - ? $_POST['zardo'] : ''; - // zarat arrives with leading underscore _n - $zarat = (x($_POST['zarat']) && preg_match('/^_{1,1}[0-9]{1,6}$/', $_POST['zarat']) ) - ? substr($_POST['zarat'],1) : ''; - $zarse = (x($_POST['zarse']) && preg_match('/^[0-9a-f]{8,8}$/', $_POST['zarse']) ) - ? hex2bin($_POST['zarse']) : ''; - - if ($zarop && $zarat >= 0 && $zarse && $zarse == $_SESSION[self::MYP]['h'][$zarat]) { - - // - if ($zarop == 'd') { - $rd = q("UPDATE register SET reg_vital = 0 WHERE reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ", - intval($_SESSION[self::MYP]['i'][$zarat]), - dbesc($_SESSION[self::MYP]['h'][$zarat]) - ); - $rc = '×'; - } - elseif ($zarop == 'a') { - // approval, REGISTER_DENIED by user 0x0040, REGISTER_AGREED by user 0x0020 @Regate - $rd = q("UPDATE register SET reg_flags = (reg_flags & ~ 16), " - . " reg_vital = (CASE (reg_flags & ~ 48) WHEN 0 THEN 0 ELSE 1 END) " - . " WHERE reg_vital = 1 AND reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ", - intval($_SESSION[self::MYP]['i'][$zarat]), - dbesc($_SESSION[self::MYP]['h'][$zarat]) - ); - $rc = 0; - $rs = q("SELECT * from register WHERE reg_id = %d ", - intval($_SESSION[self::MYP]['i'][$zarat]) - ); - if ($rs && ($rs[0]['reg_flags'] & ~ 48) == 0) { - // create account - $rc = 'ok'.$rs[0]['reg_id']; - $ac = create_account_from_register($rs[0]); - if ( $ac['success'] ) { - $rc .= '✔'; - - $auto_create = Config::Get('system','auto_channel_create',1); - - if($auto_create) { - $reonar = json_decode($rs[0]['reg_stuff'], true); - // prepare channel creation - if($reonar['chan.name']) - set_aconfig($ac['account']['account_id'], 'register', 'channel_name', $reonar['chan.name']); - - if($reonar['chan.did1']) - set_aconfig($ac['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']); - - $permissions_role = Config::Get('system','default_permissions_role'); - if($permissions_role) - set_aconfig($ac['account']['account_id'], 'register', 'permissions_role', $permissions_role); - - // create channel - $new_channel = auto_channel_create($ac['account']['account_id']); - - if($new_channel['success']) { - $rc .= ' c,ok' . $new_channel['channel']['channel_id'] . '✔'; - } - else { - $rc .= ' c ×'; - } - } - - - } - } else { - $rc='oh ×'; - } - } - echo json_encode(array('re' => $zarop, 'at' => '_' . $zarat, 'rc' => $rc)); - } + if (is_ajax()) { + $this->handle_ajax_request(); killme(); - exit; } // change to switch structure? // account block/unblock button was submitted if (x($_POST, 'page_accounts_block')) { - for ($i = 0; $i < count($users); $i++) { - // if account is blocked remove blocked bit-flag, otherwise add blocked bit-flag - $op = ($blocked[$i]) ? '& ~' : '| '; - q("UPDATE account SET account_flags = (account_flags $op%d) WHERE account_id = %d", - intval(ACCOUNT_BLOCKED), - intval($users[$i]) - ); - } - notice( sprintf( tt("%s account blocked/unblocked", "%s account blocked/unblocked", count($users)), count($users)) ); + $this->block_unblock_accounts(); } + // account delete button was submitted if (x($_POST, 'page_accounts_delete')) { - foreach ($users as $uid){ - account_remove($uid, true, false); - } - notice( sprintf( tt("%s account deleted", "%s accounts deleted", count($users)), count($users)) ); + $this->delete_accounts(); } // registration approved button was submitted if (x($_POST, 'page_accounts_approve')) { @@ -351,5 +251,143 @@ class Accounts { return $o; } + private function handle_ajax_request(): void { + //$debug = print_r($_SESSION[self::MYP],true); + $zarop = (x($_POST['zardo']) && preg_match('/^[ad]{1,1}$/', $_POST['zardo']) ) + ? $_POST['zardo'] : ''; + // zarat arrives with leading underscore _n + $zarat = (x($_POST['zarat']) && preg_match('/^_{1,1}[0-9]{1,6}$/', $_POST['zarat']) ) + ? substr($_POST['zarat'],1) : ''; + $zarse = (x($_POST['zarse']) && preg_match('/^[0-9a-f]{8,8}$/', $_POST['zarse']) ) + ? hex2bin($_POST['zarse']) : ''; + + if ($zarop && $zarat >= 0 && $zarse && $zarse == $_SESSION[self::MYP]['h'][$zarat]) { + + // + if ($zarop == 'd') { + $rd = q("UPDATE register SET reg_vital = 0 WHERE reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ", + intval($_SESSION[self::MYP]['i'][$zarat]), + dbesc($_SESSION[self::MYP]['h'][$zarat]) + ); + $rc = '×'; + } + elseif ($zarop == 'a') { + // approval, REGISTER_DENIED by user 0x0040, REGISTER_AGREED by user 0x0020 @Regate + $rd = q("UPDATE register SET reg_flags = (reg_flags & ~ 16), " + . " reg_vital = (CASE (reg_flags & ~ 48) WHEN 0 THEN 0 ELSE 1 END) " + . " WHERE reg_vital = 1 AND reg_id = %d AND SUBSTR(reg_hash,1,4) = '%s' ", + intval($_SESSION[self::MYP]['i'][$zarat]), + dbesc($_SESSION[self::MYP]['h'][$zarat]) + ); + $rc = 0; + $rs = q("SELECT * from register WHERE reg_id = %d ", + intval($_SESSION[self::MYP]['i'][$zarat]) + ); + if ($rs && ($rs[0]['reg_flags'] & ~ 48) == 0) { + // create account + $rc = 'ok'.$rs[0]['reg_id']; + $ac = create_account_from_register($rs[0]); + if ( $ac['success'] ) { + $rc .= '✔'; + + $auto_create = Config::Get('system','auto_channel_create',1); + + if($auto_create) { + $reonar = json_decode($rs[0]['reg_stuff'], true); + // prepare channel creation + if($reonar['chan.name']) + set_aconfig($ac['account']['account_id'], 'register', 'channel_name', $reonar['chan.name']); + + if($reonar['chan.did1']) + set_aconfig($ac['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']); + + $permissions_role = Config::Get('system','default_permissions_role'); + if($permissions_role) + set_aconfig($ac['account']['account_id'], 'register', 'permissions_role', $permissions_role); + + // create channel + $new_channel = auto_channel_create($ac['account']['account_id']); + + if($new_channel['success']) { + $rc .= ' c,ok' . $new_channel['channel']['channel_id'] . '✔'; + } + else { + $rc .= ' c ×'; + } + } + + + } + } else { + $rc='oh ×'; + } + } + echo json_encode(array('re' => $zarop, 'at' => '_' . $zarat, 'rc' => $rc)); + } + } + + /** + * Block or unblock accounts given by the `user` and `blocked` POST params. + * + * The post params `user` and `blocked` must be present and arrays of equal + * lengths. The `user` array should contain account id's or the accounts to + * process, and the `blocked` array holds a corresponding boolean value to + * indicate that the account at the same offset in the `user` array is or is + * not blocked. + * + * An account that is _not_ blocked will be blocked, and accounts that _are_ + * blocked will be unblocked. + * + * @SuppressWarnings(PHPMD.ShortVariable) + */ + private function block_unblock_accounts(): void { + if (!isset($_POST['user']) || !isset($_POST['blocked'])) { + return; + } + + $users = $_POST['user']; + $blocked = $_POST['blocked']; + + if (!is_array($users) || !is_array($blocked)) { + return; + } + + foreach($users as $i => $id) { + // if account is blocked remove blocked bit-flag, otherwise add blocked bit-flag + $op = $blocked[$i] ? '& ~' : '| '; + + q("UPDATE account SET account_flags = (account_flags $op%d) WHERE account_id = %d", + intval(ACCOUNT_BLOCKED), + intval($id) + ); + } + + $count = count($users); + $fmt = tt("%s account blocked/unblocked", "%s account blocked/unblocked", $count); + notice(sprintf($fmt, $count)); + } + + /** + * Delete multiple accounts given by the `user` POST param. + */ + private function delete_accounts(): void { + if (!isset($_POST['user'])) { + return; + } + + $users = $_POST['user']; + + if (!is_array($users)) { + return; + } + + foreach ($users as $uid){ + account_remove($uid, true, false); + } + + $count = count($users); + $fmt = tt("%s account deleted", "%s accounts deleted", $count); + notice(sprintf($fmt, $count)); + } } diff --git a/Zotlabs/Module/Conversation.php b/Zotlabs/Module/Conversation.php index c3e6ae5ec..6ceba69f2 100644 --- a/Zotlabs/Module/Conversation.php +++ b/Zotlabs/Module/Conversation.php @@ -36,8 +36,7 @@ class Conversation extends Controller { // do we have the item (at all)? - $r = q("select parent_mid from item where mid = '%s' or uuid = '%s' $item_normal order by item_wall desc limit 1", - dbesc(z_root() . '/item/' . $item_id), + $r = q("select parent_mid from item where uuid = '%s' $item_normal order by item_wall desc limit 1", dbesc($item_id) ); diff --git a/Zotlabs/Module/Dreport.php b/Zotlabs/Module/Dreport.php index 5db607545..d1ffb8027 100644 --- a/Zotlabs/Module/Dreport.php +++ b/Zotlabs/Module/Dreport.php @@ -19,7 +19,7 @@ class Dreport extends \Zotlabs\Web\Controller { $table = 'push'; if($mid) { - $i = q("select id from item where mid = '%s' and uid = %d and ( author_xchan = '%s' or ( owner_xchan = '%s' and item_wall = 1 )) ", + $i = q("select * from item where mid = '%s' and uid = %d and ( author_xchan = '%s' or ( owner_xchan = '%s' and item_wall = 1 )) ", dbesc($mid), intval($channel['channel_id']), dbesc($channel['channel_hash']), @@ -27,6 +27,12 @@ class Dreport extends \Zotlabs\Web\Controller { ); if($i) { \Zotlabs\Daemon\Master::Summon([ 'Notifier', 'edit_post', $i[0]['id'] ]); + + $relatedItem = find_related($i[0]); + if (isset($relatedItem['id'])) { + \Zotlabs\Daemon\Master::Summon([ 'Notifier', 'edit_post', $relatedItem['id'] ]); + } + } } sleep(3); diff --git a/Zotlabs/Module/Editpost.php b/Zotlabs/Module/Editpost.php index 6f524cdb8..678ceb207 100644 --- a/Zotlabs/Module/Editpost.php +++ b/Zotlabs/Module/Editpost.php @@ -86,6 +86,7 @@ class Editpost extends \Zotlabs\Web\Controller { 'bbco_autocomplete'=> 'bbcode', 'return_path' => 'hq', 'button' => t('Submit'), + 'disable_comments' => (($itm[0]['item_thread_top']) ? false : true), 'hide_voting' => true, 'hide_future' => true, 'hide_location' => true, diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 8ded7c1d7..f542e44ff 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -53,22 +53,21 @@ class Item extends Controller { if (argc() > 1 && argv(1) !== 'drop') { - $x = q("select uid, item_wall, llink, mid, uuid from item where mid = '%s' or mid = '%s' or uuid = '%s'", - dbesc(z_root() . '/item/' . argv(1)), - dbesc(z_root() . '/activity/' . argv(1)), + $x = q("select uid, item_wall, llink, uuid from item where uuid = '%s' order by item_wall desc", dbesc(argv(1)) ); + if ($x) { - foreach ($x as $xv) { - if (intval($xv['item_wall'])) { - $c = channelx_by_n($xv['uid']); - if ($c) { - goaway(z_root() . '/channel/' . $c['channel_address'] . '?mid=' . $xv['uuid']); - } + if ($x[0]['item_wall']) { + $c = channelx_by_n($x[0]['uid']); + if ($c) { + goaway(z_root() . '/channel/' . $c['channel_address'] . '?mid=' . $x[0]['uuid']); } } + goaway($x[0]['llink']); } + http_status_exit(404, 'Not found'); } @@ -101,7 +100,6 @@ class Item extends Controller { $item_deleted = false; $item_hidden = false; $item_unpublished = false; - $item_delayed = false; $item_pending_remove = false; $item_blocked = false; @@ -179,6 +177,7 @@ class Item extends Controller { $categories = ((x($_REQUEST, 'category')) ? escape_tags($_REQUEST['category']) : ''); $webpage = ((x($_REQUEST, 'webpage')) ? intval($_REQUEST['webpage']) : 0); $item_obscured = ((x($_REQUEST, 'obscured')) ? intval($_REQUEST['obscured']) : 0); + $item_delayed = ((x($_REQUEST, 'delayed')) ? intval($_REQUEST['delayed']) : 0); $pagetitle = ((x($_REQUEST, 'pagetitle')) ? escape_tags($_REQUEST['pagetitle']) : ''); $layout_mid = ((x($_REQUEST, 'layout_mid')) ? escape_tags($_REQUEST['layout_mid']) : ''); $plink = ((x($_REQUEST, 'permalink')) ? escape_tags($_REQUEST['permalink']) : ''); @@ -208,7 +207,6 @@ class Item extends Controller { $expires = NULL_DATE; - $comments_closed = NULL_DATE; $route = ''; $parent_item = null; @@ -455,7 +453,7 @@ class Item extends Controller { $title = escape_tags(trim($_REQUEST['title'])); $summary = escape_tags(trim($_REQUEST['summary'])); $body = trim($_REQUEST['body']); - $item_flags = $orig_post['item_flags']; + $item_flags = $orig_post['item_flags']; $item_origin = $orig_post['item_origin']; $item_unseen = $orig_post['item_unseen']; $item_starred = $orig_post['item_starred']; @@ -469,7 +467,7 @@ class Item extends Controller { $item_mentionsme = $orig_post['item_mentionsme']; $item_nocomment = $orig_post['item_nocomment']; $item_obscured = $orig_post['item_obscured']; - $item_verified = $orig_post['item_verified']; + $item_verified = $orig_post['item_verified']; $item_retained = $orig_post['item_retained']; $item_rss = $orig_post['item_rss']; $item_deleted = $orig_post['item_deleted']; @@ -794,6 +792,7 @@ class Item extends Controller { $item_origin = (($origin) ? 1 : 0); $item_consensus = (($consensus) ? 1 : 0); $item_nocomment = (($nocomment) ? 1 : 0); + $comments_closed = (($nocomment) ? $comments_closed : NULL_DATE); // determine if this is a wall post @@ -1246,8 +1245,6 @@ class Item extends Controller { if ((argc() == 3) && (argv(1) === 'drop') && intval(argv(2))) { - require_once('include/items.php'); - $i = q("select * from item where id = %d limit 1", intval(argv(2)) ); diff --git a/Zotlabs/Module/Owa.php b/Zotlabs/Module/Owa.php index 85467d4f4..21082e166 100644 --- a/Zotlabs/Module/Owa.php +++ b/Zotlabs/Module/Owa.php @@ -18,96 +18,95 @@ use Zotlabs\Web\Controller; class Owa extends Controller { - function init() { + public function init(): void + { $ret = [ 'success' => false ]; - if (array_key_exists('REDIRECT_REMOTE_USER',$_SERVER) && (! array_key_exists('HTTP_AUTHORIZATION',$_SERVER))) { - $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['REDIRECT_REMOTE_USER']; + if (!$this->validateAuthorizationHeader()) { + $this->error('Missing or invalid authorization header.'); } - if (array_key_exists('HTTP_AUTHORIZATION',$_SERVER) && substr(trim($_SERVER['HTTP_AUTHORIZATION']),0,9) === 'Signature') { - $sigblock = HTTPSig::parse_sigheader($_SERVER['HTTP_AUTHORIZATION']); - if ($sigblock) { - $keyId = $sigblock['keyId']; - $parsed = parse_url($keyId); - if (str_starts_with($parsed['scheme'],'http')) { - unset($parsed['fragment']); - unset($parsed['query']); - $keyId = unparse_url($parsed); - } - else { - $keyId = str_replace('acct:', '', $keyId); + $sigblock = HTTPSig::parse_sigheader($_SERVER['HTTP_AUTHORIZATION']); + if ($sigblock) { + $keyId = $sigblock['keyId']; + $parsed = parse_url($keyId); + if (str_starts_with($parsed['scheme'],'http')) { + unset($parsed['fragment']); + unset($parsed['query']); + $keyId = unparse_url($parsed); + } + else { + $keyId = str_replace('acct:', '', $keyId); + } + if ($keyId) { + $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash + WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') + AND hubloc_deleted = 0 AND xchan_pubkey != '' + ORDER BY hubloc_id DESC", + dbesc($keyId), + dbesc($keyId), + dbesc($keyId) + ); + if (! $r) { + $found = discover_by_webbie($keyId); + logger('found = ' . print_r($found, true)); + if ($found) { + $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash + WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') AND hubloc_deleted = 0 AND xchan_pubkey != '' ORDER BY hubloc_id DESC ", + dbesc($keyId), + dbesc($keyId), + dbesc($keyId) + ); + } } - if ($keyId) { - $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash - WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') - AND hubloc_deleted = 0 AND xchan_pubkey != '' - ORDER BY hubloc_id DESC", - dbesc($keyId), - dbesc($keyId), - dbesc($keyId) - ); - if (! $r) { + + if ($r) { + foreach ($r as $hubloc) { + $verified = HTTPSig::verify(file_get_contents('php://input'), $hubloc['xchan_pubkey']); + if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) { + logger('OWA header: ' . print_r($verified,true),LOGGER_DATA); + logger('OWA success: ' . $hubloc['hubloc_id_url'],LOGGER_DATA); + $ret['success'] = true; + $token = random_string(32); + Verify::create('owt',0,$token,$hubloc['hubloc_id_url']); + $result = ''; + openssl_public_encrypt($token,$result,$hubloc['xchan_pubkey']); + $ret['encrypted_token'] = base64url_encode($result); + break; + } else { + logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']); + } + } + + if (!$ret['success']) { + + // Possible a reinstall? + // In this case we probably already have an old hubloc + // but not the new one yet. + $found = discover_by_webbie($keyId); - logger('found = ' . print_r($found, true)); + if ($found) { $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash - WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s' OR xchan_hash = '%s') AND hubloc_deleted = 0 AND xchan_pubkey != '' ORDER BY hubloc_id DESC ", - dbesc($keyId), - dbesc($keyId), + WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s') AND hubloc_deleted = 0 ORDER BY hubloc_id DESC LIMIT 1", + dbesc(str_replace('acct:', '', $keyId)), dbesc($keyId) ); - } - } - - if ($r) { - foreach ($r as $hubloc) { - $verified = HTTPSig::verify(file_get_contents('php://input'), $hubloc['xchan_pubkey']); - if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) { - logger('OWA header: ' . print_r($verified,true),LOGGER_DATA); - logger('OWA success: ' . $hubloc['hubloc_id_url'],LOGGER_DATA); - $ret['success'] = true; - $token = random_string(32); - Verify::create('owt',0,$token,$hubloc['hubloc_id_url']); - $result = ''; - openssl_public_encrypt($token,$result,$hubloc['xchan_pubkey']); - $ret['encrypted_token'] = base64url_encode($result); - break; - } else { - logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']); - } - } - if (!$ret['success']) { - - // Possible a reinstall? - // In this case we probably already have an old hubloc - // but not the new one yet. - - $found = discover_by_webbie($keyId); - - if ($found) { - $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash - WHERE (hubloc_addr = '%s' OR hubloc_id_url = '%s') AND hubloc_deleted = 0 ORDER BY hubloc_id DESC LIMIT 1", - dbesc(str_replace('acct:', '', $keyId)), - dbesc($keyId) - ); - - if ($r) { - $verified = HTTPSig::verify(file_get_contents('php://input'), $r[0]['xchan_pubkey']); - if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) { - logger('OWA header: ' . print_r($verified,true), LOGGER_DATA); - logger('OWA success: ' . $r[0]['hubloc_id_url'], LOGGER_DATA); - $ret['success'] = true; - $token = random_string(32); - Verify::create('owt', 0, $token, $r[0]['hubloc_id_url']); - $result = ''; - openssl_public_encrypt($token, $result, $r[0]['xchan_pubkey']); - $ret['encrypted_token'] = base64url_encode($result); - } else { - logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']); - } + if ($r) { + $verified = HTTPSig::verify(file_get_contents('php://input'), $r[0]['xchan_pubkey']); + if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) { + logger('OWA header: ' . print_r($verified,true), LOGGER_DATA); + logger('OWA success: ' . $r[0]['hubloc_id_url'], LOGGER_DATA); + $ret['success'] = true; + $token = random_string(32); + Verify::create('owt', 0, $token, $r[0]['hubloc_id_url']); + $result = ''; + openssl_public_encrypt($token, $result, $r[0]['xchan_pubkey']); + $ret['encrypted_token'] = base64url_encode($result); + } else { + logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']); } } } @@ -118,4 +117,33 @@ class Owa extends Controller { json_return_and_die($ret,'application/x-zot+json'); } + + private function validateAuthorizationHeader(): bool + { + if (!empty($_SERVER['HTTP_AUTHORIZATION'])) { + $auth = trim($_SERVER['HTTP_AUTHORIZATION']); + } else if (!empty($_SERVER['REDIRECT_REMOTE_USER'])) { + $auth = trim($_SERVER['REDIRECT_REMOTE_USER']); + } else { + return false; + } + + return strncmp($auth, 'Signature', 9) === 0; + } + + /** + * Terminates the request, and return a json error response. + * + * @Note This function does not return! + * + * @param string $msg The error message for the response. + */ + private function error(string $msg): void { + $ret = [ + 'success' => false, + 'message' => $msg + ]; + + json_return_and_die($ret,'application/x-zot+json'); + } } diff --git a/Zotlabs/Module/Pubstream.php b/Zotlabs/Module/Pubstream.php index 6d8edf4d8..234e73792 100644 --- a/Zotlabs/Module/Pubstream.php +++ b/Zotlabs/Module/Pubstream.php @@ -202,11 +202,9 @@ class Pubstream extends \Zotlabs\Web\Controller { if($mid) { $r = q("SELECT parent AS item_id FROM item left join abook on item.author_xchan = abook.abook_xchan - left join xchan on item.author_xchan = xchan.xchan_hash WHERE item.$identifier = '%s' and item.item_private = 0 $uids $site_firehose_sql $item_normal - and xchan.xchan_censored = 0 and (abook.abook_blocked = 0 or abook.abook_flags is null) $sql_extra $net_query2", dbesc($mid) @@ -216,11 +214,9 @@ class Pubstream extends \Zotlabs\Web\Controller { // Fetch a page full of parent items for this page $r = dbq("SELECT parent AS item_id FROM item left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids ) - left join xchan on item.author_xchan = xchan.xchan_hash WHERE item.item_private = 0 $thread_top $uids $site_firehose_sql $item_normal - and xchan.xchan_censored = 0 and (abook.abook_blocked = 0 or abook.abook_flags is null) $sql_extra $net_query2 ORDER BY $ordering DESC $pager_sql " @@ -231,10 +227,8 @@ class Pubstream extends \Zotlabs\Web\Controller { if($mid) { $r = q("SELECT parent AS item_id FROM item left join abook on item.author_xchan = abook.abook_xchan - left join xchan on item.author_xchan = xchan.xchan_hash WHERE item.$identifier = '%s' and item.item_private = 0 $uids $site_firehose_sql $item_normal_update $simple_update - and xchan.xchan_censored = 0 and (abook.abook_blocked = 0 or abook.abook_flags is null) $sql_extra $net_query2", dbesc($mid) @@ -243,11 +237,9 @@ class Pubstream extends \Zotlabs\Web\Controller { else { $r = dbq("SELECT parent AS item_id FROM item left join abook on item.author_xchan = abook.abook_xchan - left join xchan on item.author_xchan = xchan.xchan_hash WHERE item.item_private = 0 $thread_top $uids $site_firehose_sql $item_normal_update $simple_update - and xchan.xchan_censored = 0 and (abook.abook_blocked = 0 or abook.abook_flags is null) $sql_extra $net_query2" ); diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php index fda2f2be4..673457db1 100644 --- a/Zotlabs/Module/Sse.php +++ b/Zotlabs/Module/Sse.php @@ -207,10 +207,9 @@ class Sse extends Controller { if ($result) { XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); - json_return_and_die($result); } - killme(); + json_return_and_die($result); } diff --git a/Zotlabs/Module/Sse_bs.php b/Zotlabs/Module/Sse_bs.php index 09c4ed614..5292abfaa 100644 --- a/Zotlabs/Module/Sse_bs.php +++ b/Zotlabs/Module/Sse_bs.php @@ -22,7 +22,6 @@ class Sse_bs extends Controller { public static $xchans; function init() { - self::$uid = local_channel(); self::$ob_hash = get_observer_hash(); self::$sse_id = false; @@ -43,8 +42,9 @@ class Sse_bs extends Controller { self::$offset = 0; self::$xchans = ''; - if(isset($_REQUEST['sse_rmids'])) - self::mark_read($_REQUEST['sse_rmids']); + if (isset($_REQUEST['sse_rmids'])) { + self::mark_read(explode(',', $_REQUEST['sse_rmids'])); + } if(!empty($_REQUEST['nquery']) && $_REQUEST['nquery'] !== '%') { $nquery = $_REQUEST['nquery']; @@ -207,7 +207,7 @@ class Sse_bs extends Controller { $item_normal $sql_extra $sql_extra2 - ORDER BY created DESC LIMIT $limit OFFSET $offset", + ORDER BY created DESC, received DESC LIMIT $limit OFFSET $offset", intval(self::$uid), dbescdate($_SESSION['sse_loadtime']), dbesc(self::$ob_hash) @@ -290,7 +290,7 @@ class Sse_bs extends Controller { $item_normal $sql_extra $sql_extra2 - ORDER BY created DESC LIMIT $limit OFFSET $offset", + ORDER BY created DESC, received DESC LIMIT $limit OFFSET $offset", intval(self::$uid), dbescdate($_SESSION['sse_loadtime']), dbesc(self::$ob_hash) @@ -373,7 +373,7 @@ class Sse_bs extends Controller { $item_normal $sql_extra $sql_extra2 - ORDER BY created DESC LIMIT $limit OFFSET $offset", + ORDER BY created DESC, received DESC LIMIT $limit OFFSET $offset", intval(self::$uid), dbescdate($_SESSION['sse_loadtime']), dbesc(self::$ob_hash) @@ -481,7 +481,7 @@ class Sse_bs extends Controller { $sql_extra $sql_extra2 $sql_extra3 - ORDER BY created DESC LIMIT $limit OFFSET $offset", + ORDER BY created DESC, received DESC LIMIT $limit OFFSET $offset", dbescdate($_SESSION['sse_loadtime']), dbesc(self::$ob_hash), dbescdate($_SESSION['last_login_date'] ?? $_SESSION['static_loadtime']) @@ -502,13 +502,15 @@ class Sse_bs extends Controller { } } - $r = q("SELECT id FROM item + $r = q("SELECT id, body FROM item WHERE true $uids + AND created <= '%s' AND created > '%s' $item_normal $sql_extra $sql_extra3 AND author_xchan != '%s' LIMIT 100", + dbescdate($_SESSION['sse_loadtime']), dbescdate($_SESSION['last_login_date'] ?? $_SESSION['static_loadtime']), dbesc(self::$ob_hash) ); @@ -677,7 +679,7 @@ class Sse_bs extends Controller { AND author_xchan != '%s' AND item_unseen = 1 $item_normal - ORDER BY created DESC", + ORDER BY created DESC, received DESC", dbesc(ACTIVITY_POST), intval(self::$uid), dbesc(self::$ob_hash) diff --git a/Zotlabs/Web/WebServer.php b/Zotlabs/Web/WebServer.php index 19f14ee8a..d59effc88 100644 --- a/Zotlabs/Web/WebServer.php +++ b/Zotlabs/Web/WebServer.php @@ -61,7 +61,7 @@ class WebServer { if (x($_GET,'zid') && $installed) { \App::$query_string = strip_zids(\App::$query_string); if(! local_channel()) { - if (!isset($_SESSION['my_address']) || $_SESSION['my_address'] != $_GET['zid']) { + if (!isset($_SESSION['my_address'])) { $_SESSION['my_address'] = Text::escape_tags($_GET['zid']); $_SESSION['authenticated'] = 0; } @@ -66,7 +66,7 @@ require_once('include/security.php'); define('PLATFORM_NAME', 'hubzilla'); -define('STD_VERSION', '9.5.2'); +define('STD_VERSION', '10.1.14'); define('ZOT_REVISION', '6.0'); define('DB_UPDATE_VERSION', 1263); @@ -1270,8 +1270,9 @@ class App { '$js_strings' => js_strings(), '$zid' => get_my_address(), '$channel_id' => self::$profile['uid'] ?? 0, - '$auto_save_draft' => ((isset(self::$profile['uid']) && feature_enabled(self::$profile['uid'], 'auto_save_draft')) ? "true" : "false"), - '$module' => App::$module + '$auto_save_draft' => ((isset(self::$profile_uid) && feature_enabled(self::$profile_uid, 'auto_save_draft')) ? "true" : "false"), + '$module' => App::$module, + '$lang' => App::$language ] ) . ((isset(self::$page['htmlhead'])) ? self::$page['htmlhead'] : ''); diff --git a/composer.json b/composer.json index 0a8e57b5e..fef9bc6f0 100644 --- a/composer.json +++ b/composer.json @@ -75,6 +75,11 @@ "Zotlabs\\": "Zotlabs/" } }, + "autoload-dev": { + "psr-4": { + "Zotlabs\\Tests\\Unit\\": "tests/unit/" + } + }, "minimum-stability": "stable", "config": { "notify-on-install": false, diff --git a/doc/en/context/ru/connections/help.html b/doc/en/context/ru/connections/help.html index 6c9b9a0e9..b5996e0d0 100644 --- a/doc/en/context/ru/connections/help.html +++ b/doc/en/context/ru/connections/help.html @@ -1,7 +1,7 @@ <dl class="dl-horizontal"> - <dd>На этой странице отображается список всех подключений этого канала. Список можно отсортировать и отфильтровать с помощью кнопки <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Нажмите чтобы выделить элемент..."><button class='btn btn-outline-secondary btn-sm'><i class="fa fa-filter"></i></button></a> рядом с кнопкой поиска.</dd> + <dd>На этой странице отображается список всех подключений этого канала. Список можно отсортировать и отфильтровать с помощью кнопки <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Нажмите чтобы выделить элемент..."><button class='btn btn-outline-secondary btn-sm'><i class="bi bi-funnel-fill"></i></button></a> рядом с кнопкой поиска.</dd> <dt>Сведения о контакте</dt> <dd>Каждая запись в списке показывает информацию о конкретном контакте. Полупрозрачное изображение профиля указывает на заархивированное соединение.</dd> <dt>Статус контакта</dt> <dd>Контакт может находиться в разных состояниях: <ul><li>Заархивирован</li><li>Игнорируется</li><li>Заблокирован</li><li>Скрыт</li></ul></dd> -</dl>
\ No newline at end of file +</dl> diff --git a/include/account.php b/include/account.php index 884c07389..615c802f4 100644 --- a/include/account.php +++ b/include/account.php @@ -613,59 +613,45 @@ function send_register_success_email($email,$password) { } /** - * @brief Allows a user registration. + * Mark a pending registration as approved, and notify the account + * holder by email. * - * @param string $hash - * @return array|boolean + * @param string $hash The registration hash of the entry to approve + * + * @return bool */ -function account_allow($hash) { - - $ret = array('success' => false); +function account_allow(string $hash): bool { $register = q("SELECT * FROM register WHERE reg_hash = '%s' LIMIT 1", dbesc($hash) ); - if(! $register) - return $ret; + if (! $register) { + logger( + "Entry with hash '{$hash}' was not found in the register table.", + LOGGER_NORMAL, + LOG_ERR + ); + return false; + } - $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", - intval($register[0]['reg_uid']) - ); + $account = get_account_by_id($register[0]['reg_uid']); - // a register entry without account assigned to - if(! $account) - return $ret; + if (! $account) { + logger( + "Account '{$register[0]['reg_uid']}' mentioned by registration hash '{$hash}' was not found.", + LOGGER_NORMAL, + LOG_ERR + ); + return false; + } - // [hilmar -> + $transaction = new DbaTransaction(DBA::$dba); - q("START TRANSACTION"); - //q("DELETE FROM register WHERE reg_hash = '%s'", - // dbesc($register[0]['reg_hash']) - //); $r1 = q("UPDATE register SET reg_vital = 0 WHERE reg_hash = '%s'", dbesc($register[0]['reg_hash']) ); - /* instead of ... - - // unblock - q("UPDATE account SET account_flags = (account_flags & ~%d) " - . " WHERE (account_flags & %d)>0 AND account_id = %d", - intval(ACCOUNT_BLOCKED), - intval(ACCOUNT_BLOCKED), - intval($register[0]['reg_uid']) - ); - - // unpend - q("UPDATE account SET account_flags = (account_flags & ~%d) " - . " WHERE (account_flags & %d)>0 AND account_id = %d", - intval(ACCOUNT_PENDING), - intval(ACCOUNT_PENDING), - intval($register[0]['reg_uid']) - ); - - */ // together unblock and unpend $r2 = q("UPDATE account SET account_flags = %d WHERE account_id = %d", intval($account['account_flags'] @@ -674,9 +660,7 @@ function account_allow($hash) { ); if($r1 && $r2) { - q("COMMIT"); - - // <- hilmar] + $transaction->commit(); push_lang($register[0]['reg_lang']); @@ -684,35 +668,35 @@ function account_allow($hash) { $email_msg = replace_macros($email_tpl, array( '$sitename' => Config::Get('system','sitename'), '$siteurl' => z_root(), - '$username' => $account[0]['account_email'], - '$email' => $account[0]['account_email'], + '$username' => $account['account_email'], + '$email' => $account['account_email'], '$password' => '', - '$uid' => $account[0]['account_id'] + '$uid' => $account['account_id'] )); $res = z_mail( [ - 'toEmail' => $account[0]['account_email'], + 'toEmail' => $account['account_email'], 'messageSubject' => sprintf( t('Registration details for %s'), Config::Get('system','sitename')), 'textVersion' => $email_msg, ] ); - pop_lang(); + if (! $res) { + info(t("Sending account approval email to {$account['email']} failed...")); + } - if(Config::Get('system', 'auto_channel_create', 1)) - auto_channel_create($register[0]['uid']); + pop_lang(); - if ($res) { - info( t('Account approved.') . EOL ); - return true; + if(Config::Get('system', 'auto_channel_create', 1)) { + auto_channel_create($register[0]['reg_uid']); } - // [hilmar -> - } else { - q("ROLLBACK"); + info( t('Account approved.') . EOL ); + return true; } - // <- hilmar] + + return false; } diff --git a/include/attach.php b/include/attach.php index 02b94ddb6..bda4905f1 100644 --- a/include/attach.php +++ b/include/attach.php @@ -1919,7 +1919,7 @@ function attach_store_item($channel, $observer, $file) { drop_item($r[0]['id'], $stage); if (empty($r[0]['item_hidden'])) { - Master::Summon(['Notifier', 'drop', $i[0]['id']]); + Master::Summon(['Notifier', 'drop', $r[0]['id']]); } } diff --git a/include/connections.php b/include/connections.php index 7500647b4..b3e9ba89d 100644 --- a/include/connections.php +++ b/include/connections.php @@ -513,7 +513,7 @@ function remove_abook_items($channel_id, $xchan_hash) { continue; } - drop_item($rr['id']); + drop_item($rr['id'], uid: $channel_id); } } diff --git a/include/datetime.php b/include/datetime.php index 2182d7c43..89e2876d0 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -268,6 +268,43 @@ function relative_date($posted_date, $format = null) { return $abs; } +/** + * @brief Returns a relative time string like 3 seconds ago. + * @param string $posted_date (UTC) + * @param DateTime $now (optional) + * @return string with relative time + */ +function relative_time($timestamp, $now = new DateTime()) { + $localtime = datetime_convert('UTC', date_default_timezone_get(), $timestamp); + $time = new DateTime($localtime); + + $interval = $now->diff($time); + + $prefix = ''; + $appendix = ' ' . t('ago'); + + if ($time > $now) { + $prefix = t('in') . ' '; + $appendix = ''; + } + + if ($interval->y > 0) { + return $prefix . $interval->y . ' ' . plural_dates('y', $interval->y) . $appendix; + } elseif ($interval->m > 0) { + return $prefix . $interval->m . ' ' . plural_dates('m', $interval->m) . $appendix; + } elseif ($interval->d > 0) { + return $prefix . $interval->d . ' ' . plural_dates('d', $interval->d) . $appendix; + } elseif ($interval->h > 0) { + return $prefix . $interval->h . ' ' . plural_dates('h', $interval->h) . $appendix; + } elseif ($interval->i > 0) { + return $prefix . $interval->i . ' ' . plural_dates('i', $interval->i) . $appendix; + } elseif ($interval->s > 0) { + return $prefix . $interval->s . ' ' . plural_dates('s', $interval->s) . $appendix; + } else { + return t('now'); + } +} + function plural_dates($k,$n) { switch($k) { diff --git a/include/dba/dba_pdo.php b/include/dba/dba_pdo.php index c8a1b6c85..a12629e19 100644 --- a/include/dba/dba_pdo.php +++ b/include/dba/dba_pdo.php @@ -10,6 +10,8 @@ class dba_pdo extends dba_driver { public $driver_dbtype = null; + private string $server_version = ''; + /** * {@inheritDoc} * @see dba_driver::connect() @@ -37,6 +39,7 @@ class dba_pdo extends dba_driver { try { $this->db = new PDO($dsn,$user,$pass); $this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); + $this->server_version = $this->db->getAttribute(PDO::ATTR_SERVER_VERSION); } catch(PDOException $e) { if(file_exists('dbfail.out')) { @@ -73,9 +76,9 @@ class dba_pdo extends dba_driver { } } - $result = null; + $result = false; $this->error = ''; - $select = ((stripos($sql, 'select') === 0) ? true : false); + $select = stripos($sql, 'select') === 0 || stripos($sql, 'returning ') > 0; try { $result = $this->db->query($sql, PDO::FETCH_ASSOC); @@ -115,6 +118,111 @@ class dba_pdo extends dba_driver { return (($this->error) ? false : $r); } + /** + * Insert a row into a table. + * + * The `$data` argument is an array of key/value pairs of the columns to + * insert, where the key is the column name. Values are automatically + * escaped if needed, and should be provided unescaped to this function. + * + * @note it is the callers responsibility to ensure that only valid + * column names are passed as keys in the array. + * + * The inserted row will be returned. + * + * @param string $table The table to insert the row into. + * @param array $data The data to insert as an array of column name => value pairs. + * @param string $idcol The column name for the primary key of the table. We need to + * specify this since we don't have a consistent naming of primary + * id for tables. + * + * @return array|bool The complete record as read back from the database, or false if we + * could not fetch it. + */ + public function insert(string $table, array $data, string $idcol): array|bool { + $keys = array_keys($data); + $values = array_map( + fn ($v) => is_numeric($v) ? $v : "'" . dbesc($v) . "'", + array_values($data) + ); + + $query = "INSERT INTO {$table} (" + . implode(', ', $keys) . ') VALUES (' + . implode(', ', $values) . ')'; + + // MySQL is the only supported DB that don't support the returning + // clause. Since the driver type is 'mysql' also for MariaDB, we need + // to check the actual server version to be sure we only exclude actual + // MySQL systems. + if ($this->driver_dbtype !== 'mysql' || stripos($this->server_version, 'mariadb') !== false) { + $query .= ' RETURNING *'; + } + + $res = $this->q($query); + + if (is_a($res, PDOStatement::class)) { + // + // Calling PDO::lastInsertId should be safe here. + // The last inserted id is kept for each connection, so we're not risking + // a race condition wrt inserts by other requests that happen simultaneously. + // + $id = $this->db->lastInsertId($table); + + $res = $this->q("SELECT * FROM {$table} WHERE {$idcol} = {$id}"); + + if (is_a($res, PDOStatement::class)) { + db_logger('dba_pdo: PDOStatement returned, did not expect that.'); + return false; + } + } + + if (is_array($res)) { + // Since we should never have more than one result, unwrap the array + // so we only have the resulting row. + $res = $res[0]; + } + + return $res; + } + + /** + * Update an existing row in a table. + * + * The `$data` argument is an array of key/value pairs of the columns to + * update, where the key is the column name. Values are automatically + * escaped if needed, and should be provided unescaped to this function. + * + * @note it is the callers responsibility to ensure that only valid + * column names are passed as keys in the array. + * + * The row to be updated is identified by `$idcol` and `$idval` as the + * column name and value respectively. This should normally be the unique + * id column of the table, but can in theory be any column with a unique + * value that identifies a specific row. + * + * @param string $table The table to update. + * @param array $data The columns to update as key => value pairs. + * @param string $idcol The name of the id column to check $idval against. + * @param mixed $idval The id of the row to update. + * + * @return bool True if the update succeeded, false otherwise. + */ + public function update(string $table, array $data, string $idcol, mixed $idval): bool { + $set_statements = []; + + foreach ($data as $k => $v) { + $set_statements[] = "set {$k}=" . (is_numeric($v) ? $v : "'" . dbesc($v) . "'"); + } + + $query = "UPDATE {$table} " + . implode(', ', $set_statements) + . " WHERE {$idcol} = {$idval}"; + + $res = $this->q($query); + + return is_a($res, PDOStatement::class); + } + function escape($str) { if($this->db && $this->connected) { return substr(substr(@$this->db->quote($str),1),0,-1); diff --git a/include/event.php b/include/event.php index 3509c1556..3cad0a355 100644 --- a/include/event.php +++ b/include/event.php @@ -13,7 +13,7 @@ use Zotlabs\Lib\Libsync; use Zotlabs\Access\AccessList; use Ramsey\Uuid\Uuid; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; require_once('include/bbcode.php'); diff --git a/include/feedutils.php b/include/feedutils.php index cc57d106c..73a8999ae 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -311,7 +311,7 @@ function get_atom_author($feed, $item) { $base = $rawactor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']; if($base && count($base)) { foreach($base as $link) { - if($link['attribs']['']['rel'] === 'alternate' && (! $res['author_link'])) + if($link['attribs']['']['rel'] === 'alternate' && (!$author['author_link'])) $author['author_link'] = unxmlify($link['attribs']['']['href']); if(!x($author, 'author_photo') || ! $author['author_photo']) { if($link['attribs']['']['rel'] === 'avatar' || $link['attribs']['']['rel'] === 'photo') @@ -357,7 +357,7 @@ function get_atom_author($feed, $item) { if($base && count($base)) { foreach($base as $link) { - if($link['attribs']['']['rel'] === 'alternate' && (! $res['author_link'])) + if($link['attribs']['']['rel'] === 'alternate' && (!$author['author_link'])) $author['author_link'] = unxmlify($link['attribs']['']['href']); if(! (x($author,'author_photo'))) { if($link['attribs']['']['rel'] === 'avatar' || $link['attribs']['']['rel'] === 'photo') @@ -1173,12 +1173,16 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { intval($importer['channel_id']) ); - // Update content if 'updated' changes - if($r) { - if(activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE]) - && $datarray['author_xchan'] === $r[0]['author_xchan']) { + if ($r) { + // Check ownership + if ($datarray['author_xchan'] !== $r[0]['author_xchan']) { + logger('stored item author is not imported item author', LOGGER_DEBUG); + continue; + } + + if (activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])) { if(! intval($r[0]['item_deleted'])) { logger('deleting item ' . $r[0]['id'] . ' mid=' . $datarray['mid'], LOGGER_DEBUG); drop_item($r[0]['id']); @@ -1444,12 +1448,17 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) { // Update content if 'updated' changes - if($r) { - if(isset($datarray['verb']) && activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE]) - && isset($datarray['author_xchan']) && $datarray['author_xchan'] === $r[0]['author_xchan']) { + if ($r) { + // Check ownership + if ($datarray['author_xchan'] !== $r[0]['author_xchan']) { + logger('stored item author is not imported item author', LOGGER_DEBUG); + continue; + } + + if (isset($datarray['verb']) && activity_match($datarray['verb'], ['Delete', ACTIVITY_DELETE])) { if(! intval($r[0]['item_deleted'])) { logger('deleting item ' . $r[0]['id'] . ' mid=' . $datarray['mid'], LOGGER_DEBUG); - drop_item($r[0]['id']); + drop_item($r[0]['id'], uid: $importer['channel_id']); } continue; } diff --git a/include/items.php b/include/items.php index 9ef44e147..ff683260d 100644 --- a/include/items.php +++ b/include/items.php @@ -258,6 +258,25 @@ function item_normal() { return $sql; } +function item_forwardable($item) { + if (intval($item['item_unpublished']) || + intval($item['item_delayed']) || + intval($item['item_blocked']) || + intval($item['item_hidden']) || + intval($item['item_restrict']) || // this might change in the future + // internal follow/unfollow thread + in_array($item['verb'], ['Follow', 'Ignore', ACTIVITY_FOLLOW, ACTIVITY_UNFOLLOW]) || + str_contains($item['postopts'], 'nodeliver') || + // actor not fetchable + (isset($item['author']['xchan_network']) && in_array($item['author']['xchan_network'], ['rss', 'anon', 'token'])) + + ) { + return false; + } + + return true; +} + function item_normal_search() { return " and item.item_hidden = 0 and item.item_type in (0,3,6,7) and item.item_deleted = 0 and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0 @@ -1791,16 +1810,6 @@ function item_store($arr, $allow_exec = false, $deliver = true, $addAndSync = tr if((! array_key_exists('item_nocomment',$arr)) && ($arr['comment_policy'] == 'none')) $arr['item_nocomment'] = 1; - // handle time travelers - // Allow a bit of fudge in case somebody just has a slightly slow/fast clock - - $d1 = new DateTime('now +10 minutes', new DateTimeZone('UTC')); - $d2 = new DateTime($arr['created'] . '+00:00'); - - if($d2 > $d1) { - $arr['item_delayed'] = 1; - } - if(empty($arr['llink'])) { $arr['llink'] = z_root() . '/display/' . $arr['uuid']; } @@ -1842,7 +1851,7 @@ function item_store($arr, $allow_exec = false, $deliver = true, $addAndSync = tr ); } - if(comments_are_now_closed($r[0])) { + if(comments_are_now_closed($r[0]) && !in_array($arr['verb'], ['Add', 'Remove'])) { logger('item_store: comments closed'); $ret['message'] = 'Comments closed.'; return $ret; @@ -2230,7 +2239,7 @@ function item_store_update($arr, $allow_exec = false, $deliver = true, $addAndSy $arr['revision'] = ((x($arr,'revision') && $arr['revision'] > 0) ? intval($arr['revision']) : 0); - if(array_key_exists('comments_closed',$arr) && $arr['comments_closed'] > NULL_DATE) + if(array_key_exists('comments_closed',$arr)) $arr['comments_closed'] = datetime_convert('UTC','UTC',$arr['comments_closed']); else $arr['comments_closed'] = $orig[0]['comments_closed']; @@ -3172,22 +3181,15 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false $item['parent_mid'] = $item['mid']; $item['thr_parent'] = $item['mid']; $item['llink'] = z_root() . '/display/' . $item['uuid']; + $item['target'] = [ + 'id' => str_replace('/item/', '/conversation/', $item['mid']), + 'type' => 'Collection', + 'attributedTo' => z_root() . '/channel/' . $channel['channel_address'] + ]; + $item['tgt_type'] = 'Collection'; } -/* - $r = q("UPDATE item SET author_xchan = '%s', mid = '%s', parent_mid = '%s', thr_parent = '%s', llink = '%s' WHERE id = %d", - dbesc($item['author_xchan']), - dbesc($item['mid']), - dbesc($item['parent_mid']), - dbesc($item['thr_parent']), - dbesc($item['llink']), - intval($item_id) - ); -*/ } - hz_syslog('gothere'); - // sourced - $private = (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 1 : 0); @@ -3231,7 +3233,7 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false $r = q("update item set item_uplink = %d, item_nocomment = %d, item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s', item_wall = %d, item_origin = %d, - author_xchan = '%s', mid = '%s', parent_mid = '%s', thr_parent = '%s', llink = '%s' where id = %d", + author_xchan = '%s', mid = '%s', parent_mid = '%s', thr_parent = '%s', llink = '%s', target = '%s', tgt_type = '%s' where id = %d", intval($item_uplink), intval($item_nocomment), intval($flag_bits), @@ -3252,6 +3254,8 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false dbesc($item['parent_mid']), dbesc($item['thr_parent']), dbesc($item['llink']), + dbesc(json_encode($item['target'])), + dbesc($item['tgt_type']), intval($item_id) ); @@ -3855,7 +3859,7 @@ function item_expire($uid,$days,$comment_days = 7) { if ($r) { foreach ($r as $item) { - drop_item($item['id'], expire: true); + drop_item($item['id'], uid: $uid); } } @@ -3916,7 +3920,7 @@ function drop_item($id, $stage = DROPITEM_NORMAL, $force = false, $uid = 0, $obs $ok_to_delete = true; } - // remote delete when nobody is authenticated (called from Libzot) + // remote delete when nobody is authenticated (called from Libzot and Daemons) if ($uid && intval($uid) === intval($item['uid'])) { $ok_to_delete = true; } @@ -5287,7 +5291,8 @@ function addToCollectionAndSync($ret) { } xchan_query($items); - $items = fetch_post_tags($items); + // TODO: fetch_post_tags() will add term and iconfig twice if called twice and it looks like they are already added here + // $items = fetch_post_tags($items); $sync_items = []; $sync_items[] = encode_item($items[0], true); diff --git a/include/js_strings.php b/include/js_strings.php index 0142bad28..b41c34508 100644 --- a/include/js_strings.php +++ b/include/js_strings.php @@ -49,29 +49,6 @@ function js_strings() { 'months' => tt('%d months', '%d months', '%d'), 'years' => tt('%d years', '%d years', '%d'), - // get plural function code - 'plural_func' => tf(), - - '$t01' => ((t('timeago.prefixAgo') == 'timeago.prefixAgo') ? '' : ((t('timeago.prefixAgo') == 'NONE') ? '' : t('timeago.prefixAgo'))), - '$t02' => ((t('timeago.prefixFromNow') == 'timeago.prefixFromNow') ? '' : ((t('timeago.prefixFromNow') == 'NONE') ? '' : t('timeago.prefixFromNow'))), - '$t03' => ((t('timeago.suffixAgo') == 'timeago.suffixAgo') ? 'ago' : ((t('timeago.suffixAgo') == 'NONE') ? '' : t('timeago.suffixAgo'))), - '$t04' => ((t('timeago.suffixFromNow') == 'timeago.suffixFromNow') ? 'from now' : ((t('timeago.suffixFromNow') == 'NONE') ? '' : t('timeago.suffixFromNow'))), - - // translatable main strings for jquery.timeago - '$t05' => t('less than a minute'), - '$t06' => t('about a minute'), - '$t07' => ta('%d minutes'), - '$t08' => t('about an hour'), - '$t09' => ta('about %d hours'), - '$t10' => t('a day'), - '$t11' => ta('%d days'), - '$t12' => t('about a month'), - '$t13' => ta('%d months'), - '$t14' => t('about a year'), - '$t15' => ta('%d years'), - '$t16' => t(' '), // wordSeparator - '$t17' => ((t('timeago.numbers') != 'timeago.numbers') ? t('timeago.numbers') : '[]'), - '$January' => t('January'), '$February' => t('February'), '$March' => t('March'), diff --git a/include/network.php b/include/network.php index 50e8b1c89..d87482d9d 100644 --- a/include/network.php +++ b/include/network.php @@ -2,6 +2,7 @@ use Zotlabs\Lib\Activity; use Zotlabs\Lib\Config; +use Zotlabs\Lib\Mailer; use Zotlabs\Lib\Zotfinger; use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Queue; @@ -1488,11 +1489,11 @@ function do_delivery($deliveries, $force = false) { $interval = Config::Get('queueworker', 'queue_interval', 500000); -// $deliveries_per_process = intval(Config::Get('system','delivery_batch_count')); + $deliveries_per_process = intval(Config::Get('system', 'delivery_batch_count')); - if($deliveries_per_process <= 0) + if($deliveries_per_process <= 0) { $deliveries_per_process = 1; - + } $deliver = []; foreach($deliveries as $d) { @@ -1813,54 +1814,9 @@ function network_to_name($s) { */ function z_mail($params) { - if(! $params['fromEmail']) { - $params['fromEmail'] = Config::Get('system','from_email'); - if(! $params['fromEmail']) - $params['fromEmail'] = 'Administrator' . '@' . App::get_hostname(); - } - if(! $params['fromName']) { - $params['fromName'] = Config::Get('system','from_email_name'); - if(! $params['fromName']) - $params['fromName'] = Zotlabs\Lib\System::get_site_name(); - } - if(! $params['replyTo']) { - $params['replyTo'] = Config::Get('system','reply_address'); - if(! $params['replyTo']) - $params['replyTo'] = 'noreply' . '@' . App::get_hostname(); - } - - $params['sent'] = false; - $params['result'] = false; - - /** - * @hooks email_send - * * \e params @see z_mail() - */ - call_hooks('email_send', $params); - - if($params['sent']) { - logger('notification: z_mail returns ' . (($params['result']) ? 'success' : 'failure'), LOGGER_DEBUG); - return $params['result']; - } - - $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'); - - $messageHeader = - $params['additionalMailHeader'] . - "From: $fromName <{$params['fromEmail']}>" . PHP_EOL . - "Reply-To: $fromName <{$params['replyTo']}>" . PHP_EOL . - "Content-Type: text/plain; charset=UTF-8"; - - // send the message - $res = mail( - $params['toEmail'], // send to address - $messageSubject, // subject - $params['textVersion'], - $messageHeader // message headers - ); - logger('notification: z_mail returns ' . (($res) ? 'success' : 'failure'), LOGGER_DEBUG); - return $res; + // Delegate the call to the Mailer class. + $mailer = new Mailer($params); + return $mailer->deliver(); } diff --git a/include/oembed.php b/include/oembed.php index f52f73225..840164663 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -143,6 +143,10 @@ function oembed_fetch_url($embedurl){ $furl = ((local_channel() && $zrl) ? zid($embedurl) : $embedurl); + if (empty($furl)) { + return; + } + if($action !== 'block' && (! Config::Get('system','oembed_cache_disable'))) { $txt = Cache::get('[' . App::$videowidth . '] ' . $furl); } diff --git a/include/photos.php b/include/photos.php index 390754f39..a9f92e103 100644 --- a/include/photos.php +++ b/include/photos.php @@ -580,7 +580,7 @@ function photo_upload($channel, $observer, $args) { $ret['item'] = $arr; $ret['body'] = $obj_body; $ret['resource_id'] = $photo_hash; - $ret['photoitem_id'] = $item_id; + $ret['photoitem_id'] = $result['item_id']; /** * @hooks photo_upload_end diff --git a/include/plugin.php b/include/plugin.php index 62b643c3e..b5f9959b9 100644 --- a/include/plugin.php +++ b/include/plugin.php @@ -987,12 +987,13 @@ function format_css_if_exists($source) { } } else { // It's a file from the theme - $path = theme_include($script); + $theme_include = theme_include($script); + $path = (($theme_include) ? '/' . $theme_include : ''); } if($path) { $qstring = ((parse_url($path, PHP_URL_QUERY)) ? '&' : '?') . 'v=' . STD_VERSION; - return '<link rel="stylesheet" href="' . $path_prefix . '/' . $path . $qstring . '" type="text/css" media="' . $source[1] . '">' . "\r\n"; + return '<link rel="stylesheet" href="' . $path_prefix . $path . $qstring . '" type="text/css" media="' . $source[1] . '">' . "\r\n"; } } @@ -1059,11 +1060,12 @@ function format_js_if_exists($source) { } else { // It's a file from the theme - $path = theme_include($source); + $theme_include = theme_include($source); + $path = (($theme_include) ? '/' . $theme_include : ''); } if($path) { $qstring = ((parse_url($path, PHP_URL_QUERY)) ? '&' : '?') . 'v=' . STD_VERSION; - return '<script src="' . $path_prefix . '/' . $path . $qstring . '" ></script>' . "\r\n" ; + return '<script src="' . $path_prefix . $path . $qstring . '"></script>' . "\r\n" ; } } diff --git a/include/text.php b/include/text.php index 98093ca53..dda3e4934 100644 --- a/include/text.php +++ b/include/text.php @@ -3206,7 +3206,7 @@ function getIconFromType($type) { //Common file 'application/octet-stream' => 'bi-file-earmark', //Text - 'text/plain' => 'bi-earmark-text', + 'text/plain' => 'bi-file-earmark-text', 'text/markdown' => 'bi-filetype-md', 'text/bbcode' => 'bi-file-earmark-text', 'text/html' => 'bi-filetype-html', diff --git a/include/zid.php b/include/zid.php index 2b5d53916..b74e82930 100644 --- a/include/zid.php +++ b/include/zid.php @@ -150,6 +150,9 @@ function clean_query_string($s = '') { */ function drop_query_params($s, $p) { + + $s = unescape_tags($s); + $parsed = parse_url($s); $query = ''; $query_args = null; @@ -172,7 +175,7 @@ function drop_query_params($s, $p) { $parsed['query'] = $query; } - return unparse_url($parsed); + return escape_tags(unparse_url($parsed)); } diff --git a/library/jquery.timeago.js b/library/jquery.timeago.js deleted file mode 100644 index f7b640149..000000000 --- a/library/jquery.timeago.js +++ /dev/null @@ -1,232 +0,0 @@ -/** - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * @name timeago - * @version 1.6.3 - * @requires jQuery v1.2.3+ - * @author Ryan McGeary - * @license MIT License - http://www.opensource.org/licenses/mit-license.php - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Copyright (c) 2008-2017, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) - */ - -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof module === 'object' && typeof module.exports === 'object') { - factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - $.timeago = function(timestamp) { - if (timestamp instanceof Date) { - return inWords(timestamp); - } else if (typeof timestamp === "string") { - return inWords($.timeago.parse(timestamp)); - } else if (typeof timestamp === "number") { - return inWords(new Date(timestamp)); - } else { - return inWords($.timeago.datetime(timestamp)); - } - }; - var $t = $.timeago; - - $.extend($.timeago, { - settings: { - refreshMillis: 60000, - allowPast: true, - allowFuture: false, - localeTitle: false, - cutoff: 0, - autoDispose: true, - strings: { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "ago", - suffixFromNow: "from now", - inPast: 'any moment now', - seconds: "less than a minute", - minute: "about a minute", - minutes: "%d minutes", - hour: "about an hour", - hours: "about %d hours", - day: "a day", - days: "%d days", - month: "about a month", - months: "%d months", - year: "about a year", - years: "%d years", - wordSeparator: " ", - numbers: [] - } - }, - - inWords: function(distanceMillis) { - if (!this.settings.allowPast && ! this.settings.allowFuture) { - throw 'timeago allowPast and allowFuture settings can not both be set to false.'; - } - - var $l = this.settings.strings; - var prefix = $l.prefixAgo; - var suffix = $l.suffixAgo; - if (this.settings.allowFuture) { - if (distanceMillis < 0) { - prefix = $l.prefixFromNow; - suffix = $l.suffixFromNow; - } - } - - if (!this.settings.allowPast && distanceMillis >= 0) { - return this.settings.strings.inPast; - } - - var seconds = Math.abs(distanceMillis) / 1000; - var minutes = seconds / 60; - var hours = minutes / 60; - var days = hours / 24; - var years = days / 365; - - function substitute(stringOrFunction, number) { - var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; - var value = ($l.numbers && $l.numbers[number]) || number; - return string.replace(/%d/i, value); - } - - var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || - seconds < 90 && substitute($l.minute, 1) || - minutes < 45 && substitute($l.minutes, Math.round(minutes)) || - minutes < 90 && substitute($l.hour, 1) || - hours < 24 && substitute($l.hours, Math.round(hours)) || - hours < 42 && substitute($l.day, 1) || - days < 30 && substitute($l.days, Math.round(days)) || - days < 45 && substitute($l.month, 1) || - days < 365 && substitute($l.months, Math.round(days / 30)) || - years < 1.5 && substitute($l.year, 1) || - substitute($l.years, Math.round(years)); - - var separator = $l.wordSeparator || ""; - if ($l.wordSeparator === undefined) { separator = " "; } - return $.trim([prefix, words, suffix].join(separator)); - }, - - parse: function(iso8601) { - var s = $.trim(iso8601); - s = s.replace(/\.\d+/,""); // remove milliseconds - s = s.replace(/-/,"/").replace(/-/,"/"); - s = s.replace(/T/," ").replace(/Z/," UTC"); - s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 - s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900 - return new Date(s); - }, - datetime: function(elem) { - var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); - return $t.parse(iso8601); - }, - isTime: function(elem) { - // jQuery's `is()` doesn't play well with HTML5 in IE - return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); - } - }); - - // functions that can be called via $(el).timeago('action') - // init is default when no action is given - // functions are called with context of a single element - var functions = { - init: function() { - functions.dispose.call(this); - var refresh_el = $.proxy(refresh, this); - refresh_el(); - var $s = $t.settings; - if ($s.refreshMillis > 0) { - this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); - } - }, - update: function(timestamp) { - var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp); - $(this).data('timeago', { datetime: date }); - if ($t.settings.localeTitle) { - $(this).attr("title", date.toLocaleString()); - } - refresh.apply(this); - }, - updateFromDOM: function() { - $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) }); - refresh.apply(this); - }, - dispose: function () { - if (this._timeagoInterval) { - window.clearInterval(this._timeagoInterval); - this._timeagoInterval = null; - } - } - }; - - $.fn.timeago = function(action, options) { - var fn = action ? functions[action] : functions.init; - if (!fn) { - throw new Error("Unknown function name '"+ action +"' for timeago"); - } - // each over objects here and call the requested function - this.each(function() { - fn.call(this, options); - }); - return this; - }; - - function refresh() { - var $s = $t.settings; - - //check if it's still visible - if ($s.autoDispose && !$.contains(document.documentElement,this)) { - //stop if it has been removed - $(this).timeago("dispose"); - return this; - } - - var data = prepareData(this); - - if (!isNaN(data.datetime)) { - if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) { - $(this).text(inWords(data.datetime)); - } else { - if ($(this).attr('title').length > 0) { - $(this).text($(this).attr('title')); - } - } - } - return this; - } - - function prepareData(element) { - element = $(element); - if (!element.data("timeago")) { - element.data("timeago", { datetime: $t.datetime(element) }); - var text = $.trim(element.text()); - if ($t.settings.localeTitle) { - element.attr("title", element.data('timeago').datetime.toLocaleString()); - } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { - element.attr("title", text); - } - } - return element.data("timeago"); - } - - function inWords(date) { - return $t.inWords(distance(date)); - } - - function distance(date) { - return (new Date().getTime() - date.getTime()); - } - - // fix for IE6 suckage - document.createElement("abbr"); - document.createElement("time"); -})); diff --git a/library/openid/README b/library/openid/README new file mode 100644 index 000000000..799b452ac --- /dev/null +++ b/library/openid/README @@ -0,0 +1,49 @@ +This class provides a simple interface for OpenID (1.1 and 2.0) authentication. +Supports Yadis discovery. + +The authentication process is stateless/dumb. + +Usage: +Sign-on with OpenID is a two step process: +Step one is authentication with the provider: +<code> +$openid = new LightOpenID('my-host.example.org'); +$openid->identity = 'ID supplied by user'; +header('Location: ' . $openid->authUrl()); +</code> + +The provider then sends various parameters via GET, one of them is openid_mode. +Step two is verification: +<code> +if ($this->data['openid_mode']) { + $openid = new LightOpenID('my-host.example.org'); + echo $openid->validate() ? 'Logged in.' : 'Failed'; +} +</code> + * +Change the 'my-host.example.org' to your domain name. Do NOT use $_SERVER['HTTP_HOST'] +for that, unless you know what you are doing. + * +Optionally, you can set $returnUrl and $realm (or $trustRoot, which is an alias). +The default values for those are: +$openid->realm = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST']; +$openid->returnUrl = $openid->realm . $_SERVER['REQUEST_URI']; +If you don't know their meaning, refer to any openid tutorial, or specification. Or just guess. + * +AX and SREG extensions are supported. +To use them, specify $openid->required and/or $openid->optional before calling $openid->authUrl(). +These are arrays, with values being AX schema paths (the 'path' part of the URL). +For example: + $openid->required = array('namePerson/friendly', 'contact/email'); + $openid->optional = array('namePerson/first'); +If the server supports only SREG or OpenID 1.1, these are automaticaly +mapped to SREG names, so that user doesn't have to know anything about the server. + * +To get the values, use $openid->getAttributes(). + * +The library requires PHP >= 5.1.2 with curl or http/https stream wrappers enabled. +@author Mewp +@contributors Brice http://github.com/brice/ +@copyright Copyright (c) 2010, Mewp +@copyright Copyright (c) 2010, Brice +@license http://www.opensource.org/licenses/mit-license.php MIT
\ No newline at end of file diff --git a/library/openid/example-google.php b/library/openid/example-google.php new file mode 100644 index 000000000..f23f2cc48 --- /dev/null +++ b/library/openid/example-google.php @@ -0,0 +1,24 @@ +<?php +# Logging in with Google accounts requires setting special identity, so this example shows how to do it. +require 'openid.php'; +try { + # Change 'localhost' to your domain name. + $openid = new LightOpenID('localhost'); + if(!$openid->mode) { + if(isset($_GET['login'])) { + $openid->identity = 'https://www.google.com/accounts/o8/id'; + header('Location: ' . $openid->authUrl()); + } +?> +<form action="?login" method="post"> + <button>Login with Google</button> +</form> +<?php + } elseif($openid->mode == 'cancel') { + echo 'User has canceled authentication!'; + } else { + echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.'; + } +} catch(ErrorException $e) { + echo $e->getMessage(); +} diff --git a/library/openid/example.php b/library/openid/example.php new file mode 100644 index 000000000..e4ab107fe --- /dev/null +++ b/library/openid/example.php @@ -0,0 +1,23 @@ +<?php +require 'openid.php'; +try { + # Change 'localhost' to your domain name. + $openid = new LightOpenID('localhost'); + if(!$openid->mode) { + if(isset($_POST['openid_identifier'])) { + $openid->identity = $_POST['openid_identifier']; + header('Location: ' . $openid->authUrl()); + } +?> +<form action="" method="post"> + OpenID: <input type="text" name="openid_identifier" /> <button>Submit</button> +</form> +<?php + } elseif($openid->mode == 'cancel') { + echo 'User has canceled authentication!'; + } else { + echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.'; + } +} catch(ErrorException $e) { + echo $e->getMessage(); +} diff --git a/library/openid/openid.php b/library/openid/openid.php new file mode 100644 index 000000000..00250c59d --- /dev/null +++ b/library/openid/openid.php @@ -0,0 +1,781 @@ +<?php +/** + * This class provides a simple interface for OpenID (1.1 and 2.0) authentication. + * Supports Yadis discovery. + * The authentication process is stateless/dumb. + * + * Usage: + * Sign-on with OpenID is a two step process: + * Step one is authentication with the provider: + * <code> + * $openid = new LightOpenID('my-host.example.org'); + * $openid->identity = 'ID supplied by user'; + * header('Location: ' . $openid->authUrl()); + * </code> + * The provider then sends various parameters via GET, one of them is openid_mode. + * Step two is verification: + * <code> + * if ($this->data['openid_mode']) { + * $openid = new LightOpenID('my-host.example.org'); + * echo $openid->validate() ? 'Logged in.' : 'Failed'; + * } + * </code> + * + * Change the 'my-host.example.org' to your domain name. Do NOT use $_SERVER['HTTP_HOST'] + * for that, unless you know what you are doing. + * + * Optionally, you can set $returnUrl and $realm (or $trustRoot, which is an alias). + * The default values for those are: + * $openid->realm = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST']; + * $openid->returnUrl = $openid->realm . $_SERVER['REQUEST_URI']; + * If you don't know their meaning, refer to any openid tutorial, or specification. Or just guess. + * + * AX and SREG extensions are supported. + * To use them, specify $openid->required and/or $openid->optional before calling $openid->authUrl(). + * These are arrays, with values being AX schema paths (the 'path' part of the URL). + * For example: + * $openid->required = array('namePerson/friendly', 'contact/email'); + * $openid->optional = array('namePerson/first'); + * If the server supports only SREG or OpenID 1.1, these are automaticaly + * mapped to SREG names, so that user doesn't have to know anything about the server. + * + * To get the values, use $openid->getAttributes(). + * + * + * The library requires PHP >= 5.1.2 with curl or http/https stream wrappers enabled. + * @author Mewp + * @copyright Copyright (c) 2010, Mewp + * @license http://www.opensource.org/licenses/mit-license.php MIT + */ +class LightOpenID +{ + public $returnUrl + , $required = array() + , $optional = array() + , $verify_peer = null + , $capath = null + , $cainfo = null + , $data; + private $identity, $claimed_id; + protected $server, $version, $trustRoot, $aliases, $identifier_select = false + , $ax = false, $sreg = false, $setup_url = null; + static protected $ax_to_sreg = array( + 'namePerson/friendly' => 'nickname', + 'contact/email' => 'email', + 'namePerson' => 'fullname', + 'birthDate' => 'dob', + 'person/gender' => 'gender', + 'contact/postalCode/home' => 'postcode', + 'contact/country/home' => 'country', + 'pref/language' => 'language', + 'pref/timezone' => 'timezone', + ); + + function __construct($host) + { + $this->trustRoot = (strpos($host, '://') ? $host : 'http://' . $host); + if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') + || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) + && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') + ) { + $this->trustRoot = (strpos($host, '://') ? $host : 'https://' . $host); + } + + if(($host_end = strpos($this->trustRoot, '/', 8)) !== false) { + $this->trustRoot = substr($this->trustRoot, 0, $host_end); + } + + $uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?'); + $this->returnUrl = $this->trustRoot . $uri; + + $this->data = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET; + + if(!function_exists('curl_init') && !in_array('https', stream_get_wrappers())) { + throw new ErrorException('You must have either https wrappers or curl enabled.'); + } + } + + function __set($name, $value) + { + switch ($name) { + case 'identity': + if (strlen($value = trim((String) $value))) { + if (preg_match('#^xri:/*#i', $value, $m)) { + $value = substr($value, strlen($m[0])); + } elseif (!preg_match('/^(?:[=@+\$!\(]|https?:)/i', $value)) { + $value = "http://$value"; + } + if (preg_match('#^https?://[^/]+$#i', $value, $m)) { + $value .= '/'; + } + } + $this->$name = $this->claimed_id = $value; + break; + case 'trustRoot': + case 'realm': + $this->trustRoot = trim($value); + } + } + + function __get($name) + { + switch ($name) { + case 'identity': + # We return claimed_id instead of identity, + # because the developer should see the claimed identifier, + # i.e. what he set as identity, not the op-local identifier (which is what we verify) + return $this->claimed_id; + case 'trustRoot': + case 'realm': + return $this->trustRoot; + case 'mode': + return empty($this->data['openid_mode']) ? null : $this->data['openid_mode']; + } + } + + /** + * Checks if the server specified in the url exists. + * + * @param $url url to check + * @return true, if the server exists; false otherwise + */ + function hostExists($url) + { + if (strpos($url, '/') === false) { + $server = $url; + } else { + $server = @parse_url($url, PHP_URL_HOST); + } + + if (!$server) { + return false; + } + + return !!gethostbynamel($server); + } + + protected function request_curl($url, $method='GET', $params=array()) + { + $params = http_build_query($params, '', '&'); + $curl = curl_init($url . ($method == 'GET' && $params ? '?' . $params : '')); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_HEADER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/xrds+xml, */*')); + + if($this->verify_peer !== null) { + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verify_peer); + if($this->capath) { + curl_setopt($curl, CURLOPT_CAPATH, $this->capath); + } + + if($this->cainfo) { + curl_setopt($curl, CURLOPT_CAINFO, $this->cainfo); + } + } + + if ($method == 'POST') { + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $params); + } elseif ($method == 'HEAD') { + curl_setopt($curl, CURLOPT_HEADER, true); + curl_setopt($curl, CURLOPT_NOBODY, true); + } else { + curl_setopt($curl, CURLOPT_HTTPGET, true); + } + $response = curl_exec($curl); + + if($method == 'HEAD') { + $headers = array(); + foreach(explode("\n", $response) as $header) { + $pos = strpos($header,':'); + $name = strtolower(trim(substr($header, 0, $pos))); + $headers[$name] = trim(substr($header, $pos+1)); + } + + # Updating claimed_id in case of redirections. + $effective_url = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); + if($effective_url != $url) { + $this->identity = $this->claimed_id = $effective_url; + } + + return $headers; + } + + if (curl_errno($curl)) { + throw new ErrorException(curl_error($curl), curl_errno($curl)); + } + + return $response; + } + + protected function request_streams($url, $method='GET', $params=array()) + { + if(!$this->hostExists($url)) { + throw new ErrorException("Could not connect to $url.", 404); + } + + $params = http_build_query($params, '', '&'); + switch($method) { + case 'GET': + $opts = array( + 'http' => array( + 'method' => 'GET', + 'header' => 'Accept: application/xrds+xml, */*', + 'ignore_errors' => true, + ), 'ssl' => array( + 'CN_match' => parse_url($url, PHP_URL_HOST), + ), + ); + $url = $url . ($params ? '?' . $params : ''); + break; + case 'POST': + $opts = array( + 'http' => array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => $params, + 'ignore_errors' => true, + ), 'ssl' => array( + 'CN_match' => parse_url($url, PHP_URL_HOST), + ), + ); + break; + case 'HEAD': + # We want to send a HEAD request, + # but since get_headers doesn't accept $context parameter, + # we have to change the defaults. + $default = stream_context_get_options(stream_context_get_default()); + stream_context_get_default( + array( + 'http' => array( + 'method' => 'HEAD', + 'header' => 'Accept: application/xrds+xml, */*', + 'ignore_errors' => true, + ), 'ssl' => array( + 'CN_match' => parse_url($url, PHP_URL_HOST), + ), + ) + ); + + $url = $url . ($params ? '?' . $params : ''); + $headers_tmp = get_headers ($url); + if(!$headers_tmp) { + return array(); + } + + # Parsing headers. + $headers = array(); + foreach($headers_tmp as $header) { + $pos = strpos($header,':'); + $name = strtolower(trim(substr($header, 0, $pos))); + $headers[$name] = trim(substr($header, $pos+1)); + + # Following possible redirections. The point is just to have + # claimed_id change with them, because get_headers() will + # follow redirections automatically. + # We ignore redirections with relative paths. + # If any known provider uses them, file a bug report. + if($name == 'location') { + if(strpos($headers[$name], 'http') === 0) { + $this->identity = $this->claimed_id = $headers[$name]; + } elseif($headers[$name][0] == '/') { + $parsed_url = parse_url($this->claimed_id); + $this->identity = + $this->claimed_id = $parsed_url['scheme'] . '://' + . $parsed_url['host'] + . $headers[$name]; + } + } + } + + # And restore them. + stream_context_get_default($default); + return $headers; + } + + if($this->verify_peer) { + $opts['ssl'] += array( + 'verify_peer' => true, + 'capath' => $this->capath, + 'cafile' => $this->cainfo, + ); + } + + $context = stream_context_create ($opts); + + return file_get_contents($url, false, $context); + } + + protected function request($url, $method='GET', $params=array()) + { + if (function_exists('curl_init') + && (!in_array('https', stream_get_wrappers()) || !ini_get('safe_mode') && !ini_get('open_basedir')) + ) { + return $this->request_curl($url, $method, $params); + } + return $this->request_streams($url, $method, $params); + } + + protected function build_url($url, $parts) + { + if (isset($url['query'], $parts['query'])) { + $parts['query'] = $url['query'] . '&' . $parts['query']; + } + + $url = $parts + $url; + $url = $url['scheme'] . '://' + . (empty($url['username'])?'' + :(empty($url['password'])? "{$url['username']}@" + :"{$url['username']}:{$url['password']}@")) + . $url['host'] + . (empty($url['port'])?'':":{$url['port']}") + . (empty($url['path'])?'':$url['path']) + . (empty($url['query'])?'':"?{$url['query']}") + . (empty($url['fragment'])?'':"#{$url['fragment']}"); + return $url; + } + + /** + * Helper function used to scan for <meta>/<link> tags and extract information + * from them + */ + protected function htmlTag($content, $tag, $attrName, $attrValue, $valueName) + { + preg_match_all("#<{$tag}[^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*$valueName=['\"](.+?)['\"][^>]*/?>#i", $content, $matches1); + preg_match_all("#<{$tag}[^>]*$valueName=['\"](.+?)['\"][^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*/?>#i", $content, $matches2); + + $result = array_merge($matches1[1], $matches2[1]); + return empty($result)?false:$result[0]; + } + + /** + * Performs Yadis and HTML discovery. Normally not used. + * @param $url Identity URL. + * @return String OP Endpoint (i.e. OpenID provider address). + * @throws ErrorException + */ + function discover($url) + { + if (!$url) throw new ErrorException('No identity supplied.'); + # Use xri.net proxy to resolve i-name identities + if (!preg_match('#^https?:#', $url)) { + $url = "https://xri.net/$url"; + } + + # We save the original url in case of Yadis discovery failure. + # It can happen when we'll be lead to an XRDS document + # which does not have any OpenID2 services. + $originalUrl = $url; + + # A flag to disable yadis discovery in case of failure in headers. + $yadis = true; + + # We'll jump a maximum of 5 times, to avoid endless redirections. + for ($i = 0; $i < 5; $i ++) { + if ($yadis) { + $headers = $this->request($url, 'HEAD'); + + $next = false; + if (isset($headers['x-xrds-location'])) { + $url = $this->build_url(parse_url($url), parse_url(trim($headers['x-xrds-location']))); + $next = true; + } + + if (isset($headers['content-type']) + && (strpos($headers['content-type'], 'application/xrds+xml') !== false + || strpos($headers['content-type'], 'text/xml') !== false) + ) { + # Apparently, some providers return XRDS documents as text/html. + # While it is against the spec, allowing this here shouldn't break + # compatibility with anything. + # --- + # Found an XRDS document, now let's find the server, and optionally delegate. + $content = $this->request($url, 'GET'); + + preg_match_all('#<Service.*?>(.*?)</Service>#s', $content, $m); + foreach($m[1] as $content) { + $content = ' ' . $content; # The space is added, so that strpos doesn't return 0. + + # OpenID 2 + $ns = preg_quote('http://specs.openid.net/auth/2.0/'); + if(preg_match('#<Type>\s*'.$ns.'(server|signon)\s*</Type>#s', $content, $type)) { + if ($type[1] == 'server') $this->identifier_select = true; + + preg_match('#<URI.*?>(.*)</URI>#', $content, $server); + preg_match('#<(Local|Canonical)ID>(.*)</\1ID>#', $content, $delegate); + if (empty($server)) { + return false; + } + # Does the server advertise support for either AX or SREG? + $this->ax = (bool) strpos($content, '<Type>http://openid.net/srv/ax/1.0</Type>'); + $this->sreg = strpos($content, '<Type>http://openid.net/sreg/1.0</Type>') + || strpos($content, '<Type>http://openid.net/extensions/sreg/1.1</Type>'); + + $server = $server[1]; + if (isset($delegate[2])) $this->identity = trim($delegate[2]); + $this->version = 2; + + $this->server = $server; + return $server; + } + + # OpenID 1.1 + $ns = preg_quote('http://openid.net/signon/1.1'); + if (preg_match('#<Type>\s*'.$ns.'\s*</Type>#s', $content)) { + + preg_match('#<URI.*?>(.*)</URI>#', $content, $server); + preg_match('#<.*?Delegate>(.*)</.*?Delegate>#', $content, $delegate); + if (empty($server)) { + return false; + } + # AX can be used only with OpenID 2.0, so checking only SREG + $this->sreg = strpos($content, '<Type>http://openid.net/sreg/1.0</Type>') + || strpos($content, '<Type>http://openid.net/extensions/sreg/1.1</Type>'); + + $server = $server[1]; + if (isset($delegate[1])) $this->identity = $delegate[1]; + $this->version = 1; + + $this->server = $server; + return $server; + } + } + + $next = true; + $yadis = false; + $url = $originalUrl; + $content = null; + break; + } + if ($next) continue; + + # There are no relevant information in headers, so we search the body. + $content = $this->request($url, 'GET'); + $location = $this->htmlTag($content, 'meta', 'http-equiv', 'X-XRDS-Location', 'content'); + if ($location) { + $url = $this->build_url(parse_url($url), parse_url($location)); + continue; + } + } + + if (!$content) $content = $this->request($url, 'GET'); + + # At this point, the YADIS Discovery has failed, so we'll switch + # to openid2 HTML discovery, then fallback to openid 1.1 discovery. + $server = $this->htmlTag($content, 'link', 'rel', 'openid2.provider', 'href'); + $delegate = $this->htmlTag($content, 'link', 'rel', 'openid2.local_id', 'href'); + $this->version = 2; + + if (!$server) { + # The same with openid 1.1 + $server = $this->htmlTag($content, 'link', 'rel', 'openid.server', 'href'); + $delegate = $this->htmlTag($content, 'link', 'rel', 'openid.delegate', 'href'); + $this->version = 1; + } + + if ($server) { + # We found an OpenID2 OP Endpoint + if ($delegate) { + # We have also found an OP-Local ID. + $this->identity = $delegate; + } + $this->server = $server; + return $server; + } + + throw new ErrorException("No OpenID Server found at $url", 404); + } + throw new ErrorException('Endless redirection!', 500); + } + + protected function sregParams() + { + $params = array(); + # We always use SREG 1.1, even if the server is advertising only support for 1.0. + # That's because it's fully backwards compatibile with 1.0, and some providers + # advertise 1.0 even if they accept only 1.1. One such provider is myopenid.com + $params['openid.ns.sreg'] = 'http://openid.net/extensions/sreg/1.1'; + if ($this->required) { + $params['openid.sreg.required'] = array(); + foreach ($this->required as $required) { + if (!isset(self::$ax_to_sreg[$required])) continue; + $params['openid.sreg.required'][] = self::$ax_to_sreg[$required]; + } + $params['openid.sreg.required'] = implode(',', $params['openid.sreg.required']); + } + + if ($this->optional) { + $params['openid.sreg.optional'] = array(); + foreach ($this->optional as $optional) { + if (!isset(self::$ax_to_sreg[$optional])) continue; + $params['openid.sreg.optional'][] = self::$ax_to_sreg[$optional]; + } + $params['openid.sreg.optional'] = implode(',', $params['openid.sreg.optional']); + } + return $params; + } + + protected function axParams() + { + $params = array(); + if ($this->required || $this->optional) { + $params['openid.ns.ax'] = 'http://openid.net/srv/ax/1.0'; + $params['openid.ax.mode'] = 'fetch_request'; + $this->aliases = array(); + $counts = array(); + $required = array(); + $optional = array(); + foreach (array('required','optional') as $type) { + foreach ($this->$type as $alias => $field) { + if (is_int($alias)) $alias = strtr($field, '/', '_'); + $this->aliases[$alias] = 'http://axschema.org/' . $field; + if (empty($counts[$alias])) $counts[$alias] = 0; + $counts[$alias] += 1; + ${$type}[] = $alias; + } + } + foreach ($this->aliases as $alias => $ns) { + $params['openid.ax.type.' . $alias] = $ns; + } + foreach ($counts as $alias => $count) { + if ($count == 1) continue; + $params['openid.ax.count.' . $alias] = $count; + } + + # Don't send empty ax.requied and ax.if_available. + # Google and possibly other providers refuse to support ax when one of these is empty. + if($required) { + $params['openid.ax.required'] = implode(',', $required); + } + if($optional) { + $params['openid.ax.if_available'] = implode(',', $optional); + } + } + return $params; + } + + protected function authUrl_v1($immediate) + { + $returnUrl = $this->returnUrl; + # If we have an openid.delegate that is different from our claimed id, + # we need to somehow preserve the claimed id between requests. + # The simplest way is to just send it along with the return_to url. + if($this->identity != $this->claimed_id) { + $returnUrl .= (strpos($returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->claimed_id; + } + + $params = array( + 'openid.return_to' => $returnUrl, + 'openid.mode' => $immediate ? 'checkid_immediate' : 'checkid_setup', + 'openid.identity' => $this->identity, + 'openid.trust_root' => $this->trustRoot, + ) + $this->sregParams(); + + return $this->build_url(parse_url($this->server) + , array('query' => http_build_query($params, '', '&'))); + } + + protected function authUrl_v2($immediate) + { + $params = array( + 'openid.ns' => 'http://specs.openid.net/auth/2.0', + 'openid.mode' => $immediate ? 'checkid_immediate' : 'checkid_setup', + 'openid.return_to' => $this->returnUrl, + 'openid.realm' => $this->trustRoot, + ); + if ($this->ax) { + $params += $this->axParams(); + } + if ($this->sreg) { + $params += $this->sregParams(); + } + if (!$this->ax && !$this->sreg) { + # If OP doesn't advertise either SREG, nor AX, let's send them both + # in worst case we don't get anything in return. + $params += $this->axParams() + $this->sregParams(); + } + + if ($this->identifier_select) { + $params['openid.identity'] = $params['openid.claimed_id'] + = 'http://specs.openid.net/auth/2.0/identifier_select'; + } else { + $params['openid.identity'] = $this->identity; + $params['openid.claimed_id'] = $this->claimed_id; + } + + return $this->build_url(parse_url($this->server) + , array('query' => http_build_query($params, '', '&'))); + } + + /** + * Returns authentication url. Usually, you want to redirect your user to it. + * @return String The authentication url. + * @param String $select_identifier Whether to request OP to select identity for an user in OpenID 2. Does not affect OpenID 1. + * @throws ErrorException + */ + function authUrl($immediate = false) + { + if ($this->setup_url && !$immediate) return $this->setup_url; + if (!$this->server) $this->discover($this->identity); + + if ($this->version == 2) { + return $this->authUrl_v2($immediate); + } + return $this->authUrl_v1($immediate); + } + + /** + * Performs OpenID verification with the OP. + * @return Bool Whether the verification was successful. + * @throws ErrorException + */ + function validate() + { + # If the request was using immediate mode, a failure may be reported + # by presenting user_setup_url (for 1.1) or reporting + # mode 'setup_needed' (for 2.0). Also catching all modes other than + # id_res, in order to avoid throwing errors. + if(isset($this->data['openid_user_setup_url'])) { + $this->setup_url = $this->data['openid_user_setup_url']; + return false; + } + if($this->mode != 'id_res') { + return false; + } + + $this->claimed_id = isset($this->data['openid_claimed_id'])?$this->data['openid_claimed_id']:$this->data['openid_identity']; + $params = array( + 'openid.assoc_handle' => $this->data['openid_assoc_handle'], + 'openid.signed' => $this->data['openid_signed'], + 'openid.sig' => $this->data['openid_sig'], + ); + + if (isset($this->data['openid_ns'])) { + # We're dealing with an OpenID 2.0 server, so let's set an ns + # Even though we should know location of the endpoint, + # we still need to verify it by discovery, so $server is not set here + $params['openid.ns'] = 'http://specs.openid.net/auth/2.0'; + } elseif (isset($this->data['openid_claimed_id']) + && $this->data['openid_claimed_id'] != $this->data['openid_identity'] + ) { + # If it's an OpenID 1 provider, and we've got claimed_id, + # we have to append it to the returnUrl, like authUrl_v1 does. + $this->returnUrl .= (strpos($this->returnUrl, '?') ? '&' : '?') + . 'openid.claimed_id=' . $this->claimed_id; + } + + if ($this->data['openid_return_to'] != $this->returnUrl) { + # The return_to url must match the url of current request. + # I'm assuing that noone will set the returnUrl to something that doesn't make sense. + return false; + } + + $server = $this->discover($this->claimed_id); + + foreach (explode(',', $this->data['openid_signed']) as $item) { + # Checking whether magic_quotes_gpc is turned on, because + # the function may fail if it is. For example, when fetching + # AX namePerson, it might containg an apostrophe, which will be escaped. + # In such case, validation would fail, since we'd send different data than OP + # wants to verify. stripslashes() should solve that problem, but we can't + # use it when magic_quotes is off. + $value = $this->data['openid_' . str_replace('.','_',$item)]; + $params['openid.' . $item] = get_magic_quotes_gpc() ? stripslashes($value) : $value; + + } + + $params['openid.mode'] = 'check_authentication'; + + $response = $this->request($server, 'POST', $params); + + return preg_match('/is_valid\s*:\s*true/i', $response); + } + + protected function getAxAttributes() + { + $alias = null; + if (isset($this->data['openid_ns_ax']) + && $this->data['openid_ns_ax'] != 'http://openid.net/srv/ax/1.0' + ) { # It's the most likely case, so we'll check it before + $alias = 'ax'; + } else { + # 'ax' prefix is either undefined, or points to another extension, + # so we search for another prefix + foreach ($this->data as $key => $val) { + if (substr($key, 0, strlen('openid_ns_')) == 'openid_ns_' + && $val == 'http://openid.net/srv/ax/1.0' + ) { + $alias = substr($key, strlen('openid_ns_')); + break; + } + } + } + if (!$alias) { + # An alias for AX schema has not been found, + # so there is no AX data in the OP's response + return array(); + } + + $attributes = array(); + foreach (explode(',', $this->data['openid_signed']) as $key) { + $keyMatch = $alias . '.value.'; + if (substr($key, 0, strlen($keyMatch)) != $keyMatch) { + continue; + } + $key = substr($key, strlen($keyMatch)); + if (!isset($this->data['openid_' . $alias . '_type_' . $key])) { + # OP is breaking the spec by returning a field without + # associated ns. This shouldn't happen, but it's better + # to check, than cause an E_NOTICE. + continue; + } + $value = $this->data['openid_' . $alias . '_value_' . $key]; + $key = substr($this->data['openid_' . $alias . '_type_' . $key], + strlen('http://axschema.org/')); + + $attributes[$key] = $value; + } + return $attributes; + } + + protected function getSregAttributes() + { + $attributes = array(); + $sreg_to_ax = array_flip(self::$ax_to_sreg); + foreach (explode(',', $this->data['openid_signed']) as $key) { + $keyMatch = 'sreg.'; + if (substr($key, 0, strlen($keyMatch)) != $keyMatch) { + continue; + } + $key = substr($key, strlen($keyMatch)); + if (!isset($sreg_to_ax[$key])) { + # The field name isn't part of the SREG spec, so we ignore it. + continue; + } + $attributes[$sreg_to_ax[$key]] = $this->data['openid_sreg_' . $key]; + } + return $attributes; + } + + /** + * Gets AX/SREG attributes provided by OP. should be used only after successful validaton. + * Note that it does not guarantee that any of the required/optional parameters will be present, + * or that there will be no other attributes besides those specified. + * In other words. OP may provide whatever information it wants to. + * * SREG names will be mapped to AX names. + * * @return Array Array of attributes with keys being the AX schema names, e.g. 'contact/email' + * @see http://www.axschema.org/types/ + */ + function getAttributes() + { + if (isset($this->data['openid_ns']) + && $this->data['openid_ns'] == 'http://specs.openid.net/auth/2.0' + ) { # OpenID 2.0 + # We search for both AX and SREG attributes, with AX taking precedence. + return $this->getAxAttributes() + $this->getSregAttributes(); + } + return $this->getSregAttributes(); + } +} diff --git a/library/openid/provider/example-mysql.php b/library/openid/provider/example-mysql.php new file mode 100644 index 000000000..574e3c811 --- /dev/null +++ b/library/openid/provider/example-mysql.php @@ -0,0 +1,194 @@ +<?php +/** + * This example shows several things: + * - How a setup interface should look like. + * - How to use a mysql table for authentication + * - How to store associations in mysql table, instead of php sessions. + * - How to store realm authorizations. + * - How to send AX/SREG parameters. + * For the example to work, you need to create the necessary tables: +CREATE TABLE Users ( + id INT NOT NULL auto_increment PRIMARY KEY, + login VARCHAR(32) NOT NULL, + password CHAR(40) NOT NULL, + firstName VARCHAR(32) NOT NULL, + lastName VARCHAR(32) NOT NULL +); + +CREATE TABLE AllowedSites ( + user INT NOT NULL, + realm TEXT NOT NULL, + attributes TEXT NOT NULL, + INDEX(user) +); + +CREATE TABLE Associations ( + id INT NOT NULL PRIMARY KEY, + data TEXT NOT NULL +); + * + * This is only an example. Don't use it in your code as-is. + * It has several security flaws, which you shouldn't copy (like storing plaintext login and password in forms). + * + * This setup could be very easily flooded with many associations, + * since non-private ones aren't automatically deleted. + * You could prevent this by storing a date of association and removing old ones, + * or by setting $this->dh = false; + * However, the latter one would disable stateful mode, unless connecting via HTTPS. + */ +require 'provider.php'; + +mysql_connect(); +mysql_select_db('test'); + +function getUserData($handle=null) +{ + if(isset($_POST['login'],$_POST['password'])) { + $login = mysql_real_escape_string($_POST['login']); + $password = sha1($_POST['password']); + $q = mysql_query("SELECT * FROM Users WHERE login = '$login' AND password = '$password'"); + if($data = mysql_fetch_assoc($q)) { + return $data; + } + if($handle) { + echo 'Wrong login/password.'; + } + } + if($handle) { + ?> + <form action="" method="post"> + <input type="hidden" name="openid.assoc_handle" value="<?php echo $handle?>"> + Login: <input type="text" name="login"><br> + Password: <input type="password" name="password"><br> + <button>Submit</button> + </form> + <?php + die(); + } +} + +class MysqlProvider extends LightOpenIDProvider +{ + private $attrMap = array( + 'namePerson/first' => 'First name', + 'namePerson/last' => 'Last name', + 'namePerson/friendly' => 'Nickname (login)' + ); + + private $attrFieldMap = array( + 'namePerson/first' => 'firstName', + 'namePerson/last' => 'lastName', + 'namePerson/friendly' => 'login' + ); + + function setup($identity, $realm, $assoc_handle, $attributes) + { + $data = getUserData($assoc_handle); + echo '<form action="" method="post">' + . '<input type="hidden" name="openid.assoc_handle" value="' . $assoc_handle . '">' + . '<input type="hidden" name="login" value="' . $_POST['login'] .'">' + . '<input type="hidden" name="password" value="' . $_POST['password'] .'">' + . "<b>$realm</b> wishes to authenticate you."; + if($attributes['required'] || $attributes['optional']) { + echo " It also requests following information (required fields marked with *):" + . '<ul>'; + + foreach($attributes['required'] as $attr) { + if(isset($this->attrMap[$attr])) { + echo '<li>' + . '<input type="checkbox" name="attributes[' . $attr . ']"> ' + . $this->attrMap[$attr] . '(*)</li>'; + } + } + + foreach($attributes['optional'] as $attr) { + if(isset($this->attrMap[$attr])) { + echo '<li>' + . '<input type="checkbox" name="attributes[' . $attr . ']"> ' + . $this->attrMap[$attr] . '</li>'; + } + } + echo '</ul>'; + } + echo '<br>' + . '<button name="once">Allow once</button> ' + . '<button name="always">Always allow</button> ' + . '<button name="cancel">cancel</button> ' + . '</form>'; + } + + function checkid($realm, &$attributes) + { + if(isset($_POST['cancel'])) { + $this->cancel(); + } + + $data = getUserData(); + if(!$data) { + return false; + } + $realm = mysql_real_escape_string($realm); + $q = mysql_query("SELECT attributes FROM AllowedSites WHERE user = '{$data['id']}' AND realm = '$realm'"); + + $attrs = array(); + if($attrs = mysql_fetch_row($q)) { + $attrs = explode(',', $attributes[0]); + } elseif(isset($_POST['attributes'])) { + $attrs = array_keys($_POST['attributes']); + } elseif(!isset($_POST['once']) && !isset($_POST['always'])) { + return false; + } + + $attributes = array(); + foreach($attrs as $attr) { + if(isset($this->attrFieldMap[$attr])) { + $attributes[$attr] = $data[$this->attrFieldMap[$attr]]; + } + } + + if(isset($_POST['always'])) { + $attrs = mysql_real_escape_string(implode(',', array_keys($attributes))); + mysql_query("REPLACE INTO AllowedSites VALUES('{$data['id']}', '$realm', '$attrs')"); + } + + return $this->serverLocation . '?' . $data['login']; + } + + function assoc_handle() + { + # We generate an integer assoc handle, because it's just faster to look up an integer later. + $q = mysql_query("SELECT MAX(id) FROM Associations"); + $result = mysql_fetch_row($q); + return $q[0]+1; + } + + function setAssoc($handle, $data) + { + $data = mysql_real_escape_string(serialize($data)); + mysql_query("REPLACE INTO Associations VALUES('$handle', '$data')"); + } + + function getAssoc($handle) + { + if(!is_numeric($handle)) { + return false; + } + $q = mysql_query("SELECT data FROM Associations WHERE id = '$handle'"); + $data = mysql_fetch_row($q); + if(!$data) { + return false; + } + return unserialize($data[0]); + } + + function delAssoc($handle) + { + if(!is_numeric($handle)) { + return false; + } + mysql_query("DELETE FROM Associations WHERE id = '$handle'"); + } + +} +$op = new MysqlProvider; +$op->server(); diff --git a/library/openid/provider/example.php b/library/openid/provider/example.php new file mode 100644 index 000000000..b8a4c24a9 --- /dev/null +++ b/library/openid/provider/example.php @@ -0,0 +1,53 @@ +<?php +/** + * This example shows how to create a basic provider usin HTTP Authentication. + * This is only an example. You shouldn't use it as-is in your code. + */ +require 'provider.php'; + +class BasicProvider extends LightOpenIDProvider +{ + public $select_id = true; + public $login = ''; + public $password = ''; + + function __construct() + { + parent::__construct(); + + # If we use select_id, we must disable it for identity pages, + # so that an RP can discover it and get proper data (i.e. without select_id) + if(isset($_GET['id'])) { + $this->select_id = false; + } + } + + function setup($identity, $realm, $assoc_handle, $attributes) + { + header('WWW-Authenticate: Basic realm="' . $this->data['openid_realm'] . '"'); + header('HTTP/1.0 401 Unauthorized'); + } + + function checkid($realm, &$attributes) + { + if(!isset($_SERVER['PHP_AUTH_USER'])) { + return false; + } + + if ($_SERVER['PHP_AUTH_USER'] == $this->login + && $_SERVER['PHP_AUTH_PW'] == $this->password + ) { + # Returning identity + # It can be any url that leads here, or to any other place that hosts + # an XRDS document pointing here. + return $this->serverLocation . '?id=' . $this->login; + } + + return false; + } + +} +$op = new BasicProvider; +$op->login = 'test'; +$op->password = 'test'; +$op->server(); diff --git a/library/openid/provider/provider.php b/library/openid/provider/provider.php new file mode 100644 index 000000000..a1a98d70b --- /dev/null +++ b/library/openid/provider/provider.php @@ -0,0 +1,845 @@ +<?php +/** + * Using this class, you can easily set up an OpenID Provider. + * It's independent of LightOpenID class. + * It requires either GMP or BCMath for session encryption, + * but will work without them (although either via SSL, or in stateless mode only). + * Also, it requires PHP >= 5.1.2 + * + * This is an alpha version, using it in production code is not recommended, + * until you are *sure* that it works and is secure. + * + * Please send me messages about your testing results + * (even if successful, so I know that it has been tested). + * Also, if you think there's a way to make it easier to use, tell me -- it's an alpha for a reason. + * Same thing applies to bugs in code, suggestions, + * and everything else you'd like to say about the library. + * + * There's no usage documentation here, see the examples. + * + * @author Mewp + * @copyright Copyright (c) 2010, Mewp + * @license http://www.opensource.org/licenses/mit-license.php MIT + */ +//ini_set('error_log','log'); +abstract class LightOpenIDProvider +{ + # URL-s to XRDS and server location. + public $xrdsLocation, $serverLocation; + + # Should we operate in server, or signon mode? + public $select_id = false; + + # Lifetime of an association. + protected $assoc_lifetime = 600; + + # Variables below are either set automatically, or are constant. + # ----- + # Can we support DH? + protected $dh = true; + protected $ns = 'http://specs.openid.net/auth/2.0'; + protected $data, $assoc; + + # Default DH parameters as defined in the specification. + protected $default_modulus; + protected $default_gen = 'Ag=='; + + # AX <-> SREG transform + protected $ax_to_sreg = array( + 'namePerson/friendly' => 'nickname', + 'contact/email' => 'email', + 'namePerson' => 'fullname', + 'birthDate' => 'dob', + 'person/gender' => 'gender', + 'contact/postalCode/home' => 'postcode', + 'contact/country/home' => 'country', + 'pref/language' => 'language', + 'pref/timezone' => 'timezone', + ); + + # Math + private $add, $mul, $pow, $mod, $div, $powmod; + # ----- + + # ------------------------------------------------------------------------ # + # Functions you probably want to implement when extending the class. + + /** + * Checks whether an user is authenticated. + * The function should determine what fields it wants to send to the RP, + * and put them in the $attributes array. + * @param Array $attributes + * @param String $realm Realm used for authentication. + * @return String OP-local identifier of an authenticated user, or an empty value. + */ + abstract function checkid($realm, &$attributes); + + /** + * Displays an user interface for inputting user's login and password. + * Attributes are always AX field namespaces, with stripped host part. + * For example, the $attributes array may be: + * array( 'required' => array('namePerson/friendly', 'contact/email'), + * 'optional' => array('pref/timezone', 'pref/language') + * @param String $identity Discovered identity string. May be used to extract login, unless using $this->select_id + * @param String $realm Realm used for authentication. + * @param String Association handle. must be sent as openid.assoc_handle in $_GET or $_POST in subsequent requests. + * @param Array User attributes requested by the RP. + */ + abstract function setup($identity, $realm, $assoc_handle, $attributes); + + /** + * Stores an association. + * If you want to use php sessions in your provider code, you have to replace it. + * @param String $handle Association handle -- should be used as a key. + * @param Array $assoc Association data. + */ + protected function setAssoc($handle, $assoc) + { + $oldSession = session_id(); + session_commit(); + session_id($assoc['handle']); + session_start(); + $_SESSION['assoc'] = $assoc; + session_commit(); + if($oldSession) { + session_id($oldSession); + session_start(); + } + } + + /** + * Retreives association data. + * If you want to use php sessions in your provider code, you have to replace it. + * @param String $handle Association handle. + * @return Array Association data. + */ + protected function getAssoc($handle) + { + $oldSession = session_id(); + session_commit(); + session_id($handle); + session_start(); + if(empty($_SESSION['assoc'])) { + return null; + } + return $_SESSION['assoc']; + session_commit(); + if($oldSession) { + session_id($oldSession); + session_start(); + } + } + + /** + * Deletes an association. + * If you want to use php sessions in your provider code, you have to replace it. + * @param String $handle Association handle. + */ + protected function delAssoc($handle) + { + $oldSession = session_id(); + session_commit(); + session_id($handle); + session_start(); + session_destroy(); + if($oldSession) { + session_id($oldSession); + session_start(); + } + } + + # ------------------------------------------------------------------------ # + # Functions that you might want to implement. + + /** + * Redirects the user to an url. + * @param String $location The url that the user will be redirected to. + */ + protected function redirect($location) + { + header('Location: ' . $location); + die(); + } + + /** + * Generates a new association handle. + * @return string + */ + protected function assoc_handle() + { + return sha1(microtime()); + } + + /** + * Generates a random shared secret. + * @return string + */ + protected function shared_secret($hash) + { + $length = 20; + if($hash == 'sha256') { + $length = 256; + } + + $secret = ''; + for($i = 0; $i < $length; $i++) { + $secret .= mt_rand(0,255); + } + + return $secret; + } + + /** + * Generates a private key. + * @param int $length Length of the key. + */ + protected function keygen($length) + { + $key = ''; + for($i = 1; $i < $length; $i++) { + $key .= mt_rand(0,9); + } + $key .= mt_rand(1,9); + + return $key; + } + + # ------------------------------------------------------------------------ # + # Functions that you probably shouldn't touch. + + function __construct() + { + $this->default_modulus = + 'ANz5OguIOXLsDhmYmsWizjEOHTdxfo2Vcbt2I3MYZuYe91ouJ4mLBX+YkcLiemOcPy' + . 'm2CBRYHNOyyjmG0mg3BVd9RcLn5S3IHHoXGHblzqdLFEi/368Ygo79JRnxTkXjgmY0' + . 'rxlJ5bU1zIKaSDuKdiI+XUkKJX8Fvf8W8vsixYOr'; + + $location = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' + . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $location = preg_replace('/\?.*/','',$location); + $this->serverLocation = $location; + $location .= (strpos($location, '?') ? '&' : '?') . 'xrds'; + $this->xrdsLocation = $location; + + $this->data = $_GET + $_POST; + + # We choose GMP if avaiable, and bcmath otherwise + if(function_exists('gmp_add')) { + $this->add = 'gmp_add'; + $this->mul = 'gmp_mul'; + $this->pow = 'gmp_pow'; + $this->mod = 'gmp_mod'; + $this->div = 'gmp_div'; + $this->powmod = 'gmp_powm'; + } elseif(function_exists('bcadd')) { + $this->add = 'bcadd'; + $this->mul = 'bcmul'; + $this->pow = 'bcpow'; + $this->mod = 'bcmod'; + $this->div = 'bcdiv'; + $this->powmod = 'bcpowmod'; + } else { + # If neither are avaiable, we can't use DH + $this->dh = false; + } + + # However, we do require the hash functions. + # They should be built-in anyway. + if(!function_exists('hash_algos')) { + $this->dh = false; + } + } + + /** + * Displays an XRDS document, or redirects to it. + * By default, it detects whether it should display or redirect automatically. + * @param bool|null $force When true, always display the document, when false always redirect. + */ + function xrds($force=null) + { + if($force) { + echo $this->xrdsContent(); + die(); + } elseif($force === false) { + header('X-XRDS-Location: '. $this->xrdsLocation); + return; + } + + if (isset($_GET['xrds']) + || (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/xrds+xml') !== false) + ) { + header('Content-Type: application/xrds+xml'); + echo $this->xrdsContent(); + die(); + } + + header('X-XRDS-Location: ' . $this->xrdsLocation); + } + + /** + * Returns the content of the XRDS document + * @return String The XRDS document. + */ + protected function xrdsContent() + { + $lines = array( + '<?xml version="1.0" encoding="UTF-8"?>', + '<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">', + '<XRD>', + ' <Service>', + ' <Type>' . $this->ns . '/' . ($this->select_id ? 'server' : 'signon') .'</Type>', + ' <URI>' . $this->serverLocation . '</URI>', + ' </Service>', + '</XRD>', + '</xrds:XRDS>' + ); + return implode("\n", $lines); + } + + /** + * Does everything that a provider has to -- in one function. + */ + function server() + { + if(isset($this->data['openid_assoc_handle'])) { + $this->assoc = $this->getAssoc($this->data['openid_assoc_handle']); + if(isset($this->assoc['data'])) { + # We have additional data stored for setup. + $this->data += $this->assoc['data']; + unset($this->assoc['data']); + } + } + + if (isset($this->data['openid_ns']) + && $this->data['openid_ns'] == $this->ns + ) { + if(!isset($this->data['openid_mode'])) $this->errorResponse(); + + switch($this->data['openid_mode']) + { + case 'checkid_immediate': + case 'checkid_setup': + $this->checkRealm(); + # We support AX xor SREG. + $attributes = $this->ax(); + if(!$attributes) { + $attributes = $this->sreg(); + } + + # Even if some user is authenticated, we need to know if it's + # the same one that want's to authenticate. + # Of course, if we use select_id, we accept any user. + if (($identity = $this->checkid($this->data['openid_realm'], $attrValues)) + && ($this->select_id || $identity == $this->data['openid_identity']) + ) { + $this->positiveResponse($identity, $attrValues); + } elseif($this->data['openid_mode'] == 'checkid_immediate') { + $this->redirect($this->response(array('openid.mode' => 'setup_needed'))); + } else { + if(!$this->assoc) { + $this->generateAssociation(); + $this->assoc['private'] = true; + } + $this->assoc['data'] = $this->data; + $this->setAssoc($this->assoc['handle'], $this->assoc); + $this->setup($this->data['openid_identity'], + $this->data['openid_realm'], + $this->assoc['handle'], + $attributes); + } + break; + case 'associate': + $this->associate(); + break; + case 'check_authentication': + $this->checkRealm(); + if($this->verify()) { + echo "ns:$this->ns\nis_valid:true"; + if(strpos($this->data['openid_signed'],'invalidate_handle') !== false) { + echo "\ninvalidate_handle:" . $this->data['openid_invalidate_handle']; + } + } else { + echo "ns:$this->ns\nis_valid:false"; + } + die(); + break; + default: + $this->errorResponse(); + } + } else { + $this->xrds(); + } + } + + protected function checkRealm() + { + if (!isset($this->data['openid_return_to'], $this->data['openid_realm'])) { + $this->errorResponse(); + } + + $realm = str_replace('\*', '[^/]', preg_quote($this->data['openid_realm'])); + if(!preg_match("#^$realm#", $this->data['openid_return_to'])) { + $this->errorResponse(); + } + } + + protected function ax() + { + # Namespace prefix that the fields must have. + $ns = 'http://axschema.org/'; + + # First, we must find out what alias is used for AX. + # Let's check the most likely one + $alias = null; + if (isset($this->data['openid_ns_ax']) + && $this->data['openid_ns_ax'] == 'http://openid.net/srv/ax/1.0' + ) { + $alias = 'ax'; + } else { + foreach($this->data as $name => $value) { + if ($value == 'http://openid.net/srv/ax/1.0' + && preg_match('/openid_ns_(.+)/', $name, $m) + ) { + $alias = $m[1]; + break; + } + } + } + + if(!$alias) { + return null; + } + + $fields = array(); + # Now, we must search again, this time for field aliases + foreach($this->data as $name => $value) { + if (strpos($name, 'openid_' . $alias . '_type') === false + || strpos($value, $ns) === false) { + continue; + } + + $name = substr($name, strlen('openid_' . $alias . '_type_')); + $value = substr($value, strlen($ns)); + + $fields[$name] = $value; + } + + # Then, we find out what fields are required and optional + $required = array(); + $if_available = array(); + foreach(array('required','if_available') as $type) { + if(empty($this->data["openid_{$alias}_{$type}"])) { + continue; + } + $attributes = explode(',', $this->data["openid_{$alias}_{$type}"]); + foreach($attributes as $attr) { + if(empty($fields[$attr])) { + # There is an undefined field here, so we ignore it. + continue; + } + + ${$type}[] = $fields[$attr]; + } + } + + $this->data['ax'] = true; + return array('required' => $required, 'optional' => $if_available); + } + + protected function sreg() + { + $sreg_to_ax = array_flip($this->ax_to_sreg); + + $attributes = array('required' => array(), 'optional' => array()); + + if (empty($this->data['openid_sreg_required']) + && empty($this->data['openid_sreg_optional']) + ) { + return $attributes; + } + + foreach(array('required', 'optional') as $type) { + foreach(explode(',',$this->data['openid_sreg_' . $type]) as $attr) { + if(empty($sreg_to_ax[$attr])) { + # Undefined attribute in SREG request. + # Shouldn't happen, but we check anyway. + continue; + } + + $attributes[$type][] = $sreg_to_ax[$attr]; + } + } + + return $attributes; + } + + /** + * Aids an RP in assertion verification. + * @return bool Information whether the verification suceeded. + */ + protected function verify() + { + # Firstly, we need to make sure that there's an association. + # Otherwise the verification will fail, + # because we've signed assoc_handle in the assertion + if(empty($this->assoc)) { + return false; + } + + # Next, we check that it's a private association, + # i.e. one made without RP input. + # Otherwise, the RP shouldn't ask us to verify. + if(empty($this->assoc['private'])) { + return false; + } + + # Now we have to check if the nonce is correct, to prevent replay attacks. + if($this->data['openid_response_nonce'] != $this->assoc['nonce']) { + return false; + } + + # Getting the signed fields for signature. + $sig = array(); + $signed = explode(',', $this->data['openid_signed']); + foreach($signed as $field) { + $name = strtr($field, '.', '_'); + if(!isset($this->data['openid_' . $name])) { + return false; + } + + $sig[$field] = $this->data['openid_' . $name]; + } + + # Computing the signature and checking if it matches. + $sig = $this->keyValueForm($sig); + if ($this->data['openid_sig'] != + base64_encode(hash_hmac($this->assoc['hash'], $sig, $this->assoc['mac'], true)) + ) { + return false; + } + + # Clearing the nonce, so that it won't be used again. + $this->assoc['nonce'] = null; + + if(empty($this->assoc['private'])) { + # Commiting changes to the association. + $this->setAssoc($this->assoc['handle'], $this->assoc); + } else { + # Private associations shouldn't be used again, se we can as well delete them. + $this->delAssoc($this->assoc['handle']); + } + + # Nothing has failed, so the verification was a success. + return true; + } + + /** + * Performs association with an RP. + */ + protected function associate() + { + # Rejecting no-encryption without TLS. + if(empty($_SERVER['HTTPS']) && $this->data['openid_session_type'] == 'no-encryption') { + $this->directErrorResponse(); + } + + # Checking whether we support DH at all. + if (!$this->dh && substr($this->data['openid_session_type'], 0, 2) == 'DH') { + $this->redirect($this->response(array( + 'openid.error' => 'DH not supported', + 'openid.error_code' => 'unsupported-type', + 'openid.session_type' => 'no-encryption' + ))); + } + + # Creating the association + $this->assoc = array(); + $this->assoc['hash'] = $this->data['openid_assoc_type'] == 'HMAC-SHA256' ? 'sha256' : 'sha1'; + $this->assoc['handle'] = $this->assoc_handle(); + + # Getting the shared secret + if($this->data['openid_session_type'] == 'no-encryption') { + $this->assoc['mac'] = base64_encode($this->shared_secret($this->assoc['hash'])); + } else { + $this->dh(); + } + + # Preparing the direct response... + $response = array( + 'ns' => $this->ns, + 'assoc_handle' => $this->assoc['handle'], + 'assoc_type' => $this->data['openid_assoc_type'], + 'session_type' => $this->data['openid_session_type'], + 'expires_in' => $this->assoc_lifetime + ); + + if(isset($this->assoc['dh_server_public'])) { + $response['dh_server_public'] = $this->assoc['dh_server_public']; + $response['enc_mac_key'] = $this->assoc['mac']; + } else { + $response['mac_key'] = $this->assoc['mac']; + } + + # ...and sending it. + echo $this->keyValueForm($response); + die(); + } + + /** + * Creates a private association. + */ + protected function generateAssociation() + { + $this->assoc = array(); + # We use sha1 by default. + $this->assoc['hash'] = 'sha1'; + $this->assoc['mac'] = $this->shared_secret('sha1'); + $this->assoc['handle'] = $this->assoc_handle(); + } + + /** + * Encrypts the MAC key using DH key exchange. + */ + protected function dh() + { + if(empty($this->data['openid_dh_modulus'])) { + $this->data['openid_dh_modulus'] = $this->default_modulus; + } + + if(empty($this->data['openid_dh_gen'])) { + $this->data['openid_dh_gen'] = $this->default_gen; + } + + if(empty($this->data['openid_dh_consumer_public'])) { + $this->directErrorResponse(); + } + + $modulus = $this->b64dec($this->data['openid_dh_modulus']); + $gen = $this->b64dec($this->data['openid_dh_gen']); + $consumerKey = $this->b64dec($this->data['openid_dh_consumer_public']); + + $privateKey = $this->keygen(strlen($modulus)); + $publicKey = $this->powmod($gen, $privateKey, $modulus); + $ss = $this->powmod($consumerKey, $privateKey, $modulus); + + $mac = $this->x_or(hash($this->assoc['hash'], $ss, true), $this->shared_secret($this->assoc['hash'])); + $this->assoc['dh_server_public'] = $this->decb64($publicKey); + $this->assoc['mac'] = base64_encode($mac); + } + + /** + * XORs two strings. + * @param String $a + * @param String $b + * @return String $a ^ $b + */ + protected function x_or($a, $b) + { + $length = strlen($a); + for($i = 0; $i < $length; $i++) { + $a[$i] = $a[$i] ^ $b[$i]; + } + + return $a; + } + + /** + * Prepares an indirect response url. + * @param array $params Parameters to be sent. + */ + protected function response($params) + { + $params += array('openid.ns' => $this->ns); + return $this->data['openid_return_to'] + . (strpos($this->data['openid_return_to'],'?') ? '&' : '?') + . http_build_query($params, '', '&'); + } + + /** + * Outputs a direct error. + */ + protected function errorResponse() + { + if(!empty($this->data['openid_return_to'])) { + $response = array( + 'openid.mode' => 'error', + 'openid.error' => 'Invalid request' + ); + $this->redirect($this->response($response)); + } else { + header('HTTP/1.1 400 Bad Request'); + $response = array( + 'ns' => $this->ns, + 'error' => 'Invalid request' + ); + echo $this->keyValueForm($response); + } + die(); + } + + /** + * Sends an positive assertion. + * @param String $identity the OP-Local Identifier that is being authenticated. + * @param Array $attributes User attributes to be sent. + */ + protected function positiveResponse($identity, $attributes) + { + # We generate a private association if there is none established. + if(!$this->assoc) { + $this->generateAssociation(); + $this->assoc['private'] = true; + } + + # We set openid.identity (and openid.claimed_id if necessary) to our $identity + if($this->data['openid_identity'] == $this->data['openid_claimed_id'] || $this->select_id) { + $this->data['openid_claimed_id'] = $identity; + } + $this->data['openid_identity'] = $identity; + + # Preparing fields to be signed + $params = array( + 'op_endpoint' => $this->serverLocation, + 'claimed_id' => $this->data['openid_claimed_id'], + 'identity' => $this->data['openid_identity'], + 'return_to' => $this->data['openid_return_to'], + 'realm' => $this->data['openid_realm'], + 'response_nonce' => gmdate("Y-m-d\TH:i:s\Z"), + 'assoc_handle' => $this->assoc['handle'], + ); + + $params += $this->responseAttributes($attributes); + + # Has the RP used an invalid association handle? + if (isset($this->data['openid_assoc_handle']) + && $this->data['openid_assoc_handle'] != $this->assoc['handle'] + ) { + $params['invalidate_handle'] = $this->data['openid_assoc_handle']; + } + + # Signing the $params + $sig = hash_hmac($this->assoc['hash'], $this->keyValueForm($params), $this->assoc['mac'], true); + $req = array( + 'openid.mode' => 'id_res', + 'openid.signed' => implode(',', array_keys($params)), + 'openid.sig' => base64_encode($sig), + ); + + # Saving the nonce and commiting the association. + $this->assoc['nonce'] = $params['response_nonce']; + $this->setAssoc($this->assoc['handle'], $this->assoc); + + # Preparing and sending the response itself + foreach($params as $name => $value) { + $req['openid.' . $name] = $value; + } + + $this->redirect($this->response($req)); + } + + /** + * Prepares an array of attributes to send + */ + protected function responseAttributes($attributes) + { + if(!$attributes) return array(); + + $ns = 'http://axschema.org/'; + + $response = array(); + if(isset($this->data['ax'])) { + $response['ns.ax'] = 'http://openid.net/srv/ax/1.0'; + foreach($attributes as $name => $value) { + $alias = strtr($name, '/', '_'); + $response['ax.type.' . $alias] = $ns . $name; + $response['ax.value.' . $alias] = $value; + } + return $response; + } + + foreach($attributes as $name => $value) { + if(!isset($this->ax_to_sreg[$name])) { + continue; + } + + $response['sreg.' . $this->ax_to_sreg[$name]] = $value; + } + return $response; + } + + /** + * Encodes fields in key-value form. + * @param Array $params Fields to be encoded. + * @return String $params in key-value form. + */ + protected function keyValueForm($params) + { + $str = ''; + foreach($params as $name => $value) { + $str .= "$name:$value\n"; + } + + return $str; + } + + /** + * Responds with an information that the user has canceled authentication. + */ + protected function cancel() + { + $this->redirect($this->response(array('openid.mode' => 'cancel'))); + } + + /** + * Converts base64 encoded number to it's decimal representation. + * @param String $str base64 encoded number. + * @return String Decimal representation of that number. + */ + protected function b64dec($str) + { + $bytes = unpack('C*', base64_decode($str)); + $n = 0; + foreach($bytes as $byte) { + $n = $this->add($this->mul($n, 256), $byte); + } + + return $n; + } + + /** + * Complements b64dec. + */ + protected function decb64($num) + { + $bytes = array(); + while($num) { + array_unshift($bytes, $this->mod($num, 256)); + $num = $this->div($num, 256); + } + + if($bytes && $bytes[0] > 127) { + array_unshift($bytes,0); + } + + array_unshift($bytes, 'C*'); + + return base64_encode(call_user_func_array('pack', $bytes)); + } + + function __call($name, $args) + { + switch($name) { + case 'add': + case 'mul': + case 'pow': + case 'mod': + case 'div': + case 'powmod': + if(function_exists('gmp_strval')) { + return gmp_strval(call_user_func_array($this->$name, $args)); + } + return call_user_func_array($this->$name, $args); + default: + throw new BadMethodCallException(); + } + } +} diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 642102ffb..4a083851d 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -7,3 +7,5 @@ parameters: - Zotlabs scanDirectories: - library + ignoreErrors: + - '#Method [\w:()_\\]+ should return (object|string) but return statement is missing.#' diff --git a/tests/unit/Lib/MailerTest.php b/tests/unit/Lib/MailerTest.php new file mode 100644 index 000000000..038c7ef4c --- /dev/null +++ b/tests/unit/Lib/MailerTest.php @@ -0,0 +1,62 @@ +<?php +/* + * Tests for the Zotlabs\LibM̀ailer class. + * + * SPDX-FileCopyrightText: 2024 Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Tests\Unit\Lib; + +use App; +use phpmock\phpunit\PHPMock; +use Zotlabs\Lib\Mailer; +use Zotlabs\Tests\Unit\UnitTestCase; + +class MailerTest extends UnitTestCase { + + use PHPMock; + + public function test_optional_params_replaced_by_defaults(): void { + $hostname = App::get_hostname(); + $recipient = 'recipient@somesite.test'; + $subject = 'A test email'; + $body = <<<EOF + Dear recipient, + + This is an test email message for you. + + Sincerely, + Hubzilla + EOF; + + // + // Catch calls to the php mail function, and verify + // that it is called with the args we're expecting + // + $this->getFunctionMock('Zotlabs\Lib', 'mail') + ->expects($this->once()) + ->with( + $this->identicalTo($recipient), + $this->identicalTo($subject), + $this->identicalTo($body), + $this->identicalTo(<<<EOF + From: <Administrator@{$hostname}> + Reply-To: <noreply@{$hostname}> + Content-Type: text/plain; charset=UTF-8 + EOF + ) + ) + ->willReturn(true); + + $mailer = new Mailer([ + 'toEmail' => $recipient, + 'messageSubject' => $subject, + 'textVersion' => $body, + ]); + + $mailer->deliver(); + } +} diff --git a/tests/unit/Module/AdminAccountsTest.php b/tests/unit/Module/AdminAccountsTest.php new file mode 100644 index 000000000..2c76f2779 --- /dev/null +++ b/tests/unit/Module/AdminAccountsTest.php @@ -0,0 +1,173 @@ +<?php +/* + * SPDX-FileCopyrightText: 2024 Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Tests\Unit\Module; + +use PHPUnit\Framework\Attributes\Before; + +class AdminAccountsTest extends TestCase { + + protected $stub_check_security; + protected $stub_is_site_admin; + protected $stub_goaway; + protected $stub_notice; + + protected array $notice; + + /** + * Set up the stubs common for the tests. + */ + #[Before] + public function setup_stubs(): void { + $this->stub_check_form_security(); + $this->stub_is_site_admin(); + $this->stub_goaway(); + $this->stub_notice(); + } + + public function test_blocking_accounts_marks_selected_accounts_as_blocked(): void { + $params = [ + 'user' => [ 42 ], + 'blocked' => [ false ], + 'page_accounts_block' => true, + ]; + + try { + $this->post('admin/accounts', [], $params); + } catch (RedirectException $redirect) { + $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage()); + } + + $account = get_account_by_id(42); + $this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED); + + $this->assertEquals('1 account blocked/unblocked', $this->notice[0]); + } + + public function test_unblocking_accounts_clears_the_blocked_flag(): void { + // Pass two users to the module, one that is not blocked, + // and one that is. + $params = [ + 'user' => [ 42, 44 ], + 'blocked' => [ false, true ], + 'page_accounts_block' => true, + ]; + + try { + $this->post('admin/accounts', [], $params); + } catch (RedirectException $redirect) { + $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage()); + } + + // We expect the previously unblocked account to be blocked. + $account = get_account_by_id(42); + $this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED); + + // We expect the previously blocked account to be unblocked. + $blocked_account = get_account_by_id(44); + $this->assertEquals(0, $blocked_account['account_flags'] & ACCOUNT_BLOCKED); + + $this->assertEquals('2 account blocked/unblocked', $this->notice[0]); + } + + public function test_deleting_accouns_remove_them_from_db(): void { + $params = [ + 'user' => [ 42, 44 ], + 'page_accounts_delete' => true, + ]; + + try { + $this->post('admin/accounts', [], $params); + } catch (RedirectException $redirect) { + $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage()); + } + + $this->assertEquals(null, get_account_by_id(42)); + $this->assertEquals(null, get_account_by_id(44)); + } + + public function test_approving_pending_accounts_clears_pending_flag(): void { + + // Catch calls to the php mail function + // + // This is just to get it out of the way, we don't care about + // how many times it's called, or with what args here. + $this->getFunctionMock('Zotlabs\Lib', 'mail') + ->expects($this->any()) + ->willReturn(true); + + $params = [ + 'pending' => [ + $this->fixtures['register'][0]['reg_hash'], + $this->fixtures['register'][1]['reg_hash'] + ], + 'page_accounts_approve' => true, + ]; + + try { + $this->post('admin/accounts', [], $params); + } catch (RedirectException $redirect) { + $this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage()); + } + + foreach ([45, 46] as $id) { + $account = get_account_by_id($id); + $this->assertEquals(0, $account['account_flags'] & ACCOUNT_PENDING); + } + } + + /** + * Stub the check_form_security_token_ForbiddenOnErr. + */ + protected function stub_check_form_security(): void { + $this->stub_check_security = + $this->getFunctionMock('Zotlabs\Module\Admin', 'check_form_security_token_redirectOnErr') + ->expects($this->once()) + ->with( + $this->identicalTo('/admin/accounts'), + $this->identicalTo('admin_accounts')) + ->willReturn(true); + } + + /** + * Stub the call to is_site_admin in the Admin main module. + */ + protected function stub_is_site_admin(): void { + $this->stub_is_site_admin = + $this->getFunctionMock('Zotlabs\Module', 'is_site_admin') + ->expects($this->once()) + ->willReturn(true); + } + + /** + * Stub the goaway function. + * + * Will throw an RedirectException with the URL being redirected to + * as the exception message. + * + * @throws RedirectException + */ + protected function stub_goaway(): void { + $this->stub_goaway = + $this->getFunctionMock('Zotlabs\Module\Admin', 'goaway') + ->expects($this->once()) + ->willReturnCallback(function (string $uri) { + throw new RedirectException($uri); + }); + } + + protected function stub_notice(): void { + $this->notice = []; + $this->stub_notice = + $this->getFunctionMock('Zotlabs\Module\Admin', 'notice') + ->expects($this->any()) + ->willReturnCallback(function (string $arg) { + $this->notice[] = $arg; + }); + } +} diff --git a/tests/unit/Module/OwaTest.php b/tests/unit/Module/OwaTest.php new file mode 100644 index 000000000..dbb25c0b5 --- /dev/null +++ b/tests/unit/Module/OwaTest.php @@ -0,0 +1,64 @@ +<?php +/* + * SPDX-FileCopyrightText: 2025 Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Tests\Unit\Module; + +class OwaTest extends TestCase +{ + public function testShouldReturnErrorIfNoAuthorizationHeader(): void + { + // Expect the call to return error + $this->expectJsonResponse([ + 'success' => false, + 'message' => 'Missing or invalid authorization header.' + ]); + + $this->get('owa'); + } + + public function testShouldReturnErrorIfWrongAuthorizationHeader(): void + { + // Expect the call to return error + $this->expectJsonResponse([ + 'success' => false, + 'message' => 'Missing or invalid authorization header.' + ]); + + $_SERVER['HTTP_AUTHORIZATION'] = 'Bearer kjkjhkjhkjh'; + $this->get('owa'); + } + + public function testShouldReturnErrorIfInvalidAuthorizationHeader(): void + { + // Expect the call to return error + $this->expectJsonResponse(['success' => false]); + + $_SERVER['HTTP_AUTHORIZATION'] = 'Signature kjkjhkjhkjh'; + $this->get('owa'); + } + + /** + * Expect the request to be terminated and return a json response. + */ + private function expectJsonResponse(array $data): void + { + $this->getFunctionMock('Zotlabs\Module', 'json_return_and_die') + ->expects($this->once()) + ->with( + $this->identicalTo($data), + $this->identicalTo('application/x-zot+json') + ) + ->willReturnCallback( + function() { + throw new KillmeException(); + } + ); + + $this->expectException(KillmeException::class); + } +} diff --git a/tests/unit/UnitTestCase.php b/tests/unit/UnitTestCase.php index 79f0ec440..e3cd22b63 100644 --- a/tests/unit/UnitTestCase.php +++ b/tests/unit/UnitTestCase.php @@ -75,6 +75,14 @@ class UnitTestCase extends TestCase { } /** + * Initialize the global App properties. + */ + #[Before] + protected function init_app(): void { + \App::set_hostname('hubzilla.test'); + } + + /** * Roll back test database to it's original state, cleaning up * any changes from the test. * diff --git a/tests/unit/includes/DatetimeTest.php b/tests/unit/includes/DatetimeTest.php new file mode 100644 index 000000000..f8c480449 --- /dev/null +++ b/tests/unit/includes/DatetimeTest.php @@ -0,0 +1,53 @@ +<?php +/** + * tests function from include/datetime.php + * + * @package test.util + */ + +use Zotlabs\Tests\Unit\UnitTestCase; + +class DatetimeTest extends UnitTestCase { + + // Test when the timestamp is in the past + public function test_relative_time_past() { + $now = new DateTime('2024-12-07 00:00:00'); + $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2023-12-05 10:30:00'); + $result = relative_time($timestamp, $now); + $this->assertEquals('1 year ago', $result); + } + + // Test when the timestamp is in the future + public function test_relative_time_future() { + $now = new DateTime('2024-12-07 00:00:00'); + $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-09 12:00:00'); + $result = relative_time($timestamp, $now); + $this->assertEquals('in 2 days', $result); + } + + // Test for "now" case (timestamp exactly equal to current time) + public function test_relative_time_now() { + $now = new DateTime('2024-12-07 00:00:00'); + $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 00:00:00'); + $result = relative_time($timestamp, $now); + $this->assertEquals('now', $result); + } + + // Test for future time with smaller units (e.g., minutes) + public function test_relative_time_future_minutes() { + $now = new DateTime('2024-12-07 10:30:00'); + $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 10:35:00'); + $result = relative_time($timestamp, $now); + $this->assertEquals('in 5 minutes', $result); + } + + // Test for past time with smaller units (e.g., seconds) + public function test_relative_time_past_seconds() { + $now = new DateTime('2024-12-07 10:30:00'); + $timestamp = datetime_convert(date_default_timezone_get(), 'UTC', '2024-12-07 10:29:58'); + $result = relative_time($timestamp, $now); + $this->assertEquals('2 seconds ago', $result); + } +} + + diff --git a/tests/unit/includes/ItemsTest.php b/tests/unit/includes/ItemsTest.php new file mode 100644 index 000000000..1c2fb6725 --- /dev/null +++ b/tests/unit/includes/ItemsTest.php @@ -0,0 +1,132 @@ +<?php +/** + * tests function from include/items.php + * + * @package test.util + */ + +use Zotlabs\Tests\Unit\UnitTestCase; + +class ItemsTest extends UnitTestCase { + /** + * Data provider for item_forwardable function. + * + * @return array + */ + public static function itemForwardableDataProvider() + { + return [ + // Test case: item is unpublished + [ + [ + 'item_unpublished' => 1, + 'item_delayed' => 0, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => '', + 'author' => ['xchan_network' => ''] + ], + false // Expected result + ], + // Test case: item is delayed + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 1, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => '', + 'author' => ['xchan_network' => ''] + ], + false + ], + // Test case: item is blocked + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 0, + 'item_blocked' => 1, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => '', + 'author' => ['xchan_network' => ''] + ], + false + ], + // Test case: verb is 'Follow' (forbidden verb) + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 0, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Follow', + 'postopts' => '', + 'author' => ['xchan_network' => ''] + ], + false + ], + // Test case: postopts contains 'nodeliver' + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 0, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => 'nodeliver', + 'author' => ['xchan_network' => ''] + ], + false + ], + // Test case: actor's network is 'rss' (restricted network) + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 0, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => '', + 'author' => ['xchan_network' => 'rss'] + ], + false + ], + // Test case: no conditions met (should forward) + [ + [ + 'item_unpublished' => 0, + 'item_delayed' => 0, + 'item_blocked' => 0, + 'item_hidden' => 0, + 'item_restrict' => 0, + 'verb' => 'Create', + 'postopts' => '', + 'author' => ['xchan_network' => 'other'] + ], + true + ] + ]; + } + + /** + * Test item_forwardable with various data. + * + * @dataProvider itemForwardableDataProvider + */ + public function testItemForwardable($item, $expected) + { + $this->assertSame($expected, item_forwardable($item)); + } + +} + + diff --git a/tests/unit/includes/dba/DbaPdoTest.php b/tests/unit/includes/dba/DbaPdoTest.php new file mode 100644 index 000000000..8a1a2b197 --- /dev/null +++ b/tests/unit/includes/dba/DbaPdoTest.php @@ -0,0 +1,140 @@ +<?php +/** + * Tests for `includes/dba_pdo.php`. + * + * SPDX-FileCopyrightText: 2024 Hubzilla Community + * SPDX-FileContributor: Harald Eilertsen + * + * SPDX-License-Identifier: MIT + */ + +namespace Zotlabs\Tests\Unit\includes; + +use DBA; +use PDO; +use PDOStatement; +use PHPUnit\Framework\Attributes\DataProvider; +use Zotlabs\Tests\Unit\UnitTestCase; + +class DbaPdoTest extends UnitTestCase +{ + public function testInsertingRowWithRturningClauseReturnsInsertedRow(): void + { + // MySQL does not support the `returning` clause, so we skip the test + // for that DB backend. + $this->skipIfMySQL(); + + // Let's manually insert a row in the config table. + // This is just because it's a conventient table to test + // against + $res = q(<<<SQL + INSERT INTO config (cat, k, v) + VALUES ('test', 'a key', 'A value') + RETURNING * + SQL); + + $this->assertIsArray($res); + $this->assertIsArray($res[0]); + $this->assertTrue($res[0]['id'] > 0); + $this->assertEquals('test', $res[0]['cat']); + $this->assertEquals('a key', $res[0]['k']); + $this->assertEquals('A value', $res[0]['v']); + } + + #[DataProvider('insertRowProvider')] + public function testInsertRow(string $table, array $data, string $id): void + { + $res = DBA::$dba->insert($table, $data, $id); + + $this->assertIsArray($res); + + // Make sure the result contains the expected id + $this->assertArrayHasKey($id, $res); + + foreach ($data as $key => $value) { + $this->assertEquals($value, $res[$key]); + } + } + + #[DataProvider('insertRowProvider')] + public function testInsertShouldReturnFalseIfInsertFails( + string $table, + array $data, + string $id + ): void + { + $res1 = DBA::$dba->insert($table, $data, $id); + $this->assertIsArray($res1); + + // Inserting the same row again should fail. + $res2 = DBA::$dba->insert($table, $data, $id); + $this->assertFalse($res2); + } + + /** + * Dataprovider for testInertRow. + * + * @return array An array of [ $table, $data, $id ] elements. + */ + public static function insertRowProvider(): array + { + return [ + 'table with numeric primary id' => [ + 'config', + [ 'cat' => 'test', 'k' => 'a key', 'v' => 'A value' ], + 'id', + ], + 'table with text primary id' => [ + 'cache', + [ 'k' => 'some key', 'v' => 'cached value', 'updated' => date('Y-m-d H:i:s')], + 'k', + ], + ]; + } + + public function testUpdateRow(): void + { + // Let's fetch a row from the config table + $res = q("SELECT * FROM config WHERE cat = 'system' AND k = 'baseurl'"); + + $this->assertIsArray($res); + $this->assertIsArray($res[0]); + + $row = $res[0]; + + // Update the baseurl + $updated = DBA::$dba->update( + 'config', + [ 'v' => 'https://some.other_site.test/' ], + 'id', + $row['id'] + ); + + $this->assertTrue($updated); + + // Verify that the record was updated + $updated_res = q("SELECT * FROM config WHERE cat = 'system' AND k = 'baseurl'"); + $this->assertIsArray($updated_res); + + $updated_row = $updated_res[0]; + + $this->assertIsArray($updated_row); + $this->assertEquals($row['id'], $updated_row['id']); + $this->assertEquals('system', $updated_row['cat']); + $this->assertEquals('baseurl', $updated_row['k']); + $this->assertEquals('https://some.other_site.test/', $updated_row['v']); + } + + /** + * Mark the test as skipped if the current db is MySQL. + */ + private function skipIfMySQL(): void { + $driver = DBA::$dba->db->getAttribute(PDO::ATTR_DRIVER_NAME); + $version = DBA::$dba->db->getAttribute(PDO::ATTR_SERVER_VERSION); + + if ($driver === 'mysql' && stripos($version, 'mariadb') === false) { + $this->markTestSkipped("RETURNING clause not supported for {$driver}"); + } + + } +} diff --git a/tests/unit/includes/dba/_files/account.yml b/tests/unit/includes/dba/_files/account.yml index b7a49529e..9c3d00ec8 100644 --- a/tests/unit/includes/dba/_files/account.yml +++ b/tests/unit/includes/dba/_files/account.yml @@ -11,3 +11,18 @@ account: account_language: "de" account_level: 5 account_flags: 1 + - + account_id: 44 + account_email: "blocked@example.org" + account_level: 5 + account_flags: 2 + - + account_id: 45 + account_email: "pending@example.org" + account_level: 5 + account_flags: 0x10 + - + account_id: 46 + account_email: "unverified@example.org" + account_level: 5 + account_flags: 0x11 diff --git a/tests/unit/includes/dba/_files/register.yml b/tests/unit/includes/dba/_files/register.yml new file mode 100644 index 000000000..2ef1a5365 --- /dev/null +++ b/tests/unit/includes/dba/_files/register.yml @@ -0,0 +1,20 @@ +--- +register: + - + reg_vital: 1 + reg_flags: 0x10 + reg_did2: 'verified@example.com' + reg_email: 'verified@example.com' + reg_hash: '123' + reg_uid: 45 + reg_pass: 'verify' + reg_stuff: '' + - + reg_vital: 1 + reg_flags: 0x11 + reg_did2: 'unverified@example.com' + reg_email: 'unverified@example.com' + reg_hash: '666' + reg_uid: 46 + reg_pass: 'verify' + reg_stuff: '' diff --git a/util/hmessages.po b/util/hmessages.po index 7088da197..694bed0ef 100644 --- a/util/hmessages.po +++ b/util/hmessages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 9.4RC\n" +"Project-Id-Version: 10.0RC\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-20 12:31+0200\n" +"POT-Creation-Date: 2024-12-13 08:47+0000\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" @@ -17,85 +17,633 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../include/bbcode.php:234 ../../include/bbcode.php:994 -#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667 -msgid "Image/photo" +#: ../../util/nconfig.php:34 +msgid "Source channel not found." msgstr "" -#: ../../include/bbcode.php:286 -msgid "Encrypted content" +#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3518 +#: ../../addon/cart/submodules/orderoptions.php:335 +#: ../../addon/cart/submodules/orderoptions.php:359 +#: ../../addon/cart/submodules/orderoptions.php:435 +#: ../../addon/cart/submodules/orderoptions.php:459 +#: ../../Zotlabs/Module/Admin/Site.php:233 +msgid "Default" msgstr "" -#: ../../include/bbcode.php:342 +#: ../../view/theme/redbasic/php/config.php:19 +#: ../../view/theme/redbasic/php/config.php:22 +msgid "Focus (Hubzilla default)" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:188 ../../include/js_strings.php:23 +#: ../../addon/irc/irc.php:45 ../../addon/socialauth/Mod_SocialAuth.php:341 +#: ../../addon/hubwall/hubwall.php:96 +#: ../../addon/openclipatar/openclipatar.php:54 +#: ../../addon/hzfiles/hzfiles.php:86 ../../addon/piwik/piwik.php:95 +#: ../../addon/redphotos/redphotos.php:136 +#: ../../addon/pageheader/Mod_Pageheader.php:52 +#: ../../addon/ijpost/Mod_Ijpost.php:72 ../../addon/redred/Mod_Redred.php:88 +#: ../../addon/startpage/Mod_Startpage.php:71 +#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35 +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:61 +#: ../../addon/dwpost/Mod_Dwpost.php:78 ../../addon/diaspora/diaspora.php:90 +#: ../../addon/diaspora/Mod_Diaspora.php:101 +#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/mailtest/mailtest.php:100 +#: ../../addon/nsfw/Mod_Nsfw.php:59 ../../addon/pumpio/Mod_Pumpio.php:113 +#: ../../addon/wppost/Mod_Wppost.php:107 ../../addon/wiki/Mod_Wiki.php:218 +#: ../../addon/wiki/Mod_Wiki.php:907 ../../addon/wiki/Widget/Wiki_pages.php:72 +#: ../../addon/xmpp/Mod_Xmpp.php:70 ../../addon/statusnet/statusnet.php:602 +#: ../../addon/statusnet/Mod_Statusnet.php:191 +#: ../../addon/statusnet/Mod_Statusnet.php:249 +#: ../../addon/statusnet/Mod_Statusnet.php:304 +#: ../../addon/flashcards/Mod_Flashcards.php:269 +#: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/faces/Mod_Faces.php:141 +#: ../../addon/cart/submodules/hzservices.php:645 +#: ../../addon/cart/submodules/subscriptions.php:410 +#: ../../addon/cart/submodules/manualcat.php:248 +#: ../../addon/cart/submodules/orderoptions.php:312 +#: ../../addon/cart/submodules/orderoptions.php:412 +#: ../../addon/cart/cart.php:1424 ../../addon/cart/Settings/Cart.php:132 +#: ../../addon/cart/Settings/Cart.php:142 +#: ../../addon/twitter/Mod_Twitter.php:182 +#: ../../addon/redfiles/redfiles.php:124 +#: ../../addon/openstreetmap/openstreetmap.php:147 +#: ../../addon/workflow/workflow.php:1490 +#: ../../addon/workflow/workflow.php:1549 +#: ../../addon/workflow/workflow.php:1668 +#: ../../addon/workflow/workflow.php:2815 +#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94 +#: ../../addon/skeleton/Mod_Skeleton.php:49 +#: ../../addon/content_import/Mod_content_import.php:140 +#: ../../addon/rtof/Mod_Rtof.php:70 ../../addon/nofed/Mod_Nofed.php:51 +#: ../../addon/photocache/Mod_Photocache.php:63 +#: ../../addon/likebanner/likebanner.php:57 +#: ../../Zotlabs/Lib/ThreadItem.php:799 ../../Zotlabs/Storage/Browser.php:386 +#: ../../Zotlabs/Module/Oauth.php:110 ../../Zotlabs/Module/Import_items.php:125 +#: ../../Zotlabs/Module/Thing.php:364 ../../Zotlabs/Module/Thing.php:414 +#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pdledit.php:137 +#: ../../Zotlabs/Module/Connect.php:107 +#: ../../Zotlabs/Module/Filestorage.php:208 +#: ../../Zotlabs/Module/Contactedit.php:415 +#: ../../Zotlabs/Module/Contactedit.php:448 +#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Appman.php:230 +#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Defperms.php:262 +#: ../../Zotlabs/Module/Locs.php:125 +#: ../../Zotlabs/Module/Admin/Accounts.php:209 +#: ../../Zotlabs/Module/Admin/Themes.php:174 +#: ../../Zotlabs/Module/Admin/Addons.php:193 +#: ../../Zotlabs/Module/Admin/Features.php:67 +#: ../../Zotlabs/Module/Admin/Profs.php:179 +#: ../../Zotlabs/Module/Admin/Channels.php:169 +#: ../../Zotlabs/Module/Admin/Account_edit.php:78 +#: ../../Zotlabs/Module/Admin/Logs.php:85 +#: ../../Zotlabs/Module/Admin/Site.php:403 +#: ../../Zotlabs/Module/Admin/Security.php:130 +#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Permcats.php:257 +#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:151 +#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Invite.php:564 +#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:1056 +#: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1208 +#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160 +#: ../../Zotlabs/Module/Profiles.php:738 ../../Zotlabs/Module/Chat.php:208 +#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:408 +#: ../../Zotlabs/Module/Setup.php:322 ../../Zotlabs/Module/Setup.php:362 +#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:115 +#: ../../Zotlabs/Module/Settings/Display.php:188 +#: ../../Zotlabs/Module/Settings/Network.php:62 +#: ../../Zotlabs/Module/Settings/Channel_home.php:91 +#: ../../Zotlabs/Module/Settings/Account.php:109 +#: ../../Zotlabs/Module/Settings/Editor.php:42 +#: ../../Zotlabs/Module/Settings/Features.php:48 +#: ../../Zotlabs/Module/Settings/Directory.php:42 +#: ../../Zotlabs/Module/Settings/Manage.php:43 +#: ../../Zotlabs/Module/Settings/Privacy.php:123 +#: ../../Zotlabs/Module/Settings/Events.php:42 +#: ../../Zotlabs/Module/Settings/Photos.php:42 +#: ../../Zotlabs/Module/Settings/Conversation.php:44 +#: ../../Zotlabs/Module/Settings/Channel.php:230 +#: ../../Zotlabs/Module/Settings/Profiles.php:52 +#: ../../Zotlabs/Module/Settings/Connections.php:42 +#: ../../Zotlabs/Module/Settings/Calendar.php:42 +#: ../../Zotlabs/Module/Settings/Multifactor.php:85 +#: ../../Zotlabs/Module/Email_validation.php:41 +#: ../../Zotlabs/Module/Import.php:623 +msgid "Submit" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:192 +msgid "Theme settings" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:193 +msgid "Dark style" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:194 +msgid "Light style" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:195 +msgid "Common settings" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:196 +msgid "Primary theme color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:196 +#: ../../view/theme/redbasic/php/config.php:197 +#: ../../view/theme/redbasic/php/config.php:198 +#: ../../view/theme/redbasic/php/config.php:199 +#: ../../view/theme/redbasic/php/config.php:200 +msgid "Current color, leave empty for default" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:197 +msgid "Success theme color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:198 +msgid "Info theme color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:199 +msgid "Warning theme color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:200 +msgid "Danger theme color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:201 +msgid "Default to dark mode" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:201 +#: ../../view/theme/redbasic/php/config.php:202 +#: ../../view/theme/redbasic/php/config.php:203 +#: ../../view/theme/redbasic/php/config.php:215 +#: ../../include/conversation.php:1273 +#: ../../addon/socialauth/Mod_SocialAuth.php:218 +#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61 +#: ../../addon/libertree/Mod_Libertree.php:57 +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45 +#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63 +#: ../../addon/diaspora/Mod_Diaspora.php:70 +#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96 +#: ../../addon/pumpio/Mod_Pumpio.php:100 ../../addon/wppost/Mod_Wppost.php:84 +#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92 +#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231 +#: ../../addon/statusnet/Mod_Statusnet.php:258 +#: ../../addon/statusnet/Mod_Statusnet.php:280 +#: ../../addon/statusnet/Mod_Statusnet.php:289 +#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65 +#: ../../addon/ljpost/Mod_Ljpost.php:69 +#: ../../addon/cart/submodules/hzservices.php:67 +#: ../../addon/cart/submodules/hzservices.php:651 +#: ../../addon/cart/submodules/hzservices.php:655 +#: ../../addon/cart/submodules/subscriptions.php:153 +#: ../../addon/cart/submodules/subscriptions.php:425 +#: ../../addon/cart/submodules/paypalbuttonV2.php:88 +#: ../../addon/cart/submodules/paypalbuttonV2.php:98 +#: ../../addon/cart/submodules/paypalbutton.php:87 +#: ../../addon/cart/submodules/paypalbutton.php:95 +#: ../../addon/cart/submodules/manualcat.php:63 +#: ../../addon/cart/submodules/manualcat.php:254 +#: ../../addon/cart/submodules/manualcat.php:258 +#: ../../addon/cart/submodules/orderoptions.php:72 +#: ../../addon/cart/submodules/orderoptions.php:338 +#: ../../addon/cart/submodules/orderoptions.php:362 +#: ../../addon/cart/submodules/orderoptions.php:438 +#: ../../addon/cart/submodules/orderoptions.php:462 +#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61 +#: ../../addon/cart/Settings/Cart.php:73 +#: ../../addon/twitter/Mod_Twitter.php:160 +#: ../../addon/twitter/Mod_Twitter.php:169 +#: ../../addon/content_import/Mod_content_import.php:135 +#: ../../addon/content_import/Mod_content_import.php:136 +#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40 +#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166 +#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169 +#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 +#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393 +#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558 +#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../Zotlabs/Module/Filestorage.php:211 +#: ../../Zotlabs/Module/Contactedit.php:270 +#: ../../Zotlabs/Module/Contactedit.php:315 +#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Connedit.php:622 +#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:101 +#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 +#: ../../Zotlabs/Module/Admin/Site.php:307 +#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138 +#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148 +#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302 +#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254 +#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666 +#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 +#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684 +#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696 +#: ../../Zotlabs/Module/Settings/Display.php:87 +#: ../../Zotlabs/Module/Settings/Privacy.php:133 +#: ../../Zotlabs/Module/Settings/Privacy.php:134 +#: ../../Zotlabs/Module/Settings/Privacy.php:135 +#: ../../Zotlabs/Module/Settings/Privacy.php:136 +#: ../../Zotlabs/Module/Settings/Privacy.php:137 +#: ../../Zotlabs/Module/Settings/Privacy.php:138 +#: ../../Zotlabs/Module/Settings/Channel.php:225 +#: ../../Zotlabs/Module/Settings/Multifactor.php:82 +#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616 +#: ../../Zotlabs/Module/Import.php:617 +msgid "No" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:201 +#: ../../view/theme/redbasic/php/config.php:202 +#: ../../view/theme/redbasic/php/config.php:203 +#: ../../view/theme/redbasic/php/config.php:215 +#: ../../include/conversation.php:1273 +#: ../../addon/socialauth/Mod_SocialAuth.php:218 +#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61 +#: ../../addon/libertree/Mod_Libertree.php:57 +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45 +#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63 +#: ../../addon/diaspora/Mod_Diaspora.php:70 +#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96 +#: ../../addon/pumpio/Mod_Pumpio.php:100 ../../addon/wppost/Mod_Wppost.php:84 +#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92 +#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231 +#: ../../addon/statusnet/Mod_Statusnet.php:258 +#: ../../addon/statusnet/Mod_Statusnet.php:280 +#: ../../addon/statusnet/Mod_Statusnet.php:289 +#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65 +#: ../../addon/ljpost/Mod_Ljpost.php:69 +#: ../../addon/cart/submodules/hzservices.php:67 +#: ../../addon/cart/submodules/hzservices.php:651 +#: ../../addon/cart/submodules/hzservices.php:655 +#: ../../addon/cart/submodules/subscriptions.php:153 +#: ../../addon/cart/submodules/subscriptions.php:425 +#: ../../addon/cart/submodules/paypalbuttonV2.php:88 +#: ../../addon/cart/submodules/paypalbuttonV2.php:98 +#: ../../addon/cart/submodules/paypalbutton.php:87 +#: ../../addon/cart/submodules/paypalbutton.php:95 +#: ../../addon/cart/submodules/manualcat.php:63 +#: ../../addon/cart/submodules/manualcat.php:254 +#: ../../addon/cart/submodules/manualcat.php:258 +#: ../../addon/cart/submodules/orderoptions.php:72 +#: ../../addon/cart/submodules/orderoptions.php:337 +#: ../../addon/cart/submodules/orderoptions.php:361 +#: ../../addon/cart/submodules/orderoptions.php:437 +#: ../../addon/cart/submodules/orderoptions.php:461 +#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61 +#: ../../addon/cart/Settings/Cart.php:73 +#: ../../addon/twitter/Mod_Twitter.php:160 +#: ../../addon/twitter/Mod_Twitter.php:169 +#: ../../addon/content_import/Mod_content_import.php:135 +#: ../../addon/content_import/Mod_content_import.php:136 +#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40 +#: ../../boot.php:1759 ../../Zotlabs/Lib/Libzotdir.php:166 +#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169 +#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 +#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393 +#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:558 +#: ../../Zotlabs/Module/Filestorage.php:203 +#: ../../Zotlabs/Module/Filestorage.php:211 +#: ../../Zotlabs/Module/Contactedit.php:270 +#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195 +#: ../../Zotlabs/Module/Api.php:100 ../../Zotlabs/Module/Menu.php:163 +#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:309 +#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138 +#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148 +#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302 +#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176 +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:254 +#: ../../Zotlabs/Module/Mitem.php:255 ../../Zotlabs/Module/Photos.php:666 +#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 +#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684 +#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696 +#: ../../Zotlabs/Module/Settings/Display.php:87 +#: ../../Zotlabs/Module/Settings/Privacy.php:133 +#: ../../Zotlabs/Module/Settings/Privacy.php:134 +#: ../../Zotlabs/Module/Settings/Privacy.php:135 +#: ../../Zotlabs/Module/Settings/Privacy.php:136 +#: ../../Zotlabs/Module/Settings/Privacy.php:137 +#: ../../Zotlabs/Module/Settings/Privacy.php:138 +#: ../../Zotlabs/Module/Settings/Channel.php:225 +#: ../../Zotlabs/Module/Settings/Multifactor.php:82 +#: ../../Zotlabs/Module/Import.php:612 ../../Zotlabs/Module/Import.php:616 +#: ../../Zotlabs/Module/Import.php:617 +msgid "Yes" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:202 +msgid "Always use light icons for navbar" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:202 +msgid "Enable this option if you use a dark navbar color in light mode" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:203 +msgid "Narrow navbar" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:204 +msgid "Navigation bar background color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:205 +msgid "Dark navigation bar background color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:206 +msgid "Set the background color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:207 +msgid "Set the dark background color" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:208 +msgid "Set the background image" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:209 +msgid "Set the dark background image" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:210 +msgid "Set font-size for the entire application" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:210 +msgid "Examples: 1rem, 100%, 16px" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:211 +msgid "Set radius of corners in rem" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:211 +msgid "Leave empty for default radius" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:212 +msgid "Set maximum width of content region in rem" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:212 +msgid "Leave empty for default width" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:213 +msgid "Set size of conversation author photo" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:213 +#: ../../view/theme/redbasic/php/config.php:214 +msgid "Leave empty for default size" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:214 +msgid "Set size of followup author photos" +msgstr "" + +#: ../../view/theme/redbasic/php/config.php:215 +msgid "Show advanced settings" +msgstr "" + +#: ../../include/bookmarks.php:34 #, php-format -msgid "Install %1$s element %2$s" +msgid "%1$s's bookmarks" msgstr "" -#: ../../include/bbcode.php:346 +#: ../../include/opengraph.php:56 #, php-format -msgid "" -"This post contains an installable %s element, however you lack permissions " -"to install it on this site." +msgid "This is the home page of %s." msgstr "" -#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47 -msgid "webpage" +#: ../../include/auth.php:232 +msgid "Delegation session ended." msgstr "" -#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57 -msgid "layout" +#: ../../include/auth.php:236 +msgid "Logged out." msgstr "" -#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52 -msgid "block" +#: ../../include/auth.php:342 +msgid "Email validation is incomplete. Please check your email." msgstr "" -#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64 -msgid "menu" +#: ../../include/auth.php:358 +msgid "Failed authentication" msgstr "" -#: ../../include/bbcode.php:568 -msgid "card" +#: ../../include/auth.php:368 ../../addon/openid/Mod_Openid.php:189 +msgid "Login failed." msgstr "" -#: ../../include/bbcode.php:570 -msgid "article" +#: ../../include/oembed.php:155 +msgid "View PDF" msgstr "" -#: ../../include/bbcode.php:572 ../../include/conversation.php:180 -#: ../../include/text.php:2364 ../../include/markdown.php:208 -#: ../../Zotlabs/Module/Tagger.php:79 -msgid "post" +#: ../../include/oembed.php:390 +msgid " by " +msgstr "" + +#: ../../include/oembed.php:391 +msgid " on " +msgstr "" + +#: ../../include/oembed.php:424 +msgid "Embedded content" +msgstr "" + +#: ../../include/oembed.php:433 +msgid "Embedding disabled" +msgstr "" + +#: ../../include/event.php:35 ../../include/event.php:133 +msgid "l F d, Y \\@ g:i A" +msgstr "" + +#: ../../include/event.php:43 +msgid "Starts:" +msgstr "" + +#: ../../include/event.php:53 +msgid "Finishes:" +msgstr "" + +#: ../../include/event.php:67 ../../include/event.php:158 +#: ../../include/channel.php:1642 ../../Zotlabs/Module/Directory.php:354 +msgid "Location:" +msgstr "" + +#: ../../include/event.php:133 +msgid "l F d, Y" +msgstr "" + +#: ../../include/event.php:137 +msgid "Start:" +msgstr "" + +#: ../../include/event.php:141 +msgid "End:" +msgstr "" + +#: ../../include/event.php:146 ../../addon/openid/MysqlProvider.php:67 +msgid "Timezone" +msgstr "" + +#: ../../include/event.php:1245 +msgid "This event has been added to your calendar." +msgstr "" + +#: ../../include/event.php:1365 ../../include/conversation.php:153 +#: ../../include/text.php:2359 ../../Zotlabs/Module/Tagger.php:77 +#: ../../Zotlabs/Module/Like.php:453 +#: ../../Zotlabs/Module/Channel_calendar.php:209 +msgid "event" +msgstr "" + +#: ../../include/event.php:1449 +msgid "Not specified" +msgstr "" + +#: ../../include/event.php:1450 +msgid "Needs Action" +msgstr "" + +#: ../../include/event.php:1451 +msgid "Completed" +msgstr "" + +#: ../../include/event.php:1452 +msgid "In Process" +msgstr "" + +#: ../../include/event.php:1453 +msgid "Cancelled" +msgstr "" + +#: ../../include/event.php:1534 ../../include/connections.php:790 +#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377 +msgid "Mobile" +msgstr "" + +#: ../../include/event.php:1535 ../../include/connections.php:791 +#: ../../Zotlabs/Widget/Notifications.php:43 +#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378 +msgid "Home" +msgstr "" + +#: ../../include/event.php:1536 ../../include/connections.php:792 +msgid "Home, Voice" msgstr "" -#: ../../include/bbcode.php:576 ../../include/markdown.php:206 +#: ../../include/event.php:1537 ../../include/connections.php:793 +msgid "Home, Fax" +msgstr "" + +#: ../../include/event.php:1538 ../../include/connections.php:794 +#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379 +msgid "Work" +msgstr "" + +#: ../../include/event.php:1539 ../../include/connections.php:795 +msgid "Work, Voice" +msgstr "" + +#: ../../include/event.php:1540 ../../include/connections.php:796 +msgid "Work, Fax" +msgstr "" + +#: ../../include/event.php:1541 ../../include/event.php:1548 +#: ../../include/selectors.php:64 ../../include/selectors.php:81 +#: ../../include/selectors.php:119 ../../include/selectors.php:155 +#: ../../include/connections.php:797 ../../include/connections.php:804 +#: ../../Zotlabs/Access/PermissionRoles.php:362 +#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380 +msgid "Other" +msgstr "" + +#: ../../include/feedutils.php:851 ../../include/text.php:1580 +msgid "unknown" +msgstr "" + +#: ../../include/items.php:481 ../../addon/hzfiles/hzfiles.php:75 +#: ../../addon/redphotos/redphotos.php:119 +#: ../../addon/redfiles/redfiles.php:109 +#: ../../Zotlabs/Module/Import_items.php:116 +#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:60 +#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:109 +#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:29 +#: ../../Zotlabs/Web/WebServer.php:120 +msgid "Permission denied" +msgstr "" + +#: ../../include/items.php:1275 +msgid "Visible to anybody on the internet." +msgstr "" + +#: ../../include/items.php:1277 +msgid "Visible to you only." +msgstr "" + +#: ../../include/items.php:1279 +msgid "Visible to anybody in this network." +msgstr "" + +#: ../../include/items.php:1281 +msgid "Visible to anybody authenticated." +msgstr "" + +#: ../../include/items.php:1283 #, php-format -msgid "%1$s wrote the following %2$s %3$s" +msgid "Visible to anybody on %s." msgstr "" -#: ../../include/bbcode.php:653 ../../include/bbcode.php:661 -msgid "Click to open/close" +#: ../../include/items.php:1285 +msgid "Visible to all connections." msgstr "" -#: ../../include/bbcode.php:661 ../../include/markdown.php:278 -msgid "spoiler" +#: ../../include/items.php:1287 +msgid "Visible to approved connections." msgstr "" -#: ../../include/bbcode.php:674 -msgid "View article" +#: ../../include/items.php:1289 +msgid "Visible to specific connections." msgstr "" -#: ../../include/bbcode.php:674 -msgid "View summary" +#: ../../include/items.php:3491 ../../Zotlabs/Lib/Activity.php:2280 +#: ../../Zotlabs/Module/Share.php:124 +#, php-format +msgid "🔁 Repeated %1$s's %2$s" msgstr "" -#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:630 -msgid "Different viewers will see this text differently" +#: ../../include/items.php:4568 ../../Zotlabs/Module/Group.php:63 +#: ../../Zotlabs/Module/Group.php:207 +msgid "Privacy group not found." msgstr "" -#: ../../include/bbcode.php:1635 -msgid "$1 wrote:" +#: ../../include/items.php:4584 +msgid "Privacy group is empty." +msgstr "" + +#: ../../include/items.php:4591 +#, php-format +msgid "Privacy group: %s" +msgstr "" + +#: ../../include/items.php:4601 +#, php-format +msgid "Connection: %s" +msgstr "" + +#: ../../include/items.php:4603 +msgid "Connection not found." msgstr "" #: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55 @@ -151,11 +699,11 @@ msgstr "" msgid "Provide a personal tag cloud on your channel page" msgstr "" -#: ../../include/features.php:122 ../../include/features.php:356 +#: ../../include/features.php:122 ../../include/features.php:364 msgid "Use blog/list mode" msgstr "" -#: ../../include/features.php:123 ../../include/features.php:357 +#: ../../include/features.php:123 ../../include/features.php:365 msgid "Comments will be displayed separately" msgstr "" @@ -197,322 +745,319 @@ msgid "Star Posts" msgstr "" #: ../../include/features.php:173 -msgid "Ability to mark special posts with a star indicator" +msgid "Ability to mark conversations with a star" msgstr "" #: ../../include/features.php:180 -msgid "Reply on comment" +msgid "File Posts" msgstr "" #: ../../include/features.php:181 +msgid "Ability to file posts" +msgstr "" + +#: ../../include/features.php:188 +msgid "Reply on comment" +msgstr "" + +#: ../../include/features.php:189 msgid "Ability to reply on selected comment" msgstr "" -#: ../../include/features.php:190 ../../Zotlabs/Lib/Apps.php:353 +#: ../../include/features.php:198 ../../Zotlabs/Lib/Apps.php:353 msgid "Directory" msgstr "" -#: ../../include/features.php:194 +#: ../../include/features.php:202 msgid "Advanced Directory Search" msgstr "" -#: ../../include/features.php:195 +#: ../../include/features.php:203 msgid "Allows creation of complex directory search queries" msgstr "" -#: ../../include/features.php:204 +#: ../../include/features.php:212 msgid "Editor" msgstr "" -#: ../../include/features.php:208 +#: ../../include/features.php:216 msgid "Post Categories" msgstr "" -#: ../../include/features.php:209 +#: ../../include/features.php:217 msgid "Add categories to your posts" msgstr "" -#: ../../include/features.php:216 +#: ../../include/features.php:224 msgid "Large Photos" msgstr "" -#: ../../include/features.php:217 +#: ../../include/features.php:225 msgid "" "Include large (1024px) photo thumbnails in posts. If not enabled, use small " "(640px) photo thumbnails" msgstr "" -#: ../../include/features.php:224 +#: ../../include/features.php:232 msgid "Even More Encryption" msgstr "" -#: ../../include/features.php:225 +#: ../../include/features.php:233 msgid "" "Allow optional encryption of content end-to-end with a shared secret key" msgstr "" -#: ../../include/features.php:232 +#: ../../include/features.php:240 msgid "Disable Comments" msgstr "" -#: ../../include/features.php:233 +#: ../../include/features.php:241 msgid "Provide the option to disable comments for a post" msgstr "" -#: ../../include/features.php:240 +#: ../../include/features.php:248 msgid "Delayed Posting" msgstr "" -#: ../../include/features.php:241 +#: ../../include/features.php:249 msgid "Allow posts to be published at a later date" msgstr "" -#: ../../include/features.php:248 +#: ../../include/features.php:256 msgid "Content Expiration" msgstr "" -#: ../../include/features.php:249 +#: ../../include/features.php:257 msgid "Remove posts/comments and/or private messages at a future time" msgstr "" -#: ../../include/features.php:256 +#: ../../include/features.php:264 msgid "Suppress Duplicate Posts/Comments" msgstr "" -#: ../../include/features.php:257 +#: ../../include/features.php:265 msgid "" "Prevent posts with identical content to be published with less than two " "minutes in between submissions." msgstr "" -#: ../../include/features.php:264 +#: ../../include/features.php:272 msgid "Auto-save drafts of posts and comments" msgstr "" -#: ../../include/features.php:265 +#: ../../include/features.php:273 msgid "" "Automatically saves post and comment drafts in local browser storage to help " "prevent accidental loss of compositions" msgstr "" -#: ../../include/features.php:274 +#: ../../include/features.php:282 msgid "Manage" msgstr "" -#: ../../include/features.php:278 +#: ../../include/features.php:286 msgid "Navigation Channel Select" msgstr "" -#: ../../include/features.php:279 +#: ../../include/features.php:287 msgid "Change channels directly from within the navigation dropdown menu" msgstr "" -#: ../../include/features.php:288 ../../Zotlabs/Module/Connections.php:347 -#: ../../Zotlabs/Widget/Notifications.php:23 +#: ../../include/features.php:296 ../../Zotlabs/Widget/Notifications.php:23 +#: ../../Zotlabs/Module/Connections.php:347 msgid "Network" msgstr "" -#: ../../include/features.php:292 +#: ../../include/features.php:300 msgid "Events Filter" msgstr "" -#: ../../include/features.php:293 +#: ../../include/features.php:301 msgid "Ability to display only events" msgstr "" -#: ../../include/features.php:300 +#: ../../include/features.php:308 msgid "Polls Filter" msgstr "" -#: ../../include/features.php:301 +#: ../../include/features.php:309 msgid "Ability to display only polls" msgstr "" -#: ../../include/features.php:308 ../../Zotlabs/Widget/Savedsearch.php:89 +#: ../../include/features.php:316 ../../Zotlabs/Widget/Savedsearch.php:89 msgid "Saved Searches" msgstr "" -#: ../../include/features.php:309 +#: ../../include/features.php:317 msgid "Save search terms for re-use" msgstr "" -#: ../../include/features.php:316 ../../include/contact_widgets.php:55 -#: ../../Zotlabs/Widget/Filer.php:33 +#: ../../include/features.php:324 ../../include/contact_widgets.php:55 #: ../../Zotlabs/Widget/Activity_filter.php:196 +#: ../../Zotlabs/Widget/Filer.php:33 msgid "Saved Folders" msgstr "" -#: ../../include/features.php:317 +#: ../../include/features.php:325 msgid "Ability to file posts under folders" msgstr "" -#: ../../include/features.php:324 +#: ../../include/features.php:332 msgid "Alternate Stream Order" msgstr "" -#: ../../include/features.php:325 +#: ../../include/features.php:333 msgid "" "Ability to order the stream by last post date, last comment date or " "unthreaded activities" msgstr "" -#: ../../include/features.php:332 +#: ../../include/features.php:340 msgid "Contact Filter" msgstr "" -#: ../../include/features.php:333 +#: ../../include/features.php:341 msgid "Ability to display only posts of a selected contact" msgstr "" -#: ../../include/features.php:340 +#: ../../include/features.php:348 msgid "Forum Filter" msgstr "" -#: ../../include/features.php:341 +#: ../../include/features.php:349 msgid "Ability to display only posts of a specific forum" msgstr "" -#: ../../include/features.php:348 +#: ../../include/features.php:356 msgid "Personal Posts Filter" msgstr "" -#: ../../include/features.php:349 +#: ../../include/features.php:357 msgid "Ability to display only posts that you've interacted on" msgstr "" -#: ../../include/features.php:366 ../../include/nav.php:470 -#: ../../Zotlabs/Lib/Apps.php:351 ../../Zotlabs/Module/Fbrowser.php:29 +#: ../../include/features.php:374 ../../include/nav.php:470 +#: ../../Zotlabs/Lib/Apps.php:351 #: ../../Zotlabs/Widget/Channel_activities.php:93 +#: ../../Zotlabs/Module/Fbrowser.php:31 msgid "Photos" msgstr "" -#: ../../include/features.php:370 +#: ../../include/features.php:378 msgid "Photo Location" msgstr "" -#: ../../include/features.php:371 +#: ../../include/features.php:379 msgid "If location data is available on uploaded photos, link this to a map." msgstr "" -#: ../../include/features.php:378 +#: ../../include/features.php:386 msgid "Flag Adult Photos" msgstr "" -#: ../../include/features.php:379 +#: ../../include/features.php:387 msgid "" "Provide photo edit option to hide inappropriate photos from default album " "view" msgstr "" -#: ../../include/features.php:388 ../../Zotlabs/Lib/Apps.php:367 +#: ../../include/features.php:396 ../../Zotlabs/Lib/Apps.php:367 #: ../../Zotlabs/Module/Contactedit.php:430 msgid "Profiles" msgstr "" -#: ../../include/features.php:392 +#: ../../include/features.php:400 msgid "Advanced Profiles" msgstr "" -#: ../../include/features.php:393 +#: ../../include/features.php:401 msgid "Additional profile sections and selections" msgstr "" -#: ../../include/features.php:400 +#: ../../include/features.php:408 msgid "Profile Import/Export" msgstr "" -#: ../../include/features.php:401 +#: ../../include/features.php:409 msgid "Save and load profile details across sites/channels" msgstr "" -#: ../../include/features.php:408 +#: ../../include/features.php:416 msgid "Multiple Profiles" msgstr "" -#: ../../include/features.php:409 +#: ../../include/features.php:417 msgid "Ability to create multiple profiles" msgstr "" -#: ../../include/bookmarks.php:34 -#, php-format -msgid "%1$s's bookmarks" -msgstr "" - -#: ../../include/feedutils.php:851 ../../include/text.php:1580 -msgid "unknown" -msgstr "" - #: ../../include/attach.php:156 ../../include/attach.php:205 #: ../../include/attach.php:278 ../../include/attach.php:329 #: ../../include/attach.php:431 ../../include/attach.php:445 #: ../../include/attach.php:452 ../../include/attach.php:534 #: ../../include/attach.php:1106 ../../include/attach.php:1179 -#: ../../include/attach.php:1344 ../../include/photos.php:31 -#: ../../include/items.php:3928 ../../Zotlabs/Lib/Chatroom.php:135 -#: ../../Zotlabs/Web/WebServer.php:119 ../../Zotlabs/Module/Menu.php:130 -#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Editblock.php:67 -#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391 -#: ../../Zotlabs/Module/Channel.php:429 -#: ../../Zotlabs/Module/New_channel.php:106 -#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Block.php:24 -#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Setup.php:220 -#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Api.php:26 -#: ../../Zotlabs/Module/Channel_calendar.php:232 -#: ../../Zotlabs/Module/Editlayout.php:67 -#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Photos.php:71 -#: ../../Zotlabs/Module/Viewconnections.php:28 -#: ../../Zotlabs/Module/Viewconnections.php:33 -#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Common.php:38 -#: ../../Zotlabs/Module/Profiles.php:168 ../../Zotlabs/Module/Profiles.php:611 -#: ../../Zotlabs/Module/Network.php:18 ../../Zotlabs/Module/Authtest.php:13 -#: ../../Zotlabs/Module/Invite.php:65 ../../Zotlabs/Module/Invite.php:316 -#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Suggest.php:32 -#: ../../Zotlabs/Module/Group.php:15 ../../Zotlabs/Module/Group.php:31 -#: ../../Zotlabs/Module/Settings.php:59 ../../Zotlabs/Module/Layouts.php:71 -#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 -#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Cover_photo.php:299 -#: ../../Zotlabs/Module/Cover_photo.php:312 ../../Zotlabs/Module/Chat.php:111 -#: ../../Zotlabs/Module/Chat.php:116 ../../Zotlabs/Module/Achievements.php:34 -#: ../../Zotlabs/Module/Appman.php:163 -#: ../../Zotlabs/Module/Service_limits.php:11 -#: ../../Zotlabs/Module/Connedit.php:299 +#: ../../include/attach.php:1344 ../../include/photos.php:32 +#: ../../addon/openid/Mod_Id.php:53 ../../addon/keepout/keepout.php:36 +#: ../../addon/cards/Mod_Cards.php:89 ../../addon/cards/Mod_Card_edit.php:51 +#: ../../addon/pumpio/pumpio.php:44 +#: ../../addon/articles/Mod_Article_edit.php:51 +#: ../../addon/articles/Mod_Articles.php:94 ../../addon/wiki/Mod_Wiki.php:63 +#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425 +#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34 +#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:392 +#: ../../Zotlabs/Module/Cover_photo.php:299 +#: ../../Zotlabs/Module/Cover_photo.php:312 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 #: ../../Zotlabs/Module/Editwebpage.php:107 #: ../../Zotlabs/Module/Editwebpage.php:121 -#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Thing.php:309 -#: ../../Zotlabs/Module/Thing.php:331 ../../Zotlabs/Module/Thing.php:372 -#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80 -#: ../../Zotlabs/Module/Defperms.php:181 ../../Zotlabs/Module/Locs.php:98 -#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133 -#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile_photo.php:390 -#: ../../Zotlabs/Module/Profile_photo.php:421 -#: ../../Zotlabs/Module/Webpages.php:131 -#: ../../Zotlabs/Module/Connections.php:32 +#: ../../Zotlabs/Module/Webpages.php:130 ../../Zotlabs/Module/Network.php:18 +#: ../../Zotlabs/Module/Service_limits.php:11 +#: ../../Zotlabs/Module/Thing.php:316 ../../Zotlabs/Module/Thing.php:338 +#: ../../Zotlabs/Module/Thing.php:377 ../../Zotlabs/Module/Pdledit.php:35 #: ../../Zotlabs/Module/Filestorage.php:20 #: ../../Zotlabs/Module/Filestorage.php:78 #: ../../Zotlabs/Module/Filestorage.php:96 #: ../../Zotlabs/Module/Filestorage.php:119 -#: ../../Zotlabs/Module/Filestorage.php:165 ../../Zotlabs/Module/Pdledit.php:35 -#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Regmod.php:20 +#: ../../Zotlabs/Module/Filestorage.php:165 +#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Appman.php:163 +#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:288 +#: ../../Zotlabs/Module/Item.php:307 ../../Zotlabs/Module/Item.php:317 +#: ../../Zotlabs/Module/Item.php:1276 ../../Zotlabs/Module/Achievements.php:34 +#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181 +#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20 +#: ../../Zotlabs/Module/Profile_photo.php:390 +#: ../../Zotlabs/Module/Profile_photo.php:421 +#: ../../Zotlabs/Module/Viewconnections.php:28 +#: ../../Zotlabs/Module/Viewconnections.php:33 +#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 +#: ../../Zotlabs/Module/Api.php:26 ../../Zotlabs/Module/Layouts.php:71 +#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89 +#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98 +#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141 +#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70 #: ../../Zotlabs/Module/Attach_edit.php:90 #: ../../Zotlabs/Module/Attach_edit.php:99 -#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Item.php:512 -#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541 -#: ../../Zotlabs/Module/Item.php:1463 ../../Zotlabs/Module/Display.php:387 -#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Sharedwithme.php:19 -#: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Manage.php:10 -#: ../../Zotlabs/Module/Profile.php:99 ../../Zotlabs/Module/Profile.php:114 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:51 -#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:94 -#: ../../extend/addon/hzaddons/pumpio/pumpio.php:44 -#: ../../extend/addon/hzaddons/keepout/keepout.php:36 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:63 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:288 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:425 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:51 -#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:89 -#: ../../extend/addon/hzaddons/openid/Mod_Id.php:53 +#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:15 +#: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Invite.php:65 +#: ../../Zotlabs/Module/Invite.php:316 ../../Zotlabs/Module/Like.php:242 +#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80 +#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:106 +#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Photos.php:71 +#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391 +#: ../../Zotlabs/Module/Channel.php:429 ../../Zotlabs/Module/Profile.php:99 +#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15 +#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:168 +#: ../../Zotlabs/Module/Profiles.php:611 +#: ../../Zotlabs/Module/Sharedwithme.php:19 +#: ../../Zotlabs/Module/Authtest.php:13 +#: ../../Zotlabs/Module/Channel_calendar.php:220 +#: ../../Zotlabs/Module/Chat.php:111 ../../Zotlabs/Module/Chat.php:116 +#: ../../Zotlabs/Module/Editlayout.php:67 +#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Settings.php:59 +#: ../../Zotlabs/Module/Setup.php:220 ../../Zotlabs/Module/Editpost.php:17 +#: ../../Zotlabs/Module/Connections.php:32 +#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Vote.php:19 +#: ../../Zotlabs/Web/WebServer.php:121 msgid "Permission denied." msgstr "" @@ -583,560 +1128,525 @@ msgstr "" msgid "Empty path" msgstr "" -#: ../../include/attach.php:1984 +#: ../../include/attach.php:1992 #, php-format msgid "%s shared an %s with you" msgstr "" -#: ../../include/attach.php:1984 +#: ../../include/attach.php:1992 #, php-format msgid "%s shared a %s with you" msgstr "" -#: ../../include/attach.php:1984 ../../Zotlabs/Module/Like.php:447 +#: ../../include/attach.php:1992 ../../Zotlabs/Module/Like.php:450 msgid "image" msgstr "" -#: ../../include/attach.php:1984 -#: ../../extend/addon/hzaddons/redfiles/redfilehelper.php:64 +#: ../../include/attach.php:1992 ../../addon/redfiles/redfilehelper.php:64 msgid "file" msgstr "" -#: ../../include/network.php:413 -msgid "url: " -msgstr "" - -#: ../../include/network.php:414 -msgid "error_code: " +#: ../../include/selectors.php:17 +msgid "Select a profile to assign to this contact" msgstr "" -#: ../../include/network.php:415 -msgid "error_string: " +#: ../../include/selectors.php:45 +msgid "Frequently" msgstr "" -#: ../../include/network.php:416 -msgid "content-type: " +#: ../../include/selectors.php:46 +msgid "Hourly" msgstr "" -#: ../../include/network.php:1774 ../../include/network.php:1775 -msgid "Friendica" +#: ../../include/selectors.php:47 +msgid "Twice daily" msgstr "" -#: ../../include/network.php:1776 -msgid "OStatus" +#: ../../include/selectors.php:48 +msgid "Daily" msgstr "" -#: ../../include/network.php:1777 -msgid "GNU-Social" +#: ../../include/selectors.php:49 +msgid "Weekly" msgstr "" -#: ../../include/network.php:1778 -msgid "RSS/Atom" +#: ../../include/selectors.php:50 +msgid "Monthly" msgstr "" -#: ../../include/network.php:1779 -msgid "ActivityPub" +#: ../../include/selectors.php:64 ../../include/selectors.php:81 +#: ../../include/channel.php:1731 ../../addon/openid/Mod_Id.php:85 +msgid "Male" msgstr "" -#: ../../include/network.php:1780 ../../Zotlabs/Module/Connedit.php:736 -#: ../../Zotlabs/Module/Admin/Accounts.php:316 -#: ../../Zotlabs/Module/Admin/Accounts.php:330 -#: ../../Zotlabs/Module/Cdav.php:1372 -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:56 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:57 -msgid "Email" +#: ../../include/selectors.php:64 ../../include/selectors.php:81 +#: ../../include/channel.php:1729 ../../addon/openid/Mod_Id.php:87 +msgid "Female" msgstr "" -#: ../../include/network.php:1781 -msgid "Diaspora" +#: ../../include/selectors.php:64 +msgid "Currently Male" msgstr "" -#: ../../include/network.php:1782 -msgid "Facebook" +#: ../../include/selectors.php:64 +msgid "Currently Female" msgstr "" -#: ../../include/network.php:1783 -msgid "Zot" +#: ../../include/selectors.php:64 +msgid "Mostly Male" msgstr "" -#: ../../include/network.php:1784 -msgid "LinkedIn" +#: ../../include/selectors.php:64 +msgid "Mostly Female" msgstr "" -#: ../../include/network.php:1785 -msgid "XMPP/IM" +#: ../../include/selectors.php:64 +msgid "Transgender" msgstr "" -#: ../../include/network.php:1786 -msgid "MySpace" +#: ../../include/selectors.php:64 +msgid "Intersex" msgstr "" -#: ../../include/auth.php:232 -msgid "Delegation session ended." +#: ../../include/selectors.php:64 +msgid "Transsexual" msgstr "" -#: ../../include/auth.php:236 -msgid "Logged out." +#: ../../include/selectors.php:64 +msgid "Hermaphrodite" msgstr "" -#: ../../include/auth.php:342 -msgid "Email validation is incomplete. Please check your email." +#: ../../include/selectors.php:64 ../../include/channel.php:1735 +msgid "Neuter" msgstr "" -#: ../../include/auth.php:358 -msgid "Failed authentication" +#: ../../include/selectors.php:64 ../../include/channel.php:1737 +msgid "Non-specific" msgstr "" -#: ../../include/auth.php:368 -#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:189 -msgid "Login failed." +#: ../../include/selectors.php:64 +msgid "Undecided" msgstr "" -#: ../../include/opengraph.php:56 -#, php-format -msgid "This is the home page of %s." +#: ../../include/selectors.php:100 ../../include/selectors.php:119 +msgid "Males" msgstr "" -#: ../../include/nav.php:109 -msgid "Remote authentication" +#: ../../include/selectors.php:100 ../../include/selectors.php:119 +msgid "Females" msgstr "" -#: ../../include/nav.php:109 -msgid "Click to authenticate to your home hub" +#: ../../include/selectors.php:100 +msgid "Gay" msgstr "" -#: ../../include/nav.php:115 ../../Zotlabs/Module/Admin/Channels.php:168 -#: ../../Zotlabs/Module/Admin.php:118 ../../Zotlabs/Module/Manage.php:162 -#: ../../Zotlabs/Widget/Channel_activities.php:239 -#: ../../Zotlabs/Widget/Admin.php:29 -msgid "Channels" +#: ../../include/selectors.php:100 +msgid "Lesbian" msgstr "" -#: ../../include/nav.php:115 -msgid "Manage your channels" +#: ../../include/selectors.php:100 +msgid "No Preference" msgstr "" -#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345 -#: ../../Zotlabs/Module/Admin/Addons.php:349 -#: ../../Zotlabs/Module/Admin/Themes.php:141 -#: ../../Zotlabs/Widget/Settings_menu.php:71 -#: ../../Zotlabs/Widget/Newmember.php:60 -msgid "Settings" +#: ../../include/selectors.php:100 +msgid "Bisexual" msgstr "" -#: ../../include/nav.php:118 -msgid "Account/Channel Settings" +#: ../../include/selectors.php:100 +msgid "Autosexual" msgstr "" -#: ../../include/nav.php:124 ../../include/nav.php:154 -#: ../../include/nav.php:175 ../../boot.php:1759 -msgid "Logout" +#: ../../include/selectors.php:100 +msgid "Abstinent" msgstr "" -#: ../../include/nav.php:124 ../../include/nav.php:154 -msgid "End this session" +#: ../../include/selectors.php:100 +msgid "Virgin" msgstr "" -#: ../../include/nav.php:127 ../../include/conversation.php:902 -#: ../../Zotlabs/Lib/Apps.php:350 ../../Zotlabs/Module/Connedit.php:480 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:58 -msgid "View Profile" +#: ../../include/selectors.php:100 +msgid "Deviant" msgstr "" -#: ../../include/nav.php:127 -msgid "Your profile page" +#: ../../include/selectors.php:100 +msgid "Fetish" msgstr "" -#: ../../include/nav.php:130 ../../include/channel.php:1539 -#: ../../Zotlabs/Module/Profiles.php:851 -msgid "Edit Profiles" +#: ../../include/selectors.php:100 +msgid "Oodles" msgstr "" -#: ../../include/nav.php:130 -msgid "Manage/Edit profiles" +#: ../../include/selectors.php:100 +msgid "Nonsexual" msgstr "" -#: ../../include/nav.php:132 ../../include/channel.php:1543 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:59 -msgid "Edit Profile" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Single" msgstr "" -#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42 -msgid "Edit your profile" +#: ../../include/selectors.php:138 +msgid "Lonely" msgstr "" -#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1760 -#: ../../Zotlabs/Lib/Apps.php:342 -msgid "Login" +#: ../../include/selectors.php:138 +msgid "Available" msgstr "" -#: ../../include/nav.php:139 ../../include/nav.php:143 -msgid "Sign in" +#: ../../include/selectors.php:138 +msgid "Unavailable" msgstr "" -#: ../../include/nav.php:173 -msgid "Take me home" +#: ../../include/selectors.php:138 +msgid "Has crush" msgstr "" -#: ../../include/nav.php:175 -msgid "Log me out of this site" +#: ../../include/selectors.php:138 +msgid "Infatuated" msgstr "" -#: ../../include/nav.php:180 ../../boot.php:1737 -#: ../../Zotlabs/Module/Register.php:543 -msgid "Register" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Dating" msgstr "" -#: ../../include/nav.php:180 -msgid "Create an account" +#: ../../include/selectors.php:138 +msgid "Unfaithful" msgstr "" -#: ../../include/nav.php:194 ../../include/nav.php:341 -#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184 -msgid "Help" +#: ../../include/selectors.php:138 +msgid "Sex Addict" msgstr "" -#: ../../include/nav.php:194 -msgid "Help and documentation" +#: ../../include/selectors.php:138 ../../include/channel.php:467 +#: ../../include/channel.php:470 ../../Zotlabs/Widget/Affinity.php:38 +#: ../../Zotlabs/Module/Contactedit.php:283 +#: ../../Zotlabs/Module/Connedit.php:581 +msgid "Friends" msgstr "" -#: ../../include/nav.php:208 ../../include/text.php:1190 -#: ../../include/text.php:1202 ../../include/acl_selectors.php:149 -#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Module/Connections.php:403 -#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Widget/Sitesearch.php:37 -#: ../../Zotlabs/Widget/Activity_filter.php:210 -msgid "Search" +#: ../../include/selectors.php:138 +msgid "Friends/Benefits" msgstr "" -#: ../../include/nav.php:208 -msgid "Search site @name, !forum, #tag, ?docs, content" +#: ../../include/selectors.php:138 +msgid "Casual" msgstr "" -#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61 -msgid "Admin" +#: ../../include/selectors.php:138 +msgid "Engaged" msgstr "" -#: ../../include/nav.php:214 -msgid "Site Setup and Configuration" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Married" msgstr "" -#: ../../include/nav.php:345 ../../Zotlabs/Module/New_channel.php:158 -#: ../../Zotlabs/Module/New_channel.php:165 -#: ../../Zotlabs/Module/Defperms.php:254 ../../Zotlabs/Widget/Messages.php:36 -#: ../../Zotlabs/Widget/Notifications.php:175 -msgid "Loading" +#: ../../include/selectors.php:138 +msgid "Imaginarily married" msgstr "" -#: ../../include/nav.php:350 -msgid "@name, #tag, ?doc, content" +#: ../../include/selectors.php:138 +msgid "Partners" msgstr "" -#: ../../include/nav.php:351 -msgid "Please wait..." +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Cohabiting" msgstr "" -#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329 -msgid "Apps" +#: ../../include/selectors.php:138 +msgid "Common law" msgstr "" -#: ../../include/nav.php:358 -msgid "Channel Apps" +#: ../../include/selectors.php:138 +msgid "Happy" msgstr "" -#: ../../include/nav.php:359 -msgid "System Apps" +#: ../../include/selectors.php:138 +msgid "Not looking" msgstr "" -#: ../../include/nav.php:360 -msgid "Pinned Apps" +#: ../../include/selectors.php:138 +msgid "Swinger" msgstr "" -#: ../../include/nav.php:361 -msgid "Featured Apps" +#: ../../include/selectors.php:138 +msgid "Betrayed" msgstr "" -#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349 -#: ../../Zotlabs/Module/Admin/Channels.php:176 -msgid "Channel" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Separated" msgstr "" -#: ../../include/nav.php:450 -msgid "Status Messages and Posts" +#: ../../include/selectors.php:138 +msgid "Unstable" msgstr "" -#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:239 -msgid "About" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Divorced" msgstr "" -#: ../../include/nav.php:463 -msgid "Profile Details" +#: ../../include/selectors.php:138 +msgid "Imaginarily divorced" msgstr "" -#: ../../include/nav.php:473 ../../include/photos.php:722 -msgid "Photo Albums" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "Widowed" msgstr "" -#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346 -#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:85 -#: ../../Zotlabs/Widget/Channel_activities.php:125 -#: ../../Zotlabs/Widget/Notifications.php:108 -msgid "Files" +#: ../../include/selectors.php:138 +msgid "Uncertain" msgstr "" -#: ../../include/nav.php:481 -msgid "Files and Storage" +#: ../../include/selectors.php:138 ../../include/selectors.php:155 +msgid "It's complicated" msgstr "" -#: ../../include/nav.php:503 ../../include/nav.php:506 -#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22 -msgid "Chatrooms" +#: ../../include/selectors.php:138 +msgid "Don't care" msgstr "" -#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335 -#: ../../Zotlabs/Module/Bookmarks.php:90 -msgid "Bookmarks" +#: ../../include/selectors.php:138 +msgid "Ask me" msgstr "" -#: ../../include/nav.php:519 -msgid "Saved Bookmarks" +#: ../../include/activities.php:30 +msgid " and " msgstr "" -#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347 -#: ../../Zotlabs/Module/Webpages.php:247 -#: ../../Zotlabs/Widget/Channel_activities.php:168 -msgid "Webpages" +#: ../../include/activities.php:32 +msgid ", " msgstr "" -#: ../../include/nav.php:530 -msgid "View Webpages" +#: ../../include/activities.php:36 ../../include/activities.php:38 +#: ../../addon/openid/MysqlProvider.php:58 +#: ../../addon/openid/MysqlProvider.php:59 +#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:365 +#: ../../Zotlabs/Module/Profile_photo.php:227 +msgid "Profile Photo" msgstr "" -#: ../../include/event.php:35 ../../include/event.php:133 -msgid "l F d, Y \\@ g:i A" +#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230 +msgid "Cover Photo" msgstr "" -#: ../../include/event.php:43 -msgid "Starts:" +#: ../../include/activities.php:45 +msgid "public profile" msgstr "" -#: ../../include/event.php:53 -msgid "Finishes:" +#: ../../include/activities.php:62 +#, php-format +msgid "%1$s %2$s has been updated to %3$s." msgstr "" -#: ../../include/event.php:67 ../../include/event.php:158 -#: ../../include/channel.php:1640 ../../Zotlabs/Module/Directory.php:354 -msgid "Location:" +#: ../../include/activities.php:65 +#, php-format +msgid "%1$s updated the %2$s. Changed %3$s." msgstr "" -#: ../../include/event.php:133 -msgid "l F d, Y" -msgstr "" +#: ../../include/contact_widgets.php:13 +#, php-format +msgid "%d invitation available" +msgid_plural "%d invitations available" +msgstr[0] "" +msgstr[1] "" -#: ../../include/event.php:137 -msgid "Start:" +#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145 +#: ../../Zotlabs/Module/Admin/Site.php:407 +msgid "Advanced" msgstr "" -#: ../../include/event.php:141 -msgid "End:" +#: ../../include/contact_widgets.php:21 +msgid "Find Channels" msgstr "" -#: ../../include/event.php:146 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:67 -msgid "Timezone" +#: ../../include/contact_widgets.php:22 +msgid "Enter name or interest" msgstr "" -#: ../../include/event.php:1246 -msgid "This event has been added to your calendar." +#: ../../include/contact_widgets.php:23 +msgid "Connect/Follow" msgstr "" -#: ../../include/event.php:1400 ../../include/conversation.php:153 -#: ../../include/text.php:2361 ../../Zotlabs/Module/Channel_calendar.php:221 -#: ../../Zotlabs/Module/Tagger.php:75 ../../Zotlabs/Module/Like.php:450 -msgid "event" +#: ../../include/contact_widgets.php:24 +msgid "Examples: Robert Morgenstein, Fishing" msgstr "" -#: ../../include/event.php:1479 -msgid "Not specified" +#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435 +#: ../../Zotlabs/Module/Directory.php:440 +#: ../../Zotlabs/Module/Connections.php:407 +msgid "Find" msgstr "" -#: ../../include/event.php:1480 -msgid "Needs Action" +#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77 +#: ../../Zotlabs/Module/Directory.php:439 +msgid "Channel Suggestions" msgstr "" -#: ../../include/event.php:1481 -msgid "Completed" +#: ../../include/contact_widgets.php:28 +msgid "Random Profile" msgstr "" -#: ../../include/event.php:1482 -msgid "In Process" +#: ../../include/contact_widgets.php:29 +msgid "Invite Friends" msgstr "" -#: ../../include/event.php:1483 -msgid "Cancelled" +#: ../../include/contact_widgets.php:31 +msgid "Advanced example: name=fred and country=iceland" msgstr "" -#: ../../include/event.php:1564 ../../include/connections.php:790 -#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377 -msgid "Mobile" +#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121 +#: ../../include/contact_widgets.php:155 +#: ../../addon/cards/Widget/Cards_categories.php:83 +#: ../../addon/articles/Widget/Articles_categories.php:83 +#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36 +msgid "Everything" msgstr "" -#: ../../include/event.php:1565 ../../include/connections.php:791 -#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378 -#: ../../Zotlabs/Widget/Notifications.php:43 -msgid "Home" +#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152 +#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507 +#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548 +#: ../../addon/cards/Widget/Cards_categories.php:80 +#: ../../addon/articles/Widget/Articles_categories.php:80 +#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392 +#: ../../Zotlabs/Storage/Browser.php:406 ../../Zotlabs/Module/Cdav.php:1062 +msgid "Categories" msgstr "" -#: ../../include/event.php:1566 ../../include/connections.php:792 -msgid "Home, Voice" +#: ../../include/contact_widgets.php:185 +msgid "Common Connections" msgstr "" -#: ../../include/event.php:1567 ../../include/connections.php:793 -msgid "Home, Fax" +#: ../../include/contact_widgets.php:189 +#, php-format +msgid "View all %d common connections" msgstr "" -#: ../../include/event.php:1568 ../../include/connections.php:794 -#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379 -msgid "Work" +#: ../../include/cdav.php:157 +msgid "INVALID EVENT DISMISSED!" msgstr "" -#: ../../include/event.php:1569 ../../include/connections.php:795 -msgid "Work, Voice" +#: ../../include/cdav.php:158 +msgid "Summary: " msgstr "" -#: ../../include/event.php:1570 ../../include/connections.php:796 -msgid "Work, Fax" +#: ../../include/cdav.php:158 ../../include/cdav.php:159 +#: ../../include/cdav.php:167 ../../include/conversation.php:1006 +#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252 +#: ../../Zotlabs/Lib/Activity.php:1724 ../../Zotlabs/Widget/Album.php:90 +#: ../../Zotlabs/Widget/Pinned.php:256 ../../Zotlabs/Widget/Portfolio.php:99 +#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:788 +#: ../../Zotlabs/Module/Photos.php:1246 +msgid "Unknown" msgstr "" -#: ../../include/event.php:1571 ../../include/event.php:1578 -#: ../../include/connections.php:797 ../../include/connections.php:804 -#: ../../include/selectors.php:64 ../../include/selectors.php:81 -#: ../../include/selectors.php:119 ../../include/selectors.php:155 -#: ../../Zotlabs/Access/PermissionRoles.php:362 -#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380 -msgid "Other" +#: ../../include/cdav.php:159 +msgid "Date: " msgstr "" -#: ../../include/photos.php:153 -#, php-format -msgid "Image exceeds website size limit of %lu bytes" +#: ../../include/cdav.php:160 ../../include/cdav.php:168 +msgid "Reason: " msgstr "" -#: ../../include/photos.php:164 -msgid "Image file is empty." +#: ../../include/cdav.php:166 +msgid "INVALID CARD DISMISSED!" msgstr "" -#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:240 -#: ../../Zotlabs/Module/Profile_photo.php:275 -msgid "Unable to process image" +#: ../../include/cdav.php:167 +msgid "Name: " msgstr "" -#: ../../include/photos.php:324 -msgid "Photo storage failed." +#: ../../include/group.php:23 +msgid "" +"A deleted group with this name was revived. Existing item permissions " +"<strong>may</strong> apply to this group and any future members. If this is " +"not what you intended, please create another group with a different name." msgstr "" -#: ../../include/photos.php:373 -msgid "a new photo" +#: ../../include/group.php:271 +msgid "Add new connections to this privacy group" msgstr "" -#: ../../include/photos.php:377 -#, php-format -msgctxt "photo_upload" -msgid "%1$s posted %2$s to %3$s" +#: ../../include/group.php:305 +msgid "edit" msgstr "" -#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1339 -#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353 -msgid "Recent Photos" +#: ../../include/group.php:327 ../../include/acl_selectors.php:87 +#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Widget/Activity_filter.php:95 +#: ../../Zotlabs/Module/Group.php:144 +msgid "Privacy Groups" msgstr "" -#: ../../include/photos.php:727 -msgid "Upload New Photos" +#: ../../include/group.php:328 +msgid "Edit group" msgstr "" -#: ../../include/items.php:456 ../../Zotlabs/Web/WebServer.php:118 -#: ../../Zotlabs/Module/Import_items.php:116 ../../Zotlabs/Module/Group.php:109 -#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54 -#: ../../Zotlabs/Module/Profperm.php:29 ../../Zotlabs/Module/Subthread.php:89 -#: ../../Zotlabs/Module/Like.php:344 -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:75 -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:119 -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:109 -msgid "Permission denied" +#: ../../include/group.php:329 +msgid "Manage privacy groups" msgstr "" -#: ../../include/items.php:1241 -msgid "Visible to anybody on the internet." +#: ../../include/group.php:330 +msgid "Channels not in any privacy group" msgstr "" -#: ../../include/items.php:1243 -msgid "Visible to you only." +#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90 +msgid "add" msgstr "" -#: ../../include/items.php:1245 -msgid "Visible to anybody in this network." +#: ../../include/taxonomy.php:326 +msgid "Trending" msgstr "" -#: ../../include/items.php:1247 -msgid "Visible to anybody authenticated." +#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465 +#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:26 +msgid "Tags" msgstr "" -#: ../../include/items.php:1249 -#, php-format -msgid "Visible to anybody on %s." +#: ../../include/taxonomy.php:566 +msgid "Keywords" msgstr "" -#: ../../include/items.php:1251 -msgid "Visible to all connections." +#: ../../include/taxonomy.php:587 +msgid "have" msgstr "" -#: ../../include/items.php:1253 -msgid "Visible to approved connections." +#: ../../include/taxonomy.php:587 +msgid "has" msgstr "" -#: ../../include/items.php:1255 -msgid "Visible to specific connections." +#: ../../include/taxonomy.php:588 +msgid "want" msgstr "" -#: ../../include/items.php:3345 ../../Zotlabs/Lib/Activity.php:2196 -#: ../../Zotlabs/Module/Share.php:124 -#, php-format -msgid "🔁 Repeated %1$s's %2$s" +#: ../../include/taxonomy.php:588 +msgid "wants" msgstr "" -#: ../../include/items.php:3848 ../../Zotlabs/Module/Viewsrc.php:25 -#: ../../Zotlabs/Module/Thing.php:113 ../../Zotlabs/Module/Filestorage.php:29 -#: ../../Zotlabs/Module/Admin/Addons.php:264 -#: ../../Zotlabs/Module/Admin/Themes.php:73 ../../Zotlabs/Module/Display.php:59 -#: ../../Zotlabs/Module/Display.php:120 ../../Zotlabs/Module/Display.php:391 -#: ../../Zotlabs/Module/Admin.php:63 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:291 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:292 -msgid "Item not found." +#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:296 +msgid "like" msgstr "" -#: ../../include/items.php:4430 ../../Zotlabs/Module/Group.php:63 -#: ../../Zotlabs/Module/Group.php:207 -msgid "Privacy group not found." +#: ../../include/taxonomy.php:589 +msgid "likes" msgstr "" -#: ../../include/items.php:4446 -msgid "Privacy group is empty." +#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:297 +msgid "dislike" msgstr "" -#: ../../include/items.php:4453 -#, php-format -msgid "Privacy group: %s" +#: ../../include/taxonomy.php:590 +msgid "dislikes" msgstr "" -#: ../../include/items.php:4463 -#, php-format -msgid "Connection: %s" -msgstr "" +#: ../../include/taxonomy.php:677 ../../include/conversation.php:1560 +#: ../../Zotlabs/Module/Photos.php:1129 +msgctxt "noun" +msgid "Like" +msgid_plural "Likes" +msgstr[0] "" +msgstr[1] "" -#: ../../include/items.php:4465 -msgid "Connection not found." +#: ../../include/photo/photo_driver.php:458 +#: ../../Zotlabs/Module/Profile_photo.php:168 +#: ../../Zotlabs/Module/Profile_photo.php:337 +msgid "Profile Photos" msgstr "" #: ../../include/account.php:39 @@ -1188,262 +1698,442 @@ msgstr "" msgid "your registration password" msgstr "" -#: ../../include/account.php:607 ../../include/account.php:696 +#: ../../include/account.php:607 ../../include/account.php:680 #, php-format msgid "Registration details for %s" msgstr "" -#: ../../include/account.php:707 +#: ../../include/account.php:695 msgid "Account approved." msgstr "" -#: ../../include/account.php:763 +#: ../../include/account.php:747 #, php-format msgid "Registration revoked for %s" msgstr "" -#: ../../include/account.php:770 +#: ../../include/account.php:754 #, php-format msgid "Could not revoke registration for %s" msgstr "" -#: ../../include/account.php:1187 ../../include/account.php:1189 +#: ../../include/account.php:1171 ../../include/account.php:1173 msgid "Click here to upgrade." msgstr "" -#: ../../include/account.php:1195 +#: ../../include/account.php:1179 msgid "This action exceeds the limits set by your subscription plan." msgstr "" -#: ../../include/account.php:1200 +#: ../../include/account.php:1184 msgid "This action is not available under your subscription plan." msgstr "" -#: ../../include/account.php:1260 +#: ../../include/account.php:1244 msgid "open" msgstr "" -#: ../../include/account.php:1260 +#: ../../include/account.php:1244 msgid "closed" msgstr "" -#: ../../include/account.php:1267 +#: ../../include/account.php:1251 msgid "Registration is currently" msgstr "" -#: ../../include/account.php:1276 +#: ../../include/account.php:1260 msgid "please come back" msgstr "" -#: ../../include/photo/photo_driver.php:458 -#: ../../Zotlabs/Module/Profile_photo.php:168 -#: ../../Zotlabs/Module/Profile_photo.php:337 -msgid "Profile Photos" +#: ../../include/js_strings.php:5 +msgid "Delete this item?" msgstr "" -#: ../../include/activities.php:30 -msgid " and " +#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Moderate.php:78 +msgid "Item deleted" msgstr "" -#: ../../include/activities.php:32 -msgid ", " +#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:798 +#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207 +msgid "Comment" msgstr "" -#: ../../include/activities.php:36 ../../include/activities.php:38 -#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Module/Profile_photo.php:227 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:58 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:59 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:60 -msgid "Profile Photo" +#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:507 +msgid "show all" msgstr "" -#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230 -msgid "Cover Photo" +#: ../../include/js_strings.php:9 +msgid "show less" msgstr "" -#: ../../include/activities.php:45 -msgid "public profile" +#: ../../include/js_strings.php:10 +msgid "expand" msgstr "" -#: ../../include/activities.php:62 -#, php-format -msgid "%1$s %2$s has been updated to %3$s." +#: ../../include/js_strings.php:11 +msgid "collapse" msgstr "" -#: ../../include/activities.php:65 -#, php-format -msgid "%1$s updated the %2$s. Changed %3$s." +#: ../../include/js_strings.php:12 +msgid "Password too short" msgstr "" -#: ../../include/group.php:23 -msgid "" -"A deleted group with this name was revived. Existing item permissions " -"<strong>may</strong> apply to this group and any future members. If this is " -"not what you intended, please create another group with a different name." +#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162 +msgid "Passwords do not match" msgstr "" -#: ../../include/group.php:271 -msgid "Add new connections to this privacy group" +#: ../../include/js_strings.php:14 +msgid "everybody" msgstr "" -#: ../../include/group.php:305 -msgid "edit" +#: ../../include/js_strings.php:15 +msgid "Secret Passphrase" msgstr "" -#: ../../include/group.php:327 ../../include/acl_selectors.php:87 -#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Module/Group.php:144 -#: ../../Zotlabs/Widget/Activity_filter.php:95 -msgid "Privacy Groups" +#: ../../include/js_strings.php:16 +msgid "Passphrase hint" msgstr "" -#: ../../include/group.php:328 -msgid "Edit group" +#: ../../include/js_strings.php:17 +msgid "Notice: Permissions have changed but have not yet been submitted." msgstr "" -#: ../../include/group.php:329 -msgid "Manage privacy groups" +#: ../../include/js_strings.php:18 +msgid "close all" msgstr "" -#: ../../include/group.php:330 -msgid "Channels not in any privacy group" +#: ../../include/js_strings.php:19 +msgid "Nothing new here" msgstr "" -#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90 -msgid "add" +#: ../../include/js_strings.php:20 +msgid "Rate This Channel (this is public)" msgstr "" -#: ../../include/language.php:423 ../../include/text.php:2199 -msgid "default" +#: ../../include/js_strings.php:21 +msgid "Rating" msgstr "" -#: ../../include/language.php:436 -msgid "Select an alternate language" +#: ../../include/js_strings.php:22 +msgid "Describe (optional)" msgstr "" -#: ../../include/import.php:31 -msgid "Unable to import a removed channel." +#: ../../include/js_strings.php:24 +msgid "Please enter a link URL" msgstr "" -#: ../../include/import.php:57 -msgid "" -"Cannot create a duplicate channel identifier on this system. Import failed." +#: ../../include/js_strings.php:25 +msgid "Unsaved changes. Are you sure you wish to leave this page?" msgstr "" -#: ../../include/import.php:78 -#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:43 -msgid "Unable to create a unique channel address. Import failed." +#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121 +#: ../../Zotlabs/Module/Pubsites.php:55 ../../Zotlabs/Module/Profiles.php:476 +#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Cdav.php:1006 +msgid "Location" msgstr "" -#: ../../include/import.php:129 -msgid "Cloned channel not found. Import failed." +#: ../../include/js_strings.php:27 +msgid "lovely" msgstr "" -#: ../../include/datetime.php:58 ../../Zotlabs/Module/Profiles.php:751 -#: ../../Zotlabs/Widget/Newmember.php:58 -msgid "Miscellaneous" +#: ../../include/js_strings.php:28 +msgid "wonderful" msgstr "" -#: ../../include/datetime.php:140 -msgid "Birthday" +#: ../../include/js_strings.php:29 +msgid "fantastic" msgstr "" -#: ../../include/datetime.php:140 -msgid "Age: " +#: ../../include/js_strings.php:30 +msgid "great" msgstr "" -#: ../../include/datetime.php:140 -msgid "YYYY-MM-DD or MM-DD" +#: ../../include/js_strings.php:31 +msgid "" +"Your chosen nickname was either already taken or not valid. Please use our " +"suggestion (" msgstr "" -#: ../../include/datetime.php:211 ../../include/js_strings.php:124 -#: ../../Zotlabs/Module/Profiles.php:760 ../../Zotlabs/Module/Profiles.php:764 -#: ../../Zotlabs/Module/Appman.php:218 ../../Zotlabs/Module/Appman.php:219 -#: ../../Zotlabs/Module/Register.php:501 -#: ../../Zotlabs/Module/Settings/Multifactor.php:84 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:334 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:358 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:434 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:458 -msgid "Required" +#: ../../include/js_strings.php:32 +msgid ") or enter a new one." msgstr "" -#: ../../include/datetime.php:238 ../../boot.php:2774 -msgid "never" +#: ../../include/js_strings.php:33 +msgid "Thank you, this nickname is valid." msgstr "" -#: ../../include/datetime.php:244 -msgid "less than a second ago" +#: ../../include/js_strings.php:34 +msgid "A channel name is required." msgstr "" -#: ../../include/datetime.php:262 -#, php-format -msgctxt "e.g. 22 hours ago, 1 minute ago" -msgid "%1$d %2$s ago" +#: ../../include/js_strings.php:35 +msgid "This is a " msgstr "" -#: ../../include/datetime.php:273 -msgctxt "relative_date" -msgid "year" -msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +#: ../../include/js_strings.php:36 +msgid " channel name" +msgstr "" -#: ../../include/datetime.php:276 -msgctxt "relative_date" -msgid "month" -msgid_plural "months" -msgstr[0] "" -msgstr[1] "" +#: ../../include/js_strings.php:37 +msgid "Back to reply" +msgstr "" -#: ../../include/datetime.php:279 -msgctxt "relative_date" -msgid "week" -msgid_plural "weeks" +#: ../../include/js_strings.php:38 +msgid "Pinned" +msgstr "" + +#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:457 +msgid "Pin to the top" +msgstr "" + +#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:457 +#: ../../Zotlabs/Widget/Pinned.php:150 +msgid "Unpin from the top" +msgstr "" + +#: ../../include/js_strings.php:46 +#, php-format +msgid "%d minutes" +msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: ../../include/datetime.php:282 -msgctxt "relative_date" -msgid "day" -msgid_plural "days" +#: ../../include/js_strings.php:47 +#, php-format +msgid "about %d hours" +msgid_plural "about %d hours" msgstr[0] "" msgstr[1] "" -#: ../../include/datetime.php:285 -msgctxt "relative_date" -msgid "hour" -msgid_plural "hours" +#: ../../include/js_strings.php:48 +#, php-format +msgid "%d days" +msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: ../../include/datetime.php:288 -msgctxt "relative_date" -msgid "minute" -msgid_plural "minutes" +#: ../../include/js_strings.php:49 +#, php-format +msgid "%d months" +msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: ../../include/datetime.php:291 -msgctxt "relative_date" -msgid "second" -msgid_plural "seconds" +#: ../../include/js_strings.php:50 +#, php-format +msgid "%d years" +msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: ../../include/datetime.php:520 -#, php-format -msgid "%1$s's birthday" +#: ../../include/js_strings.php:52 ../../include/text.php:1503 +msgid "January" +msgstr "" + +#: ../../include/js_strings.php:53 ../../include/text.php:1503 +msgid "February" +msgstr "" + +#: ../../include/js_strings.php:54 ../../include/text.php:1503 +msgid "March" +msgstr "" + +#: ../../include/js_strings.php:55 ../../include/text.php:1503 +msgid "April" +msgstr "" + +#: ../../include/js_strings.php:56 +msgctxt "long" +msgid "May" +msgstr "" + +#: ../../include/js_strings.php:57 ../../include/text.php:1503 +msgid "June" +msgstr "" + +#: ../../include/js_strings.php:58 ../../include/text.php:1503 +msgid "July" +msgstr "" + +#: ../../include/js_strings.php:59 ../../include/text.php:1503 +msgid "August" +msgstr "" + +#: ../../include/js_strings.php:60 ../../include/text.php:1503 +msgid "September" +msgstr "" + +#: ../../include/js_strings.php:61 ../../include/text.php:1503 +msgid "October" +msgstr "" + +#: ../../include/js_strings.php:62 ../../include/text.php:1503 +msgid "November" +msgstr "" + +#: ../../include/js_strings.php:63 ../../include/text.php:1503 +msgid "December" +msgstr "" + +#: ../../include/js_strings.php:64 +msgid "Jan" +msgstr "" + +#: ../../include/js_strings.php:65 +msgid "Feb" +msgstr "" + +#: ../../include/js_strings.php:66 +msgid "Mar" +msgstr "" + +#: ../../include/js_strings.php:67 +msgid "Apr" +msgstr "" + +#: ../../include/js_strings.php:68 +msgctxt "short" +msgid "May" +msgstr "" + +#: ../../include/js_strings.php:69 +msgid "Jun" +msgstr "" + +#: ../../include/js_strings.php:70 +msgid "Jul" +msgstr "" + +#: ../../include/js_strings.php:71 +msgid "Aug" +msgstr "" + +#: ../../include/js_strings.php:72 +msgid "Sep" +msgstr "" + +#: ../../include/js_strings.php:73 +msgid "Oct" +msgstr "" + +#: ../../include/js_strings.php:74 +msgid "Nov" +msgstr "" + +#: ../../include/js_strings.php:75 +msgid "Dec" +msgstr "" + +#: ../../include/js_strings.php:76 ../../include/text.php:1499 +msgid "Sunday" msgstr "" -#: ../../include/datetime.php:521 +#: ../../include/js_strings.php:77 ../../include/text.php:1499 +msgid "Monday" +msgstr "" + +#: ../../include/js_strings.php:78 ../../include/text.php:1499 +msgid "Tuesday" +msgstr "" + +#: ../../include/js_strings.php:79 ../../include/text.php:1499 +msgid "Wednesday" +msgstr "" + +#: ../../include/js_strings.php:80 ../../include/text.php:1499 +msgid "Thursday" +msgstr "" + +#: ../../include/js_strings.php:81 ../../include/text.php:1499 +msgid "Friday" +msgstr "" + +#: ../../include/js_strings.php:82 ../../include/text.php:1499 +msgid "Saturday" +msgstr "" + +#: ../../include/js_strings.php:83 +msgid "Sun" +msgstr "" + +#: ../../include/js_strings.php:84 +msgid "Mon" +msgstr "" + +#: ../../include/js_strings.php:85 +msgid "Tue" +msgstr "" + +#: ../../include/js_strings.php:86 +msgid "Wed" +msgstr "" + +#: ../../include/js_strings.php:87 +msgid "Thu" +msgstr "" + +#: ../../include/js_strings.php:88 +msgid "Fri" +msgstr "" + +#: ../../include/js_strings.php:89 +msgid "Sat" +msgstr "" + +#: ../../include/js_strings.php:90 +msgctxt "calendar" +msgid "today" +msgstr "" + +#: ../../include/js_strings.php:91 +msgctxt "calendar" +msgid "month" +msgstr "" + +#: ../../include/js_strings.php:92 +msgctxt "calendar" +msgid "week" +msgstr "" + +#: ../../include/js_strings.php:93 +msgctxt "calendar" +msgid "day" +msgstr "" + +#: ../../include/js_strings.php:94 +msgctxt "calendar" +msgid "All day" +msgstr "" + +#: ../../include/js_strings.php:97 +msgid "Please stand by while your download is being prepared." +msgstr "" + +#: ../../include/js_strings.php:100 +msgid "Email address not valid" +msgstr "" + +#: ../../include/js_strings.php:101 ../../include/datetime.php:211 +#: ../../addon/cart/submodules/orderoptions.php:334 +#: ../../addon/cart/submodules/orderoptions.php:358 +#: ../../addon/cart/submodules/orderoptions.php:434 +#: ../../addon/cart/submodules/orderoptions.php:458 +#: ../../Zotlabs/Module/Register.php:501 ../../Zotlabs/Module/Appman.php:218 +#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:760 +#: ../../Zotlabs/Module/Profiles.php:764 +#: ../../Zotlabs/Module/Settings/Multifactor.php:84 +msgid "Required" +msgstr "" + +#: ../../include/zid.php:417 #, php-format -msgid "Happy Birthday %1$s" +msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "" -#: ../../include/conversation.php:149 ../../include/text.php:2358 -#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:112 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693 -#: ../../extend/addon/hzaddons/redphotos/redphotohelper.php:71 +#: ../../include/conversation.php:149 ../../include/text.php:2356 +#: ../../addon/redphotos/redphotohelper.php:71 +#: ../../addon/diaspora/Receiver.php:1704 +#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:73 msgid "photo" msgstr "" @@ -1451,13 +2141,19 @@ msgstr "" msgid "channel" msgstr "" -#: ../../include/conversation.php:182 ../../include/text.php:2366 +#: ../../include/conversation.php:180 ../../include/markdown.php:192 +#: ../../include/text.php:2362 ../../include/bbcode.php:572 #: ../../Zotlabs/Module/Tagger.php:81 +msgid "post" +msgstr "" + +#: ../../include/conversation.php:182 ../../include/text.php:2364 +#: ../../Zotlabs/Module/Tagger.php:83 msgid "comment" msgstr "" -#: ../../include/conversation.php:196 ../../Zotlabs/Module/Like.php:483 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1628 +#: ../../include/conversation.php:196 ../../addon/diaspora/Receiver.php:1639 +#: ../../Zotlabs/Module/Like.php:486 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" @@ -1467,7 +2163,7 @@ msgstr "" msgid "likes %1$s's %2$s" msgstr "" -#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:485 +#: ../../include/conversation.php:201 ../../Zotlabs/Module/Like.php:488 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "" @@ -1487,7 +2183,7 @@ msgstr "" msgid "repeated %1$s's %2$s" msgstr "" -#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:536 +#: ../../include/conversation.php:334 ../../Zotlabs/Lib/ThreadItem.php:474 msgid "This is an unsaved preview" msgstr "" @@ -1501,20 +2197,20 @@ msgctxt "title" msgid "Dislikes" msgstr "" -#: ../../include/conversation.php:473 ../../Zotlabs/Module/Photos.php:1111 -#: ../../Zotlabs/Widget/Pinned.php:73 +#: ../../include/conversation.php:473 ../../Zotlabs/Widget/Pinned.php:73 +#: ../../Zotlabs/Module/Photos.php:1111 msgctxt "title" msgid "Attending" msgstr "" -#: ../../include/conversation.php:474 ../../Zotlabs/Module/Photos.php:1111 -#: ../../Zotlabs/Widget/Pinned.php:74 +#: ../../include/conversation.php:474 ../../Zotlabs/Widget/Pinned.php:74 +#: ../../Zotlabs/Module/Photos.php:1111 msgctxt "title" msgid "Not attending" msgstr "" -#: ../../include/conversation.php:475 ../../Zotlabs/Module/Photos.php:1111 -#: ../../Zotlabs/Widget/Pinned.php:75 +#: ../../include/conversation.php:475 ../../Zotlabs/Widget/Pinned.php:75 +#: ../../Zotlabs/Module/Photos.php:1111 msgctxt "title" msgid "Might attend" msgstr "" @@ -1529,26 +2225,27 @@ msgid "Select" msgstr "" #: ../../include/conversation.php:547 ../../include/conversation.php:608 -#: ../../Zotlabs/Lib/Apps.php:618 ../../Zotlabs/Lib/ThreadItem.php:183 -#: ../../Zotlabs/Lib/ThreadItem.php:544 ../../Zotlabs/Storage/Browser.php:388 -#: ../../Zotlabs/Module/Editblock.php:139 -#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1173 -#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Group.php:252 -#: ../../Zotlabs/Module/Oauth2.php:193 ../../Zotlabs/Module/Connedit.php:540 -#: ../../Zotlabs/Module/Connedit.php:749 -#: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Thing.php:295 -#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Webpages.php:252 -#: ../../Zotlabs/Module/Admin/Accounts.php:320 +#: ../../addon/cards/Mod_Card_edit.php:124 +#: ../../addon/articles/Mod_Article_edit.php:124 ../../Zotlabs/Lib/Apps.php:618 +#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Lib/ThreadItem.php:482 +#: ../../Zotlabs/Storage/Browser.php:388 +#: ../../Zotlabs/Module/Editwebpage.php:167 +#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Oauth.php:172 +#: ../../Zotlabs/Module/Thing.php:302 ../../Zotlabs/Module/Tokens.php:295 +#: ../../Zotlabs/Module/Contactedit.php:651 +#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749 +#: ../../Zotlabs/Module/Admin/Accounts.php:220 +#: ../../Zotlabs/Module/Admin/Profs.php:177 #: ../../Zotlabs/Module/Admin/Channels.php:171 -#: ../../Zotlabs/Module/Admin/Profs.php:177 ../../Zotlabs/Module/Tokens.php:295 -#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Cdav.php:1047 -#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Contactedit.php:651 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:128 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:130 +#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:252 +#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Photos.php:1173 +#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Cdav.php:1047 +#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Oauth2.php:193 +#: ../../Zotlabs/Module/Editblock.php:139 msgid "Delete" msgstr "" -#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:287 +#: ../../include/conversation.php:553 ../../Zotlabs/Lib/ThreadItem.php:248 msgid "Toggle Star Status" msgstr "" @@ -1556,20 +2253,20 @@ msgstr "" msgid "Private Message" msgstr "" -#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:297 +#: ../../include/conversation.php:568 ../../Zotlabs/Lib/ThreadItem.php:258 #: ../../Zotlabs/Widget/Pinned.php:84 msgid "Message signature validated" msgstr "" -#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:298 +#: ../../include/conversation.php:569 ../../Zotlabs/Lib/ThreadItem.php:259 #: ../../Zotlabs/Widget/Pinned.php:85 msgid "Message signature incorrect" msgstr "" -#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:543 +#: ../../include/conversation.php:607 ../../Zotlabs/Lib/ThreadItem.php:481 +#: ../../Zotlabs/Module/Admin/Accounts.php:218 #: ../../Zotlabs/Module/Connections.php:358 #: ../../Zotlabs/Module/Connections.php:409 -#: ../../Zotlabs/Module/Admin/Accounts.php:318 msgid "Approve" msgstr "" @@ -1586,31 +2283,28 @@ msgstr "" msgid "Filed under:" msgstr "" -#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:455 -#: ../../Zotlabs/Widget/Pinned.php:128 +#: ../../include/conversation.php:642 ../../Zotlabs/Lib/ThreadItem.php:414 +#: ../../Zotlabs/Widget/Pinned.php:127 #, php-format msgid "from %s" msgstr "" -#: ../../include/conversation.php:645 ../../Zotlabs/Lib/ThreadItem.php:458 -#: ../../Zotlabs/Widget/Pinned.php:131 +#: ../../include/conversation.php:645 ../../Zotlabs/Widget/Pinned.php:130 #, php-format msgid "last edited: %s" msgstr "" -#: ../../include/conversation.php:646 ../../Zotlabs/Lib/ThreadItem.php:459 -#: ../../Zotlabs/Widget/Pinned.php:132 +#: ../../include/conversation.php:646 ../../Zotlabs/Widget/Pinned.php:131 #, php-format msgid "Expires: %s" msgstr "" -#: ../../include/conversation.php:661 -#: ../../extend/addon/hzaddons/articles/articles.php:83 -#: ../../extend/addon/hzaddons/cards/cards.php:82 +#: ../../include/conversation.php:661 ../../addon/cards/cards.php:82 +#: ../../addon/articles/articles.php:83 msgid "View in context" msgstr "" -#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:537 +#: ../../include/conversation.php:663 ../../Zotlabs/Lib/ThreadItem.php:475 #: ../../Zotlabs/Module/Photos.php:1077 msgid "Please wait" msgstr "" @@ -1623,7 +2317,7 @@ msgstr "" msgid "Loading..." msgstr "" -#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:314 +#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:275 msgid "Conversation Features" msgstr "" @@ -1643,15 +2337,21 @@ msgstr "" msgid "Unfollow Thread" msgstr "" +#: ../../include/conversation.php:902 ../../include/nav.php:127 +#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:350 +#: ../../Zotlabs/Module/Connedit.php:480 +msgid "View Profile" +msgstr "" + #: ../../include/conversation.php:914 ../../Zotlabs/Module/Connedit.php:501 msgid "Recent Activity" msgstr "" -#: ../../include/conversation.php:926 ../../include/channel.php:1625 -#: ../../include/connections.php:150 ../../Zotlabs/Module/Suggest.php:69 +#: ../../include/conversation.php:926 ../../include/connections.php:150 +#: ../../include/channel.php:1627 ../../Zotlabs/Widget/Suggestions.php:51 +#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Suggest.php:69 #: ../../Zotlabs/Module/Directory.php:371 #: ../../Zotlabs/Module/Connections.php:365 -#: ../../Zotlabs/Widget/Suggestions.php:51 ../../Zotlabs/Widget/Follow.php:37 msgid "Connect" msgstr "" @@ -1659,16 +2359,6 @@ msgstr "" msgid "Edit Connection" msgstr "" -#: ../../include/conversation.php:1006 ../../include/cdav.php:158 -#: ../../include/cdav.php:159 ../../include/cdav.php:167 -#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252 -#: ../../Zotlabs/Lib/Activity.php:1684 ../../Zotlabs/Module/Photos.php:788 -#: ../../Zotlabs/Module/Photos.php:1246 -#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Widget/Pinned.php:257 -#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Portfolio.php:99 -msgid "Unknown" -msgstr "" - #: ../../include/conversation.php:1008 msgid "Approve this item" msgstr "" @@ -1722,91 +2412,78 @@ msgstr "" msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:1129 -#: ../../extend/addon/hzaddons/hsse/hsse.php:82 +#: ../../include/conversation.php:1129 ../../addon/hsse/hsse.php:82 msgid "Set your location" msgstr "" -#: ../../include/conversation.php:1130 -#: ../../extend/addon/hzaddons/hsse/hsse.php:83 +#: ../../include/conversation.php:1130 ../../addon/hsse/hsse.php:83 msgid "Clear browser location" msgstr "" -#: ../../include/conversation.php:1142 ../../Zotlabs/Module/Editblock.php:116 -#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Module/Editwebpage.php:143 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:99 -#: ../../extend/addon/hzaddons/hsse/hsse.php:95 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:101 +#: ../../include/conversation.php:1142 ../../addon/cards/Mod_Card_edit.php:94 +#: ../../addon/articles/Mod_Article_edit.php:94 ../../addon/hsse/hsse.php:95 +#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:219 +#: ../../Zotlabs/Module/Editblock.php:116 msgid "Insert web link" msgstr "" -#: ../../include/conversation.php:1146 -#: ../../extend/addon/hzaddons/hsse/hsse.php:99 +#: ../../include/conversation.php:1146 ../../addon/hsse/hsse.php:99 msgid "Embed (existing) photo from your photo albums" msgstr "" -#: ../../include/conversation.php:1179 ../../Zotlabs/Module/Chat.php:217 -#: ../../extend/addon/hzaddons/hsse/hsse.php:134 +#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:134 +#: ../../Zotlabs/Module/Chat.php:217 msgid "Please enter a link URL:" msgstr "" -#: ../../include/conversation.php:1180 -#: ../../extend/addon/hzaddons/hsse/hsse.php:135 +#: ../../include/conversation.php:1180 ../../addon/hsse/hsse.php:135 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:1181 -#: ../../extend/addon/hzaddons/hsse/hsse.php:136 +#: ../../include/conversation.php:1181 ../../addon/hsse/hsse.php:136 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:1184 ../../Zotlabs/Module/Cover_photo.php:388 +#: ../../include/conversation.php:1184 ../../addon/wiki/Mod_Wiki.php:400 +#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:388 #: ../../Zotlabs/Module/Profile_photo.php:555 -#: ../../extend/addon/hzaddons/hsse/hsse.php:139 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:400 msgid "Choose images to embed" msgstr "" -#: ../../include/conversation.php:1185 ../../Zotlabs/Module/Cover_photo.php:389 +#: ../../include/conversation.php:1185 ../../addon/wiki/Mod_Wiki.php:401 +#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:389 #: ../../Zotlabs/Module/Profile_photo.php:556 -#: ../../extend/addon/hzaddons/hsse/hsse.php:140 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:401 msgid "Choose an album" msgstr "" -#: ../../include/conversation.php:1186 -#: ../../extend/addon/hzaddons/hsse/hsse.php:141 +#: ../../include/conversation.php:1186 ../../addon/hsse/hsse.php:141 msgid "Choose a different album..." msgstr "" -#: ../../include/conversation.php:1187 ../../Zotlabs/Module/Cover_photo.php:391 +#: ../../include/conversation.php:1187 ../../addon/wiki/Mod_Wiki.php:403 +#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:391 #: ../../Zotlabs/Module/Profile_photo.php:558 -#: ../../extend/addon/hzaddons/hsse/hsse.php:142 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:403 msgid "Error getting album list" msgstr "" -#: ../../include/conversation.php:1188 ../../Zotlabs/Module/Cover_photo.php:392 +#: ../../include/conversation.php:1188 ../../addon/wiki/Mod_Wiki.php:404 +#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:392 #: ../../Zotlabs/Module/Profile_photo.php:559 -#: ../../extend/addon/hzaddons/hsse/hsse.php:143 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:404 msgid "Error getting photo link" msgstr "" -#: ../../include/conversation.php:1189 ../../Zotlabs/Module/Cover_photo.php:393 +#: ../../include/conversation.php:1189 ../../addon/wiki/Mod_Wiki.php:405 +#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:393 #: ../../Zotlabs/Module/Profile_photo.php:560 -#: ../../extend/addon/hzaddons/hsse/hsse.php:144 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:405 msgid "Error getting album" msgstr "" -#: ../../include/conversation.php:1190 -#: ../../extend/addon/hzaddons/hsse/hsse.php:145 +#: ../../include/conversation.php:1190 ../../addon/hsse/hsse.php:145 msgid "Comments enabled" msgstr "" -#: ../../include/conversation.php:1191 -#: ../../extend/addon/hzaddons/hsse/hsse.php:146 +#: ../../include/conversation.php:1191 ../../addon/hsse/hsse.php:146 +#: ../../Zotlabs/Lib/ThreadItem.php:472 msgid "Comments disabled" msgstr "" @@ -1814,99 +2491,90 @@ msgstr "" msgid "Confirm delete" msgstr "" -#: ../../include/conversation.php:1209 ../../Zotlabs/Lib/ThreadItem.php:878 -#: ../../Zotlabs/Module/Photos.php:1096 ../../Zotlabs/Module/Webpages.php:257 -#: ../../extend/addon/hzaddons/hsse/hsse.php:153 +#: ../../include/conversation.php:1209 ../../addon/hsse/hsse.php:153 +#: ../../Zotlabs/Lib/ThreadItem.php:809 ../../Zotlabs/Module/Webpages.php:256 +#: ../../Zotlabs/Module/Photos.php:1096 msgid "Preview" msgstr "" -#: ../../include/conversation.php:1242 ../../Zotlabs/Lib/ThreadItem.php:344 -#: ../../Zotlabs/Module/Photos.php:1076 ../../Zotlabs/Module/Layouts.php:192 -#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Webpages.php:251 -#: ../../Zotlabs/Widget/Cdav.php:142 -#: ../../extend/addon/hzaddons/hsse/hsse.php:186 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:304 +#: ../../include/conversation.php:1242 ../../addon/wiki/Mod_Wiki.php:304 +#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:305 +#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:250 +#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Blocks.php:159 +#: ../../Zotlabs/Module/Photos.php:1076 msgid "Share" msgstr "" -#: ../../include/conversation.php:1251 -#: ../../extend/addon/hzaddons/hsse/hsse.php:195 +#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:195 msgid "Page link name" msgstr "" -#: ../../include/conversation.php:1254 -#: ../../extend/addon/hzaddons/hsse/hsse.php:198 +#: ../../include/conversation.php:1254 ../../addon/hsse/hsse.php:198 msgid "Post as" msgstr "" -#: ../../include/conversation.php:1256 ../../Zotlabs/Lib/ThreadItem.php:869 -#: ../../extend/addon/hzaddons/hsse/hsse.php:200 +#: ../../include/conversation.php:1256 ../../addon/hsse/hsse.php:200 +#: ../../Zotlabs/Lib/ThreadItem.php:800 msgid "Bold" msgstr "" -#: ../../include/conversation.php:1257 ../../Zotlabs/Lib/ThreadItem.php:870 -#: ../../extend/addon/hzaddons/hsse/hsse.php:201 +#: ../../include/conversation.php:1257 ../../addon/hsse/hsse.php:201 +#: ../../Zotlabs/Lib/ThreadItem.php:801 msgid "Italic" msgstr "" -#: ../../include/conversation.php:1258 ../../Zotlabs/Lib/ThreadItem.php:871 -#: ../../extend/addon/hzaddons/hsse/hsse.php:202 +#: ../../include/conversation.php:1258 ../../addon/hsse/hsse.php:202 +#: ../../Zotlabs/Lib/ThreadItem.php:802 msgid "Underline" msgstr "" -#: ../../include/conversation.php:1259 ../../Zotlabs/Lib/ThreadItem.php:872 -#: ../../extend/addon/hzaddons/hsse/hsse.php:203 +#: ../../include/conversation.php:1259 ../../addon/hsse/hsse.php:203 +#: ../../Zotlabs/Lib/ThreadItem.php:803 msgid "Quote" msgstr "" -#: ../../include/conversation.php:1260 ../../Zotlabs/Lib/ThreadItem.php:873 -#: ../../extend/addon/hzaddons/hsse/hsse.php:204 +#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:204 +#: ../../Zotlabs/Lib/ThreadItem.php:804 msgid "Code" msgstr "" -#: ../../include/conversation.php:1261 ../../Zotlabs/Lib/ThreadItem.php:875 -#: ../../extend/addon/hzaddons/hsse/hsse.php:205 +#: ../../include/conversation.php:1261 ../../addon/hsse/hsse.php:205 +#: ../../Zotlabs/Lib/ThreadItem.php:806 msgid "Attach/Upload file" msgstr "" -#: ../../include/conversation.php:1264 -#: ../../extend/addon/hzaddons/hsse/hsse.php:208 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:397 +#: ../../include/conversation.php:1264 ../../addon/wiki/Mod_Wiki.php:397 +#: ../../addon/hsse/hsse.php:208 msgid "Embed an image from your albums" msgstr "" #: ../../include/conversation.php:1265 ../../include/conversation.php:1320 -#: ../../Zotlabs/Storage/Browser.php:387 ../../Zotlabs/Module/Editblock.php:141 -#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Oauth.php:110 -#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Editpost.php:114 -#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143 -#: ../../Zotlabs/Module/Cover_photo.php:386 ../../Zotlabs/Module/Tagrm.php:15 -#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Connedit.php:750 -#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Filer.php:56 -#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88 -#: ../../Zotlabs/Module/Profile_photo.php:553 -#: ../../Zotlabs/Module/Admin/Addons.php:431 ../../Zotlabs/Module/Cdav.php:1049 -#: ../../Zotlabs/Module/Cdav.php:1386 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:130 -#: ../../extend/addon/hzaddons/hsse/hsse.php:209 -#: ../../extend/addon/hzaddons/hsse/hsse.php:258 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:365 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:398 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:132 +#: ../../addon/cards/Mod_Card_edit.php:126 +#: ../../addon/articles/Mod_Article_edit.php:126 +#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398 +#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258 +#: ../../Zotlabs/Storage/Browser.php:387 +#: ../../Zotlabs/Module/Cover_photo.php:386 +#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:111 +#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750 +#: ../../Zotlabs/Module/Profile_photo.php:553 ../../Zotlabs/Module/Tagrm.php:15 +#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Fbrowser.php:68 +#: ../../Zotlabs/Module/Fbrowser.php:90 ../../Zotlabs/Module/Editlayout.php:140 +#: ../../Zotlabs/Module/Editpost.php:115 ../../Zotlabs/Module/Cdav.php:1049 +#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Oauth2.php:116 +#: ../../Zotlabs/Module/Oauth2.php:143 ../../Zotlabs/Module/Editblock.php:141 +#: ../../Zotlabs/Module/Filer.php:67 msgid "Cancel" msgstr "" #: ../../include/conversation.php:1266 ../../include/conversation.php:1319 -#: ../../Zotlabs/Module/Cover_photo.php:387 +#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210 +#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:387 #: ../../Zotlabs/Module/Profile_photo.php:554 -#: ../../extend/addon/hzaddons/hsse/hsse.php:210 -#: ../../extend/addon/hzaddons/hsse/hsse.php:257 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:399 msgid "OK" msgstr "" -#: ../../include/conversation.php:1268 -#: ../../extend/addon/hzaddons/hsse/hsse.php:212 +#: ../../include/conversation.php:1268 ../../addon/hsse/hsse.php:212 msgid "Toggle voting" msgstr "" @@ -1938,195 +2606,18 @@ msgstr "" msgid "Allow multiple answers" msgstr "" -#: ../../include/conversation.php:1273 -#: ../../view/theme/redbasic/php/config.php:201 -#: ../../view/theme/redbasic/php/config.php:202 -#: ../../view/theme/redbasic/php/config.php:203 -#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765 -#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167 -#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310 -#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 -#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395 -#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163 -#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:101 -#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674 -#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692 -#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122 -#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138 -#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148 -#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302 -#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Connedit.php:622 -#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Import.php:615 -#: ../../Zotlabs/Module/Import.php:616 ../../Zotlabs/Module/Register.php:515 -#: ../../Zotlabs/Module/Defperms.php:195 -#: ../../Zotlabs/Module/Filestorage.php:203 -#: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:306 ../../Zotlabs/Module/Mitem.php:176 -#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 -#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247 -#: ../../Zotlabs/Module/Settings/Channel.php:225 -#: ../../Zotlabs/Module/Settings/Multifactor.php:82 -#: ../../Zotlabs/Module/Settings/Privacy.php:133 -#: ../../Zotlabs/Module/Settings/Privacy.php:134 -#: ../../Zotlabs/Module/Settings/Privacy.php:135 -#: ../../Zotlabs/Module/Settings/Privacy.php:136 -#: ../../Zotlabs/Module/Settings/Privacy.php:137 -#: ../../Zotlabs/Module/Settings/Privacy.php:138 -#: ../../Zotlabs/Module/Settings/Display.php:87 -#: ../../Zotlabs/Module/Contactedit.php:270 -#: ../../Zotlabs/Module/Contactedit.php:315 -#: ../../extend/addon/hzaddons/cart/cart.php:1418 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:338 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:362 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:438 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:462 -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153 -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69 -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169 -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136 -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231 -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57 -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45 -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92 -msgid "No" -msgstr "" - -#: ../../include/conversation.php:1273 -#: ../../view/theme/redbasic/php/config.php:201 -#: ../../view/theme/redbasic/php/config.php:202 -#: ../../view/theme/redbasic/php/config.php:203 -#: ../../view/theme/redbasic/php/config.php:215 ../../boot.php:1765 -#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:167 -#: ../../Zotlabs/Lib/Libzotdir.php:169 ../../Zotlabs/Storage/Browser.php:310 -#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 -#: ../../Zotlabs/Storage/Browser.php:393 ../../Zotlabs/Storage/Browser.php:395 -#: ../../Zotlabs/Storage/Browser.php:559 ../../Zotlabs/Module/Menu.php:163 -#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Api.php:100 -#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:674 -#: ../../Zotlabs/Module/Profiles.php:684 ../../Zotlabs/Module/Profiles.php:692 -#: ../../Zotlabs/Module/Profiles.php:696 ../../Zotlabs/Module/Sources.php:122 -#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Group.php:138 -#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148 -#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302 -#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Import.php:611 -#: ../../Zotlabs/Module/Import.php:615 ../../Zotlabs/Module/Import.php:616 -#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195 -#: ../../Zotlabs/Module/Filestorage.php:203 -#: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Module/Admin/Site.php:308 ../../Zotlabs/Module/Mitem.php:176 -#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 -#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247 -#: ../../Zotlabs/Module/Settings/Channel.php:225 -#: ../../Zotlabs/Module/Settings/Multifactor.php:82 -#: ../../Zotlabs/Module/Settings/Privacy.php:133 -#: ../../Zotlabs/Module/Settings/Privacy.php:134 -#: ../../Zotlabs/Module/Settings/Privacy.php:135 -#: ../../Zotlabs/Module/Settings/Privacy.php:136 -#: ../../Zotlabs/Module/Settings/Privacy.php:137 -#: ../../Zotlabs/Module/Settings/Privacy.php:138 -#: ../../Zotlabs/Module/Settings/Display.php:87 -#: ../../Zotlabs/Module/Contactedit.php:270 -#: ../../extend/addon/hzaddons/cart/cart.php:1418 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:72 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:337 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:361 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:437 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:461 -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:153 -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:425 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:63 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:254 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:258 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:88 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:98 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:87 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:95 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:67 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:651 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:655 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:61 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:73 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:218 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69 -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169 -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:70 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136 -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231 -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57 -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:45 -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92 -msgid "Yes" -msgstr "" - -#: ../../include/conversation.php:1275 -#: ../../extend/addon/hzaddons/hsse/hsse.php:215 +#: ../../include/conversation.php:1275 ../../addon/hsse/hsse.php:215 msgid "Disable comments" msgstr "" -#: ../../include/conversation.php:1276 -#: ../../extend/addon/hzaddons/hsse/hsse.php:216 +#: ../../include/conversation.php:1276 ../../addon/hsse/hsse.php:216 msgid "Toggle comments" msgstr "" -#: ../../include/conversation.php:1282 ../../Zotlabs/Module/Editblock.php:129 +#: ../../include/conversation.php:1282 ../../addon/cards/Mod_Card_edit.php:111 +#: ../../addon/articles/Mod_Article_edit.php:111 ../../addon/hsse/hsse.php:221 #: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:116 -#: ../../extend/addon/hzaddons/hsse/hsse.php:221 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:118 +#: ../../Zotlabs/Module/Editblock.php:129 msgid "Title (optional)" msgstr "" @@ -2134,45 +2625,31 @@ msgstr "" msgid "Summary (optional)" msgstr "" -#: ../../include/conversation.php:1286 -#: ../../extend/addon/hzaddons/hsse/hsse.php:224 +#: ../../include/conversation.php:1286 ../../addon/hsse/hsse.php:224 msgid "Categories (optional, comma-separated list)" msgstr "" -#: ../../include/conversation.php:1287 -#: ../../extend/addon/hzaddons/hsse/hsse.php:225 +#: ../../include/conversation.php:1287 ../../addon/hsse/hsse.php:225 msgid "Permission settings" msgstr "" -#: ../../include/conversation.php:1309 -#: ../../extend/addon/hzaddons/hsse/hsse.php:247 +#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:247 msgid "Other networks and post services" msgstr "" -#: ../../include/conversation.php:1312 -#: ../../extend/addon/hzaddons/hsse/hsse.php:250 +#: ../../include/conversation.php:1312 ../../addon/hsse/hsse.php:250 msgid "Set expiration date" msgstr "" -#: ../../include/conversation.php:1315 -#: ../../extend/addon/hzaddons/hsse/hsse.php:253 +#: ../../include/conversation.php:1315 ../../addon/hsse/hsse.php:253 msgid "Set publish date" msgstr "" -#: ../../include/conversation.php:1317 ../../Zotlabs/Lib/ThreadItem.php:881 -#: ../../Zotlabs/Module/Chat.php:218 -#: ../../extend/addon/hzaddons/hsse/hsse.php:255 +#: ../../include/conversation.php:1317 ../../addon/hsse/hsse.php:255 +#: ../../Zotlabs/Lib/ThreadItem.php:812 ../../Zotlabs/Module/Chat.php:218 msgid "Encrypt text" msgstr "" -#: ../../include/conversation.php:1560 ../../include/taxonomy.php:677 -#: ../../Zotlabs/Module/Photos.php:1129 -msgctxt "noun" -msgid "Like" -msgid_plural "Likes" -msgstr[0] "" -msgstr[1] "" - #: ../../include/conversation.php:1563 msgctxt "noun" msgid "Repeat" @@ -2208,829 +2685,805 @@ msgid_plural "Undecided" msgstr[0] "" msgstr[1] "" -#: ../../include/text.php:562 -msgid "prev" +#: ../../include/nav.php:109 +msgid "Remote authentication" msgstr "" -#: ../../include/text.php:564 -msgid "first" +#: ../../include/nav.php:109 +msgid "Click to authenticate to your home hub" msgstr "" -#: ../../include/text.php:593 -msgid "last" +#: ../../include/nav.php:115 ../../Zotlabs/Widget/Channel_activities.php:239 +#: ../../Zotlabs/Widget/Admin.php:29 +#: ../../Zotlabs/Module/Admin/Channels.php:168 +#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:118 +msgid "Channels" msgstr "" -#: ../../include/text.php:596 -msgid "next" +#: ../../include/nav.php:115 +msgid "Manage your channels" msgstr "" -#: ../../include/text.php:614 -msgid "older" +#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345 +#: ../../Zotlabs/Widget/Newmember.php:60 +#: ../../Zotlabs/Widget/Settings_menu.php:71 +#: ../../Zotlabs/Module/Admin/Themes.php:141 +#: ../../Zotlabs/Module/Admin/Addons.php:127 +msgid "Settings" msgstr "" -#: ../../include/text.php:616 -msgid "newer" +#: ../../include/nav.php:118 +msgid "Account/Channel Settings" msgstr "" -#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80 -#: ../../Zotlabs/Module/Connections.php:306 -msgid "Accepts" +#: ../../include/nav.php:124 ../../include/nav.php:154 +#: ../../include/nav.php:175 ../../boot.php:1753 +msgid "Logout" msgstr "" -#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83 -#: ../../Zotlabs/Module/Connections.php:309 -msgid "Comments" +#: ../../include/nav.php:124 ../../include/nav.php:154 +msgid "End this session" msgstr "" -#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88 -#: ../../Zotlabs/Module/Connections.php:314 -msgid "Stream items" +#: ../../include/nav.php:127 +msgid "Your profile page" msgstr "" -#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93 -#: ../../Zotlabs/Module/Connections.php:319 -msgid "Wall posts" +#: ../../include/nav.php:130 ../../include/channel.php:1541 +#: ../../Zotlabs/Module/Profiles.php:851 +msgid "Edit Profiles" msgstr "" -#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97 -#: ../../Zotlabs/Module/Connections.php:323 -msgid "Nothing" +#: ../../include/nav.php:130 +msgid "Manage/Edit profiles" msgstr "" -#: ../../include/text.php:1116 -#, php-format -msgid "View all %s connections" +#: ../../include/nav.php:132 ../../include/channel.php:1545 +#: ../../addon/openclipatar/openclipatar.php:59 +msgid "Edit Profile" msgstr "" -#: ../../include/text.php:1179 -#, php-format -msgid "Network: %s" +#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42 +msgid "Edit your profile" msgstr "" -#: ../../include/text.php:1191 ../../include/text.php:1203 -#: ../../Zotlabs/Module/Rbmark.php:29 ../../Zotlabs/Module/Rbmark.php:85 -#: ../../Zotlabs/Module/Filer.php:54 -#: ../../Zotlabs/Module/Admin/Queueworker.php:115 -#: ../../Zotlabs/Module/Admin/Profs.php:95 -#: ../../Zotlabs/Module/Admin/Profs.php:115 -#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:120 -#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:116 -msgid "Save" +#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1754 +#: ../../Zotlabs/Lib/Apps.php:342 +msgid "Login" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:100 -msgid "Monday" +#: ../../include/nav.php:139 ../../include/nav.php:143 +msgid "Sign in" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:101 -msgid "Tuesday" +#: ../../include/nav.php:173 +msgid "Take me home" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:102 -msgid "Wednesday" +#: ../../include/nav.php:175 +msgid "Log me out of this site" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:103 -msgid "Thursday" +#: ../../include/nav.php:180 ../../boot.php:1731 +#: ../../Zotlabs/Module/Register.php:543 +msgid "Register" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:104 -msgid "Friday" +#: ../../include/nav.php:180 +msgid "Create an account" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:105 -msgid "Saturday" +#: ../../include/nav.php:194 ../../include/nav.php:341 +#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184 +msgid "Help" msgstr "" -#: ../../include/text.php:1499 ../../include/js_strings.php:99 -msgid "Sunday" +#: ../../include/nav.php:194 +msgid "Help and documentation" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:75 -msgid "January" +#: ../../include/nav.php:208 ../../include/acl_selectors.php:149 +#: ../../include/text.php:1190 ../../include/text.php:1202 +#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Widget/Sitesearch.php:37 +#: ../../Zotlabs/Widget/Activity_filter.php:210 +#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Module/Connections.php:403 +msgid "Search" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:76 -msgid "February" +#: ../../include/nav.php:208 +msgid "Search site @name, !forum, #tag, ?docs, content" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:77 -msgid "March" +#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61 +msgid "Admin" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:78 -msgid "April" +#: ../../include/nav.php:214 +msgid "Site Setup and Configuration" msgstr "" -#: ../../include/text.php:1503 -msgid "May" +#: ../../include/nav.php:345 ../../Zotlabs/Widget/Notifications.php:175 +#: ../../Zotlabs/Widget/Messages.php:50 ../../Zotlabs/Module/Defperms.php:254 +#: ../../Zotlabs/Module/New_channel.php:158 +#: ../../Zotlabs/Module/New_channel.php:165 +msgid "Loading" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:80 -msgid "June" +#: ../../include/nav.php:350 +msgid "@name, #tag, ?doc, content" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:81 -msgid "July" +#: ../../include/nav.php:351 +msgid "Please wait..." msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:82 -msgid "August" +#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329 +msgid "Apps" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:83 -msgid "September" +#: ../../include/nav.php:358 +msgid "Channel Apps" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:84 -msgid "October" +#: ../../include/nav.php:359 +msgid "System Apps" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:85 -msgid "November" +#: ../../include/nav.php:360 +msgid "Pinned Apps" msgstr "" -#: ../../include/text.php:1503 ../../include/js_strings.php:86 -msgid "December" +#: ../../include/nav.php:361 +msgid "Featured Apps" msgstr "" -#: ../../include/text.php:1577 -msgid "Unknown attachment" +#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349 +#: ../../Zotlabs/Module/Admin/Channels.php:176 +msgid "Channel" msgstr "" -#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383 -#: ../../Zotlabs/Module/Sharedwithme.php:109 -msgid "Size" +#: ../../include/nav.php:450 +msgid "Status Messages and Posts" msgstr "" -#: ../../include/text.php:1623 -msgid "remove category" +#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:240 +msgid "About" msgstr "" -#: ../../include/text.php:1701 -msgid "remove from file" +#: ../../include/nav.php:463 +msgid "Profile Details" msgstr "" -#: ../../include/text.php:1888 -msgid "Download binary/encrypted content" +#: ../../include/nav.php:473 ../../include/photos.php:747 +msgid "Photo Albums" msgstr "" -#: ../../include/text.php:1946 ../../include/text.php:1955 -#: ../../include/text.php:1982 ../../include/text.php:1991 -#, php-format -msgctxt "noun" -msgid "%d Vote" -msgid_plural "%d Votes" -msgstr[0] "" -msgstr[1] "" +#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346 +#: ../../Zotlabs/Widget/Notifications.php:108 +#: ../../Zotlabs/Widget/Channel_activities.php:125 +#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:87 +msgid "Files" +msgstr "" -#: ../../include/text.php:1998 -#, php-format -msgctxt "noun" -msgid "%d Vote in total" -msgid_plural "%d Votes in total" -msgstr[0] "" -msgstr[1] "" +#: ../../include/nav.php:481 +msgid "Files and Storage" +msgstr "" -#: ../../include/text.php:2004 -msgid "Poll has ended" +#: ../../include/nav.php:503 ../../include/nav.php:506 +#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22 +msgid "Chatrooms" msgstr "" -#: ../../include/text.php:2007 -#, php-format -msgid "Poll ends in %s" +#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335 +#: ../../Zotlabs/Module/Bookmarks.php:90 +msgid "Bookmarks" msgstr "" -#: ../../include/text.php:2014 ../../Zotlabs/Lib/ThreadItem.php:471 -msgid "Vote" +#: ../../include/nav.php:519 +msgid "Saved Bookmarks" msgstr "" -#: ../../include/text.php:2174 -msgid "Link to Source" +#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347 +#: ../../Zotlabs/Widget/Channel_activities.php:168 +#: ../../Zotlabs/Module/Webpages.php:246 +msgid "Webpages" msgstr "" -#: ../../include/text.php:2207 -msgid "Page layout" +#: ../../include/nav.php:530 +msgid "View Webpages" msgstr "" -#: ../../include/text.php:2207 -msgid "You can create your own with the layouts tool" +#: ../../include/security.php:633 +msgid "" +"The form security token was not correct. This probably happened because the " +"form has been opened for too long (>3 hours) before submitting it." msgstr "" -#: ../../include/text.php:2217 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68 -msgid "BBcode" +#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:58 +#: ../../Zotlabs/Module/Profiles.php:751 +msgid "Miscellaneous" msgstr "" -#: ../../include/text.php:2218 -msgid "HTML" +#: ../../include/datetime.php:140 +msgid "Birthday" msgstr "" -#: ../../include/text.php:2219 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:368 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68 -#: ../../extend/addon/hzaddons/mdpost/mdpost.php:41 -msgid "Markdown" +#: ../../include/datetime.php:140 +msgid "Age: " msgstr "" -#: ../../include/text.php:2220 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:903 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:68 -msgid "Text" +#: ../../include/datetime.php:140 +msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: ../../include/text.php:2221 -msgid "Comanche Layout" +#: ../../include/datetime.php:238 ../../boot.php:2768 +msgid "never" msgstr "" -#: ../../include/text.php:2226 -msgid "PHP" +#: ../../include/datetime.php:244 +msgid "less than a second ago" msgstr "" -#: ../../include/text.php:2238 -msgid "Page content type" +#: ../../include/datetime.php:262 +#, php-format +msgctxt "e.g. 22 hours ago, 1 minute ago" +msgid "%1$d %2$s ago" msgstr "" -#: ../../include/text.php:2371 -msgid "activity" +#: ../../include/datetime.php:284 +msgid "ago" msgstr "" -#: ../../include/text.php:2374 -msgid "poll" +#: ../../include/datetime.php:287 +msgid "in" msgstr "" -#: ../../include/text.php:2487 -msgid "a-z, 0-9, -, and _ only" +#: ../../include/datetime.php:304 +msgid "now" msgstr "" -#: ../../include/text.php:2795 -msgid "Design Tools" +#: ../../include/datetime.php:312 +msgctxt "relative_date" +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:315 +msgctxt "relative_date" +msgid "month" +msgid_plural "months" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:318 +msgctxt "relative_date" +msgid "week" +msgid_plural "weeks" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:321 +msgctxt "relative_date" +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:324 +msgctxt "relative_date" +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:327 +msgctxt "relative_date" +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:330 +msgctxt "relative_date" +msgid "second" +msgid_plural "seconds" +msgstr[0] "" +msgstr[1] "" + +#: ../../include/datetime.php:559 +#, php-format +msgid "%1$s's birthday" msgstr "" -#: ../../include/text.php:2798 ../../Zotlabs/Module/Blocks.php:152 -msgid "Blocks" +#: ../../include/datetime.php:560 +#, php-format +msgid "Happy Birthday %1$s" msgstr "" -#: ../../include/text.php:2799 ../../Zotlabs/Module/Menu.php:171 -msgid "Menus" +#: ../../include/photos.php:154 +#, php-format +msgid "Image exceeds website size limit of %lu bytes" msgstr "" -#: ../../include/text.php:2800 ../../Zotlabs/Module/Layouts.php:182 -msgid "Layouts" +#: ../../include/photos.php:165 +msgid "Image file is empty." msgstr "" -#: ../../include/text.php:2801 -msgid "Pages" +#: ../../include/photos.php:199 ../../Zotlabs/Module/Cover_photo.php:240 +#: ../../Zotlabs/Module/Profile_photo.php:275 +msgid "Unable to process image" msgstr "" -#: ../../include/text.php:2813 -msgid "Import" +#: ../../include/photos.php:325 +msgid "Photo storage failed." msgstr "" -#: ../../include/text.php:2814 -msgid "Import website..." +#: ../../include/photos.php:374 +msgid "a new photo" msgstr "" -#: ../../include/text.php:2815 -msgid "Select folder to import" +#: ../../include/photos.php:378 +#, php-format +msgctxt "photo_upload" +msgid "%1$s posted %2$s to %3$s" msgstr "" -#: ../../include/text.php:2816 -msgid "Import from a zipped folder:" +#: ../../include/photos.php:748 ../../Zotlabs/Module/Photos.php:1339 +#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353 +msgid "Recent Photos" msgstr "" -#: ../../include/text.php:2817 -msgid "Import from cloud files:" +#: ../../include/photos.php:752 +msgid "Upload New Photos" msgstr "" -#: ../../include/text.php:2818 -msgid "/cloud/channel/path/to/folder" +#: ../../include/connections.php:174 +msgid "New window" msgstr "" -#: ../../include/text.php:2819 -msgid "Enter path to website files" +#: ../../include/connections.php:175 +msgid "Open the selected location in a different window or browser tab" msgstr "" -#: ../../include/text.php:2820 -msgid "Select folder" +#: ../../include/network.php:414 +msgid "url: " msgstr "" -#: ../../include/text.php:2821 -msgid "Export website..." +#: ../../include/network.php:415 +msgid "error_code: " msgstr "" -#: ../../include/text.php:2822 -msgid "Export to a zip file" +#: ../../include/network.php:416 +msgid "error_string: " msgstr "" -#: ../../include/text.php:2823 -msgid "website.zip" +#: ../../include/network.php:417 +msgid "content-type: " msgstr "" -#: ../../include/text.php:2824 -msgid "Enter a name for the zip file." +#: ../../include/network.php:1775 ../../include/network.php:1776 +msgid "Friendica" msgstr "" -#: ../../include/text.php:2825 -msgid "Export to cloud files" +#: ../../include/network.php:1777 +msgid "OStatus" msgstr "" -#: ../../include/text.php:2826 -msgid "/path/to/export/folder" +#: ../../include/network.php:1778 +msgid "GNU-Social" msgstr "" -#: ../../include/text.php:2827 -msgid "Enter a path to a cloud files destination." +#: ../../include/network.php:1779 +msgid "RSS/Atom" msgstr "" -#: ../../include/text.php:2828 -msgid "Specify folder" +#: ../../include/network.php:1780 +msgid "ActivityPub" msgstr "" -#: ../../include/text.php:3520 ../../view/theme/redbasic/php/config.php:18 -#: ../../Zotlabs/Module/Admin/Site.php:232 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:335 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:359 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:435 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:459 -msgid "Default" +#: ../../include/network.php:1781 ../../addon/openid/MysqlProvider.php:56 +#: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69 +#: ../../addon/rtof/Mod_Rtof.php:55 ../../Zotlabs/Module/Connedit.php:736 +#: ../../Zotlabs/Module/Admin/Accounts.php:216 +#: ../../Zotlabs/Module/Admin/Accounts.php:230 +#: ../../Zotlabs/Module/Cdav.php:1372 +msgid "Email" msgstr "" -#: ../../include/oembed.php:155 -msgid "View PDF" +#: ../../include/network.php:1782 +msgid "Diaspora" msgstr "" -#: ../../include/oembed.php:390 -msgid " by " +#: ../../include/network.php:1783 +msgid "Facebook" msgstr "" -#: ../../include/oembed.php:391 -msgid " on " +#: ../../include/network.php:1784 +msgid "Zot" msgstr "" -#: ../../include/oembed.php:424 -msgid "Embedded content" +#: ../../include/network.php:1785 +msgid "LinkedIn" msgstr "" -#: ../../include/oembed.php:433 -msgid "Embedding disabled" +#: ../../include/network.php:1786 +msgid "XMPP/IM" msgstr "" -#: ../../include/js_strings.php:5 -msgid "Delete this item?" +#: ../../include/network.php:1787 +msgid "MySpace" msgstr "" -#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Moderate.php:78 -msgid "Item deleted" +#: ../../include/markdown.php:190 ../../include/bbcode.php:576 +#, php-format +msgid "%1$s wrote the following %2$s %3$s" msgstr "" -#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:867 -#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207 -msgid "Comment" +#: ../../include/markdown.php:262 ../../include/bbcode.php:661 +msgid "spoiler" msgstr "" -#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:576 -msgid "show all" +#: ../../include/language.php:423 ../../include/text.php:2197 +msgid "default" msgstr "" -#: ../../include/js_strings.php:9 -msgid "show less" +#: ../../include/language.php:436 +msgid "Select an alternate language" msgstr "" -#: ../../include/js_strings.php:10 -msgid "expand" +#: ../../include/menu.php:120 ../../include/channel.php:1541 +#: ../../include/channel.php:1545 ../../addon/cards/cards.php:74 +#: ../../addon/articles/articles.php:75 ../../addon/wiki/Mod_Wiki.php:214 +#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:617 +#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Widget/Cdav.php:144 +#: ../../Zotlabs/Widget/Cdav.php:181 ../../Zotlabs/Module/Editwebpage.php:142 +#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Module/Oauth.php:171 +#: ../../Zotlabs/Module/Thing.php:301 ../../Zotlabs/Module/Layouts.php:191 +#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:176 +#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Blocks.php:158 +#: ../../Zotlabs/Module/Editlayout.php:114 +#: ../../Zotlabs/Module/Connections.php:338 +#: ../../Zotlabs/Module/Connections.php:387 +#: ../../Zotlabs/Module/Connections.php:408 ../../Zotlabs/Module/Oauth2.php:192 +#: ../../Zotlabs/Module/Editblock.php:114 +msgid "Edit" msgstr "" -#: ../../include/js_strings.php:11 -msgid "collapse" +#: ../../include/acl_selectors.php:33 +#: ../../Zotlabs/Lib/PermissionDescription.php:34 +msgid "Visible to your default audience" msgstr "" -#: ../../include/js_strings.php:12 -msgid "Password too short" +#: ../../include/acl_selectors.php:100 +msgid "Profile-Based Privacy Groups" msgstr "" -#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162 -msgid "Passwords do not match" +#: ../../include/acl_selectors.php:119 +msgid "Private Forum" msgstr "" -#: ../../include/js_strings.php:14 -msgid "everybody" +#: ../../include/acl_selectors.php:125 +#: ../../Zotlabs/Widget/Notifications.php:131 +#: ../../Zotlabs/Widget/Notifications.php:132 +#: ../../Zotlabs/Widget/Activity_filter.php:130 +#: ../../Zotlabs/Widget/Forums.php:77 +msgid "Forums" msgstr "" -#: ../../include/js_strings.php:15 -msgid "Secret Passphrase" +#: ../../include/acl_selectors.php:136 +#: ../../Zotlabs/Lib/PermissionDescription.php:107 +#: ../../Zotlabs/Module/Settings/Privacy.php:66 +msgid "Only me" msgstr "" -#: ../../include/js_strings.php:16 -msgid "Passphrase hint" +#: ../../include/acl_selectors.php:143 +msgid "Share with" msgstr "" -#: ../../include/js_strings.php:17 -msgid "Notice: Permissions have changed but have not yet been submitted." +#: ../../include/acl_selectors.php:144 +msgid "Custom selection" msgstr "" -#: ../../include/js_strings.php:18 -msgid "close all" +#: ../../include/acl_selectors.php:146 +msgid "" +"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and " +"limit the scope of \"Allow\"." msgstr "" -#: ../../include/js_strings.php:19 -msgid "Nothing new here" +#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32 +msgid "Allow" msgstr "" -#: ../../include/js_strings.php:20 -msgid "Rate This Channel (this is public)" +#: ../../include/acl_selectors.php:148 +msgid "Don't allow" msgstr "" -#: ../../include/js_strings.php:21 -msgid "Rating" +#: ../../include/acl_selectors.php:154 +#: ../../addon/flashcards/Mod_Flashcards.php:261 +#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:407 +#: ../../Zotlabs/Module/Filestorage.php:195 ../../Zotlabs/Module/Photos.php:671 +#: ../../Zotlabs/Module/Photos.php:1045 ../../Zotlabs/Module/Chat.php:240 +msgid "Permissions" msgstr "" -#: ../../include/js_strings.php:22 -msgid "Describe (optional)" +#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:470 +#: ../../Zotlabs/Widget/Pinned.php:153 ../../Zotlabs/Storage/Browser.php:414 +#: ../../Zotlabs/Module/Photos.php:1266 +msgid "Close" msgstr "" -#: ../../include/js_strings.php:23 ../../view/theme/redbasic/php/config.php:188 -#: ../../Zotlabs/Lib/ThreadItem.php:868 ../../Zotlabs/Storage/Browser.php:386 -#: ../../Zotlabs/Module/Import_items.php:125 ../../Zotlabs/Module/Setup.php:319 -#: ../../Zotlabs/Module/Setup.php:359 ../../Zotlabs/Module/Regate.php:408 -#: ../../Zotlabs/Module/Photos.php:1056 ../../Zotlabs/Module/Photos.php:1095 -#: ../../Zotlabs/Module/Photos.php:1208 ../../Zotlabs/Module/Oauth.php:109 -#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Profiles.php:738 -#: ../../Zotlabs/Module/Invite.php:564 ../../Zotlabs/Module/Sources.php:123 -#: ../../Zotlabs/Module/Sources.php:160 ../../Zotlabs/Module/Group.php:151 -#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Oauth2.php:114 -#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247 -#: ../../Zotlabs/Module/Appman.php:230 ../../Zotlabs/Module/Connedit.php:714 -#: ../../Zotlabs/Module/Import.php:622 ../../Zotlabs/Module/Pconfig.php:117 -#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Thing.php:357 -#: ../../Zotlabs/Module/Thing.php:409 ../../Zotlabs/Module/Defperms.php:262 -#: ../../Zotlabs/Module/Locs.php:125 ../../Zotlabs/Module/Connect.php:107 -#: ../../Zotlabs/Module/Affinity.php:84 -#: ../../Zotlabs/Module/Filestorage.php:208 -#: ../../Zotlabs/Module/Pdledit.php:137 ../../Zotlabs/Module/Admin/Site.php:402 -#: ../../Zotlabs/Module/Admin/Accounts.php:309 -#: ../../Zotlabs/Module/Admin/Account_edit.php:73 -#: ../../Zotlabs/Module/Admin/Security.php:130 -#: ../../Zotlabs/Module/Admin/Channels.php:169 -#: ../../Zotlabs/Module/Admin/Features.php:66 -#: ../../Zotlabs/Module/Admin/Addons.php:446 -#: ../../Zotlabs/Module/Admin/Profs.php:179 -#: ../../Zotlabs/Module/Admin/Themes.php:174 -#: ../../Zotlabs/Module/Admin/Logs.php:85 ../../Zotlabs/Module/Mitem.php:259 -#: ../../Zotlabs/Module/Email_validation.php:41 -#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Permcats.php:257 -#: ../../Zotlabs/Module/Settings/Channel.php:230 -#: ../../Zotlabs/Module/Settings/Editor.php:42 -#: ../../Zotlabs/Module/Settings/Photos.php:42 -#: ../../Zotlabs/Module/Settings/Profiles.php:52 -#: ../../Zotlabs/Module/Settings/Network.php:62 -#: ../../Zotlabs/Module/Settings/Directory.php:42 -#: ../../Zotlabs/Module/Settings/Channel_home.php:91 -#: ../../Zotlabs/Module/Settings/Calendar.php:42 -#: ../../Zotlabs/Module/Settings/Conversation.php:44 -#: ../../Zotlabs/Module/Settings/Features.php:48 -#: ../../Zotlabs/Module/Settings/Connections.php:42 -#: ../../Zotlabs/Module/Settings/Multifactor.php:85 -#: ../../Zotlabs/Module/Settings/Events.php:42 -#: ../../Zotlabs/Module/Settings/Account.php:109 -#: ../../Zotlabs/Module/Settings/Privacy.php:123 -#: ../../Zotlabs/Module/Settings/Display.php:188 -#: ../../Zotlabs/Module/Settings/Manage.php:43 -#: ../../Zotlabs/Module/Contactedit.php:415 -#: ../../Zotlabs/Module/Contactedit.php:448 -#: ../../extend/addon/hzaddons/cart/cart.php:1424 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:312 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:412 -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:410 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:248 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:645 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:132 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:142 -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:86 -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:147 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:341 -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:113 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:54 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:191 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:249 -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:304 -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:602 -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:80 -#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:52 -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:51 -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:57 -#: ../../extend/addon/hzaddons/piwik/piwik.php:95 -#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:71 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:182 -#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:54 -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:101 -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:90 -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:136 -#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:49 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:78 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:140 -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:70 -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:124 -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:100 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:88 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1490 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1549 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1668 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2786 -#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:94 -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:59 -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:63 -#: ../../extend/addon/hzaddons/logrot/logrot.php:35 -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:70 -#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:141 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:218 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:907 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:72 -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:68 -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:96 -#: ../../extend/addon/hzaddons/irc/irc.php:45 -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:61 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:269 -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:72 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:107 -msgid "Submit" +#: ../../include/acl_selectors.php:181 +#, php-format +msgid "" +"Post permissions %s cannot be changed %s after a post is shared.</br />These " +"permissions set who is allowed to view the post." msgstr "" -#: ../../include/js_strings.php:24 -msgid "Please enter a link URL" +#: ../../include/text.php:562 +msgid "prev" msgstr "" -#: ../../include/js_strings.php:25 -msgid "Unsaved changes. Are you sure you wish to leave this page?" +#: ../../include/text.php:564 +msgid "first" msgstr "" -#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Profiles.php:476 -#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Pubsites.php:55 -#: ../../Zotlabs/Module/Locs.php:121 ../../Zotlabs/Module/Cdav.php:1006 -msgid "Location" +#: ../../include/text.php:593 +msgid "last" msgstr "" -#: ../../include/js_strings.php:27 -msgid "lovely" +#: ../../include/text.php:596 +msgid "next" msgstr "" -#: ../../include/js_strings.php:28 -msgid "wonderful" +#: ../../include/text.php:614 +msgid "older" msgstr "" -#: ../../include/js_strings.php:29 -msgid "fantastic" +#: ../../include/text.php:616 +msgid "newer" msgstr "" -#: ../../include/js_strings.php:30 -msgid "great" +#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80 +#: ../../Zotlabs/Module/Connections.php:306 +msgid "Accepts" msgstr "" -#: ../../include/js_strings.php:31 -msgid "" -"Your chosen nickname was either already taken or not valid. Please use our " -"suggestion (" +#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83 +#: ../../Zotlabs/Module/Connections.php:309 +msgid "Comments" msgstr "" -#: ../../include/js_strings.php:32 -msgid ") or enter a new one." +#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88 +#: ../../Zotlabs/Module/Connections.php:314 +msgid "Stream items" msgstr "" -#: ../../include/js_strings.php:33 -msgid "Thank you, this nickname is valid." +#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93 +#: ../../Zotlabs/Module/Connections.php:319 +msgid "Wall posts" msgstr "" -#: ../../include/js_strings.php:34 -msgid "A channel name is required." +#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97 +#: ../../Zotlabs/Module/Connections.php:323 +msgid "Nothing" msgstr "" -#: ../../include/js_strings.php:35 -msgid "This is a " +#: ../../include/text.php:1116 +#, php-format +msgid "View all %s connections" msgstr "" -#: ../../include/js_strings.php:36 -msgid " channel name" +#: ../../include/text.php:1179 +#, php-format +msgid "Network: %s" msgstr "" -#: ../../include/js_strings.php:37 -msgid "Back to reply" +#: ../../include/text.php:1191 ../../include/text.php:1203 +#: ../../addon/cards/Mod_Cards.php:116 ../../addon/cards/Mod_Card_edit.php:92 +#: ../../addon/articles/Mod_Article_edit.php:92 +#: ../../addon/articles/Mod_Articles.php:120 +#: ../../Zotlabs/Module/Admin/Queueworker.php:115 +#: ../../Zotlabs/Module/Admin/Profs.php:95 +#: ../../Zotlabs/Module/Admin/Profs.php:115 ../../Zotlabs/Module/Rbmark.php:29 +#: ../../Zotlabs/Module/Rbmark.php:85 ../../Zotlabs/Module/Filer.php:65 +msgid "Save" msgstr "" -#: ../../include/js_strings.php:38 -msgid "Pinned" +#: ../../include/text.php:1503 +msgid "May" msgstr "" -#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:498 -msgid "Pin to the top" +#: ../../include/text.php:1577 +msgid "Unknown attachment" msgstr "" -#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:498 -#: ../../Zotlabs/Widget/Pinned.php:151 -msgid "Unpin from the top" +#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383 +#: ../../Zotlabs/Module/Sharedwithme.php:109 +msgid "Size" msgstr "" -#: ../../include/js_strings.php:46 -#, php-format -msgid "%d minutes" -msgid_plural "%d minutes" -msgstr[0] "" -msgstr[1] "" +#: ../../include/text.php:1621 +msgid "remove category" +msgstr "" -#: ../../include/js_strings.php:47 -#, php-format -msgid "about %d hours" -msgid_plural "about %d hours" -msgstr[0] "" -msgstr[1] "" +#: ../../include/text.php:1699 +msgid "remove from file" +msgstr "" -#: ../../include/js_strings.php:48 -#, php-format -msgid "%d days" -msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" +#: ../../include/text.php:1886 +msgid "Download binary/encrypted content" +msgstr "" -#: ../../include/js_strings.php:49 +#: ../../include/text.php:1944 ../../include/text.php:1953 +#: ../../include/text.php:1980 ../../include/text.php:1989 #, php-format -msgid "%d months" -msgid_plural "%d months" +msgctxt "noun" +msgid "%d Vote" +msgid_plural "%d Votes" msgstr[0] "" msgstr[1] "" -#: ../../include/js_strings.php:50 +#: ../../include/text.php:1996 #, php-format -msgid "%d years" -msgid_plural "%d years" +msgctxt "noun" +msgid "%d Vote in total" +msgid_plural "%d Votes in total" msgstr[0] "" msgstr[1] "" -#: ../../include/js_strings.php:55 -msgid "timeago.prefixAgo" -msgstr "" - -#: ../../include/js_strings.php:56 -msgid "timeago.prefixFromNow" -msgstr "" - -#: ../../include/js_strings.php:57 -msgid "timeago.suffixAgo" +#: ../../include/text.php:2002 +msgid "Poll has ended" msgstr "" -#: ../../include/js_strings.php:58 -msgid "timeago.suffixFromNow" +#: ../../include/text.php:2005 +#, php-format +msgid "Poll ends in %s" msgstr "" -#: ../../include/js_strings.php:61 -msgid "less than a minute" +#: ../../include/text.php:2012 ../../Zotlabs/Lib/ThreadItem.php:430 +msgid "Vote" msgstr "" -#: ../../include/js_strings.php:62 -msgid "about a minute" +#: ../../include/text.php:2172 +msgid "Link to Source" msgstr "" -#: ../../include/js_strings.php:64 -msgid "about an hour" +#: ../../include/text.php:2205 +msgid "Page layout" msgstr "" -#: ../../include/js_strings.php:66 -msgid "a day" +#: ../../include/text.php:2205 +msgid "You can create your own with the layouts tool" msgstr "" -#: ../../include/js_strings.php:68 -msgid "about a month" +#: ../../include/text.php:2215 ../../addon/wiki/Mod_Wiki.php:220 +#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903 +#: ../../addon/wiki/Widget/Wiki_pages.php:68 +msgid "BBcode" msgstr "" -#: ../../include/js_strings.php:70 -msgid "about a year" +#: ../../include/text.php:2216 +msgid "HTML" msgstr "" -#: ../../include/js_strings.php:72 -msgid " " +#: ../../include/text.php:2217 ../../addon/wiki/Mod_Wiki.php:220 +#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903 +#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/mdpost/mdpost.php:41 +msgid "Markdown" msgstr "" -#: ../../include/js_strings.php:73 -msgid "timeago.numbers" +#: ../../include/text.php:2218 ../../addon/wiki/Mod_Wiki.php:220 +#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:68 +msgid "Text" msgstr "" -#: ../../include/js_strings.php:79 -msgctxt "long" -msgid "May" +#: ../../include/text.php:2219 +msgid "Comanche Layout" msgstr "" -#: ../../include/js_strings.php:87 -msgid "Jan" +#: ../../include/text.php:2224 +msgid "PHP" msgstr "" -#: ../../include/js_strings.php:88 -msgid "Feb" +#: ../../include/text.php:2236 +msgid "Page content type" msgstr "" -#: ../../include/js_strings.php:89 -msgid "Mar" +#: ../../include/text.php:2369 +msgid "activity" msgstr "" -#: ../../include/js_strings.php:90 -msgid "Apr" +#: ../../include/text.php:2372 +msgid "poll" msgstr "" -#: ../../include/js_strings.php:91 -msgctxt "short" -msgid "May" +#: ../../include/text.php:2485 +msgid "a-z, 0-9, -, and _ only" msgstr "" -#: ../../include/js_strings.php:92 -msgid "Jun" +#: ../../include/text.php:2793 +msgid "Design Tools" msgstr "" -#: ../../include/js_strings.php:93 -msgid "Jul" +#: ../../include/text.php:2796 ../../Zotlabs/Module/Blocks.php:152 +msgid "Blocks" msgstr "" -#: ../../include/js_strings.php:94 -msgid "Aug" +#: ../../include/text.php:2797 ../../Zotlabs/Module/Menu.php:171 +msgid "Menus" msgstr "" -#: ../../include/js_strings.php:95 -msgid "Sep" +#: ../../include/text.php:2798 ../../Zotlabs/Module/Layouts.php:182 +msgid "Layouts" msgstr "" -#: ../../include/js_strings.php:96 -msgid "Oct" +#: ../../include/text.php:2799 +msgid "Pages" msgstr "" -#: ../../include/js_strings.php:97 -msgid "Nov" +#: ../../include/text.php:2811 +msgid "Import" msgstr "" -#: ../../include/js_strings.php:98 -msgid "Dec" +#: ../../include/text.php:2812 +msgid "Import website..." msgstr "" -#: ../../include/js_strings.php:106 -msgid "Sun" +#: ../../include/text.php:2813 +msgid "Select folder to import" msgstr "" -#: ../../include/js_strings.php:107 -msgid "Mon" +#: ../../include/text.php:2814 +msgid "Import from a zipped folder:" msgstr "" -#: ../../include/js_strings.php:108 -msgid "Tue" +#: ../../include/text.php:2815 +msgid "Import from cloud files:" msgstr "" -#: ../../include/js_strings.php:109 -msgid "Wed" +#: ../../include/text.php:2816 +msgid "/cloud/channel/path/to/folder" msgstr "" -#: ../../include/js_strings.php:110 -msgid "Thu" +#: ../../include/text.php:2817 +msgid "Enter path to website files" msgstr "" -#: ../../include/js_strings.php:111 -msgid "Fri" +#: ../../include/text.php:2818 +msgid "Select folder" msgstr "" -#: ../../include/js_strings.php:112 -msgid "Sat" +#: ../../include/text.php:2819 +msgid "Export website..." msgstr "" -#: ../../include/js_strings.php:113 -msgctxt "calendar" -msgid "today" +#: ../../include/text.php:2820 +msgid "Export to a zip file" msgstr "" -#: ../../include/js_strings.php:114 -msgctxt "calendar" -msgid "month" +#: ../../include/text.php:2821 +msgid "website.zip" msgstr "" -#: ../../include/js_strings.php:115 -msgctxt "calendar" -msgid "week" +#: ../../include/text.php:2822 +msgid "Enter a name for the zip file." msgstr "" -#: ../../include/js_strings.php:116 -msgctxt "calendar" -msgid "day" +#: ../../include/text.php:2823 +msgid "Export to cloud files" msgstr "" -#: ../../include/js_strings.php:117 -msgctxt "calendar" -msgid "All day" +#: ../../include/text.php:2824 +msgid "/path/to/export/folder" msgstr "" -#: ../../include/js_strings.php:120 -msgid "Please stand by while your download is being prepared." +#: ../../include/text.php:2825 +msgid "Enter a path to a cloud files destination." msgstr "" -#: ../../include/js_strings.php:123 -msgid "Email address not valid" +#: ../../include/text.php:2826 +msgid "Specify folder" msgstr "" #: ../../include/channel.php:50 @@ -3045,5492 +3498,5378 @@ msgstr "" msgid "Name too long" msgstr "" -#: ../../include/channel.php:203 +#: ../../include/channel.php:205 msgid "No account identifier" msgstr "" -#: ../../include/channel.php:215 ../../Zotlabs/Module/Register.php:96 +#: ../../include/channel.php:217 ../../Zotlabs/Module/Register.php:96 msgid "Nickname is required." msgstr "" -#: ../../include/channel.php:229 ../../include/channel.php:668 +#: ../../include/channel.php:231 ../../include/channel.php:670 #: ../../Zotlabs/Module/Register.php:101 ../../Zotlabs/Module/Changeaddr.php:46 msgid "Reserved nickname. Please choose another." msgstr "" -#: ../../include/channel.php:234 ../../include/channel.php:673 +#: ../../include/channel.php:236 ../../include/channel.php:675 #: ../../Zotlabs/Module/Register.php:106 ../../Zotlabs/Module/Changeaddr.php:51 msgid "" "Nickname has unsupported characters or is already being used on this site." msgstr "" -#: ../../include/channel.php:300 +#: ../../include/channel.php:302 msgid "Unable to retrieve created identity" msgstr "" -#: ../../include/channel.php:411 +#: ../../include/channel.php:413 msgid "Default Profile" msgstr "" -#: ../../include/channel.php:465 ../../include/channel.php:468 -#: ../../include/selectors.php:138 ../../Zotlabs/Module/Connedit.php:581 -#: ../../Zotlabs/Module/Contactedit.php:283 -#: ../../Zotlabs/Widget/Affinity.php:38 -msgid "Friends" -msgstr "" - -#: ../../include/channel.php:601 ../../include/channel.php:690 +#: ../../include/channel.php:603 ../../include/channel.php:692 msgid "Unable to retrieve modified identity" msgstr "" -#: ../../include/channel.php:1382 +#: ../../include/channel.php:1384 msgid "Requested channel is not available" msgstr "" -#: ../../include/channel.php:1436 ../../Zotlabs/Module/Menu.php:92 -#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Editlayout.php:31 -#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Achievements.php:15 -#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Hcard.php:12 -#: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Webpages.php:39 +#: ../../include/channel.php:1438 ../../addon/cards/Mod_Cards.php:42 +#: ../../addon/articles/Mod_Articles.php:46 +#: ../../addon/gallery/Mod_Gallery.php:49 +#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Webpages.php:39 #: ../../Zotlabs/Module/Connect.php:17 ../../Zotlabs/Module/Filestorage.php:59 -#: ../../Zotlabs/Module/Profile.php:27 -#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:46 -#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:49 -#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:42 +#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Layouts.php:31 +#: ../../Zotlabs/Module/Menu.php:92 ../../Zotlabs/Module/Blocks.php:33 +#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Profile.php:27 +#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Editblock.php:31 msgid "Requested profile is not available." msgstr "" -#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:743 +#: ../../include/channel.php:1534 ../../Zotlabs/Module/Profiles.php:743 msgid "Change profile photo" msgstr "" -#: ../../include/channel.php:1539 ../../include/channel.php:1543 -#: ../../include/menu.php:120 ../../Zotlabs/Lib/Apps.php:617 -#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Module/Menu.php:176 -#: ../../Zotlabs/Module/Editblock.php:114 -#: ../../Zotlabs/Module/Editlayout.php:114 ../../Zotlabs/Module/Oauth.php:171 -#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Layouts.php:191 -#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Editwebpage.php:142 -#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Blocks.php:158 -#: ../../Zotlabs/Module/Webpages.php:250 -#: ../../Zotlabs/Module/Connections.php:338 -#: ../../Zotlabs/Module/Connections.php:387 -#: ../../Zotlabs/Module/Connections.php:408 -#: ../../Zotlabs/Module/Admin/Profs.php:176 ../../Zotlabs/Widget/Cdav.php:144 -#: ../../Zotlabs/Widget/Cdav.php:181 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:97 -#: ../../extend/addon/hzaddons/articles/articles.php:75 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:214 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381 -#: ../../extend/addon/hzaddons/cards/cards.php:74 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:99 -msgid "Edit" -msgstr "" - -#: ../../include/channel.php:1540 +#: ../../include/channel.php:1542 msgid "Create New Profile" msgstr "" -#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:841 +#: ../../include/channel.php:1560 ../../Zotlabs/Module/Profiles.php:841 msgid "Profile Image" msgstr "" -#: ../../include/channel.php:1561 +#: ../../include/channel.php:1563 msgid "Visible to everybody" msgstr "" -#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:740 +#: ../../include/channel.php:1564 ../../Zotlabs/Module/Profiles.php:740 #: ../../Zotlabs/Module/Profiles.php:845 msgid "Edit visibility" msgstr "" -#: ../../include/channel.php:1644 ../../include/channel.php:1772 +#: ../../include/channel.php:1646 ../../include/channel.php:1774 msgid "Gender:" msgstr "" -#: ../../include/channel.php:1645 ../../include/channel.php:1818 +#: ../../include/channel.php:1647 ../../include/channel.php:1820 msgid "Status:" msgstr "" -#: ../../include/channel.php:1646 ../../include/channel.php:1842 +#: ../../include/channel.php:1648 ../../include/channel.php:1844 msgid "Homepage:" msgstr "" -#: ../../include/channel.php:1647 ../../include/channel.php:1844 +#: ../../include/channel.php:1649 ../../include/channel.php:1846 #: ../../Zotlabs/Module/Directory.php:368 msgid "Hometown:" msgstr "" -#: ../../include/channel.php:1648 +#: ../../include/channel.php:1650 msgid "Online Now" msgstr "" -#: ../../include/channel.php:1697 +#: ../../include/channel.php:1699 msgid "This channel has not added a profile description yet" msgstr "" -#: ../../include/channel.php:1699 +#: ../../include/channel.php:1701 msgid "Change your profile photo" msgstr "" -#: ../../include/channel.php:1727 ../../include/selectors.php:64 -#: ../../include/selectors.php:81 -#: ../../extend/addon/hzaddons/openid/Mod_Id.php:87 -msgid "Female" -msgstr "" - -#: ../../include/channel.php:1729 ../../include/selectors.php:64 -#: ../../include/selectors.php:81 -#: ../../extend/addon/hzaddons/openid/Mod_Id.php:85 -msgid "Male" -msgstr "" - -#: ../../include/channel.php:1731 +#: ../../include/channel.php:1733 msgid "Trans" msgstr "" -#: ../../include/channel.php:1733 ../../include/selectors.php:64 -msgid "Neuter" -msgstr "" - -#: ../../include/channel.php:1735 ../../include/selectors.php:64 -msgid "Non-specific" -msgstr "" - -#: ../../include/channel.php:1770 +#: ../../include/channel.php:1772 msgid "Full Name:" msgstr "" -#: ../../include/channel.php:1803 +#: ../../include/channel.php:1805 msgid "j F, Y" msgstr "" -#: ../../include/channel.php:1804 +#: ../../include/channel.php:1806 msgid "j F" msgstr "" -#: ../../include/channel.php:1811 +#: ../../include/channel.php:1813 msgid "Birthday:" msgstr "" -#: ../../include/channel.php:1815 ../../Zotlabs/Module/Directory.php:349 +#: ../../include/channel.php:1817 ../../Zotlabs/Module/Directory.php:349 msgid "Age:" msgstr "" -#: ../../include/channel.php:1824 +#: ../../include/channel.php:1826 #, php-format msgid "for %1$d %2$s" msgstr "" -#: ../../include/channel.php:1836 +#: ../../include/channel.php:1838 msgid "Tags:" msgstr "" -#: ../../include/channel.php:1840 +#: ../../include/channel.php:1842 msgid "Sexual Preference:" msgstr "" -#: ../../include/channel.php:1846 +#: ../../include/channel.php:1848 msgid "Political Views:" msgstr "" -#: ../../include/channel.php:1848 +#: ../../include/channel.php:1850 msgid "Religion:" msgstr "" -#: ../../include/channel.php:1850 ../../Zotlabs/Module/Directory.php:370 +#: ../../include/channel.php:1852 ../../Zotlabs/Module/Directory.php:370 msgid "About:" msgstr "" -#: ../../include/channel.php:1852 +#: ../../include/channel.php:1854 msgid "Hobbies/Interests:" msgstr "" -#: ../../include/channel.php:1854 +#: ../../include/channel.php:1856 msgid "Likes:" msgstr "" -#: ../../include/channel.php:1856 +#: ../../include/channel.php:1858 msgid "Dislikes:" msgstr "" -#: ../../include/channel.php:1858 +#: ../../include/channel.php:1860 msgid "Contact information and Social Networks:" msgstr "" -#: ../../include/channel.php:1860 +#: ../../include/channel.php:1862 msgid "My other channels:" msgstr "" -#: ../../include/channel.php:1862 +#: ../../include/channel.php:1864 msgid "Musical interests:" msgstr "" -#: ../../include/channel.php:1864 +#: ../../include/channel.php:1866 msgid "Books, literature:" msgstr "" -#: ../../include/channel.php:1866 +#: ../../include/channel.php:1868 msgid "Television:" msgstr "" -#: ../../include/channel.php:1868 +#: ../../include/channel.php:1870 msgid "Film/dance/culture/entertainment:" msgstr "" -#: ../../include/channel.php:1870 +#: ../../include/channel.php:1872 msgid "Love/Romance:" msgstr "" -#: ../../include/channel.php:1872 +#: ../../include/channel.php:1874 msgid "Work/employment:" msgstr "" -#: ../../include/channel.php:1874 +#: ../../include/channel.php:1876 msgid "School/education:" msgstr "" -#: ../../include/channel.php:1895 ../../Zotlabs/Lib/Apps.php:366 -#: ../../Zotlabs/Module/Profperm.php:114 +#: ../../include/channel.php:1897 ../../Zotlabs/Lib/Apps.php:366 +#: ../../Zotlabs/Module/Profperm.php:116 msgid "Profile" msgstr "" -#: ../../include/channel.php:1897 +#: ../../include/channel.php:1899 msgid "Like this thing" msgstr "" -#: ../../include/channel.php:1898 +#: ../../include/channel.php:1900 msgid "Export" msgstr "" -#: ../../include/channel.php:2351 +#: ../../include/channel.php:2353 msgid "cover photo" msgstr "" -#: ../../include/channel.php:2632 ../../boot.php:1761 +#: ../../include/channel.php:2628 ../../boot.php:1755 #: ../../Zotlabs/Module/Rmagic.php:96 msgid "Remote Authentication" msgstr "" -#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:97 +#: ../../include/channel.php:2629 ../../Zotlabs/Module/Rmagic.php:97 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "" -#: ../../include/channel.php:2634 ../../Zotlabs/Module/Rmagic.php:98 +#: ../../include/channel.php:2630 ../../Zotlabs/Module/Rmagic.php:98 msgid "Authenticate" msgstr "" -#: ../../include/channel.php:2794 ../../Zotlabs/Module/Admin/Accounts.php:184 +#: ../../include/channel.php:2790 ../../Zotlabs/Module/Admin/Accounts.php:84 #, php-format msgid "Account '%s' deleted" msgstr "" -#: ../../include/contact_widgets.php:13 -#, php-format -msgid "%d invitation available" -msgid_plural "%d invitations available" -msgstr[0] "" -msgstr[1] "" - -#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145 -#: ../../Zotlabs/Module/Admin/Site.php:406 -msgid "Advanced" +#: ../../include/bbcode.php:234 ../../include/bbcode.php:994 +#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667 +msgid "Image/photo" msgstr "" -#: ../../include/contact_widgets.php:21 -msgid "Find Channels" +#: ../../include/bbcode.php:286 +msgid "Encrypted content" msgstr "" -#: ../../include/contact_widgets.php:22 -msgid "Enter name or interest" +#: ../../include/bbcode.php:342 +#, php-format +msgid "Install %1$s element %2$s" msgstr "" -#: ../../include/contact_widgets.php:23 -msgid "Connect/Follow" +#: ../../include/bbcode.php:346 +#, php-format +msgid "" +"This post contains an installable %s element, however you lack permissions " +"to install it on this site." msgstr "" -#: ../../include/contact_widgets.php:24 -msgid "Examples: Robert Morgenstein, Fishing" +#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47 +msgid "webpage" msgstr "" -#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435 -#: ../../Zotlabs/Module/Directory.php:440 -#: ../../Zotlabs/Module/Connections.php:407 -msgid "Find" +#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57 +msgid "layout" msgstr "" -#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77 -#: ../../Zotlabs/Module/Directory.php:439 -msgid "Channel Suggestions" +#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52 +msgid "block" msgstr "" -#: ../../include/contact_widgets.php:28 -msgid "Random Profile" +#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64 +msgid "menu" msgstr "" -#: ../../include/contact_widgets.php:29 -msgid "Invite Friends" +#: ../../include/bbcode.php:568 +msgid "card" msgstr "" -#: ../../include/contact_widgets.php:31 -msgid "Advanced example: name=fred and country=iceland" +#: ../../include/bbcode.php:570 +msgid "article" msgstr "" -#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121 -#: ../../include/contact_widgets.php:155 ../../Zotlabs/Widget/Filer.php:36 -#: ../../Zotlabs/Widget/Appcategories.php:52 -#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:83 -#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:83 -msgid "Everything" +#: ../../include/bbcode.php:653 ../../include/bbcode.php:661 +msgid "Click to open/close" msgstr "" -#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152 -#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507 -#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548 -#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392 -#: ../../Zotlabs/Storage/Browser.php:407 ../../Zotlabs/Module/Cdav.php:1062 -#: ../../extend/addon/hzaddons/articles/Widget/Articles_categories.php:80 -#: ../../extend/addon/hzaddons/cards/Widget/Cards_categories.php:80 -msgid "Categories" +#: ../../include/bbcode.php:674 +msgid "View article" msgstr "" -#: ../../include/contact_widgets.php:185 -msgid "Common Connections" +#: ../../include/bbcode.php:674 +msgid "View summary" msgstr "" -#: ../../include/contact_widgets.php:189 -#, php-format -msgid "View all %d common connections" +#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312 +#: ../../addon/wiki/Lib/NativeWikiPage.php:634 +msgid "Different viewers will see this text differently" msgstr "" -#: ../../include/security.php:633 -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." +#: ../../include/bbcode.php:1635 +msgid "$1 wrote:" msgstr "" -#: ../../include/taxonomy.php:326 -msgid "Trending" +#: ../../include/import.php:31 +msgid "Unable to import a removed channel." msgstr "" -#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465 -#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:27 -msgid "Tags" +#: ../../include/import.php:57 +msgid "" +"Cannot create a duplicate channel identifier on this system. Import failed." msgstr "" -#: ../../include/taxonomy.php:566 -msgid "Keywords" +#: ../../include/import.php:78 ../../addon/diaspora/import_diaspora.php:43 +msgid "Unable to create a unique channel address. Import failed." msgstr "" -#: ../../include/taxonomy.php:587 -msgid "have" +#: ../../include/import.php:129 +msgid "Cloned channel not found. Import failed." msgstr "" -#: ../../include/taxonomy.php:587 -msgid "has" +#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41 +msgid "Popular Channels" msgstr "" -#: ../../include/taxonomy.php:588 -msgid "want" +#: ../../addon/irc/irc.php:37 +msgid "Channels to auto connect" msgstr "" -#: ../../include/taxonomy.php:588 -msgid "wants" +#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41 +msgid "Comma separated list" msgstr "" -#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:335 -msgid "like" +#: ../../addon/irc/irc.php:45 +msgid "IRC Settings" msgstr "" -#: ../../include/taxonomy.php:589 -msgid "likes" +#: ../../addon/irc/irc.php:54 +msgid "IRC settings saved." msgstr "" -#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:336 -msgid "dislike" +#: ../../addon/irc/irc.php:58 +msgid "IRC Chatroom" msgstr "" -#: ../../include/taxonomy.php:590 -msgid "dislikes" +#: ../../addon/fediquest/fediquest.php:215 +msgid "ERROR: word length is not correct!" msgstr "" -#: ../../include/connections.php:174 -msgid "New window" +#: ../../addon/fediquest/Mod_Fediquest.php:22 +msgid "Fediquest App" msgstr "" -#: ../../include/connections.php:175 -msgid "Open the selected location in a different window or browser tab" +#: ../../addon/fediquest/Mod_Fediquest.php:23 +msgid "A distributed quest for a given word (game)." msgstr "" -#: ../../include/acl_selectors.php:33 -#: ../../Zotlabs/Lib/PermissionDescription.php:34 -msgid "Visible to your default audience" +#: ../../addon/fediquest/Mod_Fediquest.php:24 +msgid "" +"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a " +"toplevel post." msgstr "" -#: ../../include/acl_selectors.php:100 -msgid "Profile-Based Privacy Groups" +#: ../../addon/fediquest/Mod_Fediquest.php:25 +msgid "Your contacts can post their guess in the comments." msgstr "" -#: ../../include/acl_selectors.php:119 -msgid "Private Forum" +#: ../../addon/fediquest/Mod_Fediquest.php:26 +msgid "" +"Your channel will evaluate the guess and automatically post the response." msgstr "" -#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77 -#: ../../Zotlabs/Widget/Activity_filter.php:130 -#: ../../Zotlabs/Widget/Notifications.php:131 -#: ../../Zotlabs/Widget/Notifications.php:132 -msgid "Forums" +#: ../../addon/fediquest/Mod_Fediquest.php:28 +msgid "Correct letters" msgstr "" -#: ../../include/acl_selectors.php:136 -#: ../../Zotlabs/Lib/PermissionDescription.php:107 -#: ../../Zotlabs/Module/Settings/Privacy.php:66 -msgid "Only me" +#: ../../addon/fediquest/Mod_Fediquest.php:29 +msgid "Letters contained in the word but at the wrong spot" msgstr "" -#: ../../include/acl_selectors.php:143 -msgid "Share with" +#: ../../addon/fediquest/Mod_Fediquest.php:30 +msgid "Letters not contained in the word" msgstr "" -#: ../../include/acl_selectors.php:144 -msgid "Custom selection" +#: ../../addon/socialauth/Mod_SocialAuth.php:106 +#: ../../addon/socialauth/Mod_SocialAuth.php:179 +msgid "Network error" msgstr "" -#: ../../include/acl_selectors.php:146 -msgid "" -"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and " -"limit the scope of \"Allow\"." +#: ../../addon/socialauth/Mod_SocialAuth.php:110 +#: ../../addon/socialauth/Mod_SocialAuth.php:183 +msgid "API error" msgstr "" -#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32 -msgid "Allow" +#: ../../addon/socialauth/Mod_SocialAuth.php:114 +#: ../../addon/socialauth/Mod_SocialAuth.php:187 +msgid "Unknown issue" msgstr "" -#: ../../include/acl_selectors.php:148 -msgid "Don't allow" +#: ../../addon/socialauth/Mod_SocialAuth.php:152 +msgid "Unable to retrieve email address from remote identity provider" msgstr "" -#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Photos.php:671 -#: ../../Zotlabs/Module/Photos.php:1045 ../../Zotlabs/Module/Chat.php:240 -#: ../../Zotlabs/Module/Thing.php:350 ../../Zotlabs/Module/Thing.php:402 -#: ../../Zotlabs/Module/Filestorage.php:195 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:261 -msgid "Permissions" +#: ../../addon/socialauth/Mod_SocialAuth.php:171 +msgid "Unable to login using email address " msgstr "" -#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:531 -#: ../../Zotlabs/Storage/Browser.php:415 ../../Zotlabs/Module/Photos.php:1266 -#: ../../Zotlabs/Widget/Pinned.php:154 -msgid "Close" +#: ../../addon/socialauth/Mod_SocialAuth.php:211 +msgid "Social Authentication using your social media account" msgstr "" -#: ../../include/acl_selectors.php:181 -#, php-format +#: ../../addon/socialauth/Mod_SocialAuth.php:215 msgid "" -"Post permissions %s cannot be changed %s after a post is shared.</br />These " -"permissions set who is allowed to view the post." +"This app enables one or more social provider sign-in buttons on the login " +"page." msgstr "" -#: ../../include/cdav.php:157 -msgid "INVALID EVENT DISMISSED!" +#: ../../addon/socialauth/Mod_SocialAuth.php:233 +msgid "Add an identity provider" msgstr "" -#: ../../include/cdav.php:158 -msgid "Summary: " +#: ../../addon/socialauth/Mod_SocialAuth.php:260 +msgid "Enable " msgstr "" -#: ../../include/cdav.php:159 -msgid "Date: " +#: ../../addon/socialauth/Mod_SocialAuth.php:267 +msgid "Key" msgstr "" -#: ../../include/cdav.php:160 ../../include/cdav.php:168 -msgid "Reason: " +#: ../../addon/socialauth/Mod_SocialAuth.php:267 +#: ../../addon/socialauth/Mod_SocialAuth.php:272 +#: ../../addon/socialauth/Mod_SocialAuth.php:288 +#: ../../addon/socialauth/Mod_SocialAuth.php:299 +#: ../../addon/socialauth/Mod_SocialAuth.php:308 +msgid "Word" msgstr "" -#: ../../include/cdav.php:166 -msgid "INVALID CARD DISMISSED!" +#: ../../addon/socialauth/Mod_SocialAuth.php:272 +msgid "Secret" msgstr "" -#: ../../include/cdav.php:167 -msgid "Name: " +#: ../../addon/socialauth/Mod_SocialAuth.php:308 +msgid "Add a custom provider" msgstr "" -#: ../../include/selectors.php:17 -msgid "Select a profile to assign to this contact" +#: ../../addon/socialauth/Mod_SocialAuth.php:328 +msgid "Remove an identity provider" msgstr "" -#: ../../include/selectors.php:45 -msgid "Frequently" +#: ../../addon/socialauth/Mod_SocialAuth.php:338 +msgid "Social authentication" msgstr "" -#: ../../include/selectors.php:46 -msgid "Hourly" +#: ../../addon/socialauth/Mod_SocialAuth.php:380 +msgid "Error while saving provider settings" msgstr "" -#: ../../include/selectors.php:47 -msgid "Twice daily" +#: ../../addon/socialauth/Mod_SocialAuth.php:403 +msgid "Custom provider already exists" msgstr "" -#: ../../include/selectors.php:48 -msgid "Daily" +#: ../../addon/socialauth/Mod_SocialAuth.php:420 +msgid "Social authentication settings saved." msgstr "" -#: ../../include/selectors.php:49 -msgid "Weekly" +#: ../../addon/upload_limits/upload_limits.php:25 +msgid "Show Upload Limits" msgstr "" -#: ../../include/selectors.php:50 -msgid "Monthly" +#: ../../addon/upload_limits/upload_limits.php:27 +msgid "Hubzilla configured maximum size: " msgstr "" -#: ../../include/selectors.php:64 -msgid "Currently Male" +#: ../../addon/upload_limits/upload_limits.php:28 +msgid "PHP upload_max_filesize: " msgstr "" -#: ../../include/selectors.php:64 -msgid "Currently Female" +#: ../../addon/upload_limits/upload_limits.php:29 +msgid "PHP post_max_size (must be larger than upload_max_filesize): " msgstr "" -#: ../../include/selectors.php:64 -msgid "Mostly Male" +#: ../../addon/sendzid/Mod_Sendzid.php:21 +msgid "Send your identity to all websites" msgstr "" -#: ../../include/selectors.php:64 -msgid "Mostly Female" +#: ../../addon/sendzid/Mod_Sendzid.php:29 +msgid "Send ZID" msgstr "" -#: ../../include/selectors.php:64 -msgid "Transgender" +#: ../../addon/hubwall/hubwall.php:19 +msgid "Send email to all members" msgstr "" -#: ../../include/selectors.php:64 -msgid "Intersex" +#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:66 +#, php-format +msgid "%s Administrator" msgstr "" -#: ../../include/selectors.php:64 -msgid "Transsexual" +#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50 +msgid "No recipients found." msgstr "" -#: ../../include/selectors.php:64 -msgid "Hermaphrodite" +#: ../../addon/hubwall/hubwall.php:74 +#, php-format +msgid "%1$d of %2$d messages sent." msgstr "" -#: ../../include/selectors.php:64 -msgid "Undecided" +#: ../../addon/hubwall/hubwall.php:82 +msgid "Send email to all hub members." msgstr "" -#: ../../include/selectors.php:100 ../../include/selectors.php:119 -msgid "Males" +#: ../../addon/hubwall/hubwall.php:93 ../../addon/mailtest/mailtest.php:96 +msgid "Message subject" msgstr "" -#: ../../include/selectors.php:100 ../../include/selectors.php:119 -msgid "Females" +#: ../../addon/hubwall/hubwall.php:94 +msgid "Sender Email address" msgstr "" -#: ../../include/selectors.php:100 -msgid "Gay" +#: ../../addon/hubwall/hubwall.php:95 +msgid "Test mode (only send to hub administrator)" msgstr "" -#: ../../include/selectors.php:100 -msgid "Lesbian" +#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22 +msgid "Rainbow Tag App" msgstr "" -#: ../../include/selectors.php:100 -msgid "No Preference" +#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23 +msgid "Add some colour to tag clouds" msgstr "" -#: ../../include/selectors.php:100 -msgid "Bisexual" +#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30 +msgid "Rainbow Tag" msgstr "" -#: ../../include/selectors.php:100 -msgid "Autosexual" +#: ../../addon/openid/openid.php:49 +msgid "" +"We encountered a problem while logging in with the OpenID you provided. " +"Please check the correct spelling of the ID." msgstr "" -#: ../../include/selectors.php:100 -msgid "Abstinent" +#: ../../addon/openid/openid.php:49 +msgid "The error message was:" msgstr "" -#: ../../include/selectors.php:100 -msgid "Virgin" +#: ../../addon/openid/Mod_Openid.php:32 +msgid "OpenID protocol error. No ID returned." msgstr "" -#: ../../include/selectors.php:100 -msgid "Deviant" +#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179 +#, php-format +msgid "Welcome %s. Remote authentication successful." msgstr "" -#: ../../include/selectors.php:100 -msgid "Fetish" +#: ../../addon/openid/MysqlProvider.php:52 +msgid "First Name" msgstr "" -#: ../../include/selectors.php:100 -msgid "Oodles" +#: ../../addon/openid/MysqlProvider.php:53 +msgid "Last Name" msgstr "" -#: ../../include/selectors.php:100 -msgid "Nonsexual" +#: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73 +#: ../../boot.php:1748 +msgid "Nickname" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Single" +#: ../../addon/openid/MysqlProvider.php:55 +msgid "Full Name" msgstr "" -#: ../../include/selectors.php:138 -msgid "Lonely" +#: ../../addon/openid/MysqlProvider.php:61 +msgid "Profile Photo 16px" msgstr "" -#: ../../include/selectors.php:138 -msgid "Available" +#: ../../addon/openid/MysqlProvider.php:62 +msgid "Profile Photo 32px" msgstr "" -#: ../../include/selectors.php:138 -msgid "Unavailable" +#: ../../addon/openid/MysqlProvider.php:63 +msgid "Profile Photo 48px" msgstr "" -#: ../../include/selectors.php:138 -msgid "Has crush" +#: ../../addon/openid/MysqlProvider.php:64 +msgid "Profile Photo 64px" msgstr "" -#: ../../include/selectors.php:138 -msgid "Infatuated" +#: ../../addon/openid/MysqlProvider.php:65 +msgid "Profile Photo 80px" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Dating" +#: ../../addon/openid/MysqlProvider.php:66 +msgid "Profile Photo 128px" msgstr "" -#: ../../include/selectors.php:138 -msgid "Unfaithful" +#: ../../addon/openid/MysqlProvider.php:68 +#: ../../Zotlabs/Module/Profiles.php:782 +msgid "Homepage URL" msgstr "" -#: ../../include/selectors.php:138 -msgid "Sex Addict" +#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:363 +msgid "Language" msgstr "" -#: ../../include/selectors.php:138 -msgid "Friends/Benefits" +#: ../../addon/openid/MysqlProvider.php:70 +msgid "Birth Year" msgstr "" -#: ../../include/selectors.php:138 -msgid "Casual" +#: ../../addon/openid/MysqlProvider.php:71 +msgid "Birth Month" msgstr "" -#: ../../include/selectors.php:138 -msgid "Engaged" +#: ../../addon/openid/MysqlProvider.php:72 +msgid "Birth Day" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Married" +#: ../../addon/openid/MysqlProvider.php:73 +msgid "Birthdate" msgstr "" -#: ../../include/selectors.php:138 -msgid "Imaginarily married" +#: ../../addon/openid/MysqlProvider.php:74 +#: ../../Zotlabs/Module/Profiles.php:453 +msgid "Gender" msgstr "" -#: ../../include/selectors.php:138 -msgid "Partners" +#: ../../addon/openclipatar/openclipatar.php:51 +#: ../../addon/openclipatar/openclipatar.php:129 +msgid "System defaults:" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Cohabiting" +#: ../../addon/openclipatar/openclipatar.php:55 +msgid "Preferred Clipart IDs" msgstr "" -#: ../../include/selectors.php:138 -msgid "Common law" +#: ../../addon/openclipatar/openclipatar.php:55 +msgid "List of preferred clipart ids. These will be shown first." msgstr "" -#: ../../include/selectors.php:138 -msgid "Happy" +#: ../../addon/openclipatar/openclipatar.php:56 +msgid "Default Search Term" msgstr "" -#: ../../include/selectors.php:138 -msgid "Not looking" +#: ../../addon/openclipatar/openclipatar.php:56 +msgid "The default search term. These will be shown second." msgstr "" -#: ../../include/selectors.php:138 -msgid "Swinger" +#: ../../addon/openclipatar/openclipatar.php:57 +msgid "Return After" msgstr "" -#: ../../include/selectors.php:138 -msgid "Betrayed" +#: ../../addon/openclipatar/openclipatar.php:57 +msgid "Page to load after image selection." msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Separated" +#: ../../addon/openclipatar/openclipatar.php:60 +msgid "Profile List" msgstr "" -#: ../../include/selectors.php:138 -msgid "Unstable" +#: ../../addon/openclipatar/openclipatar.php:62 +msgid "Order of Preferred" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Divorced" +#: ../../addon/openclipatar/openclipatar.php:62 +msgid "Sort order of preferred clipart ids." msgstr "" -#: ../../include/selectors.php:138 -msgid "Imaginarily divorced" +#: ../../addon/openclipatar/openclipatar.php:63 +#: ../../addon/openclipatar/openclipatar.php:69 +msgid "Newest first" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "Widowed" +#: ../../addon/openclipatar/openclipatar.php:66 +msgid "As entered" msgstr "" -#: ../../include/selectors.php:138 -msgid "Uncertain" +#: ../../addon/openclipatar/openclipatar.php:68 +msgid "Order of other" msgstr "" -#: ../../include/selectors.php:138 ../../include/selectors.php:155 -msgid "It's complicated" +#: ../../addon/openclipatar/openclipatar.php:68 +msgid "Sort order of other clipart ids." msgstr "" -#: ../../include/selectors.php:138 -msgid "Don't care" +#: ../../addon/openclipatar/openclipatar.php:70 +msgid "Most downloaded first" msgstr "" -#: ../../include/selectors.php:138 -msgid "Ask me" +#: ../../addon/openclipatar/openclipatar.php:71 +msgid "Most liked first" msgstr "" -#: ../../include/zid.php:417 -#, php-format -msgid "OpenWebAuth: %1$s welcomes %2$s" +#: ../../addon/openclipatar/openclipatar.php:73 +msgid "Preferred IDs Message" msgstr "" -#: ../../view/theme/redbasic/php/config.php:19 -#: ../../view/theme/redbasic/php/config.php:22 -msgid "Focus (Hubzilla default)" +#: ../../addon/openclipatar/openclipatar.php:73 +msgid "Message to display above preferred results." msgstr "" -#: ../../view/theme/redbasic/php/config.php:192 -msgid "Theme settings" +#: ../../addon/openclipatar/openclipatar.php:79 +msgid "Uploaded by: " msgstr "" -#: ../../view/theme/redbasic/php/config.php:193 -msgid "Dark style" +#: ../../addon/openclipatar/openclipatar.php:79 +msgid "Drawn by: " msgstr "" -#: ../../view/theme/redbasic/php/config.php:194 -msgid "Light style" +#: ../../addon/openclipatar/openclipatar.php:183 +#: ../../addon/openclipatar/openclipatar.php:195 +msgid "Use this image" msgstr "" -#: ../../view/theme/redbasic/php/config.php:195 -msgid "Common settings" +#: ../../addon/openclipatar/openclipatar.php:193 +msgid "Or select from a free OpenClipart.org image:" msgstr "" -#: ../../view/theme/redbasic/php/config.php:196 -msgid "Primary theme color" +#: ../../addon/openclipatar/openclipatar.php:196 +msgid "Search Term" msgstr "" -#: ../../view/theme/redbasic/php/config.php:196 -#: ../../view/theme/redbasic/php/config.php:197 -#: ../../view/theme/redbasic/php/config.php:198 -#: ../../view/theme/redbasic/php/config.php:199 -#: ../../view/theme/redbasic/php/config.php:200 -msgid "Current color, leave empty for default" +#: ../../addon/openclipatar/openclipatar.php:233 +msgid "Unknown error. Please try again later." msgstr "" -#: ../../view/theme/redbasic/php/config.php:197 -msgid "Success theme color" +#: ../../addon/openclipatar/openclipatar.php:299 +#: ../../Zotlabs/Module/Profile_photo.php:269 +msgid "" +"Shift-reload the page or clear browser cache if the new photo does not " +"display immediately." msgstr "" -#: ../../view/theme/redbasic/php/config.php:198 -msgid "Info theme color" +#: ../../addon/openclipatar/openclipatar.php:309 +msgid "Profile photo updated successfully." msgstr "" -#: ../../view/theme/redbasic/php/config.php:199 -msgid "Warning theme color" +#: ../../addon/nsabait/Mod_Nsabait.php:23 +msgid "NSA Bait App" msgstr "" -#: ../../view/theme/redbasic/php/config.php:200 -msgid "Danger theme color" +#: ../../addon/nsabait/Mod_Nsabait.php:25 +msgid "Make yourself a political target." msgstr "" -#: ../../view/theme/redbasic/php/config.php:201 -msgid "Default to dark mode" +#: ../../addon/visage/Mod_Visage.php:23 +msgid "Recent Channel/Profile Viewers" msgstr "" -#: ../../view/theme/redbasic/php/config.php:202 -msgid "Always use light icons for navbar" +#: ../../addon/visage/Mod_Visage.php:34 +msgid "No entries." msgstr "" -#: ../../view/theme/redbasic/php/config.php:202 -msgid "Enable this option if you use a dark navbar color in light mode" +#: ../../addon/hzfiles/hzfiles.php:81 +msgid "Hubzilla File Storage Import" msgstr "" -#: ../../view/theme/redbasic/php/config.php:203 -msgid "Narrow navbar" +#: ../../addon/hzfiles/hzfiles.php:82 +msgid "This will import all your cloud files from another server." msgstr "" -#: ../../view/theme/redbasic/php/config.php:204 -msgid "Navigation bar background color" +#: ../../addon/hzfiles/hzfiles.php:83 +msgid "Hubzilla Server base URL" msgstr "" -#: ../../view/theme/redbasic/php/config.php:205 -msgid "Dark navigation bar background color" +#: ../../addon/hzfiles/hzfiles.php:84 +#: ../../addon/content_import/Mod_content_import.php:138 +msgid "Since modified date yyyy-mm-dd" msgstr "" -#: ../../view/theme/redbasic/php/config.php:206 -msgid "Set the background color" +#: ../../addon/hzfiles/hzfiles.php:85 +#: ../../addon/content_import/Mod_content_import.php:139 +msgid "Until modified date yyyy-mm-dd" msgstr "" -#: ../../view/theme/redbasic/php/config.php:207 -msgid "Set the dark background color" +#: ../../addon/upgrade_info/upgrade_info.php:48 +msgid "Your channel has been upgraded to $Projectname version" msgstr "" -#: ../../view/theme/redbasic/php/config.php:208 -msgid "Set the background image" +#: ../../addon/upgrade_info/upgrade_info.php:50 +msgid "Please have a look at the" msgstr "" -#: ../../view/theme/redbasic/php/config.php:209 -msgid "Set the dark background image" +#: ../../addon/upgrade_info/upgrade_info.php:52 +msgid "git history" msgstr "" -#: ../../view/theme/redbasic/php/config.php:210 -msgid "Set font-size for the entire application" +#: ../../addon/upgrade_info/upgrade_info.php:54 +msgid "change log" msgstr "" -#: ../../view/theme/redbasic/php/config.php:210 -msgid "Examples: 1rem, 100%, 16px" +#: ../../addon/upgrade_info/upgrade_info.php:55 +msgid "for further info." msgstr "" -#: ../../view/theme/redbasic/php/config.php:211 -msgid "Set radius of corners in rem" +#: ../../addon/upgrade_info/upgrade_info.php:60 +msgid "$Projectname Upgrade Info" msgstr "" -#: ../../view/theme/redbasic/php/config.php:211 -msgid "Leave empty for default radius" +#: ../../addon/upgrade_info/upgrade_info.php:64 +msgid "Do not show this again" msgstr "" -#: ../../view/theme/redbasic/php/config.php:212 -msgid "Set maximum width of content region in rem" +#: ../../addon/opensearch/opensearch.php:26 +#, php-format +msgctxt "opensearch" +msgid "Search %1$s (%2$s)" msgstr "" -#: ../../view/theme/redbasic/php/config.php:212 -msgid "Leave empty for default width" +#: ../../addon/opensearch/opensearch.php:28 +msgctxt "opensearch" +msgid "$Projectname" msgstr "" -#: ../../view/theme/redbasic/php/config.php:213 -msgid "Set size of conversation author photo" +#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:67 +#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96 +#: ../../Zotlabs/Module/Invite.php:239 ../../Zotlabs/Module/Invite.php:508 +#: ../../Zotlabs/Module/Invite.php:522 +msgid "$Projectname" msgstr "" -#: ../../view/theme/redbasic/php/config.php:213 -#: ../../view/theme/redbasic/php/config.php:214 -msgid "Leave empty for default size" +#: ../../addon/opensearch/opensearch.php:43 +msgid "Search $Projectname" msgstr "" -#: ../../view/theme/redbasic/php/config.php:214 -msgid "Set size of followup author photos" +#: ../../addon/dirstats/dirstats.php:94 +msgid "Hubzilla Directory Stats" msgstr "" -#: ../../view/theme/redbasic/php/config.php:215 -msgid "Show advanced settings" +#: ../../addon/dirstats/dirstats.php:95 +msgid "Total Hubs" msgstr "" -#: ../../boot.php:1736 -msgid "Create an account to access services and applications" +#: ../../addon/dirstats/dirstats.php:97 +msgid "Hubzilla Hubs" msgstr "" -#: ../../boot.php:1754 -msgid "Email or nickname" +#: ../../addon/dirstats/dirstats.php:99 +msgid "Friendica Hubs" msgstr "" -#: ../../boot.php:1754 ../../extend/addon/hzaddons/redred/Mod_Redred.php:73 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:54 -msgid "Nickname" +#: ../../addon/dirstats/dirstats.php:101 +msgid "Diaspora Pods" msgstr "" -#: ../../boot.php:1764 -msgid "Password" +#: ../../addon/dirstats/dirstats.php:103 +msgid "Hubzilla Channels" msgstr "" -#: ../../boot.php:1765 -msgid "Remember me" +#: ../../addon/dirstats/dirstats.php:105 +msgid "Friendica Channels" msgstr "" -#: ../../boot.php:1768 -msgid "Forgot your password?" +#: ../../addon/dirstats/dirstats.php:107 +msgid "Diaspora Channels" msgstr "" -#: ../../boot.php:1769 ../../Zotlabs/Module/Lostpass.php:91 -msgid "Password Reset" +#: ../../addon/dirstats/dirstats.php:109 +msgid "Aged 35 and above" msgstr "" -#: ../../boot.php:2647 -#, php-format -msgid "[$Projectname] Website SSL error for %s" +#: ../../addon/dirstats/dirstats.php:111 +msgid "Aged 34 and under" msgstr "" -#: ../../boot.php:2652 -msgid "Website SSL certificate is not valid. Please correct." +#: ../../addon/dirstats/dirstats.php:113 +msgid "Average Age" msgstr "" -#: ../../boot.php:2768 -#, php-format -msgid "[$Projectname] Cron tasks not running on %s" +#: ../../addon/dirstats/dirstats.php:115 +msgid "Known Chatrooms" msgstr "" -#: ../../boot.php:2773 -msgid "Cron/Scheduled tasks not running." +#: ../../addon/dirstats/dirstats.php:117 +msgid "Known Tags" msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:10 -msgid "0. Beginner/Basic" +#: ../../addon/dirstats/dirstats.php:119 +msgid "" +"Please note Diaspora and Friendica statistics are merely those **this " +"directory** is aware of, and not all those known in the network. This also " +"applies to chatrooms," msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:11 -msgid "1. Novice - not skilled but willing to learn" +#: ../../addon/piwik/piwik.php:85 +msgid "" +"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> " +"analytics tool." msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:12 -msgid "2. Intermediate - somewhat comfortable" +#: ../../addon/piwik/piwik.php:88 +#, php-format +msgid "" +"If you do not want that your visits are logged this way you <a href='%s'>can " +"set a cookie to prevent Piwik from tracking further visits of the site</a> " +"(opt-out)." msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:13 -msgid "3. Advanced - very comfortable" +#: ../../addon/piwik/piwik.php:96 +msgid "Piwik Base URL" msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:14 -msgid "4. Expert - I can write computer code" +#: ../../addon/piwik/piwik.php:96 +msgid "" +"Absolute path to your Piwik installation. (without protocol (http/s), with " +"trailing slash)" msgstr "" -#: ../../Zotlabs/Lib/Techlevels.php:15 -msgid "5. Wizard - I probably know more than you do" +#: ../../addon/piwik/piwik.php:97 +msgid "Site ID" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:330 -msgid "Affinity Tool" +#: ../../addon/piwik/piwik.php:98 +msgid "Show opt-out cookie link?" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:331 -#: ../../extend/addon/hzaddons/articles/articles.php:48 -#: ../../extend/addon/hzaddons/articles/articles.php:160 -#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:228 -msgid "Articles" +#: ../../addon/piwik/piwik.php:99 +msgid "Asynchronous tracking" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:332 -#: ../../extend/addon/hzaddons/cards/cards.php:48 -#: ../../extend/addon/hzaddons/cards/cards.php:160 -#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:209 -msgid "Cards" +#: ../../addon/piwik/piwik.php:100 +msgid "Enable frontend JavaScript error tracking" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:333 -msgid "Site Admin" +#: ../../addon/piwik/piwik.php:100 +msgid "This feature requires Piwik >= 2.2.0" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:334 -#: ../../extend/addon/hzaddons/buglink/buglink.php:16 -msgid "Report Bug" +#: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54 +#: ../../addon/diaspora/diaspora.php:108 ../../addon/msgfooter/msgfooter.php:54 +#: ../../addon/rendezvous/rendezvous.php:82 ../../addon/xmpp/xmpp.php:54 +#: ../../addon/faces/faces.php:291 ../../addon/twitter/twitter.php:493 +#: ../../addon/openstreetmap/openstreetmap.php:163 +#: ../../Zotlabs/Module/Defperms.php:111 +#: ../../Zotlabs/Module/Settings/Channel.php:151 +msgid "Settings updated." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:337 -msgid "Content Filter" +#: ../../addon/redphotos/redphotos.php:106 +msgid "Photos imported" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:338 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:133 -msgid "Content Import" +#: ../../addon/redphotos/redphotos.php:129 +msgid "Redmatrix Photo Album Import" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:340 -msgid "Remote Diagnostics" +#: ../../addon/redphotos/redphotos.php:130 +msgid "This will import all your Redmatrix photo albums to this channel." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:341 -msgid "Suggest Channels" +#: ../../addon/redphotos/redphotos.php:131 +#: ../../addon/redfiles/redfiles.php:121 +msgid "Redmatrix Server base URL" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:343 -msgid "Channel Manager" +#: ../../addon/redphotos/redphotos.php:132 +#: ../../addon/redfiles/redfiles.php:122 +msgid "Redmatrix Login Username" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:344 -msgid "Stream" +#: ../../addon/redphotos/redphotos.php:133 +#: ../../addon/redfiles/redfiles.php:123 +msgid "Redmatrix Login Password" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:348 -msgid "Wiki" +#: ../../addon/redphotos/redphotos.php:134 +msgid "Import just this album" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:355 -msgid "Mail" +#: ../../addon/redphotos/redphotos.php:134 +msgid "Leave blank to import all albums" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:356 -msgid "Chat" +#: ../../addon/redphotos/redphotos.php:135 +msgid "Maximum count to import" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:358 -msgid "Probe" +#: ../../addon/redphotos/redphotos.php:135 +msgid "0 or blank to import all available" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:359 -msgid "Suggest" +#: ../../addon/pageheader/Mod_Pageheader.php:22 +msgid "pageheader Settings saved." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:360 -msgid "Random Channel" +#: ../../addon/pageheader/Mod_Pageheader.php:41 +msgid "Message to display on every page on this server" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:361 -msgid "Invite" +#: ../../addon/pageheader/Mod_Pageheader.php:49 +msgid "Page Header" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31 -msgid "Features" +#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:334 +msgid "Report Bug" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:363 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:69 -msgid "Language" +#: ../../addon/hideaside/Mod_Hideaside.php:28 +msgid "Hide Aside App" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:411 -msgid "Post" +#: ../../addon/hideaside/Mod_Hideaside.php:29 +msgid "Fade out aside areas after a while when using endless scroll" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:369 -msgid "Notifications" +#: ../../addon/ijpost/ijpost.php:44 +msgid "Post to Insane Journal" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:370 -msgid "Order Apps" +#: ../../addon/ijpost/Mod_Ijpost.php:23 +msgid "Insane Journal Crosspost Connector Settings saved." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:371 -msgid "CardDAV" +#: ../../addon/ijpost/Mod_Ijpost.php:35 +msgid "Insane Journal Crosspost Connector App" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105 -msgid "Channel Sources" +#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35 +#: ../../Zotlabs/Module/Invite.php:70 ../../Zotlabs/Module/Lang.php:20 +msgid "Not Installed" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288 -msgid "Guest Access" +#: ../../addon/ijpost/Mod_Ijpost.php:36 +msgid "Relay public postings to Insane Journal" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Widget/Notes.php:38 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2661 -msgid "Notes" +#: ../../addon/ijpost/Mod_Ijpost.php:53 +msgid "InsaneJournal username" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:375 -msgid "OAuth Apps Manager" +#: ../../addon/ijpost/Mod_Ijpost.php:57 +msgid "InsaneJournal password" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:376 -msgid "OAuth2 Apps Manager" +#: ../../addon/ijpost/Mod_Ijpost.php:61 +msgid "Post to InsaneJournal by default" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:377 -msgid "PDL Editor" +#: ../../addon/ijpost/Mod_Ijpost.php:69 +msgid "Insane Journal Crosspost Connector" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248 -msgid "Contact Roles" +#: ../../addon/wholikesme/wholikesme.php:30 +msgid "Who likes me?" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Pubstream.php:109 -#: ../../Zotlabs/Widget/Notifications.php:154 -msgid "Public Stream" +#: ../../addon/redred/redred.php:50 +msgid "Post to Hubzilla" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:380 -msgid "My Chatrooms" +#: ../../addon/redred/Mod_Redred.php:24 +msgid "Channel is required." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:381 -msgid "Channel Export" +#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:333 +msgid "Invalid channel." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53 -#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Oauth2.php:58 -#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Connedit.php:748 -#: ../../Zotlabs/Module/Admin/Addons.php:461 ../../Zotlabs/Module/Cdav.php:1044 -#: ../../Zotlabs/Module/Cdav.php:1384 -msgid "Update" +#: ../../addon/redred/Mod_Redred.php:38 +msgid "Hubzilla Crosspost Connector Settings saved." msgstr "" -#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Admin/Addons.php:430 -msgid "Install" +#: ../../addon/redred/Mod_Redred.php:61 +msgid "Send public postings to Hubzilla channel by default" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614 -msgid "Purchase" +#: ../../addon/redred/Mod_Redred.php:65 +msgid "Hubzilla API Path" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:619 -msgid "Undelete" +#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51 +msgid "https://{sitename}/api" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:627 -msgid "Add to app-tray" +#: ../../addon/redred/Mod_Redred.php:69 +msgid "Hubzilla login name" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:628 -msgid "Remove from app-tray" +#: ../../addon/redred/Mod_Redred.php:73 +msgid "Hubzilla channel name" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:629 -msgid "Pin to navbar" +#: ../../addon/redred/Mod_Redred.php:77 +msgid "Hubzilla password" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:630 -msgid "Unpin from navbar" +#: ../../addon/redred/Mod_Redred.php:85 +msgid "Hubzilla Crosspost Connector" msgstr "" -#: ../../Zotlabs/Lib/Libzotdir.php:164 -msgid "Directory Options" +#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160 +#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:332 +msgid "Cards" msgstr "" -#: ../../Zotlabs/Lib/Libzotdir.php:166 -msgid "Safe Mode" +#: ../../addon/cards/cards.php:51 ../../addon/wiki/wiki.php:48 +msgid "View Cards" msgstr "" -#: ../../Zotlabs/Lib/Libzotdir.php:167 -msgid "Public Forums Only" +#: ../../addon/cards/cards.php:104 ../../addon/articles/articles.php:105 +#: ../../addon/wiki/Lib/NativeWikiPage.php:549 +#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:155 +#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Help.php:173 +#: ../../Zotlabs/Web/Router.php:188 +msgid "Page not found." msgstr "" -#: ../../Zotlabs/Lib/Libzotdir.php:169 -msgid "This Website Only" +#: ../../addon/cards/Mod_Cards.php:115 +msgid "Add Card" msgstr "" -#: ../../Zotlabs/Lib/AccessList.php:26 -msgid "" -"A deleted privacy group with this name was revived. Existing item " -"permissions <strong>may</strong> apply to this privacy group and any future " -"members. If this is not what you intended, please create another privacy " -"group with a different name." +#: ../../addon/cards/Mod_Card_edit.php:17 +#: ../../addon/cards/Mod_Card_edit.php:33 +#: ../../addon/articles/Mod_Article_edit.php:17 +#: ../../addon/articles/Mod_Article_edit.php:33 +#: ../../Zotlabs/Module/Editwebpage.php:80 +#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editpost.php:24 +#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95 +msgid "Item not found" msgstr "" -#: ../../Zotlabs/Lib/AccessList.php:268 -msgid "Select a privacy group" +#: ../../addon/cards/Mod_Card_edit.php:44 +#: ../../addon/articles/Mod_Article_edit.php:44 +#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Block.php:41 +#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Wall_upload.php:30 +#: ../../Zotlabs/Module/Attach_edit.php:52 ../../Zotlabs/Module/Attach.php:22 +#: ../../Zotlabs/Module/Chanview.php:95 +msgid "Channel not found." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:110 -msgid "Restricted message" +#: ../../addon/cards/Mod_Card_edit.php:123 +msgid "Edit Card" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:117 -msgid "Direct message" +#: ../../addon/startpage/Mod_Startpage.php:60 +msgid "Page to load after login" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:122 -msgid "Public Policy" +#: ../../addon/startpage/Mod_Startpage.php:60 +msgid "" +"Examples: "apps", "network?f=&gid=37" (privacy " +"collection), "channel" or "notifications/system" (leave " +"blank for default network page (grid)." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:156 -msgid "Privacy conflict. Discretion advised." +#: ../../addon/startpage/Mod_Startpage.php:68 +msgid "Startpage" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373 -msgid "Admin Delete" +#: ../../addon/libertree/libertree.php:43 +msgid "Post to Libertree" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:55 -msgid "Save to Folder" +#: ../../addon/libertree/Mod_Libertree.php:25 +msgid "Libertree Crosspost Connector Settings saved." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 -msgid "I will attend" +#: ../../addon/libertree/Mod_Libertree.php:49 +msgid "Libertree API token" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 -msgid "I will not attend" +#: ../../addon/libertree/Mod_Libertree.php:53 +msgid "Libertree site URL" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 -msgid "I might attend" +#: ../../addon/libertree/Mod_Libertree.php:57 +msgid "Post to Libertree by default" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:335 ../../Zotlabs/Module/Photos.php:1074 -msgid "I like this (toggle)" +#: ../../addon/libertree/Mod_Libertree.php:65 +msgid "Libertree Crosspost Connector" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:336 ../../Zotlabs/Module/Photos.php:1075 -msgid "I don't like this (toggle)" +#: ../../addon/logrot/logrot.php:36 +msgid "Logfile archive directory" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:337 -msgid "Reply to this comment" +#: ../../addon/logrot/logrot.php:36 +msgid "Directory to store rotated logs" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:337 -msgid "reply" +#: ../../addon/logrot/logrot.php:37 +msgid "Logfile size in bytes before rotating" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:337 -msgid "Reply to" +#: ../../addon/logrot/logrot.php:38 +msgid "Number of logfiles to retain" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:344 ../../Zotlabs/Widget/Pinned.php:95 -msgid "share" +#: ../../addon/testdrive/testdrive.php:104 +#, php-format +msgid "Your account on %s will expire in a few days." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:348 -msgid "Repeat" +#: ../../addon/testdrive/testdrive.php:105 +msgid "Your test account is about to expire." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:348 -msgid "repeat" +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:28 +msgid "ActivityPub Protocol Settings updated." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:359 -msgid "Delivery Report" +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:44 +msgid "" +"The activitypub protocol does not support location independence. Connections " +"you make within that network may be unreachable from alternate channel " +"locations." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:380 -#, php-format -msgid "%d comment" -msgid_plural "%d comments" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Lib/ThreadItem.php:381 -#, php-format -msgid "%d unseen" +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50 +msgid "Send activities of type note instead of article" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:431 -msgid "Forum" +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50 +msgid "Microblog services such as Mastodon do not properly support articles" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:438 -msgid "to" +#: ../../addon/pubcrawl/Mod_Pubcrawl.php:58 +msgid "Activitypub Protocol" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:439 ../../Zotlabs/Widget/Pinned.php:123 -#: ../../Zotlabs/Widget/Messages.php:146 ../../Zotlabs/Widget/Messages.php:149 -msgid "via" +#: ../../addon/pubcrawl/pubcrawl.php:1080 ../../addon/diaspora/diaspora.php:415 +#: ../../Zotlabs/Module/Contactedit.php:494 +msgid "Refresh failed" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:440 -msgid "Wall-to-Wall" +#: ../../addon/pubcrawl/pubcrawl.php:1087 ../../addon/diaspora/diaspora.php:420 +#: ../../Zotlabs/Module/Contactedit.php:491 +msgid "Refresh succeeded" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:441 -msgid "via Wall-To-Wall:" +#: ../../addon/bookmarker/bookmarker.php:38 +#: ../../Zotlabs/Lib/ThreadItem.php:458 +msgid "Save Bookmarks" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:469 -msgid "Attend" +#: ../../addon/planets/Mod_Planets.php:23 +msgid "Random Planet App" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:470 ../../Zotlabs/Widget/Pinned.php:137 -msgid "Attendance Options" +#: ../../addon/planets/Mod_Planets.php:25 +msgid "" +"Set a random planet from the Star Wars Empire as your location when posting" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:472 ../../Zotlabs/Widget/Pinned.php:138 -msgid "Voting Options" +#: ../../addon/dwpost/dwpost.php:49 +msgid "Post to Dreamwidth" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:487 -msgid "Go to previous comment" +#: ../../addon/dwpost/dwpost.php:134 ../../addon/dwpost/Mod_Dwpost.php:67 +#: ../../addon/wppost/wppost.php:175 ../../addon/wppost/Mod_Wppost.php:96 +#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/ljpost/ljpost.php:134 +msgid "Source" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:496 ../../Zotlabs/Widget/Pinned.php:150 -msgid "Pinned post" +#: ../../addon/dwpost/Mod_Dwpost.php:26 +msgid "Dreamwidth Crosspost Connector Settings saved." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:499 -#: ../../extend/addon/hzaddons/bookmarker/bookmarker.php:38 -msgid "Save Bookmarks" +#: ../../addon/dwpost/Mod_Dwpost.php:51 +msgid "Dreamwidth username" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:500 -msgid "Add to Calendar" +#: ../../addon/dwpost/Mod_Dwpost.php:55 +msgid "Dreamwidth password" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:508 -msgid "Mark all comments seen" +#: ../../addon/dwpost/Mod_Dwpost.php:59 +msgid "Post to Dreamwidth by default" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:547 -msgid "Add yours" +#: ../../addon/dwpost/Mod_Dwpost.php:63 ../../addon/wppost/Mod_Wppost.php:92 +#: ../../addon/ljpost/Mod_Ljpost.php:69 +msgid "Add link to original post" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:547 -msgid "Remove yours" +#: ../../addon/dwpost/Mod_Dwpost.php:67 ../../addon/wppost/Mod_Wppost.php:96 +msgid "Link description (default:" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:865 ../../Zotlabs/Module/Photos.php:1092 -#: ../../Zotlabs/Module/Photos.php:1205 -msgid "This is you" +#: ../../addon/dwpost/Mod_Dwpost.php:75 +msgid "Dreamwidth Crosspost Connector" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:874 -msgid "Image" +#: ../../addon/diaspora/diaspora.php:81 +msgid "" +"Please install the statistics addon to be able to configure a diaspora relay" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:876 -msgid "Insert Link" +#: ../../addon/diaspora/diaspora.php:91 +msgid "Diaspora Relay Handle" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:877 -msgid "Video" +#: ../../addon/diaspora/diaspora.php:91 +msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:886 -msgid "Your full name (required)" +#: ../../addon/diaspora/diaspora.php:111 +msgid "Diaspora relay could not be imported" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:887 -msgid "Your email address (required)" +#: ../../addon/diaspora/diaspora.php:1106 +msgid "No subject" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:888 -msgid "Your website URL (optional)" +#: ../../addon/diaspora/import_diaspora.php:18 +msgid "No username found in import file." msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2173 -#, php-format -msgid "Likes %1$s's %2$s" +#: ../../addon/diaspora/import_diaspora.php:140 +msgid "Import completed." msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2176 -#, php-format -msgid "Doesn't like %1$s's %2$s" +#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:346 +#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:62 +msgid "$projectname" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2182 +#: ../../addon/diaspora/Receiver.php:1643 #, php-format -msgid "Will attend %s's event" +msgid "%1$s dislikes %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2185 -#, php-format -msgid "Will not attend %s's event" +#: ../../addon/diaspora/Receiver.php:1704 +#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:459 +msgid "status" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2188 +#: ../../addon/diaspora/Receiver.php:2265 ../../Zotlabs/Module/Like.php:490 #, php-format -msgid "May attend %s's event" +msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2191 +#: ../../addon/diaspora/Receiver.php:2267 ../../Zotlabs/Module/Like.php:492 #, php-format -msgid "May not attend %s's event" -msgstr "" - -#: ../../Zotlabs/Lib/Chatroom.php:25 -msgid "Missing room name" -msgstr "" - -#: ../../Zotlabs/Lib/Chatroom.php:34 -msgid "Duplicate room name" -msgstr "" - -#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92 -msgid "Invalid room specifier." -msgstr "" - -#: ../../Zotlabs/Lib/Chatroom.php:124 -msgid "Room not found." -msgstr "" - -#: ../../Zotlabs/Lib/Chatroom.php:145 -msgid "Room is full" +msgid "%1$s is not attending %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:61 -msgid "$Projectname Notification" +#: ../../addon/diaspora/Receiver.php:2269 ../../Zotlabs/Module/Like.php:494 +#, php-format +msgid "%1$s may attend %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:62 -#: ../../extend/addon/hzaddons/diaspora/p.php:48 -#: ../../extend/addon/hzaddons/diaspora/util.php:346 -#: ../../extend/addon/hzaddons/diaspora/util.php:359 -msgid "$projectname" +#: ../../addon/diaspora/Mod_Diaspora.php:43 +msgid "Diaspora Protocol Settings updated." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:64 -msgid "Thank You," +#: ../../addon/diaspora/Mod_Diaspora.php:52 +msgid "" +"The diaspora protocol does not support location independence. Connections " +"you make within that network may be unreachable from alternate channel " +"locations." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:66 -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:33 -#, php-format -msgid "%s Administrator" +#: ../../addon/diaspora/Mod_Diaspora.php:80 +msgid "Prevent your hashtags from being redirected to other sites" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:67 -#, php-format -msgid "This email was sent by %1$s at %2$s." +#: ../../addon/diaspora/Mod_Diaspora.php:84 +msgid "Sign and forward posts and comments with no existing Diaspora signature" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:67 ../../Zotlabs/Module/Invite.php:239 -#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Invite.php:522 -#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96 -#: ../../extend/addon/hzaddons/opensearch/opensearch.php:42 -msgid "$Projectname" +#: ../../addon/diaspora/Mod_Diaspora.php:89 +msgid "Followed hashtags (comma separated, do not include the #)" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:68 -#, php-format -msgid "" -"To stop receiving these messages, please adjust your Notification Settings " -"at %s" +#: ../../addon/diaspora/Mod_Diaspora.php:98 +msgid "Diaspora Protocol" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:69 -#, php-format -msgid "To stop receiving these messages, please adjust your %s." +#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22 +msgid "Fuzzloc Settings updated." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:69 -#: ../../Zotlabs/Module/Settings/Channel.php:242 -msgid "Notification Settings" +#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38 +msgid "Minimum offset in meters" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:124 -#, php-format -msgid "%s <!item_type!>" +#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42 +msgid "Maximum offset in meters" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:132 -#, php-format -msgid "[$Projectname:Notify] New direct message received at %s" +#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51 +msgid "Fuzzy Location" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:134 -#, php-format -msgid "%1$s sent you a new direct message at %2$s" +#: ../../addon/qrator/qrator.php:48 +msgid "QR code" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:135 -#, php-format -msgid "%1$s sent you %2$s." +#: ../../addon/qrator/qrator.php:63 +msgid "QR Generator" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:135 -msgid "a direct message" +#: ../../addon/qrator/qrator.php:64 +msgid "Enter some text" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:136 -#, php-format -msgid "Please visit %s to view and/or reply to your direct messages." +#: ../../addon/superblock/Mod_Superblock.php:62 +msgid "superblock settings updated" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:149 -msgid "requested to comment on" +#: ../../addon/superblock/Mod_Superblock.php:86 +msgid "Currently blocked" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:149 -msgid "commented on" +#: ../../addon/superblock/Mod_Superblock.php:88 +msgid "No channels currently blocked" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318 -msgid "requested to like" +#: ../../addon/superblock/Mod_Superblock.php:90 +#: ../../Zotlabs/Module/Cover_photo.php:382 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../Zotlabs/Module/Photos.php:994 +msgid "Remove" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318 -msgid "liked" +#: ../../addon/superblock/superblock.php:355 +msgid "Block Completely" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321 -msgid "requested to dislike" +#: ../../addon/randpost/randpost.php:101 +msgid "You're welcome." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321 -msgid "disliked" +#: ../../addon/randpost/randpost.php:102 +msgid "Ah shucks..." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:168 -msgid "repeated" +#: ../../addon/randpost/randpost.php:103 +msgid "Don't mention it." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:173 -msgid "voted on" +#: ../../addon/randpost/randpost.php:104 +msgid "<blush>" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:216 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" +#: ../../addon/msgfooter/msgfooter.php:46 ../../addon/xmpp/xmpp.php:43 +#: ../../addon/gravatar/gravatar.php:150 +msgid "Save Settings" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:224 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" +#: ../../addon/msgfooter/msgfooter.php:47 +msgid "text to include in all outgoing posts from this site" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" +#: ../../addon/mailtest/mailtest.php:19 +msgid "Send test email" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:245 -#, php-format -msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s" +#: ../../addon/mailtest/mailtest.php:66 +msgid "Mail sent." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:247 -#, php-format -msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s" +#: ../../addon/mailtest/mailtest.php:68 +msgid "Sending of mail failed." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:248 -#, php-format -msgid "%1$s commented on an item/conversation you have been following" +#: ../../addon/mailtest/mailtest.php:77 +msgid "Mail Test" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345 -#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385 -#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:415 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." +#: ../../addon/nsfw/Mod_Nsfw.php:22 +msgid "NSFW Settings saved." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256 -#, php-format -msgid "Please visit %s to approve or reject this comment." +#: ../../addon/nsfw/Mod_Nsfw.php:42 +msgid "" +"This app looks in posts for the words/text you specify below, and collapses " +"any content containing those keywords so it is not displayed at " +"inappropriate times, such as sexual innuendo that may be improper in a work " +"setting. It is polite and recommended to tag any content containing nudity " +"with #NSFW. This filter can also match any other word/text you specify, and " +"can thereby be used as a general purpose content filter." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:341 -#, php-format -msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s" +#: ../../addon/nsfw/Mod_Nsfw.php:47 +msgid "Comma separated list of keywords to hide" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:342 -#, php-format -msgid "%1$s liked an item/conversation you created" +#: ../../addon/nsfw/Mod_Nsfw.php:47 +msgid "Word, /regular-expression/, lang=xx, lang!=xx" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:353 -#, php-format -msgid "[$Projectname:Notify] %s posted to your profile wall" +#: ../../addon/nsfw/Mod_Nsfw.php:56 +msgid "NSFW" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:355 -#, php-format -msgid "%1$s posted to your profile wall at %2$s" +#: ../../addon/nsfw/nsfw.php:153 +msgid "Possible adult content" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:357 +#: ../../addon/nsfw/nsfw.php:168 #, php-format -msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]" +msgid "%s - view" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:379 -#, php-format -msgid "[$Projectname:Notify] %s tagged you" +#: ../../addon/rendezvous/rendezvous.php:57 +msgid "Errors encountered deleting database table " msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:380 -#, php-format -msgid "%1$s tagged you at %2$s" +#: ../../addon/rendezvous/rendezvous.php:95 ../../addon/twitter/twitter.php:502 +msgid "Submit Settings" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:381 -#, php-format -msgid "%1$s [zrl=%2$s]tagged you[/zrl]." +#: ../../addon/rendezvous/rendezvous.php:96 +msgid "Drop tables when uninstalling?" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:392 -#, php-format -msgid "[$Projectname:Notify] %1$s poked you" +#: ../../addon/rendezvous/rendezvous.php:96 +msgid "" +"If checked, the Rendezvous database tables will be deleted when the plugin " +"is uninstalled." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:393 -#, php-format -msgid "%1$s poked you at %2$s" +#: ../../addon/rendezvous/rendezvous.php:97 +msgid "Mapbox Access Token" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:394 -#, php-format -msgid "%1$s [zrl=%2$s]poked you[/zrl]." +#: ../../addon/rendezvous/rendezvous.php:97 +msgid "" +"If you enter a Mapbox access token, it will be used to retrieve map tiles " +"from Mapbox instead of the default OpenStreetMap tile server." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:409 -#, php-format -msgid "[$Projectname:Notify] %s tagged your post" +#: ../../addon/rendezvous/rendezvous.php:162 +msgid "Rendezvous" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:410 -#, php-format -msgid "%1$s tagged your post at %2$s" +#: ../../addon/rendezvous/rendezvous.php:167 +msgid "" +"This identity has been deleted by another member due to inactivity. Please " +"press the \"New identity\" button or refresh the page to register a new " +"identity. You may use the same name." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:411 -#, php-format -msgid "%1$s tagged [zrl=%2$s]your post[/zrl]" +#: ../../addon/rendezvous/rendezvous.php:168 +msgid "Welcome to Rendezvous!" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:422 -msgid "[$Projectname:Notify] Introduction received" +#: ../../addon/rendezvous/rendezvous.php:169 +msgid "" +"Enter your name to join this rendezvous. To begin sharing your location with " +"the other members, tap the GPS control. When your location is discovered, a " +"red dot will appear and others will be able to see you on the map." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:423 -#, php-format -msgid "You've received an new connection request from '%1$s' at %2$s" +#: ../../addon/rendezvous/rendezvous.php:171 +msgid "Let's meet here" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:424 -#, php-format -msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s." +#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221 +#: ../../addon/wiki/Lib/NativeWikiPage.php:592 +#: ../../addon/wiki/Widget/Wiki_page_history.php:28 +#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:112 +#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Connedit.php:732 +#: ../../Zotlabs/Module/Admin/Channels.php:181 +#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Chat.php:256 +#: ../../Zotlabs/Module/Cdav.php:1368 ../../Zotlabs/Module/Oauth2.php:117 +#: ../../Zotlabs/Module/Oauth2.php:144 +msgid "Name" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:445 -#, php-format -msgid "You may visit their profile at %s" +#: ../../addon/rendezvous/rendezvous.php:173 +#: ../../addon/cart/submodules/hzservices.php:657 +#: ../../addon/cart/submodules/manualcat.php:260 +#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:82 +#: ../../Zotlabs/Module/Cdav.php:1005 +msgid "Description" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:429 -#, php-format -msgid "Please visit %s to approve or reject the connection request." +#: ../../addon/rendezvous/rendezvous.php:174 +msgid "New marker" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:436 -msgid "[$Projectname:Notify] Friend suggestion received" +#: ../../addon/rendezvous/rendezvous.php:175 +msgid "Edit marker" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:437 -#, php-format -msgid "You've received a friend suggestion from '%1$s' at %2$s" +#: ../../addon/rendezvous/rendezvous.php:176 +msgid "New identity" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:438 -#, php-format -msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s." +#: ../../addon/rendezvous/rendezvous.php:177 +msgid "Delete marker" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:443 -msgid "Name:" +#: ../../addon/rendezvous/rendezvous.php:178 +msgid "Delete member" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:444 -msgid "Photo:" +#: ../../addon/rendezvous/rendezvous.php:179 +msgid "Edit proximity alert" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:447 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." +#: ../../addon/rendezvous/rendezvous.php:180 +msgid "" +"A proximity alert will be issued when this member is within a certain radius " +"of you.<br><br>Enter a radius in meters (0 to disable):" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:677 -msgid "[$Projectname:Notify]" +#: ../../addon/rendezvous/rendezvous.php:180 +#: ../../addon/rendezvous/rendezvous.php:185 +msgid "distance" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:843 -msgid "created a new poll" +#: ../../addon/rendezvous/rendezvous.php:181 +msgid "Proximity alert distance (meters)" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:843 -msgid "created a new post" +#: ../../addon/rendezvous/rendezvous.php:182 +#: ../../addon/rendezvous/rendezvous.php:184 +msgid "" +"A proximity alert will be issued when you are within a certain radius of the " +"marker location.<br><br>Enter a radius in meters (0 to disable):" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:844 -#, php-format -msgid "voted on %s's poll" +#: ../../addon/rendezvous/rendezvous.php:183 +msgid "Marker proximity alert" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:844 -#, php-format -msgid "commented on %s's post" +#: ../../addon/rendezvous/rendezvous.php:186 +msgid "Reminder note" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948 -msgid "shared a file with you" +#: ../../addon/rendezvous/rendezvous.php:187 +msgid "" +"Enter a note to be displayed when you are within the specified proximity..." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:857 -#, php-format -msgid "edited a post dated %s" +#: ../../addon/rendezvous/rendezvous.php:199 +msgid "Add new rendezvous" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:860 -#, php-format -msgid "edited a comment dated %s" +#: ../../addon/rendezvous/rendezvous.php:200 +msgid "" +"Create a new rendezvous and share the access link with those you wish to " +"invite to the group. Those who open the link become members of the " +"rendezvous. They can view other member locations, add markers to the map, or " +"share their own locations with the group." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:933 -msgid "added your channel" +#: ../../addon/rendezvous/rendezvous.php:232 +msgid "You have no rendezvous. Press the button above to create a rendezvous!" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:963 -msgid "sent you a direct message" +#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:754 +msgid "Errors encountered creating database tables." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:970 -msgid "g A l F d" +#: ../../addon/pumpio/pumpio.php:152 +msgid "You are now authenticated to pumpio." msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:973 -msgid "[today]" +#: ../../addon/pumpio/pumpio.php:153 +msgid "return to the featured settings page" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:983 -msgid "created an event" +#: ../../addon/pumpio/pumpio.php:168 +msgid "Post to Pump.io" msgstr "" -#: ../../Zotlabs/Lib/Enotify.php:998 -msgid "status verified" +#: ../../addon/pumpio/Mod_Pumpio.php:40 +msgid "Pump.io Settings saved." msgstr "" -#: ../../Zotlabs/Lib/DB_Upgrade.php:68 -msgid "Source code of failed update: " +#: ../../addon/pumpio/Mod_Pumpio.php:71 +msgid "Pump.io servername" msgstr "" -#: ../../Zotlabs/Lib/DB_Upgrade.php:89 -#, php-format -msgid "Update Error at %s" +#: ../../addon/pumpio/Mod_Pumpio.php:71 +msgid "Without \"http://\" or \"https://\"" msgstr "" -#: ../../Zotlabs/Lib/DB_Upgrade.php:95 -#, php-format -msgid "Update %s failed. See error logs." +#: ../../addon/pumpio/Mod_Pumpio.php:75 +msgid "Pump.io username" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146 -msgid "Channel is blocked on this site." +#: ../../addon/pumpio/Mod_Pumpio.php:75 +msgid "Without the servername" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:50 -msgid "Channel location missing." +#: ../../addon/pumpio/Mod_Pumpio.php:86 +msgid "You are not authenticated to pumpio" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:104 -msgid "Remote channel or protocol unavailable." +#: ../../addon/pumpio/Mod_Pumpio.php:88 +msgid "(Re-)Authenticate your pump.io connection" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:140 -msgid "Channel discovery failed." +#: ../../addon/pumpio/Mod_Pumpio.php:92 +msgid "Post to pump.io by default" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:158 -msgid "Protocol disabled." +#: ../../addon/pumpio/Mod_Pumpio.php:96 +msgid "Should posts be public" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:170 -msgid "Cannot connect to yourself." +#: ../../addon/pumpio/Mod_Pumpio.php:100 +msgid "Mirror all public posts" msgstr "" -#: ../../Zotlabs/Lib/Connect.php:275 -msgid "error saving data" +#: ../../addon/pumpio/Mod_Pumpio.php:110 +msgid "Pump.io Crosspost Connector" msgstr "" -#: ../../Zotlabs/Lib/Libzot.php:688 -msgid "Unable to verify channel signature" +#: ../../addon/wppost/wppost.php:47 +msgid "Post to WordPress" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:108 -#: ../../Zotlabs/Access/PermissionRoles.php:386 -msgid "Public" +#: ../../addon/wppost/Mod_Wppost.php:30 +msgid "Wordpress Settings saved." msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:109 -msgid "Anybody in the $Projectname network" +#: ../../addon/wppost/Mod_Wppost.php:67 +msgid "WordPress username" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:110 -#, php-format -msgid "Any account on %s" +#: ../../addon/wppost/Mod_Wppost.php:71 +msgid "WordPress password" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:111 -msgid "Any of my connections" +#: ../../addon/wppost/Mod_Wppost.php:75 +msgid "WordPress API URL" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:112 -msgid "Only connections I specifically allow" +#: ../../addon/wppost/Mod_Wppost.php:76 +msgid "Typically https://your-blog.tld/xmlrpc.php" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:113 -msgid "Anybody authenticated (could include visitors from other networks)" +#: ../../addon/wppost/Mod_Wppost.php:79 +msgid "WordPress blogid" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:114 -msgid "Any connections including those who haven't yet been approved" +#: ../../addon/wppost/Mod_Wppost.php:80 +msgid "For multi-user sites such as wordpress.com, otherwise leave blank" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:150 -msgid "" -"This is your default setting for the audience of your normal stream, and " -"posts." +#: ../../addon/wppost/Mod_Wppost.php:84 +msgid "Post to WordPress by default" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:151 -msgid "" -"This is your default setting for who can view your default channel profile" +#: ../../addon/wppost/Mod_Wppost.php:88 +msgid "Forward comments (requires hubzilla_wp plugin)" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:152 -msgid "This is your default setting for who can view your connections" +#: ../../addon/wppost/Mod_Wppost.php:104 +msgid "Wordpress Post" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:153 -msgid "" -"This is your default setting for who can view your file storage and photos" +#: ../../addon/articles/Mod_Article_edit.php:123 +msgid "Edit Article" msgstr "" -#: ../../Zotlabs/Lib/PermissionDescription.php:154 -msgid "This is your default setting for the audience of your webpages" +#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160 +#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:331 +msgid "Articles" msgstr "" -#: ../../Zotlabs/Lib/Libsync.php:824 -#, php-format -msgid "Unable to verify site signature for %s" +#: ../../addon/articles/articles.php:51 +msgid "View Articles" msgstr "" -#: ../../Zotlabs/Lib/Permcat.php:83 -msgctxt "permcat" -msgid "Default" +#: ../../addon/articles/Mod_Articles.php:119 +msgid "Add Article" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:339 -msgid "Social Networking" +#: ../../addon/wiki/Mod_Wiki.php:36 +#: ../../addon/flashcards/Mod_Flashcards.php:52 +#: ../../addon/faces/Mod_Faces.php:64 ../../addon/cart/cart.php:1458 +msgid "Profile Unavailable." msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:340 -msgid "Social - Federation" +#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93 +#: ../../addon/cart/submodules/paypalbuttonV2.php:486 +#: ../../addon/cart/submodules/paypalbutton.php:456 +#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1609 +msgid "Invalid channel" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:341 -msgid "Social - Mostly Public" +#: ../../addon/wiki/Mod_Wiki.php:136 +msgid "Error retrieving wiki" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:342 -msgid "Social - Restricted" +#: ../../addon/wiki/Mod_Wiki.php:143 +msgid "Error creating zip file export folder" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:343 -msgid "Social - Private" +#: ../../addon/wiki/Mod_Wiki.php:194 +msgid "Error downloading wiki: " msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:346 -msgid "Community Forum" +#: ../../addon/wiki/Mod_Wiki.php:209 ../../addon/wiki/Widget/Wiki_list.php:23 +#: ../../addon/wiki/wiki.php:45 ../../addon/wiki/wiki.php:98 +msgid "Wikis" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:347 -msgid "Forum - Mostly Public" +#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407 +msgid "Download" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:348 -msgid "Forum - Restricted" +#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406 +#: ../../Zotlabs/Module/Webpages.php:255 ../../Zotlabs/Module/Layouts.php:196 +#: ../../Zotlabs/Module/Pubsites.php:63 ../../Zotlabs/Module/Blocks.php:164 +msgid "View" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:349 -msgid "Forum - Private" +#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137 +#: ../../Zotlabs/Module/Profiles.php:852 +msgid "Create New" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:352 -msgid "Feed Republish" +#: ../../addon/wiki/Mod_Wiki.php:219 +msgid "Wiki name" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:353 -msgid "Feed - Mostly Public" +#: ../../addon/wiki/Mod_Wiki.php:220 +msgid "Content type" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:354 -msgid "Feed - Restricted" +#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:382 +msgid "Type" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:357 -msgid "Special Purpose" +#: ../../addon/wiki/Mod_Wiki.php:223 +msgid "Any type" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:358 -msgid "Special - Celebrity/Soapbox" +#: ../../addon/wiki/Mod_Wiki.php:230 +msgid "Lock content type" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:359 -msgid "Special - Group Repository" +#: ../../addon/wiki/Mod_Wiki.php:231 +msgid "Create a status post for this wiki" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:363 -msgid "Custom/Expert Mode" +#: ../../addon/wiki/Mod_Wiki.php:232 +msgid "Edit Wiki Name" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:387 -msgid "Personal" +#: ../../addon/wiki/Mod_Wiki.php:277 +msgid "Wiki not found" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:388 -msgid "Community forum" +#: ../../addon/wiki/Mod_Wiki.php:303 +msgid "Rename page" msgstr "" -#: ../../Zotlabs/Access/PermissionRoles.php:389 -msgid "Custom" +#: ../../addon/wiki/Mod_Wiki.php:318 +msgid "Error retrieving page content" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:56 -msgid "Can view my channel stream and posts" +#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328 +msgid "New page" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:57 -msgid "Can send me their channel stream and posts" +#: ../../addon/wiki/Mod_Wiki.php:363 +msgid "Revision Comparison" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:58 -msgid "Can view my default channel profile" +#: ../../addon/wiki/Mod_Wiki.php:364 +#: ../../addon/wiki/Lib/NativeWikiPage.php:595 +#: ../../addon/wiki/Widget/Wiki_page_history.php:31 +msgid "Revert" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:59 -msgid "Can view my connections" +#: ../../addon/wiki/Mod_Wiki.php:371 +msgid "Short description of your changes (optional)" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:60 -msgid "Can view my file storage and photos" +#: ../../addon/wiki/Mod_Wiki.php:391 +msgid "New page name" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:61 -msgid "Can upload/modify my file storage and photos" +#: ../../addon/wiki/Mod_Wiki.php:396 +msgid "Embed image from photo albums" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:62 -msgid "Can view my channel webpages" +#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:390 +#: ../../Zotlabs/Module/Profile_photo.php:557 +msgid "Choose a different album" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:63 -msgid "Can view my wiki pages" +#: ../../addon/wiki/Mod_Wiki.php:407 +msgid "History" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:64 -msgid "Can create/edit my channel webpages" +#: ../../addon/wiki/Mod_Wiki.php:485 +msgid "Error creating wiki. Invalid name." msgstr "" -#: ../../Zotlabs/Access/Permissions.php:65 -msgid "Can write to my wiki pages" +#: ../../addon/wiki/Mod_Wiki.php:492 +msgid "A wiki with this name already exists." msgstr "" -#: ../../Zotlabs/Access/Permissions.php:66 -msgid "Can post on my channel (wall) page" +#: ../../addon/wiki/Mod_Wiki.php:505 +msgid "Wiki created, but error creating Home page." msgstr "" -#: ../../Zotlabs/Access/Permissions.php:67 -msgid "Can comment on or like my posts" +#: ../../addon/wiki/Mod_Wiki.php:512 +msgid "Error creating wiki" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:68 -msgid "Can send me direct messages" +#: ../../addon/wiki/Mod_Wiki.php:536 +msgid "Error updating wiki. Invalid name." msgstr "" -#: ../../Zotlabs/Access/Permissions.php:69 -msgid "Can like/dislike profiles and profile things" +#: ../../addon/wiki/Mod_Wiki.php:555 +msgid "Error updating wiki" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:70 -msgid "Can chat with me" +#: ../../addon/wiki/Mod_Wiki.php:570 +msgid "Wiki delete permission denied." msgstr "" -#: ../../Zotlabs/Access/Permissions.php:71 -msgid "Can source/mirror my public posts in derived channels" +#: ../../addon/wiki/Mod_Wiki.php:580 +msgid "Error deleting wiki" msgstr "" -#: ../../Zotlabs/Access/Permissions.php:73 -msgid "Can administer my channel" +#: ../../addon/wiki/Mod_Wiki.php:613 +msgid "New page created" msgstr "" -#: ../../Zotlabs/Web/Router.php:188 ../../Zotlabs/Module/Help.php:172 -#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Page.php:136 -#: ../../Zotlabs/Module/Display.php:155 -#: ../../extend/addon/hzaddons/articles/articles.php:105 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:545 -#: ../../extend/addon/hzaddons/cards/cards.php:104 -msgid "Page not found." +#: ../../addon/wiki/Mod_Wiki.php:739 +msgid "Cannot delete Home" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:292 -msgid "Change filename to" +#: ../../addon/wiki/Mod_Wiki.php:815 +msgid "Current Revision" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394 -msgid "Select a target location" +#: ../../addon/wiki/Mod_Wiki.php:815 +msgid "Selected Revision" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395 -msgid "Copy to target location" +#: ../../addon/wiki/Mod_Wiki.php:870 +msgid "You must be authenticated." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393 -msgid "Set permissions for all files and sub folders" +#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:64 +msgid "Add new page" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:312 -msgid "Notify your contacts about this file" +#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:71 +#: ../../Zotlabs/Module/Dreport.php:138 +msgid "Options" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:351 -msgid "File category" +#: ../../addon/wiki/Lib/NativeWiki.php:146 +msgid "Wiki updated successfully" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:365 -msgid "Total" +#: ../../addon/wiki/Lib/NativeWiki.php:206 +msgid "Wiki files deleted successfully" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:367 -msgid "Shared" +#: ../../addon/wiki/Lib/NativeWikiPage.php:42 +#: ../../addon/wiki/Lib/NativeWikiPage.php:110 +msgid "(No Title)" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:545 -#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/New_channel.php:190 -#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Connedit.php:747 -#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Webpages.php:249 -#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383 -#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184 -msgid "Create" +#: ../../addon/wiki/Lib/NativeWikiPage.php:124 +msgid "Wiki page create failed." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:369 -msgid "Add Files" +#: ../../addon/wiki/Lib/NativeWikiPage.php:138 +msgid "Wiki not found." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:111 -#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Oauth2.php:116 -#: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Chat.php:256 -#: ../../Zotlabs/Module/Connedit.php:732 -#: ../../Zotlabs/Module/Admin/Channels.php:181 -#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Cdav.php:1368 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:172 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:588 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:221 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:28 -msgid "Name" +#: ../../addon/wiki/Lib/NativeWikiPage.php:149 +msgid "Destination name already exists" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:382 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:222 -msgid "Type" +#: ../../addon/wiki/Lib/NativeWikiPage.php:182 +#: ../../addon/wiki/Lib/NativeWikiPage.php:377 +msgid "Page not found" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:384 -#: ../../Zotlabs/Module/Sharedwithme.php:110 -msgid "Last Modified" +#: ../../addon/wiki/Lib/NativeWikiPage.php:212 +msgid "Error reading page content" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:385 -msgid "parent" +#: ../../addon/wiki/Lib/NativeWikiPage.php:368 +#: ../../addon/wiki/Lib/NativeWikiPage.php:426 +#: ../../addon/wiki/Lib/NativeWikiPage.php:494 +#: ../../addon/wiki/Lib/NativeWikiPage.php:538 +msgid "Error reading wiki" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:390 -#: ../../Zotlabs/Module/Filestorage.php:206 -msgid "Copy/paste this code to attach file to a post" +#: ../../addon/wiki/Lib/NativeWikiPage.php:412 +msgid "Page update failed." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:391 -#: ../../Zotlabs/Module/Filestorage.php:207 -msgid "Copy/paste this URL to link file from a web page" +#: ../../addon/wiki/Lib/NativeWikiPage.php:448 +msgid "Nothing deleted" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:403 -msgid "Select All" +#: ../../addon/wiki/Lib/NativeWikiPage.php:518 +msgid "Compare: object not found." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:404 -msgid "Bulk Actions" +#: ../../addon/wiki/Lib/NativeWikiPage.php:525 +msgid "Page updated" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:405 -msgid "Adjust Permissions" +#: ../../addon/wiki/Lib/NativeWikiPage.php:533 +msgid "Wiki resource_id required for git commit" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:406 -msgid "Move or Copy" +#: ../../addon/wiki/Lib/NativeWikiPage.php:593 +#: ../../addon/wiki/Widget/Wiki_page_history.php:29 +msgctxt "wiki_history" +msgid "Message" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:408 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:215 -msgid "Download" +#: ../../addon/wiki/Lib/NativeWikiPage.php:594 +#: ../../addon/wiki/Widget/Wiki_page_history.php:30 +msgid "Date" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:409 -msgid "Info" +#: ../../addon/wiki/Lib/NativeWikiPage.php:596 +#: ../../addon/wiki/Widget/Wiki_page_history.php:32 +msgid "Compare" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:410 -msgid "Rename" +#: ../../addon/wiki/Widget/Wiki_pages.php:58 +msgid "Wiki Pages" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:412 -msgid "Attachment BBcode" +#: ../../addon/wiki/Widget/Wiki_pages.php:69 +msgid "Page name" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:413 -msgid "Embed BBcode" +#: ../../addon/donate/donate.php:21 +msgid "Project Servers and Resources" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:414 -msgid "Link BBcode" +#: ../../addon/donate/donate.php:22 +msgid "Project Creator and Tech Lead" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:487 -#, php-format -msgid "You are using %1$s of your available file storage." +#: ../../addon/donate/donate.php:49 +msgid "" +"And the hundreds of other people and organisations who helped make the " +"Hubzilla possible." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:492 -#, php-format -msgid "You are using %1$s of %2$s available file storage. (%3$s%)" +#: ../../addon/donate/donate.php:52 +msgid "" +"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving " +"their time and expertise - and often paying out of pocket for services they " +"share with others." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:503 -msgid "WARNING:" +#: ../../addon/donate/donate.php:53 +msgid "" +"There is no corporate funding and no ads, and we do not collect and sell " +"your personal information. (We don't control your personal information - " +"<strong>you do</strong>.)" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:544 -msgid "Create new folder" +#: ../../addon/donate/donate.php:54 +msgid "" +"Help support our ground-breaking work in decentralisation, web identity, and " +"privacy." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:546 -msgid "Upload file" +#: ../../addon/donate/donate.php:56 +msgid "" +"Your donations keep servers and services running and also helps us to " +"provide innovative new features and continued development." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:547 ../../Zotlabs/Module/Photos.php:681 -#: ../../Zotlabs/Module/Cover_photo.php:381 -#: ../../Zotlabs/Module/Profile_photo.php:547 -#: ../../Zotlabs/Module/Embedphotos.php:189 ../../Zotlabs/Widget/Album.php:103 -#: ../../Zotlabs/Widget/Portfolio.php:114 ../../Zotlabs/Widget/Cdav.php:152 -#: ../../Zotlabs/Widget/Cdav.php:188 -msgid "Upload" +#: ../../addon/donate/donate.php:59 +msgid "Donate" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:558 -msgid "Drop files here to immediately upload" +#: ../../addon/donate/donate.php:61 +msgid "" +"Choose a project, developer, or public hub to support with a one-time " +"donation" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:559 -#: ../../Zotlabs/Module/Filestorage.php:211 -msgid "Show in your contacts shared folder" +#: ../../addon/donate/donate.php:62 +msgid "Donate Now" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:561 +#: ../../addon/donate/donate.php:63 msgid "" -"You can select files via the upload button or drop them right here or into " -"an existing folder." +"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)" msgstr "" -#: ../../Zotlabs/Module/Menu.php:68 -msgid "Unable to update menu." +#: ../../addon/donate/donate.php:64 +msgid "" +"Please indicate if you would like your first name or full name (or nothing) " +"to appear in our sponsor listing" msgstr "" -#: ../../Zotlabs/Module/Menu.php:79 -msgid "Unable to create menu." +#: ../../addon/donate/donate.php:65 +msgid "Sponsor" msgstr "" -#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174 -msgid "Menu Name" +#: ../../addon/donate/donate.php:68 +msgid "Special thanks to: " msgstr "" -#: ../../Zotlabs/Module/Menu.php:161 -msgid "Unique name (not visible on webpage) - required" +#: ../../addon/xmpp/xmpp.php:44 +msgid "Jabber BOSH host" msgstr "" -#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175 -msgid "Menu Title" +#: ../../addon/xmpp/xmpp.php:45 +msgid "Use central userbase" msgstr "" -#: ../../Zotlabs/Module/Menu.php:162 -msgid "Visible on webpage - leave empty for no title" +#: ../../addon/xmpp/xmpp.php:45 +msgid "" +"If enabled, members will automatically login to an ejabberd server that has " +"to be installed on this machine with synchronized credentials via the " +"\"auth_ejabberd.php\" script." msgstr "" -#: ../../Zotlabs/Module/Menu.php:163 -msgid "Allow Bookmarks" +#: ../../addon/xmpp/Mod_Xmpp.php:23 +msgid "XMPP settings updated." msgstr "" -#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 -msgid "Menu may be used to store saved bookmarks" +#: ../../addon/xmpp/Mod_Xmpp.php:35 +msgid "XMPP App" msgstr "" -#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225 -msgid "Submit and proceed" +#: ../../addon/xmpp/Mod_Xmpp.php:36 +msgid "Embedded XMPP (Jabber) client" msgstr "" -#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124 -msgid "Drop" +#: ../../addon/xmpp/Mod_Xmpp.php:52 +msgid "Individual credentials" msgstr "" -#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:189 -#: ../../Zotlabs/Module/Blocks.php:155 ../../Zotlabs/Module/Webpages.php:261 -msgid "Created" +#: ../../addon/xmpp/Mod_Xmpp.php:58 +msgid "Jabber BOSH server" msgstr "" -#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:190 -#: ../../Zotlabs/Module/Blocks.php:156 ../../Zotlabs/Module/Webpages.php:262 -msgid "Edited" +#: ../../addon/xmpp/Mod_Xmpp.php:67 +msgid "XMPP Settings" msgstr "" -#: ../../Zotlabs/Module/Menu.php:180 ../../Zotlabs/Module/Connections.php:83 -#: ../../Zotlabs/Module/Connections.php:92 -#: ../../Zotlabs/Module/Notifications.php:101 -msgid "New" +#: ../../addon/notifyadmin/notifyadmin.php:34 +msgid "New registration" msgstr "" -#: ../../Zotlabs/Module/Menu.php:181 -msgid "Bookmarks allowed" +#: ../../addon/notifyadmin/notifyadmin.php:40 +#: ../../Zotlabs/Module/Invite.php:266 +#, php-format +msgid "%s : Message delivery failed." msgstr "" -#: ../../Zotlabs/Module/Menu.php:183 -msgid "Delete this menu" +#: ../../addon/notifyadmin/notifyadmin.php:42 +#, php-format +msgid "Message sent to %s. New account registration: %s" msgstr "" -#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219 -msgid "Edit menu contents" +#: ../../addon/statusnet/statusnet.php:145 +msgid "Post to GNU social" msgstr "" -#: ../../Zotlabs/Module/Menu.php:185 -msgid "Edit this menu" +#: ../../addon/statusnet/statusnet.php:593 +#: ../../Zotlabs/Module/Admin/Site.php:411 +msgid "Site name" msgstr "" -#: ../../Zotlabs/Module/Menu.php:201 -msgid "Menu could not be deleted." +#: ../../addon/statusnet/statusnet.php:594 +msgid "API URL" msgstr "" -#: ../../Zotlabs/Module/Menu.php:209 ../../Zotlabs/Module/Mitem.php:31 -msgid "Menu not found." +#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505 +#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:139 +#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145 +msgid "Consumer Secret" msgstr "" -#: ../../Zotlabs/Module/Menu.php:214 -msgid "Edit Menu" +#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504 +#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:138 +msgid "Consumer Key" msgstr "" -#: ../../Zotlabs/Module/Menu.php:218 -msgid "Add or remove entries to this menu" +#: ../../addon/statusnet/statusnet.php:597 +msgid "Application name" msgstr "" -#: ../../Zotlabs/Module/Menu.php:220 -msgid "Menu name" +#: ../../addon/statusnet/Mod_Statusnet.php:61 +msgid "" +"Please contact your site administrator.<br />The provided API URL is not " +"valid." msgstr "" -#: ../../Zotlabs/Module/Menu.php:220 -msgid "Must be unique, only seen by you" +#: ../../addon/statusnet/Mod_Statusnet.php:98 +msgid "We could not contact the GNU social API with the Path you entered." msgstr "" -#: ../../Zotlabs/Module/Menu.php:221 -msgid "Menu title" +#: ../../addon/statusnet/Mod_Statusnet.php:130 +msgid "GNU social settings updated." msgstr "" -#: ../../Zotlabs/Module/Menu.php:221 -msgid "Menu title as seen by others" +#: ../../addon/statusnet/Mod_Statusnet.php:179 +msgid "Globally Available GNU social OAuthKeys" msgstr "" -#: ../../Zotlabs/Module/Menu.php:222 -msgid "Allow bookmarks" +#: ../../addon/statusnet/Mod_Statusnet.php:181 +msgid "" +"There are preconfigured OAuth key pairs for some GNU social servers " +"available. If you are using one of them, please use these credentials.<br /" +">If not feel free to connect to any other GNU social instance (see below)." msgstr "" -#: ../../Zotlabs/Module/Menu.php:232 ../../Zotlabs/Module/Xchan.php:41 -#: ../../Zotlabs/Module/Mitem.php:134 -msgid "Not found." +#: ../../addon/statusnet/Mod_Statusnet.php:196 +msgid "Provide your own OAuth Credentials" msgstr "" -#: ../../Zotlabs/Module/Help.php:61 -msgid "Documentation Search" +#: ../../addon/statusnet/Mod_Statusnet.php:198 +msgid "" +"No consumer key pair for GNU social found. Register your Hubzilla Account as " +"an desktop client on your GNU social account, copy the consumer key pair " +"here and enter the API base root.<br />Before you register your own OAuth " +"key pair ask the administrator if there is already a key pair for this " +"Hubzilla installation at your favourite GNU social installation." msgstr "" -#: ../../Zotlabs/Module/Help.php:169 -msgid "Not Found" +#: ../../addon/statusnet/Mod_Statusnet.php:202 +msgid "OAuth Consumer Key" msgstr "" -#: ../../Zotlabs/Module/Help.php:222 -msgid "$Projectname Documentation" +#: ../../addon/statusnet/Mod_Statusnet.php:206 +msgid "OAuth Consumer Secret" msgstr "" -#: ../../Zotlabs/Module/Help.php:233 -msgid "Contents" +#: ../../addon/statusnet/Mod_Statusnet.php:210 +msgid "Base API Path" msgstr "" -#: ../../Zotlabs/Module/Help.php:240 -msgid "Members" +#: ../../addon/statusnet/Mod_Statusnet.php:210 +msgid "Remember the trailing /" msgstr "" -#: ../../Zotlabs/Module/Help.php:241 -msgid "Administrators" +#: ../../addon/statusnet/Mod_Statusnet.php:214 +msgid "GNU social application name" msgstr "" -#: ../../Zotlabs/Module/Help.php:242 -msgid "Developers" +#: ../../addon/statusnet/Mod_Statusnet.php:237 +msgid "" +"To connect to your GNU social account click the button below to get a " +"security code from GNU social which you have to copy into the input box " +"below and submit the form. Only your <strong>public</strong> posts will be " +"posted to GNU social." msgstr "" -#: ../../Zotlabs/Module/Help.php:243 -msgid "Tutorials" +#: ../../addon/statusnet/Mod_Statusnet.php:239 +msgid "Log in with GNU social" msgstr "" -#: ../../Zotlabs/Module/Help.php:261 -msgid "Help:" +#: ../../addon/statusnet/Mod_Statusnet.php:242 +msgid "Copy the security code from GNU social here" msgstr "" -#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95 -#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editpost.php:24 -#: ../../Zotlabs/Module/Editwebpage.php:80 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:17 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:33 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:17 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:33 -msgid "Item not found" +#: ../../addon/statusnet/Mod_Statusnet.php:252 +msgid "Cancel Connection Process" msgstr "" -#: ../../Zotlabs/Module/Editblock.php:113 ../../Zotlabs/Module/Blocks.php:97 -#: ../../Zotlabs/Module/Blocks.php:153 -msgid "Block Name" +#: ../../addon/statusnet/Mod_Statusnet.php:254 +msgid "Current GNU social API is" msgstr "" -#: ../../Zotlabs/Module/Editblock.php:138 -msgid "Edit Block" +#: ../../addon/statusnet/Mod_Statusnet.php:258 +msgid "Cancel GNU social Connection" msgstr "" -#: ../../Zotlabs/Module/Channel.php:150 ../../Zotlabs/Module/Hcard.php:37 -#: ../../Zotlabs/Module/Profile.php:62 -msgid "Posts and comments" +#: ../../addon/statusnet/Mod_Statusnet.php:270 +#: ../../addon/twitter/Mod_Twitter.php:145 +msgid "Currently connected to: " msgstr "" -#: ../../Zotlabs/Module/Channel.php:157 ../../Zotlabs/Module/Hcard.php:44 -#: ../../Zotlabs/Module/Profile.php:69 -msgid "Only posts" +#: ../../addon/statusnet/Mod_Statusnet.php:275 +msgid "" +"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile " +"details from unknown viewers?</em>) the link potentially included in public " +"postings relayed to GNU social will lead the visitor to a blank page " +"informing the visitor that the access to your profile has been restricted." msgstr "" -#: ../../Zotlabs/Module/Channel.php:195 ../../Zotlabs/Module/Oep.php:82 -#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Display.php:53 -msgid "Malformed message id." +#: ../../addon/statusnet/Mod_Statusnet.php:280 +msgid "Post to GNU social by default" msgstr "" -#: ../../Zotlabs/Module/Channel.php:231 -msgid "Insufficient permissions. Request redirected to profile page." +#: ../../addon/statusnet/Mod_Statusnet.php:280 +msgid "" +"If enabled your public postings will be posted to the associated GNU-social " +"account by default" msgstr "" -#: ../../Zotlabs/Module/Channel.php:246 ../../Zotlabs/Module/Network.php:172 -msgid "Search Results For:" +#: ../../addon/statusnet/Mod_Statusnet.php:289 +#: ../../addon/twitter/Mod_Twitter.php:169 +msgid "Clear OAuth configuration" msgstr "" -#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111 -#: ../../Zotlabs/Module/Network.php:213 ../../Zotlabs/Module/Hq.php:99 -#: ../../Zotlabs/Module/Pubstream.php:98 ../../Zotlabs/Module/Display.php:95 -msgid "Reset form" +#: ../../addon/statusnet/Mod_Statusnet.php:301 +msgid "GNU-Social Crosspost Connector" msgstr "" -#: ../../Zotlabs/Module/Channel.php:501 ../../Zotlabs/Module/Display.php:320 -msgid "" -"You must enable javascript for your browser to be able to view this content." +#: ../../addon/flashcards/Mod_Flashcards.php:225 +msgid "Not allowed." msgstr "" -#: ../../Zotlabs/Module/New_channel.php:148 ../../Zotlabs/Module/Manage.php:130 -#, php-format -msgid "You have created %1$.0f of %2$.0f allowed channels." +#: ../../addon/flashcards/Mod_Flashcards.php:268 +#: ../../Zotlabs/Module/Filestorage.php:202 +msgid "Set/edit permissions" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:160 -msgid "Your real name is recommended." +#: ../../addon/flashcards/Mod_Flashcards.php:291 +#: ../../addon/flashcards/Mod_Flashcards.php:292 +#: ../../Zotlabs/Module/Display.php:59 ../../Zotlabs/Module/Display.php:120 +#: ../../Zotlabs/Module/Display.php:396 ../../Zotlabs/Module/Thing.php:120 +#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25 +#: ../../Zotlabs/Module/Admin/Themes.php:73 +#: ../../Zotlabs/Module/Admin/Addons.php:42 ../../Zotlabs/Module/Admin.php:63 +msgid "Item not found." msgstr "" -#: ../../Zotlabs/Module/New_channel.php:161 -msgid "" -"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " -"Group\"" +#: ../../addon/ljpost/ljpost.php:49 +msgid "Post to Livejournal" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:166 -msgid "" -"This will be used to create a unique network address (like an email address)." +#: ../../addon/ljpost/ljpost.php:127 +msgid "Posted by" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:168 -msgid "Allowed characters are a-z 0-9, - and _" +#: ../../addon/ljpost/Mod_Ljpost.php:53 +msgid "Livejournal username" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:176 -msgid "Channel name" +#: ../../addon/ljpost/Mod_Ljpost.php:57 +msgid "Livejournal password" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:178 -#: ../../Zotlabs/Module/Register.php:513 -msgid "Choose a short nickname" +#: ../../addon/ljpost/Mod_Ljpost.php:61 +msgid "Post to Livejournal by default" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:179 -#: ../../Zotlabs/Module/Settings/Channel.php:234 -msgid "Channel role" +#: ../../addon/ljpost/Mod_Ljpost.php:65 +msgid "Send wall-to-wall posts to Livejournal" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:182 -msgid "Create a Channel" +#: ../../addon/ljpost/Mod_Ljpost.php:77 +msgid "Livejournal Crosspost Connector" msgstr "" -#: ../../Zotlabs/Module/New_channel.php:183 -msgid "" -"A channel is a unique network identity. It can represent a person (social " -"network profile), a forum (group), a business or celebrity page, a newsfeed, " -"and many other things." +#: ../../addon/cart/manual_payments.php:7 +msgid "Error: order mismatch. Please try again." msgstr "" -#: ../../Zotlabs/Module/New_channel.php:184 -msgid "" -"or <a href=\"import\">import an existing channel</a> from another location." +#: ../../addon/cart/manual_payments.php:61 +msgid "Manual payments are not enabled." msgstr "" -#: ../../Zotlabs/Module/New_channel.php:189 -msgid "Validate" +#: ../../addon/cart/manual_payments.php:68 +#: ../../addon/cart/submodules/paypalbuttonV2.php:417 +#: ../../addon/cart/submodules/paypalbutton.php:392 +#: ../../addon/cart/cart.php:1631 +msgid "Order not found." msgstr "" -#: ../../Zotlabs/Module/Oexchange.php:27 -msgid "Unable to find your hub." +#: ../../addon/cart/manual_payments.php:77 +msgid "Finished" msgstr "" -#: ../../Zotlabs/Module/Oexchange.php:41 -msgid "Post successful." +#: ../../addon/cart/submodules/hzservices.php:65 +msgid "Enable Hubzilla Services Module" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:50 -msgid "Not a zip file or zip file corrupted." +#: ../../addon/cart/submodules/hzservices.php:164 +#: ../../addon/cart/submodules/manualcat.php:172 +msgid "New Sku" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:121 -msgid "Import Items" +#: ../../addon/cart/submodules/hzservices.php:199 +#: ../../addon/cart/submodules/manualcat.php:208 +msgid "Cannot save edits to locked item." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:122 -msgid "Use this form to import existing posts and content from an export file." +#: ../../addon/cart/submodules/hzservices.php:248 +#: ../../addon/cart/submodules/hzservices.php:335 +msgid "SKU not found." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:123 -#: ../../Zotlabs/Module/Import.php:605 -msgid "File to Upload" +#: ../../addon/cart/submodules/hzservices.php:301 +#: ../../addon/cart/submodules/hzservices.php:305 +msgid "Invalid Activation Directive." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:136 -#: ../../Zotlabs/Module/Import.php:108 -msgid "Imported file is empty." +#: ../../addon/cart/submodules/hzservices.php:376 +#: ../../addon/cart/submodules/hzservices.php:380 +msgid "Invalid Deactivation Directive." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:159 -msgid "Content import completed" +#: ../../addon/cart/submodules/hzservices.php:566 +msgid "Add to this privacy group" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:164 -msgid "Chatroom import completed" +#: ../../addon/cart/submodules/hzservices.php:582 +msgid "Set user service class" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:170 -msgid "Channel calendar import 1/2 completed" +#: ../../addon/cart/submodules/hzservices.php:609 +msgid "You must be using a local account to purchase this service." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:176 -msgid "Channel calendar import 2/2 completed" +#: ../../addon/cart/submodules/hzservices.php:649 +#: ../../addon/cart/submodules/manualcat.php:252 +msgid "Changes Locked" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:181 -msgid "Menu import completed" +#: ../../addon/cart/submodules/hzservices.php:653 +#: ../../addon/cart/submodules/manualcat.php:256 +msgid "Item available for purchase." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:186 -msgid "Wiki import completed" +#: ../../addon/cart/submodules/hzservices.php:660 +#: ../../addon/cart/submodules/manualcat.php:263 +#: ../../addon/cart/widgets/catalogitem.php:57 +msgid "Price" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:191 -msgid "Webpages import completed" +#: ../../addon/cart/submodules/hzservices.php:663 +#: ../../addon/cart/submodules/manualcat.php:266 +msgid "Photo URL" msgstr "" -#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:113 -msgid "Edit post" +#: ../../addon/cart/submodules/hzservices.php:667 +msgid "Add buyer to privacy group" msgstr "" -#: ../../Zotlabs/Module/Block.php:29 ../../Zotlabs/Module/Page.php:39 -msgid "Invalid item." +#: ../../addon/cart/submodules/hzservices.php:672 +msgid "Add buyer as connection" msgstr "" -#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Chanview.php:95 -#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Page.php:75 -#: ../../Zotlabs/Module/Wall_upload.php:30 -#: ../../Zotlabs/Module/Attach_edit.php:52 ../../Zotlabs/Module/Attach.php:22 -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:44 -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:44 -msgid "Channel not found." +#: ../../addon/cart/submodules/hzservices.php:680 +#: ../../addon/cart/submodules/hzservices.php:722 +msgid "Set Service Class" msgstr "" -#: ../../Zotlabs/Module/Lang.php:20 -msgid "Language App" +#: ../../addon/cart/submodules/subscriptions.php:151 +msgid "Enable Subscription Management Module" msgstr "" -#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:70 -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35 -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35 -msgid "Not Installed" +#: ../../addon/cart/submodules/subscriptions.php:223 +msgid "" +"Cannot include subscription items with different terms in the same order." msgstr "" -#: ../../Zotlabs/Module/Email_resend.php:12 -#: ../../Zotlabs/Module/Email_validation.php:25 -msgid "Token verification failed." +#: ../../addon/cart/submodules/subscriptions.php:372 +msgid "Select Subscription to Edit" msgstr "" -#: ../../Zotlabs/Module/Email_resend.php:30 -msgid "Email verification resent" +#: ../../addon/cart/submodules/subscriptions.php:380 +msgid "Edit Subscriptions" msgstr "" -#: ../../Zotlabs/Module/Email_resend.php:33 -msgid "Unable to resend email verification message." +#: ../../addon/cart/submodules/subscriptions.php:414 +msgid "Subscription SKU" msgstr "" -#: ../../Zotlabs/Module/Setup.php:180 -msgid "$Projectname Server - Setup" +#: ../../addon/cart/submodules/subscriptions.php:419 +msgid "Catalog Description" msgstr "" -#: ../../Zotlabs/Module/Setup.php:184 -msgid "Could not connect to database." +#: ../../addon/cart/submodules/subscriptions.php:423 +msgid "Subscription available for purchase." msgstr "" -#: ../../Zotlabs/Module/Setup.php:188 -msgid "" -"Could not connect to specified site URL. Possible SSL certificate or DNS " -"issue." +#: ../../addon/cart/submodules/subscriptions.php:428 +msgid "Maximum active subscriptions to this item per account." msgstr "" -#: ../../Zotlabs/Module/Setup.php:195 -msgid "Could not create table." +#: ../../addon/cart/submodules/subscriptions.php:431 +msgid "Subscription price." msgstr "" -#: ../../Zotlabs/Module/Setup.php:201 -msgid "Your site database has been installed." +#: ../../addon/cart/submodules/subscriptions.php:435 +msgid "Quantity" msgstr "" -#: ../../Zotlabs/Module/Setup.php:207 -msgid "" -"You may need to import the file \"install/schema_xxx.sql\" manually using a " -"database client." +#: ../../addon/cart/submodules/subscriptions.php:439 +msgid "Term" msgstr "" -#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:274 -#: ../../Zotlabs/Module/Setup.php:799 -msgid "Please see the file \"install/INSTALL.txt\"." +#: ../../addon/cart/submodules/paypalbuttonV2.php:86 +msgid "Enable Paypal Button Module (API-v2)" msgstr "" -#: ../../Zotlabs/Module/Setup.php:271 -msgid "System check" +#: ../../addon/cart/submodules/paypalbuttonV2.php:96 +#: ../../addon/cart/submodules/paypalbutton.php:93 +msgid "Use Production Key" msgstr "" -#: ../../Zotlabs/Module/Setup.php:275 ../../Zotlabs/Module/Photos.php:955 -#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Cdav.php:1027 -msgid "Next" +#: ../../addon/cart/submodules/paypalbuttonV2.php:103 +#: ../../addon/cart/submodules/paypalbutton.php:100 +msgid "Paypal Sandbox Client Key" msgstr "" -#: ../../Zotlabs/Module/Setup.php:276 -msgid "Check again" +#: ../../addon/cart/submodules/paypalbuttonV2.php:110 +#: ../../addon/cart/submodules/paypalbutton.php:107 +msgid "Paypal Sandbox Secret Key" msgstr "" -#: ../../Zotlabs/Module/Setup.php:297 -msgid "Database connection" +#: ../../addon/cart/submodules/paypalbuttonV2.php:116 +#: ../../addon/cart/submodules/paypalbutton.php:113 +msgid "Paypal Production Client Key" msgstr "" -#: ../../Zotlabs/Module/Setup.php:298 -msgid "" -"In order to install $Projectname we need to know how to connect to your " -"database." +#: ../../addon/cart/submodules/paypalbuttonV2.php:123 +#: ../../addon/cart/submodules/paypalbutton.php:120 +msgid "Paypal Production Secret Key" msgstr "" -#: ../../Zotlabs/Module/Setup.php:299 -msgid "" -"Please contact your hosting provider or site administrator if you have " -"questions about these settings." +#: ../../addon/cart/submodules/paypalbuttonV2.php:271 +#: ../../addon/cart/submodules/paypalbutton.php:252 +msgid "Paypal button payments are not enabled." msgstr "" -#: ../../Zotlabs/Module/Setup.php:300 +#: ../../addon/cart/submodules/paypalbuttonV2.php:289 +#: ../../addon/cart/submodules/paypalbutton.php:270 msgid "" -"The database you specify below should already exist. If it does not, please " -"create it before continuing." -msgstr "" - -#: ../../Zotlabs/Module/Setup.php:304 -msgid "Database Server Name" +"Paypal button payments are not properly configured. Please choose another " +"payment option." msgstr "" -#: ../../Zotlabs/Module/Setup.php:304 -msgid "Default is 127.0.0.1" +#: ../../addon/cart/submodules/paypalbutton.php:85 +msgid "Enable Paypal Button Module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:305 -msgid "Database Port" +#: ../../addon/cart/submodules/manualcat.php:61 +msgid "Enable Manual Cart Module" msgstr "" -#: ../../Zotlabs/Module/Setup.php:305 -msgid "Communication port number - use 0 for default" +#: ../../addon/cart/submodules/orderoptions.php:70 +msgid "Enable Order/Item Options" msgstr "" -#: ../../Zotlabs/Module/Setup.php:306 -msgid "Database Login Name" +#: ../../addon/cart/submodules/orderoptions.php:333 +#: ../../addon/cart/submodules/orderoptions.php:357 +#: ../../addon/cart/submodules/orderoptions.php:433 +#: ../../addon/cart/submodules/orderoptions.php:457 +msgid "Label" msgstr "" -#: ../../Zotlabs/Module/Setup.php:307 -msgid "Database Login Password" +#: ../../addon/cart/submodules/orderoptions.php:336 +#: ../../addon/cart/submodules/orderoptions.php:360 +#: ../../addon/cart/submodules/orderoptions.php:436 +#: ../../addon/cart/submodules/orderoptions.php:460 +msgid "Instructions" msgstr "" -#: ../../Zotlabs/Module/Setup.php:308 -msgid "Database Name" +#: ../../addon/cart/myshop.php:30 +msgid "Access Denied." msgstr "" -#: ../../Zotlabs/Module/Setup.php:309 -msgid "Database Type" +#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1494 +msgid "Order Not Found" msgstr "" -#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351 -msgid "Site administrator email address" +#: ../../addon/cart/myshop.php:145 ../../addon/cart/myshop.php:181 +#: ../../addon/cart/myshop.php:215 ../../addon/cart/myshop.php:265 +#: ../../addon/cart/myshop.php:300 ../../addon/cart/myshop.php:323 +msgid "Access Denied" msgstr "" -#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351 -msgid "" -"Your account email address must match this in order to use the web admin " -"panel." +#: ../../addon/cart/myshop.php:190 ../../addon/cart/myshop.php:224 +#: ../../addon/cart/myshop.php:275 ../../addon/cart/myshop.php:333 +msgid "Invalid Item" msgstr "" -#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353 -msgid "Website URL" +#: ../../addon/cart/cart.php:259 +msgid "DB Cleanup Failure" msgstr "" -#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353 -msgid "Please use SSL (https) URL if available." +#: ../../addon/cart/cart.php:692 +msgid "[cart] Item Added" msgstr "" -#: ../../Zotlabs/Module/Setup.php:313 ../../Zotlabs/Module/Setup.php:355 -msgid "Please select a default timezone for your website" +#: ../../addon/cart/cart.php:1107 +msgid "Order already checked out." msgstr "" -#: ../../Zotlabs/Module/Setup.php:340 -msgid "Site settings" +#: ../../addon/cart/cart.php:1416 +msgid "Drop database tables when uninstalling." msgstr "" -#: ../../Zotlabs/Module/Setup.php:394 -msgid "PHP version 8.0 or greater is required." +#: ../../addon/cart/cart.php:1423 ../../addon/cart/Settings/Cart.php:129 +msgid "Cart Settings" msgstr "" -#: ../../Zotlabs/Module/Setup.php:395 -msgid "PHP version" +#: ../../addon/cart/cart.php:1435 ../../addon/cart/cart.php:1438 +msgid "Shop" msgstr "" -#: ../../Zotlabs/Module/Setup.php:411 -msgid "Could not find a command line version of PHP in the web server PATH." +#: ../../addon/cart/cart.php:1598 +msgid "You must be logged into the Grid to shop." msgstr "" -#: ../../Zotlabs/Module/Setup.php:412 -msgid "" -"If you don't have a command line version of PHP installed on server, you " -"will not be able to run background polling via cron." +#: ../../addon/cart/cart.php:1647 +msgid "Access denied." msgstr "" -#: ../../Zotlabs/Module/Setup.php:416 -msgid "PHP executable path" +#: ../../addon/cart/cart.php:1699 ../../addon/cart/cart.php:1842 +msgid "No Order Found" msgstr "" -#: ../../Zotlabs/Module/Setup.php:416 -msgid "" -"Enter full path to php executable. You can leave this blank to continue the " -"installation." +#: ../../addon/cart/cart.php:1708 +msgid "An unknown error has occurred Please start again." msgstr "" -#: ../../Zotlabs/Module/Setup.php:421 -msgid "Command line PHP" +#: ../../addon/cart/cart.php:1851 +msgid "Requirements not met." msgstr "" -#: ../../Zotlabs/Module/Setup.php:431 -msgid "" -"Unable to check command line PHP, as shell_exec() is disabled. This is " -"required." +#: ../../addon/cart/cart.php:1851 +msgid "Review your order and complete any needed requirements." msgstr "" -#: ../../Zotlabs/Module/Setup.php:435 -msgid "" -"The command line version of PHP on your system does not have " -"\"register_argc_argv\" enabled." +#: ../../addon/cart/cart.php:1877 +msgid "Invalid Payment Type. Please start again." msgstr "" -#: ../../Zotlabs/Module/Setup.php:436 -msgid "This is required for message delivery to work." +#: ../../addon/cart/cart.php:1884 +msgid "Order not found" msgstr "" -#: ../../Zotlabs/Module/Setup.php:439 -msgid "PHP register_argc_argv" +#: ../../addon/cart/Settings/Cart.php:58 +msgid "Enable Test Catalog" msgstr "" -#: ../../Zotlabs/Module/Setup.php:459 -msgid "" -"This is not sufficient to upload larger images or files. You should be able " -"to upload at least 4 MB at once." +#: ../../addon/cart/Settings/Cart.php:70 +msgid "Enable Manual Payments" msgstr "" -#: ../../Zotlabs/Module/Setup.php:461 -#, php-format -msgid "" -"Your max allowed total upload size is set to %s. Maximum size of one file to " -"upload is set to %s. You are allowed to upload up to %d files at once." +#: ../../addon/cart/Settings/Cart.php:90 +msgid "Base Merchant Currency" msgstr "" -#: ../../Zotlabs/Module/Setup.php:467 -msgid "You can adjust these settings in the server php.ini file." +#: ../../addon/twitter/twitter.php:109 +msgid "Post to Twitter" msgstr "" -#: ../../Zotlabs/Module/Setup.php:469 -msgid "PHP upload limits" +#: ../../addon/twitter/Mod_Twitter.php:65 +msgid "Twitter settings updated." msgstr "" -#: ../../Zotlabs/Module/Setup.php:492 +#: ../../addon/twitter/Mod_Twitter.php:101 msgid "" -"Error: the \"openssl_pkey_new\" function on this system is not able to " -"generate encryption keys" +"No consumer key pair for Twitter found. Please contact your site " +"administrator." msgstr "" -#: ../../Zotlabs/Module/Setup.php:493 +#: ../../addon/twitter/Mod_Twitter.php:123 msgid "" -"If running under Windows, please see \"http://www.php.net/manual/en/openssl." -"installation.php\"." -msgstr "" - -#: ../../Zotlabs/Module/Setup.php:496 -msgid "Generate encryption keys" +"At this Hubzilla instance the Twitter plugin was enabled but you have not " +"yet connected your account to your Twitter account. To do so click the " +"button below to get a PIN from Twitter which you have to copy into the input " +"box below and submit the form. Only your <strong>public</strong> posts will " +"be posted to Twitter." msgstr "" -#: ../../Zotlabs/Module/Setup.php:500 -msgid "Error: the sodium encryption library is not installed." +#: ../../addon/twitter/Mod_Twitter.php:125 +msgid "Log in with Twitter" msgstr "" -#: ../../Zotlabs/Module/Setup.php:502 -msgid "Generate ed25519 encryption keys" +#: ../../addon/twitter/Mod_Twitter.php:128 +msgid "Copy the PIN from Twitter here" msgstr "" -#: ../../Zotlabs/Module/Setup.php:507 +#: ../../addon/twitter/Mod_Twitter.php:150 msgid "" -"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are " -"required." +"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile " +"details from unknown viewers?</em>) the link potentially included in public " +"postings relayed to Twitter will lead the visitor to a blank page informing " +"the visitor that the access to your profile has been restricted." msgstr "" -#: ../../Zotlabs/Module/Setup.php:509 -msgid "Bigmath library (either bcmath or gmp)" +#: ../../addon/twitter/Mod_Twitter.php:155 +msgid "Twitter post length" msgstr "" -#: ../../Zotlabs/Module/Setup.php:526 -msgid "libCurl PHP module" +#: ../../addon/twitter/Mod_Twitter.php:155 +msgid "Maximum tweet length" msgstr "" -#: ../../Zotlabs/Module/Setup.php:527 -msgid "GD graphics PHP module" +#: ../../addon/twitter/Mod_Twitter.php:160 +msgid "Send public postings to Twitter by default" msgstr "" -#: ../../Zotlabs/Module/Setup.php:528 -msgid "OpenSSL PHP module" +#: ../../addon/twitter/Mod_Twitter.php:160 +msgid "" +"If enabled your public postings will be posted to the associated Twitter " +"account by default" msgstr "" -#: ../../Zotlabs/Module/Setup.php:529 -msgid "PDO database PHP module" +#: ../../addon/twitter/Mod_Twitter.php:179 +msgid "Twitter Crosspost Connector" msgstr "" -#: ../../Zotlabs/Module/Setup.php:530 -msgid "mb_string PHP module" +#: ../../addon/gravatar/gravatar.php:123 +msgid "generic profile image" msgstr "" -#: ../../Zotlabs/Module/Setup.php:531 -msgid "xml PHP module" +#: ../../addon/gravatar/gravatar.php:124 +msgid "random geometric pattern" msgstr "" -#: ../../Zotlabs/Module/Setup.php:532 -msgid "zip PHP module" +#: ../../addon/gravatar/gravatar.php:125 +msgid "monster face" msgstr "" -#: ../../Zotlabs/Module/Setup.php:533 -msgid "intl PHP module" +#: ../../addon/gravatar/gravatar.php:126 +msgid "computer generated face" msgstr "" -#: ../../Zotlabs/Module/Setup.php:537 ../../Zotlabs/Module/Setup.php:539 -msgid "Apache mod_rewrite module" +#: ../../addon/gravatar/gravatar.php:127 +msgid "retro arcade style face" msgstr "" -#: ../../Zotlabs/Module/Setup.php:537 -msgid "" -"Error: Apache webserver mod-rewrite module is required but not installed." +#: ../../addon/gravatar/gravatar.php:128 +msgid "Hub default profile photo" msgstr "" -#: ../../Zotlabs/Module/Setup.php:543 ../../Zotlabs/Module/Setup.php:546 -msgid "exec" +#: ../../addon/gravatar/gravatar.php:143 +msgid "Information" msgstr "" -#: ../../Zotlabs/Module/Setup.php:543 +#: ../../addon/gravatar/gravatar.php:143 msgid "" -"Error: exec is required but is either not installed or has been disabled in " -"php.ini" +"Libravatar addon is installed, too. Please disable Libravatar addon or this " +"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if " +"nothing was found at Libravatar." msgstr "" -#: ../../Zotlabs/Module/Setup.php:549 ../../Zotlabs/Module/Setup.php:552 -msgid "shell_exec" +#: ../../addon/gravatar/gravatar.php:151 +msgid "Default avatar image" msgstr "" -#: ../../Zotlabs/Module/Setup.php:549 -msgid "" -"Error: shell_exec is required but is either not installed or has been " -"disabled in php.ini" +#: ../../addon/gravatar/gravatar.php:151 +msgid "Select default avatar image if none was found at Gravatar. See README" msgstr "" -#: ../../Zotlabs/Module/Setup.php:557 -msgid "Error: libCURL PHP module required but not installed." +#: ../../addon/gravatar/gravatar.php:152 +msgid "Rating of images" msgstr "" -#: ../../Zotlabs/Module/Setup.php:561 -msgid "" -"Error: GD PHP module with JPEG support or ImageMagick graphics library " -"required but not installed." +#: ../../addon/gravatar/gravatar.php:152 +msgid "Select the appropriate avatar rating for your site. See README" msgstr "" -#: ../../Zotlabs/Module/Setup.php:565 -msgid "Error: openssl PHP module required but not installed." +#: ../../addon/gravatar/gravatar.php:165 +msgid "Gravatar settings updated." msgstr "" -#: ../../Zotlabs/Module/Setup.php:571 -msgid "" -"Error: PDO database PHP module missing a driver for either mysql or pgsql." +#: ../../addon/hsse/Mod_Hsse.php:15 +msgid "WYSIWYG status editor" msgstr "" -#: ../../Zotlabs/Module/Setup.php:576 -msgid "Error: PDO database PHP module required but not installed." +#: ../../addon/hsse/Mod_Hsse.php:24 +msgid "WYSIWYG Status App" msgstr "" -#: ../../Zotlabs/Module/Setup.php:580 -msgid "Error: mb_string PHP module required but not installed." +#: ../../addon/hsse/Mod_Hsse.php:32 +msgid "WYSIWYG Status" msgstr "" -#: ../../Zotlabs/Module/Setup.php:584 -msgid "Error: xml PHP module required for DAV but not installed." +#: ../../addon/redfiles/redfiles.php:119 +msgid "Redmatrix File Storage Import" msgstr "" -#: ../../Zotlabs/Module/Setup.php:588 -msgid "Error: zip PHP module required but not installed." +#: ../../addon/redfiles/redfiles.php:120 +msgid "This will import all your Redmatrix cloud files to this channel." msgstr "" -#: ../../Zotlabs/Module/Setup.php:592 -msgid "Error: intl PHP module required but not installed." +#: ../../addon/openstreetmap/openstreetmap.php:125 +msgid "View Larger" msgstr "" -#: ../../Zotlabs/Module/Setup.php:611 ../../Zotlabs/Module/Setup.php:620 -msgid ".htconfig.php is writable" +#: ../../addon/openstreetmap/openstreetmap.php:148 +msgid "Tile Server URL" msgstr "" -#: ../../Zotlabs/Module/Setup.php:616 +#: ../../addon/openstreetmap/openstreetmap.php:148 msgid "" -"The web installer needs to be able to create a file called \".htconfig.php\" " -"in the top folder of your web server and it is unable to do so." +"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" " +"target=\"_blank\">public tile servers</a>" msgstr "" -#: ../../Zotlabs/Module/Setup.php:617 -msgid "" -"This is most often a permission setting, as the web server may not be able " -"to write files in your folder - even if you can." +#: ../../addon/openstreetmap/openstreetmap.php:149 +msgid "Nominatim (reverse geocoding) Server URL" msgstr "" -#: ../../Zotlabs/Module/Setup.php:618 -msgid "Please see install/INSTALL.txt for additional information." +#: ../../addon/openstreetmap/openstreetmap.php:149 +msgid "" +"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" " +"target=\"_blank\">Nominatim servers</a>" msgstr "" -#: ../../Zotlabs/Module/Setup.php:634 -msgid "" -"This software uses the Smarty3 template engine to render its web views. " -"Smarty3 compiles templates to PHP to speed up rendering." +#: ../../addon/openstreetmap/openstreetmap.php:150 +msgid "Default zoom" msgstr "" -#: ../../Zotlabs/Module/Setup.php:635 -#, php-format +#: ../../addon/openstreetmap/openstreetmap.php:150 msgid "" -"In order to store these compiled templates, the web server needs to have " -"write access to the directory %s under the top level web folder." +"The default zoom level. (1:world, 18:highest, also depends on tile server)" msgstr "" -#: ../../Zotlabs/Module/Setup.php:636 ../../Zotlabs/Module/Setup.php:657 -msgid "" -"Please ensure that the user that your web server runs as (e.g. www-data) has " -"write access to this folder." +#: ../../addon/openstreetmap/openstreetmap.php:151 +msgid "Include marker on map" msgstr "" -#: ../../Zotlabs/Module/Setup.php:637 -#, php-format -msgid "" -"Note: as a security measure, you should give the web server write access to " -"%s only--not the template files (.tpl) that it contains." +#: ../../addon/openstreetmap/openstreetmap.php:151 +msgid "Include a marker on the map." msgstr "" -#: ../../Zotlabs/Module/Setup.php:640 -#, php-format -msgid "%s is writable" +#: ../../addon/workflow/workflow.php:224 +msgid "Workflow user." msgstr "" -#: ../../Zotlabs/Module/Setup.php:656 -msgid "" -"This software uses the store directory to save uploaded files. The web " -"server needs to have write access to the store directory under the top level " -"web folder" +#: ../../addon/workflow/workflow.php:275 +msgid "This channel" msgstr "" -#: ../../Zotlabs/Module/Setup.php:660 -msgid "store is writable" +#: ../../addon/workflow/workflow.php:288 ../../Zotlabs/Module/Locs.php:123 +msgid "Primary" msgstr "" -#: ../../Zotlabs/Module/Setup.php:692 -msgid "" -"SSL certificate cannot be validated. Fix certificate or disable https access " -"to this site." +#: ../../addon/workflow/workflow.php:330 +msgid "Create New Workflow Item" msgstr "" -#: ../../Zotlabs/Module/Setup.php:693 -msgid "" -"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!" +#: ../../addon/workflow/workflow.php:564 ../../addon/workflow/workflow.php:1466 +#: ../../addon/workflow/workflow.php:1485 +msgid "Workflow" msgstr "" -#: ../../Zotlabs/Module/Setup.php:694 -msgid "" -"This restriction is incorporated because public posts from you may for " -"example contain references to images on your own hub." +#: ../../addon/workflow/workflow.php:1454 +msgid "No Workflows Available" msgstr "" -#: ../../Zotlabs/Module/Setup.php:695 -msgid "" -"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." +#: ../../addon/workflow/workflow.php:1484 +msgid "Add item to which workflow" msgstr "" -#: ../../Zotlabs/Module/Setup.php:696 -msgid "" -"This can cause usability issues elsewhere (not just on your own site) so we " -"must insist on this requirement." +#: ../../addon/workflow/workflow.php:1544 +#: ../../addon/workflow/workflow.php:1663 +msgid "Create Workflow Item" msgstr "" -#: ../../Zotlabs/Module/Setup.php:697 -msgid "" -"Providers are available that issue free certificates which are browser-valid." +#: ../../addon/workflow/workflow.php:2661 +msgid "Link" msgstr "" -#: ../../Zotlabs/Module/Setup.php:698 -msgid "" -"If you are confident that the certificate is valid and signed by a trusted " -"authority, check to see if you have failed to install an intermediate cert. " -"These are not normally required by browsers, but are required for server-to-" -"server communications." +#: ../../addon/workflow/workflow.php:2663 +msgid "Web link." msgstr "" -#: ../../Zotlabs/Module/Setup.php:700 -msgid "SSL certificate validation" +#: ../../addon/workflow/workflow.php:2682 +#: ../../addon/workflow/workflow.php:2751 ../../Zotlabs/Module/Connedit.php:734 +#: ../../Zotlabs/Module/Cdav.php:1370 +msgid "Title" msgstr "" -#: ../../Zotlabs/Module/Setup.php:706 -msgid "" -"Url rewrite in .htaccess is not working. Check your server configuration." -"Test: " +#: ../../addon/workflow/workflow.php:2684 +#: ../../addon/workflow/workflow.php:2753 +msgid "Brief description or title" msgstr "" -#: ../../Zotlabs/Module/Setup.php:709 -msgid "Url rewrite is working" +#: ../../addon/workflow/workflow.php:2690 ../../Zotlabs/Lib/Apps.php:374 +#: ../../Zotlabs/Widget/Notes.php:41 +msgid "Notes" msgstr "" -#: ../../Zotlabs/Module/Setup.php:722 -msgid "" -"The database configuration file \".htconfig.php\" could not be written. " -"Please use the enclosed text to create a configuration file in your web " -"server root." +#: ../../addon/workflow/workflow.php:2692 +#: ../../addon/workflow/workflow.php:2761 +msgid "Notes and Info" msgstr "" -#: ../../Zotlabs/Module/Setup.php:751 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:401 -msgid "Errors encountered creating database tables." +#: ../../addon/workflow/workflow.php:2697 +#: ../../Zotlabs/Module/Admin/Queue.php:47 +msgid "Priority" msgstr "" -#: ../../Zotlabs/Module/Setup.php:797 -msgid "<h1>What next?</h1>" +#: ../../addon/workflow/workflow.php:2699 +msgid "Used to order links" msgstr "" -#: ../../Zotlabs/Module/Setup.php:798 -msgid "" -"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." +#: ../../addon/workflow/workflow.php:2759 +msgid "Body" msgstr "" -#: ../../Zotlabs/Module/Bookmarks.php:62 -msgid "Bookmark added" +#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:101 +msgid "Workflow Settings" msgstr "" -#: ../../Zotlabs/Module/Bookmarks.php:101 -msgid "My Connections Bookmarks" +#: ../../addon/workflow/Settings/WorkflowSettingsUtil.php:145 +msgid "Workflow settings" msgstr "" -#: ../../Zotlabs/Module/Z6trans.php:19 -msgid "Update to Hubzilla 5.0 step 2" +#: ../../addon/skeleton/Mod_Skeleton.php:38 +msgid "Some setting" msgstr "" -#: ../../Zotlabs/Module/Z6trans.php:21 -msgid "To complete the update please run" +#: ../../addon/skeleton/Mod_Skeleton.php:38 +msgid "A setting" msgstr "" -#: ../../Zotlabs/Module/Z6trans.php:23 -msgid "php util/z6convert.php" +#: ../../addon/skeleton/Mod_Skeleton.php:46 +msgid "Skeleton Settings" msgstr "" -#: ../../Zotlabs/Module/Z6trans.php:25 -msgid "from the terminal." +#: ../../addon/authchoose/Mod_Authchoose.php:30 +msgid "" +"Allow magic authentication only to websites of your immediate connections" msgstr "" -#: ../../Zotlabs/Module/Regate.php:85 -msgid "Email resent" +#: ../../addon/authchoose/Mod_Authchoose.php:36 +msgid "Authchoose" msgstr "" -#: ../../Zotlabs/Module/Regate.php:85 -msgid "Email resend failed" +#: ../../addon/content_import/Mod_content_import.php:27 +msgid "No server specified" msgstr "" -#: ../../Zotlabs/Module/Regate.php:110 -msgid "Verification successful" +#: ../../addon/content_import/Mod_content_import.php:72 +msgid "Posts imported" msgstr "" -#: ../../Zotlabs/Module/Regate.php:154 -msgid "Account successfull created" +#: ../../addon/content_import/Mod_content_import.php:112 +msgid "Files imported" msgstr "" -#: ../../Zotlabs/Module/Regate.php:212 -msgid "Channel successfull created" +#: ../../addon/content_import/Mod_content_import.php:133 +#: ../../Zotlabs/Lib/Apps.php:338 +msgid "Content Import" msgstr "" -#: ../../Zotlabs/Module/Regate.php:218 -msgid "Automatic channel creation failed. Please create a channel." +#: ../../addon/content_import/Mod_content_import.php:134 +msgid "" +"This will import all your conversations and cloud files from a cloned " +"channel on another server. This may take a while if you have lots of posts " +"and or files." msgstr "" -#: ../../Zotlabs/Module/Regate.php:230 -msgid "Account creation error" +#: ../../addon/content_import/Mod_content_import.php:135 +msgid "Include posts" msgstr "" -#: ../../Zotlabs/Module/Regate.php:242 -msgid "Verify failed" +#: ../../addon/content_import/Mod_content_import.php:135 +msgid "Conversations, Articles, Cards, and other posted content" msgstr "" -#: ../../Zotlabs/Module/Regate.php:247 -msgid "Token verification failed" +#: ../../addon/content_import/Mod_content_import.php:136 +msgid "Include files" msgstr "" -#: ../../Zotlabs/Module/Regate.php:252 -msgid "Request not inside time frame" +#: ../../addon/content_import/Mod_content_import.php:136 +msgid "Files, Photos and other cloud storage" msgstr "" -#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288 -msgid "Identity unknown" +#: ../../addon/content_import/Mod_content_import.php:137 +msgid "Original Server base URL" msgstr "" -#: ../../Zotlabs/Module/Regate.php:264 -msgid "dId2 mistaken" +#: ../../addon/mdpost/mdpost.php:42 +msgid "Use markdown for editing posts" msgstr "" -#: ../../Zotlabs/Module/Regate.php:292 -msgid "Your Registration ID" +#: ../../addon/rtof/Mod_Rtof.php:24 +msgid "Friendica Crosspost Connector Settings saved." msgstr "" -#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397 -#: ../../Zotlabs/Module/Regate.php:429 -msgid "Registration verification" +#: ../../addon/rtof/Mod_Rtof.php:47 +msgid "Send public postings to Friendica by default" msgstr "" -#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434 -msgid "Hold on, you can start verification in" +#: ../../addon/rtof/Mod_Rtof.php:51 +msgid "Friendica API Path" msgstr "" -#: ../../Zotlabs/Module/Regate.php:313 -msgid "Please remember your verification token for ID" +#: ../../addon/rtof/Mod_Rtof.php:55 +msgid "Friendica login name" msgstr "" -#: ../../Zotlabs/Module/Regate.php:315 -msgid "Token validity" +#: ../../addon/rtof/Mod_Rtof.php:59 +msgid "Friendica password" msgstr "" -#: ../../Zotlabs/Module/Regate.php:351 -msgid "Resend email" +#: ../../addon/rtof/Mod_Rtof.php:67 +msgid "Friendica Crosspost Connector" msgstr "" -#: ../../Zotlabs/Module/Regate.php:356 -msgid "Registration status" +#: ../../addon/rtof/rtof.php:51 +msgid "Post to Friendica" msgstr "" -#: ../../Zotlabs/Module/Regate.php:359 -msgid "Verification successful!" +#: ../../addon/ldapauth/ldapauth.php:101 +msgid "An account has been created for you." msgstr "" -#: ../../Zotlabs/Module/Regate.php:360 -msgid "Your login ID is" +#: ../../addon/ldapauth/ldapauth.php:108 +msgid "Authentication successful but rejected: account creation is disabled." msgstr "" -#: ../../Zotlabs/Module/Regate.php:361 -msgid "" -"After your account has been approved by our administrator you will be able " -"to login with your login ID and your provided password." +#: ../../addon/nofed/nofed.php:47 +msgid "Federate" msgstr "" -#: ../../Zotlabs/Module/Regate.php:373 -msgid "Registration request revoked" +#: ../../addon/nofed/Mod_Nofed.php:21 +msgid "nofed Settings saved." msgstr "" -#: ../../Zotlabs/Module/Regate.php:374 -msgid "Sorry for any inconvience. Thank you for your response." +#: ../../addon/nofed/Mod_Nofed.php:40 +msgid "Federate posts by default" msgstr "" -#: ../../Zotlabs/Module/Regate.php:398 -msgid "Please enter your verification token for ID" +#: ../../addon/nofed/Mod_Nofed.php:48 +msgid "No Federation" msgstr "" -#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426 -msgid "Please check your email!" +#: ../../addon/photocache/Mod_Photocache.php:27 +msgid "Photo Cache settings saved." msgstr "" -#: ../../Zotlabs/Module/Regate.php:409 -msgid "Verification token" +#: ../../addon/photocache/Mod_Photocache.php:43 +msgid "" +"Saves a copy of images from external sites locally to increase your " +"anonymity in the web." msgstr "" -#: ../../Zotlabs/Module/Regate.php:420 -msgid "ID expired" +#: ../../addon/photocache/Mod_Photocache.php:49 +msgid "Minimal photo size for caching" msgstr "" -#: ../../Zotlabs/Module/Regate.php:435 -msgid "You will require the verification token for ID" +#: ../../addon/photocache/Mod_Photocache.php:51 +msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default." msgstr "" -#: ../../Zotlabs/Module/Regate.php:444 -msgid "Unknown or expired ID" +#: ../../addon/photocache/Mod_Photocache.php:60 +msgid "Photo Cache" msgstr "" -#: ../../Zotlabs/Module/Regate.php:455 -msgid "dId2 malformed" +#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:135 +msgid "Gallery" msgstr "" -#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97 -msgid "Authorize application connection" +#: ../../addon/gallery/gallery.php:46 +msgid "Photo Gallery" msgstr "" -#: ../../Zotlabs/Module/Api.php:77 -msgid "Return to your app and insert this Security Code:" +#: ../../addon/likebanner/likebanner.php:51 +msgid "Your Webbie:" msgstr "" -#: ../../Zotlabs/Module/Api.php:87 -msgid "Please login to continue." +#: ../../addon/likebanner/likebanner.php:54 +msgid "Fontsize (px):" msgstr "" -#: ../../Zotlabs/Module/Api.php:99 -msgid "" -"Do you want to authorize this application to access your posts and contacts, " -"and/or create new posts for you?" +#: ../../addon/likebanner/likebanner.php:68 +msgid "Link:" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:62 -msgid "Event can not end before it has started." +#: ../../addon/likebanner/likebanner.php:70 +msgid "Like us on Hubzilla" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:64 -#: ../../Zotlabs/Module/Channel_calendar.php:72 -#: ../../Zotlabs/Module/Channel_calendar.php:87 -msgid "Unable to generate preview." +#: ../../addon/likebanner/likebanner.php:72 +msgid "Embed:" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:70 -msgid "Event title and start time are required." +#: ../../addon/tictac/tictac.php:21 +msgid "Three Dimensional Tic-Tac-Toe" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:85 -#: ../../Zotlabs/Module/Channel_calendar.php:226 -msgid "Event not found." +#: ../../addon/tictac/tictac.php:54 +msgid "3D Tic-Tac-Toe" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:370 -msgid "Edit event" +#: ../../addon/tictac/tictac.php:59 +msgid "New game" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:372 -msgid "Delete event" +#: ../../addon/tictac/tictac.php:60 +msgid "New game with handicap" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:392 -#: ../../Zotlabs/Module/Cal.php:161 ../../Zotlabs/Module/Cdav.php:935 -msgid "Link to source" +#: ../../addon/tictac/tictac.php:61 +msgid "" +"Three dimensional tic-tac-toe is just like the traditional game except that " +"it is played on multiple levels simultaneously. " msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:406 -msgid "calendar" +#: ../../addon/tictac/tictac.php:62 +msgid "" +"In this case there are three levels. You win by getting three in a row on " +"any level, as well as up, down, and diagonally across the different levels." msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:493 -msgid "Failed to remove event" +#: ../../addon/tictac/tictac.php:64 +msgid "" +"The handicap game disables the center position on the middle level because " +"the player claiming this square often has an unfair advantage." msgstr "" -#: ../../Zotlabs/Module/Lockview.php:101 -msgid "Remote privacy information not available" +#: ../../addon/tictac/tictac.php:183 +msgid "You go first..." msgstr "" -#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203 -#: ../../Zotlabs/Module/Acl.php:124 -msgctxt "acl" -msgid "Profile" +#: ../../addon/tictac/tictac.php:188 +msgid "I'm going first this time..." msgstr "" -#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212 -msgid "Privacy group" +#: ../../addon/tictac/tictac.php:194 +msgid "You won!" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:183 -msgid "Item" +#: ../../addon/tictac/tictac.php:200 ../../addon/tictac/tictac.php:225 +msgid "\"Cat\" game!" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:230 -#, php-format -msgid "Click to copy link to this ressource for guest %s to clipboard" +#: ../../addon/tictac/tictac.php:223 +msgid "I won!" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:230 -msgid "Link copied" +#: ../../boot.php:1730 +msgid "Create an account to access services and applications" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:235 -msgid "Access" +#: ../../boot.php:1748 +msgid "Email or nickname" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:236 ../../Zotlabs/Widget/Tokens.php:49 -msgid "Guest access" +#: ../../boot.php:1758 +msgid "Password" msgstr "" -#: ../../Zotlabs/Module/Lockview.php:237 -msgid "OCAP access" +#: ../../boot.php:1759 +msgid "Remember me" msgstr "" -#: ../../Zotlabs/Module/Editlayout.php:128 ../../Zotlabs/Module/Layouts.php:129 -#: ../../Zotlabs/Module/Layouts.php:187 -msgid "Layout Name" +#: ../../boot.php:1762 +msgid "Forgot your password?" msgstr "" -#: ../../Zotlabs/Module/Editlayout.php:129 ../../Zotlabs/Module/Layouts.php:132 -msgid "Layout Description (Optional)" +#: ../../boot.php:1763 ../../Zotlabs/Module/Lostpass.php:91 +msgid "Password Reset" msgstr "" -#: ../../Zotlabs/Module/Editlayout.php:137 -msgid "Edit Layout" +#: ../../boot.php:2641 +#, php-format +msgid "[$Projectname] Website SSL error for %s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103 -msgid "Album not found." +#: ../../boot.php:2646 +msgid "Website SSL certificate is not valid. Please correct." msgstr "" -#: ../../Zotlabs/Module/Photos.php:93 -msgid "Delete Album" +#: ../../boot.php:2762 +#, php-format +msgid "[$Projectname] Cron tasks not running on %s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1057 -msgid "Delete Photo" +#: ../../boot.php:2767 +msgid "Cron/Scheduled tasks not running." msgstr "" -#: ../../Zotlabs/Module/Photos.php:511 -#: ../../Zotlabs/Module/Viewconnections.php:23 -#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77 -#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24 -msgid "Public access denied." +#: ../../Zotlabs/Lib/Enotify.php:61 +msgid "$Projectname Notification" msgstr "" -#: ../../Zotlabs/Module/Photos.php:522 -msgid "No photos selected" +#: ../../Zotlabs/Lib/Enotify.php:64 +msgid "Thank You," msgstr "" -#: ../../Zotlabs/Module/Photos.php:571 -msgid "Access to this item is restricted." +#: ../../Zotlabs/Lib/Enotify.php:67 +#, php-format +msgid "This email was sent by %1$s at %2$s." msgstr "" -#: ../../Zotlabs/Module/Photos.php:614 +#: ../../Zotlabs/Lib/Enotify.php:68 #, php-format -msgid "%1$.2f MB photo storage used." +msgid "" +"To stop receiving these messages, please adjust your Notification Settings " +"at %s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:618 +#: ../../Zotlabs/Lib/Enotify.php:69 #, php-format -msgid "%1$.2f MB of %2$.2f MB photo storage used." +msgid "To stop receiving these messages, please adjust your %s." msgstr "" -#: ../../Zotlabs/Module/Photos.php:660 -msgid "Upload Photos" +#: ../../Zotlabs/Lib/Enotify.php:69 +#: ../../Zotlabs/Module/Settings/Channel.php:242 +msgid "Notification Settings" msgstr "" -#: ../../Zotlabs/Module/Photos.php:664 -msgid "Enter an album name" +#: ../../Zotlabs/Lib/Enotify.php:124 +#, php-format +msgid "%s <!item_type!>" msgstr "" -#: ../../Zotlabs/Module/Photos.php:665 -msgid "or select an existing album (doubleclick)" +#: ../../Zotlabs/Lib/Enotify.php:132 +#, php-format +msgid "[$Projectname:Notify] New direct message received at %s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:666 -msgid "Create a status post for this upload" +#: ../../Zotlabs/Lib/Enotify.php:134 +#, php-format +msgid "%1$s sent you a new direct message at %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:668 -msgid "Description (optional)" +#: ../../Zotlabs/Lib/Enotify.php:135 +#, php-format +msgid "%1$s sent you %2$s." msgstr "" -#: ../../Zotlabs/Module/Photos.php:756 -msgid "Show Newest First" +#: ../../Zotlabs/Lib/Enotify.php:135 +msgid "a direct message" msgstr "" -#: ../../Zotlabs/Module/Photos.php:758 -msgid "Show Oldest First" +#: ../../Zotlabs/Lib/Enotify.php:136 +#, php-format +msgid "Please visit %s to view and/or reply to your direct messages." msgstr "" -#: ../../Zotlabs/Module/Photos.php:782 ../../Zotlabs/Module/Photos.php:1324 -#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Widget/Album.php:84 -#: ../../Zotlabs/Widget/Portfolio.php:91 -msgid "View Photo" +#: ../../Zotlabs/Lib/Enotify.php:149 +msgid "requested to comment on" msgstr "" -#: ../../Zotlabs/Module/Photos.php:813 ../../Zotlabs/Module/Embedphotos.php:187 -#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112 -msgid "Edit Album" +#: ../../Zotlabs/Lib/Enotify.php:149 +msgid "commented on" msgstr "" -#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1355 -msgid "Add Photos" +#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318 +msgid "requested to like" msgstr "" -#: ../../Zotlabs/Module/Photos.php:867 -msgid "Permission denied. Access to this item may be restricted." +#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318 +msgid "liked" msgstr "" -#: ../../Zotlabs/Module/Photos.php:869 -msgid "Photo not available" +#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321 +msgid "requested to dislike" msgstr "" -#: ../../Zotlabs/Module/Photos.php:927 -msgid "Use as profile photo" +#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321 +msgid "disliked" msgstr "" -#: ../../Zotlabs/Module/Photos.php:928 -msgid "Use as cover photo" +#: ../../Zotlabs/Lib/Enotify.php:168 +msgid "repeated" msgstr "" -#: ../../Zotlabs/Module/Photos.php:935 -msgid "Private Photo" +#: ../../Zotlabs/Lib/Enotify.php:173 +msgid "voted on" msgstr "" -#: ../../Zotlabs/Module/Photos.php:946 ../../Zotlabs/Module/Cal.php:199 -#: ../../Zotlabs/Module/Cdav.php:1026 -msgid "Previous" +#: ../../Zotlabs/Lib/Enotify.php:216 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" msgstr "" -#: ../../Zotlabs/Module/Photos.php:950 -msgid "View Full Size" +#: ../../Zotlabs/Lib/Enotify.php:224 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" msgstr "" -#: ../../Zotlabs/Module/Photos.php:994 ../../Zotlabs/Module/Cover_photo.php:382 -#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:463 -#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:90 -msgid "Remove" +#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1031 -msgid "Edit photo" +#: ../../Zotlabs/Lib/Enotify.php:245 +#, php-format +msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1033 -msgid "Rotate CW (right)" +#: ../../Zotlabs/Lib/Enotify.php:247 +#, php-format +msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1034 -msgid "Rotate CCW (left)" +#: ../../Zotlabs/Lib/Enotify.php:248 +#, php-format +msgid "%1$s commented on an item/conversation you have been following" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1037 -msgid "Move photo to album" +#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345 +#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385 +#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:416 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." msgstr "" -#: ../../Zotlabs/Module/Photos.php:1038 -msgid "Enter a new album name" +#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256 +#, php-format +msgid "Please visit %s to approve or reject this comment." msgstr "" -#: ../../Zotlabs/Module/Photos.php:1039 -msgid "or select an existing one (doubleclick)" +#: ../../Zotlabs/Lib/Enotify.php:341 +#, php-format +msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1044 -msgid "Add a Tag" +#: ../../Zotlabs/Lib/Enotify.php:342 +#, php-format +msgid "%1$s liked an item/conversation you created" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1052 -msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" +#: ../../Zotlabs/Lib/Enotify.php:353 +#, php-format +msgid "[$Projectname:Notify] %s posted to your profile wall" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1055 -msgid "Flag as adult in album view" +#: ../../Zotlabs/Lib/Enotify.php:355 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137 -msgid "View all" +#: ../../Zotlabs/Lib/Enotify.php:357 +#, php-format +msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1238 -msgid "Photo Tools" +#: ../../Zotlabs/Lib/Enotify.php:379 +#, php-format +msgid "[$Projectname:Notify] %s tagged you" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1247 -msgid "In This Photo:" +#: ../../Zotlabs/Lib/Enotify.php:380 +#, php-format +msgid "%1$s tagged you at %2$s" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1252 -msgid "Map" +#: ../../Zotlabs/Lib/Enotify.php:381 +#, php-format +msgid "%1$s [zrl=%2$s]tagged you[/zrl]." msgstr "" -#: ../../Zotlabs/Module/Photos.php:1260 -msgctxt "noun" -msgid "Likes" +#: ../../Zotlabs/Lib/Enotify.php:392 +#, php-format +msgid "[$Projectname:Notify] %1$s poked you" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1261 -msgctxt "noun" -msgid "Dislikes" +#: ../../Zotlabs/Lib/Enotify.php:393 +#, php-format +msgid "%1$s poked you at %2$s" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:45 -msgid "Name is required" +#: ../../Zotlabs/Lib/Enotify.php:394 +#, php-format +msgid "%1$s [zrl=%2$s]poked you[/zrl]." msgstr "" -#: ../../Zotlabs/Module/Oauth.php:49 -msgid "Key and Secret are required" +#: ../../Zotlabs/Lib/Enotify.php:410 +#, php-format +msgid "[$Projectname:Notify] %s tagged your post" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134 -#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141 -#: ../../Zotlabs/Module/Oauth2.php:191 -msgid "Add application" +#: ../../Zotlabs/Lib/Enotify.php:411 +#, php-format +msgid "%1$s tagged your post at %2$s" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth2.php:116 -#: ../../Zotlabs/Module/Oauth2.php:144 -msgid "Name of application" +#: ../../Zotlabs/Lib/Enotify.php:412 +#, php-format +msgid "%1$s tagged [zrl=%2$s]your post[/zrl]" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138 -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:596 -#: ../../extend/addon/hzaddons/twitter/twitter.php:504 -msgid "Consumer Key" +#: ../../Zotlabs/Lib/Enotify.php:422 +msgid "[$Projectname:Notify] Introduction received" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113 -#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145 -msgid "Automatically generated - change if desired. Max length 20" +#: ../../Zotlabs/Lib/Enotify.php:423 +#, php-format +msgid "You've received an new connection request from '%1$s' at %2$s" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139 -#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145 -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:595 -#: ../../extend/addon/hzaddons/twitter/twitter.php:505 -msgid "Consumer Secret" +#: ../../Zotlabs/Lib/Enotify.php:424 +#, php-format +msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s." msgstr "" -#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140 -#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146 -msgid "Redirect" +#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:446 +#, php-format +msgid "You may visit their profile at %s" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth2.php:118 -#: ../../Zotlabs/Module/Oauth2.php:146 -msgid "" -"Redirect URI - leave blank unless your application specifically requires this" +#: ../../Zotlabs/Lib/Enotify.php:429 +#, php-format +msgid "Please visit %s to approve or reject the connection request." msgstr "" -#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141 -msgid "Icon url" +#: ../../Zotlabs/Lib/Enotify.php:437 +msgid "[$Projectname:Notify] Friend suggestion received" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Sources.php:121 -#: ../../Zotlabs/Module/Sources.php:156 ../../Zotlabs/Module/Register.php:501 -msgid "Optional" +#: ../../Zotlabs/Lib/Enotify.php:438 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:126 -msgid "Application not found." +#: ../../Zotlabs/Lib/Enotify.php:439 +#, php-format +msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s." msgstr "" -#: ../../Zotlabs/Module/Oauth.php:169 -msgid "Connected OAuth Apps" +#: ../../Zotlabs/Lib/Enotify.php:444 +msgid "Name:" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194 -msgid "Client key starts with" +#: ../../Zotlabs/Lib/Enotify.php:445 +msgid "Photo:" msgstr "" -#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195 -msgid "No name" +#: ../../Zotlabs/Lib/Enotify.php:448 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." msgstr "" -#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196 -msgid "Remove authorization" +#: ../../Zotlabs/Lib/Enotify.php:677 +msgid "[$Projectname:Notify]" msgstr "" -#: ../../Zotlabs/Module/Apps.php:51 ../../Zotlabs/Widget/Appstore.php:19 -msgid "Available Apps" +#: ../../Zotlabs/Lib/Enotify.php:843 +msgid "created a new poll" msgstr "" -#: ../../Zotlabs/Module/Apps.php:51 -msgid "Installed Apps" +#: ../../Zotlabs/Lib/Enotify.php:843 +msgid "created a new post" msgstr "" -#: ../../Zotlabs/Module/Apps.php:54 -msgid "Manage Apps" +#: ../../Zotlabs/Lib/Enotify.php:844 +#, php-format +msgid "voted on %s's poll" msgstr "" -#: ../../Zotlabs/Module/Apps.php:55 -msgid "Create Custom App" +#: ../../Zotlabs/Lib/Enotify.php:844 +#, php-format +msgid "commented on %s's post" msgstr "" -#: ../../Zotlabs/Module/Viewconnections.php:65 -msgid "No connections." +#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948 +msgid "shared a file with you" msgstr "" -#: ../../Zotlabs/Module/Viewconnections.php:105 +#: ../../Zotlabs/Lib/Enotify.php:857 #, php-format -msgid "Visit %s's profile [%s]" +msgid "edited a post dated %s" msgstr "" -#: ../../Zotlabs/Module/Viewconnections.php:135 -msgid "View Connections" +#: ../../Zotlabs/Lib/Enotify.php:860 +#, php-format +msgid "edited a comment dated %s" msgstr "" -#: ../../Zotlabs/Module/Chanview.php:132 -msgid "toggle full screen mode" +#: ../../Zotlabs/Lib/Enotify.php:933 +msgid "added your channel" msgstr "" -#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43 -msgid "Item is not editable" +#: ../../Zotlabs/Lib/Enotify.php:963 +msgid "sent you a direct message" msgstr "" -#: ../../Zotlabs/Module/Tagger.php:50 -msgid "Post not found." +#: ../../Zotlabs/Lib/Enotify.php:970 +msgid "g A l F d" msgstr "" -#: ../../Zotlabs/Module/Tagger.php:121 -#, php-format -msgid "%1$s tagged %2$s's %3$s with %4$s" +#: ../../Zotlabs/Lib/Enotify.php:973 +msgid "[today]" msgstr "" -#: ../../Zotlabs/Module/Common.php:14 -msgid "No channel." +#: ../../Zotlabs/Lib/Enotify.php:983 +msgid "created an event" msgstr "" -#: ../../Zotlabs/Module/Common.php:45 -msgid "No connections in common." +#: ../../Zotlabs/Lib/Enotify.php:998 +msgid "status verified" msgstr "" -#: ../../Zotlabs/Module/Common.php:65 -msgid "View Common Connections" +#: ../../Zotlabs/Lib/Apps.php:330 +msgid "Affinity Tool" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211 -#: ../../Zotlabs/Module/Profiles.php:641 -msgid "Profile not found." +#: ../../Zotlabs/Lib/Apps.php:333 +msgid "Site Admin" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:43 -msgid "Profile deleted." +#: ../../Zotlabs/Lib/Apps.php:337 +msgid "Content Filter" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104 -msgid "Profile-" +#: ../../Zotlabs/Lib/Apps.php:340 +msgid "Remote Diagnostics" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126 -msgid "New profile created." +#: ../../Zotlabs/Lib/Apps.php:341 +msgid "Suggest Channels" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:110 -msgid "Profile unavailable to clone." +#: ../../Zotlabs/Lib/Apps.php:343 +msgid "Channel Manager" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:145 -msgid "Profile unavailable to export." +#: ../../Zotlabs/Lib/Apps.php:344 +msgid "Stream" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:221 -msgid "Profile Name is required." +#: ../../Zotlabs/Lib/Apps.php:348 +msgid "Wiki" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:426 -msgid "Marital Status" +#: ../../Zotlabs/Lib/Apps.php:355 +msgid "Mail" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:430 -msgid "Romantic Partner" +#: ../../Zotlabs/Lib/Apps.php:356 +msgid "Chat" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787 -msgid "Likes" +#: ../../Zotlabs/Lib/Apps.php:358 +msgid "Probe" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788 -msgid "Dislikes" +#: ../../Zotlabs/Lib/Apps.php:359 +msgid "Suggest" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795 -msgid "Work/Employment" +#: ../../Zotlabs/Lib/Apps.php:360 +msgid "Random Channel" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:445 -msgid "Religion" +#: ../../Zotlabs/Lib/Apps.php:361 +msgid "Invite" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:449 -msgid "Political Views" +#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31 +msgid "Features" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:453 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:74 -msgid "Gender" +#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:410 +msgid "Post" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:457 -msgid "Sexual Preference" +#: ../../Zotlabs/Lib/Apps.php:369 +msgid "Notifications" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:461 -msgid "Homepage" +#: ../../Zotlabs/Lib/Apps.php:370 +msgid "Order Apps" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:465 -msgid "Interests" +#: ../../Zotlabs/Lib/Apps.php:371 +msgid "CardDAV" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Connedit.php:739 -#: ../../Zotlabs/Module/Locs.php:122 -#: ../../Zotlabs/Module/Admin/Channels.php:182 -#: ../../Zotlabs/Module/Cdav.php:1375 -msgid "Address" +#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105 +msgid "Channel Sources" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:573 -msgid "Profile updated." +#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288 +msgid "Guest Access" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:671 -msgid "Hide my connections from viewers of this profile" +#: ../../Zotlabs/Lib/Apps.php:375 +msgid "OAuth Apps Manager" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:684 -msgid "Publish my default profile in the network directory" +#: ../../Zotlabs/Lib/Apps.php:376 +msgid "OAuth2 Apps Manager" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:692 -msgid "Suggest me as a potential contact to new members" +#: ../../Zotlabs/Lib/Apps.php:377 +msgid "PDL Editor" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:696 -msgid "Reveal my online status" +#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248 +msgid "Contact Roles" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:737 -msgid "Edit Profile Details" +#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Widget/Notifications.php:154 +#: ../../Zotlabs/Module/Pubstream.php:109 +msgid "Public Stream" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:739 -msgid "View this profile" +#: ../../Zotlabs/Lib/Apps.php:380 +msgid "My Chatrooms" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:741 -msgid "Profile Tools" +#: ../../Zotlabs/Lib/Apps.php:381 +msgid "Channel Export" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:742 -msgid "Change cover photo" +#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53 +#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748 +#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1384 +#: ../../Zotlabs/Module/Oauth2.php:58 ../../Zotlabs/Module/Oauth2.php:142 +msgid "Update" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:744 -msgid "Create a new profile using these settings" +#: ../../Zotlabs/Lib/Apps.php:562 +msgid "Install" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:745 -msgid "Clone this profile" +#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614 +msgid "Purchase" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:746 -msgid "Delete this profile" +#: ../../Zotlabs/Lib/Apps.php:619 +msgid "Undelete" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:747 -msgid "Add profile things" +#: ../../Zotlabs/Lib/Apps.php:627 +msgid "Add to app-tray" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:748 -msgid "Basic" +#: ../../Zotlabs/Lib/Apps.php:628 +msgid "Remove from app-tray" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:750 -msgid "Relationship" +#: ../../Zotlabs/Lib/Apps.php:629 +msgid "Pin to navbar" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:753 -msgid "Import profile from file" +#: ../../Zotlabs/Lib/Apps.php:630 +msgid "Unpin from navbar" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:754 -msgid "Export profile to file" +#: ../../Zotlabs/Lib/PermissionDescription.php:108 +#: ../../Zotlabs/Access/PermissionRoles.php:386 +msgid "Public" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:755 -msgid "Your gender" +#: ../../Zotlabs/Lib/PermissionDescription.php:109 +msgid "Anybody in the $Projectname network" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:756 -msgid "Marital status" +#: ../../Zotlabs/Lib/PermissionDescription.php:110 +#, php-format +msgid "Any account on %s" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:757 -msgid "Sexual preference" +#: ../../Zotlabs/Lib/PermissionDescription.php:111 +msgid "Any of my connections" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:760 -msgid "Profile name" +#: ../../Zotlabs/Lib/PermissionDescription.php:112 +msgid "Only connections I specifically allow" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:762 -msgid "This is your default profile." +#: ../../Zotlabs/Lib/PermissionDescription.php:113 +msgid "Anybody authenticated (could include visitors from other networks)" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:764 -msgid "Your full name" +#: ../../Zotlabs/Lib/PermissionDescription.php:114 +msgid "Any connections including those who haven't yet been approved" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:765 -msgid "Short title/description" +#: ../../Zotlabs/Lib/PermissionDescription.php:150 +msgid "" +"This is your default setting for the audience of your normal stream, and " +"posts." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:765 -msgid "Maximal 190 characters" +#: ../../Zotlabs/Lib/PermissionDescription.php:151 +msgid "" +"This is your default setting for who can view your default channel profile" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:768 -msgid "Street address" +#: ../../Zotlabs/Lib/PermissionDescription.php:152 +msgid "This is your default setting for who can view your connections" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:769 -msgid "Locality/City" +#: ../../Zotlabs/Lib/PermissionDescription.php:153 +msgid "" +"This is your default setting for who can view your file storage and photos" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:770 -msgid "Region/State" +#: ../../Zotlabs/Lib/PermissionDescription.php:154 +msgid "This is your default setting for the audience of your webpages" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:771 -msgid "Postal/Zip code" +#: ../../Zotlabs/Lib/Permcat.php:83 +msgctxt "permcat" +msgid "Default" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:772 ../../Zotlabs/Module/Connedit.php:757 -#: ../../Zotlabs/Module/Cdav.php:1393 -msgid "Country" +#: ../../Zotlabs/Lib/DB_Upgrade.php:85 +msgid "Source code of failed update: " msgstr "" -#: ../../Zotlabs/Module/Profiles.php:777 -msgid "Who (if applicable)" +#: ../../Zotlabs/Lib/DB_Upgrade.php:106 +#, php-format +msgid "Update Error at %s" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:777 -msgid "Examples: cathy123, Cathy Williams, cathy@example.com" +#: ../../Zotlabs/Lib/DB_Upgrade.php:112 +#, php-format +msgid "Update %s failed. See error logs." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:778 -msgid "Since (date)" +#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146 +msgid "Channel is blocked on this site." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:781 -msgid "Tell us about yourself" +#: ../../Zotlabs/Lib/Connect.php:50 +msgid "Channel location missing." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:782 -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:68 -msgid "Homepage URL" +#: ../../Zotlabs/Lib/Connect.php:104 +msgid "Remote channel or protocol unavailable." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:783 -msgid "Hometown" +#: ../../Zotlabs/Lib/Connect.php:140 +msgid "Channel discovery failed." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:784 -msgid "Political views" +#: ../../Zotlabs/Lib/Connect.php:158 +msgid "Protocol disabled." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:785 -msgid "Religious views" +#: ../../Zotlabs/Lib/Connect.php:170 +msgid "Cannot connect to yourself." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:786 -msgid "Keywords used in directory listings" +#: ../../Zotlabs/Lib/Connect.php:275 +msgid "error saving data" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:786 -msgid "Example: fishing photography software" +#: ../../Zotlabs/Lib/ThreadItem.php:110 +msgid "Restricted message" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:789 -msgid "Musical interests" +#: ../../Zotlabs/Lib/ThreadItem.php:117 +msgid "Direct message" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:790 -msgid "Books, literature" +#: ../../Zotlabs/Lib/ThreadItem.php:122 +msgid "Public Policy" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:791 -msgid "Television" +#: ../../Zotlabs/Lib/ThreadItem.php:156 +msgid "Privacy conflict. Discretion advised." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:792 -msgid "Film/Dance/Culture/Entertainment" +#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373 +msgid "Admin Delete" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:793 -msgid "Hobbies/Interests" +#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:66 +msgid "Save to Folder" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:794 -msgid "Love/Romance" +#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 +msgid "I will attend" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:796 -msgid "School/Education" +#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 +msgid "I will not attend" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:797 -msgid "Contact information and social networks" +#: ../../Zotlabs/Lib/ThreadItem.php:217 ../../Zotlabs/Widget/Pinned.php:77 +msgid "I might attend" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:798 -msgid "My other channels" +#: ../../Zotlabs/Lib/ThreadItem.php:296 ../../Zotlabs/Module/Photos.php:1074 +msgid "I like this (toggle)" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:852 ../../Zotlabs/Module/Manage.php:137 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:217 -msgid "Create New" +#: ../../Zotlabs/Lib/ThreadItem.php:297 ../../Zotlabs/Module/Photos.php:1075 +msgid "I don't like this (toggle)" msgstr "" -#: ../../Zotlabs/Module/Network.php:108 -msgid "No such group" +#: ../../Zotlabs/Lib/ThreadItem.php:298 +msgid "Reply to this comment" msgstr "" -#: ../../Zotlabs/Module/Network.php:160 -msgid "No such channel" +#: ../../Zotlabs/Lib/ThreadItem.php:298 +msgid "reply" msgstr "" -#: ../../Zotlabs/Module/Network.php:248 -msgid "Privacy group is empty" +#: ../../Zotlabs/Lib/ThreadItem.php:298 +msgid "Reply to" msgstr "" -#: ../../Zotlabs/Module/Network.php:258 -msgid "Privacy group: " +#: ../../Zotlabs/Lib/ThreadItem.php:305 ../../Zotlabs/Widget/Pinned.php:95 +msgid "share" msgstr "" -#: ../../Zotlabs/Module/Network.php:333 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:29 -msgid "Invalid channel." +#: ../../Zotlabs/Lib/ThreadItem.php:309 +msgid "Repeat" msgstr "" -#: ../../Zotlabs/Module/Invite.php:70 -msgid "Invite App" +#: ../../Zotlabs/Lib/ThreadItem.php:309 +msgid "repeat" msgstr "" -#: ../../Zotlabs/Module/Invite.php:82 -msgid "Register is closed" +#: ../../Zotlabs/Lib/ThreadItem.php:320 +msgid "Delivery Report" msgstr "" -#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563 -msgid "Note, the invitation code is valid up to" -msgstr "" +#: ../../Zotlabs/Lib/ThreadItem.php:341 +#, php-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Invite.php:129 +#: ../../Zotlabs/Lib/ThreadItem.php:342 #, php-format -msgid "Too many recipients for one invitation (max %d)" +msgid "%d unseen" msgstr "" -#: ../../Zotlabs/Module/Invite.php:133 -msgid "No recipients for this invitation" +#: ../../Zotlabs/Lib/ThreadItem.php:391 +msgid "Forum" msgstr "" -#: ../../Zotlabs/Module/Invite.php:152 -#, php-format -msgid "(%s) : Not a real email address" +#: ../../Zotlabs/Lib/ThreadItem.php:398 +msgid "to" msgstr "" -#: ../../Zotlabs/Module/Invite.php:159 -#, php-format -msgid "(%s) : Not allowed email address" +#: ../../Zotlabs/Lib/ThreadItem.php:399 ../../Zotlabs/Widget/Messages.php:175 +#: ../../Zotlabs/Widget/Messages.php:178 ../../Zotlabs/Widget/Pinned.php:122 +msgid "via" msgstr "" -#: ../../Zotlabs/Module/Invite.php:172 -#, php-format -msgid "(%s) : email address already in use" +#: ../../Zotlabs/Lib/ThreadItem.php:400 +msgid "Wall-to-Wall" msgstr "" -#: ../../Zotlabs/Module/Invite.php:179 -#, php-format -msgid "(%s) : Accepted email address" +#: ../../Zotlabs/Lib/ThreadItem.php:401 +msgid "via Wall-To-Wall:" msgstr "" -#: ../../Zotlabs/Module/Invite.php:266 -#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:40 +#: ../../Zotlabs/Lib/ThreadItem.php:417 #, php-format -msgid "%s : Message delivery failed." +msgid "Last edited %s" msgstr "" -#: ../../Zotlabs/Module/Invite.php:271 +#: ../../Zotlabs/Lib/ThreadItem.php:418 #, php-format -msgid "To %s : Message delivery success." +msgid "Expires %s" msgstr "" -#: ../../Zotlabs/Module/Invite.php:303 +#: ../../Zotlabs/Lib/ThreadItem.php:421 #, php-format -msgid "%1$d mail(s) sent, %2$d mail error(s)" +msgid "Published %s" msgstr "" -#: ../../Zotlabs/Module/Invite.php:328 -msgid "Invites not proposed by configuration" +#: ../../Zotlabs/Lib/ThreadItem.php:428 +msgid "Attend" msgstr "" -#: ../../Zotlabs/Module/Invite.php:329 -msgid "Contact the site admin" +#: ../../Zotlabs/Lib/ThreadItem.php:429 ../../Zotlabs/Widget/Pinned.php:136 +msgid "Attendance Options" msgstr "" -#: ../../Zotlabs/Module/Invite.php:345 -msgid "Invites by users not enabled" +#: ../../Zotlabs/Lib/ThreadItem.php:431 ../../Zotlabs/Widget/Pinned.php:137 +msgid "Voting Options" msgstr "" -#: ../../Zotlabs/Module/Invite.php:350 -msgid "You have no more invitations available" +#: ../../Zotlabs/Lib/ThreadItem.php:446 +msgid "Go to previous comment" msgstr "" -#: ../../Zotlabs/Module/Invite.php:366 -msgid "Not on xchan" +#: ../../Zotlabs/Lib/ThreadItem.php:455 ../../Zotlabs/Widget/Pinned.php:149 +msgid "Pinned post" msgstr "" -#: ../../Zotlabs/Module/Invite.php:399 -msgid "All users invitation limit exceeded." +#: ../../Zotlabs/Lib/ThreadItem.php:459 +msgid "Add to Calendar" msgstr "" -#: ../../Zotlabs/Module/Invite.php:411 ../../Zotlabs/Module/Admin/Site.php:343 -msgid "Minute(s)" +#: ../../Zotlabs/Lib/ThreadItem.php:467 +msgid "Mark all comments seen" msgstr "" -#: ../../Zotlabs/Module/Invite.php:412 ../../Zotlabs/Module/Admin/Site.php:344 -msgid "Hour(s)" +#: ../../Zotlabs/Lib/ThreadItem.php:485 +msgid "Add yours" msgstr "" -#: ../../Zotlabs/Module/Invite.php:413 ../../Zotlabs/Module/Admin/Site.php:345 -msgid "Day(s)" +#: ../../Zotlabs/Lib/ThreadItem.php:485 +msgid "Remove yours" msgstr "" -#: ../../Zotlabs/Module/Invite.php:417 -msgid "Invitation expires after" +#: ../../Zotlabs/Lib/ThreadItem.php:796 ../../Zotlabs/Module/Photos.php:1092 +#: ../../Zotlabs/Module/Photos.php:1205 +msgid "This is you" msgstr "" -#: ../../Zotlabs/Module/Invite.php:422 ../../Zotlabs/Module/Admin/Site.php:362 -#: ../../Zotlabs/Module/Admin/Site.php:384 -msgid "duration up from now" +#: ../../Zotlabs/Lib/ThreadItem.php:805 +msgid "Image" msgstr "" -#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557 -msgid "Invitation" +#: ../../Zotlabs/Lib/ThreadItem.php:807 +msgid "Insert Link" msgstr "" -#: ../../Zotlabs/Module/Invite.php:548 -msgid "Send invitations" +#: ../../Zotlabs/Lib/ThreadItem.php:808 +msgid "Video" msgstr "" -#: ../../Zotlabs/Module/Invite.php:549 -msgid "Invitations I am using" +#: ../../Zotlabs/Lib/ThreadItem.php:817 +msgid "Your full name (required)" msgstr "" -#: ../../Zotlabs/Module/Invite.php:550 -msgid "Invitations we are using" +#: ../../Zotlabs/Lib/ThreadItem.php:818 +msgid "Your email address (required)" msgstr "" -#: ../../Zotlabs/Module/Invite.php:551 -msgid "§ Note, the email(s) sent will be recorded in the system logs" +#: ../../Zotlabs/Lib/ThreadItem.php:819 +msgid "Your website URL (optional)" msgstr "" -#: ../../Zotlabs/Module/Invite.php:552 -msgid "Enter email addresses, one per line:" +#: ../../Zotlabs/Lib/Libzot.php:688 +msgid "Unable to verify channel signature" msgstr "" -#: ../../Zotlabs/Module/Invite.php:553 -msgid "Your message:" +#: ../../Zotlabs/Lib/Activity.php:2257 +#, php-format +msgid "Likes %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Module/Invite.php:554 -msgid "Invite template" +#: ../../Zotlabs/Lib/Activity.php:2260 +#, php-format +msgid "Doesn't like %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Module/Invite.php:556 -msgid "Subject:" +#: ../../Zotlabs/Lib/Activity.php:2266 +#, php-format +msgid "Will attend %s's event" msgstr "" -#: ../../Zotlabs/Module/Invite.php:562 -msgid "Here you may enter personal notes to the recipient(s)" +#: ../../Zotlabs/Lib/Activity.php:2269 +#, php-format +msgid "Will not attend %s's event" msgstr "" -#: ../../Zotlabs/Module/Sources.php:41 -msgid "Failed to create source. No channel selected." +#: ../../Zotlabs/Lib/Activity.php:2272 +#, php-format +msgid "May attend %s's event" msgstr "" -#: ../../Zotlabs/Module/Sources.php:57 -msgid "Source created." +#: ../../Zotlabs/Lib/Activity.php:2275 +#, php-format +msgid "May not attend %s's event" msgstr "" -#: ../../Zotlabs/Module/Sources.php:70 -msgid "Source updated." +#: ../../Zotlabs/Lib/Libsync.php:824 +#, php-format +msgid "Unable to verify site signature for %s" msgstr "" -#: ../../Zotlabs/Module/Sources.php:99 -msgid "*" +#: ../../Zotlabs/Lib/Libzotdir.php:164 +msgid "Directory Options" msgstr "" -#: ../../Zotlabs/Module/Sources.php:106 -msgid "Manage remote sources of content for your channel." +#: ../../Zotlabs/Lib/Libzotdir.php:166 +msgid "Safe Mode" msgstr "" -#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117 -msgid "New Source" +#: ../../Zotlabs/Lib/Libzotdir.php:167 +msgid "Public Forums Only" msgstr "" -#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152 -msgid "" -"Import all or selected content from the following channel into this channel " -"and distribute it according to your channel settings." +#: ../../Zotlabs/Lib/Libzotdir.php:169 +msgid "This Website Only" msgstr "" -#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153 -msgid "Only import content with these words (one per line)" +#: ../../Zotlabs/Lib/Chatroom.php:25 +msgid "Missing room name" msgstr "" -#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153 -msgid "Leave blank to import all public content" +#: ../../Zotlabs/Lib/Chatroom.php:34 +msgid "Duplicate room name" msgstr "" -#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159 -msgid "Channel Name" +#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92 +msgid "Invalid room specifier." msgstr "" -#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156 -msgid "" -"Add the following categories to posts imported from this source (comma " -"separated)" +#: ../../Zotlabs/Lib/Chatroom.php:124 +msgid "Room not found." msgstr "" -#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 -msgid "Resend posts with this channel as author" +#: ../../Zotlabs/Lib/Chatroom.php:145 +msgid "Room is full" msgstr "" -#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 -msgid "Copyrights may apply" +#: ../../Zotlabs/Lib/Techlevels.php:10 +msgid "0. Beginner/Basic" msgstr "" -#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172 -msgid "Source not found." +#: ../../Zotlabs/Lib/Techlevels.php:11 +msgid "1. Novice - not skilled but willing to learn" msgstr "" -#: ../../Zotlabs/Module/Sources.php:149 -msgid "Edit Source" +#: ../../Zotlabs/Lib/Techlevels.php:12 +msgid "2. Intermediate - somewhat comfortable" msgstr "" -#: ../../Zotlabs/Module/Sources.php:150 -msgid "Delete Source" +#: ../../Zotlabs/Lib/Techlevels.php:13 +msgid "3. Advanced - very comfortable" msgstr "" -#: ../../Zotlabs/Module/Sources.php:180 -msgid "Source removed" +#: ../../Zotlabs/Lib/Techlevels.php:14 +msgid "4. Expert - I can write computer code" msgstr "" -#: ../../Zotlabs/Module/Sources.php:182 -msgid "Unable to remove source." +#: ../../Zotlabs/Lib/Techlevels.php:15 +msgid "5. Wizard - I probably know more than you do" msgstr "" -#: ../../Zotlabs/Module/Suggest.php:52 +#: ../../Zotlabs/Lib/AccessList.php:26 msgid "" -"No suggestions available. If this is a new site, please try again in 24 " -"hours." +"A deleted privacy group with this name was revived. Existing item " +"permissions <strong>may</strong> apply to this privacy group and any future " +"members. If this is not what you intended, please create another privacy " +"group with a different name." msgstr "" -#: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:53 -msgid "Ignore/Hide" +#: ../../Zotlabs/Lib/AccessList.php:268 +msgid "Select a privacy group" msgstr "" -#: ../../Zotlabs/Module/Impel.php:188 -#, php-format -msgid "%s element installed" +#: ../../Zotlabs/Access/PermissionRoles.php:339 +msgid "Social Networking" msgstr "" -#: ../../Zotlabs/Module/Impel.php:191 -#, php-format -msgid "%s element installation failed" +#: ../../Zotlabs/Access/PermissionRoles.php:340 +msgid "Social - Federation" msgstr "" -#: ../../Zotlabs/Module/Group.php:48 -msgid "Privacy group created." +#: ../../Zotlabs/Access/PermissionRoles.php:341 +msgid "Social - Mostly Public" msgstr "" -#: ../../Zotlabs/Module/Group.php:51 -msgid "Could not create privacy group." +#: ../../Zotlabs/Access/PermissionRoles.php:342 +msgid "Social - Restricted" msgstr "" -#: ../../Zotlabs/Module/Group.php:83 -msgid "Privacy group updated." +#: ../../Zotlabs/Access/PermissionRoles.php:343 +msgid "Social - Private" msgstr "" -#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302 -msgid "Post to this group by default" +#: ../../Zotlabs/Access/PermissionRoles.php:346 +msgid "Community Forum" msgstr "" -#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303 -msgid "Add new contacts to this group by default" +#: ../../Zotlabs/Access/PermissionRoles.php:347 +msgid "Forum - Mostly Public" msgstr "" -#: ../../Zotlabs/Module/Group.php:147 -msgid "Privacy group name" +#: ../../Zotlabs/Access/PermissionRoles.php:348 +msgid "Forum - Restricted" msgstr "" -#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250 -msgid "Members are visible to other channels" +#: ../../Zotlabs/Access/PermissionRoles.php:349 +msgid "Forum - Private" msgstr "" -#: ../../Zotlabs/Module/Group.php:176 -msgid "Privacy group removed." +#: ../../Zotlabs/Access/PermissionRoles.php:352 +msgid "Feed Republish" msgstr "" -#: ../../Zotlabs/Module/Group.php:179 -msgid "Unable to remove privacy group." +#: ../../Zotlabs/Access/PermissionRoles.php:353 +msgid "Feed - Mostly Public" msgstr "" -#: ../../Zotlabs/Module/Group.php:245 -#, php-format -msgid "Privacy Group: %s" +#: ../../Zotlabs/Access/PermissionRoles.php:354 +msgid "Feed - Restricted" msgstr "" -#: ../../Zotlabs/Module/Group.php:247 -msgid "Privacy group name: " +#: ../../Zotlabs/Access/PermissionRoles.php:357 +msgid "Special Purpose" msgstr "" -#: ../../Zotlabs/Module/Group.php:263 -msgid "Group members" +#: ../../Zotlabs/Access/PermissionRoles.php:358 +msgid "Special - Celebrity/Soapbox" msgstr "" -#: ../../Zotlabs/Module/Group.php:265 -msgid "Not in this group" +#: ../../Zotlabs/Access/PermissionRoles.php:359 +msgid "Special - Group Repository" msgstr "" -#: ../../Zotlabs/Module/Group.php:297 -msgid "Click a channel to toggle membership" +#: ../../Zotlabs/Access/PermissionRoles.php:363 +msgid "Custom/Expert Mode" msgstr "" -#: ../../Zotlabs/Module/Layouts.php:184 -msgid "Comanche page description language help" +#: ../../Zotlabs/Access/PermissionRoles.php:387 +msgid "Personal" msgstr "" -#: ../../Zotlabs/Module/Layouts.php:188 -msgid "Layout Description" +#: ../../Zotlabs/Access/PermissionRoles.php:388 +msgid "Community forum" msgstr "" -#: ../../Zotlabs/Module/Layouts.php:193 -msgid "Download PDL file" +#: ../../Zotlabs/Access/PermissionRoles.php:389 +msgid "Custom" msgstr "" -#: ../../Zotlabs/Module/Layouts.php:196 ../../Zotlabs/Module/Pubsites.php:63 -#: ../../Zotlabs/Module/Blocks.php:164 ../../Zotlabs/Module/Webpages.php:256 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:216 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:406 -msgid "View" +#: ../../Zotlabs/Access/Permissions.php:56 +msgid "Can view my channel stream and posts" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:54 -msgid "Name and Secret are required" +#: ../../Zotlabs/Access/Permissions.php:57 +msgid "Can send me their channel stream and posts" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:113 -msgid "Add OAuth2 application" +#: ../../Zotlabs/Access/Permissions.php:58 +msgid "Can view my default channel profile" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147 -msgid "Grant Types" +#: ../../Zotlabs/Access/Permissions.php:59 +msgid "Can view my connections" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120 -msgid "leave blank unless your application sepcifically requires this" +#: ../../Zotlabs/Access/Permissions.php:60 +msgid "Can view my file storage and photos" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148 -msgid "Authorization scope" +#: ../../Zotlabs/Access/Permissions.php:61 +msgid "Can upload/modify my file storage and photos" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:132 -msgid "OAuth2 Application not found." +#: ../../Zotlabs/Access/Permissions.php:62 +msgid "Can view my channel webpages" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148 -msgid "leave blank unless your application specifically requires this" +#: ../../Zotlabs/Access/Permissions.php:63 +msgid "Can view my wiki pages" msgstr "" -#: ../../Zotlabs/Module/Oauth2.php:190 -msgid "Connected OAuth2 Apps" +#: ../../Zotlabs/Access/Permissions.php:64 +msgid "Can create/edit my channel webpages" msgstr "" -#: ../../Zotlabs/Module/Viewsrc.php:43 -msgid "item" +#: ../../Zotlabs/Access/Permissions.php:65 +msgid "Can write to my wiki pages" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:86 -#: ../../Zotlabs/Module/Profile_photo.php:129 -msgid "Image uploaded but image cropping failed." +#: ../../Zotlabs/Access/Permissions.php:66 +msgid "Can post on my channel (wall) page" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:195 -#: ../../Zotlabs/Module/Cover_photo.php:252 -msgid "Cover Photos" +#: ../../Zotlabs/Access/Permissions.php:67 +msgid "Can comment on or like my posts" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:211 -#: ../../Zotlabs/Module/Profile_photo.php:185 -msgid "Image resize failed." +#: ../../Zotlabs/Access/Permissions.php:68 +msgid "Can send me direct messages" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:263 -#: ../../Zotlabs/Module/Profile_photo.php:350 -msgid "Image upload failed." +#: ../../Zotlabs/Access/Permissions.php:69 +msgid "Can like/dislike profiles and profile things" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:280 -#: ../../Zotlabs/Module/Profile_photo.php:370 -msgid "Unable to process image." +#: ../../Zotlabs/Access/Permissions.php:70 +msgid "Can chat with me" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:325 -#: ../../Zotlabs/Module/Cover_photo.php:340 -#: ../../Zotlabs/Module/Profile_photo.php:432 -#: ../../Zotlabs/Module/Profile_photo.php:497 -msgid "Photo not available." +#: ../../Zotlabs/Access/Permissions.php:71 +msgid "Can source/mirror my public posts in derived channels" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:376 -msgid "Your cover photo may be visible to anybody on the internet" +#: ../../Zotlabs/Access/Permissions.php:73 +msgid "Can administer my channel" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:378 -msgid "Upload File:" +#: ../../Zotlabs/Widget/Tasklist.php:31 +msgid "Tasks" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:379 -msgid "Select a profile:" +#: ../../Zotlabs/Widget/Cover_photo.php:74 +msgid "Click to show more" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:380 -msgid "Change Cover Photo" +#: ../../Zotlabs/Widget/Appstore.php:16 +msgid "App Collections" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:384 -#: ../../Zotlabs/Module/Cover_photo.php:385 -#: ../../Zotlabs/Module/Profile_photo.php:551 -#: ../../Zotlabs/Module/Profile_photo.php:552 -msgid "Use a photo from your albums" +#: ../../Zotlabs/Widget/Appstore.php:18 +msgid "Installed apps" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:390 -#: ../../Zotlabs/Module/Profile_photo.php:557 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:402 -msgid "Choose a different album" +#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:51 +msgid "Available Apps" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:396 -msgid "Select existing photo" +#: ../../Zotlabs/Widget/Rating.php:59 +msgid "Rating Tools" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:413 -#: ../../Zotlabs/Module/Profile_photo.php:581 -msgid "Crop Image" +#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65 +msgid "Rate Me" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:414 -#: ../../Zotlabs/Module/Profile_photo.php:582 -msgid "Please adjust the image cropping for optimum viewing." +#: ../../Zotlabs/Widget/Rating.php:68 +msgid "View Ratings" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:416 -msgid "Done Editing" +#: ../../Zotlabs/Widget/Notifications.php:24 +msgid "New network activity notifications" msgstr "" -#: ../../Zotlabs/Module/Chat.php:29 ../../Zotlabs/Module/Ochannel.php:32 -msgid "You must be logged in to see this page." +#: ../../Zotlabs/Widget/Notifications.php:27 +msgid "Network stream" msgstr "" -#: ../../Zotlabs/Module/Chat.php:193 -msgid "Room not found" +#: ../../Zotlabs/Widget/Notifications.php:30 +#: ../../Zotlabs/Widget/Notifications.php:69 +msgid "Mark all notifications read" msgstr "" -#: ../../Zotlabs/Module/Chat.php:209 -msgid "Leave Room" +#: ../../Zotlabs/Widget/Notifications.php:33 +#: ../../Zotlabs/Widget/Notifications.php:53 +#: ../../Zotlabs/Widget/Notifications.php:72 +#: ../../Zotlabs/Widget/Notifications.php:166 +msgid "Show new posts only" msgstr "" -#: ../../Zotlabs/Module/Chat.php:210 -msgid "Delete Room" +#: ../../Zotlabs/Widget/Notifications.php:34 +#: ../../Zotlabs/Widget/Notifications.php:54 +#: ../../Zotlabs/Widget/Notifications.php:73 +#: ../../Zotlabs/Widget/Notifications.php:134 +#: ../../Zotlabs/Widget/Notifications.php:167 +#: ../../Zotlabs/Widget/Messages.php:53 +msgid "Filter by name or address" msgstr "" -#: ../../Zotlabs/Module/Chat.php:211 -msgid "I am away right now" +#: ../../Zotlabs/Widget/Notifications.php:44 +msgid "New home activity notifications" msgstr "" -#: ../../Zotlabs/Module/Chat.php:212 -msgid "I am online" +#: ../../Zotlabs/Widget/Notifications.php:47 +msgid "Home stream" msgstr "" -#: ../../Zotlabs/Module/Chat.php:214 -msgid "Bookmark this room" +#: ../../Zotlabs/Widget/Notifications.php:50 +msgid "Mark all notifications seen" msgstr "" -#: ../../Zotlabs/Module/Chat.php:237 -msgid "New Chatroom" +#: ../../Zotlabs/Widget/Notifications.php:62 +#: ../../Zotlabs/Widget/Activity_filter.php:44 +msgid "Direct Messages" msgstr "" -#: ../../Zotlabs/Module/Chat.php:238 -msgid "Chatroom name" +#: ../../Zotlabs/Widget/Notifications.php:63 +msgid "New direct messages notifications" msgstr "" -#: ../../Zotlabs/Module/Chat.php:239 -msgid "Expiration of chats (minutes)" +#: ../../Zotlabs/Widget/Notifications.php:66 +msgid "Direct messages stream" msgstr "" -#: ../../Zotlabs/Module/Chat.php:255 -#, php-format -msgid "%1$s's Chatrooms" +#: ../../Zotlabs/Widget/Notifications.php:81 +#: ../../Zotlabs/Widget/Activity_filter.php:53 +msgid "Events" msgstr "" -#: ../../Zotlabs/Module/Chat.php:260 -msgid "No chatrooms available" +#: ../../Zotlabs/Widget/Notifications.php:82 +msgid "New events notifications" msgstr "" -#: ../../Zotlabs/Module/Chat.php:261 -msgid "Add Room" +#: ../../Zotlabs/Widget/Notifications.php:85 +msgid "View events" msgstr "" -#: ../../Zotlabs/Module/Chat.php:264 -msgid "Expiration" +#: ../../Zotlabs/Widget/Notifications.php:88 +msgid "Mark all events seen" msgstr "" -#: ../../Zotlabs/Module/Chat.php:265 -msgid "min" +#: ../../Zotlabs/Widget/Notifications.php:96 +#: ../../Zotlabs/Module/Connections.php:168 +msgid "New Connections" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:37 -msgid "Invalid message" +#: ../../Zotlabs/Widget/Notifications.php:97 +msgid "New connections notifications" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:67 -msgid "no results" +#: ../../Zotlabs/Widget/Notifications.php:100 +msgid "View all connections" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:81 -msgid "channel sync processed" +#: ../../Zotlabs/Widget/Notifications.php:109 +msgid "New files notifications" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:85 -msgid "queued" +#: ../../Zotlabs/Widget/Notifications.php:116 +#: ../../Zotlabs/Widget/Notifications.php:117 +#: ../../Zotlabs/Widget/Messages.php:49 +msgid "Notices" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:89 -msgid "posted" +#: ../../Zotlabs/Widget/Notifications.php:120 +msgid "View all notices" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:93 -msgid "accepted for delivery" +#: ../../Zotlabs/Widget/Notifications.php:123 +msgid "Mark all notices seen" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:97 -msgid "updated" +#: ../../Zotlabs/Widget/Notifications.php:144 +msgid "Registrations" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:101 -msgid "update ignored" +#: ../../Zotlabs/Widget/Notifications.php:145 +msgid "New registrations notifications" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:104 -msgid "permission denied" +#: ../../Zotlabs/Widget/Notifications.php:155 +msgid "New public stream notifications" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:108 -msgid "recipient not found" +#: ../../Zotlabs/Widget/Notifications.php:158 +msgid "Public stream" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:128 -#, php-format -msgid "Delivery report for %1$s" +#: ../../Zotlabs/Widget/Notifications.php:174 +msgid "Sorry, you have got no notifications at the moment" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:132 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:906 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:71 -msgid "Options" +#: ../../Zotlabs/Widget/Bookmarkedchats.php:25 +msgid "Bookmarked Chatrooms" msgstr "" -#: ../../Zotlabs/Module/Dreport.php:133 -msgid "Redeliver" +#: ../../Zotlabs/Widget/Chatroom_list.php:26 +msgid "Overview" msgstr "" -#: ../../Zotlabs/Module/Rbmark.php:72 -msgid "Select a bookmark folder" +#: ../../Zotlabs/Widget/Tokens.php:41 +msgid "Add new guest" msgstr "" -#: ../../Zotlabs/Module/Rbmark.php:80 -msgid "Save Bookmark" +#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:236 +msgid "Guest access" msgstr "" -#: ../../Zotlabs/Module/Rbmark.php:81 -msgid "URL of bookmark" +#: ../../Zotlabs/Widget/Newmember.php:38 +msgid "Profile Creation" msgstr "" -#: ../../Zotlabs/Module/Rbmark.php:82 ../../Zotlabs/Module/Appman.php:220 -#: ../../Zotlabs/Module/Cdav.php:1005 -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:260 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:657 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:173 -msgid "Description" +#: ../../Zotlabs/Widget/Newmember.php:40 +msgid "Upload profile photo" msgstr "" -#: ../../Zotlabs/Module/Rbmark.php:86 -msgid "Or enter new bookmark folder name" +#: ../../Zotlabs/Widget/Newmember.php:41 +msgid "Upload cover photo" msgstr "" -#: ../../Zotlabs/Module/Achievements.php:38 -msgid "Some blurb about what to do when you're new here" +#: ../../Zotlabs/Widget/Newmember.php:45 +msgid "Find and Connect with others" msgstr "" -#: ../../Zotlabs/Module/Sse_bs.php:631 -msgid "Private forum" +#: ../../Zotlabs/Widget/Newmember.php:47 +msgid "View the directory" msgstr "" -#: ../../Zotlabs/Module/Sse_bs.php:631 -msgid "Public forum" +#: ../../Zotlabs/Widget/Newmember.php:48 ../../Zotlabs/Module/Go.php:39 +msgid "View friend suggestions" msgstr "" -#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56 -msgid "App installed." +#: ../../Zotlabs/Widget/Newmember.php:49 +msgid "Manage your connections" msgstr "" -#: ../../Zotlabs/Module/Appman.php:49 -msgid "Malformed app." +#: ../../Zotlabs/Widget/Newmember.php:52 +msgid "Communicate" msgstr "" -#: ../../Zotlabs/Module/Appman.php:208 -msgid "Embed code" +#: ../../Zotlabs/Widget/Newmember.php:54 +msgid "View your channel homepage" msgstr "" -#: ../../Zotlabs/Module/Appman.php:213 -msgid "Edit App" +#: ../../Zotlabs/Widget/Newmember.php:55 +msgid "View your network stream" msgstr "" -#: ../../Zotlabs/Module/Appman.php:213 -msgid "Create App" +#: ../../Zotlabs/Widget/Newmember.php:61 +msgid "Documentation" msgstr "" -#: ../../Zotlabs/Module/Appman.php:218 -msgid "Name of app" +#: ../../Zotlabs/Widget/Newmember.php:64 +msgid "Missing Features?" msgstr "" -#: ../../Zotlabs/Module/Appman.php:219 -msgid "Location (URL) of app" +#: ../../Zotlabs/Widget/Newmember.php:66 +msgid "Pin apps to navigation bar" msgstr "" -#: ../../Zotlabs/Module/Appman.php:221 -msgid "Photo icon URL" +#: ../../Zotlabs/Widget/Newmember.php:67 +msgid "Install more apps" msgstr "" -#: ../../Zotlabs/Module/Appman.php:221 -msgid "80 x 80 pixels - optional" +#: ../../Zotlabs/Widget/Newmember.php:78 +msgid "View public stream" msgstr "" -#: ../../Zotlabs/Module/Appman.php:222 -msgid "Categories (optional, comma separated list)" +#: ../../Zotlabs/Widget/Newmember.php:82 +#: ../../Zotlabs/Module/Settings/Display.php:202 +msgid "New Member Links" msgstr "" -#: ../../Zotlabs/Module/Appman.php:223 -msgid "Version ID" +#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71 +msgid "Ignore/Hide" msgstr "" -#: ../../Zotlabs/Module/Appman.php:224 -msgid "Price of app" +#: ../../Zotlabs/Widget/Suggestions.php:58 +msgid "Suggestions" msgstr "" -#: ../../Zotlabs/Module/Appman.php:225 -msgid "Location (URL) to purchase app" +#: ../../Zotlabs/Widget/Suggestions.php:59 +msgid "See more..." msgstr "" -#: ../../Zotlabs/Module/Directory.php:124 -msgid "No default suggestions were found." +#: ../../Zotlabs/Widget/Messages.php:45 +msgid "Public and restricted messages" msgstr "" -#: ../../Zotlabs/Module/Directory.php:292 -msgid "Gender: " +#: ../../Zotlabs/Widget/Messages.php:46 +msgid "Direct messages" msgstr "" -#: ../../Zotlabs/Module/Directory.php:294 -msgid "Status: " +#: ../../Zotlabs/Widget/Messages.php:47 +msgid "Starred messages" msgstr "" -#: ../../Zotlabs/Module/Directory.php:296 -msgid "Homepage: " +#: ../../Zotlabs/Widget/Messages.php:48 +msgid "Filed messages" msgstr "" -#: ../../Zotlabs/Module/Directory.php:357 -msgid "Description:" +#: ../../Zotlabs/Widget/Messages.php:51 +msgid "No messages" msgstr "" -#: ../../Zotlabs/Module/Directory.php:359 -msgid "Unsafe" +#: ../../Zotlabs/Widget/Messages.php:52 +msgid "Unseen" msgstr "" -#: ../../Zotlabs/Module/Directory.php:362 -msgid "Spam" +#: ../../Zotlabs/Widget/Messages.php:54 +msgid "Filter by file name" msgstr "" -#: ../../Zotlabs/Module/Directory.php:372 -msgid "Public Forum:" +#: ../../Zotlabs/Widget/Hq_controls.php:23 +msgid "Toggle post editor" msgstr "" -#: ../../Zotlabs/Module/Directory.php:375 -msgid "Keywords: " +#: ../../Zotlabs/Widget/Hq_controls.php:33 +msgid "Toggle personal notes" msgstr "" -#: ../../Zotlabs/Module/Directory.php:378 -msgid "Don't suggest" +#: ../../Zotlabs/Widget/Hq_controls.php:43 +msgid "Channel activities" msgstr "" -#: ../../Zotlabs/Module/Directory.php:380 -msgid "Common connections (estimated):" +#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91 +#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:782 +#: ../../Zotlabs/Module/Photos.php:1324 +msgid "View Photo" msgstr "" -#: ../../Zotlabs/Module/Directory.php:430 -msgid "Global Directory" +#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112 +#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:813 +msgid "Edit Album" msgstr "" -#: ../../Zotlabs/Module/Directory.php:430 -msgid "Local Directory" +#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Portfolio.php:114 +#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188 +#: ../../Zotlabs/Storage/Browser.php:546 +#: ../../Zotlabs/Module/Cover_photo.php:381 +#: ../../Zotlabs/Module/Embedphotos.php:189 +#: ../../Zotlabs/Module/Profile_photo.php:547 +#: ../../Zotlabs/Module/Photos.php:681 +msgid "Upload" msgstr "" -#: ../../Zotlabs/Module/Directory.php:436 -msgid "Finding:" +#: ../../Zotlabs/Widget/Pinned.php:95 +msgid "Share This" msgstr "" -#: ../../Zotlabs/Module/Directory.php:441 -msgid "next page" +#: ../../Zotlabs/Widget/Pinned.php:117 ../../Zotlabs/Widget/Pinned.php:118 +#, php-format +msgid "View %s's profile - %s" msgstr "" -#: ../../Zotlabs/Module/Directory.php:441 -msgid "previous page" +#: ../../Zotlabs/Widget/Pinned.php:151 +msgid "Don't show" msgstr "" -#: ../../Zotlabs/Module/Directory.php:442 -msgid "Sort options" +#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:377 +#, php-format +msgid "You have %1$.0f of %2$.0f allowed connections." msgstr "" -#: ../../Zotlabs/Module/Directory.php:443 -msgid "Alphabetic" +#: ../../Zotlabs/Widget/Follow.php:34 +msgid "Add New Connection" msgstr "" -#: ../../Zotlabs/Module/Directory.php:444 -msgid "Reverse Alphabetic" +#: ../../Zotlabs/Widget/Follow.php:35 +msgid "Enter channel address" msgstr "" -#: ../../Zotlabs/Module/Directory.php:445 -msgid "Newest to Oldest" +#: ../../Zotlabs/Widget/Follow.php:36 +msgid "Examples: bob@example.com, https://example.com/barbara" msgstr "" -#: ../../Zotlabs/Module/Directory.php:446 -msgid "Oldest to Newest" +#: ../../Zotlabs/Widget/Notes.php:42 +msgid "Read mode" msgstr "" -#: ../../Zotlabs/Module/Directory.php:464 -msgid "No entries (some entries may be hidden)." +#: ../../Zotlabs/Widget/Notes.php:43 +msgid "Edit mode" msgstr "" -#: ../../Zotlabs/Module/Service_limits.php:23 -msgid "No service class restrictions found." +#: ../../Zotlabs/Widget/Notes.php:44 +msgid "Editing" msgstr "" -#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98 -msgid "Tag removed" +#: ../../Zotlabs/Widget/Notes.php:45 +msgid "Saving" msgstr "" -#: ../../Zotlabs/Module/Tagrm.php:123 -msgid "Remove Item Tag" +#: ../../Zotlabs/Widget/Notes.php:46 +msgid "Saved" msgstr "" -#: ../../Zotlabs/Module/Tagrm.php:125 -msgid "Select a tag to remove: " +#: ../../Zotlabs/Widget/Activity_order.php:96 +msgid "Commented Date" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:80 ../../Zotlabs/Module/Defperms.php:67 -#: ../../Zotlabs/Module/Contactedit.php:78 -msgid "Could not access contact record." +#: ../../Zotlabs/Widget/Activity_order.php:100 +msgid "Order by last commented date" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:101 -#: ../../Zotlabs/Module/Contactedit.php:107 -msgid "Could not locate selected profile." +#: ../../Zotlabs/Widget/Activity_order.php:103 +msgid "Posted Date" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:171 -msgid "Connection updated." +#: ../../Zotlabs/Widget/Activity_order.php:107 +msgid "Order by last posted date" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:173 -msgid "Failed to update connection record." +#: ../../Zotlabs/Widget/Activity_order.php:110 +msgid "Date Unthreaded" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:215 -#: ../../Zotlabs/Module/Contactedit.php:180 -msgid "is now connected to" +#: ../../Zotlabs/Widget/Activity_order.php:114 +msgid "Order unthreaded by date" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:320 -msgid "Could not access address book record." +#: ../../Zotlabs/Widget/Activity_order.php:129 +msgid "Stream Order" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:368 -msgid "Refresh failed - channel is currently unavailable." +#: ../../Zotlabs/Widget/Activity_filter.php:48 +msgid "Show direct (private) messages" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391 -#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409 -#: ../../Zotlabs/Module/Connedit.php:422 -msgid "Unable to set address book parameters." +#: ../../Zotlabs/Widget/Activity_filter.php:57 +msgid "Show posts that include events" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:441 -msgid "Connection has been removed." +#: ../../Zotlabs/Widget/Activity_filter.php:63 +msgid "Polls" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:483 -#, php-format -msgid "View %s's profile" +#: ../../Zotlabs/Widget/Activity_filter.php:67 +msgid "Show posts that include polls" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:487 -msgid "Refresh Permissions" +#: ../../Zotlabs/Widget/Activity_filter.php:90 +#, php-format +msgid "Show posts related to the %s privacy group" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:490 -msgid "Fetch updated permissions" +#: ../../Zotlabs/Widget/Activity_filter.php:99 +msgid "Show my privacy groups" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:494 -msgid "Refresh Photo" +#: ../../Zotlabs/Widget/Activity_filter.php:123 +msgid "Show posts to this forum" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:497 -msgid "Fetch updated photo" +#: ../../Zotlabs/Widget/Activity_filter.php:134 +msgid "Show forums" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:504 -msgid "View recent posts and comments" +#: ../../Zotlabs/Widget/Activity_filter.php:148 +msgid "Starred Posts" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:508 -#: ../../Zotlabs/Module/Admin/Accounts.php:322 -#: ../../Zotlabs/Module/Contactedit.php:623 -msgid "Unblock" +#: ../../Zotlabs/Widget/Activity_filter.php:152 +msgid "Show posts that I have starred" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:508 -#: ../../Zotlabs/Module/Admin/Accounts.php:321 -#: ../../Zotlabs/Module/Contactedit.php:623 -msgid "Block" +#: ../../Zotlabs/Widget/Activity_filter.php:163 +msgid "Personal Posts" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:511 -#: ../../Zotlabs/Module/Contactedit.php:625 -msgid "Block (or Unblock) all communications with this connection" +#: ../../Zotlabs/Widget/Activity_filter.php:167 +msgid "Show posts that mention or involve me" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:512 -#: ../../Zotlabs/Module/Contactedit.php:626 -msgid "This connection is blocked!" +#: ../../Zotlabs/Widget/Activity_filter.php:190 +#, php-format +msgid "Show posts that I have filed to %s" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:516 -#: ../../Zotlabs/Module/Contactedit.php:630 -msgid "Unignore" +#: ../../Zotlabs/Widget/Activity_filter.php:200 +msgid "Show filed post categories" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:516 -#: ../../Zotlabs/Module/Connections.php:360 -#: ../../Zotlabs/Module/Contactedit.php:630 -msgid "Ignore" +#: ../../Zotlabs/Widget/Activity_filter.php:214 +msgid "Panel search" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:519 -#: ../../Zotlabs/Module/Contactedit.php:632 -msgid "Ignore (or Unignore) all inbound communications from this connection" +#: ../../Zotlabs/Widget/Activity_filter.php:224 +msgid "Filter by name" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:520 -#: ../../Zotlabs/Module/Contactedit.php:633 -msgid "This connection is ignored!" +#: ../../Zotlabs/Widget/Activity_filter.php:239 +msgid "Remove active filter" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:524 -#: ../../Zotlabs/Module/Contactedit.php:637 -msgid "Unarchive" +#: ../../Zotlabs/Widget/Activity_filter.php:255 +msgid "Stream Filters" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:524 -#: ../../Zotlabs/Module/Contactedit.php:637 -msgid "Archive" +#: ../../Zotlabs/Widget/Channel_activities.php:29 +#: ../../Zotlabs/Module/Go.php:28 +msgid "Welcome" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:527 -#: ../../Zotlabs/Module/Contactedit.php:639 -msgid "" -"Archive (or Unarchive) this connection - mark channel dead but keep content" +#: ../../Zotlabs/Widget/Channel_activities.php:46 +msgid "No recent activities" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:528 -#: ../../Zotlabs/Module/Contactedit.php:640 -msgid "This connection is archived!" -msgstr "" +#: ../../Zotlabs/Widget/Channel_activities.php:214 +msgctxt "noun" +msgid "new connection" +msgid_plural "new connections" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Connedit.php:532 -#: ../../Zotlabs/Module/Contactedit.php:644 -msgid "Unhide" -msgstr "" +#: ../../Zotlabs/Widget/Channel_activities.php:220 +msgctxt "noun" +msgid "notice" +msgid_plural "notices" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Connedit.php:532 -#: ../../Zotlabs/Module/Contactedit.php:644 -msgid "Hide" +#: ../../Zotlabs/Widget/Affinity.php:36 +#: ../../Zotlabs/Module/Contactedit.php:281 +#: ../../Zotlabs/Module/Connedit.php:579 +msgid "Me" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:535 -#: ../../Zotlabs/Module/Contactedit.php:646 -msgid "Hide or Unhide this connection from your other connections" +#: ../../Zotlabs/Widget/Affinity.php:37 +#: ../../Zotlabs/Module/Contactedit.php:282 +#: ../../Zotlabs/Module/Connedit.php:580 +msgid "Family" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:536 -#: ../../Zotlabs/Module/Contactedit.php:647 -msgid "This connection is hidden!" +#: ../../Zotlabs/Widget/Affinity.php:39 +#: ../../Zotlabs/Module/Contactedit.php:284 +#: ../../Zotlabs/Module/Connedit.php:582 +msgid "Acquaintances" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:543 -#: ../../Zotlabs/Module/Contactedit.php:653 -msgid "Delete this connection" +#: ../../Zotlabs/Widget/Affinity.php:40 +#: ../../Zotlabs/Module/Contactedit.php:285 +#: ../../Zotlabs/Module/Connedit.php:583 +#: ../../Zotlabs/Module/Connections.php:97 +#: ../../Zotlabs/Module/Connections.php:111 +msgid "All" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:550 -msgid "Fetch Vcard" +#: ../../Zotlabs/Widget/Affinity.php:60 +#: ../../Zotlabs/Module/Contactedit.php:618 +msgid "Refresh" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:553 -msgid "Fetch electronic calling card for this connection" +#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:402 +msgid "Site" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:572 -#: ../../Zotlabs/Module/Contactedit.php:431 -msgid "Affinity" +#: ../../Zotlabs/Widget/Admin.php:28 +#: ../../Zotlabs/Module/Admin/Accounts.php:208 +#: ../../Zotlabs/Module/Admin/Accounts.php:227 +#: ../../Zotlabs/Module/Admin.php:97 +msgid "Accounts" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:575 -msgid "Open Set Affinity section by default" +#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66 +msgid "Member registrations waiting for confirmation" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:579 -#: ../../Zotlabs/Module/Contactedit.php:281 -#: ../../Zotlabs/Widget/Affinity.php:36 -msgid "Me" +#: ../../Zotlabs/Widget/Admin.php:30 +#: ../../Zotlabs/Module/Admin/Security.php:107 +msgid "Security" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:580 -#: ../../Zotlabs/Module/Contactedit.php:282 -#: ../../Zotlabs/Widget/Affinity.php:37 -msgid "Family" +#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:125 +#: ../../Zotlabs/Module/Admin/Addons.php:192 +msgid "Addons" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:582 -#: ../../Zotlabs/Module/Contactedit.php:284 -#: ../../Zotlabs/Widget/Affinity.php:39 -msgid "Acquaintances" +#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:139 +#: ../../Zotlabs/Module/Admin/Themes.php:173 +msgid "Themes" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:583 -#: ../../Zotlabs/Module/Connections.php:97 -#: ../../Zotlabs/Module/Connections.php:111 -#: ../../Zotlabs/Module/Contactedit.php:285 -#: ../../Zotlabs/Widget/Affinity.php:40 -msgid "All" +#: ../../Zotlabs/Widget/Admin.php:34 +msgid "Inspect queue" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:612 -msgid "Filter" +#: ../../Zotlabs/Widget/Admin.php:35 +msgid "Queueworker" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:615 -msgid "Open Custom Filter section by default" +#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:169 +msgid "Profile Fields" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:622 -#: ../../Zotlabs/Module/Contactedit.php:315 -msgid "Approve this contact" +#: ../../Zotlabs/Widget/Admin.php:37 +msgid "DB updates" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:622 -#: ../../Zotlabs/Module/Contactedit.php:315 -msgid "Accept contact to allow communication" +#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64 +#: ../../Zotlabs/Module/Admin/Logs.php:84 +msgid "Logs" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:626 -msgid "Set Affinity" +#: ../../Zotlabs/Widget/Admin.php:62 +msgid "Addon Features" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:629 -msgid "Set Profile" +#: ../../Zotlabs/Widget/Permcats.php:43 +msgid "Add new role" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:632 -msgid "Set Affinity & Profile" +#: ../../Zotlabs/Widget/Permcats.php:92 +#: ../../Zotlabs/Module/Contactedit.php:395 +msgid "Contact roles" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:658 -#: ../../Zotlabs/Module/Contactedit.php:348 -msgid "Please select a role for this contact!" +#: ../../Zotlabs/Widget/Permcats.php:93 +msgid "Role members" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:678 -#: ../../Zotlabs/Module/Contactedit.php:368 -msgid "This contact is unreachable from this location." +#: ../../Zotlabs/Widget/Activity.php:55 +msgctxt "widget" +msgid "Activity" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:679 -#: ../../Zotlabs/Module/Contactedit.php:369 -msgid "This contact may be unreachable from other channel locations." +#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63 +msgid "photo/image" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:681 -#: ../../Zotlabs/Module/Contactedit.php:371 -msgid "Location independence is not supported by their network." +#: ../../Zotlabs/Widget/Savedsearch.php:81 +msgid "Remove term" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:685 -#, php-format -msgid "Contact: %s" +#: ../../Zotlabs/Widget/Chatroom_members.php:17 +msgid "Chat Members" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:686 -#: ../../Zotlabs/Module/Connections.php:404 -msgid "Contact role" +#: ../../Zotlabs/Widget/Suggestedchats.php:36 +msgid "Suggested Chatrooms" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:687 -msgid "Manage contact roles" +#: ../../Zotlabs/Widget/Appcategories.php:49 +msgid "App Categories" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:694 -msgid "This contacts's primary address is" +#: ../../Zotlabs/Widget/Settings_menu.php:37 +msgid "Account settings" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:695 -msgid "Available locations:" +#: ../../Zotlabs/Widget/Settings_menu.php:43 +msgid "Channel settings" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259 -msgid "" -"The permissions indicated on this page will be applied to all new " -"connections." +#: ../../Zotlabs/Widget/Settings_menu.php:49 +msgid "Privacy settings" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:701 -#: ../../Zotlabs/Module/Contactedit.php:238 -#: ../../Zotlabs/Module/Contactedit.php:387 -msgid "Contact Tools" +#: ../../Zotlabs/Widget/Settings_menu.php:56 +msgid "Display settings" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:703 -#: ../../Zotlabs/Module/Contactedit.php:406 -msgid "Slide to adjust your degree of friendship" +#: ../../Zotlabs/Widget/Settings_menu.php:63 +msgid "Manage locations" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:705 -#: ../../Zotlabs/Module/Contactedit.php:408 -msgid "Custom Filter" +#: ../../Zotlabs/Widget/Archive.php:49 +msgid "Archives" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:706 -#: ../../Zotlabs/Module/Settings/Channel.php:287 -#: ../../Zotlabs/Module/Contactedit.php:409 -msgid "Only import posts with this text" +#: ../../Zotlabs/Widget/Cdav.php:41 +msgid "Select Channel" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707 -#: ../../Zotlabs/Module/Admin/Site.php:501 -#: ../../Zotlabs/Module/Admin/Site.php:502 -#: ../../Zotlabs/Module/Contactedit.php:409 -#: ../../Zotlabs/Module/Contactedit.php:410 -msgid "" -"words one per line or #tags or /patterns/ or lang=xx, leave blank to import " -"all posts" +#: ../../Zotlabs/Widget/Cdav.php:46 +msgid "Read-write" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:707 -#: ../../Zotlabs/Module/Settings/Channel.php:286 -#: ../../Zotlabs/Module/Contactedit.php:410 -msgid "Do not import posts with this text" +#: ../../Zotlabs/Widget/Cdav.php:47 +msgid "Read-only" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:710 -msgid "Contact Pending Approval" +#: ../../Zotlabs/Widget/Cdav.php:133 +msgid "Channel Calendar" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Module/Defperms.php:261 -#: ../../Zotlabs/Module/Permcats.php:253 -msgid "inherited" +#: ../../Zotlabs/Widget/Cdav.php:135 ../../Zotlabs/Widget/Cdav.php:149 +#: ../../Zotlabs/Module/Cdav.php:1046 +msgid "CalDAV Calendars" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:714 -#: ../../Zotlabs/Module/Contactedit.php:415 -msgid "Approve contact" +#: ../../Zotlabs/Widget/Cdav.php:137 +msgid "Shared CalDAV Calendars" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:715 -#, php-format -msgid "" -"Please choose the profile you would like to display to %s when viewing your " -"profile securely." +#: ../../Zotlabs/Widget/Cdav.php:141 +msgid "Share this calendar" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:717 -#: ../../Zotlabs/Module/Contactedit.php:417 -msgid "Their" +#: ../../Zotlabs/Widget/Cdav.php:143 +msgid "Calendar name and color" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:718 -#: ../../Zotlabs/Module/Contactedit.php:418 -msgid "My" +#: ../../Zotlabs/Widget/Cdav.php:145 +msgid "Create new CalDAV calendar" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266 -msgid "Individual Permissions" +#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184 +#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:544 +#: ../../Zotlabs/Module/Webpages.php:248 ../../Zotlabs/Module/Connedit.php:747 +#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Menu.php:182 +#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/New_channel.php:190 +#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383 +msgid "Create" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:721 -msgid "" -"Some permissions may be inherited from your channel's <a " -"href=\"settings\"><strong>privacy settings</strong></a>, which have higher " -"priority than individual settings. You can <strong>not</strong> change those " -"settings here." +#: ../../Zotlabs/Widget/Cdav.php:147 +msgid "Calendar Name" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:722 -msgid "" -"Some permissions may be inherited from your channel's <a " -"href=\"settings\"><strong>privacy settings</strong></a>, which have higher " -"priority than individual settings. You can change those settings here but " -"they wont have any impact unless the inherited setting changes." +#: ../../Zotlabs/Widget/Cdav.php:148 +msgid "Calendar Tools" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:723 -msgid "Last update:" +#: ../../Zotlabs/Widget/Cdav.php:149 ../../Zotlabs/Module/Cdav.php:1046 +msgid "Channel Calendars" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:731 -msgid "Details" +#: ../../Zotlabs/Widget/Cdav.php:150 +msgid "Import calendar" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1369 -msgid "Organisation" +#: ../../Zotlabs/Widget/Cdav.php:151 +msgid "Select a calendar to import to" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:734 ../../Zotlabs/Module/Cdav.php:1370 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2653 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2722 -msgid "Title" +#: ../../Zotlabs/Widget/Cdav.php:178 +msgid "Addressbooks" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1371 -msgid "Phone" +#: ../../Zotlabs/Widget/Cdav.php:180 +msgid "Addressbook name" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1373 -msgid "Instant messenger" +#: ../../Zotlabs/Widget/Cdav.php:182 +msgid "Create new addressbook" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1374 -msgid "Website" +#: ../../Zotlabs/Widget/Cdav.php:183 +msgid "Addressbook Name" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1376 -msgid "Note" +#: ../../Zotlabs/Widget/Cdav.php:185 +msgid "Addressbook Tools" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1381 -msgid "Add Contact" +#: ../../Zotlabs/Widget/Cdav.php:186 +msgid "Import addressbook" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1382 -msgid "Add Field" +#: ../../Zotlabs/Widget/Cdav.php:187 +msgid "Select an addressbook to import to" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1387 -msgid "P.O. Box" +#: ../../Zotlabs/Widget/Privacygroups.php:45 +msgid "Add new group" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1388 -msgid "Additional" +#: ../../Zotlabs/Widget/Privacygroups.php:54 +#: ../../Zotlabs/Module/Contactedit.php:429 +msgid "Privacy groups" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1389 -msgid "Street" +#: ../../Zotlabs/Storage/Browser.php:292 +msgid "Change filename to" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1390 -msgid "Locality" +#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394 +msgid "Select a target location" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1391 -msgid "Region" +#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395 +msgid "Copy to target location" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1392 -msgid "ZIP Code" +#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393 +msgid "Set permissions for all files and sub folders" msgstr "" -#: ../../Zotlabs/Module/Import.php:71 -msgid "Nothing to import." +#: ../../Zotlabs/Storage/Browser.php:312 +msgid "Notify your contacts about this file" msgstr "" -#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101 -msgid "Unable to download data from old server" +#: ../../Zotlabs/Storage/Browser.php:351 +msgid "File category" msgstr "" -#: ../../Zotlabs/Module/Import.php:164 -#, php-format -msgid "Your service plan only allows %d channels." +#: ../../Zotlabs/Storage/Browser.php:365 +msgid "Total" msgstr "" -#: ../../Zotlabs/Module/Import.php:191 -msgid "No channel. Import failed." +#: ../../Zotlabs/Storage/Browser.php:367 +msgid "Shared" msgstr "" -#: ../../Zotlabs/Module/Import.php:197 -msgid "Channel exists but has been marked removed on this hub. Import failed." +#: ../../Zotlabs/Storage/Browser.php:369 +msgid "Add Files" msgstr "" -#: ../../Zotlabs/Module/Import.php:568 -msgid "" -"Automatic content and files import was not possible due to API version " -"incompatiblity. Please import content and files manually!" +#: ../../Zotlabs/Storage/Browser.php:384 +#: ../../Zotlabs/Module/Sharedwithme.php:110 +msgid "Last Modified" msgstr "" -#: ../../Zotlabs/Module/Import.php:596 -msgid "You must be logged in to use this feature." +#: ../../Zotlabs/Storage/Browser.php:385 +msgid "parent" msgstr "" -#: ../../Zotlabs/Module/Import.php:603 -msgid "Channel Import" +#: ../../Zotlabs/Storage/Browser.php:390 +#: ../../Zotlabs/Module/Filestorage.php:206 +msgid "Copy/paste this code to attach file to a post" msgstr "" -#: ../../Zotlabs/Module/Import.php:604 -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." +#: ../../Zotlabs/Storage/Browser.php:391 +#: ../../Zotlabs/Module/Filestorage.php:207 +msgid "Copy/paste this URL to link file from a web page" msgstr "" -#: ../../Zotlabs/Module/Import.php:606 -msgid "Or provide the old server/hub details" +#: ../../Zotlabs/Storage/Browser.php:402 +msgid "Select All" msgstr "" -#: ../../Zotlabs/Module/Import.php:608 -msgid "Your old identity address (xyz@example.com)" +#: ../../Zotlabs/Storage/Browser.php:403 +msgid "Bulk Actions" msgstr "" -#: ../../Zotlabs/Module/Import.php:609 -msgid "Your old login email address" +#: ../../Zotlabs/Storage/Browser.php:404 +msgid "Adjust Permissions" msgstr "" -#: ../../Zotlabs/Module/Import.php:610 -msgid "Your old login password" +#: ../../Zotlabs/Storage/Browser.php:405 +msgid "Move or Copy" msgstr "" -#: ../../Zotlabs/Module/Import.php:611 -msgid "Import your items and files (limited by available memory)" +#: ../../Zotlabs/Storage/Browser.php:408 +msgid "Info" msgstr "" -#: ../../Zotlabs/Module/Import.php:613 -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." +#: ../../Zotlabs/Storage/Browser.php:409 +msgid "Rename" msgstr "" -#: ../../Zotlabs/Module/Import.php:615 -msgid "Make this hub my primary location" +#: ../../Zotlabs/Storage/Browser.php:411 +msgid "Attachment BBcode" msgstr "" -#: ../../Zotlabs/Module/Import.php:616 -msgid "Move this channel (disable all previous locations)" +#: ../../Zotlabs/Storage/Browser.php:412 +msgid "Embed BBcode" msgstr "" -#: ../../Zotlabs/Module/Import.php:617 -msgid "Use this channel nickname instead of the one provided" +#: ../../Zotlabs/Storage/Browser.php:413 +msgid "Link BBcode" msgstr "" -#: ../../Zotlabs/Module/Import.php:617 -msgid "" -"Leave blank to keep your existing channel nickname. You will be randomly " -"assigned a similar nickname if either name is already allocated on this site." +#: ../../Zotlabs/Storage/Browser.php:486 +#, php-format +msgid "You are using %1$s of your available file storage." msgstr "" -#: ../../Zotlabs/Module/Import.php:619 -msgid "" -"This process may take several minutes to complete. Please submit the form " -"only once and leave this page open until finished." +#: ../../Zotlabs/Storage/Browser.php:491 +#, php-format +msgid "You are using %1$s of %2$s available file storage. (%3$s%)" msgstr "" -#: ../../Zotlabs/Module/Editwebpage.php:139 -msgid "Page link" +#: ../../Zotlabs/Storage/Browser.php:502 +msgid "WARNING:" msgstr "" -#: ../../Zotlabs/Module/Editwebpage.php:166 -msgid "Edit Webpage" +#: ../../Zotlabs/Storage/Browser.php:543 +msgid "Create new folder" msgstr "" -#: ../../Zotlabs/Module/Filer.php:53 -msgid "Enter a folder name" +#: ../../Zotlabs/Storage/Browser.php:545 +msgid "Upload file" msgstr "" -#: ../../Zotlabs/Module/Filer.php:53 -msgid "or select an existing folder (doubleclick)" +#: ../../Zotlabs/Storage/Browser.php:557 +msgid "Drop files here to immediately upload" msgstr "" -#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:64 -msgid "Invalid profile identifier." +#: ../../Zotlabs/Storage/Browser.php:558 +#: ../../Zotlabs/Module/Filestorage.php:211 +msgid "Show in your contacts shared folder" msgstr "" -#: ../../Zotlabs/Module/Profperm.php:112 -msgid "Profile Visibility Editor" +#: ../../Zotlabs/Storage/Browser.php:560 +msgid "" +"You can select files via the upload button or drop them right here or into " +"an existing folder." msgstr "" -#: ../../Zotlabs/Module/Profperm.php:116 -msgid "Click on a contact to add or remove." +#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29 +msgid "Invalid item." msgstr "" -#: ../../Zotlabs/Module/Profperm.php:125 -msgid "Visible To" +#: ../../Zotlabs/Module/Page.php:174 +msgid "" +"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " +"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " +"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " +"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." msgstr "" -#: ../../Zotlabs/Module/Profperm.php:141 -#: ../../Zotlabs/Module/Connections.php:221 -msgid "All Connections" +#: ../../Zotlabs/Module/Import_progress.php:40 +msgid "Item sync completed!" msgstr "" -#: ../../Zotlabs/Module/Cal.php:62 -msgid "Permissions denied." +#: ../../Zotlabs/Module/Import_progress.php:63 +#: ../../Zotlabs/Module/Import_progress.php:112 +msgid "Import host does not seem to be online or compatible" msgstr "" -#: ../../Zotlabs/Module/Cal.php:201 ../../Zotlabs/Module/Cdav.php:1028 -msgid "Today" +#: ../../Zotlabs/Module/Import_progress.php:74 +msgid "Item sync completed but no items were found!" msgstr "" -#: ../../Zotlabs/Module/Dircensor.php:61 -msgid "Entry censored" +#: ../../Zotlabs/Module/Import_progress.php:91 +msgid "File sync completed!" msgstr "" -#: ../../Zotlabs/Module/Dircensor.php:64 -msgid "Entry OK" +#: ../../Zotlabs/Module/Import_progress.php:123 +msgid "File sync completed but no files were found!" msgstr "" -#: ../../Zotlabs/Module/Acl.php:371 -msgid "network" +#: ../../Zotlabs/Module/Import_progress.php:141 +msgid "Channel clone status" msgstr "" -#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69 -msgid "This setting requires special processing and editing has been blocked." +#: ../../Zotlabs/Module/Import_progress.php:142 +msgid "Item sync status" msgstr "" -#: ../../Zotlabs/Module/Pconfig.php:58 -msgid "Configuration Editor" +#: ../../Zotlabs/Module/Import_progress.php:143 +msgid "File sync status" msgstr "" -#: ../../Zotlabs/Module/Pconfig.php:59 -msgid "" -"Warning: Changing some settings could render your channel inoperable. Please " -"leave this page unless you are comfortable with and knowledgeable about how " -"to correctly use this feature." +#: ../../Zotlabs/Module/Import_progress.php:150 +msgid "Channel cloning completed!" msgstr "" -#: ../../Zotlabs/Module/Xchan.php:10 -msgid "Xchan Lookup" +#: ../../Zotlabs/Module/Import_progress.php:151 +msgid "Resume" msgstr "" -#: ../../Zotlabs/Module/Xchan.php:13 -msgid "Lookup xchan beginning with (or webbie): " +#: ../../Zotlabs/Module/Import_progress.php:152 +msgid "Only resume if sync stalled!" msgstr "" -#: ../../Zotlabs/Module/Register.php:113 -msgid "Email address required" +#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24 +#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77 +#: ../../Zotlabs/Module/Viewconnections.php:23 +#: ../../Zotlabs/Module/Photos.php:511 +msgid "Public access denied." msgstr "" -#: ../../Zotlabs/Module/Register.php:157 -msgid "No password provided" +#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Oep.php:82 +#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Channel.php:195 +msgid "Malformed message id." msgstr "" -#: ../../Zotlabs/Module/Register.php:180 -msgid "Terms of Service not accepted" +#: ../../Zotlabs/Module/Display.php:95 ../../Zotlabs/Module/Network.php:213 +#: ../../Zotlabs/Module/Hq.php:99 ../../Zotlabs/Module/Pubstream.php:98 +#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111 +msgid "Reset form" msgstr "" -#: ../../Zotlabs/Module/Register.php:242 -msgid "Invitation code succesfully applied" +#: ../../Zotlabs/Module/Display.php:320 ../../Zotlabs/Module/Channel.php:501 +msgid "" +"You must enable javascript for your browser to be able to view this content." msgstr "" -#: ../../Zotlabs/Module/Register.php:262 -msgid "Invitation not in time or too late" +#: ../../Zotlabs/Module/Display.php:340 +msgid "Article" msgstr "" -#: ../../Zotlabs/Module/Register.php:268 -msgid "Invitation email failed" +#: ../../Zotlabs/Module/Display.php:389 +msgid "Item has been removed." msgstr "" -#: ../../Zotlabs/Module/Register.php:276 -msgid "Invitation code failed" +#: ../../Zotlabs/Module/Cover_photo.php:86 +#: ../../Zotlabs/Module/Profile_photo.php:129 +msgid "Image uploaded but image cropping failed." msgstr "" -#: ../../Zotlabs/Module/Register.php:283 -msgid "Invitations are not available" +#: ../../Zotlabs/Module/Cover_photo.php:195 +#: ../../Zotlabs/Module/Cover_photo.php:252 +msgid "Cover Photos" msgstr "" -#: ../../Zotlabs/Module/Register.php:293 -msgid "Registration on this hub is by invitation only" +#: ../../Zotlabs/Module/Cover_photo.php:211 +#: ../../Zotlabs/Module/Profile_photo.php:185 +msgid "Image resize failed." msgstr "" -#: ../../Zotlabs/Module/Register.php:400 -msgid "New register request" +#: ../../Zotlabs/Module/Cover_photo.php:263 +#: ../../Zotlabs/Module/Profile_photo.php:350 +msgid "Image upload failed." msgstr "" -#: ../../Zotlabs/Module/Register.php:418 -msgid "Error creating dId A" +#: ../../Zotlabs/Module/Cover_photo.php:280 +#: ../../Zotlabs/Module/Profile_photo.php:370 +msgid "Unable to process image." msgstr "" -#: ../../Zotlabs/Module/Register.php:437 -msgid "Registration on this hub is disabled." +#: ../../Zotlabs/Module/Cover_photo.php:325 +#: ../../Zotlabs/Module/Cover_photo.php:340 +#: ../../Zotlabs/Module/Profile_photo.php:432 +#: ../../Zotlabs/Module/Profile_photo.php:497 +msgid "Photo not available." msgstr "" -#: ../../Zotlabs/Module/Register.php:446 -msgid "Why do you want to join this hub?" +#: ../../Zotlabs/Module/Cover_photo.php:376 +msgid "Your cover photo may be visible to anybody on the internet" msgstr "" -#: ../../Zotlabs/Module/Register.php:446 -msgid "This will help to review your registration" +#: ../../Zotlabs/Module/Cover_photo.php:378 +msgid "Upload File:" msgstr "" -#: ../../Zotlabs/Module/Register.php:447 -msgid "Registration on this hub is by approval only." +#: ../../Zotlabs/Module/Cover_photo.php:379 +msgid "Select a profile:" msgstr "" -#: ../../Zotlabs/Module/Register.php:448 -msgid "Register at another affiliated hub in case when prefered" +#: ../../Zotlabs/Module/Cover_photo.php:380 +msgid "Change Cover Photo" msgstr "" -#: ../../Zotlabs/Module/Register.php:461 -msgid "Registration on this hub is by invitation only." +#: ../../Zotlabs/Module/Cover_photo.php:384 +#: ../../Zotlabs/Module/Cover_photo.php:385 +#: ../../Zotlabs/Module/Profile_photo.php:551 +#: ../../Zotlabs/Module/Profile_photo.php:552 +msgid "Use a photo from your albums" msgstr "" -#: ../../Zotlabs/Module/Register.php:462 -msgid "Register at another affiliated hub" +#: ../../Zotlabs/Module/Cover_photo.php:396 +msgid "Select existing photo" msgstr "" -#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29 -msgid "Terms of Service" +#: ../../Zotlabs/Module/Cover_photo.php:413 +#: ../../Zotlabs/Module/Profile_photo.php:581 +msgid "Crop Image" msgstr "" -#: ../../Zotlabs/Module/Register.php:482 -#, php-format -msgid "I accept the %s for this website" +#: ../../Zotlabs/Module/Cover_photo.php:414 +#: ../../Zotlabs/Module/Profile_photo.php:582 +msgid "Please adjust the image cropping for optimum viewing." msgstr "" -#: ../../Zotlabs/Module/Register.php:489 -#, php-format -msgid "I am over %s years of age and accept the %s for this website" +#: ../../Zotlabs/Module/Cover_photo.php:416 +msgid "Done Editing" msgstr "" -#: ../../Zotlabs/Module/Register.php:499 -msgid "Your email address" +#: ../../Zotlabs/Module/Editwebpage.php:139 +msgid "Page link" msgstr "" -#: ../../Zotlabs/Module/Register.php:506 -msgid "Choose a password" +#: ../../Zotlabs/Module/Editwebpage.php:166 +msgid "Edit Webpage" msgstr "" -#: ../../Zotlabs/Module/Register.php:507 -msgid "Please re-enter your password" +#: ../../Zotlabs/Module/Sse_bs.php:631 +msgid "Private forum" msgstr "" -#: ../../Zotlabs/Module/Register.php:509 -msgid "Please enter your invitation code" +#: ../../Zotlabs/Module/Sse_bs.php:631 +msgid "Public forum" msgstr "" -#: ../../Zotlabs/Module/Register.php:511 -msgid "Your name" +#: ../../Zotlabs/Module/Webpages.php:67 +msgid "Import Webpage Elements" msgstr "" -#: ../../Zotlabs/Module/Register.php:511 -msgid "Real name is preferred" +#: ../../Zotlabs/Module/Webpages.php:68 +msgid "Import selected" msgstr "" -#: ../../Zotlabs/Module/Register.php:513 -msgid "" -"Your nickname will be used to create an easy to remember channel address" +#: ../../Zotlabs/Module/Webpages.php:90 +msgid "Export Webpage Elements" msgstr "" -#: ../../Zotlabs/Module/Register.php:521 -#: ../../Zotlabs/Module/Admin/Site.php:403 -msgid "Registration" +#: ../../Zotlabs/Module/Webpages.php:91 +msgid "Export selected" msgstr "" -#: ../../Zotlabs/Module/Register.php:529 -msgid "I have an invite code" +#: ../../Zotlabs/Module/Webpages.php:257 +msgid "Actions" msgstr "" -#: ../../Zotlabs/Module/Register.php:576 -msgid "" -"This site has exceeded the number of allowed daily account registrations." +#: ../../Zotlabs/Module/Webpages.php:258 +msgid "Page Link" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:27 -msgid "Public Hubs" +#: ../../Zotlabs/Module/Webpages.php:259 +msgid "Page Title" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:30 -msgid "" -"The listed hubs allow public registration for the $Projectname network. All " -"hubs in the network are interlinked so membership on any of them conveys " -"membership in the network as a whole. Some hubs may require subscription or " -"provide tiered service plans. The hub itself <strong>may</strong> provide " -"additional details." +#: ../../Zotlabs/Module/Webpages.php:260 ../../Zotlabs/Module/Layouts.php:189 +#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Blocks.php:155 +msgid "Created" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:36 -msgid "Hub URL" +#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Layouts.php:190 +#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Blocks.php:156 +msgid "Edited" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:36 -msgid "Access Type" +#: ../../Zotlabs/Module/Webpages.php:289 +msgid "Invalid file type." msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:36 -msgid "Registration Policy" +#: ../../Zotlabs/Module/Webpages.php:301 +msgid "Error opening zip file" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:36 -msgid "Stats" +#: ../../Zotlabs/Module/Webpages.php:312 +msgid "Invalid folder path." msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:36 -msgid "Software" +#: ../../Zotlabs/Module/Webpages.php:339 +msgid "No webpage elements detected." msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:38 -msgid "Ratings" +#: ../../Zotlabs/Module/Webpages.php:414 +msgid "Import complete." msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:52 -msgid "Rate" +#: ../../Zotlabs/Module/Impel.php:188 +#, php-format +msgid "%s element installed" msgstr "" -#: ../../Zotlabs/Module/Thing.php:139 -msgid "Thing updated" +#: ../../Zotlabs/Module/Impel.php:191 +#, php-format +msgid "%s element installation failed" msgstr "" -#: ../../Zotlabs/Module/Thing.php:191 -msgid "Object store: failed" +#: ../../Zotlabs/Module/Oauth.php:45 +msgid "Name is required" msgstr "" -#: ../../Zotlabs/Module/Thing.php:195 -msgid "Thing added" +#: ../../Zotlabs/Module/Oauth.php:49 +msgid "Key and Secret are required" msgstr "" -#: ../../Zotlabs/Module/Thing.php:210 -#, php-format -msgid "OBJ: %1$s %2$s %3$s" +#: ../../Zotlabs/Module/Oauth.php:109 ../../Zotlabs/Module/Oauth.php:134 +#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141 +#: ../../Zotlabs/Module/Oauth2.php:191 +msgid "Add application" msgstr "" -#: ../../Zotlabs/Module/Thing.php:277 ../../Zotlabs/Module/Thing.php:301 -msgid "item not found." +#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth2.php:117 +#: ../../Zotlabs/Module/Oauth2.php:144 +msgid "Name of application" msgstr "" -#: ../../Zotlabs/Module/Thing.php:336 -msgid "Edit Thing" +#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:114 +#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:145 +msgid "Automatically generated - change if desired. Max length 20" msgstr "" -#: ../../Zotlabs/Module/Thing.php:338 ../../Zotlabs/Module/Thing.php:394 -msgid "Select a profile" +#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:140 +#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:146 +msgid "Redirect" msgstr "" -#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397 -msgid "Post an activity" +#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth2.php:119 +#: ../../Zotlabs/Module/Oauth2.php:146 +msgid "" +"Redirect URI - leave blank unless your application specifically requires this" msgstr "" -#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397 -msgid "Only sends to viewers of the applicable profile" +#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Oauth.php:141 +msgid "Icon url" msgstr "" -#: ../../Zotlabs/Module/Thing.php:344 ../../Zotlabs/Module/Thing.php:399 -msgid "Name of thing e.g. something" +#: ../../Zotlabs/Module/Oauth.php:116 ../../Zotlabs/Module/Register.php:501 +#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156 +msgid "Optional" msgstr "" -#: ../../Zotlabs/Module/Thing.php:346 ../../Zotlabs/Module/Thing.php:400 -msgid "URL of thing (optional)" +#: ../../Zotlabs/Module/Oauth.php:126 +msgid "Application not found." msgstr "" -#: ../../Zotlabs/Module/Thing.php:348 ../../Zotlabs/Module/Thing.php:401 -msgid "URL for photo of thing (optional)" +#: ../../Zotlabs/Module/Oauth.php:169 +msgid "Connected OAuth Apps" msgstr "" -#: ../../Zotlabs/Module/Thing.php:392 -msgid "Add Thing to your Profile" +#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194 +msgid "Client key starts with" msgstr "" -#: ../../Zotlabs/Module/Home.php:105 -#, php-format -msgid "Welcome to %s" +#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195 +msgid "No name" msgstr "" -#: ../../Zotlabs/Module/Blocks.php:154 -msgid "Block Title" +#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196 +msgid "Remove authorization" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:111 -#: ../../Zotlabs/Module/Settings/Channel.php:151 -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:163 -#: ../../extend/addon/hzaddons/piwik/piwik.php:116 -#: ../../extend/addon/hzaddons/twitter/twitter.php:493 -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:108 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:82 -#: ../../extend/addon/hzaddons/logrot/logrot.php:54 -#: ../../extend/addon/hzaddons/xmpp/xmpp.php:54 -#: ../../extend/addon/hzaddons/faces/faces.php:291 -#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:54 -msgid "Settings updated." +#: ../../Zotlabs/Module/Network.php:108 +msgid "No such group" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:252 -msgid "Connection Default Permissions" +#: ../../Zotlabs/Module/Network.php:160 +msgid "No such channel" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:253 -msgid "Apply these permissions automatically" +#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:246 +msgid "Search Results For:" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:253 -msgid "" -"If enabled, connection requests will be approved without your interaction" +#: ../../Zotlabs/Module/Network.php:248 +msgid "Privacy group is empty" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:254 -msgid "Permission role" +#: ../../Zotlabs/Module/Network.php:258 +msgid "Privacy group: " msgstr "" -#: ../../Zotlabs/Module/Defperms.php:255 -msgid "Add permission role" +#: ../../Zotlabs/Module/Apps.php:51 +msgid "Installed Apps" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:260 -msgid "Automatic approval settings" +#: ../../Zotlabs/Module/Apps.php:54 +msgid "Manage Apps" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:263 -msgid "My Settings" +#: ../../Zotlabs/Module/Apps.php:55 +msgid "Create Custom App" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:267 -msgid "" -"Some individual permissions may have been preset or locked based on your " -"channel type and privacy settings." +#: ../../Zotlabs/Module/Service_limits.php:23 +msgid "No service class restrictions found." msgstr "" #: ../../Zotlabs/Module/Lostpass.php:19 @@ -8603,320 +8942,275 @@ msgstr "" msgid "Reset" msgstr "" -#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65 -msgid "Location not found." -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:74 -msgid "Location lookup failed." -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:78 -msgid "" -"Please select another location to become primary before removing the primary " -"location." -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:106 -msgid "Syncing locations" -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:115 -msgid "No locations found." -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:120 -msgid "Manage Channel Locations" -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:123 -#: ../../extend/addon/hzaddons/workflow/workflow.php:288 -msgid "Primary" -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:126 -msgid "Sync Now" -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:127 -msgid "Please wait several minutes between consecutive operations." -msgstr "" - -#: ../../Zotlabs/Module/Locs.php:128 +#: ../../Zotlabs/Module/Removeme.php:35 msgid "" -"When possible, drop a location by logging into that website/hub and removing " -"your channel." +"Channel removals are not allowed within 48 hours of changing the account " +"password." msgstr "" -#: ../../Zotlabs/Module/Locs.php:129 -msgid "Use this form to drop the location if the hub is no longer operating." +#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64 +#: ../../Zotlabs/Module/Settings/Channel.php:283 +msgid "Remove Channel" msgstr "" -#: ../../Zotlabs/Module/Totp_check.php:71 -#: ../../Zotlabs/Module/Admin/Account_edit.php:61 -msgid "Account not found." +#: ../../Zotlabs/Module/Removeme.php:61 +#: ../../Zotlabs/Module/Removeaccount.php:58 +#: ../../Zotlabs/Module/Changeaddr.php:78 +msgid "WARNING: " msgstr "" -#: ../../Zotlabs/Module/Totp_check.php:78 -msgid "Multifactor Verification" +#: ../../Zotlabs/Module/Removeme.php:61 +msgid "This channel will be permanently removed. " msgstr "" -#: ../../Zotlabs/Module/Totp_check.php:80 -msgid "Please enter the verification key from your authenticator app" +#: ../../Zotlabs/Module/Removeme.php:61 +msgid "This action can not be undone!" msgstr "" -#: ../../Zotlabs/Module/Totp_check.php:81 -msgid "Verify" +#: ../../Zotlabs/Module/Removeme.php:62 +#: ../../Zotlabs/Module/Removeaccount.php:59 +#: ../../Zotlabs/Module/Changeaddr.php:79 +msgid "Please enter your password for verification:" msgstr "" -#: ../../Zotlabs/Module/Page.php:174 -msgid "" -"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " -"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " -"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " -"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " -"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " -"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +#: ../../Zotlabs/Module/Import_items.php:50 +msgid "Not a zip file or zip file corrupted." msgstr "" -#: ../../Zotlabs/Module/Vote.php:40 -msgid "Poll not found." +#: ../../Zotlabs/Module/Import_items.php:121 +msgid "Import Items" msgstr "" -#: ../../Zotlabs/Module/Vote.php:69 -msgid "Invalid response." +#: ../../Zotlabs/Module/Import_items.php:122 +msgid "Use this form to import existing posts and content from an export file." msgstr "" -#: ../../Zotlabs/Module/Vote.php:125 -msgid "Response submitted. Updates may not appear instantly." +#: ../../Zotlabs/Module/Import_items.php:123 +#: ../../Zotlabs/Module/Import.php:606 +msgid "File to Upload" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:269 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:299 -msgid "" -"Shift-reload the page or clear browser cache if the new photo does not " -"display immediately." +#: ../../Zotlabs/Module/Import_items.php:136 +#: ../../Zotlabs/Module/Import.php:108 +msgid "Imported file is empty." msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:544 -msgid "" -"This profile photo will be visible to anybody on the internet and may be " -"distributed to other websites." +#: ../../Zotlabs/Module/Import_items.php:159 +msgid "Content import completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:544 -msgid "" -"This profile photo will be visible only to channels with permission to view " -"this profile." +#: ../../Zotlabs/Module/Import_items.php:164 +msgid "Chatroom import completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:546 -msgid "Use Photo for Profile" +#: ../../Zotlabs/Module/Import_items.php:170 +msgid "Channel calendar import 1/2 completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:546 -msgid "Change Profile Photo" +#: ../../Zotlabs/Module/Import_items.php:176 +msgid "Channel calendar import 2/2 completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:548 -msgid "Reset to default" +#: ../../Zotlabs/Module/Import_items.php:181 +msgid "Menu import completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:562 -msgid "Select existing" +#: ../../Zotlabs/Module/Import_items.php:186 +msgid "Wiki import completed" msgstr "" -#: ../../Zotlabs/Module/Profile_photo.php:584 -msgid "Done editing" +#: ../../Zotlabs/Module/Import_items.php:191 +msgid "Webpages import completed" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:67 -msgid "Import Webpage Elements" +#: ../../Zotlabs/Module/Regdir.php:53 ../../Zotlabs/Module/Dirsearch.php:24 +msgid "This site is not a directory server" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:68 -msgid "Import selected" +#: ../../Zotlabs/Module/Notifications.php:101 ../../Zotlabs/Module/Menu.php:180 +#: ../../Zotlabs/Module/Connections.php:83 +#: ../../Zotlabs/Module/Connections.php:92 +msgid "New" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:91 -msgid "Export Webpage Elements" +#: ../../Zotlabs/Module/Notifications.php:106 +#: ../../Zotlabs/Module/Notify.php:85 +msgid "No more system notifications." msgstr "" -#: ../../Zotlabs/Module/Webpages.php:92 -msgid "Export selected" +#: ../../Zotlabs/Module/Notifications.php:110 +#: ../../Zotlabs/Module/Notify.php:89 +msgid "System Notifications" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:258 -msgid "Actions" +#: ../../Zotlabs/Module/Notifications.php:111 +msgid "Mark all seen" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:259 -msgid "Page Link" +#: ../../Zotlabs/Module/Z6trans.php:19 +msgid "Update to Hubzilla 5.0 step 2" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:260 -msgid "Page Title" +#: ../../Zotlabs/Module/Z6trans.php:21 +msgid "To complete the update please run" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:290 -msgid "Invalid file type." +#: ../../Zotlabs/Module/Z6trans.php:23 +msgid "php util/z6convert.php" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:302 -msgid "Error opening zip file" +#: ../../Zotlabs/Module/Z6trans.php:25 +msgid "from the terminal." msgstr "" -#: ../../Zotlabs/Module/Webpages.php:313 -msgid "Invalid folder path." +#: ../../Zotlabs/Module/Thing.php:146 +msgid "Thing updated" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:340 -msgid "No webpage elements detected." +#: ../../Zotlabs/Module/Thing.php:198 +msgid "Object store: failed" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:415 -msgid "Import complete." +#: ../../Zotlabs/Module/Thing.php:202 +msgid "Thing added" msgstr "" -#: ../../Zotlabs/Module/Connections.php:58 -#: ../../Zotlabs/Module/Connections.php:116 -msgid "Active" +#: ../../Zotlabs/Module/Thing.php:217 +#, php-format +msgid "OBJ: %1$s %2$s %3$s" msgstr "" -#: ../../Zotlabs/Module/Connections.php:63 -#: ../../Zotlabs/Module/Connections.php:185 -#: ../../Zotlabs/Module/Connections.php:296 -msgid "Blocked" +#: ../../Zotlabs/Module/Thing.php:284 ../../Zotlabs/Module/Thing.php:308 +msgid "item not found." msgstr "" -#: ../../Zotlabs/Module/Connections.php:68 -#: ../../Zotlabs/Module/Connections.php:192 -#: ../../Zotlabs/Module/Connections.php:295 -msgid "Ignored" +#: ../../Zotlabs/Module/Thing.php:343 +msgid "Edit Thing" msgstr "" -#: ../../Zotlabs/Module/Connections.php:73 -#: ../../Zotlabs/Module/Connections.php:206 -#: ../../Zotlabs/Module/Connections.php:294 -msgid "Hidden" +#: ../../Zotlabs/Module/Thing.php:345 ../../Zotlabs/Module/Thing.php:399 +msgid "Select a profile" msgstr "" -#: ../../Zotlabs/Module/Connections.php:78 -#: ../../Zotlabs/Module/Connections.php:199 -msgid "Archived/Unreachable" +#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402 +msgid "Post an activity" msgstr "" -#: ../../Zotlabs/Module/Connections.php:161 -msgid "Active Connections" +#: ../../Zotlabs/Module/Thing.php:349 ../../Zotlabs/Module/Thing.php:402 +msgid "Only sends to viewers of the applicable profile" msgstr "" -#: ../../Zotlabs/Module/Connections.php:164 -msgid "Show active connections" +#: ../../Zotlabs/Module/Thing.php:351 ../../Zotlabs/Module/Thing.php:404 +msgid "Name of thing e.g. something" msgstr "" -#: ../../Zotlabs/Module/Connections.php:168 -#: ../../Zotlabs/Widget/Notifications.php:96 -msgid "New Connections" +#: ../../Zotlabs/Module/Thing.php:353 ../../Zotlabs/Module/Thing.php:405 +msgid "URL of thing (optional)" msgstr "" -#: ../../Zotlabs/Module/Connections.php:171 -msgid "Show pending (new) connections" +#: ../../Zotlabs/Module/Thing.php:355 ../../Zotlabs/Module/Thing.php:406 +msgid "URL for photo of thing (optional)" msgstr "" -#: ../../Zotlabs/Module/Connections.php:188 -msgid "Only show blocked connections" +#: ../../Zotlabs/Module/Thing.php:397 +msgid "Add Thing to your Profile" msgstr "" -#: ../../Zotlabs/Module/Connections.php:195 -msgid "Only show ignored connections" +#: ../../Zotlabs/Module/Removeaccount.php:35 +msgid "" +"Account removals are not allowed within 48 hours of changing the account " +"password." msgstr "" -#: ../../Zotlabs/Module/Connections.php:202 -msgid "Only show archived/unreachable connections" +#: ../../Zotlabs/Module/Removeaccount.php:57 +msgid "Remove This Account" msgstr "" -#: ../../Zotlabs/Module/Connections.php:209 -msgid "Only show hidden connections" +#: ../../Zotlabs/Module/Removeaccount.php:58 +msgid "" +"This account and all its channels will be completely removed from the " +"network. " msgstr "" -#: ../../Zotlabs/Module/Connections.php:224 -msgid "Show all connections" +#: ../../Zotlabs/Module/Removeaccount.php:58 +msgid "This action is permanent and can not be undone!" msgstr "" -#: ../../Zotlabs/Module/Connections.php:292 -msgid "Pending approval" +#: ../../Zotlabs/Module/Removeaccount.php:61 +#: ../../Zotlabs/Module/Settings/Account.php:113 +msgid "Remove Account" msgstr "" -#: ../../Zotlabs/Module/Connections.php:293 -msgid "Archived" +#: ../../Zotlabs/Module/Tokens.php:94 +#, php-format +msgid "This channel is limited to %d tokens" msgstr "" -#: ../../Zotlabs/Module/Connections.php:297 -msgid "Not connected at this location" +#: ../../Zotlabs/Module/Tokens.php:100 +msgid "Name and Password are required." msgstr "" -#: ../../Zotlabs/Module/Connections.php:336 -#, php-format -msgid "%1$s [%2$s]" +#: ../../Zotlabs/Module/Tokens.php:215 +msgid "Token saved." msgstr "" -#: ../../Zotlabs/Module/Connections.php:337 -msgid "Edit connection" +#: ../../Zotlabs/Module/Tokens.php:261 +msgid "" +"Use this form to create temporary access identifiers to share things with " +"non-members. These identities may be used in privacy groups and visitors may " +"login using these credentials to access private content." msgstr "" -#: ../../Zotlabs/Module/Connections.php:339 -msgid "Delete connection" +#: ../../Zotlabs/Module/Tokens.php:274 +msgid "Please select a role for this guest!" msgstr "" -#: ../../Zotlabs/Module/Connections.php:345 -msgid "Channel address" +#: ../../Zotlabs/Module/Tokens.php:287 +msgid "Select a role for this guest" msgstr "" -#: ../../Zotlabs/Module/Connections.php:350 -msgid "Call" +#: ../../Zotlabs/Module/Tokens.php:291 +msgid "Login Name" msgstr "" -#: ../../Zotlabs/Module/Connections.php:352 -msgid "Status" +#: ../../Zotlabs/Module/Tokens.php:292 +msgid "Login Password" msgstr "" -#: ../../Zotlabs/Module/Connections.php:355 -msgid "Connected" +#: ../../Zotlabs/Module/Tokens.php:293 +msgid "Expires (yyyy-mm-dd)" msgstr "" -#: ../../Zotlabs/Module/Connections.php:357 -#: ../../Zotlabs/Module/Contactedit.php:448 -msgid "Approve connection" +#: ../../Zotlabs/Module/Pdledit.php:27 +msgid "Layout updated." msgstr "" -#: ../../Zotlabs/Module/Connections.php:359 -msgid "Ignore connection" +#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129 +msgid "Edit System Page Description" msgstr "" -#: ../../Zotlabs/Module/Connections.php:361 -msgid "Recent activity" +#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93 +msgid "(modified)" msgstr "" -#: ../../Zotlabs/Module/Connections.php:367 -msgid "Connect at this location" +#: ../../Zotlabs/Module/Pdledit.php:124 +msgid "Layout not found." msgstr "" -#: ../../Zotlabs/Module/Connections.php:377 ../../Zotlabs/Widget/Follow.php:27 -#, php-format -msgid "You have %1$.0f of %2$.0f allowed connections." +#: ../../Zotlabs/Module/Pdledit.php:130 +msgid "Module Name:" msgstr "" -#: ../../Zotlabs/Module/Connections.php:405 -msgid "Search your connections" +#: ../../Zotlabs/Module/Pdledit.php:131 +msgid "Layout Help" msgstr "" -#: ../../Zotlabs/Module/Connections.php:406 -msgid "Contact search" +#: ../../Zotlabs/Module/Pdledit.php:132 +msgid "Edit another layout" msgstr "" -#: ../../Zotlabs/Module/Connections.php:413 -#: ../../Zotlabs/Module/Contactedit.php:383 -msgid "This is a group/forum channel" +#: ../../Zotlabs/Module/Pdledit.php:133 +msgid "System layout" msgstr "" #: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118 @@ -8962,152 +9256,6 @@ msgstr "" msgid "Restricted or Premium Channel" msgstr "" -#: ../../Zotlabs/Module/Affinity.php:35 -msgid "Affinity Tool settings updated." -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:54 -msgid "" -"The numbers below represent the minimum and maximum slider default positions " -"for your network/stream page as a percentage." -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:61 -msgid "Default maximum affinity level" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:61 -msgid "0-99 default 99" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:67 -msgid "Default minimum affinity level" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:67 -msgid "0-99 - default 0" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:73 -msgid "Persistent affinity levels" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:73 -msgid "" -"If disabled the max and min levels will be reset to default after page reload" -msgstr "" - -#: ../../Zotlabs/Module/Affinity.php:81 -msgid "Affinity Tool Settings" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:22 -msgid "About this site" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:23 -msgid "Site Name" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:25 ../../Zotlabs/Module/Admin/Site.php:414 -msgid "Site Information" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:27 -msgid "Administrator" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:30 -msgid "Software and Project information" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:31 -msgid "This site is powered by $Projectname" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:32 -msgid "" -"Federated and decentralised networking and identity services provided by" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:35 -msgid "Additional federated transport protocols:" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:37 -#, php-format -msgid "Version %s" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:38 -msgid "Project homepage" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:39 -msgid "Developer homepage" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:42 ../../Zotlabs/Module/Admin.php:149 -msgid "Active addons" -msgstr "" - -#: ../../Zotlabs/Module/Siteinfo.php:43 -msgid "Blocked sites" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:40 -msgid "Item sync completed!" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:62 -#: ../../Zotlabs/Module/Import_progress.php:111 -msgid "Import host does not seem to be online or compatible" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:73 -msgid "Item sync completed but no items were found!" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:90 -msgid "File sync completed!" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:122 -msgid "File sync completed but no files were found!" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:137 -msgid "Channel clone status" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:138 -msgid "Item sync status" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:139 -msgid "File sync status" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:146 -msgid "Channel cloning completed!" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:147 -msgid "Resume" -msgstr "" - -#: ../../Zotlabs/Module/Import_progress.php:148 -msgid "Only resume if sync stalled!" -msgstr "" - -#: ../../Zotlabs/Module/Dirsearch.php:24 ../../Zotlabs/Module/Regdir.php:53 -msgid "This site is not a directory server" -msgstr "" - -#: ../../Zotlabs/Module/Dirsearch.php:32 -msgid "This directory server requires an access token" -msgstr "" - #: ../../Zotlabs/Module/Filestorage.php:14 #: ../../Zotlabs/Module/Filestorage.php:53 msgid "Deprecated!" @@ -9126,11 +9274,6 @@ msgstr "" msgid "Edit file permissions" msgstr "" -#: ../../Zotlabs/Module/Filestorage.php:202 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:268 -msgid "Set/edit permissions" -msgstr "" - #: ../../Zotlabs/Module/Filestorage.php:203 msgid "Include all files and sub folders" msgstr "" @@ -9147,2662 +9290,2499 @@ msgstr "" msgid "Show URL to this file" msgstr "" -#: ../../Zotlabs/Module/Pdledit_gui.php:119 -msgid "Layout not found" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit_gui.php:127 -msgid "This template does not support pdledi_gui (no content regions defined)" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit_gui.php:404 -msgid "Main page content" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit_gui.php:405 -msgid "The main page content can not be edited!" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:27 -msgid "Layout updated." -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129 -msgid "Edit System Page Description" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93 -msgid "(modified)" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:124 -msgid "Layout not found." -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:130 -msgid "Module Name:" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:131 -msgid "Layout Help" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:132 -msgid "Edit another layout" -msgstr "" - -#: ../../Zotlabs/Module/Pdledit.php:133 -msgid "System layout" -msgstr "" - -#: ../../Zotlabs/Module/Moderate.php:70 -msgid "Item approved" -msgstr "" - -#: ../../Zotlabs/Module/Removeaccount.php:35 -msgid "" -"Account removals are not allowed within 48 hours of changing the account " -"password." +#: ../../Zotlabs/Module/Totp_check.php:71 +#: ../../Zotlabs/Module/Admin/Account_edit.php:66 +msgid "Account not found." msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:57 -msgid "Remove This Account" +#: ../../Zotlabs/Module/Totp_check.php:78 +msgid "Multifactor Verification" msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:58 -#: ../../Zotlabs/Module/Removeme.php:61 ../../Zotlabs/Module/Changeaddr.php:78 -msgid "WARNING: " +#: ../../Zotlabs/Module/Totp_check.php:80 +msgid "Please enter the verification key from your authenticator app" msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:58 -msgid "" -"This account and all its channels will be completely removed from the " -"network. " +#: ../../Zotlabs/Module/Totp_check.php:81 +msgid "Verify" msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:58 -msgid "This action is permanent and can not be undone!" +#: ../../Zotlabs/Module/Contactedit.php:50 +msgid "Invalid abook_id" msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:59 -#: ../../Zotlabs/Module/Removeme.php:62 ../../Zotlabs/Module/Changeaddr.php:79 -msgid "Please enter your password for verification:" +#: ../../Zotlabs/Module/Contactedit.php:78 ../../Zotlabs/Module/Connedit.php:80 +#: ../../Zotlabs/Module/Defperms.php:67 +msgid "Could not access contact record." msgstr "" -#: ../../Zotlabs/Module/Removeaccount.php:61 -#: ../../Zotlabs/Module/Settings/Account.php:113 -msgid "Remove Account" +#: ../../Zotlabs/Module/Contactedit.php:107 +#: ../../Zotlabs/Module/Connedit.php:101 +msgid "Could not locate selected profile." msgstr "" -#: ../../Zotlabs/Module/Regmod.php:15 -msgid "Please login." +#: ../../Zotlabs/Module/Contactedit.php:180 +#: ../../Zotlabs/Module/Connedit.php:215 +msgid "is now connected to" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:112 -msgid "Invalid input" +#: ../../Zotlabs/Module/Contactedit.php:238 +#: ../../Zotlabs/Module/Contactedit.php:387 +#: ../../Zotlabs/Module/Connedit.php:701 +msgid "Contact Tools" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:132 -msgid "Errors" +#: ../../Zotlabs/Module/Contactedit.php:315 +#: ../../Zotlabs/Module/Connedit.php:622 +msgid "Approve this contact" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:220 -msgid "Site settings updated." +#: ../../Zotlabs/Module/Contactedit.php:315 +#: ../../Zotlabs/Module/Connedit.php:622 +msgid "Accept contact to allow communication" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:243 -#: ../../Zotlabs/Module/Settings/Display.php:117 -#, php-format -msgid "%s - (Incompatible)" +#: ../../Zotlabs/Module/Contactedit.php:348 +#: ../../Zotlabs/Module/Connedit.php:658 +msgid "Please select a role for this contact!" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:250 -msgid "mobile" +#: ../../Zotlabs/Module/Contactedit.php:368 +#: ../../Zotlabs/Module/Connedit.php:678 +msgid "This contact is unreachable from this location." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:252 -msgid "experimental" +#: ../../Zotlabs/Module/Contactedit.php:369 +#: ../../Zotlabs/Module/Connedit.php:679 +msgid "This contact may be unreachable from other channel locations." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:254 -msgid "unsupported" +#: ../../Zotlabs/Module/Contactedit.php:371 +#: ../../Zotlabs/Module/Connedit.php:681 +msgid "Location independence is not supported by their network." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:307 -msgid "Yes - with approval" +#: ../../Zotlabs/Module/Contactedit.php:381 +msgid "View profile" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:315 -msgid "My site is not a public server" +#: ../../Zotlabs/Module/Contactedit.php:383 +#: ../../Zotlabs/Module/Connections.php:413 +msgid "This is a group/forum channel" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:316 -msgid "My site has paid access only" +#: ../../Zotlabs/Module/Contactedit.php:394 +msgid "Select a role for this contact" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:317 -msgid "My site has free access only" +#: ../../Zotlabs/Module/Contactedit.php:406 +#: ../../Zotlabs/Module/Connedit.php:703 +msgid "Slide to adjust your degree of friendship" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:318 -msgid "My site offers free accounts with optional paid upgrades" +#: ../../Zotlabs/Module/Contactedit.php:408 +#: ../../Zotlabs/Module/Connedit.php:705 +msgid "Custom Filter" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:336 -msgid "Default permission role for new accounts" +#: ../../Zotlabs/Module/Contactedit.php:409 +#: ../../Zotlabs/Module/Connedit.php:706 +#: ../../Zotlabs/Module/Settings/Channel.php:287 +msgid "Only import posts with this text" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:336 +#: ../../Zotlabs/Module/Contactedit.php:409 +#: ../../Zotlabs/Module/Contactedit.php:410 +#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707 +#: ../../Zotlabs/Module/Admin/Site.php:502 +#: ../../Zotlabs/Module/Admin/Site.php:503 msgid "" -"This role will be used for the first channel created after registration." -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:346 -msgid "Week(s)" +"words one per line or #tags or /patterns/ or lang=xx, leave blank to import " +"all posts" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:347 -msgid "Month(s)" +#: ../../Zotlabs/Module/Contactedit.php:410 +#: ../../Zotlabs/Module/Connedit.php:707 +#: ../../Zotlabs/Module/Settings/Channel.php:286 +msgid "Do not import posts with this text" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:348 -msgid "Year(s)" +#: ../../Zotlabs/Module/Contactedit.php:415 +#: ../../Zotlabs/Module/Connedit.php:714 +msgid "Approve contact" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:356 -msgid "Register verification delay" +#: ../../Zotlabs/Module/Contactedit.php:417 +#: ../../Zotlabs/Module/Connedit.php:717 +msgid "Their" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:359 -msgid "Time to wait before a registration can be verified" +#: ../../Zotlabs/Module/Contactedit.php:418 +#: ../../Zotlabs/Module/Connedit.php:718 +msgid "My" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:378 -msgid "Register verification expiration time" +#: ../../Zotlabs/Module/Contactedit.php:426 +msgid "Roles" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:381 -msgid "Time before an unverified registration will expire" +#: ../../Zotlabs/Module/Contactedit.php:427 +msgid "Compare permissions" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:398 -#: ../../Zotlabs/Module/Admin/Accounts.php:307 -#: ../../Zotlabs/Module/Admin/Security.php:106 -#: ../../Zotlabs/Module/Admin/Channels.php:167 -#: ../../Zotlabs/Module/Admin/Addons.php:346 -#: ../../Zotlabs/Module/Admin/Addons.php:444 -#: ../../Zotlabs/Module/Admin/Themes.php:138 -#: ../../Zotlabs/Module/Admin/Themes.php:172 -#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../Zotlabs/Module/Admin.php:142 -msgid "Administration" +#: ../../Zotlabs/Module/Contactedit.php:428 +msgid "Permission" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:401 ../../Zotlabs/Widget/Admin.php:27 -msgid "Site" +#: ../../Zotlabs/Module/Contactedit.php:431 +#: ../../Zotlabs/Module/Connedit.php:572 +msgid "Affinity" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:404 -msgid "File upload" +#: ../../Zotlabs/Module/Contactedit.php:432 +msgid "Content filter" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:405 -msgid "Policies" +#: ../../Zotlabs/Module/Contactedit.php:442 +msgid "Contact updated" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:410 -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:593 -msgid "Site name" +#: ../../Zotlabs/Module/Contactedit.php:442 +msgid "Contact update failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:412 -msgid "Banner/Logo" +#: ../../Zotlabs/Module/Contactedit.php:448 +#: ../../Zotlabs/Module/Connections.php:357 +msgid "Approve connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:412 -msgid "Unfiltered HTML/CSS/JS is allowed" +#: ../../Zotlabs/Module/Contactedit.php:520 +msgid "Block status updated" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:413 -msgid "Administrator Information" +#: ../../Zotlabs/Module/Contactedit.php:524 +msgid "Block failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:413 -msgid "" -"Contact information for site administrators. Displayed on siteinfo page. " -"BBCode can be used here" +#: ../../Zotlabs/Module/Contactedit.php:535 +msgid "Ignore status updated" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:414 -msgid "" -"Publicly visible description of this site. Displayed on siteinfo page. " -"BBCode can be used here" +#: ../../Zotlabs/Module/Contactedit.php:539 +msgid "Ignore failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:415 -msgid "System theme" +#: ../../Zotlabs/Module/Contactedit.php:550 +msgid "Archive status updated" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:415 -msgid "" -"Default system theme - may be over-ridden by user profiles - <a href='#' " -"id='cnftheme'>change theme settings</a>" +#: ../../Zotlabs/Module/Contactedit.php:554 +msgid "Archive failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:418 -msgid "Allow Feeds as Connections" +#: ../../Zotlabs/Module/Contactedit.php:565 +msgid "Hide status updated" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:418 -msgid "(Heavy system resource usage)" +#: ../../Zotlabs/Module/Contactedit.php:569 +msgid "Hide failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:419 -msgid "Maximum image size" +#: ../../Zotlabs/Module/Contactedit.php:604 +msgid "Contact removed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:419 -msgid "" -"Maximum size in bytes of uploaded images. Default is 0, which means no " -"limits." +#: ../../Zotlabs/Module/Contactedit.php:608 +msgid "Delete failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:420 -msgid "Minimum age" +#: ../../Zotlabs/Module/Contactedit.php:619 +msgid "Refetch contact info" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:420 -msgid "Minimum age (in years) for who may register on this site." +#: ../../Zotlabs/Module/Contactedit.php:623 +#: ../../Zotlabs/Module/Connedit.php:508 +#: ../../Zotlabs/Module/Admin/Accounts.php:222 +msgid "Unblock" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:421 -msgid "Which best describes the types of account offered by this hub?" +#: ../../Zotlabs/Module/Contactedit.php:623 +#: ../../Zotlabs/Module/Connedit.php:508 +#: ../../Zotlabs/Module/Admin/Accounts.php:221 +msgid "Block" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:421 -msgid "This is displayed on the public server site list." +#: ../../Zotlabs/Module/Contactedit.php:625 +#: ../../Zotlabs/Module/Connedit.php:511 +msgid "Block (or Unblock) all communications with this connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:427 -msgid "Register text" +#: ../../Zotlabs/Module/Contactedit.php:626 +#: ../../Zotlabs/Module/Connedit.php:512 +msgid "This connection is blocked!" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:429 -msgid "This text will be displayed prominently at the registration page" +#: ../../Zotlabs/Module/Contactedit.php:630 +#: ../../Zotlabs/Module/Connedit.php:516 +msgid "Unignore" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:433 -msgid "Does this site allow new member registration?" +#: ../../Zotlabs/Module/Contactedit.php:630 +#: ../../Zotlabs/Module/Connedit.php:516 +#: ../../Zotlabs/Module/Connections.php:360 +msgid "Ignore" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:440 -msgid "Configure the registration open days/hours" +#: ../../Zotlabs/Module/Contactedit.php:632 +#: ../../Zotlabs/Module/Connedit.php:519 +msgid "Ignore (or Unignore) all inbound communications from this connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:442 -msgid "Empty or '-:-' value will keep registration open 24/7 (default)" +#: ../../Zotlabs/Module/Contactedit.php:633 +#: ../../Zotlabs/Module/Connedit.php:520 +msgid "This connection is ignored!" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:443 -msgid "" -"Weekdays and hours must be separated by colon ':', From-To ranges with a " -"dash `-` example: 1:800-1200" +#: ../../Zotlabs/Module/Contactedit.php:637 +#: ../../Zotlabs/Module/Connedit.php:524 +msgid "Unarchive" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:444 -msgid "" -"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 " -"2:900-1700" +#: ../../Zotlabs/Module/Contactedit.php:637 +#: ../../Zotlabs/Module/Connedit.php:524 +msgid "Archive" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:445 +#: ../../Zotlabs/Module/Contactedit.php:639 +#: ../../Zotlabs/Module/Connedit.php:527 msgid "" -"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 " -"or 1-2,4-5:900-1700" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:446 -msgid "Advanced examples:" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:446 -#: ../../Zotlabs/Module/Settings/Channel.php:184 -msgid "or" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:447 -msgid "Check your configuration" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:451 -msgid "Max account registrations per day" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:453 -msgid "Unlimited if zero or no value - default 50" +"Archive (or Unarchive) this connection - mark channel dead but keep content" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:457 -msgid "Max account registrations from same IP" +#: ../../Zotlabs/Module/Contactedit.php:640 +#: ../../Zotlabs/Module/Connedit.php:528 +msgid "This connection is archived!" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:459 -msgid "Unlimited if zero or no value - default 3" +#: ../../Zotlabs/Module/Contactedit.php:644 +#: ../../Zotlabs/Module/Connedit.php:532 +msgid "Unhide" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:465 -msgid "Auto channel create" +#: ../../Zotlabs/Module/Contactedit.php:644 +#: ../../Zotlabs/Module/Connedit.php:532 +msgid "Hide" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:467 -msgid "" -"If disabled the channel will be created in a separate step during the " -"registration process" +#: ../../Zotlabs/Module/Contactedit.php:646 +#: ../../Zotlabs/Module/Connedit.php:535 +msgid "Hide or Unhide this connection from your other connections" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:471 -msgid "Require invite code" +#: ../../Zotlabs/Module/Contactedit.php:647 +#: ../../Zotlabs/Module/Connedit.php:536 +msgid "This connection is hidden!" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:476 -msgid "Allow invite code" +#: ../../Zotlabs/Module/Contactedit.php:653 +#: ../../Zotlabs/Module/Connedit.php:543 +msgid "Delete this connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:481 -msgid "Require email address" +#: ../../Zotlabs/Module/Search.php:251 +#, php-format +msgid "Items tagged with: %s" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:483 -msgid "The provided email address will be verified (recommended)" +#: ../../Zotlabs/Module/Search.php:253 +#, php-format +msgid "Search results for: %s" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:487 -msgid "Abandon account after x days" +#: ../../Zotlabs/Module/Register.php:113 +msgid "Email address required" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:489 -msgid "" -"Will not waste system resources polling external sites for abandonded " -"accounts. Enter 0 for no time limit." +#: ../../Zotlabs/Module/Register.php:157 +msgid "No password provided" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:494 -msgid "Site homepage to show visitors (default: login box)" +#: ../../Zotlabs/Module/Register.php:180 +msgid "Terms of Service not accepted" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:494 -msgid "" -"example: 'pubstream' to show public stream, 'page/sys/home' to show a system " -"webpage called 'home' or 'include:home.html' to include a file." +#: ../../Zotlabs/Module/Register.php:242 +msgid "Invitation code succesfully applied" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:495 -msgid "Preserve site homepage URL" +#: ../../Zotlabs/Module/Register.php:262 +msgid "Invitation not in time or too late" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:495 -msgid "" -"Present the site homepage in a frame at the original location instead of " -"redirecting" +#: ../../Zotlabs/Module/Register.php:268 +msgid "Invitation email failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:496 -msgid "Allowed friend domains" +#: ../../Zotlabs/Module/Register.php:276 +msgid "Invitation code failed" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:496 -msgid "" -"Comma separated list of domains which are allowed to establish friendships " -"with this site. Wildcards are accepted. Empty to allow any domains" +#: ../../Zotlabs/Module/Register.php:283 +msgid "Invitations are not available" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:497 -msgid "Force publish" +#: ../../Zotlabs/Module/Register.php:293 +msgid "Registration on this hub is by invitation only" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:497 -msgid "" -"Check to force all profiles on this site to be listed in the site directory" +#: ../../Zotlabs/Module/Register.php:400 +msgid "New register request" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:498 -msgid "Enable public stream" +#: ../../Zotlabs/Module/Register.php:418 +msgid "Error creating dId A" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:498 -msgid "Enable the public stream. Warning: this content is unmoderated" +#: ../../Zotlabs/Module/Register.php:437 +msgid "Registration on this hub is disabled." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:499 -msgid "Site only public stream" +#: ../../Zotlabs/Module/Register.php:446 +msgid "Why do you want to join this hub?" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:499 -msgid "Restrict the public stream to content originating at this site" +#: ../../Zotlabs/Module/Register.php:446 +msgid "This will help to review your registration" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:500 -msgid "Allow anybody on the internet to access the public streams" +#: ../../Zotlabs/Module/Register.php:447 +msgid "Registration on this hub is by approval only." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:500 -msgid "Disable to require authentication before viewing" +#: ../../Zotlabs/Module/Register.php:448 +msgid "Register at another affiliated hub in case when prefered" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:501 -msgid "Only import Public stream posts with this text" +#: ../../Zotlabs/Module/Register.php:461 +msgid "Registration on this hub is by invitation only." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:502 -msgid "Do not import Public stream posts with this text" +#: ../../Zotlabs/Module/Register.php:462 +msgid "Register at another affiliated hub" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:505 -msgid "Login on Homepage" +#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29 +msgid "Terms of Service" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:505 -msgid "" -"Present a login box to visitors on the home page if no other content has " -"been configured." +#: ../../Zotlabs/Module/Register.php:482 +#, php-format +msgid "I accept the %s for this website" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:506 -msgid "Enable context help" +#: ../../Zotlabs/Module/Register.php:489 +#, php-format +msgid "I am over %s years of age and accept the %s for this website" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:506 -msgid "" -"Display contextual help for the current page when the help button is pressed." +#: ../../Zotlabs/Module/Register.php:499 +msgid "Your email address" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:508 -msgid "Reply-to email address for system generated email." +#: ../../Zotlabs/Module/Register.php:506 +msgid "Choose a password" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:509 -msgid "Sender (From) email address for system generated email." +#: ../../Zotlabs/Module/Register.php:507 +msgid "Please re-enter your password" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:510 -msgid "Name of email sender for system generated email." +#: ../../Zotlabs/Module/Register.php:509 +msgid "Please enter your invitation code" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:512 -msgid "Directory Server URL" +#: ../../Zotlabs/Module/Register.php:511 +msgid "Your name" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:512 -msgid "Default directory server" +#: ../../Zotlabs/Module/Register.php:511 +msgid "Real name is preferred" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:514 -msgid "Enable SSE Notifications" +#: ../../Zotlabs/Module/Register.php:513 +#: ../../Zotlabs/Module/New_channel.php:178 +msgid "Choose a short nickname" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:514 +#: ../../Zotlabs/Module/Register.php:513 msgid "" -"If disabled, traditional polling will be used. Warning: this setting might " -"not be suited for shared hosting" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:516 -msgid "Proxy user" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Site.php:517 -msgid "Proxy URL" +"Your nickname will be used to create an easy to remember channel address" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:518 -msgid "Network timeout" +#: ../../Zotlabs/Module/Register.php:521 +#: ../../Zotlabs/Module/Admin/Site.php:404 +msgid "Registration" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:518 -msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." +#: ../../Zotlabs/Module/Register.php:529 +msgid "I have an invite code" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:519 -msgid "Delivery interval" +#: ../../Zotlabs/Module/Register.php:576 +msgid "" +"This site has exceeded the number of allowed daily account registrations." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:519 -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." +#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69 +msgid "This setting requires special processing and editing has been blocked." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:520 -msgid "Deliveries per process" +#: ../../Zotlabs/Module/Pconfig.php:58 +msgid "Configuration Editor" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:520 +#: ../../Zotlabs/Module/Pconfig.php:59 msgid "" -"Number of deliveries to attempt in a single operating system process. Adjust " -"if necessary to tune system performance. Recommend: 1-5." +"Warning: Changing some settings could render your channel inoperable. Please " +"leave this page unless you are comfortable with and knowledgeable about how " +"to correctly use this feature." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:522 -msgid "Poll interval" +#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56 +msgid "App installed." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:522 -msgid "" -"Delay background polling processes by this many seconds to reduce system " -"load. If 0, use delivery interval." +#: ../../Zotlabs/Module/Appman.php:49 +msgid "Malformed app." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:523 -msgid "Path to ImageMagick convert program" +#: ../../Zotlabs/Module/Appman.php:208 +msgid "Embed code" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:523 -msgid "" -"If set, use this program to generate photo thumbnails for huge images ( > " -"4000 pixels in either dimension), otherwise memory exhaustion may occur. " -"Example: /usr/bin/convert" +#: ../../Zotlabs/Module/Appman.php:213 +msgid "Edit App" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:524 -msgid "Maximum Load Average" +#: ../../Zotlabs/Module/Appman.php:213 +msgid "Create App" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:524 -msgid "" -"Maximum system load before delivery and poll processes are deferred - " -"default 50." +#: ../../Zotlabs/Module/Appman.php:218 +msgid "Name of app" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:525 -msgid "Expiration period in days for imported (grid/network) content" +#: ../../Zotlabs/Module/Appman.php:219 +msgid "Location (URL) of app" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:525 -msgid "0 for no expiration of imported content" +#: ../../Zotlabs/Module/Appman.php:221 +msgid "Photo icon URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:526 -msgid "" -"Do not expire any posts which have comments less than this many days ago" +#: ../../Zotlabs/Module/Appman.php:221 +msgid "80 x 80 pixels - optional" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:527 -msgid "" -"Public servers: Optional landing (marketing) webpage for new registrants" +#: ../../Zotlabs/Module/Appman.php:222 +msgid "Categories (optional, comma separated list)" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:527 -#, php-format -msgid "Create this page first. Default is %s/register" +#: ../../Zotlabs/Module/Appman.php:223 +msgid "Version ID" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:528 -msgid "Page to display after creating a new channel" +#: ../../Zotlabs/Module/Appman.php:224 +msgid "Price of app" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:528 -msgid "Default: profiles" +#: ../../Zotlabs/Module/Appman.php:225 +msgid "Location (URL) to purchase app" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:529 -msgid "Optional: site location" +#: ../../Zotlabs/Module/Viewsrc.php:43 +msgid "item" msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:529 -msgid "Region or country" +#: ../../Zotlabs/Module/Item.php:253 ../../Zotlabs/Module/Pin.php:36 +msgid "Unable to locate original post." msgstr "" -#: ../../Zotlabs/Module/Admin/Site.php:614 -#: ../../Zotlabs/Module/Admin/Site.php:615 -msgid "Invalid 24h time value (hhmm/hmm)" +#: ../../Zotlabs/Module/Item.php:539 +msgid "Empty post discarded." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:19 -msgid "Update has been marked successful" +#: ../../Zotlabs/Module/Item.php:1010 +msgid "Duplicate post suppressed." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:32 -#, php-format -msgid "Verification of update %s failed. Check system logs." +#: ../../Zotlabs/Module/Item.php:1160 +msgid "System error. Post not saved." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:35 -#: ../../Zotlabs/Module/Admin/Dbsync.php:62 -#, php-format -msgid "Update %s was successfully applied." +#: ../../Zotlabs/Module/Item.php:1200 +msgid "Your comment is awaiting approval." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:39 -#, php-format -msgid "Verifying update %s did not return a status. Unknown if it succeeded." +#: ../../Zotlabs/Module/Item.php:1337 +msgid "Unable to obtain post information from database." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:42 +#: ../../Zotlabs/Module/Item.php:1344 #, php-format -msgid "Update %s does not contain a verification function." +msgid "You have reached your limit of %1$.0f top level posts." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:46 -#: ../../Zotlabs/Module/Admin/Dbsync.php:69 +#: ../../Zotlabs/Module/Item.php:1351 #, php-format -msgid "Update function %s could not be found." +msgid "You have reached your limit of %1$.0f webpages." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:59 -#, php-format -msgid "Executing update procedure %s failed. Check system logs." +#: ../../Zotlabs/Module/Achievements.php:38 +msgid "Some blurb about what to do when you're new here" msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:66 -#, php-format -msgid "" -"Update %s did not return a status. It cannot be determined if it was " -"successful." +#: ../../Zotlabs/Module/Oexchange.php:27 +msgid "Unable to find your hub." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:87 -msgid "Failed Updates" +#: ../../Zotlabs/Module/Oexchange.php:41 +msgid "Post successful." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:89 -msgid "Mark success (if update was manually applied)" +#: ../../Zotlabs/Module/Connedit.php:171 +msgid "Connection updated." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:90 -msgid "Attempt to verify this update if a verification procedure exists" +#: ../../Zotlabs/Module/Connedit.php:173 +msgid "Failed to update connection record." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:91 -msgid "Attempt to execute this update step automatically" +#: ../../Zotlabs/Module/Connedit.php:320 +msgid "Could not access address book record." msgstr "" -#: ../../Zotlabs/Module/Admin/Dbsync.php:96 -msgid "No failed updates." +#: ../../Zotlabs/Module/Connedit.php:368 +msgid "Refresh failed - channel is currently unavailable." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:128 -#, php-format -msgid "%s account blocked/unblocked" -msgid_plural "%s account blocked/unblocked" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Module/Admin/Accounts.php:135 -#, php-format -msgid "%s account deleted" -msgid_plural "%s accounts deleted" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Module/Admin/Accounts.php:171 -msgid "Account not found" +#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391 +#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409 +#: ../../Zotlabs/Module/Connedit.php:422 +msgid "Unable to set address book parameters." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:192 -#, php-format -msgid "Account '%s' blocked" +#: ../../Zotlabs/Module/Connedit.php:441 +msgid "Connection has been removed." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:200 +#: ../../Zotlabs/Module/Connedit.php:483 #, php-format -msgid "Account '%s' unblocked" +msgid "View %s's profile" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:240 -msgid "Unverified" +#: ../../Zotlabs/Module/Connedit.php:487 +msgid "Refresh Permissions" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:243 -msgid "Expired" +#: ../../Zotlabs/Module/Connedit.php:490 +msgid "Fetch updated permissions" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:308 -#: ../../Zotlabs/Module/Admin/Accounts.php:327 -#: ../../Zotlabs/Module/Admin.php:97 ../../Zotlabs/Widget/Admin.php:28 -msgid "Accounts" +#: ../../Zotlabs/Module/Connedit.php:494 +msgid "Refresh Photo" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:310 -msgid "Show verified registrations" +#: ../../Zotlabs/Module/Connedit.php:497 +msgid "Fetch updated photo" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:310 -msgid "Show all registrations" +#: ../../Zotlabs/Module/Connedit.php:504 +msgid "View recent posts and comments" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:312 -msgid "Select toggle" +#: ../../Zotlabs/Module/Connedit.php:550 +msgid "Fetch Vcard" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:313 -msgid "Deny selected" +#: ../../Zotlabs/Module/Connedit.php:553 +msgid "Fetch electronic calling card for this connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:314 -msgid "Approve selected" +#: ../../Zotlabs/Module/Connedit.php:575 +msgid "Open Set Affinity section by default" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:315 -msgid "All registrations" +#: ../../Zotlabs/Module/Connedit.php:612 +msgid "Filter" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:315 -msgid "Verified registrations waiting for approval" +#: ../../Zotlabs/Module/Connedit.php:615 +msgid "Open Custom Filter section by default" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:316 -msgid "Request date" +#: ../../Zotlabs/Module/Connedit.php:626 +msgid "Set Affinity" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:316 -msgid "Requests" +#: ../../Zotlabs/Module/Connedit.php:629 +msgid "Set Profile" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:317 -msgid "No registrations available" +#: ../../Zotlabs/Module/Connedit.php:632 +msgid "Set Affinity & Profile" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:317 -msgid "No verified registrations available" +#: ../../Zotlabs/Module/Connedit.php:685 +#, php-format +msgid "Contact: %s" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:319 -#: ../../Zotlabs/Module/Authorize.php:33 -msgid "Deny" +#: ../../Zotlabs/Module/Connedit.php:686 +#: ../../Zotlabs/Module/Connections.php:404 +msgid "Contact role" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:323 -msgid "Verified" +#: ../../Zotlabs/Module/Connedit.php:687 +msgid "Manage contact roles" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:324 -msgid "Not yet verified" +#: ../../Zotlabs/Module/Connedit.php:694 +msgid "This contacts's primary address is" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:329 -msgid "ID" +#: ../../Zotlabs/Module/Connedit.php:695 +msgid "Available locations:" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:331 -msgid "All channels" +#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259 +msgid "" +"The permissions indicated on this page will be applied to all new " +"connections." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:332 -msgid "Register date" +#: ../../Zotlabs/Module/Connedit.php:710 +msgid "Contact Pending Approval" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:333 -msgid "Last login" +#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Module/Defperms.php:261 +#: ../../Zotlabs/Module/Permcats.php:253 +msgid "inherited" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:334 -msgid "Expires" +#: ../../Zotlabs/Module/Connedit.php:715 +#, php-format +msgid "" +"Please choose the profile you would like to display to %s when viewing your " +"profile securely." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:335 -#: ../../Zotlabs/Module/Admin/Account_edit.php:72 -msgid "Service class" +#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266 +msgid "Individual Permissions" msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:337 +#: ../../Zotlabs/Module/Connedit.php:721 msgid "" -"Selected accounts will be deleted!\\n\\nEverything these accounts had posted " -"on this site will be permanently deleted!\\n\\nAre you sure?" +"Some permissions may be inherited from your channel's <a " +"href=\"settings\"><strong>privacy settings</strong></a>, which have higher " +"priority than individual settings. You can <strong>not</strong> change those " +"settings here." msgstr "" -#: ../../Zotlabs/Module/Admin/Accounts.php:338 +#: ../../Zotlabs/Module/Connedit.php:722 msgid "" -"The account {0} will be deleted!\\n\\nEverything this account has posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Accounts.php:347 -msgid "Message" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Queueworker.php:66 -msgid "Max queueworker threads" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Queueworker.php:68 -msgid "Minimum 4, default 4" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Queueworker.php:78 -msgid "Assume workers dead after" +"Some permissions may be inherited from your channel's <a " +"href=\"settings\"><strong>privacy settings</strong></a>, which have higher " +"priority than individual settings. You can change those settings here but " +"they wont have any impact unless the inherited setting changes." msgstr "" -#: ../../Zotlabs/Module/Admin/Queueworker.php:80 -msgid "Minimum 120, default 300 seconds" +#: ../../Zotlabs/Module/Connedit.php:723 +msgid "Last update:" msgstr "" -#: ../../Zotlabs/Module/Admin/Queueworker.php:92 -msgid "Pause before starting next task" +#: ../../Zotlabs/Module/Connedit.php:731 +msgid "Details" msgstr "" -#: ../../Zotlabs/Module/Admin/Queueworker.php:94 -msgid "Minimum 100, default 100 microseconds" +#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1369 +msgid "Organisation" msgstr "" -#: ../../Zotlabs/Module/Admin/Queueworker.php:103 -msgid "Automatically adjust pause before starting next task" +#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1371 +msgid "Phone" msgstr "" -#: ../../Zotlabs/Module/Admin/Queueworker.php:112 -msgid "Queueworker Settings" +#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1373 +msgid "Instant messenger" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:29 -#, php-format -msgid "Password changed for account %d." +#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1374 +msgid "Website" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:46 -msgid "Account settings updated." +#: ../../Zotlabs/Module/Connedit.php:739 ../../Zotlabs/Module/Locs.php:122 +#: ../../Zotlabs/Module/Admin/Channels.php:182 +#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Cdav.php:1375 +msgid "Address" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:68 -msgid "Account Edit" +#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1376 +msgid "Note" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:69 -msgid "New Password" +#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1381 +msgid "Add Contact" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:70 -msgid "New Password again" +#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1382 +msgid "Add Field" msgstr "" -#: ../../Zotlabs/Module/Admin/Account_edit.php:71 -msgid "Account language (for emails)" +#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1387 +msgid "P.O. Box" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:97 -msgid "" -"By default, unfiltered HTML is allowed in embedded media. This is inherently " -"insecure." +#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1388 +msgid "Additional" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:100 -msgid "" -"The recommended setting is to only allow unfiltered HTML from the following " -"sites:" +#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1389 +msgid "Street" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:101 -msgid "" -"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/" -"<br />https://vimeo.com/<br />https://soundcloud.com/<br />" +#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1390 +msgid "Locality" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:102 -msgid "" -"All other embedded content will be filtered, <strong>unless</strong> " -"embedded content from that site is explicitly blocked." +#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1391 +msgid "Region" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:107 -#: ../../Zotlabs/Widget/Admin.php:30 -msgid "Security" +#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1392 +msgid "ZIP Code" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:109 -msgid "Block public" +#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:772 +#: ../../Zotlabs/Module/Cdav.php:1393 +msgid "Country" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:109 -msgid "" -"Check to block public access to all otherwise public personal pages on this " -"site unless you are currently authenticated." +#: ../../Zotlabs/Module/Defperms.php:252 +msgid "Connection Default Permissions" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:110 -msgid "Provide a cloud root directory" +#: ../../Zotlabs/Module/Defperms.php:253 +msgid "Apply these permissions automatically" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:110 +#: ../../Zotlabs/Module/Defperms.php:253 msgid "" -"The cloud root directory lists all channel names which provide public files" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Security.php:111 -msgid "Show total disk space available to cloud uploads" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Security.php:112 -msgid "Set \"Transport Security\" HTTP header" +"If enabled, connection requests will be approved without your interaction" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:113 -msgid "Set \"Content Security Policy\" HTTP header" +#: ../../Zotlabs/Module/Defperms.php:254 +msgid "Permission role" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:114 -msgid "Allowed email domains" +#: ../../Zotlabs/Module/Defperms.php:255 +msgid "Add permission role" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:114 -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" +#: ../../Zotlabs/Module/Defperms.php:260 +msgid "Automatic approval settings" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:115 -msgid "Not allowed email domains" +#: ../../Zotlabs/Module/Defperms.php:263 +msgid "My Settings" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:115 +#: ../../Zotlabs/Module/Defperms.php:267 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 "" - -#: ../../Zotlabs/Module/Admin/Security.php:116 -msgid "Allow communications only from these sites" +"Some individual permissions may have been preset or locked based on your " +"channel type and privacy settings." msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:116 +#: ../../Zotlabs/Module/Suggest.php:52 msgid "" -"One site per line. Leave empty to allow communication from anywhere by " -"default" -msgstr "" - -#: ../../Zotlabs/Module/Admin/Security.php:117 -msgid "Block communications from these sites" +"No suggestions available. If this is a new site, please try again in 24 " +"hours." msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:118 -msgid "Allow communications only from these channels" +#: ../../Zotlabs/Module/Follow.php:75 +msgid "Connection added." msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:118 -msgid "" -"One channel (hash) per line. Leave empty to allow from any channel by default" +#: ../../Zotlabs/Module/Regmod.php:15 +msgid "Please login." msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:119 -msgid "Block communications from these channels" +#: ../../Zotlabs/Module/Directory.php:124 +msgid "No default suggestions were found." msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:120 -msgid "Only allow embeds from secure (SSL) websites and links." +#: ../../Zotlabs/Module/Directory.php:292 +msgid "Gender: " msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:121 -msgid "Allow unfiltered embedded HTML content only from these domains" +#: ../../Zotlabs/Module/Directory.php:294 +msgid "Status: " msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:121 -msgid "One site per line. By default embedded content is filtered." +#: ../../Zotlabs/Module/Directory.php:296 +msgid "Homepage: " msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:122 -msgid "Block embedded HTML from these domains" +#: ../../Zotlabs/Module/Directory.php:357 +msgid "Description:" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:123 -msgid "Allow SVG thumbnails in file browser" +#: ../../Zotlabs/Module/Directory.php:359 +msgid "Unsafe" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:123 -msgid "WARNING: SVG images may contain malicious code." +#: ../../Zotlabs/Module/Directory.php:362 +msgid "Spam" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:124 -msgid "Allow embedded (inline) PDF files" +#: ../../Zotlabs/Module/Directory.php:372 +msgid "Public Forum:" msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:126 -msgid "Additional trusted directory server URLs" +#: ../../Zotlabs/Module/Directory.php:375 +msgid "Keywords: " msgstr "" -#: ../../Zotlabs/Module/Admin/Security.php:126 -msgid "" -"Accept directory flags (spam, nsfw) from those servers. One per line like " -"https://example.tld" +#: ../../Zotlabs/Module/Directory.php:378 +msgid "Don't suggest" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:28 -#: ../../Zotlabs/Module/Admin/Channels.php:80 -msgid "Channel not found" +#: ../../Zotlabs/Module/Directory.php:380 +msgid "Common connections (estimated):" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:48 -#, php-format -msgid "%s channel censored/uncensored" -msgid_plural "%s channels censored/uncensored" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Module/Admin/Channels.php:57 -#, php-format -msgid "%s channel code allowed/disallowed" -msgid_plural "%s channels code allowed/disallowed" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Module/Admin/Channels.php:63 -#, php-format -msgid "%s channel deleted" -msgid_plural "%s channels deleted" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Module/Admin/Channels.php:90 -#, php-format -msgid "Channel '%s' deleted" +#: ../../Zotlabs/Module/Directory.php:430 +msgid "Global Directory" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:109 -#, php-format -msgid "Channel '%s' censored" +#: ../../Zotlabs/Module/Directory.php:430 +msgid "Local Directory" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:109 -#, php-format -msgid "Channel '%s' uncensored" +#: ../../Zotlabs/Module/Directory.php:436 +msgid "Finding:" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:120 -#, php-format -msgid "Channel '%s' code allowed" +#: ../../Zotlabs/Module/Directory.php:441 +msgid "next page" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:120 -#, php-format -msgid "Channel '%s' code disallowed" +#: ../../Zotlabs/Module/Directory.php:441 +msgid "previous page" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:170 -msgid "select all" +#: ../../Zotlabs/Module/Directory.php:442 +msgid "Sort options" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:172 -msgid "Censor" +#: ../../Zotlabs/Module/Directory.php:443 +msgid "Alphabetic" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:173 -msgid "Uncensor" +#: ../../Zotlabs/Module/Directory.php:444 +msgid "Reverse Alphabetic" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:174 -msgid "Allow Code" +#: ../../Zotlabs/Module/Directory.php:445 +msgid "Newest to Oldest" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:175 -msgid "Disallow Code" +#: ../../Zotlabs/Module/Directory.php:446 +msgid "Oldest to Newest" msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:180 -msgid "UID" +#: ../../Zotlabs/Module/Directory.php:464 +msgid "No entries (some entries may be hidden)." msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:184 +#: ../../Zotlabs/Module/Profile_photo.php:544 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?" +"This profile photo will be visible to anybody on the internet and may be " +"distributed to other websites." msgstr "" -#: ../../Zotlabs/Module/Admin/Channels.php:185 +#: ../../Zotlabs/Module/Profile_photo.php:544 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?" +"This profile photo will be visible only to channels with permission to view " +"this profile." msgstr "" -#: ../../Zotlabs/Module/Admin/Features.php:56 -#, php-format -msgid "Lock feature %s" +#: ../../Zotlabs/Module/Profile_photo.php:546 +msgid "Use Photo for Profile" msgstr "" -#: ../../Zotlabs/Module/Admin/Features.php:64 -msgid "Manage Additional Features" +#: ../../Zotlabs/Module/Profile_photo.php:546 +msgid "Change Profile Photo" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:294 -#, php-format -msgid "Plugin %s disabled." +#: ../../Zotlabs/Module/Profile_photo.php:548 +msgid "Reset to default" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:299 -#, php-format -msgid "Plugin %s enabled." +#: ../../Zotlabs/Module/Profile_photo.php:562 +msgid "Select existing" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:315 -#: ../../Zotlabs/Module/Admin/Themes.php:111 -msgid "Disable" +#: ../../Zotlabs/Module/Profile_photo.php:584 +msgid "Done editing" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:318 -#: ../../Zotlabs/Module/Admin/Themes.php:113 -msgid "Enable" +#: ../../Zotlabs/Module/Authorize.php:17 +msgid "Unknown App" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:347 -#: ../../Zotlabs/Module/Admin/Addons.php:445 ../../Zotlabs/Widget/Admin.php:32 -msgid "Addons" +#: ../../Zotlabs/Module/Authorize.php:29 +msgid "Authorize" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:348 -#: ../../Zotlabs/Module/Admin/Themes.php:140 -msgid "Toggle" +#: ../../Zotlabs/Module/Authorize.php:30 +#, php-format +msgid "Do you authorize the app %s to access your channel data?" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:356 -#: ../../Zotlabs/Module/Admin/Themes.php:150 -msgid "Author: " +#: ../../Zotlabs/Module/Authorize.php:33 +#: ../../Zotlabs/Module/Admin/Accounts.php:219 +msgid "Deny" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:357 -#: ../../Zotlabs/Module/Admin/Themes.php:151 -msgid "Maintainer: " +#: ../../Zotlabs/Module/Viewconnections.php:65 +msgid "No connections." msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:358 -msgid "Minimum project version: " +#: ../../Zotlabs/Module/Viewconnections.php:105 +#, php-format +msgid "Visit %s's profile [%s]" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:359 -msgid "Maximum project version: " +#: ../../Zotlabs/Module/Viewconnections.php:135 +msgid "View Connections" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:360 -msgid "Minimum PHP version: " +#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97 +msgid "Authorize application connection" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:361 -msgid "Compatible Server Roles: " +#: ../../Zotlabs/Module/Api.php:77 +msgid "Return to your app and insert this Security Code:" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:362 -msgid "Requires: " +#: ../../Zotlabs/Module/Api.php:87 +msgid "Please login to continue." msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:363 -#: ../../Zotlabs/Module/Admin/Addons.php:450 -msgid "Disabled - version incompatibility" +#: ../../Zotlabs/Module/Api.php:99 +msgid "" +"Do you want to authorize this application to access your posts and contacts, " +"and/or create new posts for you?" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:419 -msgid "Enter the public git repository URL of the addon repo." +#: ../../Zotlabs/Module/Pdledit_gui.php:119 +msgid "Layout not found" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:420 -msgid "Addon repo git URL" +#: ../../Zotlabs/Module/Pdledit_gui.php:127 +msgid "This template does not support pdledi_gui (no content regions defined)" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:421 -msgid "Custom repo name" +#: ../../Zotlabs/Module/Pdledit_gui.php:404 +msgid "Main page content" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:421 -msgid "(optional)" +#: ../../Zotlabs/Module/Pdledit_gui.php:405 +msgid "The main page content can not be edited!" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:422 -msgid "Download Addon Repo" +#: ../../Zotlabs/Module/Home.php:105 +#, php-format +msgid "Welcome to %s" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:429 -msgid "Install new repo" +#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98 +msgid "Tag removed" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:453 -msgid "Manage Repos" +#: ../../Zotlabs/Module/Tagrm.php:123 +msgid "Remove Item Tag" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:454 -msgid "Installed Addon Repositories" +#: ../../Zotlabs/Module/Tagrm.php:125 +msgid "Select a tag to remove: " msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:455 -msgid "Install a New Addon Repository" +#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:187 +#: ../../Zotlabs/Module/Editlayout.php:128 +msgid "Layout Name" msgstr "" -#: ../../Zotlabs/Module/Admin/Addons.php:462 -msgid "Switch branch" +#: ../../Zotlabs/Module/Layouts.php:132 ../../Zotlabs/Module/Editlayout.php:129 +msgid "Layout Description (Optional)" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:45 -msgid "Queue Statistics" +#: ../../Zotlabs/Module/Layouts.php:184 +msgid "Comanche page description language help" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:46 -msgid "Total Entries" +#: ../../Zotlabs/Module/Layouts.php:188 +msgid "Layout Description" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:47 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2668 -msgid "Priority" +#: ../../Zotlabs/Module/Layouts.php:193 +msgid "Download PDL file" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:48 -msgid "Destination URL" +#: ../../Zotlabs/Module/Common.php:14 +msgid "No channel." msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:49 -msgid "Mark hub permanently offline" +#: ../../Zotlabs/Module/Common.php:45 +msgid "No connections in common." msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:50 -msgid "Retry delivery to this hub" +#: ../../Zotlabs/Module/Common.php:65 +msgid "View Common Connections" msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:51 -msgid "Empty queue for this hub" +#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65 +msgid "Location not found." msgstr "" -#: ../../Zotlabs/Module/Admin/Queue.php:52 -msgid "Last known contact" +#: ../../Zotlabs/Module/Locs.php:74 +msgid "Location lookup failed." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:90 -msgid "New Profile Field" +#: ../../Zotlabs/Module/Locs.php:78 +msgid "" +"Please select another location to become primary before removing the primary " +"location." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:91 -#: ../../Zotlabs/Module/Admin/Profs.php:111 -msgid "Field nickname" +#: ../../Zotlabs/Module/Locs.php:106 +msgid "Syncing locations" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:91 -#: ../../Zotlabs/Module/Admin/Profs.php:111 -msgid "System name of field" +#: ../../Zotlabs/Module/Locs.php:115 +msgid "No locations found." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:92 -#: ../../Zotlabs/Module/Admin/Profs.php:112 -msgid "Input type" +#: ../../Zotlabs/Module/Locs.php:120 +msgid "Manage Channel Locations" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:93 -#: ../../Zotlabs/Module/Admin/Profs.php:113 -msgid "Field Name" +#: ../../Zotlabs/Module/Locs.php:124 ../../Zotlabs/Module/Menu.php:177 +msgid "Drop" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:93 -#: ../../Zotlabs/Module/Admin/Profs.php:113 -msgid "Label on profile pages" +#: ../../Zotlabs/Module/Locs.php:126 +msgid "Sync Now" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:94 -#: ../../Zotlabs/Module/Admin/Profs.php:114 -msgid "Help text" +#: ../../Zotlabs/Module/Locs.php:127 +msgid "Please wait several minutes between consecutive operations." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:94 -#: ../../Zotlabs/Module/Admin/Profs.php:114 -msgid "Additional info (optional)" +#: ../../Zotlabs/Module/Locs.php:128 +msgid "" +"When possible, drop a location by logging into that website/hub and removing " +"your channel." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:104 -msgid "Field definition not found" +#: ../../Zotlabs/Module/Locs.php:129 +msgid "Use this form to drop the location if the hub is no longer operating." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:110 -msgid "Edit Profile Field" +#: ../../Zotlabs/Module/Pubsites.php:27 +msgid "Public Hubs" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:169 ../../Zotlabs/Widget/Admin.php:36 -msgid "Profile Fields" +#: ../../Zotlabs/Module/Pubsites.php:30 +msgid "" +"The listed hubs allow public registration for the $Projectname network. All " +"hubs in the network are interlinked so membership on any of them conveys " +"membership in the network as a whole. Some hubs may require subscription or " +"provide tiered service plans. The hub itself <strong>may</strong> provide " +"additional details." msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:170 -msgid "Basic Profile Fields" +#: ../../Zotlabs/Module/Pubsites.php:36 +msgid "Hub URL" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:171 -msgid "Advanced Profile Fields" +#: ../../Zotlabs/Module/Pubsites.php:36 +msgid "Access Type" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:171 -msgid "(In addition to basic fields)" +#: ../../Zotlabs/Module/Pubsites.php:36 +msgid "Registration Policy" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:173 -msgid "All available fields" +#: ../../Zotlabs/Module/Pubsites.php:36 +msgid "Stats" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:174 -msgid "Custom Fields" +#: ../../Zotlabs/Module/Pubsites.php:36 +msgid "Software" msgstr "" -#: ../../Zotlabs/Module/Admin/Profs.php:178 -msgid "Create Custom Field" +#: ../../Zotlabs/Module/Pubsites.php:38 +msgid "Ratings" msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:27 -msgid "Theme settings updated." +#: ../../Zotlabs/Module/Pubsites.php:52 +msgid "Rate" msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:62 -msgid "No themes found." +#: ../../Zotlabs/Module/Changeaddr.php:35 +msgid "" +"Channel name changes are not allowed within 48 hours of changing the account " +"password." msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:132 -msgid "Screenshot" +#: ../../Zotlabs/Module/Changeaddr.php:77 +msgid "Change channel nickname/address" msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:139 -#: ../../Zotlabs/Module/Admin/Themes.php:173 ../../Zotlabs/Widget/Admin.php:33 -msgid "Themes" +#: ../../Zotlabs/Module/Changeaddr.php:78 +msgid "Any/all connections on other networks will be lost!" msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:178 -msgid "[Experimental]" +#: ../../Zotlabs/Module/Changeaddr.php:80 +msgid "New channel address" msgstr "" -#: ../../Zotlabs/Module/Admin/Themes.php:179 -msgid "[Unsupported]" +#: ../../Zotlabs/Module/Changeaddr.php:81 +msgid "Rename Channel" msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:29 -msgid "Log settings updated." +#: ../../Zotlabs/Module/Menu.php:68 +msgid "Unable to update menu." msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:84 ../../Zotlabs/Widget/Admin.php:54 -#: ../../Zotlabs/Widget/Admin.php:64 -msgid "Logs" +#: ../../Zotlabs/Module/Menu.php:79 +msgid "Unable to create menu." msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:86 -msgid "Clear" +#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174 +msgid "Menu Name" msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:92 -msgid "Debugging" +#: ../../Zotlabs/Module/Menu.php:161 +msgid "Unique name (not visible on webpage) - required" msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:93 -msgid "Log file" +#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175 +msgid "Menu Title" msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:93 -msgid "" -"Must be writable by web server. Relative to your top-level webserver " -"directory." +#: ../../Zotlabs/Module/Menu.php:162 +msgid "Visible on webpage - leave empty for no title" msgstr "" -#: ../../Zotlabs/Module/Admin/Logs.php:94 -msgid "Log level" +#: ../../Zotlabs/Module/Menu.php:163 +msgid "Allow Bookmarks" msgstr "" -#: ../../Zotlabs/Module/Attach_edit.php:118 -msgid "Can not copy folder into itself." +#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 +msgid "Menu may be used to store saved bookmarks" msgstr "" -#: ../../Zotlabs/Module/Attach_edit.php:131 -#, php-format -msgid "Can not move folder \"%s\" into itself." +#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225 +msgid "Submit and proceed" msgstr "" -#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:477 -msgid "Unable to locate original post." +#: ../../Zotlabs/Module/Menu.php:181 +msgid "Bookmarks allowed" msgstr "" -#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:456 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1693 -msgid "status" +#: ../../Zotlabs/Module/Menu.php:183 +msgid "Delete this menu" msgstr "" -#: ../../Zotlabs/Module/Subthread.php:125 -#, php-format -msgid "%1$s is following %2$s's %3$s" +#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219 +msgid "Edit menu contents" msgstr "" -#: ../../Zotlabs/Module/Subthread.php:127 -#, php-format -msgid "%1$s stopped following %2$s's %3$s" +#: ../../Zotlabs/Module/Menu.php:185 +msgid "Edit this menu" msgstr "" -#: ../../Zotlabs/Module/Attach.php:68 -msgid "Item not available." +#: ../../Zotlabs/Module/Menu.php:201 +msgid "Menu could not be deleted." msgstr "" -#: ../../Zotlabs/Module/Removeme.php:35 -msgid "" -"Channel removals are not allowed within 48 hours of changing the account " -"password." +#: ../../Zotlabs/Module/Menu.php:209 ../../Zotlabs/Module/Mitem.php:31 +msgid "Menu not found." msgstr "" -#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64 -#: ../../Zotlabs/Module/Settings/Channel.php:283 -msgid "Remove Channel" +#: ../../Zotlabs/Module/Menu.php:214 +msgid "Edit Menu" msgstr "" -#: ../../Zotlabs/Module/Removeme.php:61 -msgid "This channel will be permanently removed. " +#: ../../Zotlabs/Module/Menu.php:218 +msgid "Add or remove entries to this menu" msgstr "" -#: ../../Zotlabs/Module/Removeme.php:61 -msgid "This action can not be undone!" +#: ../../Zotlabs/Module/Menu.php:220 +msgid "Menu name" msgstr "" -#: ../../Zotlabs/Module/Rmagic.php:46 -msgid "Authentication failed." +#: ../../Zotlabs/Module/Menu.php:220 +msgid "Must be unique, only seen by you" msgstr "" -#: ../../Zotlabs/Module/Item.php:763 -msgid "Empty post discarded." +#: ../../Zotlabs/Module/Menu.php:221 +msgid "Menu title" msgstr "" -#: ../../Zotlabs/Module/Item.php:1207 -msgid "Duplicate post suppressed." +#: ../../Zotlabs/Module/Menu.php:221 +msgid "Menu title as seen by others" msgstr "" -#: ../../Zotlabs/Module/Item.php:1350 -msgid "System error. Post not saved." +#: ../../Zotlabs/Module/Menu.php:222 +msgid "Allow bookmarks" msgstr "" -#: ../../Zotlabs/Module/Item.php:1384 -msgid "Your comment is awaiting approval." +#: ../../Zotlabs/Module/Menu.php:232 ../../Zotlabs/Module/Xchan.php:41 +#: ../../Zotlabs/Module/Mitem.php:134 +msgid "Not found." msgstr "" -#: ../../Zotlabs/Module/Item.php:1520 -msgid "Unable to obtain post information from database." +#: ../../Zotlabs/Module/Admin/Accounts.php:71 +msgid "Account not found" msgstr "" -#: ../../Zotlabs/Module/Item.php:1527 +#: ../../Zotlabs/Module/Admin/Accounts.php:92 #, php-format -msgid "You have reached your limit of %1$.0f top level posts." +msgid "Account '%s' blocked" msgstr "" -#: ../../Zotlabs/Module/Item.php:1534 +#: ../../Zotlabs/Module/Admin/Accounts.php:100 #, php-format -msgid "You have reached your limit of %1$.0f webpages." -msgstr "" - -#: ../../Zotlabs/Module/Display.php:340 -msgid "Article" -msgstr "" - -#: ../../Zotlabs/Module/Display.php:384 -msgid "Item has been removed." -msgstr "" - -#: ../../Zotlabs/Module/Mitem.php:63 -msgid "Unable to create element." -msgstr "" - -#: ../../Zotlabs/Module/Mitem.php:87 -msgid "Unable to update menu element." +msgid "Account '%s' unblocked" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:103 -msgid "Unable to add menu element." +#: ../../Zotlabs/Module/Admin/Accounts.php:140 +msgid "Unverified" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246 -msgid "Menu Item Permissions" +#: ../../Zotlabs/Module/Admin/Accounts.php:143 +msgid "Expired" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247 -msgid "(click to open/close)" +#: ../../Zotlabs/Module/Admin/Accounts.php:207 +#: ../../Zotlabs/Module/Admin/Themes.php:138 +#: ../../Zotlabs/Module/Admin/Themes.php:172 +#: ../../Zotlabs/Module/Admin/Addons.php:124 +#: ../../Zotlabs/Module/Admin/Addons.php:191 +#: ../../Zotlabs/Module/Admin/Channels.php:167 +#: ../../Zotlabs/Module/Admin/Logs.php:83 +#: ../../Zotlabs/Module/Admin/Site.php:399 +#: ../../Zotlabs/Module/Admin/Security.php:106 +#: ../../Zotlabs/Module/Admin.php:142 +msgid "Administration" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191 -msgid "Link Name" +#: ../../Zotlabs/Module/Admin/Accounts.php:210 +msgid "Show verified registrations" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255 -msgid "Link or Submenu Target" +#: ../../Zotlabs/Module/Admin/Accounts.php:210 +msgid "Show all registrations" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:175 -msgid "Enter URL of the link or select a menu name to create a submenu" +#: ../../Zotlabs/Module/Admin/Accounts.php:212 +msgid "Select toggle" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256 -msgid "Use magic-auth if available" +#: ../../Zotlabs/Module/Admin/Accounts.php:213 +msgid "Deny selected" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257 -msgid "Open link in new window" +#: ../../Zotlabs/Module/Admin/Accounts.php:214 +msgid "Approve selected" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 -msgid "Order in list" +#: ../../Zotlabs/Module/Admin/Accounts.php:215 +msgid "All registrations" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258 -msgid "Higher numbers will sink to bottom of listing" +#: ../../Zotlabs/Module/Admin/Accounts.php:215 +msgid "Verified registrations waiting for approval" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:179 -msgid "Submit and finish" +#: ../../Zotlabs/Module/Admin/Accounts.php:216 +msgid "Request date" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:180 -msgid "Submit and continue" +#: ../../Zotlabs/Module/Admin/Accounts.php:216 +msgid "Requests" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:189 -msgid "Menu:" +#: ../../Zotlabs/Module/Admin/Accounts.php:217 +msgid "No registrations available" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:192 -msgid "Link Target" +#: ../../Zotlabs/Module/Admin/Accounts.php:217 +msgid "No verified registrations available" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:195 -msgid "Edit menu" +#: ../../Zotlabs/Module/Admin/Accounts.php:223 +msgid "Verified" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:198 -msgid "Edit element" +#: ../../Zotlabs/Module/Admin/Accounts.php:224 +msgid "Not yet verified" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:199 -msgid "Drop element" +#: ../../Zotlabs/Module/Admin/Accounts.php:229 +msgid "ID" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:200 -msgid "New element" +#: ../../Zotlabs/Module/Admin/Accounts.php:231 +msgid "All channels" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:201 -msgid "Edit this menu container" +#: ../../Zotlabs/Module/Admin/Accounts.php:232 +msgid "Register date" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:202 -msgid "Add menu element" +#: ../../Zotlabs/Module/Admin/Accounts.php:233 +msgid "Last login" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:203 -msgid "Delete this menu item" +#: ../../Zotlabs/Module/Admin/Accounts.php:234 +msgid "Expires" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:204 -msgid "Edit this menu item" +#: ../../Zotlabs/Module/Admin/Accounts.php:235 +#: ../../Zotlabs/Module/Admin/Account_edit.php:77 +msgid "Service class" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:222 -msgid "Menu item not found." +#: ../../Zotlabs/Module/Admin/Accounts.php:237 +msgid "" +"Selected accounts will be deleted!\\n\\nEverything these accounts had posted " +"on this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:235 -msgid "Menu item deleted." +#: ../../Zotlabs/Module/Admin/Accounts.php:238 +msgid "" +"The account {0} will be deleted!\\n\\nEverything this account has posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:237 -msgid "Menu item could not be deleted." +#: ../../Zotlabs/Module/Admin/Accounts.php:247 +msgid "Message" msgstr "" -#: ../../Zotlabs/Module/Mitem.php:244 -msgid "Edit Menu Element" -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:366 +#, php-format +msgid "%s account blocked/unblocked" +msgid_plural "%s account blocked/unblocked" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Mitem.php:254 -msgid "Link text" -msgstr "" +#: ../../Zotlabs/Module/Admin/Accounts.php:389 +#, php-format +msgid "%s account deleted" +msgid_plural "%s accounts deleted" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Email_validation.php:37 -msgid "Email Verification Required" +#: ../../Zotlabs/Module/Admin/Queueworker.php:66 +msgid "Max queueworker threads" msgstr "" -#: ../../Zotlabs/Module/Email_validation.php:38 -#, php-format -msgid "" -"A verification token was sent to your email address [%s]. Enter that token " -"here to complete the account verification step. Please allow a few minutes " -"for delivery, and check your spam folder if you do not see the message." +#: ../../Zotlabs/Module/Admin/Queueworker.php:68 +msgid "Minimum 4, default 4" msgstr "" -#: ../../Zotlabs/Module/Email_validation.php:39 -msgid "Resend Email" +#: ../../Zotlabs/Module/Admin/Queueworker.php:78 +msgid "Assume workers dead after" msgstr "" -#: ../../Zotlabs/Module/Email_validation.php:42 -msgid "Validation token" +#: ../../Zotlabs/Module/Admin/Queueworker.php:80 +msgid "Minimum 120, default 300 seconds" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:108 -msgid "No content available for year" +#: ../../Zotlabs/Module/Admin/Queueworker.php:92 +msgid "Pause before starting next task" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:171 -msgid "Export Channel" +#: ../../Zotlabs/Module/Admin/Queueworker.php:94 +msgid "Minimum 100, default 100 microseconds" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:173 -msgid "Export channel" +#: ../../Zotlabs/Module/Admin/Queueworker.php:103 +msgid "Automatically adjust pause before starting next task" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:174 -msgid "" -"This will export your identity and social graph into a file which can be " -"used to import your channel to a new hub." +#: ../../Zotlabs/Module/Admin/Queueworker.php:112 +msgid "Queueworker Settings" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:177 -msgid "Export content" +#: ../../Zotlabs/Module/Admin/Themes.php:27 +msgid "Theme settings updated." msgstr "" -#: ../../Zotlabs/Module/Uexport.php:178 -msgid "" -"This will export your posts, direct messages, articles and cards per month " -"stored into a zip file per year. Months with no posts will be dismissed." +#: ../../Zotlabs/Module/Admin/Themes.php:62 +msgid "No themes found." msgstr "" -#: ../../Zotlabs/Module/Uexport.php:180 -msgid "Export wikis" +#: ../../Zotlabs/Module/Admin/Themes.php:111 +#: ../../Zotlabs/Module/Admin/Addons.php:93 +msgid "Disable" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:181 -msgid "This will export your wikis and wiki pages." +#: ../../Zotlabs/Module/Admin/Themes.php:113 +#: ../../Zotlabs/Module/Admin/Addons.php:96 +msgid "Enable" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:183 -msgid "Export webpages" +#: ../../Zotlabs/Module/Admin/Themes.php:132 +msgid "Screenshot" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:184 -msgid "This will export your webpages and menus." +#: ../../Zotlabs/Module/Admin/Themes.php:140 +#: ../../Zotlabs/Module/Admin/Addons.php:126 +msgid "Toggle" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:186 -msgid "Export channel calendar" +#: ../../Zotlabs/Module/Admin/Themes.php:150 +#: ../../Zotlabs/Module/Admin/Addons.php:134 +msgid "Author: " msgstr "" -#: ../../Zotlabs/Module/Uexport.php:187 -msgid "" -"This will export your channel calendar events and associated items. CalDAV " -"calendars are not included." +#: ../../Zotlabs/Module/Admin/Themes.php:151 +#: ../../Zotlabs/Module/Admin/Addons.php:135 +msgid "Maintainer: " msgstr "" -#: ../../Zotlabs/Module/Uexport.php:189 -msgid "Export chatrooms" +#: ../../Zotlabs/Module/Admin/Themes.php:178 +msgid "[Experimental]" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:190 -msgid "This will export your chatrooms. Chat history is dismissed." +#: ../../Zotlabs/Module/Admin/Themes.php:179 +msgid "[Unsupported]" msgstr "" -#: ../../Zotlabs/Module/Uexport.php:192 +#: ../../Zotlabs/Module/Admin/Addons.php:72 #, php-format -msgid "" -"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</" -"a> on any site containing your channel." +msgid "Plugin %s disabled." msgstr "" -#: ../../Zotlabs/Module/Notifications.php:106 -#: ../../Zotlabs/Module/Notify.php:85 -msgid "No more system notifications." +#: ../../Zotlabs/Module/Admin/Addons.php:77 +#, php-format +msgid "Plugin %s enabled." msgstr "" -#: ../../Zotlabs/Module/Notifications.php:110 -#: ../../Zotlabs/Module/Notify.php:89 -msgid "System Notifications" +#: ../../Zotlabs/Module/Admin/Addons.php:136 +msgid "Minimum project version: " msgstr "" -#: ../../Zotlabs/Module/Notifications.php:111 -msgid "Mark all seen" +#: ../../Zotlabs/Module/Admin/Addons.php:137 +msgid "Maximum project version: " msgstr "" -#: ../../Zotlabs/Module/Sharedwithme.php:106 -msgid "Files: shared with me" +#: ../../Zotlabs/Module/Admin/Addons.php:138 +msgid "Minimum PHP version: " msgstr "" -#: ../../Zotlabs/Module/Sharedwithme.php:108 -msgid "NEW" +#: ../../Zotlabs/Module/Admin/Addons.php:139 +msgid "Compatible Server Roles: " msgstr "" -#: ../../Zotlabs/Module/Sharedwithme.php:111 -msgid "Remove all files" +#: ../../Zotlabs/Module/Admin/Addons.php:140 +msgid "Requires: " msgstr "" -#: ../../Zotlabs/Module/Sharedwithme.php:112 -msgid "Remove this file" +#: ../../Zotlabs/Module/Admin/Addons.php:141 +#: ../../Zotlabs/Module/Admin/Addons.php:197 +msgid "Disabled - version incompatibility" msgstr "" -#: ../../Zotlabs/Module/Tokens.php:94 +#: ../../Zotlabs/Module/Admin/Features.php:56 #, php-format -msgid "This channel is limited to %d tokens" -msgstr "" - -#: ../../Zotlabs/Module/Tokens.php:100 -msgid "Name and Password are required." -msgstr "" - -#: ../../Zotlabs/Module/Tokens.php:215 -msgid "Token saved." -msgstr "" - -#: ../../Zotlabs/Module/Tokens.php:261 -msgid "" -"Use this form to create temporary access identifiers to share things with " -"non-members. These identities may be used in privacy groups and visitors may " -"login using these credentials to access private content." -msgstr "" - -#: ../../Zotlabs/Module/Tokens.php:274 -msgid "Please select a role for this guest!" -msgstr "" - -#: ../../Zotlabs/Module/Tokens.php:287 -msgid "Select a role for this guest" +msgid "Lock feature %s" msgstr "" -#: ../../Zotlabs/Module/Tokens.php:291 -msgid "Login Name" +#: ../../Zotlabs/Module/Admin/Features.php:65 +msgid "Manage Additional Features" msgstr "" -#: ../../Zotlabs/Module/Tokens.php:292 -msgid "Login Password" +#: ../../Zotlabs/Module/Admin/Profs.php:90 +msgid "New Profile Field" msgstr "" -#: ../../Zotlabs/Module/Tokens.php:293 -msgid "Expires (yyyy-mm-dd)" +#: ../../Zotlabs/Module/Admin/Profs.php:91 +#: ../../Zotlabs/Module/Admin/Profs.php:111 +msgid "Field nickname" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:59 -msgid "Contact role deleted." +#: ../../Zotlabs/Module/Admin/Profs.php:91 +#: ../../Zotlabs/Module/Admin/Profs.php:111 +msgid "System name of field" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:86 -msgid "Permission category name is required." +#: ../../Zotlabs/Module/Admin/Profs.php:92 +#: ../../Zotlabs/Module/Admin/Profs.php:112 +msgid "Input type" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154 -msgid "Contact role saved." +#: ../../Zotlabs/Module/Admin/Profs.php:93 +#: ../../Zotlabs/Module/Admin/Profs.php:113 +msgid "Field Name" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:204 -msgid "Role to assign affected contacts and default role to" +#: ../../Zotlabs/Module/Admin/Profs.php:93 +#: ../../Zotlabs/Module/Admin/Profs.php:113 +msgid "Label on profile pages" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:204 -msgid "Role to assign affected contacts to" +#: ../../Zotlabs/Module/Admin/Profs.php:94 +#: ../../Zotlabs/Module/Admin/Profs.php:114 +msgid "Help text" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:234 -msgid "Assign this role to" +#: ../../Zotlabs/Module/Admin/Profs.php:94 +#: ../../Zotlabs/Module/Admin/Profs.php:114 +msgid "Additional info (optional)" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:236 -msgid "All my contacts" +#: ../../Zotlabs/Module/Admin/Profs.php:104 +msgid "Field definition not found" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:247 -msgid "Automatically assign this role to new contacts" +#: ../../Zotlabs/Module/Admin/Profs.php:110 +msgid "Edit Profile Field" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:249 -msgid "Role name" +#: ../../Zotlabs/Module/Admin/Profs.php:170 +msgid "Basic Profile Fields" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:249 -msgid "System role - not editable" +#: ../../Zotlabs/Module/Admin/Profs.php:171 +msgid "Advanced Profile Fields" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:250 -msgid "Deleting" +#: ../../Zotlabs/Module/Admin/Profs.php:171 +msgid "(In addition to basic fields)" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:255 -msgid "Role Permissions" +#: ../../Zotlabs/Module/Admin/Profs.php:173 +msgid "All available fields" msgstr "" -#: ../../Zotlabs/Module/Permcats.php:256 -msgid "" -"Some permissions may be inherited from your <a href=\"settings\">channel " -"role</a>, which have higher priority than contact role settings." +#: ../../Zotlabs/Module/Admin/Profs.php:174 +msgid "Custom Fields" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:106 -#: ../../Zotlabs/Module/Settings/Channel.php:218 -msgid "Please select a channel role" +#: ../../Zotlabs/Module/Admin/Profs.php:178 +msgid "Create Custom Field" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:195 -msgid "Your channel address is" +#: ../../Zotlabs/Module/Admin/Channels.php:28 +#: ../../Zotlabs/Module/Admin/Channels.php:80 +msgid "Channel not found" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:198 -msgid "Your files/photos are accessible via WebDAV at" -msgstr "" +#: ../../Zotlabs/Module/Admin/Channels.php:48 +#, php-format +msgid "%s channel censored/uncensored" +msgid_plural "%s channels censored/uncensored" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Settings/Channel.php:229 -msgid "Channel Settings" -msgstr "" +#: ../../Zotlabs/Module/Admin/Channels.php:57 +#, php-format +msgid "%s channel code allowed/disallowed" +msgid_plural "%s channels code allowed/disallowed" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Settings/Channel.php:236 -msgid "Basic Settings" -msgstr "" +#: ../../Zotlabs/Module/Admin/Channels.php:63 +#, php-format +msgid "%s channel deleted" +msgid_plural "%s channels deleted" +msgstr[0] "" +msgstr[1] "" -#: ../../Zotlabs/Module/Settings/Channel.php:237 -msgid "Channel timezone:" +#: ../../Zotlabs/Module/Admin/Channels.php:90 +#, php-format +msgid "Channel '%s' deleted" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:238 -msgid "Default post location:" +#: ../../Zotlabs/Module/Admin/Channels.php:109 +#, php-format +msgid "Channel '%s' censored" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:238 -msgid "Geographical location to display on your posts" +#: ../../Zotlabs/Module/Admin/Channels.php:109 +#, php-format +msgid "Channel '%s' uncensored" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:239 -msgid "Use browser location" +#: ../../Zotlabs/Module/Admin/Channels.php:120 +#, php-format +msgid "Channel '%s' code allowed" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:240 -msgid "Adult content" +#: ../../Zotlabs/Module/Admin/Channels.php:120 +#, php-format +msgid "Channel '%s' code disallowed" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:240 -msgid "This channel frequently or regularly publishes adult content" +#: ../../Zotlabs/Module/Admin/Channels.php:170 +msgid "select all" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:241 -msgid "Maximum Friend Requests/Day:" +#: ../../Zotlabs/Module/Admin/Channels.php:172 +msgid "Censor" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:241 -msgid "May reduce spam activity" +#: ../../Zotlabs/Module/Admin/Channels.php:173 +msgid "Uncensor" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:243 -msgid "By default post a status message when:" +#: ../../Zotlabs/Module/Admin/Channels.php:174 +msgid "Allow Code" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:244 -msgid "accepting a friend request" +#: ../../Zotlabs/Module/Admin/Channels.php:175 +msgid "Disallow Code" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:245 -msgid "joining a forum/community" +#: ../../Zotlabs/Module/Admin/Channels.php:180 +msgid "UID" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:246 -msgid "making an <em>interesting</em> profile change" +#: ../../Zotlabs/Module/Admin/Channels.php:184 +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 "" -#: ../../Zotlabs/Module/Settings/Channel.php:247 -msgid "Send a notification email when:" +#: ../../Zotlabs/Module/Admin/Channels.php:185 +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 "" -#: ../../Zotlabs/Module/Settings/Channel.php:248 -msgid "You receive a connection request" +#: ../../Zotlabs/Module/Admin/Account_edit.php:34 +#, php-format +msgid "Password changed for account %d." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:249 -msgid "Your connections are confirmed" +#: ../../Zotlabs/Module/Admin/Account_edit.php:51 +msgid "Account settings updated." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:250 -msgid "Someone writes on your profile wall" +#: ../../Zotlabs/Module/Admin/Account_edit.php:73 +msgid "Account Edit" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:251 -msgid "Someone writes a followup comment" +#: ../../Zotlabs/Module/Admin/Account_edit.php:74 +msgid "New Password" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:252 -msgid "You receive a private message" +#: ../../Zotlabs/Module/Admin/Account_edit.php:75 +msgid "New Password again" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:253 -msgid "You receive a friend suggestion" +#: ../../Zotlabs/Module/Admin/Account_edit.php:76 +msgid "Account language (for emails)" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:254 -msgid "You are tagged in a post" +#: ../../Zotlabs/Module/Admin/Dbsync.php:19 +msgid "Update has been marked successful" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:255 -msgid "You are poked/prodded/etc. in a post" +#: ../../Zotlabs/Module/Admin/Dbsync.php:32 +#, php-format +msgid "Verification of update %s failed. Check system logs." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:256 -msgid "Someone likes your post/comment" +#: ../../Zotlabs/Module/Admin/Dbsync.php:35 +#: ../../Zotlabs/Module/Admin/Dbsync.php:62 +#, php-format +msgid "Update %s was successfully applied." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:257 -msgid "Show visual notifications including:" +#: ../../Zotlabs/Module/Admin/Dbsync.php:39 +#, php-format +msgid "Verifying update %s did not return a status. Unknown if it succeeded." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:258 -msgid "Unseen stream activity" +#: ../../Zotlabs/Module/Admin/Dbsync.php:42 +#, php-format +msgid "Update %s does not contain a verification function." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:259 -msgid "Unseen channel activity" +#: ../../Zotlabs/Module/Admin/Dbsync.php:46 +#: ../../Zotlabs/Module/Admin/Dbsync.php:69 +#, php-format +msgid "Update function %s could not be found." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:260 -msgid "Unseen private messages" +#: ../../Zotlabs/Module/Admin/Dbsync.php:59 +#, php-format +msgid "Executing update procedure %s failed. Check system logs." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:260 -#: ../../Zotlabs/Module/Settings/Channel.php:265 -#: ../../Zotlabs/Module/Settings/Channel.php:266 -#: ../../Zotlabs/Module/Settings/Channel.php:267 -msgid "Recommended" +#: ../../Zotlabs/Module/Admin/Dbsync.php:66 +#, php-format +msgid "" +"Update %s did not return a status. It cannot be determined if it was " +"successful." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:261 -msgid "Upcoming events" +#: ../../Zotlabs/Module/Admin/Dbsync.php:87 +msgid "Failed Updates" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:262 -msgid "Events today" +#: ../../Zotlabs/Module/Admin/Dbsync.php:89 +msgid "Mark success (if update was manually applied)" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:263 -msgid "Upcoming birthdays" +#: ../../Zotlabs/Module/Admin/Dbsync.php:90 +msgid "Attempt to verify this update if a verification procedure exists" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:263 -msgid "Not available in all themes" +#: ../../Zotlabs/Module/Admin/Dbsync.php:91 +msgid "Attempt to execute this update step automatically" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:264 -msgid "System (personal) notifications" +#: ../../Zotlabs/Module/Admin/Dbsync.php:96 +msgid "No failed updates." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:265 -msgid "System info messages" +#: ../../Zotlabs/Module/Admin/Logs.php:29 +msgid "Log settings updated." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:266 -msgid "System critical alerts" +#: ../../Zotlabs/Module/Admin/Logs.php:86 +msgid "Clear" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:267 -msgid "New connections" +#: ../../Zotlabs/Module/Admin/Logs.php:92 +msgid "Debugging" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:268 -msgid "System Registrations" +#: ../../Zotlabs/Module/Admin/Logs.php:93 +msgid "Log file" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:269 -msgid "Unseen shared files" +#: ../../Zotlabs/Module/Admin/Logs.php:93 +msgid "" +"Must be writable by web server. Relative to your top-level webserver " +"directory." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:270 -msgid "Unseen public stream activity" +#: ../../Zotlabs/Module/Admin/Logs.php:94 +msgid "Log level" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:271 -msgid "Unseen likes and dislikes" +#: ../../Zotlabs/Module/Admin/Queue.php:45 +msgid "Queue Statistics" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:272 -msgid "Unseen forum posts" +#: ../../Zotlabs/Module/Admin/Queue.php:46 +msgid "Total Entries" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:273 -msgid "Email notification hub (hostname)" +#: ../../Zotlabs/Module/Admin/Queue.php:48 +msgid "Destination URL" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:273 -#, php-format -msgid "" -"If your channel is mirrored to multiple hubs, set this to your preferred " -"location. This will prevent duplicate email notifications. Example: %s" +#: ../../Zotlabs/Module/Admin/Queue.php:49 +msgid "Mark hub permanently offline" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:274 -msgid "Show new wall posts, private messages and connections under Notices" +#: ../../Zotlabs/Module/Admin/Queue.php:50 +msgid "Retry delivery to this hub" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:275 -msgid "Mark all notices of the thread read if a notice is clicked" +#: ../../Zotlabs/Module/Admin/Queue.php:51 +msgid "Empty queue for this hub" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:275 -msgid "If no, only the clicked notice will be marked read" +#: ../../Zotlabs/Module/Admin/Queue.php:52 +msgid "Last known contact" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:276 -msgid "" -"Desktop notifications are unavailable because the required browser " -"permission has not been granted" +#: ../../Zotlabs/Module/Admin/Site.php:114 +msgid "Invalid input" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:277 -msgid "Grant permission" +#: ../../Zotlabs/Module/Admin/Site.php:134 +msgid "Errors" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:278 -msgid "Notify me of events this many days in advance" +#: ../../Zotlabs/Module/Admin/Site.php:221 +msgid "Site settings updated." msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:278 -msgid "Must be greater than 0" +#: ../../Zotlabs/Module/Admin/Site.php:244 +#: ../../Zotlabs/Module/Settings/Display.php:117 +#, php-format +msgid "%s - (Incompatible)" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:281 -msgid "Default photo upload folder" +#: ../../Zotlabs/Module/Admin/Site.php:251 +msgid "mobile" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:281 -#: ../../Zotlabs/Module/Settings/Channel.php:282 -msgid "%Y - current year, %m - current month" +#: ../../Zotlabs/Module/Admin/Site.php:253 +msgid "experimental" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:282 -msgid "Default file upload folder" +#: ../../Zotlabs/Module/Admin/Site.php:255 +msgid "unsupported" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:284 -msgid "Remove this channel." +#: ../../Zotlabs/Module/Admin/Site.php:308 +msgid "Yes - with approval" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:285 -msgid "Expire other channel content after this many days" +#: ../../Zotlabs/Module/Admin/Site.php:316 +msgid "My site is not a public server" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:285 -msgid "0 or blank to use the website limit." +#: ../../Zotlabs/Module/Admin/Site.php:317 +msgid "My site has paid access only" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:285 -#, php-format -msgid "This website expires after %d days." +#: ../../Zotlabs/Module/Admin/Site.php:318 +msgid "My site has free access only" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:285 -msgid "This website does not expire imported content." +#: ../../Zotlabs/Module/Admin/Site.php:319 +msgid "My site offers free accounts with optional paid upgrades" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:285 -msgid "The website limit takes precedence if lower than your limit." +#: ../../Zotlabs/Module/Admin/Site.php:337 +msgid "Default permission role for new accounts" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel.php:286 -#: ../../Zotlabs/Module/Settings/Channel.php:287 +#: ../../Zotlabs/Module/Admin/Site.php:337 msgid "" -"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - " -"leave blank to import all posts" -msgstr "" - -#: ../../Zotlabs/Module/Settings/Featured.php:25 -msgid "No feature settings configured" -msgstr "" - -#: ../../Zotlabs/Module/Settings/Featured.php:34 -msgid "Addon Settings" +"This role will be used for the first channel created after registration." msgstr "" -#: ../../Zotlabs/Module/Settings/Featured.php:35 -msgid "Please save/submit changes to any panel before opening another." +#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:411 +msgid "Minute(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Editor.php:40 -msgid "Editor Settings" +#: ../../Zotlabs/Module/Admin/Site.php:345 ../../Zotlabs/Module/Invite.php:412 +msgid "Hour(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Photos.php:40 -msgid "Photos Settings" +#: ../../Zotlabs/Module/Admin/Site.php:346 ../../Zotlabs/Module/Invite.php:413 +msgid "Day(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Profiles.php:41 -msgid "Default profile for new contacts" +#: ../../Zotlabs/Module/Admin/Site.php:347 +msgid "Week(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Profiles.php:49 -msgid "Profiles Settings" +#: ../../Zotlabs/Module/Admin/Site.php:348 +msgid "Month(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Network.php:42 -#: ../../Zotlabs/Module/Settings/Channel_home.php:46 -msgid "Max height of content (in pixels)" +#: ../../Zotlabs/Module/Admin/Site.php:349 +msgid "Year(s)" msgstr "" -#: ../../Zotlabs/Module/Settings/Network.php:44 -#: ../../Zotlabs/Module/Settings/Channel_home.php:48 -msgid "Click to expand content exceeding this height" +#: ../../Zotlabs/Module/Admin/Site.php:357 +msgid "Register verification delay" msgstr "" -#: ../../Zotlabs/Module/Settings/Network.php:59 -msgid "Stream Settings" +#: ../../Zotlabs/Module/Admin/Site.php:360 +msgid "Time to wait before a registration can be verified" msgstr "" -#: ../../Zotlabs/Module/Settings/Directory.php:40 -msgid "Directory Settings" +#: ../../Zotlabs/Module/Admin/Site.php:363 +#: ../../Zotlabs/Module/Admin/Site.php:385 ../../Zotlabs/Module/Invite.php:422 +msgid "duration up from now" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel_home.php:61 -msgid "Personal menu to display in your channel pages" +#: ../../Zotlabs/Module/Admin/Site.php:379 +msgid "Register verification expiration time" msgstr "" -#: ../../Zotlabs/Module/Settings/Channel_home.php:88 -msgid "Channel Home Settings" +#: ../../Zotlabs/Module/Admin/Site.php:382 +msgid "Time before an unverified registration will expire" msgstr "" -#: ../../Zotlabs/Module/Settings/Calendar.php:40 -msgid "Calendar Settings" +#: ../../Zotlabs/Module/Admin/Site.php:405 +msgid "File upload" msgstr "" -#: ../../Zotlabs/Module/Settings/Conversation.php:42 -msgid "Conversation Settings" +#: ../../Zotlabs/Module/Admin/Site.php:406 +msgid "Policies" msgstr "" -#: ../../Zotlabs/Module/Settings/Features.php:45 -msgid "Additional Features" +#: ../../Zotlabs/Module/Admin/Site.php:413 +msgid "Banner/Logo" msgstr "" -#: ../../Zotlabs/Module/Settings/Connections.php:40 -msgid "Connections Settings" +#: ../../Zotlabs/Module/Admin/Site.php:413 +msgid "Unfiltered HTML/CSS/JS is allowed" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:23 -msgid "Password is required" +#: ../../Zotlabs/Module/Admin/Site.php:414 +msgid "Administrator Information" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:29 -msgid "The provided password is not correct" +#: ../../Zotlabs/Module/Admin/Site.php:414 +msgid "" +"Contact information for site administrators. Displayed on siteinfo page. " +"BBCode can be used here" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:68 -msgid "Account Multi-Factor Authentication" +#: ../../Zotlabs/Module/Admin/Site.php:415 ../../Zotlabs/Module/Siteinfo.php:25 +msgid "Site Information" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:69 +#: ../../Zotlabs/Module/Admin/Site.php:415 msgid "" -"This is your generated secret. It may be used in some cases if the QR image " -"cannot be read. Please store it in a safe place." -msgstr "" - -#: ../../Zotlabs/Module/Settings/Multifactor.php:70 -msgid "Please enter the code from your authenticator app" +"Publicly visible description of this site. Displayed on siteinfo page. " +"BBCode can be used here" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:71 -msgid "You will only be able to enable MFA if the test passes" +#: ../../Zotlabs/Module/Admin/Site.php:416 +msgid "System theme" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:75 -msgid "Congratulations, the provided code was correct" +#: ../../Zotlabs/Module/Admin/Site.php:416 +msgid "" +"Default system theme - may be over-ridden by user profiles - <a href='#' " +"id='cnftheme'>change theme settings</a>" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:76 -msgid "Incorrect code" +#: ../../Zotlabs/Module/Admin/Site.php:419 +msgid "Allow Feeds as Connections" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:79 -msgid "Enable Multi-Factor Authentication" +#: ../../Zotlabs/Module/Admin/Site.php:419 +msgid "(Heavy system resource usage)" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:81 -msgid "Logging in will require you to be in possession of your smartphone" +#: ../../Zotlabs/Module/Admin/Site.php:420 +msgid "Maximum image size" msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:84 -msgid "Your account password" +#: ../../Zotlabs/Module/Admin/Site.php:420 +msgid "" +"Maximum size in bytes of uploaded images. Default is 0, which means no " +"limits." msgstr "" -#: ../../Zotlabs/Module/Settings/Multifactor.php:86 -msgid "Test" +#: ../../Zotlabs/Module/Admin/Site.php:421 +msgid "Minimum age" msgstr "" -#: ../../Zotlabs/Module/Settings/Events.php:40 -msgid "Events Settings" +#: ../../Zotlabs/Module/Admin/Site.php:421 +msgid "Minimum age (in years) for who may register on this site." msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:23 -msgid "Not valid email." +#: ../../Zotlabs/Module/Admin/Site.php:422 +msgid "Which best describes the types of account offered by this hub?" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:26 -msgid "Protected email address. Cannot change to that email." +#: ../../Zotlabs/Module/Admin/Site.php:422 +msgid "This is displayed on the public server site list." msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:35 -msgid "System failure storing new email. Please try again." +#: ../../Zotlabs/Module/Admin/Site.php:428 +msgid "Register text" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:53 -msgid "Password verification failed." +#: ../../Zotlabs/Module/Admin/Site.php:430 +msgid "This text will be displayed prominently at the registration page" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:60 -msgid "Passwords do not match. Password unchanged." +#: ../../Zotlabs/Module/Admin/Site.php:434 +msgid "Does this site allow new member registration?" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:64 -msgid "Empty passwords are not allowed. Password unchanged." +#: ../../Zotlabs/Module/Admin/Site.php:441 +msgid "Configure the registration open days/hours" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:78 -msgid "Password changed." +#: ../../Zotlabs/Module/Admin/Site.php:443 +msgid "Empty or '-:-' value will keep registration open 24/7 (default)" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:80 -msgid "Password update failed. Please try again." +#: ../../Zotlabs/Module/Admin/Site.php:444 +msgid "" +"Weekdays and hours must be separated by colon ':', From-To ranges with a " +"dash `-` example: 1:800-1200" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:105 -msgid "Account Settings" +#: ../../Zotlabs/Module/Admin/Site.php:445 +msgid "" +"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 " +"2:900-1700" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:106 -msgid "Current Password" +#: ../../Zotlabs/Module/Admin/Site.php:446 +msgid "" +"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 " +"or 1-2,4-5:900-1700" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:107 -msgid "Enter New Password" +#: ../../Zotlabs/Module/Admin/Site.php:447 +msgid "Advanced examples:" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:108 -msgid "Confirm New Password" +#: ../../Zotlabs/Module/Admin/Site.php:447 +#: ../../Zotlabs/Module/Settings/Channel.php:184 +msgid "or" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:108 -msgid "Leave password fields blank unless changing" +#: ../../Zotlabs/Module/Admin/Site.php:448 +msgid "Check your configuration" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:110 -msgid "Multi-Factor Authentication" +#: ../../Zotlabs/Module/Admin/Site.php:452 +msgid "Max account registrations per day" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:111 -msgid "DId2 or Email Address:" +#: ../../Zotlabs/Module/Admin/Site.php:454 +msgid "Unlimited if zero or no value - default 50" msgstr "" -#: ../../Zotlabs/Module/Settings/Account.php:114 -msgid "Remove this account including all its channels" +#: ../../Zotlabs/Module/Admin/Site.php:458 +msgid "Max account registrations from same IP" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:49 -msgid "Privacy settings updated." +#: ../../Zotlabs/Module/Admin/Site.php:460 +msgid "Unlimited if zero or no value - default 3" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:67 -msgid "Only those you specifically allow" +#: ../../Zotlabs/Module/Admin/Site.php:466 +msgid "Auto channel create" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:68 -msgid "Approved connections" +#: ../../Zotlabs/Module/Admin/Site.php:468 +msgid "" +"If disabled the channel will be created in a separate step during the " +"registration process" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:69 -msgid "Any connections" +#: ../../Zotlabs/Module/Admin/Site.php:472 +msgid "Require invite code" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:70 -msgid "Anybody on this website" +#: ../../Zotlabs/Module/Admin/Site.php:477 +msgid "Allow invite code" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:71 -msgid "Anybody in this network" +#: ../../Zotlabs/Module/Admin/Site.php:482 +msgid "Require email address" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:72 -msgid "Anybody authenticated" +#: ../../Zotlabs/Module/Admin/Site.php:484 +msgid "The provided email address will be verified (recommended)" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:73 -msgid "Anybody on the internet" +#: ../../Zotlabs/Module/Admin/Site.php:488 +msgid "Abandon account after x days" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:83 +#: ../../Zotlabs/Module/Admin/Site.php:490 msgid "" -"Advise: set to \"Anybody on the internet\" and use privacy groups to " -"restrict access" -msgstr "" - -#: ../../Zotlabs/Module/Settings/Privacy.php:122 -msgid "Privacy Settings" -msgstr "" - -#: ../../Zotlabs/Module/Settings/Privacy.php:127 -msgid "Advanced configuration" +"Will not waste system resources polling external sites for abandonded " +"accounts. Enter 0 for no time limit." msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:129 -msgid "Proceed with caution" +#: ../../Zotlabs/Module/Admin/Site.php:495 +msgid "Site homepage to show visitors (default: login box)" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:130 +#: ../../Zotlabs/Module/Admin/Site.php:495 msgid "" -"Changing advanced configuration settings can impact your, and your contacts " -"channels functionality and security." +"example: 'pubstream' to show public stream, 'page/sys/home' to show a system " +"webpage called 'home' or 'include:home.html' to include a file." msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:131 -msgid "Accept the risk and continue" +#: ../../Zotlabs/Module/Admin/Site.php:496 +msgid "Preserve site homepage URL" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:133 -msgid "Automatically approve new contacts" +#: ../../Zotlabs/Module/Admin/Site.php:496 +msgid "" +"Present the site homepage in a frame at the original location instead of " +"redirecting" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:134 -msgid "Opt-out of search engine indexing" +#: ../../Zotlabs/Module/Admin/Site.php:497 +msgid "Allowed friend domains" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:135 -msgid "Group actor" +#: ../../Zotlabs/Module/Admin/Site.php:497 +msgid "" +"Comma separated list of domains which are allowed to establish friendships " +"with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:135 -msgid "Allow this channel to act as a forum" +#: ../../Zotlabs/Module/Admin/Site.php:498 +msgid "Force publish" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:136 -msgid "Accept all messages which mention you" +#: ../../Zotlabs/Module/Admin/Site.php:498 +msgid "" +"Check to force all profiles on this site to be listed in the site directory" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:136 -msgid "This setting bypasses normal permissions" +#: ../../Zotlabs/Module/Admin/Site.php:499 +msgid "Enable public stream" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:137 -msgid "Accept unsolicited comments for moderation" +#: ../../Zotlabs/Module/Admin/Site.php:499 +msgid "Enable the public stream. Warning: this content is unmoderated" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:137 -msgid "Otherwise they will be silently dropped" +#: ../../Zotlabs/Module/Admin/Site.php:500 +msgid "Site only public stream" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:138 -msgid "Enable OCAP access" +#: ../../Zotlabs/Module/Admin/Site.php:500 +msgid "Restrict the public stream to content originating at this site" msgstr "" -#: ../../Zotlabs/Module/Settings/Privacy.php:138 -msgid "Grant limited posts the right to access linked private media" +#: ../../Zotlabs/Module/Admin/Site.php:501 +msgid "Allow anybody on the internet to access the public streams" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:126 -#, php-format -msgid "%s - (Experimental)" +#: ../../Zotlabs/Module/Admin/Site.php:501 +msgid "Disable to require authentication before viewing" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:183 -msgid "Display Settings" +#: ../../Zotlabs/Module/Admin/Site.php:502 +msgid "Only import Public stream posts with this text" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:184 -msgid "Theme Settings" +#: ../../Zotlabs/Module/Admin/Site.php:503 +msgid "Do not import Public stream posts with this text" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:185 -msgid "Custom Theme Settings" +#: ../../Zotlabs/Module/Admin/Site.php:506 +msgid "Login on Homepage" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:186 -msgid "Content Settings" +#: ../../Zotlabs/Module/Admin/Site.php:506 +msgid "" +"Present a login box to visitors on the home page if no other content has " +"been configured." msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:192 -msgid "Display Theme:" +#: ../../Zotlabs/Module/Admin/Site.php:507 +msgid "Enable context help" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:193 -msgid "Select scheme" +#: ../../Zotlabs/Module/Admin/Site.php:507 +msgid "" +"Display contextual help for the current page when the help button is pressed." msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:195 -msgid "Preload images before rendering the page" +#: ../../Zotlabs/Module/Admin/Site.php:509 +msgid "Reply-to email address for system generated email." msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:195 -msgid "" -"The subjective page load time will be longer but the page will be ready when " -"displayed" +#: ../../Zotlabs/Module/Admin/Site.php:510 +msgid "Sender (From) email address for system generated email." msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:196 -msgid "Enable user zoom on mobile devices" +#: ../../Zotlabs/Module/Admin/Site.php:511 +msgid "Name of email sender for system generated email." msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:197 -msgid "Update browser every xx seconds" +#: ../../Zotlabs/Module/Admin/Site.php:513 +msgid "Directory Server URL" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:197 -msgid "Minimum of 10 seconds, no maximum" +#: ../../Zotlabs/Module/Admin/Site.php:513 +msgid "Default directory server" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:198 -msgid "Maximum number of conversations to load at any time:" +#: ../../Zotlabs/Module/Admin/Site.php:515 +msgid "Enable SSE Notifications" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:198 -msgid "Maximum of 30 items" +#: ../../Zotlabs/Module/Admin/Site.php:515 +msgid "" +"If disabled, traditional polling will be used. Warning: this setting might " +"not be suited for shared hosting" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:199 -msgid "Show emoticons (smilies) as images" +#: ../../Zotlabs/Module/Admin/Site.php:517 +msgid "Proxy user" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:200 -msgid "Link post titles to source" +#: ../../Zotlabs/Module/Admin/Site.php:518 +msgid "Proxy URL" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:202 -#: ../../Zotlabs/Widget/Newmember.php:82 -msgid "New Member Links" +#: ../../Zotlabs/Module/Admin/Site.php:519 +msgid "Network timeout" msgstr "" -#: ../../Zotlabs/Module/Settings/Display.php:202 -msgid "Display new member quick links menu" +#: ../../Zotlabs/Module/Admin/Site.php:519 +msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: ../../Zotlabs/Module/Settings/Manage.php:41 -msgid "Channel Manager Settings" +#: ../../Zotlabs/Module/Admin/Site.php:520 +msgid "Delivery interval" msgstr "" -#: ../../Zotlabs/Module/Apporder.php:47 -msgid "Change Order of Pinned Navbar Apps" +#: ../../Zotlabs/Module/Admin/Site.php:520 +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 "" -#: ../../Zotlabs/Module/Apporder.php:47 -msgid "Change Order of App Tray Apps" +#: ../../Zotlabs/Module/Admin/Site.php:521 +msgid "Deliveries per process" msgstr "" -#: ../../Zotlabs/Module/Apporder.php:48 +#: ../../Zotlabs/Module/Admin/Site.php:521 msgid "" -"Use arrows to move the corresponding app left (top) or right (bottom) in the " -"navbar" +"Number of deliveries to attempt in a single operating system process. Adjust " +"if necessary to tune system performance. Recommend: 1-5." msgstr "" -#: ../../Zotlabs/Module/Apporder.php:48 -msgid "Use arrows to move the corresponding app up or down in the app tray" +#: ../../Zotlabs/Module/Admin/Site.php:523 +msgid "Poll interval" msgstr "" -#: ../../Zotlabs/Module/Like.php:111 -msgid "Like/Dislike" +#: ../../Zotlabs/Module/Admin/Site.php:523 +msgid "" +"Delay background polling processes by this many seconds to reduce system " +"load. If 0, use delivery interval." msgstr "" -#: ../../Zotlabs/Module/Like.php:117 -msgid "This action is restricted to members." +#: ../../Zotlabs/Module/Admin/Site.php:524 +msgid "Path to ImageMagick convert program" msgstr "" -#: ../../Zotlabs/Module/Like.php:118 +#: ../../Zotlabs/Module/Admin/Site.php:524 msgid "" -"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a " -"href=\"register\">register as a new $Projectname member</a> to continue." +"If set, use this program to generate photo thumbnails for huge images ( > " +"4000 pixels in either dimension), otherwise memory exhaustion may occur. " +"Example: /usr/bin/convert" msgstr "" -#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197 -#: ../../Zotlabs/Module/Like.php:230 -msgid "Invalid request." +#: ../../Zotlabs/Module/Admin/Site.php:525 +msgid "Maximum Load Average" msgstr "" -#: ../../Zotlabs/Module/Like.php:212 -msgid "thing" +#: ../../Zotlabs/Module/Admin/Site.php:525 +msgid "" +"Maximum system load before delivery and poll processes are deferred - " +"default 50." msgstr "" -#: ../../Zotlabs/Module/Like.php:253 -msgid "Channel unavailable." +#: ../../Zotlabs/Module/Admin/Site.php:526 +msgid "Expiration period in days for imported (grid/network) content" msgstr "" -#: ../../Zotlabs/Module/Like.php:289 -msgid "Previous action reversed." +#: ../../Zotlabs/Module/Admin/Site.php:526 +msgid "0 for no expiration of imported content" msgstr "" -#: ../../Zotlabs/Module/Like.php:453 -msgid "profile" +#: ../../Zotlabs/Module/Admin/Site.php:527 +msgid "" +"Do not expire any posts which have comments less than this many days ago" msgstr "" -#: ../../Zotlabs/Module/Like.php:487 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2248 -#, php-format -msgid "%1$s is attending %2$s's %3$s" +#: ../../Zotlabs/Module/Admin/Site.php:528 +msgid "" +"Public servers: Optional landing (marketing) webpage for new registrants" msgstr "" -#: ../../Zotlabs/Module/Like.php:489 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2250 +#: ../../Zotlabs/Module/Admin/Site.php:528 #, php-format -msgid "%1$s is not attending %2$s's %3$s" +msgid "Create this page first. Default is %s/register" msgstr "" -#: ../../Zotlabs/Module/Like.php:491 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2252 -#, php-format -msgid "%1$s may attend %2$s's %3$s" +#: ../../Zotlabs/Module/Admin/Site.php:529 +msgid "Page to display after creating a new channel" msgstr "" -#: ../../Zotlabs/Module/Like.php:615 -msgid "Action completed." +#: ../../Zotlabs/Module/Admin/Site.php:529 +msgid "Default: profiles" msgstr "" -#: ../../Zotlabs/Module/Like.php:616 -msgid "Thank you." +#: ../../Zotlabs/Module/Admin/Site.php:530 +msgid "Optional: site location" msgstr "" -#: ../../Zotlabs/Module/Follow.php:75 -msgid "Connection added." +#: ../../Zotlabs/Module/Admin/Site.php:530 +msgid "Region or country" msgstr "" -#: ../../Zotlabs/Module/Chatsvc.php:131 -msgid "Away" +#: ../../Zotlabs/Module/Admin/Site.php:615 +#: ../../Zotlabs/Module/Admin/Site.php:616 +msgid "Invalid 24h time value (hhmm/hmm)" msgstr "" -#: ../../Zotlabs/Module/Chatsvc.php:136 -msgid "Online" +#: ../../Zotlabs/Module/Admin/Security.php:97 +msgid "" +"By default, unfiltered HTML is allowed in embedded media. This is inherently " +"insecure." msgstr "" -#: ../../Zotlabs/Module/Admin.php:98 -msgid "Blocked accounts" +#: ../../Zotlabs/Module/Admin/Security.php:100 +msgid "" +"The recommended setting is to only allow unfiltered HTML from the following " +"sites:" msgstr "" -#: ../../Zotlabs/Module/Admin.php:99 -msgid "Expired accounts" +#: ../../Zotlabs/Module/Admin/Security.php:101 +msgid "" +"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/" +"<br />https://vimeo.com/<br />https://soundcloud.com/<br />" msgstr "" -#: ../../Zotlabs/Module/Admin.php:100 -msgid "Expiring accounts" +#: ../../Zotlabs/Module/Admin/Security.php:102 +msgid "" +"All other embedded content will be filtered, <strong>unless</strong> " +"embedded content from that site is explicitly blocked." msgstr "" -#: ../../Zotlabs/Module/Admin.php:124 -msgid "Message queues" +#: ../../Zotlabs/Module/Admin/Security.php:109 +msgid "Block public" msgstr "" -#: ../../Zotlabs/Module/Admin.php:138 -msgid "Your software should be updated" +#: ../../Zotlabs/Module/Admin/Security.php:109 +msgid "" +"Check to block public access to all otherwise public personal pages on this " +"site unless you are currently authenticated." msgstr "" -#: ../../Zotlabs/Module/Admin.php:143 -msgid "Summary" +#: ../../Zotlabs/Module/Admin/Security.php:110 +msgid "Provide a cloud root directory" msgstr "" -#: ../../Zotlabs/Module/Admin.php:146 -msgid "Registered accounts" +#: ../../Zotlabs/Module/Admin/Security.php:110 +msgid "" +"The cloud root directory lists all channel names which provide public files" msgstr "" -#: ../../Zotlabs/Module/Admin.php:147 -msgid "Pending registrations" +#: ../../Zotlabs/Module/Admin/Security.php:111 +msgid "Show total disk space available to cloud uploads" msgstr "" -#: ../../Zotlabs/Module/Admin.php:148 -msgid "Registered channels" +#: ../../Zotlabs/Module/Admin/Security.php:112 +msgid "Set \"Transport Security\" HTTP header" msgstr "" -#: ../../Zotlabs/Module/Admin.php:150 -msgid "Version" +#: ../../Zotlabs/Module/Admin/Security.php:113 +msgid "Set \"Content Security Policy\" HTTP header" msgstr "" -#: ../../Zotlabs/Module/Admin.php:151 -msgid "Repository version (master)" +#: ../../Zotlabs/Module/Admin/Security.php:114 +msgid "Allowed email domains" msgstr "" -#: ../../Zotlabs/Module/Admin.php:152 -msgid "Repository version (dev)" +#: ../../Zotlabs/Module/Admin/Security.php:114 +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 "" -#: ../../Zotlabs/Module/Authorize.php:17 -msgid "Unknown App" +#: ../../Zotlabs/Module/Admin/Security.php:115 +msgid "Not allowed email domains" msgstr "" -#: ../../Zotlabs/Module/Authorize.php:29 -msgid "Authorize" +#: ../../Zotlabs/Module/Admin/Security.php:115 +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 "" -#: ../../Zotlabs/Module/Authorize.php:30 -#, php-format -msgid "Do you authorize the app %s to access your channel data?" +#: ../../Zotlabs/Module/Admin/Security.php:116 +msgid "Allow communications only from these sites" msgstr "" -#: ../../Zotlabs/Module/Go.php:22 -msgid "This page is available only to site members" +#: ../../Zotlabs/Module/Admin/Security.php:116 +msgid "" +"One site per line. Leave empty to allow communication from anywhere by " +"default" msgstr "" -#: ../../Zotlabs/Module/Go.php:28 -#: ../../Zotlabs/Widget/Channel_activities.php:29 -msgid "Welcome" +#: ../../Zotlabs/Module/Admin/Security.php:117 +msgid "Block communications from these sites" msgstr "" -#: ../../Zotlabs/Module/Go.php:30 -msgid "What would you like to do?" +#: ../../Zotlabs/Module/Admin/Security.php:118 +msgid "Allow communications only from these channels" msgstr "" -#: ../../Zotlabs/Module/Go.php:32 +#: ../../Zotlabs/Module/Admin/Security.php:118 msgid "" -"Please bookmark this page if you would like to return to it in the future" +"One channel (hash) per line. Leave empty to allow from any channel by default" msgstr "" -#: ../../Zotlabs/Module/Go.php:36 -msgid "Upload a profile photo" +#: ../../Zotlabs/Module/Admin/Security.php:119 +msgid "Block communications from these channels" msgstr "" -#: ../../Zotlabs/Module/Go.php:37 -msgid "Upload a cover photo" +#: ../../Zotlabs/Module/Admin/Security.php:120 +msgid "Only allow embeds from secure (SSL) websites and links." msgstr "" -#: ../../Zotlabs/Module/Go.php:38 -msgid "Edit your default profile" +#: ../../Zotlabs/Module/Admin/Security.php:121 +msgid "Allow unfiltered embedded HTML content only from these domains" msgstr "" -#: ../../Zotlabs/Module/Go.php:39 ../../Zotlabs/Widget/Newmember.php:48 -msgid "View friend suggestions" +#: ../../Zotlabs/Module/Admin/Security.php:121 +msgid "One site per line. By default embedded content is filtered." msgstr "" -#: ../../Zotlabs/Module/Go.php:40 -msgid "View the channel directory" +#: ../../Zotlabs/Module/Admin/Security.php:122 +msgid "Block embedded HTML from these domains" msgstr "" -#: ../../Zotlabs/Module/Go.php:41 -msgid "View/edit your channel settings" +#: ../../Zotlabs/Module/Admin/Security.php:123 +msgid "Allow SVG thumbnails in file browser" msgstr "" -#: ../../Zotlabs/Module/Go.php:42 -msgid "View the site or project documentation" +#: ../../Zotlabs/Module/Admin/Security.php:123 +msgid "WARNING: SVG images may contain malicious code." msgstr "" -#: ../../Zotlabs/Module/Go.php:43 -msgid "Visit your channel homepage" +#: ../../Zotlabs/Module/Admin/Security.php:124 +msgid "Allow embedded (inline) PDF files" msgstr "" -#: ../../Zotlabs/Module/Go.php:44 -msgid "" -"View your connections and/or add somebody whose address you already know" +#: ../../Zotlabs/Module/Admin/Security.php:126 +msgid "Additional trusted directory server URLs" msgstr "" -#: ../../Zotlabs/Module/Go.php:45 +#: ../../Zotlabs/Module/Admin/Security.php:126 msgid "" -"View your personal stream (this may be empty until you add some connections)" +"Accept directory flags (spam, nsfw) from those servers. One per line like " +"https://example.tld" msgstr "" -#: ../../Zotlabs/Module/Go.php:53 -msgid "View the public stream. Warning: this content is not moderated" +#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:148 +#, php-format +msgid "You have created %1$.0f of %2$.0f allowed channels." msgstr "" #: ../../Zotlabs/Module/Manage.php:137 @@ -11834,3396 +11814,3229 @@ msgstr "" msgid "Delegated Channel" msgstr "" -#: ../../Zotlabs/Module/Search.php:251 -#, php-format -msgid "Items tagged with: %s" -msgstr "" - -#: ../../Zotlabs/Module/Search.php:253 -#, php-format -msgid "Search results for: %s" -msgstr "" - -#: ../../Zotlabs/Module/Changeaddr.php:35 -msgid "" -"Channel name changes are not allowed within 48 hours of changing the account " -"password." +#: ../../Zotlabs/Module/Email_resend.php:12 +#: ../../Zotlabs/Module/Email_validation.php:25 +msgid "Token verification failed." msgstr "" -#: ../../Zotlabs/Module/Changeaddr.php:77 -msgid "Change channel nickname/address" +#: ../../Zotlabs/Module/Email_resend.php:30 +msgid "Email verification resent" msgstr "" -#: ../../Zotlabs/Module/Changeaddr.php:78 -msgid "Any/all connections on other networks will be lost!" +#: ../../Zotlabs/Module/Email_resend.php:33 +msgid "Unable to resend email verification message." msgstr "" -#: ../../Zotlabs/Module/Changeaddr.php:80 -msgid "New channel address" +#: ../../Zotlabs/Module/Dreport.php:43 +msgid "Invalid message" msgstr "" -#: ../../Zotlabs/Module/Changeaddr.php:81 -msgid "Rename Channel" +#: ../../Zotlabs/Module/Dreport.php:73 +msgid "no results" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:819 -msgid "Calendar entries imported." +#: ../../Zotlabs/Module/Dreport.php:87 +msgid "channel sync processed" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:821 -msgid "No calendar entries found." +#: ../../Zotlabs/Module/Dreport.php:91 +msgid "queued" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1000 -msgid "Event title" +#: ../../Zotlabs/Module/Dreport.php:95 +msgid "posted" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1001 -msgid "Start date and time" +#: ../../Zotlabs/Module/Dreport.php:99 +msgid "accepted for delivery" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1002 -msgid "End date and time" +#: ../../Zotlabs/Module/Dreport.php:103 +msgid "updated" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1003 -msgid "Timezone:" +#: ../../Zotlabs/Module/Dreport.php:107 +msgid "update ignored" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1029 -msgid "Month" +#: ../../Zotlabs/Module/Dreport.php:110 +msgid "permission denied" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1030 -msgid "Week" +#: ../../Zotlabs/Module/Dreport.php:114 +msgid "recipient not found" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1031 -msgid "Day" +#: ../../Zotlabs/Module/Dreport.php:134 +#, php-format +msgid "Delivery report for %1$s" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1032 -msgid "List month" +#: ../../Zotlabs/Module/Dreport.php:139 +msgid "Redeliver" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1033 -msgid "List week" +#: ../../Zotlabs/Module/Chatsvc.php:131 +msgid "Away" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1034 -msgid "List day" +#: ../../Zotlabs/Module/Chatsvc.php:136 +msgid "Online" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1042 -msgid "More" +#: ../../Zotlabs/Module/Subthread.php:125 +#, php-format +msgid "%1$s is following %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1043 -msgid "Less" +#: ../../Zotlabs/Module/Subthread.php:127 +#, php-format +msgid "%1$s stopped following %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1045 -msgid "Select calendar" +#: ../../Zotlabs/Module/Cal.php:62 +msgid "Permissions denied." msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:149 -msgid "Channel Calendars" +#: ../../Zotlabs/Module/Cal.php:161 +#: ../../Zotlabs/Module/Channel_calendar.php:380 +#: ../../Zotlabs/Module/Cdav.php:935 +msgid "Link to source" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1046 ../../Zotlabs/Widget/Cdav.php:135 -#: ../../Zotlabs/Widget/Cdav.php:149 -msgid "CalDAV Calendars" +#: ../../Zotlabs/Module/Cal.php:199 ../../Zotlabs/Module/Photos.php:946 +#: ../../Zotlabs/Module/Cdav.php:1026 +msgid "Previous" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1048 -msgid "Delete all" +#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:955 +#: ../../Zotlabs/Module/Setup.php:278 ../../Zotlabs/Module/Cdav.php:1027 +msgid "Next" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1051 -msgid "Sorry! Editing of recurrent events is not yet implemented." +#: ../../Zotlabs/Module/Cal.php:201 ../../Zotlabs/Module/Cdav.php:1028 +msgid "Today" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1052 -msgid "" -"Could not fetch calendar resource. The selected calendar might be disabled." +#: ../../Zotlabs/Module/Bookmarks.php:62 +msgid "Bookmark added" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1452 -msgid "Default Calendar" +#: ../../Zotlabs/Module/Bookmarks.php:101 +msgid "My Connections Bookmarks" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1463 -msgid "Default Addressbook" +#: ../../Zotlabs/Module/Affinity.php:35 +msgid "Affinity Tool settings updated." msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:50 -msgid "Invalid abook_id" +#: ../../Zotlabs/Module/Affinity.php:54 +msgid "" +"The numbers below represent the minimum and maximum slider default positions " +"for your network/stream page as a percentage." msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:381 -msgid "View profile" +#: ../../Zotlabs/Module/Affinity.php:61 +msgid "Default maximum affinity level" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:394 -msgid "Select a role for this contact" +#: ../../Zotlabs/Module/Affinity.php:61 +msgid "0-99 default 99" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:395 -#: ../../Zotlabs/Widget/Permcats.php:92 -msgid "Contact roles" +#: ../../Zotlabs/Module/Affinity.php:67 +msgid "Default minimum affinity level" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:426 -msgid "Roles" +#: ../../Zotlabs/Module/Affinity.php:67 +msgid "0-99 - default 0" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:427 -msgid "Compare permissions" +#: ../../Zotlabs/Module/Affinity.php:73 +msgid "Persistent affinity levels" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:428 -msgid "Permission" +#: ../../Zotlabs/Module/Affinity.php:73 +msgid "" +"If disabled the max and min levels will be reset to default after page reload" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:429 -#: ../../Zotlabs/Widget/Privacygroups.php:54 -msgid "Privacy groups" +#: ../../Zotlabs/Module/Affinity.php:81 +msgid "Affinity Tool Settings" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:432 -msgid "Content filter" +#: ../../Zotlabs/Module/Admin.php:98 +msgid "Blocked accounts" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:442 -msgid "Contact updated" +#: ../../Zotlabs/Module/Admin.php:99 +msgid "Expired accounts" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:442 -msgid "Contact update failed" +#: ../../Zotlabs/Module/Admin.php:100 +msgid "Expiring accounts" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:491 -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:417 -#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1085 -msgid "Refresh succeeded" +#: ../../Zotlabs/Module/Admin.php:124 +msgid "Message queues" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:494 -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:412 -#: ../../extend/addon/hzaddons/pubcrawl/pubcrawl.php:1078 -msgid "Refresh failed" +#: ../../Zotlabs/Module/Admin.php:138 +msgid "Your software should be updated" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:520 -msgid "Block status updated" +#: ../../Zotlabs/Module/Admin.php:143 +msgid "Summary" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:524 -msgid "Block failed" +#: ../../Zotlabs/Module/Admin.php:146 +msgid "Registered accounts" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:535 -msgid "Ignore status updated" +#: ../../Zotlabs/Module/Admin.php:147 +msgid "Pending registrations" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:539 -msgid "Ignore failed" +#: ../../Zotlabs/Module/Admin.php:148 +msgid "Registered channels" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:550 -msgid "Archive status updated" +#: ../../Zotlabs/Module/Admin.php:149 ../../Zotlabs/Module/Siteinfo.php:42 +msgid "Active addons" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:554 -msgid "Archive failed" +#: ../../Zotlabs/Module/Admin.php:150 +msgid "Version" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:565 -msgid "Hide status updated" +#: ../../Zotlabs/Module/Admin.php:151 +msgid "Repository version (master)" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:569 -msgid "Hide failed" +#: ../../Zotlabs/Module/Admin.php:152 +msgid "Repository version (dev)" msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:604 -msgid "Contact removed" +#: ../../Zotlabs/Module/Permcats.php:59 +msgid "Contact role deleted." msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:608 -msgid "Delete failed" +#: ../../Zotlabs/Module/Permcats.php:86 +msgid "Permission category name is required." msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:618 -#: ../../Zotlabs/Widget/Affinity.php:60 -msgid "Refresh" +#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154 +msgid "Contact role saved." msgstr "" -#: ../../Zotlabs/Module/Contactedit.php:619 -msgid "Refetch contact info" +#: ../../Zotlabs/Module/Permcats.php:204 +msgid "Role to assign affected contacts and default role to" msgstr "" -#: ../../Zotlabs/Module/Profile.php:106 -msgid "vcard" +#: ../../Zotlabs/Module/Permcats.php:204 +msgid "Role to assign affected contacts to" msgstr "" -#: ../../Zotlabs/Widget/Suggestions.php:58 -msgid "Suggestions" +#: ../../Zotlabs/Module/Permcats.php:234 +msgid "Assign this role to" msgstr "" -#: ../../Zotlabs/Widget/Suggestions.php:59 -msgid "See more..." +#: ../../Zotlabs/Module/Permcats.php:236 +msgid "All my contacts" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:95 -msgid "Share This" +#: ../../Zotlabs/Module/Permcats.php:247 +msgid "Automatically assign this role to new contacts" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:118 ../../Zotlabs/Widget/Pinned.php:119 -#, php-format -msgid "View %s's profile - %s" +#: ../../Zotlabs/Module/Permcats.php:249 +msgid "Role name" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:152 -msgid "Don't show" +#: ../../Zotlabs/Module/Permcats.php:249 +msgid "System role - not editable" msgstr "" -#: ../../Zotlabs/Widget/Privacygroups.php:45 -msgid "Add new group" +#: ../../Zotlabs/Module/Permcats.php:250 +msgid "Deleting" msgstr "" -#: ../../Zotlabs/Widget/Savedsearch.php:81 -msgid "Remove term" +#: ../../Zotlabs/Module/Permcats.php:255 +msgid "Role Permissions" msgstr "" -#: ../../Zotlabs/Widget/Photo_rand.php:63 ../../Zotlabs/Widget/Photo.php:54 -msgid "photo/image" +#: ../../Zotlabs/Module/Permcats.php:256 +msgid "" +"Some permissions may be inherited from your <a href=\"settings\">channel " +"role</a>, which have higher priority than contact role settings." msgstr "" -#: ../../Zotlabs/Widget/Notes.php:39 -msgid "Read mode" +#: ../../Zotlabs/Module/Attach_edit.php:118 +msgid "Can not copy folder into itself." msgstr "" -#: ../../Zotlabs/Widget/Notes.php:40 -msgid "Edit mode" +#: ../../Zotlabs/Module/Attach_edit.php:131 +#, php-format +msgid "Can not move folder \"%s\" into itself." msgstr "" -#: ../../Zotlabs/Widget/Notes.php:41 -msgid "Editing" +#: ../../Zotlabs/Module/Xchan.php:10 +msgid "Xchan Lookup" msgstr "" -#: ../../Zotlabs/Widget/Notes.php:42 -msgid "Saving" +#: ../../Zotlabs/Module/Xchan.php:13 +msgid "Lookup xchan beginning with (or webbie): " msgstr "" -#: ../../Zotlabs/Widget/Notes.php:43 -msgid "Saved" +#: ../../Zotlabs/Module/Group.php:48 +msgid "Privacy group created." msgstr "" -#: ../../Zotlabs/Widget/Suggestedchats.php:36 -msgid "Suggested Chatrooms" +#: ../../Zotlabs/Module/Group.php:51 +msgid "Could not create privacy group." msgstr "" -#: ../../Zotlabs/Widget/Bookmarkedchats.php:25 -msgid "Bookmarked Chatrooms" +#: ../../Zotlabs/Module/Group.php:83 +msgid "Privacy group updated." msgstr "" -#: ../../Zotlabs/Widget/Tasklist.php:31 -msgid "Tasks" +#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302 +msgid "Post to this group by default" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:32 -msgid "Public and restricted messages" +#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303 +msgid "Add new contacts to this group by default" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:33 -msgid "Direct messages" +#: ../../Zotlabs/Module/Group.php:147 +msgid "Privacy group name" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:34 -msgid "Starred messages" +#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250 +msgid "Members are visible to other channels" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:35 -#: ../../Zotlabs/Widget/Notifications.php:116 -#: ../../Zotlabs/Widget/Notifications.php:117 -msgid "Notices" +#: ../../Zotlabs/Module/Group.php:176 +msgid "Privacy group removed." msgstr "" -#: ../../Zotlabs/Widget/Messages.php:37 -msgid "No messages" +#: ../../Zotlabs/Module/Group.php:179 +msgid "Unable to remove privacy group." msgstr "" -#: ../../Zotlabs/Widget/Messages.php:38 -msgid "Unseen" +#: ../../Zotlabs/Module/Group.php:245 +#, php-format +msgid "Privacy Group: %s" msgstr "" -#: ../../Zotlabs/Widget/Messages.php:39 -#: ../../Zotlabs/Widget/Notifications.php:34 -#: ../../Zotlabs/Widget/Notifications.php:54 -#: ../../Zotlabs/Widget/Notifications.php:73 -#: ../../Zotlabs/Widget/Notifications.php:134 -#: ../../Zotlabs/Widget/Notifications.php:167 -msgid "Filter by name or address" +#: ../../Zotlabs/Module/Group.php:247 +msgid "Privacy group name: " msgstr "" -#: ../../Zotlabs/Widget/Cover_photo.php:74 -msgid "Click to show more" +#: ../../Zotlabs/Module/Group.php:263 +msgid "Group members" msgstr "" -#: ../../Zotlabs/Widget/Activity.php:55 -msgctxt "widget" -msgid "Activity" +#: ../../Zotlabs/Module/Group.php:265 +msgid "Not in this group" msgstr "" -#: ../../Zotlabs/Widget/Appstore.php:16 -msgid "App Collections" +#: ../../Zotlabs/Module/Group.php:297 +msgid "Click a channel to toggle membership" msgstr "" -#: ../../Zotlabs/Widget/Appstore.php:18 -msgid "Installed apps" +#: ../../Zotlabs/Module/Help.php:61 +msgid "Documentation Search" msgstr "" -#: ../../Zotlabs/Widget/Hq_controls.php:23 -msgid "Toggle post editor" +#: ../../Zotlabs/Module/Help.php:170 +msgid "Not Found" msgstr "" -#: ../../Zotlabs/Widget/Hq_controls.php:33 -msgid "Toggle personal notes" +#: ../../Zotlabs/Module/Help.php:223 +msgid "$Projectname Documentation" msgstr "" -#: ../../Zotlabs/Widget/Hq_controls.php:43 -msgid "Channel activities" +#: ../../Zotlabs/Module/Help.php:234 +msgid "Contents" msgstr "" -#: ../../Zotlabs/Widget/Archive.php:49 -msgid "Archives" +#: ../../Zotlabs/Module/Help.php:241 +msgid "Members" msgstr "" -#: ../../Zotlabs/Widget/Channel_activities.php:46 -msgid "No recent activities" +#: ../../Zotlabs/Module/Help.php:242 +msgid "Administrators" msgstr "" -#: ../../Zotlabs/Widget/Channel_activities.php:214 -msgctxt "noun" -msgid "new connection" -msgid_plural "new connections" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Widget/Channel_activities.php:220 -msgctxt "noun" -msgid "notice" -msgid_plural "notices" -msgstr[0] "" -msgstr[1] "" - -#: ../../Zotlabs/Widget/Settings_menu.php:37 -msgid "Account settings" +#: ../../Zotlabs/Module/Help.php:243 +msgid "Developers" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:43 -msgid "Channel settings" +#: ../../Zotlabs/Module/Help.php:244 +msgid "Tutorials" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:49 -msgid "Privacy settings" +#: ../../Zotlabs/Module/Help.php:262 +msgid "Help:" msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:56 -msgid "Display settings" +#: ../../Zotlabs/Module/Tagger.php:52 +msgid "Post not found." msgstr "" -#: ../../Zotlabs/Widget/Settings_menu.php:63 -msgid "Manage locations" +#: ../../Zotlabs/Module/Tagger.php:123 +#, php-format +msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:59 -msgid "Rating Tools" +#: ../../Zotlabs/Module/Invite.php:70 +msgid "Invite App" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65 -msgid "Rate Me" +#: ../../Zotlabs/Module/Invite.php:82 +msgid "Register is closed" msgstr "" -#: ../../Zotlabs/Widget/Rating.php:68 -msgid "View Ratings" +#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563 +msgid "Note, the invitation code is valid up to" msgstr "" -#: ../../Zotlabs/Widget/Appcategories.php:49 -msgid "App Categories" +#: ../../Zotlabs/Module/Invite.php:129 +#, php-format +msgid "Too many recipients for one invitation (max %d)" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:44 -#: ../../Zotlabs/Widget/Notifications.php:62 -msgid "Direct Messages" +#: ../../Zotlabs/Module/Invite.php:133 +msgid "No recipients for this invitation" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:48 -msgid "Show direct (private) messages" +#: ../../Zotlabs/Module/Invite.php:152 +#, php-format +msgid "(%s) : Not a real email address" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:53 -#: ../../Zotlabs/Widget/Notifications.php:81 -msgid "Events" +#: ../../Zotlabs/Module/Invite.php:159 +#, php-format +msgid "(%s) : Not allowed email address" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:57 -msgid "Show posts that include events" +#: ../../Zotlabs/Module/Invite.php:172 +#, php-format +msgid "(%s) : email address already in use" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:63 -msgid "Polls" +#: ../../Zotlabs/Module/Invite.php:179 +#, php-format +msgid "(%s) : Accepted email address" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:67 -msgid "Show posts that include polls" +#: ../../Zotlabs/Module/Invite.php:271 +#, php-format +msgid "To %s : Message delivery success." msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:90 +#: ../../Zotlabs/Module/Invite.php:303 #, php-format -msgid "Show posts related to the %s privacy group" +msgid "%1$d mail(s) sent, %2$d mail error(s)" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:99 -msgid "Show my privacy groups" +#: ../../Zotlabs/Module/Invite.php:328 +msgid "Invites not proposed by configuration" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:123 -msgid "Show posts to this forum" +#: ../../Zotlabs/Module/Invite.php:329 +msgid "Contact the site admin" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:134 -msgid "Show forums" +#: ../../Zotlabs/Module/Invite.php:345 +msgid "Invites by users not enabled" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:148 -msgid "Starred Posts" +#: ../../Zotlabs/Module/Invite.php:350 +msgid "You have no more invitations available" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:152 -msgid "Show posts that I have starred" +#: ../../Zotlabs/Module/Invite.php:366 +msgid "Not on xchan" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:163 -msgid "Personal Posts" +#: ../../Zotlabs/Module/Invite.php:399 +msgid "All users invitation limit exceeded." msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:167 -msgid "Show posts that mention or involve me" +#: ../../Zotlabs/Module/Invite.php:417 +msgid "Invitation expires after" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:190 -#, php-format -msgid "Show posts that I have filed to %s" +#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557 +msgid "Invitation" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:200 -msgid "Show filed post categories" +#: ../../Zotlabs/Module/Invite.php:548 +msgid "Send invitations" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:214 -msgid "Panel search" +#: ../../Zotlabs/Module/Invite.php:549 +msgid "Invitations I am using" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:224 -msgid "Filter by name" +#: ../../Zotlabs/Module/Invite.php:550 +msgid "Invitations we are using" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:239 -msgid "Remove active filter" +#: ../../Zotlabs/Module/Invite.php:551 +msgid "§ Note, the email(s) sent will be recorded in the system logs" msgstr "" -#: ../../Zotlabs/Widget/Activity_filter.php:255 -msgid "Stream Filters" +#: ../../Zotlabs/Module/Invite.php:552 +msgid "Enter email addresses, one per line:" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:24 -msgid "New network activity notifications" +#: ../../Zotlabs/Module/Invite.php:553 +msgid "Your message:" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:27 -msgid "Network stream" +#: ../../Zotlabs/Module/Invite.php:554 +msgid "Invite template" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:30 -#: ../../Zotlabs/Widget/Notifications.php:69 -msgid "Mark all notifications read" +#: ../../Zotlabs/Module/Invite.php:556 +msgid "Subject:" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:33 -#: ../../Zotlabs/Widget/Notifications.php:53 -#: ../../Zotlabs/Widget/Notifications.php:72 -#: ../../Zotlabs/Widget/Notifications.php:166 -msgid "Show new posts only" +#: ../../Zotlabs/Module/Invite.php:562 +msgid "Here you may enter personal notes to the recipient(s)" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:44 -msgid "New home activity notifications" +#: ../../Zotlabs/Module/Siteinfo.php:22 +msgid "About this site" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:47 -msgid "Home stream" +#: ../../Zotlabs/Module/Siteinfo.php:23 +msgid "Site Name" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:50 -msgid "Mark all notifications seen" +#: ../../Zotlabs/Module/Siteinfo.php:27 +msgid "Administrator" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:63 -msgid "New direct messages notifications" +#: ../../Zotlabs/Module/Siteinfo.php:30 +msgid "Software and Project information" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:66 -msgid "Direct messages stream" +#: ../../Zotlabs/Module/Siteinfo.php:31 +msgid "This site is powered by $Projectname" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:82 -msgid "New events notifications" +#: ../../Zotlabs/Module/Siteinfo.php:32 +msgid "" +"Federated and decentralised networking and identity services provided by" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:85 -msgid "View events" +#: ../../Zotlabs/Module/Siteinfo.php:35 +msgid "Additional federated transport protocols:" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:88 -msgid "Mark all events seen" +#: ../../Zotlabs/Module/Siteinfo.php:37 +#, php-format +msgid "Version %s" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:97 -msgid "New connections notifications" +#: ../../Zotlabs/Module/Siteinfo.php:38 +msgid "Project homepage" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:100 -msgid "View all connections" +#: ../../Zotlabs/Module/Siteinfo.php:39 +msgid "Developer homepage" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:109 -msgid "New files notifications" +#: ../../Zotlabs/Module/Siteinfo.php:43 +msgid "Blocked sites" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:120 -msgid "View all notices" +#: ../../Zotlabs/Module/Attach.php:68 +msgid "Item not available." msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:123 -msgid "Mark all notices seen" +#: ../../Zotlabs/Module/Uexport.php:108 +msgid "No content available for year" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:144 -msgid "Registrations" +#: ../../Zotlabs/Module/Uexport.php:171 +msgid "Export Channel" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:145 -msgid "New registrations notifications" +#: ../../Zotlabs/Module/Uexport.php:173 +msgid "Export channel" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:155 -msgid "New public stream notifications" +#: ../../Zotlabs/Module/Uexport.php:174 +msgid "" +"This will export your identity and social graph into a file which can be " +"used to import your channel to a new hub." msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:158 -msgid "Public stream" +#: ../../Zotlabs/Module/Uexport.php:177 +msgid "Export content" msgstr "" -#: ../../Zotlabs/Widget/Notifications.php:174 -msgid "Sorry, you have got no notifications at the moment" +#: ../../Zotlabs/Module/Uexport.php:178 +msgid "" +"This will export your posts, direct messages, articles and cards per month " +"stored into a zip file per year. Months with no posts will be dismissed." msgstr "" -#: ../../Zotlabs/Widget/Tokens.php:41 -msgid "Add new guest" +#: ../../Zotlabs/Module/Uexport.php:180 +msgid "Export wikis" msgstr "" -#: ../../Zotlabs/Widget/Permcats.php:43 -msgid "Add new role" +#: ../../Zotlabs/Module/Uexport.php:181 +msgid "This will export your wikis and wiki pages." msgstr "" -#: ../../Zotlabs/Widget/Permcats.php:93 -msgid "Role members" +#: ../../Zotlabs/Module/Uexport.php:183 +msgid "Export webpages" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:38 -msgid "Profile Creation" +#: ../../Zotlabs/Module/Uexport.php:184 +msgid "This will export your webpages and menus." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:40 -msgid "Upload profile photo" +#: ../../Zotlabs/Module/Uexport.php:186 +msgid "Export channel calendar" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:41 -msgid "Upload cover photo" +#: ../../Zotlabs/Module/Uexport.php:187 +msgid "" +"This will export your channel calendar events and associated items. CalDAV " +"calendars are not included." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:45 -msgid "Find and Connect with others" +#: ../../Zotlabs/Module/Uexport.php:189 +msgid "Export chatrooms" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:47 -msgid "View the directory" +#: ../../Zotlabs/Module/Uexport.php:190 +msgid "This will export your chatrooms. Chat history is dismissed." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:49 -msgid "Manage your connections" +#: ../../Zotlabs/Module/Uexport.php:192 +#, php-format +msgid "" +"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</" +"a> on any site containing your channel." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:52 -msgid "Communicate" +#: ../../Zotlabs/Module/Like.php:111 +msgid "Like/Dislike" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:54 -msgid "View your channel homepage" +#: ../../Zotlabs/Module/Like.php:117 +msgid "This action is restricted to members." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:55 -msgid "View your network stream" +#: ../../Zotlabs/Module/Like.php:118 +msgid "" +"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a " +"href=\"register\">register as a new $Projectname member</a> to continue." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:61 -msgid "Documentation" +#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197 +#: ../../Zotlabs/Module/Like.php:230 +msgid "Invalid request." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:64 -msgid "Missing Features?" +#: ../../Zotlabs/Module/Like.php:212 +msgid "thing" msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:66 -msgid "Pin apps to navigation bar" +#: ../../Zotlabs/Module/Like.php:253 +msgid "Channel unavailable." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:67 -msgid "Install more apps" +#: ../../Zotlabs/Module/Like.php:289 +msgid "Previous action reversed." msgstr "" -#: ../../Zotlabs/Widget/Newmember.php:78 -msgid "View public stream" +#: ../../Zotlabs/Module/Like.php:456 +msgid "profile" msgstr "" -#: ../../Zotlabs/Widget/Follow.php:34 -msgid "Add New Connection" +#: ../../Zotlabs/Module/Like.php:623 +msgid "Action completed." msgstr "" -#: ../../Zotlabs/Widget/Follow.php:35 -msgid "Enter channel address" +#: ../../Zotlabs/Module/Like.php:624 +msgid "Thank you." msgstr "" -#: ../../Zotlabs/Widget/Follow.php:36 -msgid "Examples: bob@example.com, https://example.com/barbara" +#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153 +#: ../../Zotlabs/Module/Editblock.php:113 +msgid "Block Name" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66 -msgid "Member registrations waiting for confirmation" +#: ../../Zotlabs/Module/Blocks.php:154 +msgid "Block Title" msgstr "" -#: ../../Zotlabs/Widget/Admin.php:34 -msgid "Inspect queue" +#: ../../Zotlabs/Module/Mitem.php:63 +msgid "Unable to create element." msgstr "" -#: ../../Zotlabs/Widget/Admin.php:35 -msgid "Queueworker" +#: ../../Zotlabs/Module/Mitem.php:87 +msgid "Unable to update menu element." msgstr "" -#: ../../Zotlabs/Widget/Admin.php:37 -msgid "DB updates" +#: ../../Zotlabs/Module/Mitem.php:103 +msgid "Unable to add menu element." msgstr "" -#: ../../Zotlabs/Widget/Admin.php:62 -msgid "Addon Features" +#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:244 +msgid "Menu Item Permissions" msgstr "" -#: ../../Zotlabs/Widget/Chatroom_list.php:26 -msgid "Overview" +#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:245 +msgid "(click to open/close)" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:41 -msgid "Select Channel" +#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191 +msgid "Link Name" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:46 -msgid "Read-write" +#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:253 +msgid "Link or Submenu Target" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:47 -msgid "Read-only" +#: ../../Zotlabs/Module/Mitem.php:175 +msgid "Enter URL of the link or select a menu name to create a submenu" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:133 -msgid "Channel Calendar" +#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:254 +msgid "Use magic-auth if available" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:137 -msgid "Shared CalDAV Calendars" +#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:255 +msgid "Open link in new window" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:141 -msgid "Share this calendar" +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256 +msgid "Order in list" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:143 -msgid "Calendar name and color" +#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:256 +msgid "Higher numbers will sink to bottom of listing" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:145 -msgid "Create new CalDAV calendar" +#: ../../Zotlabs/Module/Mitem.php:179 +msgid "Submit and finish" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:147 -msgid "Calendar Name" +#: ../../Zotlabs/Module/Mitem.php:180 +msgid "Submit and continue" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:148 -msgid "Calendar Tools" +#: ../../Zotlabs/Module/Mitem.php:189 +msgid "Menu:" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:150 -msgid "Import calendar" +#: ../../Zotlabs/Module/Mitem.php:192 +msgid "Link Target" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:151 -msgid "Select a calendar to import to" +#: ../../Zotlabs/Module/Mitem.php:195 +msgid "Edit menu" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:178 -msgid "Addressbooks" +#: ../../Zotlabs/Module/Mitem.php:198 +msgid "Edit element" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:180 -msgid "Addressbook name" +#: ../../Zotlabs/Module/Mitem.php:199 +msgid "Drop element" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:182 -msgid "Create new addressbook" +#: ../../Zotlabs/Module/Mitem.php:200 +msgid "New element" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:183 -msgid "Addressbook Name" +#: ../../Zotlabs/Module/Mitem.php:201 +msgid "Edit this menu container" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:185 -msgid "Addressbook Tools" +#: ../../Zotlabs/Module/Mitem.php:202 +msgid "Add menu element" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:186 -msgid "Import addressbook" +#: ../../Zotlabs/Module/Mitem.php:203 +msgid "Delete this menu item" msgstr "" -#: ../../Zotlabs/Widget/Cdav.php:187 -msgid "Select an addressbook to import to" +#: ../../Zotlabs/Module/Mitem.php:204 +msgid "Edit this menu item" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:96 -msgid "Commented Date" +#: ../../Zotlabs/Module/Mitem.php:220 +msgid "Menu item not found." msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:100 -msgid "Order by last commented date" +#: ../../Zotlabs/Module/Mitem.php:233 +msgid "Menu item deleted." msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:103 -msgid "Posted Date" +#: ../../Zotlabs/Module/Mitem.php:235 +msgid "Menu item could not be deleted." msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:107 -msgid "Order by last posted date" +#: ../../Zotlabs/Module/Mitem.php:242 +msgid "Edit Menu Element" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:110 -msgid "Date Unthreaded" +#: ../../Zotlabs/Module/Mitem.php:252 +msgid "Link text" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:114 -msgid "Order unthreaded by date" +#: ../../Zotlabs/Module/Dircensor.php:61 +msgid "Entry censored" msgstr "" -#: ../../Zotlabs/Widget/Activity_order.php:129 -msgid "Stream Order" +#: ../../Zotlabs/Module/Dircensor.php:64 +msgid "Entry OK" msgstr "" -#: ../../Zotlabs/Widget/Chatroom_members.php:17 -msgid "Chat Members" +#: ../../Zotlabs/Module/Apporder.php:47 +msgid "Change Order of Pinned Navbar Apps" msgstr "" -#: ../../util/nconfig.php:34 -msgid "Source channel not found." +#: ../../Zotlabs/Module/Apporder.php:47 +msgid "Change Order of App Tray Apps" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:123 -msgid "generic profile image" +#: ../../Zotlabs/Module/Apporder.php:48 +msgid "" +"Use arrows to move the corresponding app left (top) or right (bottom) in the " +"navbar" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:124 -msgid "random geometric pattern" +#: ../../Zotlabs/Module/Apporder.php:48 +msgid "Use arrows to move the corresponding app up or down in the app tray" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:125 -msgid "monster face" +#: ../../Zotlabs/Module/New_channel.php:160 +msgid "Your real name is recommended." msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:126 -msgid "computer generated face" +#: ../../Zotlabs/Module/New_channel.php:161 +msgid "" +"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation " +"Group\"" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:127 -msgid "retro arcade style face" +#: ../../Zotlabs/Module/New_channel.php:166 +msgid "" +"This will be used to create a unique network address (like an email address)." msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:128 -msgid "Hub default profile photo" +#: ../../Zotlabs/Module/New_channel.php:168 +msgid "Allowed characters are a-z 0-9, - and _" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143 -msgid "Information" +#: ../../Zotlabs/Module/New_channel.php:176 +msgid "Channel name" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:143 -msgid "" -"Libravatar addon is installed, too. Please disable Libravatar addon or this " -"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if " -"nothing was found at Libravatar." +#: ../../Zotlabs/Module/New_channel.php:179 +#: ../../Zotlabs/Module/Settings/Channel.php:234 +msgid "Channel role" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:150 -#: ../../extend/addon/hzaddons/xmpp/xmpp.php:43 -#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:46 -msgid "Save Settings" +#: ../../Zotlabs/Module/New_channel.php:182 +msgid "Create a Channel" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151 -msgid "Default avatar image" +#: ../../Zotlabs/Module/New_channel.php:183 +msgid "" +"A channel is a unique network identity. It can represent a person (social " +"network profile), a forum (group), a business or celebrity page, a newsfeed, " +"and many other things." msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:151 -msgid "Select default avatar image if none was found at Gravatar. See README" +#: ../../Zotlabs/Module/New_channel.php:184 +msgid "" +"or <a href=\"import\">import an existing channel</a> from another location." msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152 -msgid "Rating of images" +#: ../../Zotlabs/Module/New_channel.php:189 +msgid "Validate" msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:152 -msgid "Select the appropriate avatar rating for your site. See README" +#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103 +msgid "Album not found." msgstr "" -#: ../../extend/addon/hzaddons/gravatar/gravatar.php:165 -msgid "Gravatar settings updated." +#: ../../Zotlabs/Module/Photos.php:93 +msgid "Delete Album" msgstr "" -#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:21 -msgid "Send your identity to all websites" +#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1057 +msgid "Delete Photo" msgstr "" -#: ../../extend/addon/hzaddons/sendzid/Mod_Sendzid.php:29 -msgid "Send ZID" +#: ../../Zotlabs/Module/Photos.php:522 +msgid "No photos selected" msgstr "" -#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:101 -msgid "An account has been created for you." +#: ../../Zotlabs/Module/Photos.php:571 +msgid "Access to this item is restricted." msgstr "" -#: ../../extend/addon/hzaddons/ldapauth/ldapauth.php:108 -msgid "Authentication successful but rejected: account creation is disabled." +#: ../../Zotlabs/Module/Photos.php:614 +#, php-format +msgid "%1$.2f MB photo storage used." msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:259 -msgid "DB Cleanup Failure" +#: ../../Zotlabs/Module/Photos.php:618 +#, php-format +msgid "%1$.2f MB of %2$.2f MB photo storage used." msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:692 -msgid "[cart] Item Added" +#: ../../Zotlabs/Module/Photos.php:660 +msgid "Upload Photos" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1107 -msgid "Order already checked out." +#: ../../Zotlabs/Module/Photos.php:664 +msgid "Enter an album name" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1416 -msgid "Drop database tables when uninstalling." +#: ../../Zotlabs/Module/Photos.php:665 +msgid "or select an existing album (doubleclick)" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1423 -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:129 -msgid "Cart Settings" +#: ../../Zotlabs/Module/Photos.php:666 +msgid "Create a status post for this upload" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1435 -#: ../../extend/addon/hzaddons/cart/cart.php:1438 -msgid "Shop" +#: ../../Zotlabs/Module/Photos.php:668 +msgid "Description (optional)" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1458 -#: ../../extend/addon/hzaddons/faces/Mod_Faces.php:64 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:36 -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:52 -msgid "Profile Unavailable." +#: ../../Zotlabs/Module/Photos.php:756 +msgid "Show Newest First" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1494 -#: ../../extend/addon/hzaddons/cart/myshop.php:113 -msgid "Order Not Found" +#: ../../Zotlabs/Module/Photos.php:758 +msgid "Show Oldest First" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1598 -msgid "You must be logged into the Grid to shop." +#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1355 +msgid "Add Photos" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1609 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:486 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:456 -#: ../../extend/addon/hzaddons/cart/myshop.php:37 -#: ../../extend/addon/hzaddons/cart/manual_payments.php:93 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:81 -msgid "Invalid channel" +#: ../../Zotlabs/Module/Photos.php:867 +msgid "Permission denied. Access to this item may be restricted." msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1631 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:417 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:392 -#: ../../extend/addon/hzaddons/cart/manual_payments.php:68 -msgid "Order not found." +#: ../../Zotlabs/Module/Photos.php:869 +msgid "Photo not available" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1647 -msgid "Access denied." +#: ../../Zotlabs/Module/Photos.php:927 +msgid "Use as profile photo" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1699 -#: ../../extend/addon/hzaddons/cart/cart.php:1842 -msgid "No Order Found" +#: ../../Zotlabs/Module/Photos.php:928 +msgid "Use as cover photo" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1708 -msgid "An unknown error has occurred Please start again." +#: ../../Zotlabs/Module/Photos.php:935 +msgid "Private Photo" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1851 -msgid "Requirements not met." +#: ../../Zotlabs/Module/Photos.php:950 +msgid "View Full Size" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1851 -msgid "Review your order and complete any needed requirements." +#: ../../Zotlabs/Module/Photos.php:1031 +msgid "Edit photo" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1877 -msgid "Invalid Payment Type. Please start again." +#: ../../Zotlabs/Module/Photos.php:1033 +msgid "Rotate CW (right)" msgstr "" -#: ../../extend/addon/hzaddons/cart/cart.php:1884 -msgid "Order not found" +#: ../../Zotlabs/Module/Photos.php:1034 +msgid "Rotate CCW (left)" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:70 -msgid "Enable Order/Item Options" +#: ../../Zotlabs/Module/Photos.php:1037 +msgid "Move photo to album" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:333 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:357 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:433 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:457 -msgid "Label" +#: ../../Zotlabs/Module/Photos.php:1038 +msgid "Enter a new album name" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:336 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:360 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:436 -#: ../../extend/addon/hzaddons/cart/submodules/orderoptions.php:460 -msgid "Instructions" +#: ../../Zotlabs/Module/Photos.php:1039 +msgid "or select an existing one (doubleclick)" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:151 -msgid "Enable Subscription Management Module" +#: ../../Zotlabs/Module/Photos.php:1044 +msgid "Add a Tag" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:223 -msgid "" -"Cannot include subscription items with different terms in the same order." +#: ../../Zotlabs/Module/Photos.php:1052 +msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:372 -msgid "Select Subscription to Edit" +#: ../../Zotlabs/Module/Photos.php:1055 +msgid "Flag as adult in album view" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:380 -msgid "Edit Subscriptions" +#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137 +msgid "View all" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:414 -msgid "Subscription SKU" +#: ../../Zotlabs/Module/Photos.php:1238 +msgid "Photo Tools" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:419 -msgid "Catalog Description" +#: ../../Zotlabs/Module/Photos.php:1247 +msgid "In This Photo:" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:423 -msgid "Subscription available for purchase." +#: ../../Zotlabs/Module/Photos.php:1252 +msgid "Map" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:428 -msgid "Maximum active subscriptions to this item per account." +#: ../../Zotlabs/Module/Photos.php:1260 +msgctxt "noun" +msgid "Likes" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:431 -msgid "Subscription price." +#: ../../Zotlabs/Module/Photos.php:1261 +msgctxt "noun" +msgid "Dislikes" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:435 -msgid "Quantity" +#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29 +msgid "You must be logged in to see this page." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/subscriptions.php:439 -msgid "Term" +#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:150 +#: ../../Zotlabs/Module/Profile.php:62 +msgid "Posts and comments" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:61 -msgid "Enable Manual Cart Module" +#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:157 +#: ../../Zotlabs/Module/Profile.php:69 +msgid "Only posts" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:172 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:164 -msgid "New Sku" +#: ../../Zotlabs/Module/Channel.php:231 +msgid "Insufficient permissions. Request redirected to profile page." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:208 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:199 -msgid "Cannot save edits to locked item." +#: ../../Zotlabs/Module/Profile.php:106 +msgid "vcard" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:252 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:649 -msgid "Changes Locked" +#: ../../Zotlabs/Module/Moderate.php:70 +msgid "Item approved" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:256 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:653 -msgid "Item available for purchase." +#: ../../Zotlabs/Module/Sources.php:41 +msgid "Failed to create source. No channel selected." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:263 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:660 -#: ../../extend/addon/hzaddons/cart/widgets/catalogitem.php:57 -msgid "Price" +#: ../../Zotlabs/Module/Sources.php:57 +msgid "Source created." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/manualcat.php:266 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:663 -msgid "Photo URL" +#: ../../Zotlabs/Module/Sources.php:70 +msgid "Source updated." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:86 -msgid "Enable Paypal Button Module (API-v2)" +#: ../../Zotlabs/Module/Sources.php:99 +msgid "*" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:96 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:93 -msgid "Use Production Key" +#: ../../Zotlabs/Module/Sources.php:106 +msgid "Manage remote sources of content for your channel." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:103 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:100 -msgid "Paypal Sandbox Client Key" +#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117 +msgid "New Source" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:110 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:107 -msgid "Paypal Sandbox Secret Key" +#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152 +msgid "" +"Import all or selected content from the following channel into this channel " +"and distribute it according to your channel settings." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:116 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:113 -msgid "Paypal Production Client Key" +#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153 +msgid "Only import content with these words (one per line)" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:123 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:120 -msgid "Paypal Production Secret Key" +#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153 +msgid "Leave blank to import all public content" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:271 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:252 -msgid "Paypal button payments are not enabled." +#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159 +msgid "Channel Name" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbuttonV2.php:289 -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:270 +#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156 msgid "" -"Paypal button payments are not properly configured. Please choose another " -"payment option." +"Add the following categories to posts imported from this source (comma " +"separated)" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:85 -msgid "Enable Paypal Button Module" +#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 +msgid "Resend posts with this channel as author" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:65 -msgid "Enable Hubzilla Services Module" +#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157 +msgid "Copyrights may apply" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:248 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:335 -msgid "SKU not found." +#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172 +msgid "Source not found." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:301 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:305 -msgid "Invalid Activation Directive." +#: ../../Zotlabs/Module/Sources.php:149 +msgid "Edit Source" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:376 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:380 -msgid "Invalid Deactivation Directive." +#: ../../Zotlabs/Module/Sources.php:150 +msgid "Delete Source" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:566 -msgid "Add to this privacy group" +#: ../../Zotlabs/Module/Sources.php:180 +msgid "Source removed" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:582 -msgid "Set user service class" +#: ../../Zotlabs/Module/Sources.php:182 +msgid "Unable to remove source." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:609 -msgid "You must be using a local account to purchase this service." +#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211 +#: ../../Zotlabs/Module/Profiles.php:641 +msgid "Profile not found." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:667 -msgid "Add buyer to privacy group" +#: ../../Zotlabs/Module/Profiles.php:43 +msgid "Profile deleted." msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:672 -msgid "Add buyer as connection" +#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104 +msgid "Profile-" msgstr "" -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:680 -#: ../../extend/addon/hzaddons/cart/submodules/hzservices.php:722 -msgid "Set Service Class" +#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126 +msgid "New profile created." msgstr "" -#: ../../extend/addon/hzaddons/cart/myshop.php:30 -msgid "Access Denied." +#: ../../Zotlabs/Module/Profiles.php:110 +msgid "Profile unavailable to clone." msgstr "" -#: ../../extend/addon/hzaddons/cart/myshop.php:145 -#: ../../extend/addon/hzaddons/cart/myshop.php:181 -#: ../../extend/addon/hzaddons/cart/myshop.php:215 -#: ../../extend/addon/hzaddons/cart/myshop.php:265 -#: ../../extend/addon/hzaddons/cart/myshop.php:300 -#: ../../extend/addon/hzaddons/cart/myshop.php:323 -msgid "Access Denied" +#: ../../Zotlabs/Module/Profiles.php:145 +msgid "Profile unavailable to export." msgstr "" -#: ../../extend/addon/hzaddons/cart/myshop.php:190 -#: ../../extend/addon/hzaddons/cart/myshop.php:224 -#: ../../extend/addon/hzaddons/cart/myshop.php:275 -#: ../../extend/addon/hzaddons/cart/myshop.php:333 -msgid "Invalid Item" +#: ../../Zotlabs/Module/Profiles.php:221 +msgid "Profile Name is required." msgstr "" -#: ../../extend/addon/hzaddons/cart/manual_payments.php:7 -msgid "Error: order mismatch. Please try again." +#: ../../Zotlabs/Module/Profiles.php:426 +msgid "Marital Status" msgstr "" -#: ../../extend/addon/hzaddons/cart/manual_payments.php:61 -msgid "Manual payments are not enabled." +#: ../../Zotlabs/Module/Profiles.php:430 +msgid "Romantic Partner" msgstr "" -#: ../../extend/addon/hzaddons/cart/manual_payments.php:77 -msgid "Finished" +#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787 +msgid "Likes" msgstr "" -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:58 -msgid "Enable Test Catalog" +#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788 +msgid "Dislikes" msgstr "" -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:70 -msgid "Enable Manual Payments" +#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795 +msgid "Work/Employment" msgstr "" -#: ../../extend/addon/hzaddons/cart/Settings/Cart.php:90 -msgid "Base Merchant Currency" +#: ../../Zotlabs/Module/Profiles.php:445 +msgid "Religion" msgstr "" -#: ../../extend/addon/hzaddons/articles/Mod_Article_edit.php:127 -msgid "Edit Article" +#: ../../Zotlabs/Module/Profiles.php:449 +msgid "Political Views" msgstr "" -#: ../../extend/addon/hzaddons/articles/articles.php:51 -msgid "View Articles" +#: ../../Zotlabs/Module/Profiles.php:457 +msgid "Sexual Preference" msgstr "" -#: ../../extend/addon/hzaddons/articles/Mod_Articles.php:119 -msgid "Add Article" +#: ../../Zotlabs/Module/Profiles.php:461 +msgid "Homepage" msgstr "" -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:81 -msgid "Hubzilla File Storage Import" +#: ../../Zotlabs/Module/Profiles.php:465 +msgid "Interests" msgstr "" -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:82 -msgid "This will import all your cloud files from another server." +#: ../../Zotlabs/Module/Profiles.php:573 +msgid "Profile updated." msgstr "" -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:83 -msgid "Hubzilla Server base URL" +#: ../../Zotlabs/Module/Profiles.php:671 +msgid "Hide my connections from viewers of this profile" msgstr "" -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:138 -msgid "Since modified date yyyy-mm-dd" +#: ../../Zotlabs/Module/Profiles.php:684 +msgid "Publish my default profile in the network directory" msgstr "" -#: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:85 -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:139 -msgid "Until modified date yyyy-mm-dd" +#: ../../Zotlabs/Module/Profiles.php:692 +msgid "Suggest me as a potential contact to new members" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:125 -msgid "View Larger" +#: ../../Zotlabs/Module/Profiles.php:696 +msgid "Reveal my online status" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148 -msgid "Tile Server URL" +#: ../../Zotlabs/Module/Profiles.php:737 +msgid "Edit Profile Details" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:148 -msgid "" -"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" " -"target=\"_blank\">public tile servers</a>" +#: ../../Zotlabs/Module/Profiles.php:739 +msgid "View this profile" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149 -msgid "Nominatim (reverse geocoding) Server URL" +#: ../../Zotlabs/Module/Profiles.php:741 +msgid "Profile Tools" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:149 -msgid "" -"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" " -"target=\"_blank\">Nominatim servers</a>" +#: ../../Zotlabs/Module/Profiles.php:742 +msgid "Change cover photo" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150 -msgid "Default zoom" +#: ../../Zotlabs/Module/Profiles.php:744 +msgid "Create a new profile using these settings" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:150 -msgid "" -"The default zoom level. (1:world, 18:highest, also depends on tile server)" +#: ../../Zotlabs/Module/Profiles.php:745 +msgid "Clone this profile" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151 -msgid "Include marker on map" +#: ../../Zotlabs/Module/Profiles.php:746 +msgid "Delete this profile" msgstr "" -#: ../../extend/addon/hzaddons/openstreetmap/openstreetmap.php:151 -msgid "Include a marker on the map." +#: ../../Zotlabs/Module/Profiles.php:747 +msgid "Add profile things" msgstr "" -#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:15 -msgid "WYSIWYG status editor" +#: ../../Zotlabs/Module/Profiles.php:748 +msgid "Basic" msgstr "" -#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:24 -msgid "WYSIWYG Status App" +#: ../../Zotlabs/Module/Profiles.php:750 +msgid "Relationship" msgstr "" -#: ../../extend/addon/hzaddons/hsse/Mod_Hsse.php:32 -msgid "WYSIWYG Status" +#: ../../Zotlabs/Module/Profiles.php:753 +msgid "Import profile from file" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:106 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:179 -msgid "Network error" +#: ../../Zotlabs/Module/Profiles.php:754 +msgid "Export profile to file" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:110 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:183 -msgid "API error" +#: ../../Zotlabs/Module/Profiles.php:755 +msgid "Your gender" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:114 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:187 -msgid "Unknown issue" +#: ../../Zotlabs/Module/Profiles.php:756 +msgid "Marital status" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:152 -msgid "Unable to retrieve email address from remote identity provider" +#: ../../Zotlabs/Module/Profiles.php:757 +msgid "Sexual preference" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:171 -msgid "Unable to login using email address " +#: ../../Zotlabs/Module/Profiles.php:760 +msgid "Profile name" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:211 -msgid "Social Authentication using your social media account" +#: ../../Zotlabs/Module/Profiles.php:762 +msgid "This is your default profile." msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:215 -msgid "" -"This app enables one or more social provider sign-in buttons on the login " -"page." +#: ../../Zotlabs/Module/Profiles.php:764 +msgid "Your full name" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:233 -msgid "Add an identity provider" +#: ../../Zotlabs/Module/Profiles.php:765 +msgid "Short title/description" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:260 -msgid "Enable " +#: ../../Zotlabs/Module/Profiles.php:765 +msgid "Maximal 190 characters" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267 -msgid "Key" +#: ../../Zotlabs/Module/Profiles.php:768 +msgid "Street address" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:267 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:288 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:299 -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308 -msgid "Word" +#: ../../Zotlabs/Module/Profiles.php:769 +msgid "Locality/City" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:272 -msgid "Secret" +#: ../../Zotlabs/Module/Profiles.php:770 +msgid "Region/State" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:308 -msgid "Add a custom provider" +#: ../../Zotlabs/Module/Profiles.php:771 +msgid "Postal/Zip code" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:328 -msgid "Remove an identity provider" +#: ../../Zotlabs/Module/Profiles.php:777 +msgid "Who (if applicable)" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:338 -msgid "Social authentication" +#: ../../Zotlabs/Module/Profiles.php:777 +msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:380 -msgid "Error while saving provider settings" +#: ../../Zotlabs/Module/Profiles.php:778 +msgid "Since (date)" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:403 -msgid "Custom provider already exists" +#: ../../Zotlabs/Module/Profiles.php:781 +msgid "Tell us about yourself" msgstr "" -#: ../../extend/addon/hzaddons/socialauth/Mod_SocialAuth.php:420 -msgid "Social authentication settings saved." +#: ../../Zotlabs/Module/Profiles.php:783 +msgid "Hometown" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/pumpio.php:152 -msgid "You are now authenticated to pumpio." +#: ../../Zotlabs/Module/Profiles.php:784 +msgid "Political views" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/pumpio.php:153 -msgid "return to the featured settings page" +#: ../../Zotlabs/Module/Profiles.php:785 +msgid "Religious views" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/pumpio.php:168 -msgid "Post to Pump.io" +#: ../../Zotlabs/Module/Profiles.php:786 +msgid "Keywords used in directory listings" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:40 -msgid "Pump.io Settings saved." +#: ../../Zotlabs/Module/Profiles.php:786 +msgid "Example: fishing photography software" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71 -msgid "Pump.io servername" +#: ../../Zotlabs/Module/Profiles.php:789 +msgid "Musical interests" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:71 -msgid "Without \"http://\" or \"https://\"" +#: ../../Zotlabs/Module/Profiles.php:790 +msgid "Books, literature" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75 -msgid "Pump.io username" +#: ../../Zotlabs/Module/Profiles.php:791 +msgid "Television" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:75 -msgid "Without the servername" +#: ../../Zotlabs/Module/Profiles.php:792 +msgid "Film/Dance/Culture/Entertainment" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:86 -msgid "You are not authenticated to pumpio" +#: ../../Zotlabs/Module/Profiles.php:793 +msgid "Hobbies/Interests" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:88 -msgid "(Re-)Authenticate your pump.io connection" +#: ../../Zotlabs/Module/Profiles.php:794 +msgid "Love/Romance" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:92 -msgid "Post to pump.io by default" +#: ../../Zotlabs/Module/Profiles.php:796 +msgid "School/Education" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:96 -msgid "Should posts be public" +#: ../../Zotlabs/Module/Profiles.php:797 +msgid "Contact information and social networks" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:100 -msgid "Mirror all public posts" +#: ../../Zotlabs/Module/Profiles.php:798 +msgid "My other channels" msgstr "" -#: ../../extend/addon/hzaddons/pumpio/Mod_Pumpio.php:110 -msgid "Pump.io Crosspost Connector" +#: ../../Zotlabs/Module/Sharedwithme.php:106 +msgid "Files: shared with me" msgstr "" -#: ../../extend/addon/hzaddons/superblock/superblock.php:355 -msgid "Block Completely" +#: ../../Zotlabs/Module/Sharedwithme.php:108 +msgid "NEW" msgstr "" -#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:62 -msgid "superblock settings updated" +#: ../../Zotlabs/Module/Sharedwithme.php:111 +msgid "Remove all files" msgstr "" -#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:86 -msgid "Currently blocked" +#: ../../Zotlabs/Module/Sharedwithme.php:112 +msgid "Remove this file" msgstr "" -#: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:88 -msgid "No channels currently blocked" +#: ../../Zotlabs/Module/Rbmark.php:72 +msgid "Select a bookmark folder" msgstr "" -#: ../../extend/addon/hzaddons/gallery/gallery.php:43 -#: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:135 -msgid "Gallery" +#: ../../Zotlabs/Module/Rbmark.php:80 +msgid "Save Bookmark" msgstr "" -#: ../../extend/addon/hzaddons/gallery/gallery.php:46 -msgid "Photo Gallery" +#: ../../Zotlabs/Module/Rbmark.php:81 +msgid "URL of bookmark" msgstr "" -#: ../../extend/addon/hzaddons/randpost/randpost.php:99 -msgid "You're welcome." +#: ../../Zotlabs/Module/Rbmark.php:86 +msgid "Or enter new bookmark folder name" msgstr "" -#: ../../extend/addon/hzaddons/randpost/randpost.php:100 -msgid "Ah shucks..." +#: ../../Zotlabs/Module/Lockview.php:101 +msgid "Remote privacy information not available" msgstr "" -#: ../../extend/addon/hzaddons/randpost/randpost.php:101 -msgid "Don't mention it." +#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203 +#: ../../Zotlabs/Module/Acl.php:124 +msgctxt "acl" +msgid "Profile" msgstr "" -#: ../../extend/addon/hzaddons/randpost/randpost.php:102 -msgid "<blush>" +#: ../../Zotlabs/Module/Lockview.php:155 ../../Zotlabs/Module/Lockview.php:212 +msgid "Privacy group" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:51 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:129 -msgid "System defaults:" +#: ../../Zotlabs/Module/Lockview.php:183 +msgid "Item" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55 -msgid "Preferred Clipart IDs" +#: ../../Zotlabs/Module/Lockview.php:230 +#, php-format +msgid "Click to copy link to this ressource for guest %s to clipboard" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:55 -msgid "List of preferred clipart ids. These will be shown first." +#: ../../Zotlabs/Module/Lockview.php:230 +msgid "Link copied" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56 -msgid "Default Search Term" +#: ../../Zotlabs/Module/Lockview.php:235 +msgid "Access" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:56 -msgid "The default search term. These will be shown second." +#: ../../Zotlabs/Module/Lockview.php:237 +msgid "OCAP access" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57 -msgid "Return After" +#: ../../Zotlabs/Module/Channel_calendar.php:62 +msgid "Event can not end before it has started." msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57 -msgid "Page to load after image selection." +#: ../../Zotlabs/Module/Channel_calendar.php:64 +#: ../../Zotlabs/Module/Channel_calendar.php:72 +#: ../../Zotlabs/Module/Channel_calendar.php:87 +msgid "Unable to generate preview." msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:60 -msgid "Profile List" +#: ../../Zotlabs/Module/Channel_calendar.php:70 +msgid "Event title and start time are required." msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62 -msgid "Order of Preferred" +#: ../../Zotlabs/Module/Channel_calendar.php:85 +#: ../../Zotlabs/Module/Channel_calendar.php:214 +msgid "Event not found." msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:62 -msgid "Sort order of preferred clipart ids." +#: ../../Zotlabs/Module/Channel_calendar.php:358 +msgid "Edit event" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:63 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:69 -msgid "Newest first" +#: ../../Zotlabs/Module/Channel_calendar.php:360 +msgid "Delete event" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:66 -msgid "As entered" +#: ../../Zotlabs/Module/Channel_calendar.php:394 +msgid "calendar" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68 -msgid "Order of other" +#: ../../Zotlabs/Module/Channel_calendar.php:485 +msgid "Failed to remove event" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:68 -msgid "Sort order of other clipart ids." +#: ../../Zotlabs/Module/Go.php:22 +msgid "This page is available only to site members" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:70 -msgid "Most downloaded first" +#: ../../Zotlabs/Module/Go.php:30 +msgid "What would you like to do?" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:71 -msgid "Most liked first" +#: ../../Zotlabs/Module/Go.php:32 +msgid "" +"Please bookmark this page if you would like to return to it in the future" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73 -msgid "Preferred IDs Message" +#: ../../Zotlabs/Module/Go.php:36 +msgid "Upload a profile photo" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:73 -msgid "Message to display above preferred results." +#: ../../Zotlabs/Module/Go.php:37 +msgid "Upload a cover photo" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79 -msgid "Uploaded by: " +#: ../../Zotlabs/Module/Go.php:38 +msgid "Edit your default profile" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:79 -msgid "Drawn by: " +#: ../../Zotlabs/Module/Go.php:40 +msgid "View the channel directory" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:183 -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:195 -msgid "Use this image" +#: ../../Zotlabs/Module/Go.php:41 +msgid "View/edit your channel settings" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:193 -msgid "Or select from a free OpenClipart.org image:" +#: ../../Zotlabs/Module/Go.php:42 +msgid "View the site or project documentation" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:196 -msgid "Search Term" +#: ../../Zotlabs/Module/Go.php:43 +msgid "Visit your channel homepage" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:233 -msgid "Unknown error. Please try again later." +#: ../../Zotlabs/Module/Go.php:44 +msgid "" +"View your connections and/or add somebody whose address you already know" msgstr "" -#: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:309 -msgid "Profile photo updated successfully." +#: ../../Zotlabs/Module/Go.php:45 +msgid "" +"View your personal stream (this may be empty until you add some connections)" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:94 -msgid "Hubzilla Directory Stats" +#: ../../Zotlabs/Module/Go.php:53 +msgid "View the public stream. Warning: this content is not moderated" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:95 -msgid "Total Hubs" +#: ../../Zotlabs/Module/Chat.php:193 +msgid "Room not found" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:97 -msgid "Hubzilla Hubs" +#: ../../Zotlabs/Module/Chat.php:209 +msgid "Leave Room" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:99 -msgid "Friendica Hubs" +#: ../../Zotlabs/Module/Chat.php:210 +msgid "Delete Room" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:101 -msgid "Diaspora Pods" +#: ../../Zotlabs/Module/Chat.php:211 +msgid "I am away right now" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:103 -msgid "Hubzilla Channels" +#: ../../Zotlabs/Module/Chat.php:212 +msgid "I am online" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:105 -msgid "Friendica Channels" +#: ../../Zotlabs/Module/Chat.php:214 +msgid "Bookmark this room" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:107 -msgid "Diaspora Channels" +#: ../../Zotlabs/Module/Chat.php:237 +msgid "New Chatroom" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:109 -msgid "Aged 35 and above" +#: ../../Zotlabs/Module/Chat.php:238 +msgid "Chatroom name" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:111 -msgid "Aged 34 and under" +#: ../../Zotlabs/Module/Chat.php:239 +msgid "Expiration of chats (minutes)" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:113 -msgid "Average Age" +#: ../../Zotlabs/Module/Chat.php:255 +#, php-format +msgid "%1$s's Chatrooms" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:115 -msgid "Known Chatrooms" +#: ../../Zotlabs/Module/Chat.php:260 +msgid "No chatrooms available" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:117 -msgid "Known Tags" +#: ../../Zotlabs/Module/Chat.php:261 +msgid "Add Room" msgstr "" -#: ../../extend/addon/hzaddons/dirstats/dirstats.php:119 -msgid "" -"Please note Diaspora and Friendica statistics are merely those **this " -"directory** is aware of, and not all those known in the network. This also " -"applies to chatrooms," +#: ../../Zotlabs/Module/Chat.php:264 +msgid "Expiration" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:61 -msgid "" -"Please contact your site administrator.<br />The provided API URL is not " -"valid." +#: ../../Zotlabs/Module/Chat.php:265 +msgid "min" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:98 -msgid "We could not contact the GNU social API with the Path you entered." +#: ../../Zotlabs/Module/Regate.php:85 +msgid "Email resent" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:130 -msgid "GNU social settings updated." +#: ../../Zotlabs/Module/Regate.php:85 +msgid "Email resend failed" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:179 -msgid "Globally Available GNU social OAuthKeys" +#: ../../Zotlabs/Module/Regate.php:110 +msgid "Verification successful" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:181 -msgid "" -"There are preconfigured OAuth key pairs for some GNU social servers " -"available. If you are using one of them, please use these credentials.<br /" -">If not feel free to connect to any other GNU social instance (see below)." +#: ../../Zotlabs/Module/Regate.php:154 +msgid "Account successfull created" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:196 -msgid "Provide your own OAuth Credentials" +#: ../../Zotlabs/Module/Regate.php:212 +msgid "Channel successfull created" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:198 -msgid "" -"No consumer key pair for GNU social found. Register your Hubzilla Account as " -"an desktop client on your GNU social account, copy the consumer key pair " -"here and enter the API base root.<br />Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Hubzilla installation at your favourite GNU social installation." +#: ../../Zotlabs/Module/Regate.php:218 +msgid "Automatic channel creation failed. Please create a channel." msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:202 -msgid "OAuth Consumer Key" +#: ../../Zotlabs/Module/Regate.php:230 +msgid "Account creation error" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:206 -msgid "OAuth Consumer Secret" +#: ../../Zotlabs/Module/Regate.php:242 +msgid "Verify failed" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210 -msgid "Base API Path" +#: ../../Zotlabs/Module/Regate.php:247 +msgid "Token verification failed" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:210 -msgid "Remember the trailing /" +#: ../../Zotlabs/Module/Regate.php:252 +msgid "Request not inside time frame" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:214 -msgid "GNU social application name" +#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288 +msgid "Identity unknown" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:237 -msgid "" -"To connect to your GNU social account click the button below to get a " -"security code from GNU social which you have to copy into the input box " -"below and submit the form. Only your <strong>public</strong> posts will be " -"posted to GNU social." +#: ../../Zotlabs/Module/Regate.php:264 +msgid "dId2 mistaken" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:239 -msgid "Log in with GNU social" +#: ../../Zotlabs/Module/Regate.php:292 +msgid "Your Registration ID" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:242 -msgid "Copy the security code from GNU social here" +#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397 +#: ../../Zotlabs/Module/Regate.php:429 +msgid "Registration verification" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:252 -msgid "Cancel Connection Process" +#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434 +msgid "Hold on, you can start verification in" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:254 -msgid "Current GNU social API is" +#: ../../Zotlabs/Module/Regate.php:313 +msgid "Please remember your verification token for ID" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:258 -msgid "Cancel GNU social Connection" +#: ../../Zotlabs/Module/Regate.php:315 +msgid "Token validity" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:270 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:145 -msgid "Currently connected to: " +#: ../../Zotlabs/Module/Regate.php:351 +msgid "Resend email" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:275 -msgid "" -"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile " -"details from unknown viewers?</em>) the link potentially included in public " -"postings relayed to GNU social will lead the visitor to a blank page " -"informing the visitor that the access to your profile has been restricted." +#: ../../Zotlabs/Module/Regate.php:356 +msgid "Registration status" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280 -msgid "Post to GNU social by default" +#: ../../Zotlabs/Module/Regate.php:359 +msgid "Verification successful!" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:280 -msgid "" -"If enabled your public postings will be posted to the associated GNU-social " -"account by default" +#: ../../Zotlabs/Module/Regate.php:360 +msgid "Your login ID is" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:289 -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:169 -msgid "Clear OAuth configuration" +#: ../../Zotlabs/Module/Regate.php:361 +msgid "" +"After your account has been approved by our administrator you will be able " +"to login with your login ID and your provided password." msgstr "" -#: ../../extend/addon/hzaddons/statusnet/Mod_Statusnet.php:301 -msgid "GNU-Social Crosspost Connector" +#: ../../Zotlabs/Module/Regate.php:373 +msgid "Registration request revoked" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:145 -msgid "Post to GNU social" +#: ../../Zotlabs/Module/Regate.php:374 +msgid "Sorry for any inconvience. Thank you for your response." msgstr "" -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:594 -msgid "API URL" +#: ../../Zotlabs/Module/Regate.php:398 +msgid "Please enter your verification token for ID" msgstr "" -#: ../../extend/addon/hzaddons/statusnet/statusnet.php:597 -msgid "Application name" +#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426 +msgid "Please check your email!" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:49 -msgid "Post to Livejournal" +#: ../../Zotlabs/Module/Regate.php:409 +msgid "Verification token" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:127 -msgid "Posted by" +#: ../../Zotlabs/Module/Regate.php:420 +msgid "ID expired" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:134 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67 -#: ../../extend/addon/hzaddons/dwpost/dwpost.php:134 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:381 -#: ../../extend/addon/hzaddons/wppost/wppost.php:175 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96 -msgid "Source" +#: ../../Zotlabs/Module/Regate.php:435 +msgid "You will require the verification token for ID" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:53 -msgid "Livejournal username" +#: ../../Zotlabs/Module/Regate.php:444 +msgid "Unknown or expired ID" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:57 -msgid "Livejournal password" +#: ../../Zotlabs/Module/Regate.php:455 +msgid "dId2 malformed" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:61 -msgid "Post to Livejournal by default" +#: ../../Zotlabs/Module/Editlayout.php:137 +msgid "Edit Layout" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:65 -msgid "Send wall-to-wall posts to Livejournal" +#: ../../Zotlabs/Module/Setup.php:180 +msgid "$Projectname Server - Setup" msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:69 -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:63 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:92 -msgid "Add link to original post" +#: ../../Zotlabs/Module/Setup.php:184 +msgid "Could not connect to database." msgstr "" -#: ../../extend/addon/hzaddons/ljpost/Mod_Ljpost.php:77 -msgid "Livejournal Crosspost Connector" +#: ../../Zotlabs/Module/Setup.php:188 +msgid "" +"Could not connect to specified site URL. Possible SSL certificate or DNS " +"issue." msgstr "" -#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:22 -msgid "pageheader Settings saved." +#: ../../Zotlabs/Module/Setup.php:195 +msgid "Could not create table." msgstr "" -#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:41 -msgid "Message to display on every page on this server" +#: ../../Zotlabs/Module/Setup.php:201 +msgid "Your site database has been installed." msgstr "" -#: ../../extend/addon/hzaddons/pageheader/Mod_Pageheader.php:49 -msgid "Page Header" +#: ../../Zotlabs/Module/Setup.php:207 +msgid "" +"You may need to import the file \"install/schema_xxx.sql\" manually using a " +"database client." msgstr "" -#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:22 -msgid "Rainbow Tag App" +#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:277 +#: ../../Zotlabs/Module/Setup.php:802 +msgid "Please see the file \"install/INSTALL.txt\"." msgstr "" -#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:23 -msgid "Add some colour to tag clouds" +#: ../../Zotlabs/Module/Setup.php:274 +msgid "System check" msgstr "" -#: ../../extend/addon/hzaddons/rainbowtag/Mod_Rainbowtag.php:30 -msgid "Rainbow Tag" +#: ../../Zotlabs/Module/Setup.php:279 +msgid "Check again" msgstr "" -#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:23 -msgid "Recent Channel/Profile Viewers" +#: ../../Zotlabs/Module/Setup.php:300 +msgid "Database connection" msgstr "" -#: ../../extend/addon/hzaddons/visage/Mod_Visage.php:34 -msgid "No entries." +#: ../../Zotlabs/Module/Setup.php:301 +msgid "" +"In order to install $Projectname we need to know how to connect to your " +"database." msgstr "" -#: ../../extend/addon/hzaddons/testdrive/testdrive.php:104 -#, php-format -msgid "Your account on %s will expire in a few days." +#: ../../Zotlabs/Module/Setup.php:302 +msgid "" +"Please contact your hosting provider or site administrator if you have " +"questions about these settings." msgstr "" -#: ../../extend/addon/hzaddons/testdrive/testdrive.php:105 -msgid "Your test account is about to expire." +#: ../../Zotlabs/Module/Setup.php:303 +msgid "" +"The database you specify below should already exist. If it does not, please " +"create it before continuing." msgstr "" -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:21 -msgid "nofed Settings saved." +#: ../../Zotlabs/Module/Setup.php:307 +msgid "Database Server Name" msgstr "" -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:40 -msgid "Federate posts by default" +#: ../../Zotlabs/Module/Setup.php:307 +msgid "Default is 127.0.0.1" msgstr "" -#: ../../extend/addon/hzaddons/nofed/Mod_Nofed.php:48 -msgid "No Federation" +#: ../../Zotlabs/Module/Setup.php:308 +msgid "Database Port" msgstr "" -#: ../../extend/addon/hzaddons/nofed/nofed.php:47 -msgid "Federate" +#: ../../Zotlabs/Module/Setup.php:308 +msgid "Communication port number - use 0 for default" msgstr "" -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:51 -msgid "Your Webbie:" +#: ../../Zotlabs/Module/Setup.php:309 +msgid "Database Login Name" msgstr "" -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:54 -msgid "Fontsize (px):" +#: ../../Zotlabs/Module/Setup.php:310 +msgid "Database Login Password" msgstr "" -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:68 -msgid "Link:" +#: ../../Zotlabs/Module/Setup.php:311 +msgid "Database Name" msgstr "" -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:70 -msgid "Like us on Hubzilla" +#: ../../Zotlabs/Module/Setup.php:312 +msgid "Database Type" msgstr "" -#: ../../extend/addon/hzaddons/likebanner/likebanner.php:72 -msgid "Embed:" +#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354 +msgid "Site administrator email address" msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:85 +#: ../../Zotlabs/Module/Setup.php:314 ../../Zotlabs/Module/Setup.php:354 msgid "" -"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> " -"analytics tool." +"Your account email address must match this in order to use the web admin " +"panel." msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:88 -#, php-format -msgid "" -"If you do not want that your visits are logged this way you <a href='%s'>can " -"set a cookie to prevent Piwik from tracking further visits of the site</a> " -"(opt-out)." +#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356 +msgid "Website URL" msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:96 -msgid "Piwik Base URL" +#: ../../Zotlabs/Module/Setup.php:315 ../../Zotlabs/Module/Setup.php:356 +msgid "Please use SSL (https) URL if available." msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:96 -msgid "" -"Absolute path to your Piwik installation. (without protocol (http/s), with " -"trailing slash)" +#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:358 +msgid "Please select a default timezone for your website" msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:97 -msgid "Site ID" +#: ../../Zotlabs/Module/Setup.php:343 +msgid "Site settings" msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:98 -msgid "Show opt-out cookie link?" +#: ../../Zotlabs/Module/Setup.php:397 +msgid "PHP version 8.0 or greater is required." msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:99 -msgid "Asynchronous tracking" +#: ../../Zotlabs/Module/Setup.php:398 +msgid "PHP version" msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:100 -msgid "Enable frontend JavaScript error tracking" +#: ../../Zotlabs/Module/Setup.php:414 +msgid "Could not find a command line version of PHP in the web server PATH." msgstr "" -#: ../../extend/addon/hzaddons/piwik/piwik.php:100 -msgid "This feature requires Piwik >= 2.2.0" +#: ../../Zotlabs/Module/Setup.php:415 +msgid "" +"If you don't have a command line version of PHP installed on server, you " +"will not be able to run background polling via cron." msgstr "" -#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60 -msgid "Page to load after login" +#: ../../Zotlabs/Module/Setup.php:419 +msgid "PHP executable path" msgstr "" -#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:60 +#: ../../Zotlabs/Module/Setup.php:419 msgid "" -"Examples: "apps", "network?f=&gid=37" (privacy " -"collection), "channel" or "notifications/system" (leave " -"blank for default network page (grid)." -msgstr "" - -#: ../../extend/addon/hzaddons/startpage/Mod_Startpage.php:68 -msgid "Startpage" +"Enter full path to php executable. You can leave this blank to continue the " +"installation." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:65 -msgid "Twitter settings updated." +#: ../../Zotlabs/Module/Setup.php:424 +msgid "Command line PHP" msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:101 +#: ../../Zotlabs/Module/Setup.php:434 msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." +"Unable to check command line PHP, as shell_exec() is disabled. This is " +"required." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:123 +#: ../../Zotlabs/Module/Setup.php:438 msgid "" -"At this Hubzilla instance the Twitter plugin was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input " -"box below and submit the form. Only your <strong>public</strong> posts will " -"be posted to Twitter." +"The command line version of PHP on your system does not have " +"\"register_argc_argv\" enabled." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:125 -msgid "Log in with Twitter" +#: ../../Zotlabs/Module/Setup.php:439 +msgid "This is required for message delivery to work." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:128 -msgid "Copy the PIN from Twitter here" +#: ../../Zotlabs/Module/Setup.php:442 +msgid "PHP register_argc_argv" msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:150 +#: ../../Zotlabs/Module/Setup.php:462 msgid "" -"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile " -"details from unknown viewers?</em>) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." +"This is not sufficient to upload larger images or files. You should be able " +"to upload at least 4 MB at once." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155 -msgid "Twitter post length" +#: ../../Zotlabs/Module/Setup.php:464 +#, php-format +msgid "" +"Your max allowed total upload size is set to %s. Maximum size of one file to " +"upload is set to %s. You are allowed to upload up to %d files at once." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:155 -msgid "Maximum tweet length" +#: ../../Zotlabs/Module/Setup.php:470 +msgid "You can adjust these settings in the server php.ini file." msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160 -msgid "Send public postings to Twitter by default" +#: ../../Zotlabs/Module/Setup.php:472 +msgid "PHP upload limits" msgstr "" -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:160 +#: ../../Zotlabs/Module/Setup.php:495 msgid "" -"If enabled your public postings will be posted to the associated Twitter " -"account by default" -msgstr "" - -#: ../../extend/addon/hzaddons/twitter/Mod_Twitter.php:179 -msgid "Twitter Crosspost Connector" +"Error: the \"openssl_pkey_new\" function on this system is not able to " +"generate encryption keys" msgstr "" -#: ../../extend/addon/hzaddons/twitter/twitter.php:109 -msgid "Post to Twitter" +#: ../../Zotlabs/Module/Setup.php:496 +msgid "" +"If running under Windows, please see \"http://www.php.net/manual/en/openssl." +"installation.php\"." msgstr "" -#: ../../extend/addon/hzaddons/twitter/twitter.php:502 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:95 -msgid "Submit Settings" +#: ../../Zotlabs/Module/Setup.php:499 +msgid "Generate encryption keys" msgstr "" -#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:22 -msgid "Fuzzloc Settings updated." +#: ../../Zotlabs/Module/Setup.php:503 +msgid "Error: the sodium encryption library is not installed." msgstr "" -#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:38 -msgid "Minimum offset in meters" +#: ../../Zotlabs/Module/Setup.php:505 +msgid "Generate ed25519 encryption keys" msgstr "" -#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:42 -msgid "Maximum offset in meters" +#: ../../Zotlabs/Module/Setup.php:510 +msgid "" +"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are " +"required." msgstr "" -#: ../../extend/addon/hzaddons/fuzzloc/Mod_Fuzzloc.php:51 -msgid "Fuzzy Location" +#: ../../Zotlabs/Module/Setup.php:512 +msgid "Bigmath library (either bcmath or gmp)" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:18 -msgid "No username found in import file." +#: ../../Zotlabs/Module/Setup.php:529 +msgid "libCurl PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/import_diaspora.php:140 -msgid "Import completed." +#: ../../Zotlabs/Module/Setup.php:530 +msgid "GD graphics PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1632 -#, php-format -msgid "%1$s dislikes %2$s's %3$s" +#: ../../Zotlabs/Module/Setup.php:531 +msgid "OpenSSL PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:43 -msgid "Diaspora Protocol Settings updated." +#: ../../Zotlabs/Module/Setup.php:532 +msgid "PDO database PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:52 -msgid "" -"The diaspora protocol does not support location independence. Connections " -"you make within that network may be unreachable from alternate channel " -"locations." +#: ../../Zotlabs/Module/Setup.php:533 +msgid "mb_string PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:80 -msgid "Prevent your hashtags from being redirected to other sites" +#: ../../Zotlabs/Module/Setup.php:534 +msgid "xml PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:84 -msgid "Sign and forward posts and comments with no existing Diaspora signature" +#: ../../Zotlabs/Module/Setup.php:535 +msgid "zip PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:89 -msgid "Followed hashtags (comma separated, do not include the #)" +#: ../../Zotlabs/Module/Setup.php:536 +msgid "intl PHP module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/Mod_Diaspora.php:98 -msgid "Diaspora Protocol" +#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:542 +msgid "Apache mod_rewrite module" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:81 +#: ../../Zotlabs/Module/Setup.php:540 msgid "" -"Please install the statistics addon to be able to configure a diaspora relay" -msgstr "" - -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91 -msgid "Diaspora Relay Handle" -msgstr "" - -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:91 -msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld" +"Error: Apache webserver mod-rewrite module is required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:111 -msgid "Diaspora relay could not be imported" +#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549 +msgid "exec" msgstr "" -#: ../../extend/addon/hzaddons/diaspora/diaspora.php:1103 -msgid "No subject" +#: ../../Zotlabs/Module/Setup.php:546 +msgid "" +"Error: exec is required but is either not installed or has been disabled in " +"php.ini" msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:106 -msgid "Photos imported" +#: ../../Zotlabs/Module/Setup.php:552 ../../Zotlabs/Module/Setup.php:555 +msgid "shell_exec" msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:129 -msgid "Redmatrix Photo Album Import" +#: ../../Zotlabs/Module/Setup.php:552 +msgid "" +"Error: shell_exec is required but is either not installed or has been " +"disabled in php.ini" msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:130 -msgid "This will import all your Redmatrix photo albums to this channel." +#: ../../Zotlabs/Module/Setup.php:560 +msgid "Error: libCURL PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:131 -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:121 -msgid "Redmatrix Server base URL" +#: ../../Zotlabs/Module/Setup.php:564 +msgid "" +"Error: GD PHP module with JPEG support or ImageMagick graphics library " +"required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:132 -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:122 -msgid "Redmatrix Login Username" +#: ../../Zotlabs/Module/Setup.php:568 +msgid "Error: openssl PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:133 -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:123 -msgid "Redmatrix Login Password" +#: ../../Zotlabs/Module/Setup.php:574 +msgid "" +"Error: PDO database PHP module missing a driver for either mysql or pgsql." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134 -msgid "Import just this album" +#: ../../Zotlabs/Module/Setup.php:579 +msgid "Error: PDO database PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:134 -msgid "Leave blank to import all albums" +#: ../../Zotlabs/Module/Setup.php:583 +msgid "Error: mb_string PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135 -msgid "Maximum count to import" +#: ../../Zotlabs/Module/Setup.php:587 +msgid "Error: xml PHP module required for DAV but not installed." msgstr "" -#: ../../extend/addon/hzaddons/redphotos/redphotos.php:135 -msgid "0 or blank to import all available" +#: ../../Zotlabs/Module/Setup.php:591 +msgid "Error: zip PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38 -msgid "Some setting" +#: ../../Zotlabs/Module/Setup.php:595 +msgid "Error: intl PHP module required but not installed." msgstr "" -#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:38 -msgid "A setting" +#: ../../Zotlabs/Module/Setup.php:614 ../../Zotlabs/Module/Setup.php:623 +msgid ".htconfig.php is writable" msgstr "" -#: ../../extend/addon/hzaddons/skeleton/Mod_Skeleton.php:46 -msgid "Skeleton Settings" +#: ../../Zotlabs/Module/Setup.php:619 +msgid "" +"The web installer needs to be able to create a file called \".htconfig.php\" " +"in the top folder of your web server and it is unable to do so." msgstr "" -#: ../../extend/addon/hzaddons/qrator/qrator.php:48 -msgid "QR code" +#: ../../Zotlabs/Module/Setup.php:620 +msgid "" +"This is most often a permission setting, as the web server may not be able " +"to write files in your folder - even if you can." msgstr "" -#: ../../extend/addon/hzaddons/qrator/qrator.php:63 -msgid "QR Generator" +#: ../../Zotlabs/Module/Setup.php:621 +msgid "Please see install/INSTALL.txt for additional information." msgstr "" -#: ../../extend/addon/hzaddons/qrator/qrator.php:64 -msgid "Enter some text" +#: ../../Zotlabs/Module/Setup.php:637 +msgid "" +"This software uses the Smarty3 template engine to render its web views. " +"Smarty3 compiles templates to PHP to speed up rendering." msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:26 -msgid "Dreamwidth Crosspost Connector Settings saved." +#: ../../Zotlabs/Module/Setup.php:638 +#, php-format +msgid "" +"In order to store these compiled templates, the web server needs to have " +"write access to the directory %s under the top level web folder." msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:51 -msgid "Dreamwidth username" +#: ../../Zotlabs/Module/Setup.php:639 ../../Zotlabs/Module/Setup.php:660 +msgid "" +"Please ensure that the user that your web server runs as (e.g. www-data) has " +"write access to this folder." msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:55 -msgid "Dreamwidth password" +#: ../../Zotlabs/Module/Setup.php:640 +#, php-format +msgid "" +"Note: as a security measure, you should give the web server write access to " +"%s only--not the template files (.tpl) that it contains." msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:59 -msgid "Post to Dreamwidth by default" +#: ../../Zotlabs/Module/Setup.php:643 +#, php-format +msgid "%s is writable" msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:67 -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:96 -msgid "Link description (default:" +#: ../../Zotlabs/Module/Setup.php:659 +msgid "" +"This software uses the store directory to save uploaded files. The web " +"server needs to have write access to the store directory under the top level " +"web folder" msgstr "" -#: ../../extend/addon/hzaddons/dwpost/Mod_Dwpost.php:75 -msgid "Dreamwidth Crosspost Connector" +#: ../../Zotlabs/Module/Setup.php:663 +msgid "store is writable" msgstr "" -#: ../../extend/addon/hzaddons/dwpost/dwpost.php:49 -msgid "Post to Dreamwidth" +#: ../../Zotlabs/Module/Setup.php:695 +msgid "" +"SSL certificate cannot be validated. Fix certificate or disable https access " +"to this site." msgstr "" -#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:25 -msgid "Show Upload Limits" +#: ../../Zotlabs/Module/Setup.php:696 +msgid "" +"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!" msgstr "" -#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:27 -msgid "Hubzilla configured maximum size: " +#: ../../Zotlabs/Module/Setup.php:697 +msgid "" +"This restriction is incorporated because public posts from you may for " +"example contain references to images on your own hub." msgstr "" -#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:28 -msgid "PHP upload_max_filesize: " +#: ../../Zotlabs/Module/Setup.php:698 +msgid "" +"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." msgstr "" -#: ../../extend/addon/hzaddons/upload_limits/upload_limits.php:29 -msgid "PHP post_max_size (must be larger than upload_max_filesize): " +#: ../../Zotlabs/Module/Setup.php:699 +msgid "" +"This can cause usability issues elsewhere (not just on your own site) so we " +"must insist on this requirement." msgstr "" -#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:23 -msgid "NSA Bait App" +#: ../../Zotlabs/Module/Setup.php:700 +msgid "" +"Providers are available that issue free certificates which are browser-valid." msgstr "" -#: ../../extend/addon/hzaddons/nsabait/Mod_Nsabait.php:25 -msgid "Make yourself a political target." +#: ../../Zotlabs/Module/Setup.php:701 +msgid "" +"If you are confident that the certificate is valid and signed by a trusted " +"authority, check to see if you have failed to install an intermediate cert. " +"These are not normally required by browsers, but are required for server-to-" +"server communications." msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:27 -msgid "No server specified" +#: ../../Zotlabs/Module/Setup.php:703 +msgid "SSL certificate validation" msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:72 -msgid "Posts imported" +#: ../../Zotlabs/Module/Setup.php:709 +msgid "" +"Url rewrite in .htaccess is not working. Check your server configuration." +"Test: " msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:112 -msgid "Files imported" +#: ../../Zotlabs/Module/Setup.php:712 +msgid "Url rewrite is working" msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:134 +#: ../../Zotlabs/Module/Setup.php:725 msgid "" -"This will import all your conversations and cloud files from a cloned " -"channel on another server. This may take a while if you have lots of posts " -"and or files." +"The database configuration file \".htconfig.php\" could not be written. " +"Please use the enclosed text to create a configuration file in your web " +"server root." msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135 -msgid "Include posts" +#: ../../Zotlabs/Module/Setup.php:800 +msgid "<h1>What next?</h1>" msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:135 -msgid "Conversations, Articles, Cards, and other posted content" +#: ../../Zotlabs/Module/Setup.php:801 +msgid "" +"IMPORTANT: You will need to [manually] setup a scheduled task for the poller." msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136 -msgid "Include files" +#: ../../Zotlabs/Module/Chanview.php:132 +msgid "toggle full screen mode" msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:136 -msgid "Files, Photos and other cloud storage" +#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:66 +msgid "Invalid profile identifier." msgstr "" -#: ../../extend/addon/hzaddons/content_import/Mod_content_import.php:137 -msgid "Original Server base URL" +#: ../../Zotlabs/Module/Profperm.php:114 +msgid "Profile Visibility Editor" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:24 -msgid "Friendica Crosspost Connector Settings saved." +#: ../../Zotlabs/Module/Profperm.php:118 +msgid "Click on a contact to add or remove." msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:47 -msgid "Send public postings to Friendica by default" +#: ../../Zotlabs/Module/Profperm.php:127 +msgid "Visible To" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51 -msgid "Friendica API Path" +#: ../../Zotlabs/Module/Profperm.php:143 +#: ../../Zotlabs/Module/Connections.php:221 +msgid "All Connections" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:51 -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65 -msgid "https://{sitename}/api" +#: ../../Zotlabs/Module/Lang.php:20 +msgid "Language App" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:55 -msgid "Friendica login name" +#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:114 +msgid "Edit post" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:59 -msgid "Friendica password" +#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43 +msgid "Item is not editable" msgstr "" -#: ../../extend/addon/hzaddons/rtof/Mod_Rtof.php:67 -msgid "Friendica Crosspost Connector" +#: ../../Zotlabs/Module/Connections.php:58 +#: ../../Zotlabs/Module/Connections.php:116 +msgid "Active" msgstr "" -#: ../../extend/addon/hzaddons/rtof/rtof.php:51 -msgid "Post to Friendica" +#: ../../Zotlabs/Module/Connections.php:63 +#: ../../Zotlabs/Module/Connections.php:185 +#: ../../Zotlabs/Module/Connections.php:296 +msgid "Blocked" msgstr "" -#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:34 -msgid "New registration" +#: ../../Zotlabs/Module/Connections.php:68 +#: ../../Zotlabs/Module/Connections.php:192 +#: ../../Zotlabs/Module/Connections.php:295 +msgid "Ignored" msgstr "" -#: ../../extend/addon/hzaddons/notifyadmin/notifyadmin.php:42 -#, php-format -msgid "Message sent to %s. New account registration: %s" +#: ../../Zotlabs/Module/Connections.php:73 +#: ../../Zotlabs/Module/Connections.php:206 +#: ../../Zotlabs/Module/Connections.php:294 +msgid "Hidden" msgstr "" -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:119 -msgid "Redmatrix File Storage Import" +#: ../../Zotlabs/Module/Connections.php:78 +#: ../../Zotlabs/Module/Connections.php:199 +msgid "Archived/Unreachable" msgstr "" -#: ../../extend/addon/hzaddons/redfiles/redfiles.php:120 -msgid "This will import all your Redmatrix cloud files to this channel." +#: ../../Zotlabs/Module/Connections.php:161 +msgid "Active Connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:19 -msgid "Send test email" +#: ../../Zotlabs/Module/Connections.php:164 +msgid "Show active connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:50 -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:50 -msgid "No recipients found." +#: ../../Zotlabs/Module/Connections.php:171 +msgid "Show pending (new) connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:66 -msgid "Mail sent." +#: ../../Zotlabs/Module/Connections.php:188 +msgid "Only show blocked connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:68 -msgid "Sending of mail failed." +#: ../../Zotlabs/Module/Connections.php:195 +msgid "Only show ignored connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:77 -msgid "Mail Test" +#: ../../Zotlabs/Module/Connections.php:202 +msgid "Only show archived/unreachable connections" msgstr "" -#: ../../extend/addon/hzaddons/mailtest/mailtest.php:96 -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:93 -msgid "Message subject" +#: ../../Zotlabs/Module/Connections.php:209 +msgid "Only show hidden connections" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:57 -msgid "Errors encountered deleting database table " +#: ../../Zotlabs/Module/Connections.php:224 +msgid "Show all connections" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96 -msgid "Drop tables when uninstalling?" +#: ../../Zotlabs/Module/Connections.php:292 +msgid "Pending approval" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:96 -msgid "" -"If checked, the Rendezvous database tables will be deleted when the plugin " -"is uninstalled." +#: ../../Zotlabs/Module/Connections.php:293 +msgid "Archived" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97 -msgid "Mapbox Access Token" +#: ../../Zotlabs/Module/Connections.php:297 +msgid "Not connected at this location" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:97 -msgid "" -"If you enter a Mapbox access token, it will be used to retrieve map tiles " -"from Mapbox instead of the default OpenStreetMap tile server." +#: ../../Zotlabs/Module/Connections.php:336 +#, php-format +msgid "%1$s [%2$s]" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:162 -msgid "Rendezvous" +#: ../../Zotlabs/Module/Connections.php:337 +msgid "Edit connection" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:167 -msgid "" -"This identity has been deleted by another member due to inactivity. Please " -"press the \"New identity\" button or refresh the page to register a new " -"identity. You may use the same name." +#: ../../Zotlabs/Module/Connections.php:339 +msgid "Delete connection" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:168 -msgid "Welcome to Rendezvous!" +#: ../../Zotlabs/Module/Connections.php:345 +msgid "Channel address" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:169 -msgid "" -"Enter your name to join this rendezvous. To begin sharing your location with " -"the other members, tap the GPS control. When your location is discovered, a " -"red dot will appear and others will be able to see you on the map." +#: ../../Zotlabs/Module/Connections.php:350 +msgid "Call" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:171 -msgid "Let's meet here" +#: ../../Zotlabs/Module/Connections.php:352 +msgid "Status" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:174 -msgid "New marker" +#: ../../Zotlabs/Module/Connections.php:355 +msgid "Connected" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:175 -msgid "Edit marker" +#: ../../Zotlabs/Module/Connections.php:359 +msgid "Ignore connection" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:176 -msgid "New identity" +#: ../../Zotlabs/Module/Connections.php:361 +msgid "Recent activity" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:177 -msgid "Delete marker" +#: ../../Zotlabs/Module/Connections.php:367 +msgid "Connect at this location" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:178 -msgid "Delete member" +#: ../../Zotlabs/Module/Connections.php:405 +msgid "Search your connections" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:179 -msgid "Edit proximity alert" +#: ../../Zotlabs/Module/Connections.php:406 +msgid "Contact search" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180 -msgid "" -"A proximity alert will be issued when this member is within a certain radius " -"of you.<br><br>Enter a radius in meters (0 to disable):" +#: ../../Zotlabs/Module/Cdav.php:819 +msgid "Calendar entries imported." msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:180 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:185 -msgid "distance" +#: ../../Zotlabs/Module/Cdav.php:821 +msgid "No calendar entries found." msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:181 -msgid "Proximity alert distance (meters)" +#: ../../Zotlabs/Module/Cdav.php:1000 +msgid "Event title" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:182 -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:184 -msgid "" -"A proximity alert will be issued when you are within a certain radius of the " -"marker location.<br><br>Enter a radius in meters (0 to disable):" +#: ../../Zotlabs/Module/Cdav.php:1001 +msgid "Start date and time" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:183 -msgid "Marker proximity alert" +#: ../../Zotlabs/Module/Cdav.php:1002 +msgid "End date and time" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:186 -msgid "Reminder note" +#: ../../Zotlabs/Module/Cdav.php:1003 +msgid "Timezone:" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:187 -msgid "" -"Enter a note to be displayed when you are within the specified proximity..." +#: ../../Zotlabs/Module/Cdav.php:1029 +msgid "Month" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:199 -msgid "Add new rendezvous" +#: ../../Zotlabs/Module/Cdav.php:1030 +msgid "Week" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:200 -msgid "" -"Create a new rendezvous and share the access link with those you wish to " -"invite to the group. Those who open the link become members of the " -"rendezvous. They can view other member locations, add markers to the map, or " -"share their own locations with the group." +#: ../../Zotlabs/Module/Cdav.php:1031 +msgid "Day" msgstr "" -#: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:232 -msgid "You have no rendezvous. Press the button above to create a rendezvous!" +#: ../../Zotlabs/Module/Cdav.php:1032 +msgid "List month" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:24 -msgid "Channel is required." +#: ../../Zotlabs/Module/Cdav.php:1033 +msgid "List week" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:38 -msgid "Hubzilla Crosspost Connector Settings saved." +#: ../../Zotlabs/Module/Cdav.php:1034 +msgid "List day" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:61 -msgid "Send public postings to Hubzilla channel by default" +#: ../../Zotlabs/Module/Cdav.php:1042 +msgid "More" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:65 -msgid "Hubzilla API Path" +#: ../../Zotlabs/Module/Cdav.php:1043 +msgid "Less" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:69 -msgid "Hubzilla login name" +#: ../../Zotlabs/Module/Cdav.php:1045 +msgid "Select calendar" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:73 -msgid "Hubzilla channel name" +#: ../../Zotlabs/Module/Cdav.php:1048 +msgid "Delete all" msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:77 -msgid "Hubzilla password" +#: ../../Zotlabs/Module/Cdav.php:1051 +msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "" -#: ../../extend/addon/hzaddons/redred/Mod_Redred.php:85 -msgid "Hubzilla Crosspost Connector" +#: ../../Zotlabs/Module/Cdav.php:1052 +msgid "" +"Could not fetch calendar resource. The selected calendar might be disabled." msgstr "" -#: ../../extend/addon/hzaddons/redred/redred.php:50 -msgid "Post to Hubzilla" +#: ../../Zotlabs/Module/Cdav.php:1452 +msgid "Default Calendar" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:224 -msgid "Workflow user." +#: ../../Zotlabs/Module/Cdav.php:1463 +msgid "Default Addressbook" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:275 -msgid "This channel" +#: ../../Zotlabs/Module/Dirsearch.php:32 +msgid "This directory server requires an access token" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:330 -msgid "Create New Workflow Item" +#: ../../Zotlabs/Module/Oauth2.php:54 +msgid "Name and Secret are required" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:564 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1466 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1485 -msgid "Workflow" +#: ../../Zotlabs/Module/Oauth2.php:114 +msgid "Add OAuth2 application" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:1454 -msgid "No Workflows Available" +#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:147 +msgid "Grant Types" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:1484 -msgid "Add item to which workflow" +#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:121 +msgid "leave blank unless your application sepcifically requires this" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:1544 -#: ../../extend/addon/hzaddons/workflow/workflow.php:1663 -msgid "Create Workflow Item" +#: ../../Zotlabs/Module/Oauth2.php:121 ../../Zotlabs/Module/Oauth2.php:148 +msgid "Authorization scope" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2632 -msgid "Link" +#: ../../Zotlabs/Module/Oauth2.php:132 +msgid "OAuth2 Application not found." msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2634 -msgid "Web link." +#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148 +msgid "leave blank unless your application specifically requires this" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2655 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2724 -msgid "Brief description or title" +#: ../../Zotlabs/Module/Oauth2.php:190 +msgid "Connected OAuth2 Apps" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2663 -#: ../../extend/addon/hzaddons/workflow/workflow.php:2732 -msgid "Notes and Info" +#: ../../Zotlabs/Module/Settings/Display.php:126 +#, php-format +msgid "%s - (Experimental)" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2670 -msgid "Used to order links" +#: ../../Zotlabs/Module/Settings/Display.php:183 +msgid "Display Settings" msgstr "" -#: ../../extend/addon/hzaddons/workflow/workflow.php:2730 -msgid "Body" +#: ../../Zotlabs/Module/Settings/Display.php:184 +msgid "Theme Settings" msgstr "" -#: ../../extend/addon/hzaddons/workflow/Settings/Mod_WorkflowSettings.php:101 -msgid "Workflow Settings" +#: ../../Zotlabs/Module/Settings/Display.php:185 +msgid "Custom Theme Settings" msgstr "" -#: ../../extend/addon/hzaddons/workflow/Settings/WorkflowSettingsUtil.php:145 -msgid "Workflow settings" +#: ../../Zotlabs/Module/Settings/Display.php:186 +msgid "Content Settings" msgstr "" -#: ../../extend/addon/hzaddons/nsfw/nsfw.php:153 -msgid "Possible adult content" +#: ../../Zotlabs/Module/Settings/Display.php:192 +msgid "Display Theme:" msgstr "" -#: ../../extend/addon/hzaddons/nsfw/nsfw.php:168 -#, php-format -msgid "%s - view" +#: ../../Zotlabs/Module/Settings/Display.php:193 +msgid "Select scheme" msgstr "" -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:22 -msgid "NSFW Settings saved." +#: ../../Zotlabs/Module/Settings/Display.php:195 +msgid "Preload images before rendering the page" msgstr "" -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:42 +#: ../../Zotlabs/Module/Settings/Display.php:195 msgid "" -"This app looks in posts for the words/text you specify below, and collapses " -"any content containing those keywords so it is not displayed at " -"inappropriate times, such as sexual innuendo that may be improper in a work " -"setting. It is polite and recommended to tag any content containing nudity " -"with #NSFW. This filter can also match any other word/text you specify, and " -"can thereby be used as a general purpose content filter." -msgstr "" - -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47 -msgid "Comma separated list of keywords to hide" -msgstr "" - -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:47 -msgid "Word, /regular-expression/, lang=xx, lang!=xx" +"The subjective page load time will be longer but the page will be ready when " +"displayed" msgstr "" -#: ../../extend/addon/hzaddons/nsfw/Mod_Nsfw.php:56 -msgid "NSFW" +#: ../../Zotlabs/Module/Settings/Display.php:196 +msgid "Enable user zoom on mobile devices" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:21 -msgid "Three Dimensional Tic-Tac-Toe" +#: ../../Zotlabs/Module/Settings/Display.php:197 +msgid "Update browser every xx seconds" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:54 -msgid "3D Tic-Tac-Toe" +#: ../../Zotlabs/Module/Settings/Display.php:197 +msgid "Minimum of 10 seconds, no maximum" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:59 -msgid "New game" +#: ../../Zotlabs/Module/Settings/Display.php:198 +msgid "Maximum number of conversations to load at any time:" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:60 -msgid "New game with handicap" +#: ../../Zotlabs/Module/Settings/Display.php:198 +msgid "Maximum of 30 items" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:61 -msgid "" -"Three dimensional tic-tac-toe is just like the traditional game except that " -"it is played on multiple levels simultaneously. " +#: ../../Zotlabs/Module/Settings/Display.php:199 +msgid "Show emoticons (smilies) as images" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:62 -msgid "" -"In this case there are three levels. You win by getting three in a row on " -"any level, as well as up, down, and diagonally across the different levels." +#: ../../Zotlabs/Module/Settings/Display.php:200 +msgid "Link post titles to source" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:64 -msgid "" -"The handicap game disables the center position on the middle level because " -"the player claiming this square often has an unfair advantage." +#: ../../Zotlabs/Module/Settings/Display.php:202 +msgid "Display new member quick links menu" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:183 -msgid "You go first..." +#: ../../Zotlabs/Module/Settings/Network.php:42 +#: ../../Zotlabs/Module/Settings/Channel_home.php:46 +msgid "Max height of content (in pixels)" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:188 -msgid "I'm going first this time..." +#: ../../Zotlabs/Module/Settings/Network.php:44 +#: ../../Zotlabs/Module/Settings/Channel_home.php:48 +msgid "Click to expand content exceeding this height" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:194 -msgid "You won!" +#: ../../Zotlabs/Module/Settings/Network.php:59 +msgid "Stream Settings" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:200 -#: ../../extend/addon/hzaddons/tictac/tictac.php:225 -msgid "\"Cat\" game!" +#: ../../Zotlabs/Module/Settings/Channel_home.php:61 +msgid "Personal menu to display in your channel pages" msgstr "" -#: ../../extend/addon/hzaddons/tictac/tictac.php:223 -msgid "I won!" +#: ../../Zotlabs/Module/Settings/Channel_home.php:88 +msgid "Channel Home Settings" msgstr "" -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:27 -msgid "Photo Cache settings saved." +#: ../../Zotlabs/Module/Settings/Account.php:23 +msgid "Not valid email." msgstr "" -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:43 -msgid "" -"Saves a copy of images from external sites locally to increase your " -"anonymity in the web." +#: ../../Zotlabs/Module/Settings/Account.php:26 +msgid "Protected email address. Cannot change to that email." msgstr "" -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:49 -msgid "Minimal photo size for caching" +#: ../../Zotlabs/Module/Settings/Account.php:35 +msgid "System failure storing new email. Please try again." msgstr "" -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:51 -msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default." +#: ../../Zotlabs/Module/Settings/Account.php:53 +msgid "Password verification failed." msgstr "" -#: ../../extend/addon/hzaddons/photocache/Mod_Photocache.php:60 -msgid "Photo Cache" +#: ../../Zotlabs/Module/Settings/Account.php:60 +msgid "Passwords do not match. Password unchanged." msgstr "" -#: ../../extend/addon/hzaddons/logrot/logrot.php:36 -msgid "Logfile archive directory" +#: ../../Zotlabs/Module/Settings/Account.php:64 +msgid "Empty passwords are not allowed. Password unchanged." msgstr "" -#: ../../extend/addon/hzaddons/logrot/logrot.php:36 -msgid "Directory to store rotated logs" +#: ../../Zotlabs/Module/Settings/Account.php:78 +msgid "Password changed." msgstr "" -#: ../../extend/addon/hzaddons/logrot/logrot.php:37 -msgid "Logfile size in bytes before rotating" +#: ../../Zotlabs/Module/Settings/Account.php:80 +msgid "Password update failed. Please try again." msgstr "" -#: ../../extend/addon/hzaddons/logrot/logrot.php:38 -msgid "Number of logfiles to retain" +#: ../../Zotlabs/Module/Settings/Account.php:105 +msgid "Account Settings" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:23 -msgid "XMPP settings updated." +#: ../../Zotlabs/Module/Settings/Account.php:106 +msgid "Current Password" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:35 -msgid "XMPP App" +#: ../../Zotlabs/Module/Settings/Account.php:107 +msgid "Enter New Password" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:36 -msgid "Embedded XMPP (Jabber) client" +#: ../../Zotlabs/Module/Settings/Account.php:108 +msgid "Confirm New Password" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:52 -msgid "Individual credentials" +#: ../../Zotlabs/Module/Settings/Account.php:108 +msgid "Leave password fields blank unless changing" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:58 -msgid "Jabber BOSH server" +#: ../../Zotlabs/Module/Settings/Account.php:110 +msgid "Multi-Factor Authentication" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/Mod_Xmpp.php:67 -msgid "XMPP Settings" +#: ../../Zotlabs/Module/Settings/Account.php:111 +msgid "DId2 or Email Address:" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/xmpp.php:44 -msgid "Jabber BOSH host" +#: ../../Zotlabs/Module/Settings/Account.php:114 +msgid "Remove this account including all its channels" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45 -msgid "Use central userbase" +#: ../../Zotlabs/Module/Settings/Editor.php:40 +msgid "Editor Settings" msgstr "" -#: ../../extend/addon/hzaddons/xmpp/xmpp.php:45 -msgid "" -"If enabled, members will automatically login to an ejabberd server that has " -"to be installed on this machine with synchronized credentials via the " -"\"auth_ejabberd.php\" script." +#: ../../Zotlabs/Module/Settings/Features.php:45 +msgid "Additional Features" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:41 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:109 -msgid "(No Title)" +#: ../../Zotlabs/Module/Settings/Directory.php:40 +msgid "Directory Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:123 -msgid "Wiki page create failed." +#: ../../Zotlabs/Module/Settings/Featured.php:25 +msgid "No feature settings configured" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:137 -msgid "Wiki not found." +#: ../../Zotlabs/Module/Settings/Featured.php:34 +msgid "Addon Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:148 -msgid "Destination name already exists" +#: ../../Zotlabs/Module/Settings/Featured.php:35 +msgid "Please save/submit changes to any panel before opening another." msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:181 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:376 -msgid "Page not found" +#: ../../Zotlabs/Module/Settings/Manage.php:41 +msgid "Channel Manager Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:211 -msgid "Error reading page content" +#: ../../Zotlabs/Module/Settings/Privacy.php:49 +msgid "Privacy settings updated." msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:367 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:425 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:493 -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:534 -msgid "Error reading wiki" +#: ../../Zotlabs/Module/Settings/Privacy.php:67 +msgid "Only those you specifically allow" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:411 -msgid "Page update failed." +#: ../../Zotlabs/Module/Settings/Privacy.php:68 +msgid "Approved connections" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:447 -msgid "Nothing deleted" +#: ../../Zotlabs/Module/Settings/Privacy.php:69 +msgid "Any connections" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:514 -msgid "Compare: object not found." +#: ../../Zotlabs/Module/Settings/Privacy.php:70 +msgid "Anybody on this website" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:521 -msgid "Page updated" +#: ../../Zotlabs/Module/Settings/Privacy.php:71 +msgid "Anybody in this network" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:529 -msgid "Wiki resource_id required for git commit" +#: ../../Zotlabs/Module/Settings/Privacy.php:72 +msgid "Anybody authenticated" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:589 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:29 -msgctxt "wiki_history" -msgid "Message" +#: ../../Zotlabs/Module/Settings/Privacy.php:73 +msgid "Anybody on the internet" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:590 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:30 -msgid "Date" +#: ../../Zotlabs/Module/Settings/Privacy.php:83 +msgid "" +"Advise: set to \"Anybody on the internet\" and use privacy groups to " +"restrict access" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:591 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:364 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:31 -msgid "Revert" +#: ../../Zotlabs/Module/Settings/Privacy.php:122 +msgid "Privacy Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWikiPage.php:592 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_page_history.php:32 -msgid "Compare" +#: ../../Zotlabs/Module/Settings/Privacy.php:127 +msgid "Advanced configuration" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:144 -msgid "Wiki updated successfully" +#: ../../Zotlabs/Module/Settings/Privacy.php:129 +msgid "Proceed with caution" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Lib/NativeWiki.php:204 -msgid "Wiki files deleted successfully" +#: ../../Zotlabs/Module/Settings/Privacy.php:130 +msgid "" +"Changing advanced configuration settings can impact your, and your contacts " +"channels functionality and security." msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:136 -msgid "Error retrieving wiki" +#: ../../Zotlabs/Module/Settings/Privacy.php:131 +msgid "Accept the risk and continue" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:143 -msgid "Error creating zip file export folder" +#: ../../Zotlabs/Module/Settings/Privacy.php:133 +msgid "Automatically approve new contacts" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:194 -msgid "Error downloading wiki: " +#: ../../Zotlabs/Module/Settings/Privacy.php:134 +msgid "Opt-out of search engine indexing" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:209 -#: ../../extend/addon/hzaddons/wiki/wiki.php:45 -#: ../../extend/addon/hzaddons/wiki/wiki.php:98 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_list.php:23 -msgid "Wikis" +#: ../../Zotlabs/Module/Settings/Privacy.php:135 +msgid "Group actor" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:219 -msgid "Wiki name" +#: ../../Zotlabs/Module/Settings/Privacy.php:135 +msgid "Allow this channel to act as a forum" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:220 -msgid "Content type" +#: ../../Zotlabs/Module/Settings/Privacy.php:136 +msgid "Accept all messages which mention you" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:223 -msgid "Any type" +#: ../../Zotlabs/Module/Settings/Privacy.php:136 +msgid "This setting bypasses normal permissions" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:230 -msgid "Lock content type" +#: ../../Zotlabs/Module/Settings/Privacy.php:137 +msgid "Accept unsolicited comments for moderation" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:231 -msgid "Create a status post for this wiki" +#: ../../Zotlabs/Module/Settings/Privacy.php:137 +msgid "Otherwise they will be silently dropped" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:232 -msgid "Edit Wiki Name" +#: ../../Zotlabs/Module/Settings/Privacy.php:138 +msgid "Enable OCAP access" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:277 -msgid "Wiki not found" +#: ../../Zotlabs/Module/Settings/Privacy.php:138 +msgid "Grant limited posts the right to access linked private media" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:303 -msgid "Rename page" +#: ../../Zotlabs/Module/Settings/Events.php:40 +msgid "Events Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:318 -msgid "Error retrieving page content" +#: ../../Zotlabs/Module/Settings/Photos.php:40 +msgid "Photos Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:326 -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:328 -msgid "New page" +#: ../../Zotlabs/Module/Settings/Conversation.php:42 +msgid "Conversation Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:363 -msgid "Revision Comparison" +#: ../../Zotlabs/Module/Settings/Channel.php:106 +#: ../../Zotlabs/Module/Settings/Channel.php:218 +msgid "Please select a channel role" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:371 -msgid "Short description of your changes (optional)" +#: ../../Zotlabs/Module/Settings/Channel.php:195 +msgid "Your channel address is" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:391 -msgid "New page name" +#: ../../Zotlabs/Module/Settings/Channel.php:198 +msgid "Your files/photos are accessible via WebDAV at" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:396 -msgid "Embed image from photo albums" +#: ../../Zotlabs/Module/Settings/Channel.php:229 +msgid "Channel Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:407 -msgid "History" +#: ../../Zotlabs/Module/Settings/Channel.php:236 +msgid "Basic Settings" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:485 -msgid "Error creating wiki. Invalid name." +#: ../../Zotlabs/Module/Settings/Channel.php:237 +msgid "Channel timezone:" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:492 -msgid "A wiki with this name already exists." +#: ../../Zotlabs/Module/Settings/Channel.php:238 +msgid "Default post location:" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:505 -msgid "Wiki created, but error creating Home page." +#: ../../Zotlabs/Module/Settings/Channel.php:238 +msgid "Geographical location to display on your posts" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:512 -msgid "Error creating wiki" +#: ../../Zotlabs/Module/Settings/Channel.php:239 +msgid "Use browser location" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:536 -msgid "Error updating wiki. Invalid name." +#: ../../Zotlabs/Module/Settings/Channel.php:240 +msgid "Adult content" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:555 -msgid "Error updating wiki" +#: ../../Zotlabs/Module/Settings/Channel.php:240 +msgid "This channel frequently or regularly publishes adult content" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:570 -msgid "Wiki delete permission denied." +#: ../../Zotlabs/Module/Settings/Channel.php:241 +msgid "Maximum Friend Requests/Day:" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:580 -msgid "Error deleting wiki" +#: ../../Zotlabs/Module/Settings/Channel.php:241 +msgid "May reduce spam activity" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:613 -msgid "New page created" +#: ../../Zotlabs/Module/Settings/Channel.php:243 +msgid "By default post a status message when:" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:739 -msgid "Cannot delete Home" +#: ../../Zotlabs/Module/Settings/Channel.php:244 +msgid "accepting a friend request" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815 -msgid "Current Revision" +#: ../../Zotlabs/Module/Settings/Channel.php:245 +msgid "joining a forum/community" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:815 -msgid "Selected Revision" +#: ../../Zotlabs/Module/Settings/Channel.php:246 +msgid "making an <em>interesting</em> profile change" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:870 -msgid "You must be authenticated." +#: ../../Zotlabs/Module/Settings/Channel.php:247 +msgid "Send a notification email when:" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Mod_Wiki.php:899 -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:64 -msgid "Add new page" +#: ../../Zotlabs/Module/Settings/Channel.php:248 +msgid "You receive a connection request" msgstr "" -#: ../../extend/addon/hzaddons/wiki/wiki.php:48 -#: ../../extend/addon/hzaddons/cards/cards.php:51 -msgid "View Cards" +#: ../../Zotlabs/Module/Settings/Channel.php:249 +msgid "Your connections are confirmed" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:58 -msgid "Wiki Pages" +#: ../../Zotlabs/Module/Settings/Channel.php:250 +msgid "Someone writes on your profile wall" msgstr "" -#: ../../extend/addon/hzaddons/wiki/Widget/Wiki_pages.php:69 -msgid "Page name" +#: ../../Zotlabs/Module/Settings/Channel.php:251 +msgid "Someone writes a followup comment" msgstr "" -#: ../../extend/addon/hzaddons/wholikesme/wholikesme.php:30 -msgid "Who likes me?" +#: ../../Zotlabs/Module/Settings/Channel.php:252 +msgid "You receive a private message" msgstr "" -#: ../../extend/addon/hzaddons/cards/Mod_Card_edit.php:129 -msgid "Edit Card" +#: ../../Zotlabs/Module/Settings/Channel.php:253 +msgid "You receive a friend suggestion" msgstr "" -#: ../../extend/addon/hzaddons/cards/Mod_Cards.php:115 -msgid "Add Card" +#: ../../Zotlabs/Module/Settings/Channel.php:254 +msgid "You are tagged in a post" msgstr "" -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:25 -msgid "Libertree Crosspost Connector Settings saved." +#: ../../Zotlabs/Module/Settings/Channel.php:255 +msgid "You are poked/prodded/etc. in a post" msgstr "" -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:49 -msgid "Libertree API token" +#: ../../Zotlabs/Module/Settings/Channel.php:256 +msgid "Someone likes your post/comment" msgstr "" -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:53 -msgid "Libertree site URL" +#: ../../Zotlabs/Module/Settings/Channel.php:257 +msgid "Show visual notifications including:" msgstr "" -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:57 -msgid "Post to Libertree by default" +#: ../../Zotlabs/Module/Settings/Channel.php:258 +msgid "Unseen stream activity" msgstr "" -#: ../../extend/addon/hzaddons/libertree/Mod_Libertree.php:65 -msgid "Libertree Crosspost Connector" +#: ../../Zotlabs/Module/Settings/Channel.php:259 +msgid "Unseen channel activity" msgstr "" -#: ../../extend/addon/hzaddons/libertree/libertree.php:43 -msgid "Post to Libertree" +#: ../../Zotlabs/Module/Settings/Channel.php:260 +msgid "Unseen private messages" msgstr "" -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:19 -msgid "Send email to all members" +#: ../../Zotlabs/Module/Settings/Channel.php:260 +#: ../../Zotlabs/Module/Settings/Channel.php:265 +#: ../../Zotlabs/Module/Settings/Channel.php:266 +#: ../../Zotlabs/Module/Settings/Channel.php:267 +msgid "Recommended" msgstr "" -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:74 -#, php-format -msgid "%1$d of %2$d messages sent." +#: ../../Zotlabs/Module/Settings/Channel.php:261 +msgid "Upcoming events" msgstr "" -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:82 -msgid "Send email to all hub members." +#: ../../Zotlabs/Module/Settings/Channel.php:262 +msgid "Events today" msgstr "" -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:94 -msgid "Sender Email address" +#: ../../Zotlabs/Module/Settings/Channel.php:263 +msgid "Upcoming birthdays" msgstr "" -#: ../../extend/addon/hzaddons/hubwall/hubwall.php:95 -msgid "Test mode (only send to hub administrator)" +#: ../../Zotlabs/Module/Settings/Channel.php:263 +msgid "Not available in all themes" msgstr "" -#: ../../extend/addon/hzaddons/mdpost/mdpost.php:42 -msgid "Use markdown for editing posts" +#: ../../Zotlabs/Module/Settings/Channel.php:264 +msgid "System (personal) notifications" msgstr "" -#: ../../extend/addon/hzaddons/openid/openid.php:49 -msgid "" -"We encountered a problem while logging in with the OpenID you provided. " -"Please check the correct spelling of the ID." +#: ../../Zotlabs/Module/Settings/Channel.php:265 +msgid "System info messages" msgstr "" -#: ../../extend/addon/hzaddons/openid/openid.php:49 -msgid "The error message was:" +#: ../../Zotlabs/Module/Settings/Channel.php:266 +msgid "System critical alerts" msgstr "" -#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:32 -msgid "OpenID protocol error. No ID returned." +#: ../../Zotlabs/Module/Settings/Channel.php:267 +msgid "New connections" msgstr "" -#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:78 -#: ../../extend/addon/hzaddons/openid/Mod_Openid.php:179 -#, php-format -msgid "Welcome %s. Remote authentication successful." +#: ../../Zotlabs/Module/Settings/Channel.php:268 +msgid "System Registrations" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:52 -msgid "First Name" +#: ../../Zotlabs/Module/Settings/Channel.php:269 +msgid "Unseen shared files" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:53 -msgid "Last Name" +#: ../../Zotlabs/Module/Settings/Channel.php:270 +msgid "Unseen public stream activity" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:55 -msgid "Full Name" +#: ../../Zotlabs/Module/Settings/Channel.php:271 +msgid "Unseen likes and dislikes" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:61 -msgid "Profile Photo 16px" +#: ../../Zotlabs/Module/Settings/Channel.php:272 +msgid "Unseen forum posts" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:62 -msgid "Profile Photo 32px" +#: ../../Zotlabs/Module/Settings/Channel.php:273 +msgid "Email notification hub (hostname)" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:63 -msgid "Profile Photo 48px" +#: ../../Zotlabs/Module/Settings/Channel.php:273 +#, php-format +msgid "" +"If your channel is mirrored to multiple hubs, set this to your preferred " +"location. This will prevent duplicate email notifications. Example: %s" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:64 -msgid "Profile Photo 64px" +#: ../../Zotlabs/Module/Settings/Channel.php:274 +msgid "Show new wall posts, private messages and connections under Notices" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:65 -msgid "Profile Photo 80px" +#: ../../Zotlabs/Module/Settings/Channel.php:275 +msgid "Mark all notices of the thread read if a notice is clicked" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:66 -msgid "Profile Photo 128px" +#: ../../Zotlabs/Module/Settings/Channel.php:275 +msgid "If no, only the clicked notice will be marked read" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:70 -msgid "Birth Year" +#: ../../Zotlabs/Module/Settings/Channel.php:276 +msgid "" +"Desktop notifications are unavailable because the required browser " +"permission has not been granted" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:71 -msgid "Birth Month" +#: ../../Zotlabs/Module/Settings/Channel.php:277 +msgid "Grant permission" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:72 -msgid "Birth Day" +#: ../../Zotlabs/Module/Settings/Channel.php:278 +msgid "Notify me of events this many days in advance" msgstr "" -#: ../../extend/addon/hzaddons/openid/MysqlProvider.php:73 -msgid "Birthdate" +#: ../../Zotlabs/Module/Settings/Channel.php:278 +msgid "Must be greater than 0" msgstr "" -#: ../../extend/addon/hzaddons/irc/Mod_Irc.php:23 -#: ../../extend/addon/hzaddons/irc/irc.php:41 -msgid "Popular Channels" +#: ../../Zotlabs/Module/Settings/Channel.php:281 +msgid "Default photo upload folder" msgstr "" -#: ../../extend/addon/hzaddons/irc/irc.php:37 -msgid "Channels to auto connect" +#: ../../Zotlabs/Module/Settings/Channel.php:281 +#: ../../Zotlabs/Module/Settings/Channel.php:282 +msgid "%Y - current year, %m - current month" msgstr "" -#: ../../extend/addon/hzaddons/irc/irc.php:37 -#: ../../extend/addon/hzaddons/irc/irc.php:41 -msgid "Comma separated list" +#: ../../Zotlabs/Module/Settings/Channel.php:282 +msgid "Default file upload folder" msgstr "" -#: ../../extend/addon/hzaddons/irc/irc.php:45 -msgid "IRC Settings" +#: ../../Zotlabs/Module/Settings/Channel.php:284 +msgid "Remove this channel." msgstr "" -#: ../../extend/addon/hzaddons/irc/irc.php:54 -msgid "IRC settings saved." +#: ../../Zotlabs/Module/Settings/Channel.php:285 +msgid "Expire other channel content after this many days" msgstr "" -#: ../../extend/addon/hzaddons/irc/irc.php:58 -msgid "IRC Chatroom" +#: ../../Zotlabs/Module/Settings/Channel.php:285 +msgid "0 or blank to use the website limit." msgstr "" -#: ../../extend/addon/hzaddons/opensearch/opensearch.php:26 +#: ../../Zotlabs/Module/Settings/Channel.php:285 #, php-format -msgctxt "opensearch" -msgid "Search %1$s (%2$s)" -msgstr "" - -#: ../../extend/addon/hzaddons/opensearch/opensearch.php:28 -msgctxt "opensearch" -msgid "$Projectname" +msgid "This website expires after %d days." msgstr "" -#: ../../extend/addon/hzaddons/opensearch/opensearch.php:43 -msgid "Search $Projectname" +#: ../../Zotlabs/Module/Settings/Channel.php:285 +msgid "This website does not expire imported content." msgstr "" -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:28 -msgid "ActivityPub Protocol Settings updated." +#: ../../Zotlabs/Module/Settings/Channel.php:285 +msgid "The website limit takes precedence if lower than your limit." msgstr "" -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:44 +#: ../../Zotlabs/Module/Settings/Channel.php:286 +#: ../../Zotlabs/Module/Settings/Channel.php:287 msgid "" -"The activitypub protocol does not support location independence. Connections " -"you make within that network may be unreachable from alternate channel " -"locations." -msgstr "" - -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50 -msgid "Send activities of type note instead of article" -msgstr "" - -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:50 -msgid "Microblog services such as Mastodon do not properly support articles" -msgstr "" - -#: ../../extend/addon/hzaddons/pubcrawl/Mod_Pubcrawl.php:58 -msgid "Activitypub Protocol" -msgstr "" - -#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:225 -msgid "Not allowed." -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:23 -msgid "Insane Journal Crosspost Connector Settings saved." -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:35 -msgid "Insane Journal Crosspost Connector App" -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:36 -msgid "Relay public postings to Insane Journal" -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:53 -msgid "InsaneJournal username" -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:57 -msgid "InsaneJournal password" -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:61 -msgid "Post to InsaneJournal by default" -msgstr "" - -#: ../../extend/addon/hzaddons/ijpost/Mod_Ijpost.php:69 -msgid "Insane Journal Crosspost Connector" +"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - " +"leave blank to import all posts" msgstr "" -#: ../../extend/addon/hzaddons/ijpost/ijpost.php:44 -msgid "Post to Insane Journal" +#: ../../Zotlabs/Module/Settings/Profiles.php:41 +msgid "Default profile for new contacts" msgstr "" -#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:23 -msgid "Random Planet App" +#: ../../Zotlabs/Module/Settings/Profiles.php:49 +msgid "Profiles Settings" msgstr "" -#: ../../extend/addon/hzaddons/planets/Mod_Planets.php:25 -msgid "" -"Set a random planet from the Star Wars Empire as your location when posting" +#: ../../Zotlabs/Module/Settings/Connections.php:40 +msgid "Connections Settings" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:21 -msgid "Project Servers and Resources" +#: ../../Zotlabs/Module/Settings/Calendar.php:40 +msgid "Calendar Settings" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:22 -msgid "Project Creator and Tech Lead" +#: ../../Zotlabs/Module/Settings/Multifactor.php:23 +msgid "Password is required" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:49 -msgid "" -"And the hundreds of other people and organisations who helped make the " -"Hubzilla possible." +#: ../../Zotlabs/Module/Settings/Multifactor.php:29 +msgid "The provided password is not correct" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:52 -msgid "" -"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving " -"their time and expertise - and often paying out of pocket for services they " -"share with others." +#: ../../Zotlabs/Module/Settings/Multifactor.php:68 +msgid "Account Multi-Factor Authentication" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:53 +#: ../../Zotlabs/Module/Settings/Multifactor.php:69 msgid "" -"There is no corporate funding and no ads, and we do not collect and sell " -"your personal information. (We don't control your personal information - " -"<strong>you do</strong>.)" +"This is your generated secret. It may be used in some cases if the QR image " +"cannot be read. Please store it in a safe place." msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:54 -msgid "" -"Help support our ground-breaking work in decentralisation, web identity, and " -"privacy." +#: ../../Zotlabs/Module/Settings/Multifactor.php:70 +msgid "Please enter the code from your authenticator app" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:56 -msgid "" -"Your donations keep servers and services running and also helps us to " -"provide innovative new features and continued development." +#: ../../Zotlabs/Module/Settings/Multifactor.php:71 +msgid "You will only be able to enable MFA if the test passes" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:59 -msgid "Donate" +#: ../../Zotlabs/Module/Settings/Multifactor.php:75 +msgid "Congratulations, the provided code was correct" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:61 -msgid "" -"Choose a project, developer, or public hub to support with a one-time " -"donation" +#: ../../Zotlabs/Module/Settings/Multifactor.php:76 +msgid "Incorrect code" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:62 -msgid "Donate Now" +#: ../../Zotlabs/Module/Settings/Multifactor.php:79 +msgid "Enable Multi-Factor Authentication" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:63 -msgid "" -"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)" +#: ../../Zotlabs/Module/Settings/Multifactor.php:81 +msgid "Logging in will require you to be in possession of your smartphone" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:64 -msgid "" -"Please indicate if you would like your first name or full name (or nothing) " -"to appear in our sponsor listing" +#: ../../Zotlabs/Module/Settings/Multifactor.php:84 +msgid "Your account password" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:65 -msgid "Sponsor" +#: ../../Zotlabs/Module/Settings/Multifactor.php:86 +msgid "Test" msgstr "" -#: ../../extend/addon/hzaddons/donate/donate.php:68 -msgid "Special thanks to: " +#: ../../Zotlabs/Module/Rmagic.php:46 +msgid "Authentication failed." msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:22 -msgid "Fediquest App" +#: ../../Zotlabs/Module/Editblock.php:138 +msgid "Edit Block" msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:23 -msgid "A distributed quest for a given word (game)." +#: ../../Zotlabs/Module/Email_validation.php:37 +msgid "Email Verification Required" msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:24 +#: ../../Zotlabs/Module/Email_validation.php:38 +#, php-format msgid "" -"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a " -"toplevel post." -msgstr "" - -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:25 -msgid "Your contacts can post their guess in the comments." +"A verification token was sent to your email address [%s]. Enter that token " +"here to complete the account verification step. Please allow a few minutes " +"for delivery, and check your spam folder if you do not see the message." msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:26 -msgid "" -"Your channel will evaluate the guess and automatically post the response." +#: ../../Zotlabs/Module/Email_validation.php:39 +msgid "Resend Email" msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:28 -msgid "Correct letters" +#: ../../Zotlabs/Module/Email_validation.php:42 +msgid "Validation token" msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:29 -msgid "Letters contained in the word but at the wrong spot" +#: ../../Zotlabs/Module/Import.php:71 +msgid "Nothing to import." msgstr "" -#: ../../extend/addon/hzaddons/fediquest/Mod_Fediquest.php:30 -msgid "Letters not contained in the word" +#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101 +msgid "Unable to download data from old server" msgstr "" -#: ../../extend/addon/hzaddons/fediquest/fediquest.php:211 -msgid "ERROR: word length is not correct!" +#: ../../Zotlabs/Module/Import.php:164 +#, php-format +msgid "Your service plan only allows %d channels." msgstr "" -#: ../../extend/addon/hzaddons/wppost/wppost.php:47 -msgid "Post to WordPress" +#: ../../Zotlabs/Module/Import.php:191 +msgid "No channel. Import failed." msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:30 -msgid "Wordpress Settings saved." +#: ../../Zotlabs/Module/Import.php:197 +msgid "Channel exists but has been marked removed on this hub. Import failed." msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:67 -msgid "WordPress username" +#: ../../Zotlabs/Module/Import.php:569 +msgid "" +"Automatic content and files import was not possible due to API version " +"incompatiblity. Please import content and files manually!" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:71 -msgid "WordPress password" +#: ../../Zotlabs/Module/Import.php:597 +msgid "You must be logged in to use this feature." msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:75 -msgid "WordPress API URL" +#: ../../Zotlabs/Module/Import.php:604 +msgid "Channel Import" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:76 -msgid "Typically https://your-blog.tld/xmlrpc.php" +#: ../../Zotlabs/Module/Import.php:605 +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." msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:79 -msgid "WordPress blogid" +#: ../../Zotlabs/Module/Import.php:607 +msgid "Or provide the old server/hub details" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:80 -msgid "For multi-user sites such as wordpress.com, otherwise leave blank" +#: ../../Zotlabs/Module/Import.php:609 +msgid "Your old identity address (xyz@example.com)" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:84 -msgid "Post to WordPress by default" +#: ../../Zotlabs/Module/Import.php:610 +msgid "Your old login email address" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:88 -msgid "Forward comments (requires hubzilla_wp plugin)" +#: ../../Zotlabs/Module/Import.php:611 +msgid "Your old login password" msgstr "" -#: ../../extend/addon/hzaddons/wppost/Mod_Wppost.php:104 -msgid "Wordpress Post" +#: ../../Zotlabs/Module/Import.php:612 +msgid "Import your items and files (limited by available memory)" msgstr "" -#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:30 +#: ../../Zotlabs/Module/Import.php:614 msgid "" -"Allow magic authentication only to websites of your immediate connections" +"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 "" -#: ../../extend/addon/hzaddons/authchoose/Mod_Authchoose.php:36 -msgid "Authchoose" +#: ../../Zotlabs/Module/Import.php:616 +msgid "Make this hub my primary location" msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:48 -msgid "Your channel has been upgraded to $Projectname version" +#: ../../Zotlabs/Module/Import.php:617 +msgid "Move this channel (disable all previous locations)" msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:50 -msgid "Please have a look at the" +#: ../../Zotlabs/Module/Import.php:618 +msgid "Use this channel nickname instead of the one provided" msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:52 -msgid "git history" +#: ../../Zotlabs/Module/Import.php:618 +msgid "" +"Leave blank to keep your existing channel nickname. You will be randomly " +"assigned a similar nickname if either name is already allocated on this site." msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:54 -msgid "change log" +#: ../../Zotlabs/Module/Import.php:620 +msgid "" +"This process may take several minutes to complete. Please submit the form " +"only once and leave this page open until finished." msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:55 -msgid "for further info." +#: ../../Zotlabs/Module/Acl.php:371 +msgid "network" msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:60 -msgid "$Projectname Upgrade Info" +#: ../../Zotlabs/Module/Filer.php:64 +msgid "Enter a folder name" msgstr "" -#: ../../extend/addon/hzaddons/upgrade_info/upgrade_info.php:64 -msgid "Do not show this again" +#: ../../Zotlabs/Module/Filer.php:64 +msgid "or select an existing folder (doubleclick)" msgstr "" -#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:28 -msgid "Hide Aside App" +#: ../../Zotlabs/Module/Vote.php:40 +msgid "Poll not found." msgstr "" -#: ../../extend/addon/hzaddons/hideaside/Mod_Hideaside.php:29 -msgid "Fade out aside areas after a while when using endless scroll" +#: ../../Zotlabs/Module/Vote.php:69 +msgid "Invalid response." msgstr "" -#: ../../extend/addon/hzaddons/msgfooter/msgfooter.php:47 -msgid "text to include in all outgoing posts from this site" +#: ../../Zotlabs/Module/Vote.php:128 +msgid "Response submitted. Updates may not appear instantly." msgstr "" diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 51e734a77..07b32ed6e 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -322,6 +322,7 @@ class InstalledVersions } $installed = array(); + $copiedLocalDir = false; if (self::$canGetVendors) { foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { @@ -330,9 +331,11 @@ class InstalledVersions } elseif (is_file($vendorDir.'/composer/installed.php')) { /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; + self::$installedByVendor[$vendorDir] = $required; + $installed[] = $required; + if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $required; + $copiedLocalDir = true; } } } @@ -350,7 +353,7 @@ class InstalledVersions } } - if (self::$installed !== array()) { + if (self::$installed !== array() && !$copiedLocalDir) { $installed[] = self::$installed; } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index b19cd0f42..51fadd55a 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1359,6 +1359,7 @@ return array( 'Zotlabs\\Lib\\Libsync' => $baseDir . '/Zotlabs/Lib/Libsync.php', 'Zotlabs\\Lib\\Libzot' => $baseDir . '/Zotlabs/Lib/Libzot.php', 'Zotlabs\\Lib\\Libzotdir' => $baseDir . '/Zotlabs/Lib/Libzotdir.php', + 'Zotlabs\\Lib\\Mailer' => $baseDir . '/Zotlabs/Lib/Mailer.php', 'Zotlabs\\Lib\\MarkdownSoap' => $baseDir . '/Zotlabs/Lib/MarkdownSoap.php', 'Zotlabs\\Lib\\MessageFilter' => $baseDir . '/Zotlabs/Lib/MessageFilter.php', 'Zotlabs\\Lib\\Multibase' => $baseDir . '/Zotlabs/Lib/Multibase.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 54e4d8470..d1c13098e 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -1611,6 +1611,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Lib\\Libsync' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libsync.php', 'Zotlabs\\Lib\\Libzot' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzot.php', 'Zotlabs\\Lib\\Libzotdir' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzotdir.php', + 'Zotlabs\\Lib\\Mailer' => __DIR__ . '/../..' . '/Zotlabs/Lib/Mailer.php', 'Zotlabs\\Lib\\MarkdownSoap' => __DIR__ . '/../..' . '/Zotlabs/Lib/MarkdownSoap.php', 'Zotlabs\\Lib\\MessageFilter' => __DIR__ . '/../..' . '/Zotlabs/Lib/MessageFilter.php', 'Zotlabs\\Lib\\Multibase' => __DIR__ . '/../..' . '/Zotlabs/Lib/Multibase.php', diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index ab0b54ed5..75ed03742 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'zotlabs/hubzilla', 'pretty_version' => 'dev-9.4RC', 'version' => 'dev-9.4RC', - 'reference' => '67a9292aaa5246783b70ca3754b31924416d7f08', + 'reference' => 'e9222d0d9aed21816c8654fae074429afeda8f95', 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -367,7 +367,7 @@ 'zotlabs/hubzilla' => array( 'pretty_version' => 'dev-9.4RC', 'version' => 'dev-9.4RC', - 'reference' => '67a9292aaa5246783b70ca3754b31924416d7f08', + 'reference' => 'e9222d0d9aed21816c8654fae074429afeda8f95', 'type' => 'application', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), diff --git a/view/js/main.js b/view/js/main.js index c1b0d410c..ce1d71596 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -25,6 +25,7 @@ var savedTitle = ''; var followUpPageLoad = false; var window_needs_alert = true; var expanded_items = []; +var updateTimeout = []; var page_cache = {}; @@ -58,37 +59,13 @@ $.ajaxSetup({cache: false}); var tf = new Function('n', 's', 'var k = s.split("/")['+aStr['plural_func']+']; return (k ? k : s);'); -jQuery.timeago.settings.strings = { - prefixAgo : aStr['t01'], - prefixFromNow : aStr['t02'], - suffixAgo : aStr['t03'], - suffixFromNow : aStr['t04'], - seconds : aStr['t05'], - minute : aStr['t06'], - minutes : function(value){return tf(value, aStr['t07']);}, - hour : aStr['t08'], - hours : function(value){return tf(value, aStr['t09']);}, - day : aStr['t10'], - days : function(value){return tf(value, aStr['t11']);}, - month : aStr['t12'], - months : function(value){return tf(value, aStr['t13']);}, - year : aStr['t14'], - years : function(value){return tf(value, aStr['t15']);}, - wordSeparator : aStr['t16'], - numbers : aStr['t17'], -}; - -jQuery.timeago.settings.allowFuture = true; - $(document).ready(function() { $(document).on('click focus', '.comment-edit-form', handle_comment_form); $(document).on('click', '.conversation-settings-link', getConversationSettings); $(document).on('click', '#settings_module_ajax_submit', postConversationSettings); - $(document).on('click', '#expand-aside', function() { - toggleAside(); - }); + $(document).on('click', '#expand-aside', toggleAside); $(document).on('click focus', '.comment-edit-form textarea', function(e) { if(! this.autocomplete_handled) { @@ -175,14 +152,19 @@ $(document).ready(function() { let singlethread_modules = ['display', 'hq']; let redirect_modules = ['display', 'notify']; - if(! b64mid && ! notify_id) + if (!b64mid && !notify_id) { return; + } + + if (document.querySelector('main').classList.contains('region_1-on')) { + toggleAside(); + } - if(localUser && redirect_modules.indexOf(path) !== -1) { + if (localUser && redirect_modules.indexOf(path) !== -1) { path = 'hq'; } - if(notify_id) { + if (notify_id) { $.ajax({ type: 'post', url: 'notify', @@ -198,17 +180,13 @@ $(document).ready(function() { window.location.href = path + '/' + b64mid; } else { - if (singlethread_modules.indexOf(module) !== -1) { history.pushState(stateObj, '', module + '/' + b64mid); - } if (b64mid) { - e.preventDefault(); - - if(! page_load) { + if (!page_load) { prepareLiveUpdate(b64mid, notify_id); $('.message').removeClass('active'); $('[data-b64mid="' + b64mid + '"].message').addClass('active'); @@ -231,20 +209,21 @@ $(document).ready(function() { updateInit(); - var e = document.getElementById('content-complete'); - if(e) + if (document.getElementById('content-complete')) { pageHasMoreContent = false; + } - $(document).on('hz:updateConvItems', function(event) { - if(!bParam_mid) + document.addEventListener('hz:updateConvItems', function(e) { + if (!bParam_mid) { cache_next_page(); + } }); - $(document).on('hz:handleNetworkNotificationsItems', function(e, obj) { + document.addEventListener('hz:handleNetworkNotificationsItems', function(e) { push_notification( - obj.name, - $('<p>' + obj.message + '</p>').text(), - obj.b64mid + e.detail.name, + $('<p>' + e.detail.message + '</p>').text(), + e.detail.b64mid ); }); }); @@ -515,14 +494,12 @@ function viewsrc(id) { function showHideComments(id) { if($('#collapsed-comments-' + id).is(':visible')) { - $('#collapsed-comments-' + id + ' .autotime').timeago('dispose'); $('#collapsed-comments-' + id).hide(); $('#hide-comments-label-' + id).html(aStr.showmore); $('#hide-comments-total-' + id).show(); $('#hide-comments-icon-' + id).toggleClass('bi-chevron-down bi-chevron-up'); } else { - $('#collapsed-comments-' + id + ' .autotime').timeago(); $('#collapsed-comments-' + id).show(); $('#hide-comments-label-' + id).html(aStr.showfewer); $('#hide-comments-total-' + id).hide(); @@ -650,201 +627,342 @@ function updatePageItems(mode, data) { collapseHeight(); } - -function updateConvItems(mode,data) { - let scroll_position = $(window).scrollTop(); +function updateConvItems(mode, data) { + let scroll_position = window.scrollY; let b64mids = []; - if(mode !== 'update') - $(document).trigger('hz:updateConvItems'); + // Parse the data string into a DOM object + let parser = new DOMParser(); + let doc = parser.parseFromString(data, 'text/html'); - if(mode === 'update' || mode === 'replace') { - prev = 'threads-begin'; + if (mode !== 'update') { + document.dispatchEvent(new Event('hz:updateConvItems')); } - if(mode === 'append') { - next = 'threads-end'; + + let prev, next; + if (mode === 'update' || mode === 'replace') { + prev = document.getElementById('threads-begin'); + } + if (mode === 'append') { + next = document.getElementById('threads-end'); } - $('.thread-wrapper', data).each(function() { - if(this.classList.contains('toplevel_item')) { - let ident = this.id; - let convId = ident.replace('thread-wrapper-',''); - let commentWrap = $('#'+ident+' .collapsed-comments').attr('id'); + doc.querySelectorAll('.thread-wrapper').forEach(function (elem) { + if (elem.classList.contains('toplevel_item')) { + let ident = elem.id; + let convId = ident.replace('thread-wrapper-', ''); + let commentWrap = elem.querySelector('.collapsed-comments')?.id; let itmId = 0; let isVisible = false; // figure out the comment state - if(typeof commentWrap !== 'undefined') - itmId = commentWrap.replace('collapsed-comments-',''); + if (commentWrap !== undefined) { + itmId = commentWrap.replace('collapsed-comments-', ''); + } - if($('#collapsed-comments-'+itmId).is(':visible')) + let collapsedComment = document.getElementById('collapsed-comments-' + itmId); + if (collapsedComment && collapsedComment.style.display !== 'none') { isVisible = true; + } // insert the content according to the mode and first_page // and whether or not the content exists already (overwrite it) - - if($('#' + ident).length == 0) { - if((mode === 'update' || mode === 'replace') && profile_page == 1) { - $('#' + prev).after($(this)); - prev = ident; + let existingElem = document.getElementById(ident); + if (!existingElem) { + if ((mode === 'update' || mode === 'replace') && profile_page == 1) { + if (prev) { + prev.after(elem); + prev = elem; + } } - if(mode === 'append') { - $('#' + next).before($(this)); + if (mode === 'append') { + if (next) { + next.before(elem); + } } - } - else { - $('#' + ident).replaceWith($(this)); + } else { + existingElem.replaceWith(elem); } - // set the comment state to the state we discovered earlier + // DOMParser will prevent scripts from execution for security reasons. + // We remove all scripts but possibly injected some from + // addons like for example gallery later. + // TODO: make the script run from the addon itself. + let scripts = elem.querySelectorAll('script'); + scripts.forEach(script => { + let scriptContent = script.textContent || script.innerText; + eval(scriptContent); // Execute the script + }); - if(isVisible) + // set the comment state to the state we discovered earlier + if (isVisible) { showHideComments(itmId); + } let commentBody = localStorage.getItem("comment_body-" + convId); - - if(commentBody) { - var commentElm = $('#comment-edit-text-' + convId); - if(auto_save_draft) { - if($(commentElm).val() === '') { - $('#comment-edit-form-' + convId).show(); - $(commentElm).addClass("expanded"); + if (commentBody) { + let commentElm = document.getElementById('comment-edit-text-' + convId); + if (auto_save_draft && commentElm) { + if (commentElm.value === '') { + let commentForm = document.getElementById('comment-edit-form-' + convId); + if (commentForm) { + commentForm.style.display = 'block'; + } + commentElm.classList.add("expanded"); openMenu("comment-tools-" + convId); - $(commentElm).val(commentBody); + commentElm.value = commentBody; } } else { localStorage.removeItem("comment_body-" + convId); } } - // trigger the autotime function on all newly created content - $("> .wall-item-outside-wrapper .autotime, > .thread-wrapper .autotime",this).timeago(); - $("> .shared_header .autotime",this).timeago(); - - if((mode === 'append' || mode === 'replace') && (loadingPage)) { + if ((mode === 'append' || mode === 'replace') && loadingPage) { loadingPage = false; } - // if single thread view and the item has a title, display it in the title bar - - if(mode === 'replace') { - if (window.location.search.indexOf("mid=") != -1 || window.location.pathname.indexOf("display") != -1) { - let title = $(".wall-item-title").text(); - title.replace(/^\s+/, ''); - title.replace(/\s+$/, ''); - if (title) { - savedTitle = title + " " + savedTitle; - document.title = title; + // if single thread view and the item has a title, display it in the title bar + if (mode === 'replace') { + if (window.location.search.includes("mid=") || window.location.pathname.includes("display")) { + let titleElem = document.querySelector(".wall-item-title"); + if (titleElem) { + let title = titleElem.textContent.trim(); + if (title) { + savedTitle = title + ' ' + savedTitle; + document.title = title; + } } } } } - $(this).data('b64mids').forEach((b64mid) => { - b64mids.push(b64mid); + b64mids.push(...JSON.parse(elem.dataset.b64mids)); + }); + + document.dispatchEvent(new CustomEvent('hz:sse_setNotificationsStatus', { detail: b64mids })); + + window.scrollTo(0, scroll_position); + + if (followUpPageLoad) { + document.dispatchEvent(new Event('hz:sse_bs_counts')); + } else { + document.dispatchEvent(new Event('hz:sse_bs_init')); + } + + if (commentBusy) { + commentBusy = false; + document.body.style.cursor = 'auto'; + } + + // Setup to determine if the media player is playing. This affects some content loading decisions. + ['playing', 'pause'].forEach(event => { + document.querySelectorAll('video, audio').forEach(media => { + media.removeEventListener(event, mediaHandler); + media.addEventListener(event, mediaHandler); }); + }); + function mediaHandler(event) { + mediaPlaying = event.type === 'playing'; + } + + imagesLoaded(document.querySelectorAll('.wall-item-body img, .wall-photo-item img'), function () { + collapseHeight(); + if (bParam_mid && mode === 'replace') { + scrollToItem(); + } }); - $(document).trigger('hz:sse_setNotificationsStatus', [b64mids]); + // reset rotators and cursors we may have set before reaching this place + let pageSpinner = document.getElementById("page-spinner"); + if (pageSpinner) { + pageSpinner.style.display = 'none'; + } + let profileJotTextLoading = document.getElementById("profile-jot-text-loading"); + if (profileJotTextLoading) { + profileJotTextLoading.style.display = 'none'; + } - $(window).scrollTop(scroll_position); + followUpPageLoad = true; - if(followUpPageLoad) { - $(document).trigger('hz:sse_bs_counts'); + updateRelativeTime('.autotime'); +} + +function imagesLoaded(elements, callback) { + let loadedCount = 0; + let totalImages = 0; + let timeoutId; + const timeout = 10000; + const processed = new Set(); // Use a Set for efficient lookup + + // Helper function to extract img elements from an HTML string + function extractImagesFromHtml(htmlString) { + const tempDiv = document.createElement('div'); + tempDiv.innerHTML = htmlString; + return tempDiv.querySelectorAll('.wall-item-body img, .wall-photo-item img'); } - else { - $(document).trigger('hz:sse_bs_init'); + + function checkComplete(src) { + // Skip processing if image has already been processed + if (processed.has(src)) return; + + processed.add(src); + loadedCount++; + + // Update progress + const progress = Math.round((loadedCount * 100) / totalImages); + document.getElementById('image_counter').innerText = `${progress}%`; + + // If all images are loaded, trigger the callback + if (loadedCount === totalImages) { + document.getElementById('image_counter').innerText = ''; + clearTimeout(timeoutId); + callback(); + } } - if(commentBusy) { - commentBusy = false; - $('body').css('cursor', 'auto'); + // Convert HTML string to img elements if necessary + if (typeof elements === 'string') { + elements = extractImagesFromHtml(elements); } - // Setup to determine if the media player is playing. This affects - // some content loading decisions. + // Exit early if there are no images to load + if (!elements || elements.length === 0) { + callback(); + return; + } - $('video').off('playing'); - $('video').off('pause'); - $('audio').off('playing'); - $('audio').off('pause'); + // Filter valid image elements (only img with src attribute) + const images = Array.from(elements) + .filter((element) => element.tagName.toLowerCase() === 'img' && element.src) + .filter((element, index, self) => + index === self.findIndex(e => e.src === element.src) // Avoid duplicates + ); - $('video').on('playing', function() { - mediaPlaying = true; - }); - $('video').on('pause', function() { - mediaPlaying = false; - }); - $('audio').on('playing', function() { - mediaPlaying = true; + // If no images are found, call the callback immediately + if (images.length === 0) { + callback(); + return; + } + + totalImages = images.length; + + // Set timeout for the loading process + timeoutId = setTimeout(() => { + console.warn(`Image loading timed out after ${timeout}ms`); + callback(false); + }, timeout); + + // Iterate through images to add load and error event listeners + images.forEach((img) => { + img.loading = 'eager'; // Preload the image + + if (img.complete && img.naturalHeight > 0) { + // Image is already loaded, handle immediately + checkComplete(img.src); + } else { + // Add event listeners for load and error events + img.addEventListener('load', () => checkComplete(img.src)); + img.addEventListener('error', () => { + console.log(`Image failed to load: ${img.src}`); + checkComplete(img.src); + }); + } }); - $('audio').on('pause', function() { - mediaPlaying = false; +} + +function updateRelativeTime(selector) { + // Get all elements with the given selector + const timeElements = document.querySelectorAll(selector); + if (timeElements.length === 0) return; + + // Default time style and map for supported options + const styleMap = ['narrow', 'short', 'long']; + const style = styleMap.find(s => selector.includes(s)) || 'long'; + + // Create an instance of RelativeTimeFormat + const rtf = new Intl.RelativeTimeFormat(lang, { + localeMatcher: 'best fit', // 'best fit' or 'lookup' + numeric: 'always', // 'always' or 'auto' + style: style // 'long', 'short', or 'narrow' }); - if(! preloadImages) { - $('.wall-item-body, .wall-photo-item').imagesLoaded() - .always( function( instance ) { - //console.log('all images loaded'); - collapseHeight(); + const now = Date.now(); // Get the current time only once - if(bParam_mid && mode === 'replace') - scrollToItem(); - - }) - .done( function( instance ) { - //console.log('all images successfully loaded'); - }) - .fail( function() { - //console.log('all images loaded, at least one is broken'); - }) - .progress( function( instance, image ) { - //var result = image.isLoaded ? 'loaded' : 'broken'; - //console.log( 'image is ' + result + ' for ' + image.img.src ); - }); - } - else { - collapseHeight(); + // Helper function to calculate the time difference in appropriate units + function getRelativeTime(diffInSeconds) { + const isFuture = diffInSeconds > 0; + const absDiffInSeconds = Math.abs(diffInSeconds); - if(bParam_mid && mode === 'replace') - scrollToItem(); + if (absDiffInSeconds < 60) return { value: absDiffInSeconds, unit: 'second' }; + if (absDiffInSeconds < 3600) return { value: Math.floor(absDiffInSeconds / 60), unit: 'minute' }; + if (absDiffInSeconds < 86400) return { value: Math.floor(absDiffInSeconds / 3600), unit: 'hour' }; + if (absDiffInSeconds < 2592000) return { value: Math.floor(absDiffInSeconds / 86400), unit: 'day' }; + if (absDiffInSeconds < 31536000) return { value: Math.floor(absDiffInSeconds / 2592000), unit: 'month' }; + return { value: Math.floor(absDiffInSeconds / 31536000), unit: 'year' }; } - // reset rotators and cursors we may have set before reaching this place + // Process each element + timeElements.forEach(element => { + const timestamp = new Date(element.title).getTime(); + if (isNaN(timestamp)) return; // Skip invalid timestamps - $("#page-spinner").hide(); - $("#profile-jot-text-loading").hide(); + const diffInSeconds = Math.floor((timestamp - now) / 1000); // Time difference in seconds + const { value, unit } = getRelativeTime(diffInSeconds); - followUpPageLoad = true; + // Format the relative time and set it as the element's text + const formattedTime = rtf.format(diffInSeconds > 0 ? value : -value, unit); + element.textContent = formattedTime; + }); + // Avoid duplicate timeout registrations for the same selector + if (!updateTimeout.includes(selector)) { + updateTimeout.push(selector); + setTimeout(() => updateRelativeTime(selector), 60000); // Re-run the update every 60 seconds + } } function scrollToItem() { - // auto-scroll to a particular comment in a thread (designated by mid) when in single-thread mode + // auto-scroll to a particular comment in a thread (designated by mid) when in single-thread mode - if(justifiedGalleryActive) - return; + if (justifiedGalleryActive) return; - let submid = ((bParam_mid.length) ? bParam_mid : 'abcdefg'); - //var encoded = ((submid.substr(0,4) == 'b64.') ? true : false); - //var submid_encoded = ((encoded) ? submid : window.btoa(submid)); + let submid = ((bParam_mid.length) ? bParam_mid : 'abcdefg'); - $('.thread-wrapper').filter(function() { - if($(this).data('b64mids').indexOf(submid) > -1 && !$(this).hasClass('toplevel_item')) { - if($('.collapsed-comments').length) { - var scrolltoid = $('.collapsed-comments').attr('id').substring(19); - $('#collapsed-comments-' + scrolltoid + ' .autotime').timeago(); - $('#collapsed-comments-' + scrolltoid).show(); - $('#hide-comments-label-' + scrolltoid).html(aStr.showfewer); - $('#hide-comments-total-' + scrolltoid).hide(); - } - $('html, body').animate({ scrollTop: $(this).offset().top - $('nav').outerHeight(true) }, 'slow'); - $(this).addClass('item-highlight'); - } - }); + // Select all thread wrappers + let threadWrappers = document.querySelectorAll('.thread-wrapper'); + + threadWrappers.forEach(thread => { + // Get the 'data-b64mids' attribute and check if it contains submid + let b64mids = thread.dataset.b64mids; + if (b64mids && b64mids.includes(submid) && !thread.classList.contains('toplevel_item')) { + + // Handle collapsed comments if any + let collapsedComments = document.querySelectorAll('.collapsed-comments'); + if (collapsedComments.length) { + let scrolltoid = collapsedComments[0].id.substring(19); + let collapsedComment = document.getElementById('collapsed-comments-' + scrolltoid); + let hideCommentsLabel = document.getElementById('hide-comments-label-' + scrolltoid); + let hideCommentsTotal = document.getElementById('hide-comments-total-' + scrolltoid); + + if (collapsedComment) collapsedComment.style.display = 'block'; + if (hideCommentsLabel) hideCommentsLabel.innerHTML = aStr.showfewer; + if (hideCommentsTotal) hideCommentsTotal.style.display = 'none'; + } + + // Scroll to the target element + let navHeight = document.querySelector('nav') ? document.querySelector('nav').offsetHeight : 0; + window.scrollTo({ + top: thread.offsetTop - navHeight, + behavior: 'smooth' + }); + + // Add highlight class + thread.classList.add('item-highlight'); + } + }); } function collapseHeight() { @@ -908,7 +1026,7 @@ function updateInit() { liveUpdate(); } else { - $(document).trigger('hz:sse_bs_init'); + document.dispatchEvent(new Event('hz:sse_bs_init')); } if($('#live-photos').length || $('#live-cards').length || $('#live-articles').length ) { @@ -1034,10 +1152,7 @@ function liveUpdate(notify_id) { if(update_mode === 'update' || preloadImages) { console.log('LOADING images...'); - $('.wall-item-body, .wall-photo-item',data).imagesLoaded() - .always( function( instance ) { - //console.log('all images loaded'); - + imagesLoaded(data, function () { var iready = new Date(); console.log('IMAGES ready in: ' + (iready - dready)/1000 + ' seconds.'); @@ -1046,23 +1161,7 @@ function liveUpdate(notify_id) { updateConvItems(update_mode,data); in_progress = false; - $('#image_counter').html(''); - - // remove modal backdrop in case the update was triggered from a modal - $('.modal-backdrop').remove(); - }) - .done( function( instance ) { - //console.log('all images successfully loaded'); - }) - .fail( function() { - //console.log('all images loaded, at least one is broken'); - }) - .progress( function( instance, image ) { - $('#image_counter').html(Math.floor((instance.progressedCount*100)/instance.images.length) + '%'); - //var result = image.isLoaded ? 'loaded' : 'broken'; - //console.log( 'image is ' + result + ' for ' + image.img.src ); }); - } else { page_load = false; @@ -1104,9 +1203,8 @@ function cache_next_page() { console.log('cached: ' + update_url); - $('.wall-item-body, .wall-photo-item', data).imagesLoaded() - .always( function( instance ) { - console.log('page_cache images loaded:'); + imagesLoaded(data, function () { + console.log('page_cache: images loaded'); page_cache.data = data; page_cache.page = bParam_page; @@ -1114,19 +1212,7 @@ function cache_next_page() { bParam_page--; page_load = false; - }) - .done( function( instance ) { - console.log('success'); - }) - .fail( function() { - console.log('at least one is broken'); - }) - .progress( function( instance, image ) { - //console.log(instance.progressedCount + '/' + instance.images.length); - //var result = image.isLoaded ? 'loaded' : 'broken'; - //console.log( 'image is ' + result + ' for ' + image.img.src ); }); - }); } @@ -1156,7 +1242,7 @@ function pageUpdate() { scroll_next = false; updatePageItems(update_mode,data); $("#page-spinner").hide(); - $(".autotime").timeago(); + updateRelativeTime('.autotime'); in_progress = false; }); } @@ -1217,7 +1303,7 @@ function dolike(ident, verb) { $('#thread-wrapper-' + data.orig_id).replaceWith(data.html); } - $('#wall-item-ago-' + data.id + ' .autotime').timeago(); + updateRelativeTime('.autotime'); collapseHeight(); liking = 0; } @@ -1458,7 +1544,7 @@ function post_comment(id) { $("#comment-edit-preview-" + id).hide(); $("#comment-edit-text-" + id).val('').blur().attr('placeholder', aStr.comment); $('#wall-item-comment-wrapper-' + id).before(data.html); - $('#wall-item-ago-' + data.id + ' .autotime').timeago(); + updateRelativeTime('.autotime'); $('body').css('cursor', 'unset'); collapseHeight(); commentBusy = false; @@ -1488,7 +1574,7 @@ function preview_comment(id) { function(data) { if(data.preview) { $("#comment-edit-preview-" + id).html(data.preview); - $("#comment-edit-preview-" + id + " .autotime").timeago(); + updateRelativeTime('.autotime'); $("#comment-edit-preview-" + id + " a").click(function() { return false; }); } }, @@ -1518,7 +1604,7 @@ function preview_post() { function(data) { if(data.preview) { $("#jot-preview-content").html(data.preview); - $("#jot-preview-content .autotime").timeago(); + updateRelativeTime('.autotime'); $("#jot-preview-content" + " a").click(function() { return false; }); } }, @@ -1710,7 +1796,7 @@ function toggleAside() { } function toast(string, severity) { - let id = btoa(string); + let id = bin2hex(string); let container = document.getElementById('toast-container'); let toast = document.getElementById(id); diff --git a/view/js/mod_articles.js b/view/js/mod_articles.js index 8b31c0f52..5ebe46aa0 100644 --- a/view/js/mod_articles.js +++ b/view/js/mod_articles.js @@ -1,5 +1,5 @@ $(document).ready( function() { - $(".autotime").timeago(); + updateRelativeTime('.autotime'); /* autocomplete @nicknames */ $(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1"); diff --git a/view/js/mod_cards.js b/view/js/mod_cards.js index 8b31c0f52..5ebe46aa0 100644 --- a/view/js/mod_cards.js +++ b/view/js/mod_cards.js @@ -1,5 +1,5 @@ $(document).ready( function() { - $(".autotime").timeago(); + updateRelativeTime('.autotime'); /* autocomplete @nicknames */ $(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1"); diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js index fc9219bff..9669d86f5 100644 --- a/view/js/mod_cloud.js +++ b/view/js/mod_cloud.js @@ -519,42 +519,45 @@ function formatSizeUnits(bytes){ // this is basically a js port of include/text.php getIconFromType() function function getIconFromType(type) { - var map = { + let map = { //Common file - 'application/octet-stream': 'fa-file-o', + 'application/octet-stream': 'bi-file-earmark', //Text - 'text/plain': 'fa-file-text-o', - 'application/msword': 'fa-file-word-o', - 'application/pdf': 'fa-file-pdf-o', - 'application/vnd.oasis.opendocument.text': 'fa-file-word-o', - 'application/epub+zip': 'fa-book', + 'text/plain': 'bi-file-earmark-text', + 'text/markdown': 'bi-filetype-md', + 'text/bbcode': 'bi-file-earmark-text', + 'text/html': 'bi-filetype-html', + 'application/msword': 'bi-file-earmark-word', + 'application/pdf': 'bi-file-earmark-pdf', + 'application/vnd.oasis.opendocument.text': 'bifile--earmark-text', + 'application/epub+zip': 'bi-file-earmark-text', //Spreadsheet - 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o', - 'application/vnd.ms-excel': 'fa-file-excel-o', + 'application/vnd.oasis.opendocument.spreadsheet': 'bi-file-earmark-spreadsheet', + 'application/vnd.ms-excel': 'bi-file-earmark-spreadsheet', //Image - 'image/jpeg': 'fa-picture-o', - 'image/png': 'fa-picture-o', - 'image/gif': 'fa-picture-o', - 'image/svg+xml': 'fa-picture-o', + 'image/jpeg': 'bi-file-earmark-image', + 'image/png': 'bi-file-earmark-image', + 'image/gif': 'bi-file-earmark-image', + 'image/webp': 'bi-file-earmark-image', + 'image/svg+xml': 'bi-filetype-svg', //Archive - 'application/zip': 'fa-file-archive-o', - 'application/x-rar-compressed': 'fa-file-archive-o', + 'application/zip': 'bi-file-earmark-zip', + 'application/x-rar-compressed': 'bi-file-earmark-zip', //Audio - 'audio/mpeg': 'fa-file-audio-o', - 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that - 'audio/wav': 'fa-file-audio-o', - 'application/ogg': 'fa-file-audio-o', - 'audio/ogg': 'fa-file-audio-o', - 'audio/webm': 'fa-file-audio-o', - 'audio/mp4': 'fa-file-audio-o', + 'audio/mpeg': 'bi-file-earmark-music', + 'audio/wav': 'bi-file-earmark-music', + 'application/ogg': 'bi-file-earmark-music', + 'audio/ogg': 'bi-file-earmark-music', + 'audio/webm': 'bi-file-earmark-music', + 'audio/mp4': 'bi-file-earmark-music', //Video - 'video/quicktime': 'fa-file-video-o', - 'video/webm': 'fa-file-video-o', - 'video/mp4': 'fa-file-video-o', - 'video/x-matroska': 'fa-file-video-o' + 'video/quicktime': 'bi-file-earmark-play', + 'video/webm': 'bi-file-earmark-play', + 'video/mp4': 'bi-file-earmark-play', + 'video/x-matroska': 'bi-file-earmark-play' }; - var iconFromType = 'fa-file-o'; + let iconFromType = 'bi-file-earmark'; if (type in map) { iconFromType = map[type]; diff --git a/view/js/mod_connections.js b/view/js/mod_connections.js index cb3ecc922..c8bd494d2 100644 --- a/view/js/mod_connections.js +++ b/view/js/mod_connections.js @@ -2,6 +2,6 @@ $(document).ready(function() { $("#contacts-search").name_autocomplete(baseurl + '/acl', 'a', true, function(data) { $("#contacts-search-xchan").val(data.xid); }); - $(".autotime").timeago(); + updateRelativeTime('.autotime'); }); diff --git a/view/js/mod_hq.js b/view/js/mod_hq.js index 1e4c02768..2c2aca37b 100644 --- a/view/js/mod_hq.js +++ b/view/js/mod_hq.js @@ -1,6 +1,5 @@ $(document).ready(function() { - - $('.autotime').timeago(); + updateRelativeTime('.autotime'); if (bParam_mid) { src = 'hq'; diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index c487fc417..ca1d85f0c 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -131,42 +131,45 @@ function formatSizeUnits(bytes){ // this is basically a js port of include/text.php getIconFromType() function function getIconFromType(type) { - var map = { + let map = { //Common file - 'application/octet-stream': 'fa-file-o', + 'application/octet-stream': 'bi-file-earmark', //Text - 'text/plain': 'fa-file-text-o', - 'application/msword': 'fa-file-word-o', - 'application/pdf': 'fa-file-pdf-o', - 'application/vnd.oasis.opendocument.text': 'fa-file-word-o', - 'application/epub+zip': 'fa-book', + 'text/plain': 'bi-file-earmark-text', + 'text/markdown': 'bi-filetype-md', + 'text/bbcode': 'bi-file-earmark-text', + 'text/html': 'bi-filetype-html', + 'application/msword': 'bi-file-earmark-word', + 'application/pdf': 'bi-file-earmark-pdf', + 'application/vnd.oasis.opendocument.text': 'bifile--earmark-text', + 'application/epub+zip': 'bi-file-earmark-text', //Spreadsheet - 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o', - 'application/vnd.ms-excel': 'fa-file-excel-o', + 'application/vnd.oasis.opendocument.spreadsheet': 'bi-file-earmark-spreadsheet', + 'application/vnd.ms-excel': 'bi-file-earmark-spreadsheet', //Image - 'image/jpeg': 'fa-picture-o', - 'image/png': 'fa-picture-o', - 'image/gif': 'fa-picture-o', - 'image/svg+xml': 'fa-picture-o', + 'image/jpeg': 'bi-file-earmark-image', + 'image/png': 'bi-file-earmark-image', + 'image/gif': 'bi-file-earmark-image', + 'image/webp': 'bi-file-earmark-image', + 'image/svg+xml': 'bi-filetype-svg', //Archive - 'application/zip': 'fa-file-archive-o', - 'application/x-rar-compressed': 'fa-file-archive-o', + 'application/zip': 'bi-file-earmark-zip', + 'application/x-rar-compressed': 'bi-file-earmark-zip', //Audio - 'audio/mpeg': 'fa-file-audio-o', - 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that - 'audio/wav': 'fa-file-audio-o', - 'application/ogg': 'fa-file-audio-o', - 'audio/ogg': 'fa-file-audio-o', - 'audio/webm': 'fa-file-audio-o', - 'audio/mp4': 'fa-file-audio-o', + 'audio/mpeg': 'bi-file-earmark-music', + 'audio/wav': 'bi-file-earmark-music', + 'application/ogg': 'bi-file-earmark-music', + 'audio/ogg': 'bi-file-earmark-music', + 'audio/webm': 'bi-file-earmark-music', + 'audio/mp4': 'bi-file-earmark-music', //Video - 'video/quicktime': 'fa-file-video-o', - 'video/webm': 'fa-file-video-o', - 'video/mp4': 'fa-file-video-o', - 'video/x-matroska': 'fa-file-video-o' + 'video/quicktime': 'bi-file-earmark-play', + 'video/webm': 'bi-file-earmark-play', + 'video/mp4': 'bi-file-earmark-play', + 'video/x-matroska': 'bi-file-earmark-play' }; - var iconFromType = 'fa-file-o'; + let iconFromType = 'bi-file-earmark'; if (type in map) { iconFromType = map[type]; diff --git a/view/php/theme_init.php b/view/php/theme_init.php index f4083b3ff..e6bd09224 100644 --- a/view/php/theme_init.php +++ b/view/php/theme_init.php @@ -19,7 +19,6 @@ head_add_js('/library/sprintf.js/dist/sprintf.min.js'); head_add_js('/library/textcomplete/textcomplete.min.js'); head_add_js('autocomplete.js'); -head_add_js('/library/jquery.timeago.js'); head_add_js('/library/readmore.js/readmore.js'); head_add_js('/library/sjcl/sjcl.js'); @@ -35,7 +34,6 @@ head_add_js('/library/colorbox/jquery.colorbox-min.js'); head_add_js('/library/jquery.AreYouSure/jquery.are-you-sure.js'); head_add_js('/library/tableofcontents/jquery.toc.js'); head_add_js('/library/Sortable/Sortable.min.js'); -head_add_js('/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js'); /** * Those who require this feature will know what to do with it. diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index 76d6c0854..9336b7866 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -6,239 +6,257 @@ let redbasic_dark_mode = localStorage.getItem('redbasic_dark_mode'); let redbasic_theme_color = localStorage.getItem('redbasic_theme_color'); if (redbasic_dark_mode == 1) { - $('html').attr('data-bs-theme', 'dark'); + document.documentElement.setAttribute('data-bs-theme', 'dark'); } if (redbasic_dark_mode == 0) { - $('html').attr('data-bs-theme', 'light'); + document.documentElement.setAttribute('data-bs-theme', 'light'); } if (redbasic_theme_color) { - $('meta[name=theme-color]').attr('content', redbasic_theme_color); + document.querySelector('meta[name=theme-color]').setAttribute('content', redbasic_theme_color); } -$(document).ready(function() { - // provide a fake progress bar for pwa standalone mode - if (window.matchMedia('(display-mode: standalone)').matches) { - $(window).on('beforeunload', function(){ - if ($('.page-loader').length) { - return; - } - $('<div class="bg-primary page-loader"></div>').prependTo('body'); - }); - } - - if (redbasic_dark_mode == 1) { - $('#theme-switch-icon').removeClass('bi-moon').addClass('bi-sun'); - $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark'); - } - if (redbasic_dark_mode == 0) { - $('#theme-switch-icon').removeClass('bi-sun').addClass('bi-moon'); - $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light'); - } - - if (redbasic_theme_color != $('nav').css('background-color')) { - $('meta[name=theme-color]').attr('content', $('nav').css('background-color')); - localStorage.setItem('redbasic_theme_color', $('nav').css('background-color')); - } - - // CSS3 calc() fallback (for unsupported browsers) - $('body').append('<div id="css3-calc" style="width: 10px; width: calc(10px + 10px); display: none;"></div>'); - if( $('#css3-calc').width() == 10) { - $(window).resize(function() { - if($(window).width() < 992) { - $('main').css('width', $(window).width() + $('aside').outerWidth() ); - } else { - $('main').css('width', '100%'); - } - }); - } - $('#css3-calc').remove(); // Remove the test element - - if($(window).width() < 1200) { - $("#right_aside_wrapper").children().detach().appendTo('#left_aside_wrapper'); - $('#notifications_wrapper').addClass('d-none'); - } - - - if (document.querySelector('#region_1')) { - stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20); - } - - if (document.querySelector('#region_3')) { - stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20); - } - - $('.usermenu').click(function() { - if($('#navbar-collapse-1, #navbar-collapse-2').hasClass('show')){ - $('#navbar-collapse-1, #navbar-collapse-2').removeClass('show'); - } - }); - - $('#theme-switch').click(function() { - if ($('html').attr('data-bs-theme') === 'dark') { - if ($('nav').data('bs-theme') === 'dark') { - $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light'); - } - else { - $('[data-bs-theme="dark"]').attr('data-bs-theme', 'light'); - } - localStorage.setItem('redbasic_dark_mode', 0); - $('#theme-switch-icon').removeClass('bi-sun').addClass('bi-moon'); - } - else { - $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark'); - localStorage.setItem('redbasic_dark_mode', 1); - $('#theme-switch-icon').removeClass('bi-moon').addClass('bi-sun'); - } - $('meta[name=theme-color]').attr('content', $('nav').css('background-color')); - localStorage.setItem('redbasic_theme_color', $('nav').css('background-color')); - }); - - - $('#menu-btn').click(function() { - if($('#navbar-collapse-1').hasClass('show')){ - $('#navbar-collapse-1').removeClass('show'); - } - }); - - $('.notifications-btn').click(function(e) { - e.preventDefault(); - e.stopPropagation(); - if($('#navbar-collapse-2').hasClass('show')){ - $('#navbar-collapse-2').removeClass('show'); - } - }); - - $("input[data-role=cat-tagsinput]").tagsinput({ - tagClass: 'badge rounded-pill bg-warning text-dark' - }); - - $('a.disabled').click(function(e) { - e.preventDefault(); - e.stopPropagation(); - }); - - var doctitle = document.title; - function checkNotify() { - var notifyUpdateElem = document.getElementById('notify-update'); - if(notifyUpdateElem !== null) { - if(notifyUpdateElem.innerHTML !== "") - document.title = "(" + notifyUpdateElem.innerHTML + ") " + doctitle; - else - document.title = doctitle; - } - } - setInterval(function () {checkNotify();}, 10 * 1000); - - var touch_start = null; - var touch_max = window.innerWidth / 10; - - window.addEventListener('touchstart', function(e) { - if (e.touches.length === 1){ - //just one finger touched - touch_start = e.touches.item(0).clientX; - if (touch_start < touch_max) { - $('body').css('overflow-y', 'hidden'); - } - } - else { - //a second finger hit the screen, abort the touch - touch_start = null; - } - }); - - window.addEventListener('touchend', function(e) { - $('body').css('overflow-y', ''); - - let touch_offset = 30; //at least 30px are a swipe - if (touch_start) { - //the only finger that hit the screen left it - let touch_end = e.changedTouches.item(0).clientX; - - if (touch_end > (touch_start + touch_offset)) { - //a left -> right swipe - if (touch_start < touch_max) { - toggleAside(); - } - } - if (touch_end < (touch_start - touch_offset)) { - //a right -> left swipe - } - } - }); - +document.addEventListener('DOMContentLoaded', function () { + // provide a fake progress bar for pwa standalone mode + if (window.matchMedia('(display-mode: standalone)').matches) { + window.addEventListener('beforeunload', function () { + if (!document.querySelector('.page-loader')) { + let loader = document.createElement('div'); + loader.classList.add('bg-primary', 'page-loader'); + document.body.prepend(loader); + } + }); + } + + if (redbasic_dark_mode == 1) { + document.getElementById('theme-switch-icon').classList.remove('bi-moon'); + document.getElementById('theme-switch-icon').classList.add('bi-sun'); + document.querySelector('[data-bs-theme="light"]').setAttribute('data-bs-theme', 'dark'); + } + if (redbasic_dark_mode == 0) { + document.getElementById('theme-switch-icon').classList.remove('bi-sun'); + document.getElementById('theme-switch-icon').classList.add('bi-moon'); + let darkElements = document.querySelectorAll('[data-bs-theme="dark"]:not(nav)'); + darkElements.forEach(el => el.setAttribute('data-bs-theme', 'light')); + } + + let navBackgroundColor = document.querySelector('nav').style.backgroundColor; + if (redbasic_theme_color !== navBackgroundColor) { + document.querySelector('meta[name=theme-color]').setAttribute('content', navBackgroundColor); + localStorage.setItem('redbasic_theme_color', navBackgroundColor); + } + + // CSS3 calc() fallback (for unsupported browsers) + let testElem = document.createElement('div'); + testElem.style.width = 'calc(10px + 10px)'; + testElem.style.display = 'none'; + testElem.id = 'css3-calc'; + document.body.appendChild(testElem); + + if (testElem.offsetWidth === 10) { + window.addEventListener('resize', function () { + if (window.innerWidth < 992) { + document.querySelector('main').style.width = `${window.innerWidth + document.querySelector('aside').offsetWidth}px`; + } else { + document.querySelector('main').style.width = '100%'; + } + }); + } + testElem.remove(); // Remove the test element + + if (window.innerWidth < 1200) { + let rightAsideWrapper = document.getElementById("right_aside_wrapper"); + let leftAsideWrapper = document.getElementById("left_aside_wrapper"); + leftAsideWrapper.appendChild(...rightAsideWrapper.children); + document.getElementById('notifications_wrapper').classList.add('d-none'); + } + + if (document.getElementById('region_1')) { + stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20); + } + + if (document.getElementById('region_3')) { + stickyScroll('.aside_spacer_right', '.aside_spacer_top_right', 'section', parseFloat(document.querySelector('main').getBoundingClientRect().top), 20); + } + + document.querySelectorAll('.usermenu').forEach(function (element) { + element.addEventListener('click', function () { + let navCollapse = document.querySelectorAll('#navbar-collapse-1, #navbar-collapse-2'); + navCollapse.forEach(function (nav) { + if (nav.classList.contains('show')) { + nav.classList.remove('show'); + } + }); + }); + }); + + document.getElementById('theme-switch').addEventListener('click', function () { + let html = document.documentElement; + if (html.getAttribute('data-bs-theme') === 'dark') { + let nav = document.querySelector('nav'); + if (nav.dataset.bsTheme === 'dark') { + document.querySelectorAll('[data-bs-theme="dark"]:not(nav)').forEach(function (el) { + el.setAttribute('data-bs-theme', 'light'); + }); + } else { + document.querySelector('[data-bs-theme="dark"]').setAttribute('data-bs-theme', 'light'); + } + localStorage.setItem('redbasic_dark_mode', 0); + document.getElementById('theme-switch-icon').classList.remove('bi-sun'); + document.getElementById('theme-switch-icon').classList.add('bi-moon'); + } else { + document.querySelectorAll('[data-bs-theme="light"]').forEach(function (el) { + el.setAttribute('data-bs-theme', 'dark'); + }); + localStorage.setItem('redbasic_dark_mode', 1); + document.getElementById('theme-switch-icon').classList.remove('bi-moon'); + document.getElementById('theme-switch-icon').classList.add('bi-sun'); + } + document.querySelector('meta[name=theme-color]').setAttribute('content', document.querySelector('nav').style.backgroundColor); + localStorage.setItem('redbasic_theme_color', document.querySelector('nav').style.backgroundColor); + }); + + document.getElementById('menu-btn').addEventListener('click', function () { + let navCollapse = document.getElementById('navbar-collapse-1'); + if (navCollapse.classList.contains('show')) { + navCollapse.classList.remove('show'); + } + }); + + document.querySelectorAll('.notifications-btn').forEach(function (element) { + element.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + let navCollapse = document.getElementById('navbar-collapse-2'); + if (navCollapse.classList.contains('show')) { + navCollapse.classList.remove('show'); + } + }); + }); + + $("input[data-role=cat-tagsinput]").tagsinput({ + tagClass: 'badge rounded-pill bg-warning text-dark' + }); + + document.querySelectorAll('a.disabled').forEach(function (link) { + link.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + }); + }); + + let doctitle = document.title; + function checkNotify() { + let notifyUpdateElem = document.getElementById('notify-update'); + if (notifyUpdateElem && notifyUpdateElem.innerHTML !== '') { + document.title = '(' + notifyUpdateElem.innerHTML + ') ' + doctitle; + } else { + document.title = doctitle; + } + } + + setInterval(checkNotify, 10 * 1000); + + let touch_start = null; + let touch_max = window.innerWidth / 10; + + window.addEventListener('touchstart', function (e) { + if (e.touches.length === 1) { + touch_start = e.touches[0].clientX; + if (touch_start < touch_max) { + document.body.style.overflowY = 'hidden'; + } + } else { + touch_start = null; + } + }); + + window.addEventListener('touchend', function (e) { + document.body.style.overflowY = ''; + let touch_offset = 30; // at least 30px are a swipe + if (touch_start) { + let touch_end = e.changedTouches[0].clientX; + if (touch_end > (touch_start + touch_offset)) { + if (touch_start < touch_max) { + toggleAside(); + } + } + if (touch_end < (touch_start - touch_offset)) { + // a right -> left swipe + } + } + }); }); function setStyle(element, cssProperty) { - for (var property in cssProperty){ - element.style[property] = cssProperty[property]; - } + for (var property in cssProperty) { + element.style[property] = cssProperty[property]; + } } function stickyScroll(sticky, stickyTop, container, topOffset, bottomOffset) { - - var lastScrollTop = 0; - var sticky = document.querySelector(sticky); - - if (!sticky) { - return; - } - - var stickyHeight = sticky.getBoundingClientRect().height; - var stickyTop = document.querySelector(stickyTop); - var content = document.querySelector(container); - var diff = window.innerHeight - stickyHeight; - var h = 0; - var lasth = 0; - var st = window.pageYOffset || document.documentElement.scrollTop; - - var resizeObserver = new ResizeObserver(function(entries) { - stickyHeight = sticky.getBoundingClientRect().height; - st = window.pageYOffset || document.documentElement.scrollTop; - diff = window.innerHeight - stickyHeight; - }); - - resizeObserver.observe(sticky); - resizeObserver.observe(content); - - window.addEventListener('scroll', function() { - if(window.innerHeight > stickyHeight + topOffset) { - setStyle(stickyTop, { height: 0 + 'px' }); - setStyle(sticky, { position: 'sticky', top: topOffset + 'px'}); - } - else { - st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426" - if (st > lastScrollTop){ - // downscroll code - setStyle(stickyTop, { height: lasth + 'px' }); - setStyle(sticky, { position: 'sticky', top: Math.round(diff) - bottomOffset + 'px', bottom: '' }); - } else { - // upscroll code - h = sticky.getBoundingClientRect().top - content.getBoundingClientRect().top; - if(Math.round(stickyTop.getBoundingClientRect().height) === lasth) { - setStyle(stickyTop, { height: Math.round(h) + 'px' }); - } - lasth = Math.round(h); - setStyle(sticky, { position: 'sticky', top: '', bottom: Math.round(diff) - topOffset + 'px' }); - } - lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling - } - }, false); - + let lastScrollTop = 0; + let stickyElement = document.querySelector(sticky); + + if (!stickyElement) { + return; + } + + let stickyHeight = stickyElement.getBoundingClientRect().height; + let stickyTopElement = document.querySelector(stickyTop); + let content = document.querySelector(container); + let diff = window.innerHeight - stickyHeight; + + let h = 0; + let lasth = 0; + let st = window.pageYOffset || document.documentElement.scrollTop; + + let resizeObserver = new ResizeObserver(function () { + stickyHeight = stickyElement.getBoundingClientRect().height; + st = window.pageYOffset || document.documentElement.scrollTop; + diff = window.innerHeight - stickyHeight; + }); + + resizeObserver.observe(stickyElement); + resizeObserver.observe(content); + + window.addEventListener('scroll', function () { + if (window.innerHeight > stickyHeight + topOffset) { + setStyle(stickyTopElement, { height: '0px' }); + setStyle(stickyElement, { position: 'sticky', top: `${topOffset}px` }); + } else { + st = window.pageYOffset || document.documentElement.scrollTop; + if (st > lastScrollTop) { + setStyle(stickyTopElement, { height: `${lasth}px` }); + setStyle(stickyElement, { position: 'sticky', top: `${Math.round(diff) - bottomOffset}px`, bottom: '' }); + } else { + h = stickyElement.getBoundingClientRect().top - content.getBoundingClientRect().top; + if (Math.round(stickyTopElement.getBoundingClientRect().height) === lasth) { + setStyle(stickyTopElement, { height: `${Math.round(h)}px` }); + } + lasth = Math.round(h); + setStyle(stickyElement, { position: 'sticky', top: '', bottom: `${Math.round(diff) - topOffset}px` }); + } + lastScrollTop = st <= 0 ? 0 : st; + } + }, false); } function makeFullScreen(full) { - if(typeof full=='undefined' || full == true) { - $('main').addClass('fullscreen'); - $('header, nav, aside, #fullscreen-btn').attr('style','display:none !important'); - $('#inline-btn').show(); - } - else { - $('main').removeClass('fullscreen'); - $('header, nav, aside, #fullscreen-btn').show(); - $('#inline-btn').hide(); - } + if (typeof full === 'undefined' || full === true) { + document.querySelector('main').classList.add('fullscreen'); + document.querySelector('header').style.display = 'none'; + document.querySelector('nav').style.display = 'none'; + document.querySelector('aside').style.display = 'none'; + document.getElementById('fullscreen-btn').style.display = 'none'; + document.getElementById('inline-btn').style.display = 'block'; + } else { + document.querySelector('main').classList.remove('fullscreen'); + document.querySelector('header').style.display = ''; + document.querySelector('nav').style.display = ''; + document.querySelector('aside').style.display = ''; + document.getElementById('fullscreen-btn').style.display = ''; + document.getElementById('inline-btn').style.display = 'none'; + } } - - diff --git a/view/theme/redbasic/php/config.php b/view/theme/redbasic/php/config.php index 7079cc386..6d2707493 100644 --- a/view/theme/redbasic/php/config.php +++ b/view/theme/redbasic/php/config.php @@ -193,11 +193,11 @@ class RedbasicConfig { '$dark' => t('Dark style'), '$light' => t('Light style'), '$common' => t('Common settings'), - '$primary_color' => array('redbasic_primary_color', t('Primary theme color'), $arr['primary_color'], '<i class="fa fa-circle text-primary"></i> ' . t('Current color, leave empty for default')), - '$success_color' => array('redbasic_success_color', t('Success theme color'), $arr['success_color'], '<i class="fa fa-circle text-success"></i> ' . t('Current color, leave empty for default')), - '$info_color' => array('redbasic_info_color', t('Info theme color'), $arr['info_color'], '<i class="fa fa-circle text-info"></i> ' . t('Current color, leave empty for default')), - '$warning_color' => array('redbasic_warning_color', t('Warning theme color'), $arr['warning_color'], '<i class="fa fa-circle text-warning"></i> ' . t('Current color, leave empty for default')), - '$danger_color' => array('redbasic_danger_color', t('Danger theme color'), $arr['danger_color'], '<i class="fa fa-circle text-danger"></i> ' . t('Current color, leave empty for default')), + '$primary_color' => array('redbasic_primary_color', t('Primary theme color'), $arr['primary_color'], '<i class="bi bi-circle-fill text-primary"></i> ' . t('Current color, leave empty for default')), + '$success_color' => array('redbasic_success_color', t('Success theme color'), $arr['success_color'], '<i class="bi bi-circle-fill text-success"></i> ' . t('Current color, leave empty for default')), + '$info_color' => array('redbasic_info_color', t('Info theme color'), $arr['info_color'], '<i class="bi bi-circle-fill text-info"></i> ' . t('Current color, leave empty for default')), + '$warning_color' => array('redbasic_warning_color', t('Warning theme color'), $arr['warning_color'], '<i class="bi bi-circle-fill text-warning"></i> ' . t('Current color, leave empty for default')), + '$danger_color' => array('redbasic_danger_color', t('Danger theme color'), $arr['danger_color'], '<i class="bi bi-circle-fill text-danger"></i> ' . t('Current color, leave empty for default')), '$dark_mode' => array('redbasic_dark_mode',t('Default to dark mode'),$arr['dark_mode'], '', array(t('No'),t('Yes'))), '$navbar_dark_mode' => array('redbasic_navbar_dark_mode',t('Always use light icons for navbar'),$arr['navbar_dark_mode'], t('Enable this option if you use a dark navbar color in light mode'), array(t('No'),t('Yes'))), '$narrow_navbar' => array('redbasic_narrow_navbar',t('Narrow navbar'),$arr['narrow_navbar'], '', array(t('No'),t('Yes'))), diff --git a/view/theme/redbasic/php/theme.php b/view/theme/redbasic/php/theme.php index 1f682634e..dcbe8c3da 100644 --- a/view/theme/redbasic/php/theme.php +++ b/view/theme/redbasic/php/theme.php @@ -5,7 +5,7 @@ * * Description: Hubzilla standard theme * * Version: 2.2 * * MinVersion: 8.9 - * * MaxVersion: 10.0 + * * MaxVersion: 11.0 * * Author: Fabrixxm * * Maintainer: Mike Macgirvin * * Maintainer: Mario Vavti diff --git a/view/tpl/admin_channels.tpl b/view/tpl/admin_channels.tpl index ca05313ed..6705a74c4 100644 --- a/view/tpl/admin_channels.tpl +++ b/view/tpl/admin_channels.tpl @@ -36,7 +36,7 @@ <td class='channel_address'>{{$c.channel_address}}</td> <td class="checkbox_bulkedit"><input type="checkbox" class="channels_ckbx p-1" id="id_channel_{{$c.channel_id}}" name="channel[]" value="{{$c.channel_id}}"/></td> <td class="tools"> - <a href="{{$baseurl}}/admin/channels/block/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class='bi fa-ban admin-icons {{if ($c.blocked)}}text-danger{{/if}}'></i></a> + <a href="{{$baseurl}}/admin/channels/block/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class='bi bi-ban admin-icons {{if ($c.blocked)}}text-danger{{/if}}'></i></a> </td> <td class="tools"> <a href="{{$baseurl}}/admin/channels/code/{{$c.channel_id}}?t={{$form_security_token}}" class="p-1 text-reset" title='{{if ($c.allowcode)}}{{$uncode}}{{else}}{{$code}}{{/if}}'><i class='bi bi-code admin-icons {{if ($c.allowcode)}}text-danger{{/if}}'></i></a> diff --git a/view/tpl/cal_calendar.tpl b/view/tpl/cal_calendar.tpl index 2e1699f1c..f120f9f80 100644 --- a/view/tpl/cal_calendar.tpl +++ b/view/tpl/cal_calendar.tpl @@ -41,15 +41,17 @@ $(document).ready(function() { if (fragment) { switch (fragment.length) { - // this might have performance issues - // case 4: - // view = 'multiMonthYear'; - // break; case 7: view = 'dayGridMonth'; break; case 10: - view = 'timeGridDay'; + view = 'timeGridWeek'; + break; + case 11: + if (fragment[0] === '!') { + fragment = fragment.substring(1); + view = 'timeGridDay'; + } break; default: view = 'dayGridMonth'; diff --git a/view/tpl/chat.tpl b/view/tpl/chat.tpl index cb88be7e8..1020399c7 100644 --- a/view/tpl/chat.tpl +++ b/view/tpl/chat.tpl @@ -37,11 +37,11 @@ <a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="bi bi-circle-fill away"></i> {{$away}}</a> <a class="dropdown-item" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="bi bi-circle-fill leave"></i> {{$leave}}</a> <div class="dropdown-divider"></div> - <a id="toggle-notifications" class="dropdown-item" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="bi fa-bell-slash-o"></i> Toggle notifications</a> - <a id="toggle-notifications-audio" class="dropdown-item disabled" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="bi fa-volume-off"></i> Toggle sound</a> + <a id="toggle-notifications" class="dropdown-item" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="bi bi-bell-slash-fill"></i> Toggle notifications</a> + <a id="toggle-notifications-audio" class="dropdown-item disabled" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="bi bi-volume-mute-fill"></i> Toggle sound</a> {{if $bookmark_link}} <div class="dropdown-divider"></div> - <a class="dropdown-item" href="{{$bookmark_link}}" target="_blank" ><i class="bi fa-bookmark"></i> {{$bookmark}}</a> + <a class="dropdown-item" href="{{$bookmark_link}}" target="_blank" ><i class="bi bi-bookmark-fill"></i> {{$bookmark}}</a> {{/if}} </div> </div> @@ -206,7 +206,7 @@ function update_chats(chats) { chat_issue_notification(item.name + ':\n' + item.text, 'Hubzilla Chat'); } $('#chatLineHolder').append(newNode); - $(".autotime").timeago(); + updateRelativeTime('.autotime'); var elem = document.getElementById('chatTopBar'); elem.scrollTop = elem.scrollHeight; @@ -271,27 +271,27 @@ var chat_issue_notification = function (theBody,theTitle) { function toggleChatNotificationAudio() { if(!chat_notify_audio_enabled) { chat_notify_audio_enabled = true; - $('#toggle-notifications-audio-icon').removeClass('fa-volume-off'); - $('#toggle-notifications-audio-icon').addClass('fa-volume-up'); + $('#toggle-notifications-audio-icon').removeClass('bi-volume-mute-fill'); + $('#toggle-notifications-audio-icon').addClass('bi-volume-up-fill'); } else { chat_notify_audio_enabled = false; - $('#toggle-notifications-audio-icon').removeClass('fa-volume-up'); - $('#toggle-notifications-audio-icon').addClass('fa-volume-off'); + $('#toggle-notifications-audio-icon').removeClass('bi-volume-up-fill'); + $('#toggle-notifications-audio-icon').addClass('bi-volume-mute-fill'); } } function toggleChatNotifications() { if(!chat_notify_enabled) { chat_notify_enabled = true; - $('#toggle-notifications-icon').addClass('fa-bell'); - $('#toggle-notifications-icon').removeClass('fa-bell-slash-o'); + $('#toggle-notifications-icon').addClass('bi-bell-fill'); + $('#toggle-notifications-icon').removeClass('fa-bell-slash-fill'); $('#toggle-notifications-audio').removeClass('disabled'); } else { chat_notify_enabled = false; - $('#toggle-notifications-icon').addClass('fa-bell-slash-o'); - $('#toggle-notifications-icon').removeClass('fa-bell'); + $('#toggle-notifications-icon').addClass('bi-bell-slash-fill'); + $('#toggle-notifications-icon').removeClass('bi-bell-fill'); $('#toggle-notifications-audio').addClass('disabled'); } } diff --git a/view/tpl/comment_item.tpl b/view/tpl/comment_item.tpl index 76b756846..059e2793a 100644 --- a/view/tpl/comment_item.tpl +++ b/view/tpl/comment_item.tpl @@ -37,6 +37,9 @@ <button class="btn btn-outline-secondary btn-sm border-0" title="{{$edcode}}" onclick="insertbbcomment('{{$comment}}','code', {{$id}}); return false;"> <i class="bi bi-code comment-icon"></i> </button> + <button class="btn btn-outline-secondary btn-sm border-0" title="highlight" onclick="insertbbcomment('{{$comment}}','mark', {{$id}}); return false;"> + <i class="bi bi-highlighter comment-icon"></i> + </button> </div> <div class="btn-group me-2"> {{if $can_upload}} diff --git a/view/tpl/contact_edit_header.tpl b/view/tpl/contact_edit_header.tpl index 8ec6054a3..8fe84a3b7 100644 --- a/view/tpl/contact_edit_header.tpl +++ b/view/tpl/contact_edit_header.tpl @@ -4,6 +4,6 @@ </a> </div> <div class="m-1"> - <div class="text-truncate h3 m-0"><strong>{{if $is_group}}<i class="bi fa-comments-o" title="{{$group_label}}"></i> {{/if}}{{$name}}</strong></div> + <div class="text-truncate h3 m-0"><strong>{{if $is_group}}<i class="bi bi-chat-quote" title="{{$group_label}}"></i> {{/if}}{{$name}}</strong></div> <div class="text-truncate text-muted">{{$addr}}</div> </div> diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 74e06d6ac..96e6f57df 100644 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -32,18 +32,24 @@ {{if $item.location}} {{$item.location}} {{/if}} - {{if $item.delayed}} - <i class="bi bi-clock"></i> - {{/if}} {{if $item.editedtime}} - <i class="bi bi-pencil"></i> + <i class="bi bi-pencil" title="{{$item.editedtime}}"></i> {{/if}} {{if $item.verified}} <i class="bi bi-shield-check" title="{{$item.verified}}"></i> {{elseif $item.forged}} <i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i> {{/if}} - <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}} {{$item.editedtime}}{{/if}}{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> + {{if $item.no_comment}} + <i class="bi bi-ban" title="{{$item.no_comment}}"></i> + {{/if}} + {{if $item.delayed}} + <i class="bi bi-clock" title="{{$item.delayed}}"></i> + {{/if}} + {{if $item.expiretime}} + <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i> + {{/if}} + <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> </div> {{if $item.thr_parent_uuid}} <a href="javascript:doscroll('{{$item.thr_parent_uuid}}',{{$item.parent}});" class="ms-3" title="{{$item.top_hint}}"><i class="bi bi-chevron-double-up"></i></a> diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl index 41880029f..6143e156e 100644 --- a/view/tpl/conv_list.tpl +++ b/view/tpl/conv_list.tpl @@ -26,18 +26,24 @@ {{if $item.location}} {{$item.location}} {{/if}} - {{if $item.delayed}} - <i class="bi bi-clock"></i> - {{/if}} {{if $item.editedtime}} - <i class="bi bi-pencil"></i> + <i class="bi bi-pencil" title="{{$item.editedtime}}"></i> {{/if}} {{if $item.verified}} <i class="bi bi-shield-check" title="{{$item.verified}}"></i> {{elseif $item.forged}} <i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i> {{/if}} - <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}} {{$item.editedtime}}{{/if}}{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> + {{if $item.no_comment}} + <i class="bi bi-ban" title="{{$item.no_comment}}"></i> + {{/if}} + {{if $item.delayed}} + <i class="bi bi-clock" title="{{$item.delayed}}"></i> + {{/if}} + {{if $item.expiretime}} + <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i> + {{/if}} + <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> </div> {{if $item.pinned}} <div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="bi bi-pin-fill"></i></div> diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index e7fe1effc..306dfe0b5 100644 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -1,103 +1,124 @@ <script> - var aside_padding_top; - var section_padding_top; - var coverSlid = false; - var hide_cover = Boolean({{$hide_cover}}); - var cover_height; - - $(document).ready(function() { - if(! $('#cover-photo').length) - return; + let asidePaddingTop; + let sectionPaddingTop; + let coverSlid = false; + const hideCover = Boolean({{$hide_cover}}); + let coverHeight; + + document.addEventListener('DOMContentLoaded', function() { + const coverPhoto = document.getElementById('cover-photo'); + if (!coverPhoto) return; - if($(window).width() < 755) { - $('#cover-photo').remove(); + // If screen width is smaller than 755px, remove the cover photo + if (window.innerWidth < 755) { + coverPhoto.remove(); coverSlid = true; return; } - $('#cover-photo').removeClass('d-none'); - cover_height = Math.ceil($(window).width()/2.75862069); - $('#cover-photo').css('height', cover_height + 'px'); + // Otherwise, set up the cover photo's size + coverPhoto.classList.remove('d-none'); + coverHeight = Math.round(window.innerWidth / 2.75862069); + coverPhoto.style.height = `${coverHeight}px`; datasrc2src('#cover-photo > img'); - $(document).on('click mouseup keyup', slideUpCover); + // Bind events for hiding the cover + document.addEventListener('click', slideUpCover); + document.addEventListener('mouseup', slideUpCover); + document.addEventListener('keyup', slideUpCover); - if(hide_cover) { - hideCover(); - } - else if(!hide_cover && !coverSlid) { + // Hide the cover if required + if (hideCover) { + hideCoverFunction(); + } else if (!coverSlid) { coverVisibleActions(); } - }); - - $(window).scroll(function () { - if(! $('#cover-photo').length) { - return; - } - if($(window).scrollTop() >= cover_height) { - coverHiddenActions(); - coverSlid = true; - } - else if ($(window).scrollTop() < cover_height){ - if(coverSlid) { - $(window).scrollTop(cover_height); - setTimeout(function(){ coverSlid = false; }, 1000); + // Throttle scroll event + let lastScrollTop = 0; + const scrollThreshold = 100; + window.addEventListener('scroll', function() { + const scrollTop = window.scrollY; + if (Math.abs(scrollTop - lastScrollTop) < scrollThreshold) { + return; } - else { - if($(window).scrollTop() < cover_height) { - coverVisibleActions(); - } + lastScrollTop = scrollTop; + handleScroll(scrollTop); + }); + + // Adjust cover photo on resize + window.addEventListener('resize', function() { + if (!coverPhoto) return; + + coverHeight = Math.round(window.innerWidth / 2.75862069); + coverPhoto.style.height = `${coverHeight}px`; + + if (window.innerWidth < 755) { + coverPhoto.remove(); + coverHiddenActions(); + coverSlid = true; } - } - if($('main').css('opacity') < 1) { - $('main').css('opacity', ($(window).scrollTop()/cover_height).toFixed(1)); - } + }); }); - $(window).resize(function () { - if(! $('#cover-photo').length) { - return; - } + // Scroll event handling + function handleScroll(scrollTop) { + const coverPhoto = document.getElementById('cover-photo'); + if (!coverPhoto) return; - cover_height = Math.ceil($(window).width()/2.75862069); - $('#cover-photo').css('height', cover_height + 'px'); - if($(window).width() < 755) { - $('#cover-photo').remove(); + if (scrollTop >= coverHeight) { coverHiddenActions(); coverSlid = true; + } else if (scrollTop < coverHeight) { + if (coverSlid) { + document.body.style.overflow = 'hidden'; // Disable scrolling + window.scrollTo(0, coverHeight); + setTimeout(function() { + coverSlid = false; + document.body.style.overflow = 'auto'; // Enable scrolling + }, 500); + } else { + coverVisibleActions(); + } } - }); + // Fade effect for main content opacity + const mainElement = document.querySelector('main'); + if (mainElement && parseFloat(getComputedStyle(mainElement).opacity) < 1) { + mainElement.style.opacity = (scrollTop / coverHeight).toFixed(1); + } + } + // Functions to handle showing/hiding the cover function slideUpCover() { - if(coverSlid) { - return; - } - $('html, body').animate({scrollTop: cover_height + 'px'}, 'fast'); - return; + if (coverSlid) return; + window.scrollTo({ + top: coverHeight, + behavior: 'smooth' + }); } - function hideCover() { - if(coverSlid) { - return; - } - window.scrollTo(0, cover_height); - return; + function hideCoverFunction() { + if (coverSlid) return; + window.scrollTo(0, coverHeight); } + // Actions when the cover is visible function coverVisibleActions() { - $('body').css('cursor', 'n-resize'); - $('.navbar').removeClass('fixed-top'); - //$('main').css('margin-top', - $('nav').outerHeight(true) + 'px'); - $('main').css('opacity', 0); + document.body.style.cursor = 'n-resize'; + const navbar = document.querySelector('.navbar'); + if (navbar) navbar.classList.remove('fixed-top'); + const mainElement = document.querySelector('main'); + if (mainElement) mainElement.style.opacity = 0; } + // Actions when the cover is hidden function coverHiddenActions() { - $('body').css('cursor', ''); - $('.navbar').addClass('fixed-top'); - //$('main').css('margin-top', ''); - $('main').css('opacity', 1); + document.body.style.cursor = ''; + const navbar = document.querySelector('.navbar'); + if (navbar) navbar.classList.add('fixed-top'); + const mainElement = document.querySelector('main'); + if (mainElement) mainElement.style.opacity = 1; } </script> diff --git a/view/tpl/direntry.tpl b/view/tpl/direntry.tpl index 79d66d3aa..076d2739f 100644 --- a/view/tpl/direntry.tpl +++ b/view/tpl/direntry.tpl @@ -14,7 +14,7 @@ <a class="btn btn-success btn-sm" href="{{$entry.connect}}"><i class="bi bi-plus-lg connect-icon"></i> {{$entry.conn_label}}</a> {{/if}} </div> - <h3>{{if $entry.public_forum}}<i class="bi bi-chat-quote" title="{{$entry.forum_label}} @{{$entry.nickname}}+"></i> {{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}} <i class="bi fa-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3> + <h3>{{if $entry.public_forum}}<i class="bi bi-chat-quote" title="{{$entry.forum_label}} @{{$entry.nickname}}+"></i> {{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}} <i class="bi bi-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3> </div> <div class="section-content-tools-wrapper directory-collapse"> <div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.hash}}" > diff --git a/view/tpl/event_form.tpl b/view/tpl/event_form.tpl index 43c6942e1..c469e9378 100644 --- a/view/tpl/event_form.tpl +++ b/view/tpl/event_form.tpl @@ -57,13 +57,13 @@ </div> <div class='btn-group'> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'desc');"> - <i class="bi fa-camera comment-icon"></i> + <i class="bi bi-camera comment-icon"></i> </button> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'desc');"> <i class="bi bi-link-45deg comment-icon"></i> </button> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'desc');"> - <i class="bi fa-video-camera comment-icon"></i> + <i class="bi bi-video-camera comment-icon"></i> </button> </div> </div> @@ -95,13 +95,13 @@ </div> <div class='btn-group'> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'loc');"> - <i class="bi fa-camera comment-icon"></i> + <i class="bi bi-camera comment-icon"></i> </button> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'loc');"> <i class="bi bi-link-45deg comment-icon"></i> </button> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'loc');"> - <i class="bi fa-video-camera comment-icon"></i> + <i class="bi bi-camera-video comment-icon"></i> </button> <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$mapper}}" onclick="insertbbcomment('none','map','loc');"> <i class="bi bi-globe comment-icon"></i> diff --git a/view/tpl/event_item_header.tpl b/view/tpl/event_item_header.tpl index 1c8fe034c..36c3164d6 100644 --- a/view/tpl/event_item_header.tpl +++ b/view/tpl/event_item_header.tpl @@ -1,5 +1,5 @@ <div class="event-item-title"> - <h3><i class="bi fa-calendar"></i> {{$title}}</h3> + <h3><i class="bi bi-calendar3"></i> {{$title}}</h3> </div> {{if $oneday && $allday}} <span class="dtstart">{{$dtstart_dt}}</span> diff --git a/view/tpl/events-js.tpl b/view/tpl/events-js.tpl index e2c3167f4..8f10d4e06 100644 --- a/view/tpl/events-js.tpl +++ b/view/tpl/events-js.tpl @@ -10,12 +10,12 @@ </div> <button class="btn btn-success btn-sm" onclick="openClose('form');">{{$new_event.1}}</button> <div class="btn-group"> - <button class="btn btn-outline-secondary btn-sm" onclick="changeView('prev', false);" title="{{$prev}}"><i class="bi fa-backward"></i></button> - <button id="today-btn" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="bi fa-bullseye" style="display: none; width: 1rem;"></i></button> - <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="bi fa-forward"></i></button> + <button class="btn btn-outline-secondary btn-sm" onclick="changeView('prev', false);" title="{{$prev}}"><i class="bi bi-rewind-fill"></i></button> + <button id="today-btn" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="bi bi-bullseye" style="display: none; width: 1rem;"></i></button> + <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="bi bi-fast-forward-fill"></i></button> </div> - <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="bi fa-expand"></i></button> - <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="bi fa-compress"></i></button> + <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="bi bi-arrows-angle-expand"></i></button> + <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="bi bi-arrows-angle-contract"></i></button> </div> </div> <h2 id="title"></h2> diff --git a/view/tpl/generic_addon_settings.tpl b/view/tpl/generic_addon_settings.tpl index 685099807..a331dbb5d 100644 --- a/view/tpl/generic_addon_settings.tpl +++ b/view/tpl/generic_addon_settings.tpl @@ -5,7 +5,7 @@ {{if $addon.1|substr:0:1 === '<'}} {{$addon.1}} {{else}} - <i class="bi fa-gear"></i> {{$addon.1}} + <i class="bi bi-gear"></i> {{$addon.1}} {{/if}} </a> </h3> diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl index d2efcced9..18941f454 100644 --- a/view/tpl/head.tpl +++ b/view/tpl/head.tpl @@ -8,6 +8,7 @@ {{$linkrel}} {{$plugins}} <script> + var lang = '{{$lang}}'; var updateInterval = {{$update_interval}}; var sse_enabled = {{$sse_enabled}}; var localUser = {{if $local_channel}}{{$local_channel}}{{else}}false{{/if}}; diff --git a/view/tpl/install_checks.tpl b/view/tpl/install_checks.tpl index f9743d02a..f5f4df137 100644 --- a/view/tpl/install_checks.tpl +++ b/view/tpl/install_checks.tpl @@ -2,7 +2,7 @@ <div class="jumbotron"> <h1>{{$title}}</h1> <hr class="my-4"> - <h2><i class="bi fa-heartbeat"></i> {{$pass}}</h2> + <h2><i class="bi bi-heart-pulse"></i> {{$pass}}</h2> </div> <form action="{{$baseurl}}/index.php?q=setup" method="post"> <table class="table"> @@ -23,7 +23,7 @@ <button class="btn btn-success" type="submit"><i class="bi bi-check-lg"></i> {{$next}}</button> {{else}} <input type="hidden" name="pass" value="1"> - <button class="btn btn-warning" type="submit"><i class="bi fa-refresh"></i> {{$reload}}</button> + <button class="btn btn-warning" type="submit"><i class="bi bi-arrow-clockwise"></i> {{$reload}}</button> {{/if}} </form> </div> diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index 2c60b7c22..3d93fcde9 100644 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -199,6 +199,7 @@ var activeCommentText = ''; $('#created-modal-OKButton').on('click', function() { reply=$('#created-date').val(); if(reply && reply.length) { + $('#jot-delayed').val(1); $('#jot-created').val(reply); $('#createdModal').modal('hide'); } diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl index 294750398..a6ec453e7 100644 --- a/view/tpl/jot.tpl +++ b/view/tpl/jot.tpl @@ -13,6 +13,7 @@ {{if $parent}} <input type="hidden" name="parent" value="{{$parent}}" /> {{/if}} + <input type="hidden" id="jot-delayed" name="delayed" value="0" /> <input type="hidden" name="obj_type" value="{{$ptyp}}" /> <input type="hidden" name="profile_uid" value="{{$profile_uid}}" /> <input type="hidden" name="return" value="{{$return_path}}" /> @@ -115,6 +116,9 @@ <button type="button" id="main-editor-code" class="btn btn-outline-secondary btn-sm border-0" title="{{$code}}" onclick="inserteditortag('code', 'profile-jot-text'); return false;"> <i class="bi bi-code jot-icons"></i> </button> + <button type="button" id="main-editor-bold" class="btn btn-outline-secondary btn-sm border-0" title="highlight" onclick="inserteditortag('mark', 'profile-jot-text'); return false;"> + <i class="bi bi-highlighter jot-icons"></i> + </button> </div> {{/if}} {{if $visitor}} @@ -169,7 +173,7 @@ </button> {{if $feature_nocomment}} <button type="button" id="profile-nocomment-wrapper" class="btn btn-outline-secondary btn-sm border-0" title="{{$nocommenttitle}}" onclick="toggleNoComment();return false;"> - <i id="profile-nocomment" class="bi bi-chat-dots jot-icons"></i> + <i id="profile-nocomment" class="bi{{if $nocomment}} bi-chat{{else}} bi-chat-dots{{/if}} jot-icons"></i> </button> {{/if}} {{if $custommoretoolsbuttons}} @@ -210,7 +214,7 @@ {{/if}} <a class="dropdown-item" href="#" onclick="initPoll(); return false"><i id="profile-poll" class="bi bi-bar-chart jot-icons"></i> {{$poll}}</a> {{if $feature_nocomment}} - <a class="dropdown-item" href="#" onclick="toggleNoComment(); return false;"><i id="profile-nocomment-sub" class="bi bi-chat"></i> {{$nocommenttitlesub}}</a> + <a class="dropdown-item" href="#" onclick="toggleNoComment(); return false;"><i id="profile-nocomment-sub" class="bi{{if $nocomment}} bi-chat{{else}} bi-chat-dots{{/if}}"></i> {{$nocommenttitlesub}}</a> {{/if}} <hr /> {{$custommoretoolsdropdown}} diff --git a/view/tpl/js_strings.tpl b/view/tpl/js_strings.tpl index 46536a89a..38168ccfe 100644 --- a/view/tpl/js_strings.tpl +++ b/view/tpl/js_strings.tpl @@ -39,26 +39,6 @@ 'pin_item' : "{{$pin_item}}", 'unpin_item' : "{{$unpin_item}}", - 'plural_func' : "{{$plural_func}}", - - 't01' : "{{$t01}}", - 't02' : "{{$t02}}", - 't03' : "{{$t03}}", - 't04' : "{{$t04}}", - 't05' : "{{$t05}}", - 't06' : "{{$t06}}", - 't07' : "{{$t07}}", - 't08' : "{{$t08}}", - 't09' : "{{$t09}}", - 't10' : "{{$t10}}", - 't11' : "{{$t11}}", - 't12' : "{{$t12}}", - 't13' : "{{$t13}}", - 't14' : "{{$t14}}", - 't15' : "{{$t15}}", - 't16' : "{{$t16}}", - 't17' : "{{$t17}}", - 'monthNames' : [ "{{$January}}","{{$February}}","{{$March}}","{{$April}}","{{$May}}","{{$June}}","{{$July}}","{{$August}}","{{$September}}","{{$October}}","{{$November}}","{{$December}}" ], 'monthNamesShort' : [ "{{$Jan}}","{{$Feb}}","{{$Mar}}","{{$Apr}}","{{$MayShort}}","{{$Jun}}","{{$Jul}}","{{$Aug}}","{{$Sep}}","{{$Oct}}","{{$Nov}}","{{$Dec}}" ], 'dayNames' : ["{{$Sunday}}","{{$Monday}}","{{$Tuesday}}","{{$Wednesday}}","{{$Thursday}}","{{$Friday}}","{{$Saturday}}"], diff --git a/view/tpl/messages_widget.tpl b/view/tpl/messages_widget.tpl index df91a05ef..2201095bd 100644 --- a/view/tpl/messages_widget.tpl +++ b/view/tpl/messages_widget.tpl @@ -40,7 +40,7 @@ {7} <strong title="{4}">{4}</strong> </div> - <small class="messages-timeago opacity-75" title="{1}"></small> + <small class="autotime-narrow opacity-75" title="{1}"></small> </div> <div class="text-truncate"> <small class="opacity-75" title="{5}">{5}</small> @@ -82,7 +82,7 @@ {{$e.icon}} <strong title="{{$e.author_name}}">{{$e.author_name}}</strong> </div> - <small class="messages-timeago opacity-75" title="{{$e.created}}"></small> + <small class="autotime-narrow opacity-75" title="{{$e.created}}"></small> </div> <div class="text-truncate"> <small class="opacity-75" title="{{$e.author_addr}}">{{$e.author_addr}}</small> @@ -116,7 +116,8 @@ let file; $(document).ready(function () { - $('.messages-timeago').timeago(); + updateRelativeTime('.autotime-narrow'); + if (bParam_mid) { $('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active'); } @@ -137,8 +138,15 @@ get_messages_page(); }); - $("#messages-file").on('change', function(data) { - file = $("#messages-file").val(); + $('#messages-file').on('input', function(e) { + file = e.currentTarget.value; + + let datalist = document.getElementById('data_filetags'); + let options = [...datalist.options].map(option => option.value); + + if (!options.includes(file)) { + return; + } $('#messages-container .message').remove(); $('#messages-file-container').addClass('active sticky-top'); @@ -154,6 +162,7 @@ $("#messages-file").attr('placeholder', '{{$strings.file_filter}}'); $('#messages-author-container').removeClass('active sticky-top'); + $('#messages-file-container').removeClass('active sticky-top'); $('#messages-author-input-clear').addClass('d-none'); $('#messages-container .message').remove(); author = ''; @@ -243,7 +252,7 @@ $('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active'); } $('#messages-loading').hide(); - $('.messages-timeago').timeago(); + updateRelativeTime('.autotime-narrow'); }); diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 97901e052..9f7427a7d 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -7,43 +7,53 @@ var sse_fallback_interval; var sse_sys_only = {{$sys_only}}; - $(document).ready(function() { - let notifications_parent; - if ($('#notifications_wrapper').length) { - notifications_parent = $('#notifications_wrapper')[0].parentElement.id; - } - - $('.notifications-btn').click(function() { - $('#notifications_wrapper').removeClass('d-none'); - - if($('#notifications_wrapper').hasClass('fs')) { - $('#notifications_wrapper').prependTo('#' + notifications_parent); - $('#notifications_wrapper').addClass('d-none'); + document.addEventListener("DOMContentLoaded", function() { + let notificationsWrapper = document.getElementById('notifications_wrapper'); + let notificationsParent = notificationsWrapper ? notificationsWrapper.parentElement.id : null; + let notificationsBtn = document.querySelector('.notifications-btn'); + + // Event listener for notifications button + if (notificationsBtn) { + notificationsBtn.addEventListener('click', function() { + // Remove the 'd-none' class to show the notifications wrapper + notificationsWrapper.classList.remove('d-none'); + + // Check if the notifications wrapper has the 'fs' class + if (notificationsWrapper.classList.contains('fs')) { + // Prepend the notifications wrapper back to its original parent and hide it + document.getElementById(notificationsParent).appendChild(notificationsWrapper); + notificationsWrapper.classList.add('d-none'); + } else { + // Otherwise, prepend the notifications wrapper to 'main' + document.querySelector('main').prepend(notificationsWrapper); + } - } - else { - $('#notifications_wrapper').prependTo('main'); - } + // Toggle the 'fs' class + notificationsWrapper.classList.toggle('fs'); + }); + } - $('#notifications_wrapper').toggleClass('fs'); - if($('#navbar-collapse-2').hasClass('show')){ - $('#navbar-collapse-2').removeClass('show'); - } - }); + // Event listener for clicking a notification + document.addEventListener('click', function(event) { + if (event.target.closest('a') && event.target.closest('a').classList.contains('notification')) { + console.log(1) + if (notificationsWrapper.classList.contains('fs')) { + // Move notifications wrapper back to its original parent and hide it + notificationsWrapper.classList.remove('fs'); + notificationsWrapper.classList.add('d-none'); + document.getElementById(notificationsParent).appendChild(notificationsWrapper); - $(document).on('click', '.notification', function() { - if($('#notifications_wrapper').hasClass('fs')) { - $('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs').addClass('d-none'); + } } }); if(sse_enabled) { if(typeof(window.SharedWorker) === 'undefined') { // notifications with multiple tabs open will not work very well in this scenario - var evtSource = new EventSource('/sse'); + let evtSource = new EventSource('/sse'); evtSource.addEventListener('notifications', function(e) { - var obj = JSON.parse(e.data); + let obj = JSON.parse(e.data); sse_handleNotifications(obj, false, false); }, false); @@ -56,7 +66,7 @@ } else { - var myWorker = new SharedWorker('/view/js/sse_worker.js', localUser); + let myWorker = new SharedWorker('/view/js/sse_worker.js', localUser); myWorker.port.onmessage = function(e) { obj = e.data; @@ -72,8 +82,9 @@ } } else { - if (!document.hidden) + if (!document.hidden) { sse_fallback_interval = setInterval(sse_fallback, updateInterval); + } document.addEventListener('visibilitychange', function() { if (document.hidden) { @@ -88,234 +99,341 @@ }, false); } - $('.notification-link').on('click', { replace: true, followup: false }, sse_bs_notifications); + document.querySelectorAll('.notification-link').forEach(function (element) { + element.addEventListener('click', function (element) { + sse_bs_notifications(element, true, false); + }); + }); - $('.notification-filter').on('keypress', function(e) { - if(e.which == 13) { // enter - this.blur(); - sse_offset = 0; - $("#nav-" + sse_type + "-menu").html(''); - $("#nav-" + sse_type + "-loading").show(); + document.querySelectorAll('.notification-filter').forEach(function (element) { + element.addEventListener('keypress', function(e) { + if (e.which == 13) { // Enter key + this.blur(); + sse_offset = 0; - var cn_val = $('#cn-' + sse_type + '-input').length ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : ''; + // Clear the content of the menu + document.getElementById("nav-" + sse_type + "-menu").innerHTML = ''; + + // Show the loading element + document.getElementById("nav-" + sse_type + "-loading").style.display = 'block'; + + // Get the value from the input element + var cn_val = document.getElementById('cn-' + sse_type + '-input') ? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase() : ''; + + // Send a GET request using the Fetch API + fetch('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val)) + .then(response => response.json()) + .then(obj => { + console.log('sse: bootstraping ' + sse_type); + console.log(obj); + + sse_bs_active = false; + sse_partial_result = true; + sse_offset = obj[sse_type].offset; + if (sse_offset < 0) { + document.getElementById("nav-" + sse_type + "-loading").style.display = 'none'; + } + + sse_handleNotifications(obj, true, false); + }) + .catch(error => { + console.error('Error fetching data:', error); + }); + } + }); + }); - $.get('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val), function(obj) { - console.log('sse: bootstraping ' + sse_type); - console.log(obj); + document.querySelectorAll('.notifications-textinput-clear').forEach(function (element) { + element.addEventListener('click', function(e) { + if (!sse_partial_result) return; - sse_bs_active = false; - sse_partial_result = true; - sse_offset = obj[sse_type].offset; - if(sse_offset < 0) - $("#nav-" + sse_type + "-loading").hide(); + // Clear the content of the menu + document.getElementById("nav-" + sse_type + "-menu").innerHTML = ''; - sse_handleNotifications(obj, true, false); + // Show the loading element + document.getElementById("nav-" + sse_type + "-loading").style.display = 'block'; - }); - } + // Send a GET request using the Fetch API + fetch('/sse_bs/' + sse_type) + .then(response => response.json()) + .then(obj => { + console.log('sse: bootstraping ' + sse_type); + console.log(obj); + + sse_bs_active = false; + sse_partial_result = false; + sse_offset = obj[sse_type].offset; + if (sse_offset < 0) { + document.getElementById("nav-" + sse_type + "-loading").style.display = 'none'; + } + + sse_handleNotifications(obj, true, false); + }) + .catch(error => { + console.error('Error fetching data:', error); + }); + }); }); - $('.notifications-textinput-clear').on('click', function(e) { - if(! sse_partial_result) - return; + document.querySelectorAll('.notification-content').forEach(function(element) { + element.addEventListener('scroll', function() { + if (this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight / 7)) { + sse_bs_notifications(sse_type, false, true); + } + }); + }); - $("#nav-" + sse_type + "-menu").html(''); - $("#nav-" + sse_type + "-loading").show(); - $.get('/sse_bs/' + sse_type, function(obj) { - console.log('sse: bootstraping ' + sse_type); - console.log(obj); + {{foreach $notifications as $notification}} + {{if $notification.filter}} + + document.querySelectorAll('#tt-{{$notification.type}}-only').forEach(function (element) { + element.addEventListener('click', function(e) { + + let element = e.target.closest('div'); + let menu = document.querySelector('#nav-{{$notification.type}}-menu'); + let notifications = menu.querySelectorAll('.notification[data-thread_top="false"]'); + + // Function to check if an element is visible + function isVisible(el) { + return el.offsetWidth > 0 && el.offsetHeight > 0; + } - sse_bs_active = false; - sse_partial_result = false; - sse_offset = obj[sse_type].offset; - if(sse_offset < 0) - $("#nav-" + sse_type + "-loading").hide(); + if (element.classList.contains('active') && element.classList.contains('sticky-top')) { + notifications.forEach(function(notification) { + notification.classList.remove('tt-filter-active'); + }); + element.classList.remove('active', 'sticky-top'); + } else { + notifications.forEach(function(notification) { + notification.classList.add('tt-filter-active'); + }); + element.classList.add('active', 'sticky-top'); - sse_handleNotifications(obj, true, false); + // Count the visible notifications + let visibleNotifications = Array.from(menu.querySelectorAll('.notification')).filter(isVisible).length; + + // Load more notifications if the visible count is low + if (sse_type && sse_offset !== -1 && visibleNotifications < 15) { + sse_bs_notifications(sse_type, false, true); + } + } }); }); - $('.notification-content').on('scroll', function() { - if(this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight/7)) { - sse_bs_notifications(sse_type, false, true); - } - }); + document.querySelectorAll('#cn-{{$notification.type}}-input-clear').forEach(function (element) { + element.addEventListener('click', function(e) { + let input = document.getElementById('cn-{{$notification.type}}-input'); + input.value = ''; - }); + // Remove 'active' and 'sticky-top' classes to the 'only' element + let onlyElement = document.getElementById('cn-{{$notification.type}}-only'); + onlyElement.classList.remove('active', 'sticky-top'); - $(document).on('hz:sse_setNotificationsStatus', function(e, data) { - sse_setNotificationsStatus(data); - }); + // Add 'd-none' class from the clear button + let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear'); + clearButton.classList.add('d-none'); - $(document).on('hz:sse_bs_init', function() { - sse_bs_init(); - }); + // Remove the 'cn-filter-active' class from all notifications + let notifications = document.querySelectorAll("#nav-{{$notification.type}}-menu .notification"); + notifications.forEach(function(notification) { + notification.classList.remove('cn-filter-active'); + }); + }); + }); - $(document).on('hz:sse_bs_counts', function() { - sse_bs_counts(); - }); + document.querySelectorAll('#cn-{{$notification.type}}-input').forEach(function (element) { + element.addEventListener('input', function(e) { + let input = e.target; + let val = input.value.toString().toLowerCase(); + + // Check if there is input value + if (val) { + // Remove '%' if it's at the beginning of the input value + val = val.indexOf('%') === 0 ? val.substring(1) : val; + + // Add 'active' and 'sticky-top' classes to the 'only' element + let onlyElement = document.getElementById('cn-{{$notification.type}}-only'); + onlyElement.classList.add('active', 'sticky-top'); + + // Remove 'd-none' class from the clear button + let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear'); + clearButton.classList.remove('d-none'); + } else { + // Remove 'active' and 'sticky-top' classes from the 'only' element + let onlyElement = document.getElementById('cn-{{$notification.type}}-only'); + onlyElement.classList.remove('active', 'sticky-top'); + + // Add 'd-none' class to the clear button + let clearButton = document.getElementById('cn-{{$notification.type}}-input-clear'); + clearButton.classList.add('d-none'); + } - {{foreach $notifications as $notification}} - {{if $notification.filter}} - $(document).on('click', '#tt-{{$notification.type}}-only', function(e) { - if($(this).hasClass('active sticky-top')) { - $('#nav-{{$notification.type}}-menu .notification[data-thread_top=false]').removeClass('tt-filter-active'); - $(this).removeClass('active sticky-top'); - } - else { - $('#nav-{{$notification.type}}-menu .notification[data-thread_top=false]').addClass('tt-filter-active'); - $(this).addClass('active sticky-top'); - // load more notifications if visible notifications count is low - if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':visible').length < 15) { - sse_bs_notifications(sse_type, false, true); - } - } + // Loop through each notification and apply filter logic + let notifications = document.querySelectorAll("#nav-{{$notification.type}}-menu .notification"); + notifications.forEach(function(el) { + let cn = el.dataset.contact_name.toString().toLowerCase(); + let ca = el.dataset.contact_addr.toString().toLowerCase(); + + // Check if the contact name or address matches the input value + if (cn.indexOf(val) === -1 && ca.indexOf(val) === -1) { + el.classList.add('cn-filter-active'); + } else { + el.classList.remove('cn-filter-active'); + } + }); + }); + }); - }); + {{/if}} + {{/foreach}} - $(document).on('click', '#cn-{{$notification.type}}-input-clear', function(e) { - $('#cn-{{$notification.type}}-input').val(''); - $('#cn-{{$notification.type}}-only').removeClass('active sticky-top'); - $("#nav-{{$notification.type}}-menu .notification").removeClass('cn-filter-active'); - $('#cn-{{$notification.type}}-input-clear').addClass('d-none'); }); - $(document).on('input', '#cn-{{$notification.type}}-input', function(e) { - var val = $('#cn-{{$notification.type}}-input').val().toString().toLowerCase(); - if(val) { - val = val.indexOf('%') == 0 ? val.substring(1) : val; - $('#cn-{{$notification.type}}-only').addClass('active sticky-top'); - $('#cn-{{$notification.type}}-input-clear').removeClass('d-none'); - } - else { - $('#cn-{{$notification.type}}-only').removeClass('active sticky-top'); - $('#cn-{{$notification.type}}-input-clear').addClass('d-none'); - } + document.addEventListener('hz:sse_setNotificationsStatus', function(e) { + sse_setNotificationsStatus(e.detail); + }); - $("#nav-{{$notification.type}}-menu .notification").each(function(i, el){ - var cn = $(el).data('contact_name').toString().toLowerCase(); - var ca = $(el).data('contact_addr').toString().toLowerCase(); + document.addEventListener('hz:sse_bs_init', function() { + sse_bs_init(); + }); - if(cn.indexOf(val) === -1 && ca.indexOf(val) === -1) - $(this).addClass('cn-filter-active'); - else - $(this).removeClass('cn-filter-active'); - }); + document.addEventListener('hz:sse_bs_counts', function() { + sse_bs_counts(); }); - {{/if}} - {{/foreach}} + function sse_bs_init() { - if(sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined' ) { - if(typeof sse_type === 'undefined') + // Check if 'notification_open' exists in sessionStorage or if sse_type is defined + if (sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined') { + if (typeof sse_type === 'undefined') { sse_type = sessionStorage.getItem('notification_open'); + } + + // Add the 'show' class to the appropriate element + let subNav = document.getElementById("nav-" + sse_type + "-sub"); + if (subNav) { + subNav.classList.add('show'); + } - $("#nav-" + sse_type + "-sub").addClass('show'); + // Call the sse_bs_notifications function sse_bs_notifications(sse_type, true, false); - } - else { + } else { + // Call the sse_bs_counts function if conditions are not met sse_bs_counts(); } } function sse_bs_counts() { - if(sse_bs_active || sse_sys_only) { + if (sse_bs_active || sse_sys_only) { return; } sse_bs_active = true; - $.ajax({ - type: 'post', - url: '/sse_bs', - data: { sse_rmids } - }).done( function(obj) { + // Use the fetch API to send the POST request with the data + fetch('/sse_bs', { + method: 'POST', + body: new URLSearchParams({sse_rmids: sse_rmids}) + }) + .then(response => response.json()) // Parse the JSON response + .then(obj => { console.log(obj); sse_bs_active = false; sse_rmids = []; sse_handleNotifications(obj, true, false); + }) + .catch(error => { + console.error('Error:', error); + sse_bs_active = false; }); } function sse_bs_notifications(e, replace, followup) { - - if(sse_bs_active || sse_sys_only) { + if (sse_bs_active || sse_sys_only) { return; } let manual = false; - if(typeof replace === 'undefined') + if (typeof replace === 'undefined') { replace = e.data.replace; + } - if(typeof followup === 'undefined') + if (typeof followup === 'undefined') { followup = e.data.followup; + } - if(typeof e === 'string') { + if (typeof e === 'string') { sse_type = e; - } - else { + } else { manual = true; sse_offset = 0; sse_type = e.target.dataset.sse_type; } - if(typeof sse_type === 'undefined') + if (typeof sse_type === 'undefined') { return; + } - if(followup || !manual || !$('#notification-link-' + sse_type).hasClass('collapsed')) { + if (followup || !manual || !document.getElementById('notification-link-' + sse_type).classList.contains('collapsed')) { - if(sse_offset >= 0) { - $("#nav-" + sse_type + "-loading").show(); + if (sse_offset >= 0) { + document.getElementById("nav-" + sse_type + "-loading").style.display = 'block'; } sessionStorage.setItem('notification_open', sse_type); - if(sse_offset !== -1 || replace) { - var cn_val = (($('#cn-' + sse_type + '-input').length && sse_partial_result) ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : ''); + if (sse_offset !== -1 || replace) { + let cn_val = (document.getElementById('cn-' + sse_type + '-input') && sse_partial_result) + ? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase() + : ''; - $("#nav-" + sse_type + "-loading").show(); + document.getElementById("nav-" + sse_type + "-loading").style.display = 'block'; sse_bs_active = true; - $.ajax({ - type: 'post', - url: '/sse_bs/' + sse_type + '/' + sse_offset, - nquery: encodeURIComponent(cn_val), - data: { sse_rmids } - }).done(function(obj) { + // Send POST request using fetch API + fetch('/sse_bs/' + sse_type + '/' + sse_offset, { + method: 'POST', + body: new URLSearchParams({ + sse_rmids: sse_rmids, + nquery: encodeURIComponent(cn_val) + }) + }) + .then(response => response.json()) // Parse the JSON response + .then(obj => { console.log('sse: bootstraping ' + sse_type); console.log(obj); sse_bs_active = false; sse_rmids = []; - $("#nav-" + sse_type + "-loading").hide(); + document.getElementById("nav-" + sse_type + "-loading").style.display = 'none'; sse_offset = obj[sse_type].offset; sse_handleNotifications(obj, replace, followup); + }) + .catch(error => { + console.error('Error:', error); + sse_bs_active = false; }); + } else { + document.getElementById("nav-" + sse_type + "-loading").style.display = 'none'; } - else { - $("#nav-" + sse_type + "-loading").hide(); - } - } - else { + } else { sessionStorage.removeItem('notification_open'); } } function sse_handleNotifications(obj, replace, followup) { - - // notice and info - - if(obj.notice) { - $(obj.notice.notifications).each(function() { - toast(this, 'danger'); + // Notice and info notifications + if (obj.notice) { + obj.notice.notifications.forEach(notification => { + toast(notification, 'danger'); }); } - if(obj.info) { - $(obj.info.notifications).each(function(){ - toast(this, 'info'); + if (obj.info) { + obj.info.notifications.forEach(notification => { + toast(notification, 'info'); }); } @@ -325,218 +443,262 @@ let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; let secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; - let all_notifications = primary_notifications.concat(secondary_notifications); + let all_notifications = [...primary_notifications, ...secondary_notifications]; - all_notifications.forEach(function(type, index) { - if(typeof obj[type] === typeof undefined) - return true; + all_notifications.forEach(type => { + if (typeof obj[type] === 'undefined') { + return; + } - var count = Number(obj[type].count); + let count = Number(obj[type].count); - if(obj[type].count) { - $('.' + type + '-button').fadeIn(); - if(replace || followup) { - $('.' + type + '-update').html(count >= 100 ? '99+' : count); - } - else { - count = count + Number($('.' + type + '-update').html().replace(/\++$/, '')); - $('.' + type + '-update').html(count >= 100 ? '99+' : count); + // Show notifications and update count + let updateElement = document.querySelector('.' + type + '-update'); + let buttonElement = document.querySelector('.' + type + '-button'); + let subElement = document.getElementById('nav-' + type + '-sub'); + + if (count) { + if (buttonElement) buttonElement.style.display = 'block'; // Fade-in effect replaced by display block + if (replace || followup) { + updateElement.textContent = count >= 100 ? '99+' : count; + } else { + count = count + Number(updateElement.textContent.replace(/\++$/, '')); + updateElement.textContent = count >= 100 ? '99+' : count; } - } - else { - $('.' + type + '-update').html('0'); - $('#nav-' + type + '-sub').removeClass('show'); - $('.' + type + '-button').fadeOut(function() { + } else { + if (updateElement) updateElement.textContent = '0'; + if (subElement) subElement.classList.remove('show'); + if (buttonElement) { + buttonElement.style.display = 'none'; // Fade-out effect replaced by display none sse_setNotificationsStatus(); - }); + } } - if(obj[type].notifications.length) + + if (obj[type].notifications.length) { sse_handleNotificationsItems(type, obj[type].notifications, replace, followup); + } }); sse_setNotificationsStatus(); - // load more notifications if visible notifications count becomes low - if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':not(.tt-filter-active)').length < 15) { - sse_bs_notifications(sse_type, false, true); + // Load more notifications if visible notifications count becomes low + if (sse_type && sse_offset !== -1) { + let menu = document.getElementById('nav-' + sse_type + '-menu'); + if (menu && menu.children.length < 15) { + sse_bs_notifications(sse_type, false, true); + } } - - } function sse_handleNotificationsItems(notifyType, data, replace, followup) { - let notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src'))); - let notify_menu = $("#nav-" + notifyType + "-menu"); - let notify_loading = $("#nav-" + notifyType + "-loading"); - let notify_count = $("." + notifyType + "-update"); + // Get the template, adjust based on the notification type + let notifications_tpl = (notifyType === 'forums') + ? decodeURIComponent(document.querySelector("#nav-notifications-forums-template[rel=template]").innerHTML.replace('data-src', 'src')) + : decodeURIComponent(document.querySelector("#nav-notifications-template[rel=template]").innerHTML.replace('data-src', 'src')); - if(replace && !followup) { - notify_menu.html(''); - notify_loading.hide(); - } - - $(data).each(function() { + let notify_menu = document.getElementById("nav-" + notifyType + "-menu"); + let notify_loading = document.getElementById("nav-" + notifyType + "-loading"); + let notify_count = document.getElementsByClassName(notifyType + "-update"); - // do not add a notification if it is already present - - // TODO: this is questionable because at least in 'notify' notification type an item can have more than one notifications - // e.g. one for the mention and one for the item itself. - //if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length) - // return true; + if (replace && !followup) { + notify_menu.innerHTML = ''; // Clear menu + notify_loading.style.display = 'none'; // Hide loading + } - if(!replace && !followup && (this.thread_top && notifyType === 'network')) { - $(document).trigger('hz:handleNetworkNotificationsItems', this); + data.forEach(notification => { + // Special handling for network notifications + if (!replace && !followup && notification.thread_top && notifyType === 'network') { + document.dispatchEvent(new CustomEvent('hz:handleNetworkNotificationsItems', { detail: notification })); } - let html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body); - notify_menu.append(html); + // Prepare HTML using the template + let html = notifications_tpl.format( + notification.notify_link, + notification.photo, + notification.name, + notification.addr, + notification.message, + notification.when, + notification.hclass, + notification.b64mid, + notification.notify_id, + notification.thread_top, + notification.unseen, + notification.private_forum, + encodeURIComponent(notification.mids), + notification.body + ); + + // Append the new notification HTML to the menu + notify_menu.insertAdjacentHTML('beforeend', html); }); - if(!replace && !followup) { - $("#nav-" + notifyType + "-menu .notification").sort(function(a,b) { - a = new Date(a.dataset.when); - b = new Date(b.dataset.when); - return a > b ? -1 : a < b ? 1 : 0; - }).appendTo('#nav-' + notifyType + '-menu'); + // Sort notifications by date + if (!replace && !followup) { + let notifications = Array.from(notify_menu.getElementsByClassName('notification')); + notifications.sort((a, b) => { + let dateA = new Date(a.dataset.when); + let dateB = new Date(b.dataset.when); + return dateA > dateB ? -1 : dateA < dateB ? 1 : 0; + }); + notifications.forEach(notification => notify_menu.appendChild(notification)); } - $("#nav-" + notifyType + "-menu .notifications-autotime").timeago(); - - if($('#tt-' + notifyType + '-only').hasClass('active')) - $('#nav-' + notifyType + '-menu [data-thread_top=false]').addClass('tt-filter-active'); - - if($('#cn-' + notifyType + '-input').length) { - let filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase(); - if(filter) { - filter = filter.indexOf('%') == 0 ? filter.substring(1) : filter; + // Filter thread_top notifications if the filter is active + let filterThreadTop = document.getElementById('tt-' + notifyType + '-only'); + if (filterThreadTop && filterThreadTop.classList.contains('active')) { + let notifications = notify_menu.querySelectorAll('[data-thread_top="false"]'); + notifications.forEach(notification => notification.classList.add('tt-filter-active')); + } - $('#nav-' + notifyType + '-menu .notification').each(function(i, el) { - let cn = $(el).data('contact_name').toString().toLowerCase(); - let ca = $(el).data('contact_addr').toString().toLowerCase(); - if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) - $(el).addClass('cn-filter-active'); - else - $(el).removeClass('cn-filter-active'); + // Filter notifications based on the input field + let filterInput = document.getElementById('cn-' + notifyType + '-input'); + if (filterInput) { + let filter = filterInput.value.toString().toLowerCase(); + if (filter) { + if (filter.indexOf('%') === 0) filter = filter.substring(1); // Remove the percent if it exists + let notifications = notify_menu.querySelectorAll('.notification'); + notifications.forEach(notification => { + let cn = notification.dataset.contact_name.toString().toLowerCase(); + let ca = notification.dataset.contact_addr.toString().toLowerCase(); + if (cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) { + notification.classList.add('cn-filter-active'); + } else { + notification.classList.remove('cn-filter-active'); + } }); } } + + // Update relative time for notifications + updateRelativeTime('.autotime-narrow'); } + function sse_updateNotifications(type, mid) { - /* - if(type === 'pubs') - return true; - */ - if(type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify')) + // Skip processing if the type is 'notify' and the conditions don't match + if (type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify')) { return true; - /* - var count = Number($('.' + type + '-update').html()); - - count--; - - if(count < 1) { - $('.' + type + '-update').html(count); - $('.' + type + '-button').fadeOut(function() { - sse_setNotificationsStatus(); - }); - } - else { - $('.' + type + '-update').html(count); } - */ - $('#nav-' + type + '-menu .notification[data-b64mid=\'' + mid + '\']').fadeOut(function() { - this.remove(); - }); + // Find the notification element based on its 'data-b64mid' attribute + let notification = document.querySelector(`#nav-${type}-menu .notification[data-b64mid='${mid}']`); + if (notification) { + notification.remove(); + } } + function sse_setNotificationsStatus(data) { - var primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; - var secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; - var all_notifications = primary_notifications.concat(secondary_notifications); + let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; + let secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; + let all_notifications = primary_notifications.concat(secondary_notifications); - var primary_available = false; - var any_available = false; + let primary_available = false; + let any_available = false; - all_notifications.forEach(function(type, index) { - if($('.' + type + '-button').css('display') == 'block') { + // Loop through all notifications and check their visibility + all_notifications.forEach(function (type) { + let button = document.querySelector(`.${type}-button`); + if (button && getComputedStyle(button).display === 'block') { any_available = true; - if(primary_notifications.indexOf(type) > -1) + if (primary_notifications.indexOf(type) > -1) { primary_available = true; + } } }); - if(primary_available) { - $('.notifications-btn-icon').removeClass('bi-exclamation-circle'); - $('.notifications-btn-icon').addClass('bi-exclamation-triangle'); - } - else { - $('.notifications-btn-icon').removeClass('bi-exclamation-triangle'); - $('.notifications-btn-icon').addClass('bi-exclamation-circle'); + // Update notification button icon based on the primary notification availability + let notificationIcon = document.querySelector('.notifications-btn-icon'); + if (primary_available) { + notificationIcon.classList.remove('bi-exclamation-circle'); + notificationIcon.classList.add('bi-exclamation-triangle'); + } else { + notificationIcon.classList.remove('bi-exclamation-triangle'); + notificationIcon.classList.add('bi-exclamation-circle'); } - if(any_available) { - $('.notifications-btn').css('opacity', 1); - $('#no_notifications').hide(); - $('#notifications').show(); - } - else { - $('.notifications-btn').css('opacity', 0.5); - $('#navbar-collapse-1').removeClass('show'); - $('#no_notifications').show(); - $('#notifications').hide(); + // Update visibility of notification button and sections + let notificationsBtn = document.querySelector('.notifications-btn'); + let noNotifications = document.querySelector('#no_notifications'); + let notifications = document.querySelector('#notifications'); + let navbarCollapse = document.querySelector('#navbar-collapse-1'); + + if (any_available) { + notificationsBtn.style.opacity = 1; + noNotifications.style.display = 'none'; + notifications.style.display = 'block'; + } else { + notificationsBtn.style.opacity = 0.5; + if (navbarCollapse) navbarCollapse.classList.remove('show'); + noNotifications.style.display = 'block'; + notifications.style.display = 'none'; } - if (typeof data !== typeof undefined) { - data.forEach(function(nmid, index) { - + // Handle specific notifications if 'data' is provided + if (typeof data !== 'undefined') { + data.forEach(function (nmid) { sse_rmids.push(nmid); - if($('.notification[data-b64mid=\'' + nmid + '\']').length) { - $('.notification[data-b64mid=\'' + nmid + '\']').each(function() { - var n = this.parentElement.id.split('-'); - return sse_updateNotifications(n[1], nmid); - }); + // Handle regular notifications + let notification = document.querySelector(`.notification[data-b64mid='${nmid}']`); + if (notification) { + let parentId = notification.parentElement.id.split('-')[1]; + sse_updateNotifications(parentId, nmid); } - // special handling for forum notifications - $('.notification-forum').filter(function() { - var fmids = decodeURIComponent($(this).data('b64mids')); - var n = this.parentElement.id.split('-'); - if(fmids.indexOf(nmid) > -1) { - var fcount = Number($('.' + n[1] + '-update').html()); + // Special handling for forum notifications + let forumNotifications = document.querySelectorAll('.notification-forum'); + forumNotifications.forEach(function (forumNotification) { + let fmids = decodeURIComponent(forumNotification.dataset.b64mids); + let parentId = forumNotification.parentElement.id.split('-')[1]; + + if (fmids.indexOf(nmid) > -1) { + let updateElem = document.querySelector(`.${parentId}-update`); + let fcount = Number(updateElem.innerText); fcount--; - $('.' + n[1] + '-update').html(fcount); - if(fcount < 1) { - $('.' + n[1] + '-button').fadeOut(); - $('#nav-' + n[1] + '-sub').removeClass('show'); + updateElem.innerText = fcount; + + if (fcount < 1) { + let button = document.querySelector(`.${parentId}-button`); + button.style.display = 'none'; + let subMenu = document.querySelector(`#nav-${parentId}-sub`); + if (subMenu) subMenu.classList.remove('show'); } - var count = Number($(this).find('.bg-secondary').html()); + + let countElem = forumNotification.querySelector('.bg-secondary'); + let count = Number(countElem.innerText); count--; - $(this).find('.bg-secondary').html(count); - if(count < 1) - $(this).remove(); + countElem.innerText = count; + + if (count < 1) { + forumNotification.remove(); + } } }); }); } - } function sse_fallback() { - $.get('/sse', function(obj) { - if(! obj) - return; + fetch('/sse') + .then(response => response.json()) + .then(obj => { + if (!obj) return; - console.log('sse fallback'); - console.log(obj); + console.log('sse fallback'); + console.log(obj); - sse_handleNotifications(obj, false, false); - }); + sse_handleNotifications(obj, false, false); + }) + .catch(error => { + console.error('Error fetching SSE data:', error); + }); } + </script> {{if !$sys_only}} @@ -552,7 +714,7 @@ <div class="text-truncate pe-1"> <strong title="{2} - {3}">{2}</strong> </div> - <small class="notifications-autotime opacity-75" title="{5}"></small> + <small class="autotime-narrow opacity-75" title="{5}"></small> </div> <div class="text-truncate">{4}</div> </div> diff --git a/view/tpl/pinned_item.tpl b/view/tpl/pinned_item.tpl index 90905a145..aa5b94664 100644 --- a/view/tpl/pinned_item.tpl +++ b/view/tpl/pinned_item.tpl @@ -214,5 +214,5 @@ </script> {{/if}} <script> - $(".pinned-item .autotime").timeago(); + updateRelativeTime('.autotime'); </script> diff --git a/view/tpl/search_item.tpl b/view/tpl/search_item.tpl index 709e40a13..d693c4d37 100644 --- a/view/tpl/search_item.tpl +++ b/view/tpl/search_item.tpl @@ -26,18 +26,24 @@ {{if $item.location}} {{$item.location}} {{/if}} - {{if $item.delayed}} - <i class="bi bi-clock"></i> - {{/if}} {{if $item.editedtime}} - <i class="bi bi-pencil"></i> + <i class="bi bi-pencil" title="{{$item.editedtime}}"></i> {{/if}} {{if $item.verified}} <i class="bi bi-shield-check" title="{{$item.verified}}"></i> {{elseif $item.forged}} <i class="bi bi-shield-exclamation text-danger" title="{{$item.forged}}"></i> {{/if}} - <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}} {{$item.editedtime}}{{/if}}{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> + {{if $item.no_comment}} + <i class="bi bi-ban" title="{{$item.no_comment}}"></i> + {{/if}} + {{if $item.delayed}} + <i class="bi bi-clock" title="{{$item.delayed}}"></i> + {{/if}} + {{if $item.expiretime}} + <i class="bi bi-clock-history" title="{{$item.expiretime}}"></i> + {{/if}} + <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</small> </div> {{if $item.pinned}} <div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="bi bi-pin-fill"></i></div> diff --git a/view/tpl/uexport.tpl b/view/tpl/uexport.tpl index 099a574e8..ca529f8f7 100644 --- a/view/tpl/uexport.tpl +++ b/view/tpl/uexport.tpl @@ -8,7 +8,7 @@ <p> {{$channel_info}} </p> - <a href="uexport/channel" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$channel_title}}</a> + <a href="uexport/channel" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$channel_title}}</a> </p> <p class="mb-3"> <h3>{{$content_title}}</h3> @@ -17,7 +17,7 @@ {{$items_extra_info}} </p> {{foreach $years as $year}} - <a href="uexport/{{$year}}" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$year}}</a> + <a href="uexport/{{$year}}" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$year}}</a> {{/foreach}} </p> <p class="mb-3"> @@ -26,7 +26,7 @@ {{$wikis_info}} {{$items_extra_info}} </p> - <a href="uexport/wikis" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$wikis_title}}</a> + <a href="uexport/wikis" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$wikis_title}}</a> </p> <p class="mb-3"> <h3>{{$webpages_title}}</h3> @@ -34,7 +34,7 @@ {{$webpages_info}} {{$items_extra_info}} </p> - <a href="uexport/webpages" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$webpages_title}}</a> + <a href="uexport/webpages" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$webpages_title}}</a> </p> <p class="mb-3"> <h3>{{$events_title}}</h3> @@ -42,7 +42,7 @@ {{$events_info}} {{$items_extra_info}} </p> - <a href="uexport/events" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$events_title}}</a> + <a href="uexport/events" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$events_title}}</a> </p> <p class="mb-3"> <h3>{{$chatrooms_title}}</h3> @@ -50,7 +50,7 @@ {{$chatrooms_info}} {{$items_extra_info}} </p> - <a href="uexport/chatrooms" class="btn btn-outline-primary"><i class="bi fa-download"></i> {{$chatrooms_title}}</a> + <a href="uexport/chatrooms" class="btn btn-outline-primary"><i class="bi bi-download"></i> {{$chatrooms_title}}</a> </p> </div> </div> |